@dxos/plugin-assistant 0.8.2-staging.7ac8446 → 0.8.3-main.672df60

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 (365) hide show
  1. package/dist/lib/browser/AssistantDialog-UAZSN6GT.mjs +46 -0
  2. package/dist/lib/browser/AssistantDialog-UAZSN6GT.mjs.map +7 -0
  3. package/dist/lib/browser/BlueprintEditor-DGV4KJDM.mjs +45 -0
  4. package/dist/lib/browser/BlueprintEditor-DGV4KJDM.mjs.map +7 -0
  5. package/dist/lib/browser/ChatContainer-UTN3AO5U.mjs +39 -0
  6. package/dist/lib/browser/ChatContainer-UTN3AO5U.mjs.map +7 -0
  7. package/dist/lib/browser/TemplateContainer-AKUYL4AV.mjs +28 -0
  8. package/dist/lib/browser/TemplateContainer-AKUYL4AV.mjs.map +7 -0
  9. package/dist/lib/browser/{ai-client-CDZLSNXE.mjs → ai-client-COXVUC6V.mjs} +6 -6
  10. package/dist/lib/browser/ai-client-COXVUC6V.mjs.map +7 -0
  11. package/dist/lib/browser/app-graph-builder-56OZ5RW4.mjs +206 -0
  12. package/dist/lib/browser/app-graph-builder-56OZ5RW4.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-TXJWGWJ7.mjs → chunk-3F44MBHU.mjs} +3 -3
  14. package/dist/lib/browser/chunk-3F44MBHU.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-6SD7S7W5.mjs +157 -0
  16. package/dist/lib/browser/chunk-6SD7S7W5.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-JQFUME3B.mjs +87 -0
  18. package/dist/lib/{node-esm/chunk-PBZA7XJR.mjs.map → browser/chunk-JQFUME3B.mjs.map} +1 -1
  19. package/dist/lib/browser/chunk-NBSPGIHL.mjs +206 -0
  20. package/dist/lib/browser/chunk-NBSPGIHL.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-Q6UZ4F3H.mjs +96 -0
  22. package/dist/lib/browser/chunk-Q6UZ4F3H.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-FMB7RGMP.mjs → chunk-Q6XE3O3E.mjs} +1714 -1536
  24. package/dist/lib/browser/chunk-Q6XE3O3E.mjs.map +7 -0
  25. package/dist/lib/browser/{chunk-3HCI5FIL.mjs → chunk-XOZ7YMO3.mjs} +3 -3
  26. package/dist/lib/browser/{chunk-3HCI5FIL.mjs.map → chunk-XOZ7YMO3.mjs.map} +1 -1
  27. package/dist/lib/browser/index.mjs +47 -23
  28. package/dist/lib/browser/index.mjs.map +3 -3
  29. package/dist/lib/browser/intent-resolver-GWELYIX2.mjs +39 -0
  30. package/dist/lib/browser/intent-resolver-GWELYIX2.mjs.map +7 -0
  31. package/dist/lib/browser/meta.json +1 -1
  32. package/dist/lib/browser/react-surface-DGS34EON.mjs +144 -0
  33. package/dist/lib/browser/react-surface-DGS34EON.mjs.map +7 -0
  34. package/dist/lib/browser/{settings-U6UFQX32.mjs → settings-BTFB7IQ6.mjs} +5 -5
  35. package/dist/lib/browser/settings-BTFB7IQ6.mjs.map +7 -0
  36. package/dist/lib/browser/types/index.mjs +6 -2
  37. package/dist/lib/node/AssistantDialog-RTB5Q7FP.cjs +72 -0
  38. package/dist/lib/node/AssistantDialog-RTB5Q7FP.cjs.map +7 -0
  39. package/dist/lib/node/BlueprintEditor-43VM3XPO.cjs +72 -0
  40. package/dist/lib/node/BlueprintEditor-43VM3XPO.cjs.map +7 -0
  41. package/dist/lib/node/{ChatContainer-ZJ5JXF6A.cjs → ChatContainer-P3JL4VZ7.cjs} +25 -19
  42. package/dist/lib/node/ChatContainer-P3JL4VZ7.cjs.map +7 -0
  43. package/dist/lib/node/TemplateContainer-CTG2MB4W.cjs +58 -0
  44. package/dist/lib/node/TemplateContainer-CTG2MB4W.cjs.map +7 -0
  45. package/dist/lib/node/{ai-client-URCCYU6B.cjs → ai-client-R2CGEYZW.cjs} +13 -13
  46. package/dist/lib/node/ai-client-R2CGEYZW.cjs.map +7 -0
  47. package/dist/lib/node/app-graph-builder-QLF353LH.cjs +216 -0
  48. package/dist/lib/node/app-graph-builder-QLF353LH.cjs.map +7 -0
  49. package/dist/lib/node/{chunk-XI2ARIEO.cjs → chunk-4EEWTDQK.cjs} +45 -39
  50. package/dist/lib/node/{chunk-XI2ARIEO.cjs.map → chunk-4EEWTDQK.cjs.map} +1 -1
  51. package/dist/lib/node/chunk-BWL5A3O5.cjs +184 -0
  52. package/dist/lib/node/chunk-BWL5A3O5.cjs.map +7 -0
  53. package/dist/lib/node/chunk-HRNIUYVQ.cjs +128 -0
  54. package/dist/lib/node/chunk-HRNIUYVQ.cjs.map +7 -0
  55. package/dist/lib/node/{chunk-Q5XWEMHB.cjs → chunk-P74TWGMG.cjs} +6 -6
  56. package/dist/lib/node/{chunk-Q5XWEMHB.cjs.map → chunk-P74TWGMG.cjs.map} +1 -1
  57. package/dist/lib/node/{chunk-RPBKMP2E.cjs → chunk-PG7YNQ4R.cjs} +1523 -1338
  58. package/dist/lib/node/chunk-PG7YNQ4R.cjs.map +7 -0
  59. package/dist/lib/node/{chunk-GBUNQ257.cjs → chunk-TS3H5OSX.cjs} +7 -7
  60. package/dist/lib/node/chunk-TS3H5OSX.cjs.map +7 -0
  61. package/dist/lib/node/chunk-UNVDZOLA.cjs +231 -0
  62. package/dist/lib/node/chunk-UNVDZOLA.cjs.map +7 -0
  63. package/dist/lib/node/index.cjs +88 -65
  64. package/dist/lib/node/index.cjs.map +3 -3
  65. package/dist/lib/node/{intent-resolver-R3OSTIMH.cjs → intent-resolver-U7663JU7.cjs} +15 -21
  66. package/dist/lib/node/intent-resolver-U7663JU7.cjs.map +7 -0
  67. package/dist/lib/node/meta.json +1 -1
  68. package/dist/lib/node/react-surface-QXZTILW6.cjs +157 -0
  69. package/dist/lib/node/react-surface-QXZTILW6.cjs.map +7 -0
  70. package/dist/lib/node/{settings-TXGRCYAL.cjs → settings-LBJMT6YB.cjs} +9 -9
  71. package/dist/lib/node/settings-LBJMT6YB.cjs.map +7 -0
  72. package/dist/lib/node/types/index.cjs +17 -13
  73. package/dist/lib/node/types/index.cjs.map +2 -2
  74. package/dist/lib/node-esm/AssistantDialog-DONAO6SA.mjs +47 -0
  75. package/dist/lib/node-esm/AssistantDialog-DONAO6SA.mjs.map +7 -0
  76. package/dist/lib/node-esm/BlueprintEditor-CTARB2FO.mjs +47 -0
  77. package/dist/lib/node-esm/BlueprintEditor-CTARB2FO.mjs.map +7 -0
  78. package/dist/lib/node-esm/ChatContainer-FVIGCDIG.mjs +40 -0
  79. package/dist/lib/node-esm/ChatContainer-FVIGCDIG.mjs.map +7 -0
  80. package/dist/lib/node-esm/TemplateContainer-IVDQ4XQG.mjs +29 -0
  81. package/dist/lib/node-esm/TemplateContainer-IVDQ4XQG.mjs.map +7 -0
  82. package/dist/lib/node-esm/{ai-client-WMHS5EGV.mjs → ai-client-I5LXHMOZ.mjs} +6 -6
  83. package/dist/lib/node-esm/ai-client-I5LXHMOZ.mjs.map +7 -0
  84. package/dist/lib/node-esm/app-graph-builder-5YX5TKKT.mjs +207 -0
  85. package/dist/lib/node-esm/app-graph-builder-5YX5TKKT.mjs.map +7 -0
  86. package/dist/lib/node-esm/{chunk-ECRK6TUQ.mjs → chunk-BB2TAT4P.mjs} +3 -3
  87. package/dist/lib/node-esm/{chunk-ECRK6TUQ.mjs.map → chunk-BB2TAT4P.mjs.map} +1 -1
  88. package/dist/lib/node-esm/chunk-CDAILLCU.mjs +98 -0
  89. package/dist/lib/node-esm/chunk-CDAILLCU.mjs.map +7 -0
  90. package/dist/lib/node-esm/chunk-GJE4WCUJ.mjs +158 -0
  91. package/dist/lib/node-esm/chunk-GJE4WCUJ.mjs.map +7 -0
  92. package/dist/lib/node-esm/{chunk-6JK5HEUQ.mjs → chunk-HLPGKJ7N.mjs} +3 -3
  93. package/dist/lib/node-esm/chunk-HLPGKJ7N.mjs.map +7 -0
  94. package/dist/lib/node-esm/{chunk-MVDAY3CZ.mjs → chunk-MNH6E6EB.mjs} +1714 -1536
  95. package/dist/lib/node-esm/chunk-MNH6E6EB.mjs.map +7 -0
  96. package/dist/lib/node-esm/{chunk-PBZA7XJR.mjs → chunk-OYN6HLXZ.mjs} +42 -36
  97. package/dist/lib/{browser/chunk-NFUHCW2J.mjs.map → node-esm/chunk-OYN6HLXZ.mjs.map} +1 -1
  98. package/dist/lib/node-esm/chunk-TQYSF2GS.mjs +207 -0
  99. package/dist/lib/node-esm/chunk-TQYSF2GS.mjs.map +7 -0
  100. package/dist/lib/node-esm/index.mjs +47 -23
  101. package/dist/lib/node-esm/index.mjs.map +3 -3
  102. package/dist/lib/node-esm/intent-resolver-N5TM3RTL.mjs +40 -0
  103. package/dist/lib/node-esm/intent-resolver-N5TM3RTL.mjs.map +7 -0
  104. package/dist/lib/node-esm/meta.json +1 -1
  105. package/dist/lib/node-esm/react-surface-FTKGQQD2.mjs +145 -0
  106. package/dist/lib/node-esm/react-surface-FTKGQQD2.mjs.map +7 -0
  107. package/dist/lib/node-esm/{settings-DZU5PNXM.mjs → settings-TGCCAH5D.mjs} +5 -5
  108. package/dist/lib/node-esm/settings-TGCCAH5D.mjs.map +7 -0
  109. package/dist/lib/node-esm/types/index.mjs +6 -2
  110. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/ai-client.d.ts +3 -3
  112. package/dist/types/src/capabilities/ai-client.d.ts.map +1 -1
  113. package/dist/types/src/capabilities/app-graph-builder.d.ts +2 -179
  114. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  115. package/dist/types/src/capabilities/capabilities.d.ts +1 -1
  116. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/index.d.ts +3 -179
  118. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  119. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  120. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  121. package/dist/types/src/components/AmbientDialog/AmbientDialog.d.ts +3 -1
  122. package/dist/types/src/components/AmbientDialog/AmbientDialog.d.ts.map +1 -1
  123. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  124. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.d.ts +8 -0
  125. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.d.ts.map +1 -0
  126. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.stories.d.ts +8 -0
  127. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.stories.d.ts.map +1 -0
  128. package/dist/types/src/components/BlueprintEditor/index.d.ts +3 -0
  129. package/dist/types/src/components/BlueprintEditor/index.d.ts.map +1 -0
  130. package/dist/types/src/components/ChatContainer.d.ts +4 -3
  131. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  132. package/dist/types/src/components/Prompt/Prompt.d.ts +5 -2
  133. package/dist/types/src/components/Prompt/Prompt.d.ts.map +1 -1
  134. package/dist/types/src/components/Prompt/Prompt.stories.d.ts +6 -3
  135. package/dist/types/src/components/Prompt/Prompt.stories.d.ts.map +1 -1
  136. package/dist/types/src/components/Prompt/PromptBar.d.ts +9 -4
  137. package/dist/types/src/components/Prompt/PromptBar.d.ts.map +1 -1
  138. package/dist/types/src/components/Prompt/PromptBar.stories.d.ts +9 -0
  139. package/dist/types/src/components/Prompt/PromptBar.stories.d.ts.map +1 -0
  140. package/dist/types/src/components/Prompt/autocomplete.d.ts +5 -1
  141. package/dist/types/src/components/Prompt/autocomplete.d.ts.map +1 -1
  142. package/dist/types/src/components/Prompt/references.d.ts.map +1 -1
  143. package/dist/types/src/components/PromptSettings.d.ts +6 -0
  144. package/dist/types/src/components/PromptSettings.d.ts.map +1 -0
  145. package/dist/types/src/components/TemplateContainer.d.ts.map +1 -1
  146. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  147. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  148. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +2 -2
  149. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  150. package/dist/types/src/components/Thread/Thread.d.ts +2 -2
  151. package/dist/types/src/components/Thread/Thread.d.ts.map +1 -1
  152. package/dist/types/src/components/Thread/Thread.stories.d.ts.map +1 -1
  153. package/dist/types/src/components/Thread/ThreadContainer.d.ts +1 -1
  154. package/dist/types/src/components/Thread/ThreadContainer.d.ts.map +1 -1
  155. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts +2 -2
  156. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts.map +1 -1
  157. package/dist/types/src/components/Thread/ThreadMessage.d.ts +4 -2
  158. package/dist/types/src/components/Thread/ThreadMessage.d.ts.map +1 -1
  159. package/dist/types/src/components/Thread/ToolInvocations.d.ts +1 -1
  160. package/dist/types/src/components/Thread/ToolInvocations.d.ts.map +1 -1
  161. package/dist/types/src/components/Thread/reducer.d.ts +1 -1
  162. package/dist/types/src/components/Thread/reducer.d.ts.map +1 -1
  163. package/dist/types/src/components/Toolbox/Toolbox.d.ts +3 -2
  164. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  165. package/dist/types/src/components/index.d.ts +5 -6
  166. package/dist/types/src/components/index.d.ts.map +1 -1
  167. package/dist/types/src/experimental/transcription/index.d.ts +1 -0
  168. package/dist/types/src/experimental/transcription/index.d.ts.map +1 -0
  169. package/dist/types/src/hooks/index.d.ts +0 -1
  170. package/dist/types/src/hooks/index.d.ts.map +1 -1
  171. package/dist/types/src/hooks/processor.d.ts +6 -5
  172. package/dist/types/src/hooks/processor.d.ts.map +1 -1
  173. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  174. package/dist/types/src/hooks/useContextProvider.d.ts +1 -1
  175. package/dist/types/src/hooks/useContextProvider.d.ts.map +1 -1
  176. package/dist/types/src/hooks/useMessageQueue.d.ts +11 -10
  177. package/dist/types/src/hooks/useMessageQueue.d.ts.map +1 -1
  178. package/dist/types/src/hooks/useServices.d.ts.map +1 -1
  179. package/dist/types/src/hooks/useTextInputEvents.d.ts.map +1 -1
  180. package/dist/types/src/parser/filter-generator.d.ts +4 -0
  181. package/dist/types/src/parser/filter-generator.d.ts.map +1 -0
  182. package/dist/types/src/parser/filter-generator.test.d.ts +2 -0
  183. package/dist/types/src/parser/filter-generator.test.d.ts.map +1 -0
  184. package/dist/types/src/parser/index.d.ts +4 -0
  185. package/dist/types/src/parser/index.d.ts.map +1 -0
  186. package/dist/types/src/parser/query-parser.d.ts +15 -0
  187. package/dist/types/src/parser/query-parser.d.ts.map +1 -0
  188. package/dist/types/src/parser/query-parser.test.d.ts +2 -0
  189. package/dist/types/src/parser/query-parser.test.d.ts.map +1 -0
  190. package/dist/types/src/parser/types.d.ts +24 -0
  191. package/dist/types/src/parser/types.d.ts.map +1 -0
  192. package/dist/types/src/stories/Prompt.stories.d.ts +8 -0
  193. package/dist/types/src/stories/Prompt.stories.d.ts.map +1 -0
  194. package/dist/types/src/stories/Query.stories.d.ts +19 -0
  195. package/dist/types/src/stories/Query.stories.d.ts.map +1 -0
  196. package/dist/types/src/stories/Research.stories.d.ts +15 -0
  197. package/dist/types/src/stories/Research.stories.d.ts.map +1 -0
  198. package/dist/types/src/stories/test-data.d.ts +3 -0
  199. package/dist/types/src/stories/test-data.d.ts.map +1 -0
  200. package/dist/types/src/stories/testing.d.ts +12 -0
  201. package/dist/types/src/stories/testing.d.ts.map +1 -0
  202. package/dist/types/src/testing/index.d.ts +1 -0
  203. package/dist/types/src/testing/index.d.ts.map +1 -1
  204. package/dist/types/src/testing/test-blueprint.d.ts +14 -0
  205. package/dist/types/src/testing/test-blueprint.d.ts.map +1 -0
  206. package/dist/types/src/testing/test-functions.d.ts +1 -1
  207. package/dist/types/src/testing/test-functions.d.ts.map +1 -1
  208. package/dist/types/src/tools/function.d.ts +4 -4
  209. package/dist/types/src/tools/function.d.ts.map +1 -1
  210. package/dist/types/src/tools/openapi.d.ts +3 -3
  211. package/dist/types/src/tools/openapi.d.ts.map +1 -1
  212. package/dist/types/src/translations.d.ts +6 -0
  213. package/dist/types/src/translations.d.ts.map +1 -1
  214. package/dist/types/src/types/chat.d.ts +18 -8
  215. package/dist/types/src/types/chat.d.ts.map +1 -1
  216. package/dist/types/src/types/service.d.ts +96 -95
  217. package/dist/types/src/types/service.d.ts.map +1 -1
  218. package/dist/types/src/types/template.d.ts +52 -52
  219. package/dist/types/src/types/template.d.ts.map +1 -1
  220. package/dist/types/src/types/types.d.ts +34 -23
  221. package/dist/types/src/types/types.d.ts.map +1 -1
  222. package/dist/types/tsconfig.tsbuildinfo +1 -1
  223. package/package.json +79 -61
  224. package/src/AssistantPlugin.tsx +12 -11
  225. package/src/capabilities/ai-client.ts +5 -6
  226. package/src/capabilities/app-graph-builder.ts +173 -135
  227. package/src/capabilities/capabilities.ts +1 -1
  228. package/src/capabilities/index.ts +1 -1
  229. package/src/capabilities/intent-resolver.ts +10 -11
  230. package/src/capabilities/react-surface.tsx +88 -22
  231. package/src/capabilities/settings.ts +2 -2
  232. package/src/components/AmbientDialog/AmbientDialog.stories.tsx +2 -2
  233. package/src/components/AmbientDialog/AmbientDialog.tsx +27 -13
  234. package/src/components/AssistantDialog.tsx +1 -1
  235. package/src/components/AssistantSettings/AssistantSettings.tsx +29 -7
  236. package/src/components/BlueprintEditor/BlueprintEditor.stories.tsx +32 -0
  237. package/src/components/BlueprintEditor/BlueprintEditor.tsx +40 -0
  238. package/src/components/BlueprintEditor/index.ts +7 -0
  239. package/src/components/ChatContainer.tsx +6 -8
  240. package/src/components/Prompt/Prompt.stories.tsx +60 -52
  241. package/src/components/Prompt/Prompt.tsx +24 -10
  242. package/src/components/Prompt/PromptBar.stories.tsx +69 -0
  243. package/src/components/Prompt/PromptBar.tsx +82 -88
  244. package/src/components/Prompt/autocomplete.ts +14 -8
  245. package/src/components/Prompt/references.ts +3 -3
  246. package/src/components/PromptSettings.tsx +91 -0
  247. package/src/components/TemplateContainer.tsx +3 -79
  248. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +4 -4
  249. package/src/components/TemplateEditor/TemplateForm.stories.tsx +3 -3
  250. package/src/components/TemplateEditor/TemplateForm.tsx +2 -2
  251. package/src/components/Thread/Thread.stories.tsx +14 -17
  252. package/src/components/Thread/Thread.tsx +2 -2
  253. package/src/components/Thread/ThreadContainer.stories.tsx +83 -62
  254. package/src/components/Thread/ThreadContainer.tsx +26 -5
  255. package/src/components/Thread/ThreadMessage.tsx +49 -11
  256. package/src/components/Thread/ToolInvocations.tsx +9 -7
  257. package/src/components/Thread/reducer.ts +1 -1
  258. package/src/components/Toolbox/Toolbox.stories.tsx +4 -4
  259. package/src/components/Toolbox/Toolbox.tsx +5 -4
  260. package/src/components/index.ts +4 -1
  261. package/src/experimental/transcription/index.ts +3 -0
  262. package/src/hooks/index.ts +0 -1
  263. package/src/hooks/processor.ts +68 -8
  264. package/src/hooks/useChatProcessor.tsx +12 -11
  265. package/src/hooks/useContextProvider.ts +20 -17
  266. package/src/hooks/useMessageQueue.ts +5 -5
  267. package/src/meta.ts +2 -2
  268. package/src/parser/filter-generator.test.ts +32 -0
  269. package/src/parser/filter-generator.ts +81 -0
  270. package/src/parser/index.ts +7 -0
  271. package/src/parser/query-parser.test.ts +139 -0
  272. package/src/parser/query-parser.ts +199 -0
  273. package/src/parser/types.ts +34 -0
  274. package/src/shims.d.ts +8 -0
  275. package/src/stories/Prompt.stories.tsx +60 -0
  276. package/src/stories/Query.stories.tsx +515 -0
  277. package/src/stories/Research.stories.tsx +496 -0
  278. package/src/stories/test-data.ts +128 -0
  279. package/src/stories/testing.ts +60 -0
  280. package/src/testing/index.ts +1 -0
  281. package/src/testing/test-blueprint.ts +50 -0
  282. package/src/testing/test-functions.ts +1 -1
  283. package/src/testing/test-services.ts +6 -6
  284. package/src/tools/function.ts +11 -12
  285. package/src/tools/openapi.test.ts +18 -19
  286. package/src/tools/openapi.ts +24 -17
  287. package/src/translations.ts +14 -6
  288. package/src/types/chat.ts +27 -4
  289. package/src/types/service.ts +39 -37
  290. package/src/types/template.ts +27 -25
  291. package/src/types/types.ts +24 -19
  292. package/dist/lib/browser/AssistantDialog-YSHMAHW5.mjs +0 -117
  293. package/dist/lib/browser/AssistantDialog-YSHMAHW5.mjs.map +0 -7
  294. package/dist/lib/browser/ChatContainer-V5GP7DYF.mjs +0 -33
  295. package/dist/lib/browser/ChatContainer-V5GP7DYF.mjs.map +0 -7
  296. package/dist/lib/browser/TemplateContainer-K4EJNGIL.mjs +0 -78
  297. package/dist/lib/browser/TemplateContainer-K4EJNGIL.mjs.map +0 -7
  298. package/dist/lib/browser/ai-client-CDZLSNXE.mjs.map +0 -7
  299. package/dist/lib/browser/app-graph-builder-MF5EVDWW.mjs +0 -209
  300. package/dist/lib/browser/app-graph-builder-MF5EVDWW.mjs.map +0 -7
  301. package/dist/lib/browser/chunk-FMB7RGMP.mjs.map +0 -7
  302. package/dist/lib/browser/chunk-IAMR2FAE.mjs +0 -183
  303. package/dist/lib/browser/chunk-IAMR2FAE.mjs.map +0 -7
  304. package/dist/lib/browser/chunk-KYMKVE6M.mjs +0 -128
  305. package/dist/lib/browser/chunk-KYMKVE6M.mjs.map +0 -7
  306. package/dist/lib/browser/chunk-NFUHCW2J.mjs +0 -81
  307. package/dist/lib/browser/chunk-TXJWGWJ7.mjs.map +0 -7
  308. package/dist/lib/browser/intent-resolver-WJGLKKVO.mjs +0 -46
  309. package/dist/lib/browser/intent-resolver-WJGLKKVO.mjs.map +0 -7
  310. package/dist/lib/browser/react-surface-57VRDOQT.mjs +0 -90
  311. package/dist/lib/browser/react-surface-57VRDOQT.mjs.map +0 -7
  312. package/dist/lib/browser/settings-U6UFQX32.mjs.map +0 -7
  313. package/dist/lib/node/AssistantDialog-YI2BSGSX.cjs +0 -141
  314. package/dist/lib/node/AssistantDialog-YI2BSGSX.cjs.map +0 -7
  315. package/dist/lib/node/ChatContainer-ZJ5JXF6A.cjs.map +0 -7
  316. package/dist/lib/node/TemplateContainer-XWFYJB4T.cjs +0 -104
  317. package/dist/lib/node/TemplateContainer-XWFYJB4T.cjs.map +0 -7
  318. package/dist/lib/node/ai-client-URCCYU6B.cjs.map +0 -7
  319. package/dist/lib/node/app-graph-builder-N5ZUUI2Z.cjs +0 -220
  320. package/dist/lib/node/app-graph-builder-N5ZUUI2Z.cjs.map +0 -7
  321. package/dist/lib/node/chunk-APRU3QWK.cjs +0 -206
  322. package/dist/lib/node/chunk-APRU3QWK.cjs.map +0 -7
  323. package/dist/lib/node/chunk-GBUNQ257.cjs.map +0 -7
  324. package/dist/lib/node/chunk-RPBKMP2E.cjs.map +0 -7
  325. package/dist/lib/node/chunk-ZKOC4ZFY.cjs +0 -152
  326. package/dist/lib/node/chunk-ZKOC4ZFY.cjs.map +0 -7
  327. package/dist/lib/node/intent-resolver-R3OSTIMH.cjs.map +0 -7
  328. package/dist/lib/node/react-surface-NUQTM6MS.cjs +0 -106
  329. package/dist/lib/node/react-surface-NUQTM6MS.cjs.map +0 -7
  330. package/dist/lib/node/settings-TXGRCYAL.cjs.map +0 -7
  331. package/dist/lib/node-esm/AssistantDialog-U2FQX5TD.mjs +0 -118
  332. package/dist/lib/node-esm/AssistantDialog-U2FQX5TD.mjs.map +0 -7
  333. package/dist/lib/node-esm/ChatContainer-QW3OOXTT.mjs +0 -34
  334. package/dist/lib/node-esm/ChatContainer-QW3OOXTT.mjs.map +0 -7
  335. package/dist/lib/node-esm/TemplateContainer-EUM2X65J.mjs +0 -79
  336. package/dist/lib/node-esm/TemplateContainer-EUM2X65J.mjs.map +0 -7
  337. package/dist/lib/node-esm/ai-client-WMHS5EGV.mjs.map +0 -7
  338. package/dist/lib/node-esm/app-graph-builder-DWBNIMHM.mjs +0 -210
  339. package/dist/lib/node-esm/app-graph-builder-DWBNIMHM.mjs.map +0 -7
  340. package/dist/lib/node-esm/chunk-6JK5HEUQ.mjs.map +0 -7
  341. package/dist/lib/node-esm/chunk-GBBXIW5F.mjs +0 -129
  342. package/dist/lib/node-esm/chunk-GBBXIW5F.mjs.map +0 -7
  343. package/dist/lib/node-esm/chunk-MVDAY3CZ.mjs.map +0 -7
  344. package/dist/lib/node-esm/chunk-MXK2EANZ.mjs +0 -184
  345. package/dist/lib/node-esm/chunk-MXK2EANZ.mjs.map +0 -7
  346. package/dist/lib/node-esm/intent-resolver-H32TL4X6.mjs +0 -47
  347. package/dist/lib/node-esm/intent-resolver-H32TL4X6.mjs.map +0 -7
  348. package/dist/lib/node-esm/react-surface-JBVZF6CP.mjs +0 -91
  349. package/dist/lib/node-esm/react-surface-JBVZF6CP.mjs.map +0 -7
  350. package/dist/lib/node-esm/settings-DZU5PNXM.mjs.map +0 -7
  351. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.d.ts +0 -6
  352. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.d.ts.map +0 -1
  353. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.stories.d.ts +0 -8
  354. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.stories.d.ts.map +0 -1
  355. package/dist/types/src/components/ServiceRegistry/index.d.ts +0 -2
  356. package/dist/types/src/components/ServiceRegistry/index.d.ts.map +0 -1
  357. package/dist/types/src/hooks/invocation-handler.d.ts +0 -5
  358. package/dist/types/src/hooks/invocation-handler.d.ts.map +0 -1
  359. package/dist/types/src/hooks/useLocalTriggerManager.d.ts +0 -3
  360. package/dist/types/src/hooks/useLocalTriggerManager.d.ts.map +0 -1
  361. package/src/components/ServiceRegistry/ServiceRegistry.stories.tsx +0 -49
  362. package/src/components/ServiceRegistry/ServiceRegistry.tsx +0 -76
  363. package/src/components/ServiceRegistry/index.ts +0 -5
  364. package/src/hooks/invocation-handler.ts +0 -107
  365. package/src/hooks/useLocalTriggerManager.ts +0 -82
