@dxos/plugin-assistant 0.8.4-main.f9ba587 → 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 (405) hide show
  1. package/dist/lib/browser/{TemplateContainer-6ZGGH5T4.mjs → BlueprintContainer-H7H4BQ2C.mjs} +10 -9
  2. package/dist/lib/browser/BlueprintContainer-H7H4BQ2C.mjs.map +7 -0
  3. package/dist/lib/browser/{ChatContainer-6XNB5NEI.mjs → ChatContainer-OUVSX5V5.mjs} +36 -17
  4. package/dist/lib/browser/ChatContainer-OUVSX5V5.mjs.map +7 -0
  5. package/dist/lib/browser/{ChatDialog-IMWPRXTO.mjs → ChatDialog-P4FLEOHG.mjs} +22 -10
  6. package/dist/lib/browser/ChatDialog-P4FLEOHG.mjs.map +7 -0
  7. package/dist/lib/browser/SequenceContainer-627OQ557.mjs +163 -0
  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-UJ5NHRGK.mjs → app-graph-builder-AVHHQ3KV.mjs} +16 -73
  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-44HZKIAW.mjs → chunk-NZDCKQ6W.mjs} +32 -30
  22. package/dist/lib/browser/chunk-NZDCKQ6W.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-NTBGTFTV.mjs → chunk-QB7OVS6Z.mjs} +3 -2
  24. package/dist/lib/browser/chunk-QB7OVS6Z.mjs.map +7 -0
  25. package/dist/lib/browser/{chunk-TQ3QW3HJ.mjs → chunk-VEBVAHNM.mjs} +1041 -882
  26. package/dist/lib/browser/chunk-VEBVAHNM.mjs.map +7 -0
  27. package/dist/lib/browser/edge-model-resolver-2HB4PCWH.mjs +24 -0
  28. package/dist/lib/browser/edge-model-resolver-2HB4PCWH.mjs.map +7 -0
  29. package/dist/lib/browser/index.mjs +116 -88
  30. package/dist/lib/browser/index.mjs.map +3 -3
  31. package/dist/lib/browser/intent-resolver-MVOIEJXZ.mjs +81 -0
  32. package/dist/lib/browser/intent-resolver-MVOIEJXZ.mjs.map +7 -0
  33. package/dist/lib/browser/meta.json +1 -1
  34. package/dist/lib/browser/{react-surface-TMF7JJA4.mjs → react-surface-4HXS3YLT.mjs} +52 -45
  35. package/dist/lib/browser/react-surface-4HXS3YLT.mjs.map +7 -0
  36. package/dist/lib/browser/{settings-N4HEXADL.mjs → settings-G2EZXMWT.mjs} +5 -4
  37. package/dist/lib/{node-esm/settings-WQ76EG6O.mjs.map → browser/settings-G2EZXMWT.mjs.map} +1 -1
  38. package/dist/lib/browser/toolkit-IW4FBLLB.mjs +105 -0
  39. package/dist/lib/browser/toolkit-IW4FBLLB.mjs.map +7 -0
  40. package/dist/lib/browser/types/index.mjs +6 -13
  41. package/dist/lib/node-esm/{TemplateContainer-6KRNEMVE.mjs → BlueprintContainer-VH4EE4CM.mjs} +10 -9
  42. package/dist/lib/node-esm/BlueprintContainer-VH4EE4CM.mjs.map +7 -0
  43. package/dist/lib/node-esm/{ChatContainer-VOLG7J6N.mjs → ChatContainer-D5FABDNE.mjs} +36 -17
  44. package/dist/lib/node-esm/ChatContainer-D5FABDNE.mjs.map +7 -0
  45. package/dist/lib/node-esm/{ChatDialog-B2XNUNRM.mjs → ChatDialog-NKWVXHJP.mjs} +22 -10
  46. package/dist/lib/node-esm/ChatDialog-NKWVXHJP.mjs.map +7 -0
  47. package/dist/lib/node-esm/SequenceContainer-EQ5NP2PG.mjs +164 -0
  48. package/dist/lib/node-esm/SequenceContainer-EQ5NP2PG.mjs.map +7 -0
  49. package/dist/lib/node-esm/ai-service-LDD32477.mjs +23 -0
  50. package/dist/lib/node-esm/ai-service-LDD32477.mjs.map +7 -0
  51. package/dist/lib/node-esm/{app-graph-builder-MEQ5CYNI.mjs → app-graph-builder-RMOUJMMG.mjs} +16 -73
  52. package/dist/lib/node-esm/app-graph-builder-RMOUJMMG.mjs.map +7 -0
  53. package/dist/lib/node-esm/blueprint-definition-AEWYMW6I.mjs +147 -0
  54. package/dist/lib/node-esm/blueprint-definition-AEWYMW6I.mjs.map +7 -0
  55. package/dist/lib/node-esm/{chunk-D3HTVK5D.mjs → chunk-3SOC5GOP.mjs} +1041 -882
  56. package/dist/lib/node-esm/chunk-3SOC5GOP.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-F7RXCX5Y.mjs +192 -0
  58. package/dist/lib/node-esm/chunk-F7RXCX5Y.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-VESVUAOS.mjs → chunk-GAWXJ7K5.mjs} +32 -30
  60. package/dist/lib/node-esm/chunk-GAWXJ7K5.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  62. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-RD755HN3.mjs +245 -0
  64. package/dist/lib/node-esm/chunk-RD755HN3.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-E6V2RUQ2.mjs → chunk-X6AANUHZ.mjs} +3 -2
  66. package/dist/lib/node-esm/chunk-X6AANUHZ.mjs.map +7 -0
  67. package/dist/lib/node-esm/edge-model-resolver-UDDR2IA6.mjs +25 -0
  68. package/dist/lib/node-esm/edge-model-resolver-UDDR2IA6.mjs.map +7 -0
  69. package/dist/lib/node-esm/index.mjs +116 -88
  70. package/dist/lib/node-esm/index.mjs.map +3 -3
  71. package/dist/lib/node-esm/intent-resolver-DTDNCX3C.mjs +82 -0
  72. package/dist/lib/node-esm/intent-resolver-DTDNCX3C.mjs.map +7 -0
  73. package/dist/lib/node-esm/meta.json +1 -1
  74. package/dist/lib/node-esm/{react-surface-6XL6SWL2.mjs → react-surface-V6JNEZVO.mjs} +52 -45
  75. package/dist/lib/node-esm/react-surface-V6JNEZVO.mjs.map +7 -0
  76. package/dist/lib/node-esm/{settings-WQ76EG6O.mjs → settings-AIP5FOJG.mjs} +5 -4
  77. package/dist/lib/{browser/settings-N4HEXADL.mjs.map → node-esm/settings-AIP5FOJG.mjs.map} +1 -1
  78. package/dist/lib/node-esm/toolkit-2VNUL77B.mjs +106 -0
  79. package/dist/lib/node-esm/toolkit-2VNUL77B.mjs.map +7 -0
  80. package/dist/lib/node-esm/types/index.mjs +6 -13
  81. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/ai-service.d.ts +5 -0
  83. package/dist/types/src/capabilities/ai-service.d.ts.map +1 -0
  84. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/blueprint-definition.d.ts +3 -0
  86. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  87. package/dist/types/src/capabilities/capabilities.d.ts +8 -3
  88. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/edge-model-resolver.d.ts +5 -0
  90. package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -0
  91. package/dist/types/src/capabilities/index.d.ts +6 -3
  92. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/intent-resolver.d.ts +2 -2
  94. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  96. package/dist/types/src/capabilities/toolkit.d.ts +5 -0
  97. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
  98. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  99. package/dist/types/src/components/BlueprintContainer.d.ts +8 -0
  100. package/dist/types/src/components/BlueprintContainer.d.ts.map +1 -0
  101. package/dist/types/src/components/Chat/Chat.d.ts +16 -13
  102. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  103. package/dist/types/src/components/Chat/events.d.ts +30 -0
  104. package/dist/types/src/components/Chat/events.d.ts.map +1 -0
  105. package/dist/types/src/components/Chat/index.d.ts +1 -0
  106. package/dist/types/src/components/Chat/index.d.ts.map +1 -1
  107. package/dist/types/src/components/ChatContainer.d.ts +5 -4
  108. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  109. package/dist/types/src/components/ChatDialog.d.ts.map +1 -1
  110. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts +6 -5
  111. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  112. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts +13 -0
  113. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -0
  114. package/dist/types/src/components/ChatPrompt/ChatPresets.d.ts +11 -0
  115. package/dist/types/src/components/ChatPrompt/ChatPresets.d.ts.map +1 -0
  116. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts +3 -3
  117. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts.map +1 -1
  118. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts +2 -1
  119. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts.map +1 -1
  120. package/dist/types/src/components/ChatPrompt/index.d.ts +2 -2
  121. package/dist/types/src/components/ChatPrompt/index.d.ts.map +1 -1
  122. package/dist/types/src/components/ChatThread/ChatMessage.d.ts +10 -10
  123. package/dist/types/src/components/ChatThread/ChatMessage.d.ts.map +1 -1
  124. package/dist/types/src/components/ChatThread/ChatThread.d.ts +6 -12
  125. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
  126. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +54 -60
  127. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  128. package/dist/types/src/components/ChatThread/Link.d.ts +9 -0
  129. package/dist/types/src/components/ChatThread/Link.d.ts.map +1 -0
  130. package/dist/types/src/components/ChatThread/ToolBlock.d.ts +4 -3
  131. package/dist/types/src/components/ChatThread/ToolBlock.d.ts.map +1 -1
  132. package/dist/types/src/components/ChatThread/reducer.d.ts +4 -4
  133. package/dist/types/src/components/ChatThread/reducer.d.ts.map +1 -1
  134. package/dist/types/src/components/PromptSettings.d.ts +2 -2
  135. package/dist/types/src/components/PromptSettings.d.ts.map +1 -1
  136. package/dist/types/src/components/SequenceContainer.d.ts +1 -2
  137. package/dist/types/src/components/SequenceContainer.d.ts.map +1 -1
  138. package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts.map +1 -1
  139. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts +1 -1
  140. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts.map +1 -1
  141. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +4 -3
  142. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  143. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +2 -2
  144. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  145. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +5 -4
  146. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  147. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
  148. package/dist/types/src/components/Timeline/Timeline.d.ts +24 -0
  149. package/dist/types/src/components/Timeline/Timeline.d.ts.map +1 -0
  150. package/dist/types/src/components/Timeline/Timeline.stories.d.ts +9 -0
  151. package/dist/types/src/components/Timeline/Timeline.stories.d.ts.map +1 -0
  152. package/dist/types/src/components/Timeline/index.d.ts +2 -0
  153. package/dist/types/src/components/Timeline/index.d.ts.map +1 -0
  154. package/dist/types/src/components/Toolbox/Toolbox.d.ts +6 -9
  155. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  156. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +1 -2
  157. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
  158. package/dist/types/src/components/index.d.ts +4 -3
  159. package/dist/types/src/components/index.d.ts.map +1 -1
  160. package/dist/types/src/events.d.ts +1 -1
  161. package/dist/types/src/events.d.ts.map +1 -1
  162. package/dist/types/src/functions/analysis.d.ts +5 -0
  163. package/dist/types/src/functions/analysis.d.ts.map +1 -0
  164. package/dist/types/src/functions/index.d.ts +4 -0
  165. package/dist/types/src/functions/index.d.ts.map +1 -0
  166. package/dist/types/src/functions/list.d.ts +10 -0
  167. package/dist/types/src/functions/list.d.ts.map +1 -0
  168. package/dist/types/src/functions/load.d.ts +8 -0
  169. package/dist/types/src/functions/load.d.ts.map +1 -0
  170. package/dist/types/src/hooks/chat-processor.d.ts +34 -44
  171. package/dist/types/src/hooks/chat-processor.d.ts.map +1 -1
  172. package/dist/types/src/hooks/errors.d.ts +4 -0
  173. package/dist/types/src/hooks/errors.d.ts.map +1 -0
  174. package/dist/types/src/hooks/index.d.ts +8 -4
  175. package/dist/types/src/hooks/index.d.ts.map +1 -1
  176. package/dist/types/src/hooks/presets.d.ts +13 -0
  177. package/dist/types/src/hooks/presets.d.ts.map +1 -0
  178. package/dist/types/src/hooks/useBlueprintRegistry.d.ts +21 -0
  179. package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +1 -0
  180. package/dist/types/src/hooks/useChatProcessor.d.ts +9 -18
  181. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  182. package/dist/types/src/hooks/useChatServices.d.ts +13 -0
  183. package/dist/types/src/hooks/useChatServices.d.ts.map +1 -0
  184. package/dist/types/src/hooks/useOnline.d.ts +3 -0
  185. package/dist/types/src/hooks/useOnline.d.ts.map +1 -0
  186. package/dist/types/src/hooks/usePresets.d.ts +7 -0
  187. package/dist/types/src/hooks/usePresets.d.ts.map +1 -0
  188. package/dist/types/src/hooks/useReferencesProvider.d.ts +7 -0
  189. package/dist/types/src/hooks/useReferencesProvider.d.ts.map +1 -0
  190. package/dist/types/src/hooks/useResolveRef.d.ts +4 -0
  191. package/dist/types/src/hooks/useResolveRef.d.ts.map +1 -0
  192. package/dist/types/src/parser/filter-generator.d.ts.map +1 -1
  193. package/dist/types/src/parser/index.d.ts +1 -1
  194. package/dist/types/src/parser/index.d.ts.map +1 -1
  195. package/dist/types/src/parser/query-parser.d.ts.map +1 -1
  196. package/dist/types/src/stories/Chat.stories.d.ts +87 -18
  197. package/dist/types/src/stories/Chat.stories.d.ts.map +1 -1
  198. package/dist/types/src/stories/components/BlueprintContainer.d.ts +5 -0
  199. package/dist/types/src/stories/components/BlueprintContainer.d.ts.map +1 -0
  200. package/dist/types/src/stories/components/ChatContainer.d.ts +5 -0
  201. package/dist/types/src/stories/components/ChatContainer.d.ts.map +1 -0
  202. package/dist/types/src/stories/components/GraphContainer.d.ts +6 -0
  203. package/dist/types/src/stories/components/GraphContainer.d.ts.map +1 -0
  204. package/dist/types/src/stories/components/LoggingContainer.d.ts +5 -0
  205. package/dist/types/src/stories/components/LoggingContainer.d.ts.map +1 -0
  206. package/dist/types/src/stories/components/SurfaceContainer.d.ts +8 -0
  207. package/dist/types/src/stories/components/SurfaceContainer.d.ts.map +1 -0
  208. package/dist/types/src/stories/components/TasksContainer.d.ts +5 -0
  209. package/dist/types/src/stories/components/TasksContainer.d.ts.map +1 -0
  210. package/dist/types/src/stories/components/index.d.ts +8 -0
  211. package/dist/types/src/stories/components/index.d.ts.map +1 -0
  212. package/dist/types/src/stories/components/types.d.ts +7 -0
  213. package/dist/types/src/stories/components/types.d.ts.map +1 -0
  214. package/dist/types/src/stories/hooks/index.d.ts +3 -0
  215. package/dist/types/src/stories/hooks/index.d.ts.map +1 -0
  216. package/dist/types/src/stories/hooks/useFlush.d.ts +6 -0
  217. package/dist/types/src/stories/hooks/useFlush.d.ts.map +1 -0
  218. package/dist/types/src/stories/hooks/useMatcherExtension.d.ts +3 -0
  219. package/dist/types/src/stories/hooks/useMatcherExtension.d.ts.map +1 -0
  220. package/dist/types/src/stories/testing/data.d.ts +142 -0
  221. package/dist/types/src/stories/testing/data.d.ts.map +1 -0
  222. package/dist/types/src/stories/testing/index.d.ts +3 -0
  223. package/dist/types/src/stories/testing/index.d.ts.map +1 -0
  224. package/dist/types/src/stories/testing/testing.d.ts +26 -0
  225. package/dist/types/src/stories/testing/testing.d.ts.map +1 -0
  226. package/dist/types/src/testing/test-functions.d.ts +5 -2
  227. package/dist/types/src/testing/test-functions.d.ts.map +1 -1
  228. package/dist/types/src/testing/test-sequence.d.ts.map +1 -1
  229. package/dist/types/src/tools/function.d.ts.map +1 -1
  230. package/dist/types/src/tools/openapi.d.ts.map +1 -1
  231. package/dist/types/src/translations.d.ts +25 -13
  232. package/dist/types/src/translations.d.ts.map +1 -1
  233. package/dist/types/src/types/Assistant.d.ts +40 -0
  234. package/dist/types/src/types/Assistant.d.ts.map +1 -0
  235. package/dist/types/src/types/AssistantAction.d.ts +90 -0
  236. package/dist/types/src/types/AssistantAction.d.ts.map +1 -0
  237. package/dist/types/src/types/defs.d.ts +2 -0
  238. package/dist/types/src/types/defs.d.ts.map +1 -0
  239. package/dist/types/src/types/index.d.ts +3 -2
  240. package/dist/types/src/types/index.d.ts.map +1 -1
  241. package/dist/types/src/types/service.d.ts +6 -6
  242. package/dist/types/src/types/service.d.ts.map +1 -1
  243. package/dist/types/tsconfig.tsbuildinfo +1 -1
  244. package/package.json +83 -73
  245. package/src/AssistantPlugin.tsx +61 -41
  246. package/src/capabilities/ai-service.ts +28 -0
  247. package/src/capabilities/app-graph-builder.ts +9 -92
  248. package/src/capabilities/blueprint-definition.ts +32 -0
  249. package/src/capabilities/capabilities.ts +11 -3
  250. package/src/capabilities/edge-model-resolver.ts +29 -0
  251. package/src/capabilities/index.ts +6 -3
  252. package/src/capabilities/intent-resolver.ts +39 -11
  253. package/src/capabilities/react-surface.tsx +35 -27
  254. package/src/capabilities/toolkit.ts +106 -0
  255. package/src/components/AssistantSettings/AssistantSettings.tsx +1 -1
  256. package/src/components/BlueprintContainer.tsx +24 -0
  257. package/src/components/Chat/Chat.tsx +148 -95
  258. package/src/components/Chat/events.ts +50 -0
  259. package/src/components/Chat/index.ts +2 -0
  260. package/src/components/ChatContainer.tsx +39 -15
  261. package/src/components/ChatDialog.tsx +10 -7
  262. package/src/components/ChatPrompt/ChatActions.tsx +15 -20
  263. package/src/components/ChatPrompt/ChatOptions.tsx +59 -0
  264. package/src/components/ChatPrompt/ChatPresets.tsx +28 -0
  265. package/src/components/ChatPrompt/ChatReferences.tsx +11 -8
  266. package/src/components/ChatPrompt/ChatStatusIndicator.tsx +17 -4
  267. package/src/components/ChatPrompt/index.ts +2 -3
  268. package/src/components/ChatThread/ChatMessage.tsx +192 -148
  269. package/src/components/ChatThread/ChatThread.stories.tsx +221 -109
  270. package/src/components/ChatThread/ChatThread.tsx +12 -23
  271. package/src/components/ChatThread/Link.tsx +39 -0
  272. package/src/components/ChatThread/ToolBlock.tsx +41 -27
  273. package/src/components/ChatThread/reducer.ts +14 -14
  274. package/src/components/PromptSettings.tsx +41 -43
  275. package/src/components/SequenceContainer.tsx +32 -38
  276. package/src/components/SequenceEditor/SequenceEditor.stories.tsx +3 -2
  277. package/src/components/SequenceEditor/SequenceEditor.tsx +1 -1
  278. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +37 -35
  279. package/src/components/TemplateEditor/TemplateEditor.tsx +39 -23
  280. package/src/components/TemplateEditor/TemplateForm.stories.tsx +23 -16
  281. package/src/components/TemplateEditor/TemplateForm.tsx +50 -55
  282. package/src/components/Timeline/Timeline.stories.tsx +53 -0
  283. package/src/components/Timeline/Timeline.tsx +159 -0
  284. package/src/components/Timeline/index.ts +5 -0
  285. package/src/components/Toolbox/Toolbox.stories.tsx +7 -13
  286. package/src/components/Toolbox/Toolbox.tsx +21 -42
  287. package/src/components/index.ts +2 -5
  288. package/src/events.ts +2 -2
  289. package/src/functions/analysis.ts +20 -0
  290. package/src/functions/index.ts +7 -0
  291. package/src/functions/list.ts +42 -0
  292. package/src/functions/load.ts +43 -0
  293. package/src/hooks/chat-processor.ts +167 -188
  294. package/src/hooks/errors.ts +8 -0
  295. package/src/hooks/index.ts +8 -4
  296. package/src/hooks/presets.ts +53 -0
  297. package/src/hooks/useBlueprintRegistry.ts +79 -0
  298. package/src/hooks/useChatProcessor.ts +81 -0
  299. package/src/hooks/useChatServices.ts +72 -0
  300. package/src/hooks/useOnline.ts +10 -0
  301. package/src/hooks/usePresets.ts +45 -0
  302. package/src/hooks/{useContextProvider.ts → useReferencesProvider.ts} +18 -22
  303. package/src/hooks/useResolveRef.ts +33 -0
  304. package/src/parser/filter-generator.ts +6 -13
  305. package/src/parser/index.ts +1 -1
  306. package/src/parser/query-parser.ts +1 -1
  307. package/src/queue-logger.ts +5 -5
  308. package/src/stories/Chat.stories.tsx +246 -198
  309. package/src/stories/components/BlueprintContainer.tsx +34 -0
  310. package/src/stories/components/ChatContainer.tsx +80 -0
  311. package/src/stories/components/GraphContainer.tsx +118 -0
  312. package/src/stories/components/LoggingContainer.tsx +22 -0
  313. package/src/stories/components/SurfaceContainer.tsx +62 -0
  314. package/src/stories/components/TasksContainer.tsx +51 -0
  315. package/src/stories/components/index.ts +12 -0
  316. package/src/stories/components/types.ts +11 -0
  317. package/src/stories/hooks/index.ts +6 -0
  318. package/src/stories/hooks/useFlush.ts +35 -0
  319. package/src/stories/hooks/useMatcherExtension.ts +45 -0
  320. package/src/stories/testing/data.ts +130 -0
  321. package/src/stories/testing/index.ts +6 -0
  322. package/src/stories/testing/testing.tsx +162 -0
  323. package/src/testing/test-functions.ts +9 -4
  324. package/src/testing/test-sequence.ts +18 -20
  325. package/src/tools/function.ts +4 -1
  326. package/src/tools/openapi.test.ts +10 -8
  327. package/src/tools/openapi.ts +4 -1
  328. package/src/translations.ts +29 -13
  329. package/src/types/Assistant.ts +59 -0
  330. package/src/types/AssistantAction.ts +54 -0
  331. package/src/types/defs.ts +5 -0
  332. package/src/types/index.ts +4 -2
  333. package/dist/lib/browser/ChatContainer-6XNB5NEI.mjs.map +0 -7
  334. package/dist/lib/browser/ChatDialog-IMWPRXTO.mjs.map +0 -7
  335. package/dist/lib/browser/SequenceContainer-6XOYB2RN.mjs +0 -322
  336. package/dist/lib/browser/SequenceContainer-6XOYB2RN.mjs.map +0 -7
  337. package/dist/lib/browser/TemplateContainer-6ZGGH5T4.mjs.map +0 -7
  338. package/dist/lib/browser/ai-client-ML7OQWAO.mjs +0 -39
  339. package/dist/lib/browser/ai-client-ML7OQWAO.mjs.map +0 -7
  340. package/dist/lib/browser/app-graph-builder-UJ5NHRGK.mjs.map +0 -7
  341. package/dist/lib/browser/chunk-44HZKIAW.mjs.map +0 -7
  342. package/dist/lib/browser/chunk-NTBGTFTV.mjs.map +0 -7
  343. package/dist/lib/browser/chunk-OZL4OHTU.mjs +0 -157
  344. package/dist/lib/browser/chunk-OZL4OHTU.mjs.map +0 -7
  345. package/dist/lib/browser/chunk-TQ3QW3HJ.mjs.map +0 -7
  346. package/dist/lib/browser/chunk-TU7UUGWQ.mjs +0 -203
  347. package/dist/lib/browser/chunk-TU7UUGWQ.mjs.map +0 -7
  348. package/dist/lib/browser/chunk-WPZ4UANI.mjs +0 -16
  349. package/dist/lib/browser/chunk-WPZ4UANI.mjs.map +0 -7
  350. package/dist/lib/browser/intent-resolver-LEAPB55Q.mjs +0 -42
  351. package/dist/lib/browser/intent-resolver-LEAPB55Q.mjs.map +0 -7
  352. package/dist/lib/browser/react-surface-TMF7JJA4.mjs.map +0 -7
  353. package/dist/lib/node-esm/ChatContainer-VOLG7J6N.mjs.map +0 -7
  354. package/dist/lib/node-esm/ChatDialog-B2XNUNRM.mjs.map +0 -7
  355. package/dist/lib/node-esm/SequenceContainer-WWG6IMN3.mjs +0 -323
  356. package/dist/lib/node-esm/SequenceContainer-WWG6IMN3.mjs.map +0 -7
  357. package/dist/lib/node-esm/TemplateContainer-6KRNEMVE.mjs.map +0 -7
  358. package/dist/lib/node-esm/ai-client-2FQ434CT.mjs +0 -40
  359. package/dist/lib/node-esm/ai-client-2FQ434CT.mjs.map +0 -7
  360. package/dist/lib/node-esm/app-graph-builder-MEQ5CYNI.mjs.map +0 -7
  361. package/dist/lib/node-esm/chunk-D3HTVK5D.mjs.map +0 -7
  362. package/dist/lib/node-esm/chunk-E6V2RUQ2.mjs.map +0 -7
  363. package/dist/lib/node-esm/chunk-HVMVHP4R.mjs +0 -158
  364. package/dist/lib/node-esm/chunk-HVMVHP4R.mjs.map +0 -7
  365. package/dist/lib/node-esm/chunk-HXKRKIN2.mjs +0 -18
  366. package/dist/lib/node-esm/chunk-HXKRKIN2.mjs.map +0 -7
  367. package/dist/lib/node-esm/chunk-VESVUAOS.mjs.map +0 -7
  368. package/dist/lib/node-esm/chunk-YYUVTTVK.mjs +0 -204
  369. package/dist/lib/node-esm/chunk-YYUVTTVK.mjs.map +0 -7
  370. package/dist/lib/node-esm/intent-resolver-4ULF3F7U.mjs +0 -43
  371. package/dist/lib/node-esm/intent-resolver-4ULF3F7U.mjs.map +0 -7
  372. package/dist/lib/node-esm/react-surface-6XL6SWL2.mjs.map +0 -7
  373. package/dist/types/src/capabilities/ai-client.d.ts +0 -5
  374. package/dist/types/src/capabilities/ai-client.d.ts.map +0 -1
  375. package/dist/types/src/components/ChatPrompt/ChatOptionsMenu.d.ts +0 -9
  376. package/dist/types/src/components/ChatPrompt/ChatOptionsMenu.d.ts.map +0 -1
  377. package/dist/types/src/components/ChatPrompt/events.d.ts +0 -17
  378. package/dist/types/src/components/ChatPrompt/events.d.ts.map +0 -1
  379. package/dist/types/src/components/TemplateContainer.d.ts +0 -9
  380. package/dist/types/src/components/TemplateContainer.d.ts.map +0 -1
  381. package/dist/types/src/hooks/chat-processor.test.d.ts +0 -2
  382. package/dist/types/src/hooks/chat-processor.test.d.ts.map +0 -1
  383. package/dist/types/src/hooks/useBlueprints.d.ts +0 -4
  384. package/dist/types/src/hooks/useBlueprints.d.ts.map +0 -1
  385. package/dist/types/src/hooks/useContextProvider.d.ts +0 -23
  386. package/dist/types/src/hooks/useContextProvider.d.ts.map +0 -1
  387. package/dist/types/src/hooks/useServiceContainer.d.ts +0 -8
  388. package/dist/types/src/hooks/useServiceContainer.d.ts.map +0 -1
  389. package/dist/types/src/hooks/useTextInputEvents.d.ts +0 -13
  390. package/dist/types/src/hooks/useTextInputEvents.d.ts.map +0 -1
  391. package/dist/types/src/types/schema.d.ts +0 -71
  392. package/dist/types/src/types/schema.d.ts.map +0 -1
  393. package/dist/types/src/types/template.d.ts +0 -56
  394. package/dist/types/src/types/template.d.ts.map +0 -1
  395. package/src/capabilities/ai-client.ts +0 -39
  396. package/src/components/ChatPrompt/ChatOptionsMenu.tsx +0 -52
  397. package/src/components/ChatPrompt/events.ts +0 -12
  398. package/src/components/TemplateContainer.tsx +0 -25
  399. package/src/hooks/chat-processor.test.ts +0 -15
  400. package/src/hooks/useBlueprints.ts +0 -31
  401. package/src/hooks/useChatProcessor.tsx +0 -142
  402. package/src/hooks/useServiceContainer.ts +0 -42
  403. package/src/hooks/useTextInputEvents.ts +0 -49
  404. package/src/types/schema.ts +0 -86
  405. package/src/types/template.ts +0 -66
