@dxos/plugin-assistant 0.8.4-main.67995b8 → 0.8.4-main.ae835ea

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 (479) hide show
  1. package/dist/lib/browser/{BlueprintContainer-IZ4AK5EO.mjs → BlueprintContainer-GMSYKGSO.mjs} +14 -6
  2. package/dist/lib/browser/BlueprintContainer-GMSYKGSO.mjs.map +7 -0
  3. package/dist/lib/browser/ChatCompanion-M3FDKTQM.mjs +151 -0
  4. package/dist/lib/browser/ChatCompanion-M3FDKTQM.mjs.map +7 -0
  5. package/dist/lib/browser/{ChatContainer-RP3QEXYX.mjs → ChatContainer-KAH7XITI.mjs} +34 -14
  6. package/dist/lib/browser/ChatContainer-KAH7XITI.mjs.map +7 -0
  7. package/dist/lib/browser/{ChatDialog-ZVLXFHEY.mjs → ChatDialog-ZWRGABW6.mjs} +27 -12
  8. package/dist/lib/browser/ChatDialog-ZWRGABW6.mjs.map +7 -0
  9. package/dist/lib/browser/ai-service-ERTZBTP3.mjs +19 -0
  10. package/dist/lib/browser/ai-service-ERTZBTP3.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-builder-XSEOKJLG.mjs → app-graph-builder-R5T7BJPC.mjs} +60 -41
  12. package/dist/lib/browser/app-graph-builder-R5T7BJPC.mjs.map +7 -0
  13. package/dist/lib/browser/blueprint-definition-AGTDXTXO.mjs +13 -0
  14. package/dist/lib/browser/blueprint-definition-AGTDXTXO.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-357IHWQL.mjs +1519 -0
  16. package/dist/lib/browser/chunk-357IHWQL.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-A2NVNXPL.mjs +170 -0
  18. package/dist/lib/browser/chunk-A2NVNXPL.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-CQW6UPJM.mjs +199 -0
  20. package/dist/lib/browser/chunk-CQW6UPJM.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-GNI6HL6G.mjs +219 -0
  22. package/dist/lib/browser/chunk-GNI6HL6G.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-GXHZTOWJ.mjs +378 -0
  24. package/dist/lib/browser/chunk-GXHZTOWJ.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  26. package/dist/lib/browser/chunk-J5LGTIGS.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-L5OA5OGS.mjs +262 -0
  28. package/dist/lib/browser/chunk-L5OA5OGS.mjs.map +7 -0
  29. package/dist/lib/browser/chunk-MEN5WTLA.mjs +182 -0
  30. package/dist/lib/browser/chunk-MEN5WTLA.mjs.map +7 -0
  31. package/dist/lib/browser/chunk-PUG24BEC.mjs +277 -0
  32. package/dist/lib/browser/chunk-PUG24BEC.mjs.map +7 -0
  33. package/dist/lib/browser/chunk-SJJV3HEX.mjs +16 -0
  34. package/dist/lib/browser/chunk-SJJV3HEX.mjs.map +7 -0
  35. package/dist/lib/browser/chunk-WBG5PTSX.mjs +23 -0
  36. package/dist/lib/browser/chunk-WBG5PTSX.mjs.map +7 -0
  37. package/dist/lib/browser/edge-model-resolver-O6OFYIO2.mjs +18 -0
  38. package/dist/lib/browser/edge-model-resolver-O6OFYIO2.mjs.map +7 -0
  39. package/dist/lib/browser/index.mjs +185 -76
  40. package/dist/lib/browser/index.mjs.map +4 -4
  41. package/dist/lib/browser/intent-resolver-3C5TABOX.mjs +136 -0
  42. package/dist/lib/browser/intent-resolver-3C5TABOX.mjs.map +7 -0
  43. package/dist/lib/browser/local-model-resolver-GO6ZEMLL.mjs +17 -0
  44. package/dist/lib/browser/local-model-resolver-GO6ZEMLL.mjs.map +7 -0
  45. package/dist/lib/browser/meta.json +1 -1
  46. package/dist/lib/browser/react-surface-EYKA5IFU.mjs +90 -0
  47. package/dist/lib/browser/react-surface-EYKA5IFU.mjs.map +7 -0
  48. package/dist/lib/browser/{settings-5GTTCVGD.mjs → settings-VMVBYZLN.mjs} +8 -7
  49. package/dist/lib/{node-esm/settings-J2EXEM5H.mjs.map → browser/settings-VMVBYZLN.mjs.map} +1 -1
  50. package/dist/lib/browser/state-CFREPBB6.mjs +21 -0
  51. package/dist/lib/browser/state-CFREPBB6.mjs.map +7 -0
  52. package/dist/lib/browser/toolkit-F3NQ7TSI.mjs +21 -0
  53. package/dist/lib/browser/toolkit-F3NQ7TSI.mjs.map +7 -0
  54. package/dist/lib/browser/types/index.mjs +7 -4
  55. package/dist/lib/node-esm/{BlueprintContainer-RGTMNLNX.mjs → BlueprintContainer-6GBLMK4Z.mjs} +14 -6
  56. package/dist/lib/node-esm/BlueprintContainer-6GBLMK4Z.mjs.map +7 -0
  57. package/dist/lib/node-esm/ChatCompanion-OV426GCP.mjs +152 -0
  58. package/dist/lib/node-esm/ChatCompanion-OV426GCP.mjs.map +7 -0
  59. package/dist/lib/node-esm/{ChatContainer-W3W6FWV3.mjs → ChatContainer-UKY7NHFY.mjs} +34 -14
  60. package/dist/lib/node-esm/ChatContainer-UKY7NHFY.mjs.map +7 -0
  61. package/dist/lib/node-esm/{ChatDialog-QW4JRKVO.mjs → ChatDialog-2BDQIEXH.mjs} +27 -12
  62. package/dist/lib/node-esm/ChatDialog-2BDQIEXH.mjs.map +7 -0
  63. package/dist/lib/node-esm/ai-service-MUYLV3NT.mjs +20 -0
  64. package/dist/lib/node-esm/ai-service-MUYLV3NT.mjs.map +7 -0
  65. package/dist/lib/node-esm/{app-graph-builder-PANCJUHV.mjs → app-graph-builder-I52RYVWH.mjs} +60 -41
  66. package/dist/lib/node-esm/app-graph-builder-I52RYVWH.mjs.map +7 -0
  67. package/dist/lib/node-esm/blueprint-definition-CFCUD2VC.mjs +14 -0
  68. package/dist/lib/node-esm/blueprint-definition-CFCUD2VC.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-2CAETDW2.mjs +183 -0
  70. package/dist/lib/node-esm/chunk-2CAETDW2.mjs.map +7 -0
  71. package/dist/lib/node-esm/chunk-4J5FYNNM.mjs +171 -0
  72. package/dist/lib/node-esm/chunk-4J5FYNNM.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-5ARE4R2I.mjs +220 -0
  74. package/dist/lib/node-esm/chunk-5ARE4R2I.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-7ZYOYW7F.mjs +264 -0
  76. package/dist/lib/node-esm/chunk-7ZYOYW7F.mjs.map +7 -0
  77. package/dist/lib/node-esm/chunk-HJPIYMWD.mjs +1520 -0
  78. package/dist/lib/node-esm/chunk-HJPIYMWD.mjs.map +7 -0
  79. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  80. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  81. package/dist/lib/node-esm/chunk-O36P4LN5.mjs +200 -0
  82. package/dist/lib/node-esm/chunk-O36P4LN5.mjs.map +7 -0
  83. package/dist/lib/node-esm/chunk-WE6KTH72.mjs +25 -0
  84. package/dist/lib/node-esm/chunk-WE6KTH72.mjs.map +7 -0
  85. package/dist/lib/node-esm/chunk-XM4BVQQR.mjs +278 -0
  86. package/dist/lib/node-esm/chunk-XM4BVQQR.mjs.map +7 -0
  87. package/dist/lib/node-esm/chunk-XQBL2SBL.mjs +17 -0
  88. package/dist/lib/node-esm/chunk-XQBL2SBL.mjs.map +7 -0
  89. package/dist/lib/node-esm/chunk-YIO5MEPR.mjs +380 -0
  90. package/dist/lib/node-esm/chunk-YIO5MEPR.mjs.map +7 -0
  91. package/dist/lib/node-esm/edge-model-resolver-2ARXDOYS.mjs +19 -0
  92. package/dist/lib/node-esm/edge-model-resolver-2ARXDOYS.mjs.map +7 -0
  93. package/dist/lib/node-esm/index.mjs +185 -76
  94. package/dist/lib/node-esm/index.mjs.map +4 -4
  95. package/dist/lib/node-esm/intent-resolver-HQ27YALS.mjs +137 -0
  96. package/dist/lib/node-esm/intent-resolver-HQ27YALS.mjs.map +7 -0
  97. package/dist/lib/node-esm/local-model-resolver-WOQ2D2R2.mjs +18 -0
  98. package/dist/lib/node-esm/local-model-resolver-WOQ2D2R2.mjs.map +7 -0
  99. package/dist/lib/node-esm/meta.json +1 -1
  100. package/dist/lib/node-esm/react-surface-UOC3CBPH.mjs +91 -0
  101. package/dist/lib/node-esm/react-surface-UOC3CBPH.mjs.map +7 -0
  102. package/dist/lib/node-esm/{settings-J2EXEM5H.mjs → settings-7AUVNDM2.mjs} +8 -7
  103. package/dist/lib/{browser/settings-5GTTCVGD.mjs.map → node-esm/settings-7AUVNDM2.mjs.map} +1 -1
  104. package/dist/lib/node-esm/state-XXND44OW.mjs +22 -0
  105. package/dist/lib/node-esm/state-XXND44OW.mjs.map +7 -0
  106. package/dist/lib/node-esm/toolkit-7CH5UNSQ.mjs +22 -0
  107. package/dist/lib/node-esm/toolkit-7CH5UNSQ.mjs.map +7 -0
  108. package/dist/lib/node-esm/types/index.mjs +7 -4
  109. package/dist/types/src/AssistantPlugin.d.ts +1 -1
  110. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/ai-service.d.ts +4 -0
  112. package/dist/types/src/capabilities/ai-service.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  114. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  115. package/dist/types/src/capabilities/blueprint-definition.d.ts +7 -0
  116. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  117. package/dist/types/src/capabilities/capabilities.d.ts +11 -0
  118. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  119. package/dist/types/src/capabilities/edge-model-resolver.d.ts +4 -0
  120. package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -0
  121. package/dist/types/src/capabilities/index.d.ts +11 -3
  122. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  123. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  124. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  125. package/dist/types/src/capabilities/local-model-resolver.d.ts +10 -0
  126. package/dist/types/src/capabilities/local-model-resolver.d.ts.map +1 -0
  127. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  128. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  129. package/dist/types/src/capabilities/settings.d.ts +1 -1
  130. package/dist/types/src/capabilities/state.d.ts +4 -0
  131. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  132. package/dist/types/src/capabilities/toolkit.d.ts +4 -0
  133. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
  134. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  135. package/dist/types/src/components/BlueprintContainer.d.ts.map +1 -1
  136. package/dist/types/src/components/Chat/Chat.d.ts +21 -17
  137. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  138. package/dist/types/src/components/Chat/events.d.ts +5 -0
  139. package/dist/types/src/components/Chat/events.d.ts.map +1 -1
  140. package/dist/types/src/components/ChatCompanion.d.ts +13 -0
  141. package/dist/types/src/components/ChatCompanion.d.ts.map +1 -0
  142. package/dist/types/src/components/ChatContainer.d.ts +4 -4
  143. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  144. package/dist/types/src/components/ChatDialog.d.ts.map +1 -1
  145. package/dist/types/src/components/ChatProgress/ChatProgress.d.ts +7 -0
  146. package/dist/types/src/components/ChatProgress/ChatProgress.d.ts.map +1 -0
  147. package/dist/types/src/components/ChatProgress/index.d.ts +2 -0
  148. package/dist/types/src/components/ChatProgress/index.d.ts.map +1 -0
  149. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  150. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts +20 -0
  151. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -0
  152. package/dist/types/src/components/ChatPrompt/ChatPresets.d.ts.map +1 -1
  153. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts +4 -5
  154. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts.map +1 -1
  155. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts +6 -4
  156. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts.map +1 -1
  157. package/dist/types/src/components/ChatPrompt/index.d.ts +1 -1
  158. package/dist/types/src/components/ChatPrompt/index.d.ts.map +1 -1
  159. package/dist/types/src/components/ChatThread/ChatThread.d.ts +12 -7
  160. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
  161. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +120 -33
  162. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  163. package/dist/types/src/components/ChatThread/Link.d.ts +9 -0
  164. package/dist/types/src/components/ChatThread/Link.d.ts.map +1 -0
  165. package/dist/types/src/components/ChatThread/reducers.d.ts +40 -0
  166. package/dist/types/src/components/ChatThread/reducers.d.ts.map +1 -0
  167. package/dist/types/src/components/ChatThread/registry.d.ts +11 -0
  168. package/dist/types/src/components/ChatThread/registry.d.ts.map +1 -0
  169. package/dist/types/src/components/ChatThread/sync.d.ts +36 -0
  170. package/dist/types/src/components/ChatThread/sync.d.ts.map +1 -0
  171. package/dist/types/src/components/ChatThread/sync.test.d.ts +2 -0
  172. package/dist/types/src/components/ChatThread/sync.test.d.ts.map +1 -0
  173. package/dist/types/src/components/ChatToolbar/ChatToolbar.d.ts +6 -0
  174. package/dist/types/src/components/ChatToolbar/ChatToolbar.d.ts.map +1 -0
  175. package/dist/types/src/components/ChatToolbar/index.d.ts +2 -0
  176. package/dist/types/src/components/ChatToolbar/index.d.ts.map +1 -0
  177. package/dist/types/src/components/ChatToolbar/useChatToolbarActions.d.ts +9 -0
  178. package/dist/types/src/components/ChatToolbar/useChatToolbarActions.d.ts.map +1 -0
  179. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +2 -6
  180. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  181. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +265 -7
  182. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  183. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +1 -1
  184. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  185. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +262 -2
  186. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
  187. package/dist/types/src/components/TemplateEditor/handlebars-extension.d.ts +12 -0
  188. package/dist/types/src/components/TemplateEditor/handlebars-extension.d.ts.map +1 -0
  189. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts +19 -0
  190. package/dist/types/src/components/ToolBlock/ToolBlock.d.ts.map +1 -0
  191. package/dist/types/src/components/ToolBlock/ToolBlockWidget.d.ts +2 -0
  192. package/dist/types/src/components/ToolBlock/ToolBlockWidget.d.ts.map +1 -0
  193. package/dist/types/src/components/ToolBlock/index.d.ts +3 -0
  194. package/dist/types/src/components/ToolBlock/index.d.ts.map +1 -0
  195. package/dist/types/src/components/Toolbox/Toolbox.d.ts +6 -11
  196. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  197. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +266 -5
  198. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
  199. package/dist/types/src/components/index.d.ts +4 -5
  200. package/dist/types/src/components/index.d.ts.map +1 -1
  201. package/dist/types/src/events.d.ts +1 -1
  202. package/dist/types/src/events.d.ts.map +1 -1
  203. package/dist/types/src/functions/analysis.d.ts +5 -0
  204. package/dist/types/src/functions/analysis.d.ts.map +1 -0
  205. package/dist/types/src/functions/index.d.ts +4 -0
  206. package/dist/types/src/functions/index.d.ts.map +1 -0
  207. package/dist/types/src/functions/object-list.d.ts +10 -0
  208. package/dist/types/src/functions/object-list.d.ts.map +1 -0
  209. package/dist/types/src/functions/object-load.d.ts +8 -0
  210. package/dist/types/src/functions/object-load.d.ts.map +1 -0
  211. package/dist/types/src/hooks/index.d.ts +7 -3
  212. package/dist/types/src/hooks/index.d.ts.map +1 -1
  213. package/dist/types/src/hooks/useBlueprintRegistry.d.ts +25 -0
  214. package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +1 -0
  215. package/dist/types/src/hooks/useChatProcessor.d.ts +8 -21
  216. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  217. package/dist/types/src/hooks/useChatServices.d.ts +5 -6
  218. package/dist/types/src/hooks/useChatServices.d.ts.map +1 -1
  219. package/dist/types/src/hooks/useContextBinder.d.ts +4 -0
  220. package/dist/types/src/hooks/useContextBinder.d.ts.map +1 -0
  221. package/dist/types/src/hooks/useContextObjects.d.ts +15 -0
  222. package/dist/types/src/hooks/useContextObjects.d.ts.map +1 -0
  223. package/dist/types/src/hooks/useFlush.d.ts +6 -0
  224. package/dist/types/src/hooks/useFlush.d.ts.map +1 -0
  225. package/dist/types/src/hooks/useItemTypes.d.ts +4 -0
  226. package/dist/types/src/hooks/useItemTypes.d.ts.map +1 -0
  227. package/dist/types/src/hooks/useOnline.d.ts +3 -0
  228. package/dist/types/src/hooks/useOnline.d.ts.map +1 -0
  229. package/dist/types/src/hooks/usePresets.d.ts +7 -0
  230. package/dist/types/src/hooks/usePresets.d.ts.map +1 -0
  231. package/dist/types/src/hooks/useReferencesProvider.d.ts.map +1 -1
  232. package/dist/types/src/index.d.ts +2 -0
  233. package/dist/types/src/index.d.ts.map +1 -1
  234. package/dist/types/src/meta.d.ts +1 -2
  235. package/dist/types/src/meta.d.ts.map +1 -1
  236. package/dist/types/src/processor/index.d.ts +4 -0
  237. package/dist/types/src/processor/index.d.ts.map +1 -0
  238. package/dist/types/src/{hooks → processor}/presets.d.ts +3 -3
  239. package/dist/types/src/processor/presets.d.ts.map +1 -0
  240. package/dist/types/src/processor/processor.d.ts +74 -0
  241. package/dist/types/src/processor/processor.d.ts.map +1 -0
  242. package/dist/types/src/processor/processor.test.d.ts +2 -0
  243. package/dist/types/src/processor/processor.test.d.ts.map +1 -0
  244. package/dist/types/src/processor/update-name.d.ts +10 -0
  245. package/dist/types/src/processor/update-name.d.ts.map +1 -0
  246. package/dist/types/src/testing/index.d.ts +1 -1
  247. package/dist/types/src/testing/index.d.ts.map +1 -1
  248. package/dist/types/src/testing/test-generator.d.ts +7 -0
  249. package/dist/types/src/testing/test-generator.d.ts.map +1 -0
  250. package/dist/types/src/testing/test-sequence.d.ts +0 -4
  251. package/dist/types/src/testing/test-sequence.d.ts.map +1 -1
  252. package/dist/types/src/testing/test-services.d.ts +2 -2
  253. package/dist/types/src/testing/test-services.d.ts.map +1 -1
  254. package/dist/types/src/toolkits/AssistantToolkit.d.ts +21 -0
  255. package/dist/types/src/toolkits/AssistantToolkit.d.ts.map +1 -0
  256. package/dist/types/src/toolkits/SystemToolkit.d.ts +69 -0
  257. package/dist/types/src/toolkits/SystemToolkit.d.ts.map +1 -0
  258. package/dist/types/src/toolkits/index.d.ts +3 -0
  259. package/dist/types/src/toolkits/index.d.ts.map +1 -0
  260. package/dist/types/src/translations.d.ts +29 -12
  261. package/dist/types/src/translations.d.ts.map +1 -1
  262. package/dist/types/src/types/Assistant.d.ts +48 -0
  263. package/dist/types/src/types/Assistant.d.ts.map +1 -0
  264. package/dist/types/src/types/AssistantAction.d.ts +119 -0
  265. package/dist/types/src/types/AssistantAction.d.ts.map +1 -0
  266. package/dist/types/src/types/defs.d.ts +2 -0
  267. package/dist/types/src/types/defs.d.ts.map +1 -0
  268. package/dist/types/src/types/index.d.ts +3 -1
  269. package/dist/types/src/types/index.d.ts.map +1 -1
  270. package/dist/types/src/types/service.d.ts +21 -18
  271. package/dist/types/src/types/service.d.ts.map +1 -1
  272. package/dist/types/tsconfig.tsbuildinfo +1 -1
  273. package/package.json +97 -96
  274. package/src/AssistantPlugin.tsx +154 -107
  275. package/src/capabilities/ai-service.ts +27 -0
  276. package/src/capabilities/app-graph-builder.ts +76 -51
  277. package/src/capabilities/blueprint-definition.ts +66 -0
  278. package/src/capabilities/capabilities.ts +18 -0
  279. package/src/capabilities/edge-model-resolver.ts +25 -0
  280. package/src/capabilities/index.ts +9 -0
  281. package/src/capabilities/intent-resolver.ts +72 -23
  282. package/src/capabilities/local-model-resolver.ts +30 -0
  283. package/src/capabilities/react-surface.tsx +10 -77
  284. package/src/capabilities/state.ts +20 -0
  285. package/src/capabilities/toolkit.ts +19 -0
  286. package/src/components/AssistantSettings/AssistantSettings.tsx +83 -76
  287. package/src/components/BlueprintContainer.tsx +8 -2
  288. package/src/components/Chat/Chat.tsx +189 -181
  289. package/src/components/Chat/events.ts +7 -0
  290. package/src/components/ChatCompanion.tsx +136 -0
  291. package/src/components/ChatContainer.tsx +19 -13
  292. package/src/components/ChatDialog.tsx +18 -14
  293. package/src/components/ChatProgress/ChatProgress.tsx +67 -0
  294. package/src/components/{SequenceEditor → ChatProgress}/index.ts +1 -1
  295. package/src/components/ChatPrompt/ChatActions.tsx +10 -24
  296. package/src/components/ChatPrompt/ChatOptions.tsx +225 -0
  297. package/src/components/ChatPrompt/ChatPresets.tsx +1 -0
  298. package/src/components/ChatPrompt/ChatReferences.tsx +31 -36
  299. package/src/components/ChatPrompt/ChatStatusIndicator.tsx +25 -22
  300. package/src/components/ChatPrompt/index.ts +1 -1
  301. package/src/components/ChatThread/ChatThread.stories.tsx +98 -112
  302. package/src/components/ChatThread/ChatThread.tsx +69 -29
  303. package/src/components/ChatThread/Link.tsx +26 -0
  304. package/src/components/ChatThread/reducers.ts +151 -0
  305. package/src/components/ChatThread/registry.tsx +184 -0
  306. package/src/components/ChatThread/sync.test.ts +81 -0
  307. package/src/components/ChatThread/sync.ts +113 -0
  308. package/src/components/ChatToolbar/ChatToolbar.tsx +23 -0
  309. package/src/components/ChatToolbar/index.ts +5 -0
  310. package/src/components/ChatToolbar/useChatToolbarActions.ts +126 -0
  311. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +28 -15
  312. package/src/components/TemplateEditor/TemplateEditor.tsx +29 -54
  313. package/src/components/TemplateEditor/TemplateForm.stories.tsx +15 -10
  314. package/src/components/TemplateEditor/TemplateForm.tsx +4 -2
  315. package/src/components/TemplateEditor/handlebars-extension.ts +166 -0
  316. package/src/components/ToolBlock/ToolBlock.tsx +152 -0
  317. package/src/components/ToolBlock/ToolBlockWidget.tsx +5 -0
  318. package/src/components/ToolBlock/index.ts +6 -0
  319. package/src/components/Toolbox/Toolbox.stories.tsx +14 -23
  320. package/src/components/Toolbox/Toolbox.tsx +23 -53
  321. package/src/components/index.ts +3 -6
  322. package/src/events.ts +2 -2
  323. package/src/functions/analysis.ts +22 -0
  324. package/src/functions/index.ts +7 -0
  325. package/src/functions/object-list.ts +48 -0
  326. package/src/functions/object-load.ts +45 -0
  327. package/src/hooks/index.ts +7 -4
  328. package/src/hooks/useBlueprintRegistry.ts +94 -0
  329. package/src/hooks/useChatProcessor.ts +30 -99
  330. package/src/hooks/useChatServices.ts +30 -49
  331. package/src/hooks/useContextBinder.ts +30 -0
  332. package/src/hooks/useContextObjects.ts +58 -0
  333. package/src/hooks/useFlush.ts +35 -0
  334. package/src/hooks/useItemTypes.ts +37 -0
  335. package/src/hooks/useOnline.ts +10 -0
  336. package/src/hooks/usePresets.ts +44 -0
  337. package/src/hooks/useReferencesProvider.ts +11 -9
  338. package/src/index.ts +2 -0
  339. package/src/meta.ts +9 -6
  340. package/src/processor/index.ts +7 -0
  341. package/src/{hooks → processor}/presets.ts +15 -7
  342. package/src/processor/processor.test.ts +81 -0
  343. package/src/processor/processor.ts +277 -0
  344. package/src/processor/update-name.ts +57 -0
  345. package/src/queue-logger.ts +10 -10
  346. package/src/testing/index.ts +1 -1
  347. package/src/testing/test-generator.ts +261 -0
  348. package/src/testing/test-sequence.ts +2 -27
  349. package/src/testing/test-services.ts +2 -8
  350. package/src/toolkits/AssistantToolkit.ts +55 -0
  351. package/src/toolkits/SystemToolkit.ts +292 -0
  352. package/src/toolkits/index.ts +6 -0
  353. package/src/translations.ts +32 -12
  354. package/src/types/Assistant.ts +63 -0
  355. package/src/types/AssistantAction.ts +70 -0
  356. package/src/types/defs.ts +5 -0
  357. package/src/types/index.ts +4 -1
  358. package/src/types/service.ts +17 -9
  359. package/src/vite-env.d.ts +30 -0
  360. package/dist/lib/browser/BlueprintContainer-IZ4AK5EO.mjs.map +0 -7
  361. package/dist/lib/browser/ChatContainer-RP3QEXYX.mjs.map +0 -7
  362. package/dist/lib/browser/ChatDialog-ZVLXFHEY.mjs.map +0 -7
  363. package/dist/lib/browser/SequenceContainer-3UDVKWPA.mjs +0 -162
  364. package/dist/lib/browser/SequenceContainer-3UDVKWPA.mjs.map +0 -7
  365. package/dist/lib/browser/app-graph-builder-XSEOKJLG.mjs.map +0 -7
  366. package/dist/lib/browser/chunk-63GG6U6D.mjs +0 -2226
  367. package/dist/lib/browser/chunk-63GG6U6D.mjs.map +0 -7
  368. package/dist/lib/browser/chunk-7W7LHTRH.mjs +0 -171
  369. package/dist/lib/browser/chunk-7W7LHTRH.mjs.map +0 -7
  370. package/dist/lib/browser/chunk-FDCJSQYF.mjs +0 -40
  371. package/dist/lib/browser/chunk-FDCJSQYF.mjs.map +0 -7
  372. package/dist/lib/browser/chunk-KFXSBNZR.mjs +0 -89
  373. package/dist/lib/browser/chunk-KFXSBNZR.mjs.map +0 -7
  374. package/dist/lib/browser/chunk-LERGF5YG.mjs +0 -108
  375. package/dist/lib/browser/chunk-LERGF5YG.mjs.map +0 -7
  376. package/dist/lib/browser/intent-resolver-MV3VSZLS.mjs +0 -75
  377. package/dist/lib/browser/intent-resolver-MV3VSZLS.mjs.map +0 -7
  378. package/dist/lib/browser/react-surface-3GYEHQRP.mjs +0 -150
  379. package/dist/lib/browser/react-surface-3GYEHQRP.mjs.map +0 -7
  380. package/dist/lib/node-esm/BlueprintContainer-RGTMNLNX.mjs.map +0 -7
  381. package/dist/lib/node-esm/ChatContainer-W3W6FWV3.mjs.map +0 -7
  382. package/dist/lib/node-esm/ChatDialog-QW4JRKVO.mjs.map +0 -7
  383. package/dist/lib/node-esm/SequenceContainer-RQQH5XOC.mjs +0 -163
  384. package/dist/lib/node-esm/SequenceContainer-RQQH5XOC.mjs.map +0 -7
  385. package/dist/lib/node-esm/app-graph-builder-PANCJUHV.mjs.map +0 -7
  386. package/dist/lib/node-esm/chunk-BFO3KHYL.mjs +0 -2227
  387. package/dist/lib/node-esm/chunk-BFO3KHYL.mjs.map +0 -7
  388. package/dist/lib/node-esm/chunk-MS3PJARN.mjs +0 -109
  389. package/dist/lib/node-esm/chunk-MS3PJARN.mjs.map +0 -7
  390. package/dist/lib/node-esm/chunk-QN2H2EHV.mjs +0 -41
  391. package/dist/lib/node-esm/chunk-QN2H2EHV.mjs.map +0 -7
  392. package/dist/lib/node-esm/chunk-VIIMA3XQ.mjs +0 -90
  393. package/dist/lib/node-esm/chunk-VIIMA3XQ.mjs.map +0 -7
  394. package/dist/lib/node-esm/chunk-Z7PUODRT.mjs +0 -172
  395. package/dist/lib/node-esm/chunk-Z7PUODRT.mjs.map +0 -7
  396. package/dist/lib/node-esm/intent-resolver-3FMC3GHC.mjs +0 -76
  397. package/dist/lib/node-esm/intent-resolver-3FMC3GHC.mjs.map +0 -7
  398. package/dist/lib/node-esm/react-surface-QDQWJ7FZ.mjs +0 -151
  399. package/dist/lib/node-esm/react-surface-QDQWJ7FZ.mjs.map +0 -7
  400. package/dist/types/src/capability-definitions.d.ts +0 -7
  401. package/dist/types/src/capability-definitions.d.ts.map +0 -1
  402. package/dist/types/src/components/ChatPrompt/ChatOptionsMenu.d.ts +0 -9
  403. package/dist/types/src/components/ChatPrompt/ChatOptionsMenu.d.ts.map +0 -1
  404. package/dist/types/src/components/ChatThread/ChatMessage.d.ts +0 -17
  405. package/dist/types/src/components/ChatThread/ChatMessage.d.ts.map +0 -1
  406. package/dist/types/src/components/ChatThread/ToolBlock.d.ts +0 -19
  407. package/dist/types/src/components/ChatThread/ToolBlock.d.ts.map +0 -1
  408. package/dist/types/src/components/ChatThread/reducer.d.ts +0 -12
  409. package/dist/types/src/components/ChatThread/reducer.d.ts.map +0 -1
  410. package/dist/types/src/components/PromptSettings.d.ts +0 -6
  411. package/dist/types/src/components/PromptSettings.d.ts.map +0 -1
  412. package/dist/types/src/components/SequenceContainer.d.ts +0 -8
  413. package/dist/types/src/components/SequenceContainer.d.ts.map +0 -1
  414. package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts +0 -13
  415. package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts.map +0 -1
  416. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts +0 -8
  417. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts.map +0 -1
  418. package/dist/types/src/components/SequenceEditor/index.d.ts +0 -2
  419. package/dist/types/src/components/SequenceEditor/index.d.ts.map +0 -1
  420. package/dist/types/src/hooks/chat-processor.d.ts +0 -86
  421. package/dist/types/src/hooks/chat-processor.d.ts.map +0 -1
  422. package/dist/types/src/hooks/chat-processor.test.d.ts +0 -2
  423. package/dist/types/src/hooks/chat-processor.test.d.ts.map +0 -1
  424. package/dist/types/src/hooks/presets.d.ts.map +0 -1
  425. package/dist/types/src/hooks/useBlueprints.d.ts +0 -9
  426. package/dist/types/src/hooks/useBlueprints.d.ts.map +0 -1
  427. package/dist/types/src/parser/filter-generator.d.ts +0 -4
  428. package/dist/types/src/parser/filter-generator.d.ts.map +0 -1
  429. package/dist/types/src/parser/filter-generator.test.d.ts +0 -2
  430. package/dist/types/src/parser/filter-generator.test.d.ts.map +0 -1
  431. package/dist/types/src/parser/index.d.ts +0 -4
  432. package/dist/types/src/parser/index.d.ts.map +0 -1
  433. package/dist/types/src/parser/query-parser.d.ts +0 -15
  434. package/dist/types/src/parser/query-parser.d.ts.map +0 -1
  435. package/dist/types/src/parser/query-parser.test.d.ts +0 -2
  436. package/dist/types/src/parser/query-parser.test.d.ts.map +0 -1
  437. package/dist/types/src/parser/types.d.ts +0 -24
  438. package/dist/types/src/parser/types.d.ts.map +0 -1
  439. package/dist/types/src/stories/Chat.stories.d.ts +0 -207
  440. package/dist/types/src/stories/Chat.stories.d.ts.map +0 -1
  441. package/dist/types/src/testing/test-functions.d.ts +0 -3
  442. package/dist/types/src/testing/test-functions.d.ts.map +0 -1
  443. package/dist/types/src/tools/function.d.ts +0 -5
  444. package/dist/types/src/tools/function.d.ts.map +0 -1
  445. package/dist/types/src/tools/index.d.ts +0 -3
  446. package/dist/types/src/tools/index.d.ts.map +0 -1
  447. package/dist/types/src/tools/openapi.d.ts +0 -10
  448. package/dist/types/src/tools/openapi.d.ts.map +0 -1
  449. package/dist/types/src/tools/openapi.test.d.ts +0 -2
  450. package/dist/types/src/tools/openapi.test.d.ts.map +0 -1
  451. package/dist/types/src/types/schema.d.ts +0 -120
  452. package/dist/types/src/types/schema.d.ts.map +0 -1
  453. package/src/capability-definitions.ts +0 -15
  454. package/src/components/ChatPrompt/ChatOptionsMenu.tsx +0 -52
  455. package/src/components/ChatThread/ChatMessage.tsx +0 -268
  456. package/src/components/ChatThread/ToolBlock.tsx +0 -121
  457. package/src/components/ChatThread/reducer.ts +0 -52
  458. package/src/components/PromptSettings.tsx +0 -89
  459. package/src/components/SequenceContainer.tsx +0 -132
  460. package/src/components/SequenceEditor/SequenceEditor.stories.tsx +0 -32
  461. package/src/components/SequenceEditor/SequenceEditor.tsx +0 -50
  462. package/src/hooks/chat-processor.test.ts +0 -16
  463. package/src/hooks/chat-processor.ts +0 -314
  464. package/src/hooks/useBlueprints.ts +0 -57
  465. package/src/parser/filter-generator.test.ts +0 -32
  466. package/src/parser/filter-generator.ts +0 -81
  467. package/src/parser/index.ts +0 -7
  468. package/src/parser/query-parser.test.ts +0 -139
  469. package/src/parser/query-parser.ts +0 -199
  470. package/src/parser/types.ts +0 -34
  471. package/src/shims.d.ts +0 -8
  472. package/src/stories/Chat.stories.tsx +0 -371
  473. package/src/testing/test-functions.ts +0 -11
  474. package/src/tools/function.ts +0 -46
  475. package/src/tools/index.ts +0 -6
  476. package/src/tools/openapi.test.ts +0 -217
  477. package/src/tools/openapi.ts +0 -338
  478. package/src/types/schema.ts +0 -108
  479. package/src/typings.d.ts +0 -9