@@ -0,0 +1,515 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import '@dxos-theme';
6
+
7
+ import { type Meta, type StoryObj } from '@storybook/react';
8
+ import { Match, Schema } from 'effect';
9
+ import React, { useCallback, useEffect, useMemo, useRef, useState, type FC } from 'react';
10
+
11
+ import { AIServiceEdgeClient, type AIServiceEdgeClientOptions } from '@dxos/ai';
12
+ import { SpyAIService } from '@dxos/ai/testing';
13
+ import { Events } from '@dxos/app-framework';
14
+ import { withPluginManager } from '@dxos/app-framework/testing';
15
+ import { localServiceEndpoints, remoteServiceEndpoints } from '@dxos/artifact-testing';
16
+ import { BlueprintMachine, BlueprintParser, Logger, setConsolePrinter, setLogger } from '@dxos/assistant';
17
+ import { combine } from '@dxos/async';
18
+ import { Filter, Queue, type Space } from '@dxos/client/echo';
19
+ import { type Obj, Type } from '@dxos/echo';
20
+ import { Ref, create, getLabelForObject, getTypename, type AnyEchoObject } from '@dxos/echo-schema';
21
+ import { SelectionModel } from '@dxos/graph';
22
+ import { DXN } from '@dxos/keys';
23
+ import { log } from '@dxos/log';
24
+ import { D3ForceGraph, type D3ForceGraphProps } from '@dxos/plugin-explorer';
25
+ import { faker } from '@dxos/random';
26
+ import { useClient } from '@dxos/react-client';
27
+ import { useQueue } from '@dxos/react-client/echo';
28
+ import { Dialog, IconButton, Toolbar, useAsyncState, useTranslation } from '@dxos/react-ui';
29
+ import {
30
+ matchCompletion,
31
+ staticCompletion,
32
+ typeahead,
33
+ type TypeaheadContext,
34
+ type TypeaheadOptions,
35
+ } from '@dxos/react-ui-editor';
36
+ import { List } from '@dxos/react-ui-list';
37
+ import { JsonFilter } from '@dxos/react-ui-syntax-highlighter';
38
+ import { getHashColor, mx } from '@dxos/react-ui-theme';
39
+ import { DataType, DataTypes, SpaceGraphModel } from '@dxos/schema';
40
+ import { createObjectFactory, type TypeSpec, type ValueGenerator } from '@dxos/schema/testing';
41
+ import { withLayout, withTheme } from '@dxos/storybook-utils';
42
+
43
+ import { addTestData } from './test-data';
44
+ import { testPlugins } from './testing';
45
+ import { AmbientDialog, PromptBar, type PromptBarProps, type PromptController } from '../components';
46
+ import { ASSISTANT_PLUGIN } from '../meta';
47
+ import { QueryParser, createFilter, type Expression } from '../parser';
48
+ import { RESEARCH_BLUEPRINT, createRegistry } from '../testing';
49
+ import translations from '../translations';
50
+
51
+ faker.seed(1);
52
+
53
+ // TODO(burdon): Evolve dxos/random to support this directly.
54
+ const generator = faker as any as ValueGenerator;
55
+
56
+ const LOCAL = false;
57
+ const endpoints = LOCAL ? localServiceEndpoints : remoteServiceEndpoints;
58
+
59
+ // TODO(burdon) Move to story args.
60
+ const aiConfig: AIServiceEdgeClientOptions = {
61
+ endpoint: endpoints.ai,
62
+ defaultGenerationOptions: {
63
+ model: '@anthropic/claude-3-5-sonnet-20241022',
64
+ // model: '@anthropic/claude-sonnet-4-20250514',
65
+ },
66
+ };
67
+
68
+ /**
69
+ * Container for a set of ephemeral research results.
70
+ */
71
+ const ResearchGraph = Schema.Struct({
72
+ queue: Ref(Queue),
73
+ }).pipe(
74
+ Type.Obj({
75
+ typename: 'dxos.org/type/ResearchGraph',
76
+ version: '0.1.0',
77
+ }),
78
+ );
79
+
80
+ type Mode = 'graph' | 'list';
81
+
82
+ type StoryProps = { mode?: Mode; spec?: TypeSpec[] } & D3ForceGraphProps;
83
+
84
+ const DefaultStory = ({ mode, spec, ...props }: StoryProps) => {
85
+ const { t } = useTranslation(ASSISTANT_PLUGIN);
86
+ const showList = mode !== 'graph';
87
+ const showGraph = mode !== 'list';
88
+
89
+ const [ast, setAst] = useState<Expression | undefined>();
90
+ const [filter, setFilter] = useState<Filter.Any>();
91
+
92
+ const selection = useMemo(() => new SelectionModel(), []);
93
+
94
+ //
95
+ // Graph
96
+ //
97
+
98
+ const [model] = useState<SpaceGraphModel | undefined>(() => {
99
+ if (!showGraph) {
100
+ return undefined;
101
+ }
102
+
103
+ return new SpaceGraphModel().setOptions({
104
+ onCreateEdge: (edge, relation) => {
105
+ // TODO(burdon): Check type.
106
+ if ((relation as any).active === false) {
107
+ edge.data.force = false;
108
+ }
109
+ },
110
+ });
111
+ });
112
+
113
+ const client = useClient();
114
+ const [space, setSpace] = useState<Space | undefined>();
115
+ useEffect(() => {
116
+ const spaces = client.spaces.get().filter((space) => space.isOpen);
117
+ if (spaces.length) {
118
+ setSpace(spaces[0]);
119
+ }
120
+ }, [client]);
121
+
122
+ const [researchGraph] = useAsyncState(async () => {
123
+ if (!space) {
124
+ return undefined;
125
+ }
126
+
127
+ const { objects } = await space.db.query(Filter.type(ResearchGraph)).run();
128
+ if (objects.length > 0) {
129
+ return objects[0];
130
+ } else {
131
+ const queue = space.queues.create();
132
+ return space.db.add(
133
+ create(ResearchGraph, {
134
+ // TODO(dmaretskyi): Ref.make(queue)
135
+ queue: Ref.fromDXN(queue.dxn),
136
+ }),
137
+ );
138
+ }
139
+ }, [space]);
140
+
141
+ useEffect(() => {
142
+ model?.setFilter(filter ?? Filter.everything());
143
+ }, [model, filter]);
144
+
145
+ useEffect(() => {
146
+ if (!space || !model) {
147
+ return;
148
+ }
149
+
150
+ const queue = researchGraph?.queue && space.queues.get(researchGraph.queue.dxn);
151
+ void model.open(space, queue);
152
+ return () => {
153
+ void model.close();
154
+ };
155
+ }, [space, model, researchGraph?.queue.dxn.toString()]);
156
+
157
+ // TODO(burdon): Hack to filter out invalid (queue) objects.
158
+ const objects =
159
+ model?.nodes
160
+ .filter((node) => {
161
+ try {
162
+ getTypename(node.data.object as AnyEchoObject);
163
+ return true;
164
+ } catch {
165
+ return false;
166
+ }
167
+ })
168
+ .map((node) => node.data.object as AnyEchoObject) ?? [];
169
+
170
+ //
171
+ // AI
172
+ //
173
+
174
+ const aiClient = useMemo(() => new SpyAIService(new AIServiceEdgeClient(aiConfig)), []);
175
+ const registry = useMemo(
176
+ () => space && researchGraph && createRegistry(space, researchGraph.queue.dxn),
177
+ [space, researchGraph?.queue.dxn],
178
+ );
179
+
180
+ const researchQueue = useQueue(researchGraph?.queue.dxn, { pollInterval: 1_000 });
181
+
182
+ const researchBlueprint = useMemo(() => BlueprintParser.create().parse(RESEARCH_BLUEPRINT), []);
183
+
184
+ const logger = useMemo(() => new Logger(), []);
185
+
186
+ //
187
+ // Handlers
188
+ //
189
+
190
+ const handleRefresh = useCallback(() => {
191
+ model?.invalidate();
192
+ }, [model]);
193
+
194
+ const handleResearch = useCallback(async () => {
195
+ if (!space || !registry || !researchBlueprint) {
196
+ return;
197
+ }
198
+
199
+ const selected = selection.selected.value;
200
+ log.info('starting research...', { selected });
201
+ const resolver = space.db.graph.createRefResolver({
202
+ context: {
203
+ space: space.db.spaceId,
204
+ queue: researchGraph?.queue.dxn,
205
+ },
206
+ });
207
+ const objects = await Promise.all(selected.map((id) => resolver.resolve(DXN.fromLocalObjectId(id))));
208
+ const machine = new BlueprintMachine(registry, researchBlueprint);
209
+ const cleanup = combine(setConsolePrinter(machine, true), setLogger(machine, logger));
210
+
211
+ log.info('starting research...', { selected });
212
+ await machine.runToCompletion({ aiService: aiClient, input: objects });
213
+
214
+ cleanup();
215
+ }, [space, aiClient, registry, researchBlueprint, selection]);
216
+
217
+ const handleGenerate = useCallback(async () => {
218
+ if (!space) {
219
+ return;
220
+ }
221
+
222
+ if (spec) {
223
+ const createObjects = createObjectFactory(space.db, generator);
224
+ await createObjects(spec);
225
+ } else {
226
+ await addTestData(space);
227
+ }
228
+ }, [space, generator, spec]);
229
+
230
+ const handleReset = useCallback(
231
+ async (reset = false) => {
232
+ if (reset) {
233
+ // TODO(burdon): Doesn't cleanly restart.
234
+ log.info('resetting client...');
235
+ await client.reset();
236
+ log.info('client reset');
237
+ return;
238
+ }
239
+
240
+ if (space) {
241
+ await space.close();
242
+ }
243
+
244
+ const newSpace = await client.spaces.create();
245
+ setSpace(newSpace);
246
+ setAst(undefined);
247
+ setFilter(undefined);
248
+ promptRef.current?.setText('');
249
+ },
250
+ [space, client],
251
+ );
252
+
253
+ const handleSubmit = useCallback<NonNullable<PromptBarProps['onSubmit']>>(
254
+ (text) => {
255
+ try {
256
+ const parser = new QueryParser(text);
257
+ const ast = parser.parse();
258
+ setAst(ast);
259
+ const filter = createFilter(ast);
260
+ setFilter(filter);
261
+ } catch (err) {
262
+ // TODO(mykola): Make hybrid search.
263
+ const filter = Filter.text(text, { type: 'vector' });
264
+ setFilter(filter);
265
+ }
266
+ },
267
+ [space],
268
+ );
269
+
270
+ //
271
+ // Prompt
272
+ //
273
+
274
+ const promptRef = useRef<PromptController>(null);
275
+ const handleCancel = useCallback<NonNullable<PromptBarProps['onCancel']>>(() => {
276
+ setAst(undefined);
277
+ setFilter(undefined);
278
+ promptRef.current?.setText('');
279
+ }, []);
280
+
281
+ const handleMatch = useCallback<NonNullable<TypeaheadOptions['onComplete']>>(createMatcher(space), [space]);
282
+
283
+ const extensions = useMemo(() => [typeahead({ onComplete: handleMatch })], [handleMatch]);
284
+
285
+ const { state: flushState, handleFlush } = useFlush(space);
286
+
287
+ return (
288
+ <div className='grow grid overflow-hidden'>
289
+ <div className={mx('grow grid overflow-hidden', !mode && 'grid-cols-[1fr_30rem]')}>
290
+ {showGraph && (
291
+ <D3ForceGraph classNames='border-ie border-separator' model={model} selection={selection} {...props} />
292
+ )}
293
+
294
+ {showList && (
295
+ <div className='grow grid grid-rows-[min-content_1fr_1fr_1fr] overflow-hidden divide-y divide-separator'>
296
+ <Toolbar.Root>
297
+ <IconButton icon='ph--arrow-clockwise--regular' iconOnly label='refresh' onClick={handleRefresh} />
298
+ <IconButton icon='ph--sparkle--regular' iconOnly label='research' onClick={handleResearch} />
299
+ <IconButton icon='ph--plus--regular' iconOnly label='generate' onClick={handleGenerate} />
300
+ <IconButton
301
+ icon='ph--trash--regular'
302
+ iconOnly
303
+ label='reset'
304
+ onClick={(event) => handleReset(event.shiftKey)}
305
+ />
306
+ <IconButton
307
+ disabled={flushState === 'flushing'}
308
+ icon={Match.value(flushState).pipe(
309
+ Match.when('idle', () => 'ph--floppy-disk--regular'),
310
+ Match.when('flushing', () => 'ph--spinner--regular'),
311
+ Match.when('flushed', () => 'ph--check--regular'),
312
+ Match.exhaustive,
313
+ )}
314
+ iconOnly
315
+ label='flush'
316
+ onClick={handleFlush}
317
+ />
318
+ </Toolbar.Root>
319
+ <ItemList items={objects} />
320
+ <Log logger={logger} />
321
+ <JsonFilter
322
+ data={{
323
+ space: client.spaces.get().length,
324
+ db: space?.db.toJSON(),
325
+ queue: {
326
+ dxn: researchQueue?.dxn.toString(),
327
+ objects: researchQueue?.objects.length,
328
+ },
329
+ model: model?.toJSON(),
330
+ selection: selection.toJSON(),
331
+ ast,
332
+ }}
333
+ />
334
+ </div>
335
+ )}
336
+ </div>
337
+
338
+ <Dialog.Root modal={false} open>
339
+ <AmbientDialog resizeable={false} onEscape={handleCancel}>
340
+ <PromptBar
341
+ ref={promptRef}
342
+ placeholder={t('search input placeholder')}
343
+ extensions={extensions}
344
+ onSubmit={handleSubmit}
345
+ onCancel={handleCancel}
346
+ />
347
+ </AmbientDialog>
348
+ </Dialog.Root>
349
+ </div>
350
+ );
351
+ };
352
+
353
+ // TODO(burdon): Factor out; match against expression grammar.
354
+ const createMatcher =
355
+ (space?: Space) =>
356
+ ({ line }: TypeaheadContext) => {
357
+ const words = line.split(/\s+/).filter(Boolean);
358
+ if (words.length > 0) {
359
+ const word = words.at(-1)!;
360
+
361
+ // Match type.
362
+ const match = word.match(/^type:(.+)/);
363
+ if (match) {
364
+ const part = match[1];
365
+ for (const schema of space?.db.graph.schemaRegistry.schemas ?? []) {
366
+ const typename = Type.getTypename(schema);
367
+ if (typename) {
368
+ const completion = matchCompletion(typename, part);
369
+ if (completion) {
370
+ return completion;
371
+ }
372
+ }
373
+ }
374
+ }
375
+
376
+ // Match static.
377
+ return staticCompletion(['type:', 'AND', 'OR', 'NOT'])({ line });
378
+ }
379
+ };
380
+
381
+ // TODO(burdon): Replace with card list.
382
+ const ItemList = <T extends Obj.Any>({ items = [] }: { items?: T[] }) => {
383
+ return (
384
+ <List.Root<T> items={items}>
385
+ {({ items }) => (
386
+ <div role='list' className='grow flex flex-col overflow-y-auto'>
387
+ {/* TODO(burdon): Virtualize. */}
388
+ {items.map((item) => (
389
+ <List.Item<T>
390
+ key={item.id}
391
+ item={item}
392
+ classNames='grid grid-cols-[4rem_16rem_1fr] min-h-[32px] items-center'
393
+ >
394
+ <div className='text-xs font-mono font-thin px-1 text-subdued'>{item.id.slice(-6)}</div>
395
+ <div className={mx('text-xs font-mono font-thin truncate px-1', getHashColor(getTypename(item))?.text)}>
396
+ {getTypename(item)}
397
+ </div>
398
+ <List.ItemTitle>{getLabelForObject(item)}</List.ItemTitle>
399
+ </List.Item>
400
+ ))}
401
+ </div>
402
+ )}
403
+ </List.Root>
404
+ );
405
+ };
406
+
407
+ const useFlush = (space?: Space) => {
408
+ const [state, setState] = useState<'idle' | 'flushing' | 'flushed'>('idle');
409
+ const resetTimer = useRef<NodeJS.Timeout | null>(null);
410
+
411
+ const handleFlush = useCallback(() => {
412
+ if (!space) {
413
+ return;
414
+ }
415
+
416
+ queueMicrotask(async () => {
417
+ if (resetTimer.current) {
418
+ clearTimeout(resetTimer.current);
419
+ }
420
+
421
+ setState('flushing');
422
+ await space.db.flush();
423
+ setState('flushed');
424
+
425
+ resetTimer.current = setTimeout(() => {
426
+ setState('idle');
427
+ resetTimer.current = null;
428
+ }, 1_000);
429
+ });
430
+ }, [space]);
431
+
432
+ return { state, handleFlush };
433
+ };
434
+
435
+ const Log: FC<{ logger: Logger }> = ({ logger }) => {
436
+ return (
437
+ <div className='grow flex flex-col p-1 overflow-y-auto text-sm'>
438
+ {logger.messages.value.map((message, index) => (
439
+ <div key={index} className='text-subdued'>
440
+ {message}
441
+ </div>
442
+ ))}
443
+ </div>
444
+ );
445
+ };
446
+
447
+ const meta: Meta<typeof DefaultStory> = {
448
+ title: 'plugins/plugin-assistant/Query',
449
+ render: DefaultStory,
450
+ decorators: [
451
+ withPluginManager({
452
+ fireEvents: [Events.SetupArtifactDefinition],
453
+ plugins: testPlugins({
454
+ types: [...DataTypes, ResearchGraph],
455
+ config: {
456
+ runtime: {
457
+ client: {
458
+ storage: {
459
+ persistent: true,
460
+ },
461
+ enableVectorIndexing: true,
462
+ },
463
+ },
464
+ },
465
+ }),
466
+ }),
467
+ withTheme,
468
+ withLayout({ fullscreen: true }),
469
+ ],
470
+ parameters: {
471
+ translations,
472
+ controls: { disable: true },
473
+ },
474
+ };
475
+
476
+ type Story = StoryObj<typeof DefaultStory>;
477
+
478
+ export default meta;
479
+
480
+ export const Default: Story = {
481
+ args: {
482
+ grid: false,
483
+ drag: true,
484
+ spec: [
485
+ { type: DataType.Organization, count: 10 },
486
+ { type: DataType.Person, count: 30 },
487
+ ],
488
+ },
489
+ };
490
+
491
+ export const WithList: Story = {
492
+ args: {
493
+ mode: 'list',
494
+ spec: [
495
+ { type: DataType.Organization, count: 30 },
496
+ { type: DataType.Person, count: 50 },
497
+ ],
498
+ },
499
+ };
500
+
501
+ export const GraphList: Story = {
502
+ args: {
503
+ mode: 'graph',
504
+ spec: [
505
+ { type: DataType.Organization, count: 30 },
506
+ { type: DataType.Person, count: 50 },
507
+ ],
508
+ },
509
+ };
510
+
511
+ export const Research: Story = {
512
+ args: {
513
+ drag: true,
514
+ },
515
+ };