@@ -5,33 +5,35 @@
5
5
  import { type Schema } from 'effect';
6
6
  import React, { Fragment, useEffect } from 'react';
7
7
 
8
+ import { type Template } from '@dxos/blueprints';
8
9
  import { Input, Select, useTranslation } from '@dxos/react-ui';
9
10
  import { attentionSurface, groupBorder, mx } from '@dxos/react-ui-theme';
10
11
  import { isNonNullable } from '@dxos/util';
11
12
 
12
- import { TemplateEditor } from './TemplateEditor';
13
13
  import { meta } from '../../meta';
14
- import { type TemplateInput, TemplateInputType, type TemplateType } from '../../types';
14
+
15
+ import { TemplateEditor } from './TemplateEditor';
15
16
 
16
17
  export type TemplateFormProps = {
17
- template: TemplateType;
18
+ id: string;
19
+ template: Template.Template;
18
20
  schema?: Schema.Schema<any, any, any>;
19
21
  commandEditable?: boolean;
20
22
  };
21
23
 
22
- export const TemplateForm = ({ template, commandEditable = true }: TemplateFormProps) => {
24
+ export const TemplateForm = ({ id, template, commandEditable = true }: TemplateFormProps) => {
23
25
  const { t } = useTranslation(meta.id);
24
26
  usePromptInputs(template);
25
27
 
26
28
  return (
27
29
  <div className={mx('flex flex-col w-full overflow-hidden gap-4', groupBorder)}>
28
- {commandEditable && (
30
+ {/* {commandEditable && (
29
31
  <div className='flex items-center pl-4'>
30
32
  <span className='text-neutral-500'>/</span>
31
33
  <Input.Root>
32
34
  <Input.TextInput
33
35
  placeholder={t('command placeholder')}
34
- classNames={mx('is-full bg-transparent m-2')}
36
+ classNames='is-full bg-transparent m-2'
35
37
  value={template.command ?? ''}
36
38
  onChange={(event) => {
37
39
  template.command = event.target.value.replace(/\w/g, '');
@@ -39,9 +41,9 @@ export const TemplateForm = ({ template, commandEditable = true }: TemplateFormP
39
41
  />
40
42
  </Input.Root>
41
43
  </div>
42
- )}
44
+ )} */}
43
45
 
44
- <TemplateEditor template={template} classNames={[attentionSurface, 'min-h-[120px]']} />
46
+ <TemplateEditor id={id} template={template} classNames={[attentionSurface, 'min-h-[120px]']} />
45
47
 
46
48
  {(template.inputs?.length ?? 0) > 0 && (
47
49
  <div className='grid grid-cols-[10rem_10rem_1fr] gap-1 items-center'>
@@ -51,17 +53,17 @@ export const TemplateForm = ({ template, commandEditable = true }: TemplateFormP
51
53
 
52
54
  <Input.Root>
53
55
  <Select.Root
54
- value={String(input.type)}
55
- onValueChange={(type) => {
56
- input.type = getInputType(type) ?? TemplateInputType.VALUE;
56
+ value={input.kind}
57
+ onValueChange={(kind) => {
58
+ input.kind = kind as Template.InputKind;
57
59
  }}
58
60
  >
59
61
  <Select.TriggerButton placeholder='Type' classNames='is-full' />
60
62
  <Select.Portal>
61
63
  <Select.Content>
62
64
  <Select.Viewport>
63
- {inputTypes.map(({ value, label }) => (
64
- <Select.Option key={value} value={String(value)}>
65
+ {inputs.map(({ kind, label }) => (
66
+ <Select.Option key={kind} value={kind}>
65
67
  {label}
66
68
  </Select.Option>
67
69
  ))}
@@ -72,26 +74,20 @@ export const TemplateForm = ({ template, commandEditable = true }: TemplateFormP
72
74
  </Input.Root>
73
75
 
74
76
  <div>
75
- {input.type !== undefined &&
76
- [
77
- TemplateInputType.VALUE,
78
- TemplateInputType.CONTEXT,
79
- TemplateInputType.RESOLVER,
80
- TemplateInputType.SCHEMA,
81
- ].includes(input.type) && (
82
- <div>
83
- <Input.Root>
84
- <Input.TextInput
85
- placeholder={t('command placeholder')}
86
- classNames={mx('is-full bg-transparent')}
87
- value={input.value ?? ''}
88
- onChange={(event) => {
89
- input.value = event.target.value;
90
- }}
91
- />
92
- </Input.Root>
93
- </div>
94
- )}
77
+ {input.kind !== undefined && ['value', 'context', 'resolver', 'schema'].includes(input.kind) && (
78
+ <div>
79
+ <Input.Root>
80
+ <Input.TextInput
81
+ placeholder={t('command placeholder')}
82
+ classNames='is-full bg-transparent'
83
+ value={input.default ?? ''}
84
+ onChange={(event) => {
85
+ input.default = event.target.value;
86
+ }}
87
+ />
88
+ </Input.Root>
89
+ </div>
90
+ )}
95
91
  </div>
96
92
  </Fragment>
97
93
  ))}
@@ -101,57 +97,56 @@ export const TemplateForm = ({ template, commandEditable = true }: TemplateFormP
101
97
  );
102
98
  };
103
99
 
104
- const inputTypes = [
100
+ // TODO(burdon): Translations.
101
+ const inputs: { kind: Template.InputKind; label: string }[] = [
105
102
  {
106
- value: TemplateInputType.VALUE,
103
+ kind: 'value',
107
104
  label: 'Value',
108
105
  },
109
106
  {
110
- value: TemplateInputType.PASS_THROUGH,
107
+ kind: 'pass-through',
111
108
  label: 'Pass through',
112
109
  },
113
110
  {
114
- value: TemplateInputType.RETRIEVER,
111
+ kind: 'retriever',
115
112
  label: 'Retriever',
116
113
  },
117
- // {
118
- // value: TemplateInputType.FUNCTION,
119
- // label: 'Function',
120
- // },
121
- // {
122
- // value: TemplateInputType.QUERY,
123
- // label: 'Query',
124
- // },
125
114
  {
126
- value: TemplateInputType.RESOLVER,
115
+ kind: 'function',
116
+ label: 'Function',
117
+ },
118
+ {
119
+ kind: 'query',
120
+ label: 'Query',
121
+ },
122
+ {
123
+ kind: 'resolver',
127
124
  label: 'Resolver',
128
125
  },
129
126
  {
130
- value: TemplateInputType.CONTEXT,
127
+ kind: 'context',
131
128
  label: 'Context',
132
129
  },
133
130
  {
134
- value: TemplateInputType.SCHEMA,
131
+ kind: 'schema',
135
132
  label: 'Schema',
136
133
  },
137
134
  ];
138
135
 
139
- export const nameRegex = /\{\{([\w-]+)\}\}/;
140
-
141
- const getInputType = (type: string) => inputTypes.find(({ value }) => String(value) === type)?.value;
136
+ export const NAME_REGEXP = /\{\{([\w-]+)\}\}/;
142
137
 
143
- const usePromptInputs = (template: TemplateType) => {
138
+ const usePromptInputs = (template: Template.Template) => {
144
139
  useEffect(() => {
145
140
  const text = template.source ?? '';
146
141
  if (!template.inputs) {
147
142
  template.inputs = []; // TODO(burdon): Required?
148
143
  }
149
144
 
150
- const regex = new RegExp(nameRegex, 'g');
151
- const variables = new Set<string>([...text.matchAll(regex)].map((m) => m[1]));
145
+ const regex = new RegExp(NAME_REGEXP, 'g');
146
+ const variables = new Set<string>([...(text.target?.content.matchAll(regex) ?? [])].map((m) => m[1]));
152
147
 
153
148
  // Create map of unclaimed inputs.
154
- const unclaimed = new Map<string, TemplateInput>(
149
+ const unclaimed = new Map<string, Template.Input>(
155
150
  template.inputs?.filter(isNonNullable).map((input) => [input.name, input]),
156
151
  );
157
152
  const missing: string[] = [];
@@ -0,0 +1,53 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import '@dxos-theme';
6
+
7
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
+
9
+ import { faker } from '@dxos/random';
10
+ import { withTheme } from '@dxos/storybook-utils';
11
+
12
+ import { Timeline } from './Timeline';
13
+
14
+ faker.seed(1);
15
+
16
+ const meta: Meta<typeof Timeline> = {
17
+ title: 'plugins/plugin-assistant/Timeline',
18
+ component: Timeline,
19
+ decorators: [withTheme],
20
+ };
21
+
22
+ export default meta;
23
+
24
+ type Story = StoryObj<typeof meta>;
25
+
26
+ export const Default: Story = {
27
+ args: {
28
+ branches: [{ name: 'main' }, { name: 'feature-a' }, { name: 'feature-b' }, { name: 'feature-c' }],
29
+ commits: [
30
+ { id: 'c1', message: faker.lorem.paragraph(), branch: 'main' },
31
+ { id: 'c2', message: faker.lorem.paragraph(), branch: 'main', parent: 'c1' },
32
+ { id: 'c3', message: faker.lorem.paragraph(), branch: 'feature-a', parent: 'c2' },
33
+ { id: 'c4', message: faker.lorem.paragraph(), branch: 'main', parent: 'c2' },
34
+ { id: 'c5', message: faker.lorem.paragraph(), branch: 'feature-b', parent: 'c2' },
35
+ { id: 'c6', message: faker.lorem.paragraph(), branch: 'feature-a', parent: 'c3' },
36
+ { id: 'c7', message: faker.lorem.paragraph(), branch: 'feature-a', parent: 'c6' },
37
+ { id: 'c8', message: faker.lorem.paragraph(), branch: 'feature-c', parent: 'c6' },
38
+ { id: 'c9', message: faker.lorem.paragraph(), branch: 'main', parent: 'c4' },
39
+ ],
40
+ },
41
+ };
42
+
43
+ export const Linear: Story = {
44
+ args: {
45
+ branches: [{ name: 'main' }],
46
+ commits: [
47
+ { id: 'c1', message: faker.lorem.paragraph(), branch: 'main' },
48
+ { id: 'c2', message: faker.lorem.paragraph(), branch: 'main', parent: 'c1' },
49
+ { id: 'c3', message: faker.lorem.paragraph(), branch: 'main', parent: 'c2' },
50
+ { id: 'c4', message: faker.lorem.paragraph(), branch: 'main', parent: 'c3' },
51
+ ],
52
+ },
53
+ };
@@ -0,0 +1,159 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React, { Fragment, useMemo } from 'react';
6
+
7
+ import { type ThemedClassName } from '@dxos/react-ui';
8
+ import { mx } from '@dxos/react-ui-theme';
9
+ import { trim } from '@dxos/util';
10
+
11
+ export type Commit = {
12
+ id: string;
13
+ parent?: string;
14
+ branch: string;
15
+ message: string;
16
+ timestamp?: Date;
17
+ tags?: string[];
18
+ };
19
+
20
+ export type Branch = {
21
+ name: string;
22
+ };
23
+
24
+ export type Span = {
25
+ start: number;
26
+ end: number;
27
+ parent?: number;
28
+ };
29
+
30
+ export type TimelineProps = ThemedClassName<{ branches: Branch[]; commits: Commit[] }>;
31
+
32
+ // TODO(burdon): Reuse in toolCall messages.
33
+ // TODO(burdon): Key up/down; selected.
34
+ export const Timeline = ({ classNames, branches, commits }: TimelineProps) => {
35
+ const spans = useMemo(() => {
36
+ const spans = new Map<string, Span>();
37
+ branches.forEach((branch) => {
38
+ spans.set(branch.name, { start: -1, end: -1 });
39
+ });
40
+
41
+ commits.forEach((commit, index) => {
42
+ const span = spans.get(commit.branch);
43
+ if (span) {
44
+ if (span.start === -1) {
45
+ const parentIndex = commit.parent ? commits.findIndex((c) => c.id === commit.parent) : 0;
46
+ span.start = parentIndex;
47
+ span.parent = commit.parent
48
+ ? branches.findIndex((branch) => branch.name === commits[parentIndex].branch)
49
+ : undefined;
50
+ }
51
+ span.end = index;
52
+ }
53
+ });
54
+
55
+ return spans;
56
+ }, [commits, branches]);
57
+
58
+ return (
59
+ <div className={mx('flex flex-col w-full overflow-hidden', classNames)}>
60
+ {commits.map((commit, index) => {
61
+ return (
62
+ <div
63
+ key={commit.id}
64
+ className='group flex items-center gap-2 overflow-hidden hover:bg-hoverSurface'
65
+ style={{ height: `${lineHeight}px` }}
66
+ >
67
+ <svg width={branches.length * columnWidth} height={lineHeight} className='shrink-0'>
68
+ {branches.map((branch, j) => {
69
+ const span = spans.get(branch.name);
70
+ const color = colors[j % colors.length];
71
+ if (!span) {
72
+ return null;
73
+ }
74
+
75
+ return (
76
+ <Fragment key={j}>
77
+ {/* Upper */}
78
+ {index !== 0 && span.start !== -1 && span.start < index && span.end >= index && (
79
+ <line
80
+ x1={j * columnWidth + columnWidth / 2}
81
+ y1={0}
82
+ x2={j * columnWidth + columnWidth / 2}
83
+ y2={lineHeight / 2}
84
+ className={mx('stroke-2', color.stroke)}
85
+ />
86
+ )}
87
+ {/* Lower */}
88
+ {span.end !== -1 && (span.start < index || span.start === 0) && index < span.end && (
89
+ <line
90
+ x1={j * columnWidth + columnWidth / 2}
91
+ y1={lineHeight / 2}
92
+ x2={j * columnWidth + columnWidth / 2}
93
+ y2={lineHeight}
94
+ className={mx('stroke-2', color.stroke)}
95
+ />
96
+ )}
97
+ {/* Arc to parent */}
98
+ {span.start === index && span.parent !== undefined && span.parent !== -1 && (
99
+ <path
100
+ d={trim`
101
+ M ${0.5 + span.parent * columnWidth + columnWidth / 2} ${lineHeight / 2}
102
+ L ${j * columnWidth + columnWidth / 4} ${lineHeight / 2}
103
+ A ${lineHeight / 4} ${lineHeight / 4} 0 0 1 ${j * columnWidth + columnWidth / 2} ${(lineHeight * 3) / 4}
104
+ L ${j * columnWidth + columnWidth / 2} ${lineHeight}
105
+ `}
106
+ className={mx('stroke-2', color.stroke)}
107
+ fill='none'
108
+ />
109
+ )}
110
+ {branch.name === commit.branch && (
111
+ <circle
112
+ cx={j * columnWidth + columnWidth / 2}
113
+ cy={lineHeight / 2}
114
+ r={nodeRadius}
115
+ className={mx('stroke-2 fill-red-500', color.stroke, color.hover)}
116
+ />
117
+ )}
118
+ </Fragment>
119
+ );
120
+ })}
121
+ {branches.map((branch, j) => {
122
+ const color = colors[j % colors.length];
123
+ return (
124
+ branch.name === commit.branch && (
125
+ <circle
126
+ key={j}
127
+ cx={j * columnWidth + columnWidth / 2}
128
+ cy={lineHeight / 2}
129
+ r={nodeRadius}
130
+ className={mx('stroke-2', color.stroke, color.hover)}
131
+ />
132
+ )
133
+ );
134
+ })}
135
+ </svg>
136
+ <div className='text-sm truncate cursor-pointer text-subdued group-hover:text-baseText'>
137
+ {commit.message}
138
+ </div>
139
+ </div>
140
+ );
141
+ })}
142
+ </div>
143
+ );
144
+ };
145
+
146
+ const lineHeight = 24;
147
+ const columnWidth = 24;
148
+ const nodeRadius = 6;
149
+
150
+ const colors = [
151
+ { stroke: 'stroke-orange-500', hover: 'group-hover:fill-orange-500' },
152
+ { stroke: 'stroke-sky-500', hover: 'group-hover:fill-sky-500' },
153
+ { stroke: 'stroke-green-500', hover: 'group-hover:fill-green-500' },
154
+ { stroke: 'stroke-fuchsia-500', hover: 'group-hover:fill-fuchsia-500' },
155
+ { stroke: 'stroke-cyan-500', hover: 'group-hover:fill-cyan-500' },
156
+ { stroke: 'stroke-emerald-500', hover: 'group-hover:fill-emerald-500' },
157
+ { stroke: 'stroke-violet-500', hover: 'group-hover:fill-violet-500' },
158
+ { stroke: 'stroke-teal-500', hover: 'group-hover:fill-teal-500' },
159
+ ];
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './Timeline';
@@ -7,9 +7,9 @@ import '@dxos-theme';
7
7
  import { type Meta } from '@storybook/react-vite';
8
8
  import React from 'react';
9
9
 
10
- import { IntentPlugin, Capabilities, useCapabilities, SettingsPlugin } from '@dxos/app-framework';
10
+ import { IntentPlugin, SettingsPlugin } from '@dxos/app-framework';
11
11
  import { withPluginManager } from '@dxos/app-framework/testing';
12
- import { capabilities } from '@dxos/artifact-testing';
12
+ import { capabilities } from '@dxos/assistant-testing';
13
13
  import { ChessPlugin } from '@dxos/plugin-chess';
14
14
  import { ClientPlugin } from '@dxos/plugin-client';
15
15
  import { MapPlugin } from '@dxos/plugin-map';
@@ -17,18 +17,12 @@ import { SpacePlugin } from '@dxos/plugin-space';
17
17
  import { TablePlugin } from '@dxos/plugin-table';
18
18
  import { withLayout, withTheme } from '@dxos/storybook-utils';
19
19
 
20
- import { Toolbox, type ToolboxProps } from './Toolbox';
21
20
  import { translations } from '../../translations';
22
21
 
22
+ import { Toolbox, type ToolboxProps } from './Toolbox';
23
+
23
24
  const DefaultStory = (props: ToolboxProps) => {
24
- const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);
25
- return (
26
- <Toolbox
27
- {...props}
28
- artifacts={artifactDefinitions}
29
- classNames='w-[30rem] h-[15rem] rounded-sm border border-separator py-1'
30
- />
31
- );
25
+ return <Toolbox {...props} classNames='w-[30rem] h-[15rem] rounded-sm border border-separator py-1' />;
32
26
  };
33
27
 
34
28
  const meta: Meta<typeof Toolbox> = {
@@ -39,7 +33,7 @@ const meta: Meta<typeof Toolbox> = {
39
33
  withPluginManager({
40
34
  plugins: [
41
35
  ClientPlugin({
42
- onClientInitialized: async (_, client) => {
36
+ onClientInitialized: async ({ client }) => {
43
37
  await client.halo.createIdentity();
44
38
  },
45
39
  }),
@@ -65,4 +59,4 @@ export default meta;
65
59
 
66
60
  type Story = Meta<typeof Toolbox>;
67
61
 
68
- export const Default: Story = {};
62
+ export const Default = {} satisfies Story;
@@ -2,12 +2,10 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import React, { useState, useEffect, Fragment, type FC } from 'react';
5
+ import React, { type FC, Fragment, useEffect, useState } from 'react';
6
6
 
7
- import { parseToolName, type Tool } from '@dxos/ai';
8
- import { Capabilities, useCapabilities } from '@dxos/app-framework';
9
- import { type ArtifactDefinition } from '@dxos/artifact';
10
- import { type Blueprint } from '@dxos/assistant';
7
+ import { type Tool } from '@dxos/ai';
8
+ import { type Blueprint } from '@dxos/blueprints';
11
9
  import { type Ref } from '@dxos/echo';
12
10
  import { FunctionType } from '@dxos/functions';
13
11
  import { log } from '@dxos/log';
@@ -16,29 +14,20 @@ import { type ThemedClassName } from '@dxos/react-ui';
16
14
  import { useTranslation } from '@dxos/react-ui';
17
15
  import { mx } from '@dxos/react-ui-theme';
18
16
 
19
- import { type ChatProcessor } from '../../hooks';
17
+ import { type AiChatProcessor } from '../../hooks';
20
18
  import { meta } from '../../meta';
21
19
  import { createToolsFromService } from '../../tools';
22
20
  import { ServiceType } from '../../types';
23
21
 
24
22
  export type ToolboxProps = ThemedClassName<{
25
- blueprints?: readonly Ref.Ref<Blueprint>[];
26
- artifacts?: ArtifactDefinition[];
27
23
  services?: { service: ServiceType; tools: Tool[] }[];
28
24
  functions?: FunctionType[];
29
- activeBlueprints?: readonly Ref.Ref<Blueprint>[];
30
- striped?: boolean;
25
+ // TODO(burdon): Combine into single array.
26
+ blueprints?: readonly Ref.Ref<Blueprint.Blueprint>[];
27
+ activeBlueprints?: readonly Ref.Ref<Blueprint.Blueprint>[];
31
28
  }>;
32
29
 
33
- export const Toolbox = ({
34
- classNames,
35
- artifacts,
36
- functions,
37
- services,
38
- blueprints,
39
- activeBlueprints,
40
- striped,
41
- }: ToolboxProps) => {
30
+ export const Toolbox = ({ classNames, functions, services, blueprints, activeBlueprints }: ToolboxProps) => {
42
31
  const { t } = useTranslation(meta.id);
43
32
 
44
33
  return (
@@ -49,7 +38,7 @@ export const Toolbox = ({
49
38
  items={blueprints.map(({ target }) => ({
50
39
  name: target?.name ?? '',
51
40
  description: target?.description ?? '',
52
- subitems: target?.tools.map((toolId) => ({ name: `∙ ${parseToolName(toolId)}` })),
41
+ subitems: target?.tools.map((toolId) => ({ name: `∙ ${safeToolId(toolId)}` })),
53
42
  }))}
54
43
  />
55
44
  )}
@@ -60,18 +49,7 @@ export const Toolbox = ({
60
49
  items={activeBlueprints.map(({ target }) => ({
61
50
  name: target?.name ?? '',
62
51
  description: target?.description ?? '',
63
- subitems: target?.tools.map((toolId) => ({ name: `∙ ${parseToolName(toolId)}` })),
64
- }))}
65
- />
66
- )}
67
-
68
- {artifacts && artifacts.length > 0 && (
69
- <Section
70
- title='Artifacts'
71
- items={artifacts.map(({ name, description, tools }) => ({
72
- name,
73
- description,
74
- subitems: tools.map(({ name, description }) => ({ name: `∙ ${parseToolName(name)}`, description })),
52
+ subitems: target?.tools.map((toolId) => ({ name: `∙ ${safeToolId(toolId)}` })),
75
53
  }))}
76
54
  />
77
55
  )}
@@ -91,11 +69,9 @@ export const Toolbox = ({
91
69
  <Section title='Functions' items={functions.map(({ name, description }) => ({ name, description }))} />
92
70
  )}
93
71
 
94
- {!blueprints?.length &&
95
- !activeBlueprints?.length &&
96
- !artifacts?.length &&
97
- !services?.length &&
98
- !functions?.length && <div>{t('no tools')}</div>}
72
+ {!blueprints?.length && !activeBlueprints?.length && !services?.length && !functions?.length && (
73
+ <div>{t('no tools')}</div>
74
+ )}
99
75
  </div>
100
76
  );
101
77
  };
@@ -134,12 +110,12 @@ const Section: FC<{
134
110
  );
135
111
  };
136
112
 
137
- export type ToolboxContainerProps = ThemedClassName<{ space?: Space; processor?: ChatProcessor }>;
113
+ export type ToolboxContainerProps = ThemedClassName<{
114
+ space?: Space;
115
+ processor?: AiChatProcessor;
116
+ }>;
138
117
 
139
118
  export const ToolboxContainer = ({ classNames, space, processor }: ToolboxContainerProps) => {
140
- // Plugin artifacts.
141
- const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);
142
-
143
119
  // Registered services.
144
120
  const services = useQuery(space, Filter.type(ServiceType));
145
121
  const [serviceTools, setServiceTools] = useState<{ service: ServiceType; tools: Tool[] }[]>([]);
@@ -161,9 +137,12 @@ export const ToolboxContainer = ({ classNames, space, processor }: ToolboxContai
161
137
  <Toolbox
162
138
  classNames={classNames}
163
139
  blueprints={processor?.context.blueprints.value}
164
- artifacts={artifactDefinitions}
165
140
  services={serviceTools}
166
141
  functions={functions}
167
142
  />
168
143
  );
169
144
  };
145
+
146
+ const safeToolId = (name: string) => {
147
+ return name.split('_').pop();
148
+ };
@@ -8,13 +8,10 @@ export * from './AssistantSettings';
8
8
  export * from './Chat';
9
9
  export * from './PromptSettings';
10
10
  export * from './TemplateEditor';
11
+ export * from './Timeline';
11
12
  export * from './Toolbox';
12
13
 
13
- // TODO(burdon): Lazy loading causes issues with Tabster.
14
- // Repro: open assistant dialog then close.
15
- // https://github.com/microsoft/fluentui/issues/34020
16
-
14
+ export const BlueprintContainer = lazy(() => import('./BlueprintContainer'));
17
15
  export const ChatContainer = lazy(() => import('./ChatContainer'));
18
16
  export const ChatDialog = lazy(() => import('./ChatDialog'));
19
17
  export const SequenceContainer = lazy(() => import('./SequenceContainer'));
20
- export const TemplateContainer = lazy(() => import('./TemplateContainer'));
package/src/events.ts CHANGED
@@ -2,10 +2,10 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Events } from '@dxos/app-framework';
5
+ import { defineEvent } from '@dxos/app-framework';
6
6
 
7
7
  import { meta } from './meta';
8
8
 
9
9
  export namespace AssistantEvents {
10
- export const AiClientReady = Events.createStateEvent(`${meta.id}/ai-client-ready`);
10
+ export const SetupAiServiceProviders = defineEvent(`${meta.id}/event/setup-ai-service-providers`);
11
11
  }
@@ -0,0 +1,20 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Effect, Schema } from 'effect';
6
+
7
+ import { defineFunction } from '@dxos/functions';
8
+ import { log } from '@dxos/log';
9
+
10
+ export default defineFunction({
11
+ name: 'dxos.org/function/assistant-analysis',
12
+ description: 'Enter analysis analysis mode.',
13
+ inputSchema: Schema.Struct({
14
+ enable: Schema.Boolean.annotations({ description: 'Enable or disable analysis mode.' }),
15
+ }),
16
+ outputSchema: Schema.Void,
17
+ handler: Effect.fn(function* ({ data: { enable } }) {
18
+ log.info('analysis mode', { enable });
19
+ }),
20
+ });
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export { default as analysis } from './analysis';
6
+ export { default as list } from './list';
7
+ export { default as load } from './load';