@@ -3,36 +3,70 @@
3
3
  //
4
4
 
5
5
  import { Rx } from '@effect-rx/rx-react';
6
- import { Option, pipe } from 'effect';
6
+ import * as Function from 'effect/Function';
7
+ import * as Option from 'effect/Option';
7
8
 
8
9
  import {
9
10
  Capabilities,
10
- contributes,
11
- createIntent,
12
11
  LayoutAction,
13
- type PromiseIntentDispatcher,
14
12
  type PluginContext,
13
+ type PromiseIntentDispatcher,
14
+ contributes,
15
+ createIntent,
15
16
  } from '@dxos/app-framework';
16
17
  import { Sequence } from '@dxos/conductor';
17
18
  import { Obj } from '@dxos/echo';
18
19
  import { invariant } from '@dxos/invariant';
19
20
  import { ClientCapabilities } from '@dxos/plugin-client';
20
- import { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from '@dxos/plugin-deck/types';
21
- import { createExtension, ROOT_ID } from '@dxos/plugin-graph';
22
- import { getActiveSpace, rxFromQuery } from '@dxos/plugin-space';
21
+ import { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';
22
+ import { ROOT_ID, createExtension, rxFromSignal } from '@dxos/plugin-graph';
23
+ import { getActiveSpace } from '@dxos/plugin-space';
23
24
  import { SpaceAction } from '@dxos/plugin-space/types';
24
- import { type Space, Filter, Query, type QueryResult, fullyQualifiedId, getSpace } from '@dxos/react-client/echo';
25
+ import { Query, type Space, fullyQualifiedId } from '@dxos/react-client/echo';
25
26
 
26
27
  import { ASSISTANT_DIALOG, meta } from '../meta';
27
- import { Assistant } from '../types';
28
+ import { Assistant, AssistantAction } from '../types';
29
+
30
+ import { AssistantCapabilities } from './capabilities';
28
31
 
29
32
  export default (context: PluginContext) =>
30
33
  contributes(Capabilities.AppGraphBuilder, [
34
+ createExtension({
35
+ id: `${meta.id}/root`,
36
+ actions: (node) =>
37
+ Rx.make((get) =>
38
+ Function.pipe(
39
+ get(node),
40
+ Option.flatMap((node) => {
41
+ return Obj.instanceOf(Assistant.Chat, node.data) ? Option.some(node.data) : Option.none();
42
+ }),
43
+ Option.map((object) => {
44
+ const id = fullyQualifiedId(object);
45
+ return [
46
+ {
47
+ id: `${AssistantAction.UpdateChatName._tag}/${id}`,
48
+ data: async () => {
49
+ const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
50
+ await dispatch(createIntent(AssistantAction.UpdateChatName, { chat: object }));
51
+ },
52
+ properties: {
53
+ label: ['chat update name label', { ns: meta.id }],
54
+ icon: 'ph--magic-wand--regular',
55
+ disposition: 'list-item',
56
+ },
57
+ },
58
+ ];
59
+ }),
60
+ Option.getOrElse(() => []),
61
+ ),
62
+ ),
63
+ }),
64
+
31
65
  createExtension({
32
66
  id: `${meta.id}/assistant`,
33
67
  actions: (node) =>
34
68
  Rx.make((get) =>
35
- pipe(
69
+ Function.pipe(
36
70
  get(node),
37
71
  Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
38
72
  Option.map(() => [
@@ -79,44 +113,36 @@ export default (context: PluginContext) =>
79
113
  }),
80
114
 
81
115
  createExtension({
82
- id: `${meta.id}/object-chat-companion`,
116
+ id: `${meta.id}/companion-chat`,
83
117
  connector: (node) => {
84
- let query: QueryResult<Assistant.Chat> | undefined;
85
- return Rx.make((get) => {
86
- const nodeOption = get(node);
87
- if (Option.isNone(nodeOption)) {
88
- return [];
89
- }
90
-
91
- const object = nodeOption.value.data;
92
- if (!Obj.isObject(object)) {
93
- return [];
94
- }
95
-
96
- const space = getSpace(object);
97
- if (!space) {
98
- return [];
99
- }
100
-
101
- if (!query) {
102
- query = space.db.query(Query.select(Filter.ids(object.id)).targetOf(Assistant.CompanionTo).source());
103
- }
118
+ return Rx.make((get) =>
119
+ Function.pipe(
120
+ get(node),
121
+ Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node.data) : Option.none())),
122
+ Option.map((object) => {
123
+ const currentChat = get(
124
+ rxFromSignal(
125
+ () => context.getCapability(AssistantCapabilities.State).currentChat[fullyQualifiedId(object)],
126
+ ),
127
+ );
104
128
 
105
- const chat = get(rxFromQuery(query))[0];
106
- return [
107
- {
108
- id: [fullyQualifiedId(object), 'assistant-chat'].join(ATTENDABLE_PATH_SEPARATOR),
109
- type: PLANK_COMPANION_TYPE,
110
- data: chat ?? 'assistant-chat',
111
- properties: {
112
- label: ['assistant chat label', { ns: meta.id }],
113
- icon: 'ph--sparkle--regular',
114
- position: 'hoist',
115
- disposition: 'hidden',
116
- },
117
- },
118
- ];
119
- });
129
+ return [
130
+ {
131
+ id: [fullyQualifiedId(object), 'assistant-chat'].join(ATTENDABLE_PATH_SEPARATOR),
132
+ type: PLANK_COMPANION_TYPE,
133
+ data: currentChat ?? 'assistant-chat',
134
+ properties: {
135
+ label: ['assistant chat label', { ns: meta.id }],
136
+ icon: 'ph--sparkle--regular',
137
+ position: 'hoist',
138
+ disposition: 'hidden',
139
+ },
140
+ },
141
+ ];
142
+ }),
143
+ Option.getOrElse(() => []),
144
+ ),
145
+ );
120
146
  },
121
147
  }),
122
148
 
@@ -124,7 +150,7 @@ export default (context: PluginContext) =>
124
150
  id: `${meta.id}/sequence-logs`,
125
151
  connector: (node) =>
126
152
  Rx.make((get) =>
127
- pipe(
153
+ Function.pipe(
128
154
  get(node),
129
155
  Option.flatMap((node) => (Obj.instanceOf(Sequence, node.data) ? Option.some(node) : Option.none())),
130
156
  Option.map((node) => [
@@ -155,14 +181,13 @@ const getOrCreateChat = async (
155
181
  const { objects: relatedChats } = await space.db
156
182
  .query(Query.type(Assistant.Chat).sourceOf(Assistant.CompanionTo).source())
157
183
  .run();
184
+
158
185
  const chats = allChats.filter((chat) => !relatedChats.includes(chat));
159
- // console.log('objects', JSON.stringify(objects, null, 2));
160
186
  if (chats.length > 0) {
161
- // TODO(burdon): Is this the most recent?
162
- return chats[chats.length - 1];
187
+ return chats.at(-1);
163
188
  }
164
189
 
165
- const { data } = await dispatch(createIntent(Assistant.CreateChat, { space }));
190
+ const { data } = await dispatch(createIntent(AssistantAction.CreateChat, { space }));
166
191
  invariant(Obj.instanceOf(Assistant.Chat, data?.object));
167
192
  await dispatch(createIntent(SpaceAction.AddObject, { target: space, object: data.object }));
168
193
  return data.object;
@@ -0,0 +1,66 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capabilities, type Capability, contributes } from '@dxos/app-framework';
6
+ import { templates } from '@dxos/assistant';
7
+ import {
8
+ Agent,
9
+ Discord,
10
+ DiscordBlueprint,
11
+ EntityExtraction,
12
+ Linear,
13
+ LinearBlueprint,
14
+ Research,
15
+ ResearchBlueprint,
16
+ WebSearchBlueprint,
17
+ } from '@dxos/assistant-toolkit';
18
+ import { Blueprint } from '@dxos/blueprints';
19
+ import { type FunctionDefinition } from '@dxos/functions';
20
+
21
+ import { analysis, list, load } from '../functions';
22
+ import { AssistantToolkit, SystemToolkit } from '../toolkits';
23
+
24
+ // TODO(burdon): Function naming pattern (noun-verb); fully-qualified?
25
+ // TODO(burdon): Document plugin structure (blueprint, functions, toolkit.)
26
+ // TODO(burdon): Test framework for developing functions. Error handling.
27
+ // TODO(burdon): Convert tools to functions? (Deps).
28
+
29
+ // TODO(wittjosiah): Factor out to a generic app-framework blueprint.
30
+ const deckTools = ['open-item'];
31
+
32
+ const functions: FunctionDefinition[] = [analysis, list, load];
33
+ const tools = [...AssistantToolkit.tools, ...SystemToolkit.tools, ...deckTools];
34
+
35
+ export const ASSISTANT_BLUEPRINT_KEY = 'dxos.org/blueprint/assistant';
36
+
37
+ export const createBlueprint = (): Blueprint.Blueprint =>
38
+ Blueprint.make({
39
+ key: ASSISTANT_BLUEPRINT_KEY,
40
+ name: 'Assistant',
41
+ tools: Blueprint.toolDefinitions({ functions, tools }),
42
+ instructions: templates.system,
43
+ });
44
+
45
+ const blueprint = createBlueprint();
46
+
47
+ export default (): Capability<any>[] => [
48
+ contributes(Capabilities.Functions, functions),
49
+ contributes(Capabilities.BlueprintDefinition, blueprint),
50
+
51
+ // TODO(burdon): Factor out.
52
+ contributes(Capabilities.Functions, [Research.create, Research.research]),
53
+ contributes(Capabilities.BlueprintDefinition, ResearchBlueprint),
54
+
55
+ // TODO(burdon): Factor out.
56
+ contributes(Capabilities.Functions, [Agent.prompt, EntityExtraction.extract]),
57
+ contributes(Capabilities.BlueprintDefinition, WebSearchBlueprint),
58
+
59
+ // TODO(burdon): Factor out.
60
+ contributes(Capabilities.Functions, [Discord.fetch]),
61
+ contributes(Capabilities.BlueprintDefinition, DiscordBlueprint),
62
+
63
+ // TODO(burdon): Factor out.
64
+ contributes(Capabilities.Functions, [Linear.sync]),
65
+ contributes(Capabilities.BlueprintDefinition, LinearBlueprint),
66
+ ];
@@ -0,0 +1,18 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { defineCapability } from '@dxos/app-framework';
6
+ import { type DeepReadonly } from '@dxos/util';
7
+
8
+ import { meta } from '../meta';
9
+ import { type Assistant } from '../types';
10
+
11
+ export namespace AssistantCapabilities {
12
+ export type AssistantState = {
13
+ /** Map of primary object fq id to current chat. */
14
+ currentChat: Record<string, Assistant.Chat>;
15
+ };
16
+ export const State = defineCapability<DeepReadonly<AssistantState>>(`${meta.id}/capability/state`);
17
+ export const MutableState = defineCapability<AssistantState>(`${meta.id}/capability/state`);
18
+ }
@@ -0,0 +1,25 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as AnthropicClient from '@effect/ai-anthropic/AnthropicClient';
6
+ import * as FetchHttpClient from '@effect/platform/FetchHttpClient';
7
+ import * as Layer from 'effect/Layer';
8
+
9
+ import * as AiServiceRouter from '@dxos/ai/AiServiceRouter';
10
+ import { Capabilities, type Capability, contributes } from '@dxos/app-framework';
11
+
12
+ export default (): Capability<any>[] => [
13
+ contributes(
14
+ Capabilities.AiModelResolver,
15
+ AiServiceRouter.AnthropicResolver.pipe(
16
+ Layer.provide(
17
+ AnthropicClient.layer({
18
+ // TODO(dmaretskyi): Read endpoint from config/settings.
19
+ apiUrl: 'https://ai-service.dxos.workers.dev/provider/anthropic',
20
+ }),
21
+ ),
22
+ Layer.provide(FetchHttpClient.layer),
23
+ ),
24
+ ),
25
+ ];
@@ -4,7 +4,16 @@
4
4
 
5
5
  import { lazy } from '@dxos/app-framework';
6
6
 
7
+ export const AiService = lazy(() => import('./ai-service'));
7
8
  export const AppGraphBuilder = lazy(() => import('./app-graph-builder'));
9
+ export const AssistantState = lazy(() => import('./state'));
10
+ export const BlueprintDefinition = lazy(() => import('./blueprint-definition'));
11
+ export const EdgeModelResolver = lazy(() => import('./edge-model-resolver'));
8
12
  export const IntentResolver = lazy(() => import('./intent-resolver'));
13
+ export const LocalModelResolver = lazy(() => import('./local-model-resolver'));
9
14
  export const ReactSurface = lazy(() => import('./react-surface'));
10
15
  export const Settings = lazy(() => import('./settings'));
16
+ export const Toolkit = lazy(() => import('./toolkit'));
17
+
18
+ export * from './blueprint-definition';
19
+ export * from './capabilities';
@@ -2,20 +2,31 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Effect } from 'effect';
5
+ import * as Effect from 'effect/Effect';
6
6
 
7
- import { Capabilities, contributes, createIntent, createResolver, type PluginContext } from '@dxos/app-framework';
8
- import { Blueprint } from '@dxos/blueprints';
7
+ import { Capabilities, type PluginContext, contributes, createIntent, createResolver } from '@dxos/app-framework';
8
+ import { AiContextBinder, AiConversation } from '@dxos/assistant';
9
+ import { Blueprint, Template } from '@dxos/blueprints';
10
+ import { fullyQualifiedId } from '@dxos/client/echo';
11
+ import { type Queue } from '@dxos/client/echo';
9
12
  import { Sequence } from '@dxos/conductor';
10
- import { Key, Obj, Ref } from '@dxos/echo';
13
+ import { Filter, Key, Obj, Ref } from '@dxos/echo';
14
+ import { TracingService } from '@dxos/functions';
15
+ import { AutomationCapabilities } from '@dxos/plugin-automation';
11
16
  import { CollectionAction } from '@dxos/plugin-space/types';
17
+ import { getSpace } from '@dxos/react-client/echo';
18
+ import { type DataType } from '@dxos/schema';
12
19
 
13
- import { Assistant } from '../types';
20
+ import { type AiChatServices, updateName } from '../processor';
21
+ import { Assistant, AssistantAction } from '../types';
22
+
23
+ import { ASSISTANT_BLUEPRINT_KEY, createBlueprint } from './blueprint-definition';
24
+ import { AssistantCapabilities } from './capabilities';
14
25
 
15
26
  export default (context: PluginContext) => [
16
27
  contributes(Capabilities.IntentResolver, [
17
28
  createResolver({
18
- intent: Assistant.OnSpaceCreated,
29
+ intent: AssistantAction.onCreateSpace,
19
30
  resolve: ({ space, rootCollection }) =>
20
31
  Effect.gen(function* () {
21
32
  const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);
@@ -27,33 +38,63 @@ export default (context: PluginContext) => [
27
38
  );
28
39
  rootCollection.objects.push(Ref.make(chatCollection), Ref.make(blueprintCollection));
29
40
 
30
- const { object: chat } = yield* dispatch(createIntent(Assistant.CreateChat, { space }));
41
+ // Create default chat.
42
+ const { object: chat } = yield* dispatch(createIntent(AssistantAction.CreateChat, { space }));
31
43
  space.db.add(chat);
32
-
33
- // TODO(wittjosiah): Create default blueprint.
34
- // const { object: blueprint } = yield* dispatch(createIntent(Assistant.CreateBlueprint, { ... }));
35
- // space.db.add(blueprint);
36
44
  }),
37
45
  }),
38
46
  createResolver({
39
- intent: Assistant.CreateChat,
40
- resolve: ({ space, name }) => ({
41
- data: {
42
- object: Obj.make(Assistant.Chat, {
43
- name,
44
- queue: Ref.fromDXN(space.queues.create().dxn),
47
+ intent: AssistantAction.CreateChat,
48
+ resolve: async ({ space, name }) => {
49
+ const queue = space.queues.create();
50
+ const chat = Assistant.makeChat({ name, queue });
51
+ const { objects: blueprints } = await space.db.query(Filter.type(Blueprint.Blueprint)).run();
52
+ // TODO(wittjosiah): This should be a space-level setting.
53
+ // TODO(burdon): Clone when activated. Copy-on-write for template.
54
+ let defaultBlueprint = blueprints.find((blueprint) => blueprint.key === ASSISTANT_BLUEPRINT_KEY);
55
+ if (!defaultBlueprint) {
56
+ defaultBlueprint = space.db.add(createBlueprint());
57
+ }
58
+
59
+ const binder = new AiContextBinder(queue);
60
+ await binder.open();
61
+ await binder.bind({ blueprints: [Ref.make(defaultBlueprint)] });
62
+ await binder.close();
63
+
64
+ return {
65
+ data: { object: chat },
66
+ };
67
+ },
68
+ }),
69
+ createResolver({
70
+ intent: AssistantAction.UpdateChatName,
71
+ resolve: async ({ chat }) => {
72
+ const space = getSpace(chat);
73
+ const queue = chat.queue.target as Queue<DataType.Message>;
74
+ if (!space || !queue) {
75
+ return;
76
+ }
77
+
78
+ const runtimeResolver = context.getCapability(AutomationCapabilities.ComputeRuntime);
79
+ const runtime = await runtimeResolver.getRuntime(space.id).runPromise(
80
+ Effect.gen(function* () {
81
+ return yield* Effect.runtime<AiChatServices>().pipe(Effect.provide(TracingService.layerNoop));
45
82
  }),
46
- },
47
- }),
83
+ );
84
+
85
+ await new AiConversation(queue).use(async (conversation) => updateName(runtime, conversation, chat));
86
+ },
48
87
  }),
49
88
  createResolver({
50
- intent: Assistant.CreateBlueprint,
51
- resolve: ({ name, description }) => ({
52
- data: { object: Blueprint.make({ name, description }) },
89
+ intent: AssistantAction.CreateBlueprint,
90
+ resolve: ({ key, name, description }) => ({
91
+ data: {
92
+ object: Blueprint.make({ key, name, description, instructions: Template.make({ source: '' }) }),
93
+ },
53
94
  }),
54
95
  }),
55
96
  createResolver({
56
- intent: Assistant.CreateSequence,
97
+ intent: AssistantAction.CreateSequence,
57
98
  resolve: ({ name }) => ({
58
99
  data: {
59
100
  object: Obj.make(Sequence, {
@@ -68,5 +109,13 @@ export default (context: PluginContext) => [
68
109
  },
69
110
  }),
70
111
  }),
112
+ createResolver({
113
+ intent: AssistantAction.SetCurrentChat,
114
+ resolve: ({ companionTo, chat }) =>
115
+ Effect.gen(function* () {
116
+ const state = context.getCapability(AssistantCapabilities.MutableState);
117
+ state.currentChat[fullyQualifiedId(companionTo)] = chat;
118
+ }),
119
+ }),
71
120
  ]),
72
121
  ];
@@ -0,0 +1,30 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as OpenAiClient from '@effect/ai-openai/OpenAiClient';
6
+ import * as FetchHttpClient from '@effect/platform/FetchHttpClient';
7
+ import * as Layer from 'effect/Layer';
8
+
9
+ import * as AiServiceRouter from '@dxos/ai/AiServiceRouter';
10
+ import { Capabilities, type Capability, contributes } from '@dxos/app-framework';
11
+
12
+ /**
13
+ * To start LM Studio server:
14
+ * ```bash
15
+ * ~/.lmstudio/bin/lms server start --cors
16
+ * ```
17
+ */
18
+ export default (): Capability<any>[] => [
19
+ contributes(
20
+ Capabilities.AiModelResolver,
21
+ AiServiceRouter.LMStudioResolver.pipe(
22
+ Layer.provide(
23
+ OpenAiClient.layer({
24
+ apiUrl: AiServiceRouter.LMSTUDIO_ENDPOINT,
25
+ }),
26
+ ),
27
+ Layer.provide(FetchHttpClient.layer),
28
+ ),
29
+ ),
30
+ ];
@@ -2,28 +2,19 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Effect } from 'effect';
6
- import React, { useEffect, useMemo } from 'react';
5
+ import React from 'react';
7
6
 
8
- import { Capabilities, contributes, createIntent, createSurface, useIntentDispatcher } from '@dxos/app-framework';
7
+ import { Capabilities, contributes, createSurface } from '@dxos/app-framework';
9
8
  import { Blueprint } from '@dxos/blueprints';
10
- import { fullyQualifiedId, getSpace, getTypename } from '@dxos/client/echo';
9
+ import { getSpace } from '@dxos/client/echo';
11
10
  import { Sequence } from '@dxos/conductor';
12
11
  import { InvocationTraceContainer } from '@dxos/devtools';
13
- import { Filter, type Key, Obj, Query } from '@dxos/echo';
12
+ import { Obj } from '@dxos/echo';
14
13
  import { SettingsStore } from '@dxos/local-storage';
15
- import { SpaceAction } from '@dxos/plugin-space/types';
16
14
  import { StackItem } from '@dxos/react-ui-stack';
17
15
 
18
- import {
19
- AssistantSettings,
20
- BlueprintContainer,
21
- ChatContainer,
22
- ChatDialog,
23
- PromptSettings,
24
- SequenceContainer,
25
- } from '../components';
26
- import { meta, ASSISTANT_DIALOG } from '../meta';
16
+ import { AssistantSettings, BlueprintContainer, ChatCompanion, ChatContainer, ChatDialog } from '../components';
17
+ import { ASSISTANT_DIALOG, meta } from '../meta';
27
18
  import { Assistant } from '../types';
28
19
 
29
20
  export default () =>
@@ -43,71 +34,19 @@ export default () =>
43
34
  component: ({ data, role }) => <ChatContainer role={role} chat={data.subject} />,
44
35
  }),
45
36
  createSurface({
46
- id: `${meta.id}/object-chat`,
37
+ id: `${meta.id}/companion-chat`,
47
38
  role: 'article',
48
39
  filter: (data): data is { companionTo: Obj.Any; subject: Assistant.Chat | 'assistant-chat' } =>
49
40
  Obj.isObject(data.companionTo) &&
50
41
  (Obj.instanceOf(Assistant.Chat, data.subject) || data.subject === 'assistant-chat'),
51
- component: ({ data, role }) => {
52
- const { dispatch } = useIntentDispatcher();
53
- const associatedArtifact = useMemo(
54
- () => ({
55
- id: fullyQualifiedId(data.companionTo),
56
- typename: getTypename(data.companionTo) ?? 'unknown',
57
- spaceId: (getSpace(data.companionTo)?.id ?? 'unknown') as Key.SpaceId,
58
- }),
59
- [data.companionTo],
60
- );
61
-
62
- // TODO(wittjosiah): Factor out to container.
63
- useEffect(() => {
64
- const timeout = setTimeout(async () => {
65
- const space = getSpace(data.companionTo);
66
- if (space && data.subject === 'assistant-chat') {
67
- const result = await space.db
68
- .query(Query.select(Filter.ids(data.companionTo.id)).targetOf(Assistant.CompanionTo).source())
69
- .run();
70
- if (result.objects.length > 0) {
71
- return;
72
- }
73
-
74
- const program = Effect.gen(function* () {
75
- const { object } = yield* dispatch(createIntent(Assistant.CreateChat, { space }));
76
- yield* dispatch(createIntent(SpaceAction.AddObject, { object, target: space, hidden: true }));
77
- yield* dispatch(
78
- createIntent(SpaceAction.AddRelation, {
79
- space,
80
- schema: Assistant.CompanionTo,
81
- source: object,
82
- target: data.companionTo,
83
- }),
84
- );
85
- });
86
- void Effect.runPromise(program);
87
- }
88
- });
89
-
90
- return () => clearTimeout(timeout);
91
- }, [data.subject]);
92
-
93
- if (data.subject === 'assistant-chat') {
94
- return null;
95
- }
96
-
97
- return <ChatContainer role={role} chat={data.subject} artifact={associatedArtifact} />;
98
- },
99
- }),
100
- createSurface({
101
- id: `${meta.id}/sequence`,
102
- role: 'article',
103
- filter: (data): data is { subject: Sequence } => Obj.instanceOf(Sequence, data.subject),
104
- component: ({ data }) => <SequenceContainer sequence={data.subject} />,
42
+ component: ({ data, role }) => <ChatCompanion role={role} data={data} />,
105
43
  }),
106
44
  createSurface({
107
- id: `${meta.id}/companion/logs`,
45
+ id: `${meta.id}/companion-logs`,
108
46
  role: 'article',
109
47
  filter: (data): data is { companionTo: Sequence } =>
110
48
  Obj.instanceOf(Sequence, data.companionTo) && data.subject === 'logs',
49
+ // eslint-disable-next-line unused-imports/no-unused-vars
111
50
  component: ({ data, role }) => {
112
51
  const space = getSpace(data.companionTo);
113
52
  return (
@@ -123,12 +62,6 @@ export default () =>
123
62
  filter: (data): data is { subject: Blueprint.Blueprint } => Obj.instanceOf(Blueprint.Blueprint, data.subject),
124
63
  component: ({ data }) => <BlueprintContainer blueprint={data.subject} />,
125
64
  }),
126
- createSurface({
127
- id: `${meta.id}/prompt-settings`,
128
- role: 'object-settings',
129
- filter: (data): data is { subject: Blueprint.Blueprint } => Obj.instanceOf(Blueprint.Blueprint, data.subject),
130
- component: ({ data }) => <PromptSettings template={data.subject.instructions} />,
131
- }),
132
65
  createSurface({
133
66
  id: ASSISTANT_DIALOG,
134
67
  role: 'dialog',
@@ -0,0 +1,20 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { contributes } from '@dxos/app-framework';
6
+ import { LocalStorageStore } from '@dxos/local-storage';
7
+
8
+ import { meta } from '../meta';
9
+
10
+ import { AssistantCapabilities } from './capabilities';
11
+
12
+ export default () => {
13
+ // NOTE: This needs to be a chat object rather than a string id to avoid a query race.
14
+ // TODO(wittjosiah): Handle serialization and hydration for this so it can be cached.
15
+ const state = new LocalStorageStore<AssistantCapabilities.AssistantState>(meta.id, {
16
+ currentChat: {},
17
+ });
18
+
19
+ return contributes(AssistantCapabilities.State, state.values, () => state.close());
20
+ };
@@ -0,0 +1,19 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capabilities, type Capability, type PluginContext, contributes } from '@dxos/app-framework';
6
+ import { WebSearchToolkit } from '@dxos/assistant-toolkit';
7
+
8
+ import { AssistantToolkit, SystemToolkit } from '../toolkits';
9
+
10
+ export default (context: PluginContext): Capability<any>[] => [
11
+ contributes(Capabilities.Toolkit, AssistantToolkit),
12
+ contributes(Capabilities.ToolkitHandler, AssistantToolkit.createLayer(context)),
13
+
14
+ // TODO(burdon): How to manage dependencies?
15
+ contributes(Capabilities.Toolkit, SystemToolkit.Toolkit),
16
+ contributes(Capabilities.ToolkitHandler, SystemToolkit.createLayer(context)),
17
+
18
+ contributes(Capabilities.Toolkit, WebSearchToolkit),
19
+ ];