@lobehub/lobehub 2.0.0-next.3 → 2.0.0-next.30

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 (726) hide show
  1. package/.env.desktop +1 -2
  2. package/.env.example +0 -3
  3. package/.env.example.development +0 -2
  4. package/.github/workflows/claude-auto-testing.yml +73 -0
  5. package/.github/workflows/claude-translate-comments.yml +67 -0
  6. package/.github/workflows/desktop-pr-build.yml +18 -16
  7. package/.github/workflows/docker.yml +25 -20
  8. package/.github/workflows/e2e.yml +17 -3
  9. package/.github/workflows/release-desktop-beta.yml +12 -12
  10. package/.github/workflows/release.yml +3 -5
  11. package/.github/workflows/test.yml +47 -12
  12. package/.nvmrc +1 -1
  13. package/CHANGELOG.md +667 -0
  14. package/Dockerfile +1 -3
  15. package/README.md +2 -45
  16. package/README.zh-CN.md +2 -45
  17. package/apps/desktop/src/main/controllers/AuthCtr.ts +53 -39
  18. package/apps/desktop/src/main/controllers/MenuCtr.ts +5 -5
  19. package/apps/desktop/src/main/controllers/NotificationCtr.ts +29 -29
  20. package/apps/desktop/src/main/controllers/RemoteServerConfigCtr.ts +16 -16
  21. package/apps/desktop/src/main/controllers/ShortcutCtr.ts +2 -2
  22. package/apps/desktop/src/main/controllers/TrayMenuCtr.ts +18 -18
  23. package/apps/desktop/src/main/controllers/UpdaterCtr.ts +4 -4
  24. package/apps/desktop/src/main/controllers/__tests__/AuthCtr.test.ts +706 -0
  25. package/apps/desktop/src/main/controllers/__tests__/TrayMenuCtr.test.ts +5 -5
  26. package/apps/desktop/src/main/controllers/index.ts +4 -4
  27. package/apps/desktop/src/main/utils/next-electron-rsc.ts +7 -5
  28. package/apps/desktop/tsconfig.json +0 -1
  29. package/changelog/v1.json +227 -0
  30. package/docs/development/database-schema.dbml +12 -0
  31. package/docs/self-hosting/advanced/auth/next-auth/auth0.mdx +2 -2
  32. package/docs/self-hosting/advanced/auth/next-auth/auth0.zh-CN.mdx +2 -2
  33. package/docs/self-hosting/advanced/auth/next-auth/authelia.mdx +2 -2
  34. package/docs/self-hosting/advanced/auth/next-auth/authelia.zh-CN.mdx +2 -2
  35. package/docs/self-hosting/advanced/auth/next-auth/authentik.mdx +2 -2
  36. package/docs/self-hosting/advanced/auth/next-auth/authentik.zh-CN.mdx +2 -2
  37. package/docs/self-hosting/advanced/auth/next-auth/casdoor.mdx +2 -2
  38. package/docs/self-hosting/advanced/auth/next-auth/casdoor.zh-CN.mdx +2 -2
  39. package/docs/self-hosting/advanced/auth/next-auth/cloudflare-zero-trust.mdx +2 -2
  40. package/docs/self-hosting/advanced/auth/next-auth/cloudflare-zero-trust.zh-CN.mdx +2 -2
  41. package/docs/self-hosting/advanced/auth/next-auth/github.mdx +2 -2
  42. package/docs/self-hosting/advanced/auth/next-auth/github.zh-CN.mdx +2 -2
  43. package/docs/self-hosting/advanced/auth/next-auth/google.mdx +32 -29
  44. package/docs/self-hosting/advanced/auth/next-auth/keycloak.mdx +2 -2
  45. package/docs/self-hosting/advanced/auth/next-auth/keycloak.zh-CN.mdx +2 -2
  46. package/docs/self-hosting/advanced/auth/next-auth/logto.mdx +5 -3
  47. package/docs/self-hosting/advanced/auth/next-auth/logto.zh-CN.mdx +5 -3
  48. package/docs/self-hosting/advanced/auth/next-auth/microsoft-entra-id.mdx +2 -2
  49. package/docs/self-hosting/advanced/auth/next-auth/microsoft-entra-id.zh-CN.mdx +2 -2
  50. package/docs/self-hosting/advanced/auth/next-auth/okta.mdx +2 -2
  51. package/docs/self-hosting/advanced/auth/next-auth/okta.zh-CN.mdx +2 -2
  52. package/docs/self-hosting/advanced/auth/next-auth/wechat.mdx +2 -2
  53. package/docs/self-hosting/advanced/auth/next-auth/wechat.zh-CN.mdx +2 -2
  54. package/docs/self-hosting/advanced/auth/next-auth/zitadel.mdx +2 -2
  55. package/docs/self-hosting/advanced/auth/next-auth/zitadel.zh-CN.mdx +2 -2
  56. package/docs/self-hosting/advanced/auth.mdx +32 -21
  57. package/docs/self-hosting/advanced/auth.zh-CN.mdx +30 -19
  58. package/docs/self-hosting/advanced/feature-flags.mdx +0 -1
  59. package/docs/self-hosting/advanced/feature-flags.zh-CN.mdx +0 -1
  60. package/docs/self-hosting/advanced/online-search.mdx +30 -25
  61. package/docs/self-hosting/advanced/online-search.zh-CN.mdx +25 -23
  62. package/e2e/src/features/discover/detail-pages.feature +95 -0
  63. package/e2e/src/features/discover/interactions.feature +113 -0
  64. package/e2e/src/features/discover/smoke.feature +34 -1
  65. package/e2e/src/steps/discover/detail-pages.steps.ts +295 -0
  66. package/e2e/src/steps/discover/interactions.steps.ts +451 -0
  67. package/e2e/src/steps/discover/smoke.steps.ts +116 -4
  68. package/e2e/tsconfig.json +0 -1
  69. package/locales/ar/labs.json +4 -0
  70. package/locales/ar/models.json +15 -6
  71. package/locales/ar/oauth.json +1 -0
  72. package/locales/bg-BG/labs.json +4 -0
  73. package/locales/bg-BG/models.json +15 -6
  74. package/locales/bg-BG/oauth.json +1 -0
  75. package/locales/de-DE/labs.json +4 -0
  76. package/locales/de-DE/models.json +15 -6
  77. package/locales/de-DE/oauth.json +1 -0
  78. package/locales/en-US/labs.json +4 -0
  79. package/locales/en-US/models.json +15 -6
  80. package/locales/en-US/oauth.json +1 -0
  81. package/locales/es-ES/labs.json +4 -0
  82. package/locales/es-ES/models.json +15 -6
  83. package/locales/es-ES/oauth.json +1 -0
  84. package/locales/fa-IR/labs.json +4 -0
  85. package/locales/fa-IR/models.json +15 -6
  86. package/locales/fa-IR/oauth.json +1 -0
  87. package/locales/fr-FR/labs.json +4 -0
  88. package/locales/fr-FR/models.json +15 -6
  89. package/locales/fr-FR/oauth.json +1 -0
  90. package/locales/it-IT/labs.json +4 -0
  91. package/locales/it-IT/models.json +15 -6
  92. package/locales/it-IT/oauth.json +1 -0
  93. package/locales/ja-JP/labs.json +4 -0
  94. package/locales/ja-JP/models.json +15 -6
  95. package/locales/ja-JP/oauth.json +1 -0
  96. package/locales/ko-KR/labs.json +4 -0
  97. package/locales/ko-KR/models.json +21 -12
  98. package/locales/ko-KR/oauth.json +1 -0
  99. package/locales/nl-NL/labs.json +4 -0
  100. package/locales/nl-NL/models.json +15 -6
  101. package/locales/nl-NL/oauth.json +1 -0
  102. package/locales/pl-PL/labs.json +4 -0
  103. package/locales/pl-PL/models.json +15 -6
  104. package/locales/pl-PL/oauth.json +1 -0
  105. package/locales/pt-BR/labs.json +4 -0
  106. package/locales/pt-BR/models.json +15 -6
  107. package/locales/pt-BR/oauth.json +1 -0
  108. package/locales/ru-RU/labs.json +4 -0
  109. package/locales/ru-RU/models.json +15 -6
  110. package/locales/ru-RU/oauth.json +1 -0
  111. package/locales/tr-TR/labs.json +4 -0
  112. package/locales/tr-TR/models.json +15 -6
  113. package/locales/tr-TR/oauth.json +1 -0
  114. package/locales/vi-VN/labs.json +4 -0
  115. package/locales/vi-VN/models.json +15 -6
  116. package/locales/vi-VN/oauth.json +1 -0
  117. package/locales/zh-CN/labs.json +4 -0
  118. package/locales/zh-CN/models.json +15 -6
  119. package/locales/zh-CN/oauth.json +1 -0
  120. package/locales/zh-TW/labs.json +4 -0
  121. package/locales/zh-TW/models.json +15 -6
  122. package/locales/zh-TW/oauth.json +1 -0
  123. package/next.config.ts +2 -3
  124. package/package.json +74 -80
  125. package/packages/const/src/index.ts +0 -1
  126. package/packages/const/src/url.ts +1 -4
  127. package/packages/const/src/user.ts +5 -2
  128. package/packages/const/src/version.ts +3 -3
  129. package/packages/context-engine/src/index.ts +1 -6
  130. package/packages/context-engine/src/processors/GroupMessageFlatten.ts +12 -2
  131. package/packages/context-engine/src/processors/__tests__/GroupMessageFlatten.test.ts +73 -9
  132. package/packages/context-engine/src/providers/index.ts +0 -2
  133. package/packages/database/migrations/0041_improve_index.sql +10 -0
  134. package/packages/database/migrations/0042_improve_agent_index.sql +1 -0
  135. package/packages/database/migrations/0043_add_ai_model_settings.sql +1 -0
  136. package/packages/database/migrations/meta/0041_snapshot.json +7784 -0
  137. package/packages/database/migrations/meta/0042_snapshot.json +7800 -0
  138. package/packages/database/migrations/meta/0043_snapshot.json +8419 -0
  139. package/packages/database/migrations/meta/_journal.json +21 -0
  140. package/packages/database/package.json +2 -2
  141. package/packages/database/src/core/migrations.json +33 -0
  142. package/packages/database/src/core/web-server.ts +2 -1
  143. package/packages/database/src/models/__tests__/message.grouping.test.ts +812 -0
  144. package/packages/database/src/models/__tests__/message.test.ts +256 -233
  145. package/packages/database/src/models/agent.ts +16 -13
  146. package/packages/database/src/models/message.ts +90 -74
  147. package/packages/database/src/models/session.ts +80 -28
  148. package/packages/database/src/models/user.ts +2 -1
  149. package/packages/database/src/repositories/aiInfra/index.test.ts +198 -0
  150. package/packages/database/src/repositories/aiInfra/index.ts +2 -1
  151. package/packages/database/src/repositories/dataImporter/deprecated/__tests__/index.test.ts +2 -1
  152. package/packages/database/src/repositories/dataImporter/deprecated/index.ts +7 -1
  153. package/packages/database/src/schemas/agent.ts +13 -11
  154. package/packages/database/src/schemas/aiInfra.ts +2 -0
  155. package/packages/database/src/schemas/message.ts +5 -1
  156. package/packages/database/src/schemas/relations.ts +6 -4
  157. package/packages/database/src/schemas/session.ts +2 -0
  158. package/packages/database/src/schemas/topic.ts +6 -1
  159. package/packages/database/src/utils/__tests__/groupMessages.test.ts +145 -2
  160. package/packages/database/src/utils/groupMessages.ts +7 -5
  161. package/packages/electron-client-ipc/package.json +4 -1
  162. package/packages/file-loaders/package.json +1 -0
  163. package/packages/memory-extract/package.json +2 -2
  164. package/packages/model-bank/src/aiModels/anthropic.ts +0 -63
  165. package/packages/model-bank/src/aiModels/higress.ts +0 -55
  166. package/packages/model-bank/src/aiModels/infiniai.ts +21 -0
  167. package/packages/model-bank/src/aiModels/ollamacloud.ts +13 -0
  168. package/packages/model-bank/src/aiModels/siliconcloud.ts +19 -0
  169. package/packages/model-runtime/src/core/streams/openai/__snapshots__/responsesStream.test.ts.snap +0 -38
  170. package/packages/model-runtime/src/providers/minimax/index.ts +5 -5
  171. package/packages/model-runtime/src/providers/search1api/index.test.ts +2 -2
  172. package/packages/model-runtime/src/utils/googleErrorParser.test.ts +125 -0
  173. package/packages/model-runtime/src/utils/googleErrorParser.ts +103 -77
  174. package/packages/types/src/discover/mcp.ts +6 -0
  175. package/packages/types/src/index.ts +0 -1
  176. package/packages/types/src/message/common/base.ts +13 -0
  177. package/packages/types/src/message/common/image.ts +8 -0
  178. package/packages/types/src/message/common/metadata.ts +39 -0
  179. package/packages/types/src/message/common/tools.ts +10 -0
  180. package/packages/types/src/message/db/params.ts +47 -1
  181. package/packages/types/src/message/ui/chat.ts +4 -1
  182. package/packages/types/src/message/ui/params.ts +49 -4
  183. package/packages/types/src/plugins/mcp.ts +4 -1
  184. package/packages/types/src/search.ts +16 -0
  185. package/packages/types/src/serverConfig.ts +2 -6
  186. package/packages/types/src/topic/topic.ts +14 -0
  187. package/packages/types/src/user/index.ts +2 -76
  188. package/packages/types/src/user/preference.ts +105 -0
  189. package/packages/types/src/user/settings/index.ts +22 -0
  190. package/packages/utils/src/apiKey.test.ts +139 -0
  191. package/packages/utils/src/client/clipboard.ts +2 -2
  192. package/packages/utils/src/client/exportFile.ts +10 -10
  193. package/packages/utils/src/client/parserPlaceholder.ts +18 -18
  194. package/packages/utils/src/client/topic.ts +10 -10
  195. package/packages/utils/src/client/xor-obfuscation.ts +11 -11
  196. package/packages/utils/src/server/auth.ts +6 -6
  197. package/packages/utils/src/server/geo.ts +9 -9
  198. package/packages/utils/src/server/xor.ts +7 -7
  199. package/packages/web-crawler/src/crawImpl/firecrawl.ts +39 -12
  200. package/packages/web-crawler/tsconfig.json +0 -1
  201. package/renovate.json +23 -1
  202. package/scripts/migrateServerDB/errorHint.js +1 -7
  203. package/scripts/migrateServerDB/index.ts +2 -1
  204. package/src/app/(backend)/webapi/revalidate/route.ts +1 -1
  205. package/src/app/[variants]/(auth)/signup/[[...signup]]/page.tsx +1 -8
  206. package/src/app/[variants]/(main)/(mobile)/me/(home)/__tests__/useCategory.test.tsx +9 -0
  207. package/src/app/[variants]/(main)/(mobile)/me/(home)/features/UserBanner.tsx +3 -6
  208. package/src/app/[variants]/(main)/(mobile)/me/(home)/layout.tsx +0 -2
  209. package/src/app/[variants]/(main)/_layout/Desktop/SideBar/TopActions.tsx +1 -4
  210. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/V1Mobile/index.tsx +2 -2
  211. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/V1Mobile/useSend.ts +6 -4
  212. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/useSend.ts +15 -10
  213. package/src/app/[variants]/(main)/chat/@session/features/SessionListContent/List/Item/Actions.tsx +3 -28
  214. package/src/app/[variants]/(main)/chat/@session/features/SessionListContent/List/Item/index.tsx +4 -2
  215. package/src/app/[variants]/(main)/chat/_layout/Desktop/index.tsx +0 -2
  216. package/src/app/[variants]/(main)/chat/_layout/Mobile.tsx +1 -5
  217. package/src/app/[variants]/(main)/chat/settings/features/HeaderContent.tsx +2 -62
  218. package/src/app/[variants]/(main)/discover/(list)/features/Pagination.tsx +1 -0
  219. package/src/app/[variants]/(main)/discover/(list)/features/SortButton/index.tsx +1 -1
  220. package/src/app/[variants]/(main)/discover/(list)/mcp/features/List/Item.tsx +1 -0
  221. package/src/app/[variants]/(main)/discover/(list)/model/features/List/Item.tsx +1 -0
  222. package/src/app/[variants]/(main)/discover/(list)/provider/features/List/Item.tsx +1 -0
  223. package/src/app/[variants]/(main)/discover/components/CategoryMenu.tsx +9 -1
  224. package/src/app/[variants]/(main)/image/@topic/features/Topics/TopicList.tsx +1 -0
  225. package/src/app/[variants]/(main)/image/features/PromptInput/index.tsx +1 -1
  226. package/src/app/[variants]/(main)/image/page.tsx +0 -2
  227. package/src/app/[variants]/(main)/labs/components/LabCard.tsx +8 -6
  228. package/src/app/[variants]/(main)/labs/page.tsx +19 -22
  229. package/src/app/[variants]/(main)/profile/_layout/Desktop/index.tsx +23 -24
  230. package/src/app/[variants]/(main)/profile/_layout/Mobile/index.tsx +5 -9
  231. package/src/app/[variants]/(main)/settings/_layout/Desktop/index.tsx +0 -2
  232. package/src/app/[variants]/(main)/settings/_layout/Mobile/index.tsx +0 -2
  233. package/src/app/[variants]/(main)/settings/provider/(list)/ProviderGrid/Card.tsx +1 -1
  234. package/src/app/[variants]/(main)/settings/provider/detail/azure/index.tsx +6 -8
  235. package/src/app/[variants]/(main)/settings/provider/detail/azureai/index.tsx +1 -1
  236. package/src/app/[variants]/(main)/settings/provider/detail/bedrock/index.tsx +1 -1
  237. package/src/app/[variants]/(main)/settings/provider/detail/cloudflare/index.tsx +1 -1
  238. package/src/app/[variants]/(main)/settings/provider/detail/comfyui/index.tsx +1 -1
  239. package/src/app/[variants]/(main)/settings/provider/detail/github/index.tsx +1 -1
  240. package/src/app/[variants]/(main)/settings/provider/detail/vertexai/index.tsx +1 -1
  241. package/src/app/[variants]/(main)/settings/provider/features/ProviderConfig/index.tsx +2 -4
  242. package/src/app/[variants]/layout.tsx +1 -0
  243. package/src/app/[variants]/loading/index.tsx +1 -10
  244. package/src/app/[variants]/oauth/ResultLayout.tsx +47 -0
  245. package/src/app/[variants]/oauth/callback/error/page.tsx +20 -33
  246. package/src/app/[variants]/oauth/callback/layout.tsx +1 -0
  247. package/src/app/[variants]/oauth/callback/success/page.tsx +8 -22
  248. package/src/app/[variants]/oauth/consent/[uid]/Consent/BuiltinConsent.tsx +47 -0
  249. package/src/app/[variants]/oauth/consent/[uid]/{Consent.tsx → Consent/index.tsx} +12 -1
  250. package/src/app/[variants]/oauth/consent/[uid]/Login.tsx +19 -2
  251. package/src/app/sitemap.tsx +7 -1
  252. package/src/components/InvalidAPIKey/APIKeyForm/Bedrock.tsx +8 -13
  253. package/src/components/Link.tsx +12 -0
  254. package/src/components/Skeleton/SkeletonSwitch.tsx +13 -0
  255. package/src/components/Skeleton/index.ts +2 -0
  256. package/src/components/Thinking/index.tsx +4 -3
  257. package/src/config/db.ts +0 -5
  258. package/src/config/featureFlags/schema.test.ts +0 -2
  259. package/src/config/featureFlags/schema.ts +0 -6
  260. package/src/config/modelProviders/ai21.ts +1 -16
  261. package/src/config/modelProviders/ai302.ts +1 -128
  262. package/src/config/modelProviders/ai360.ts +1 -32
  263. package/src/config/modelProviders/anthropic.ts +1 -94
  264. package/src/config/modelProviders/azure.ts +1 -51
  265. package/src/config/modelProviders/baichuan.ts +1 -57
  266. package/src/config/modelProviders/bedrock.ts +1 -276
  267. package/src/config/modelProviders/cloudflare.ts +1 -64
  268. package/src/config/modelProviders/deepseek.ts +1 -19
  269. package/src/config/modelProviders/fireworksai.ts +1 -174
  270. package/src/config/modelProviders/giteeai.ts +1 -135
  271. package/src/config/modelProviders/github.ts +1 -254
  272. package/src/config/modelProviders/google.ts +1 -130
  273. package/src/config/modelProviders/groq.ts +1 -119
  274. package/src/config/modelProviders/higress.ts +1 -1736
  275. package/src/config/modelProviders/huggingface.ts +1 -54
  276. package/src/config/modelProviders/hunyuan.ts +1 -83
  277. package/src/config/modelProviders/infiniai.ts +1 -74
  278. package/src/config/modelProviders/internlm.ts +1 -20
  279. package/src/config/modelProviders/minimax.ts +1 -1
  280. package/src/config/modelProviders/mistral.ts +1 -95
  281. package/src/config/modelProviders/modelscope.ts +1 -27
  282. package/src/config/modelProviders/moonshot.ts +1 -29
  283. package/src/config/modelProviders/novita.ts +1 -105
  284. package/src/config/modelProviders/ollama.ts +1 -325
  285. package/src/config/modelProviders/openai.ts +1 -242
  286. package/src/config/modelProviders/openrouter.ts +1 -240
  287. package/src/config/modelProviders/perplexity.ts +1 -45
  288. package/src/config/modelProviders/ppio.ts +1 -152
  289. package/src/config/modelProviders/qiniu.ts +2 -19
  290. package/src/config/modelProviders/qwen.ts +1 -245
  291. package/src/config/modelProviders/search1api.ts +1 -34
  292. package/src/config/modelProviders/sensenova.ts +1 -69
  293. package/src/config/modelProviders/siliconcloud.ts +1 -417
  294. package/src/config/modelProviders/spark.ts +1 -59
  295. package/src/config/modelProviders/stepfun.ts +1 -98
  296. package/src/config/modelProviders/taichu.ts +1 -18
  297. package/src/config/modelProviders/togetherai.ts +1 -274
  298. package/src/config/modelProviders/upstage.ts +1 -28
  299. package/src/config/modelProviders/wenxin.ts +1 -140
  300. package/src/config/modelProviders/xai.ts +1 -38
  301. package/src/config/modelProviders/zeroone.ts +1 -81
  302. package/src/config/modelProviders/zhipu.ts +1 -108
  303. package/src/envs/app.ts +5 -8
  304. package/src/envs/auth.ts +0 -179
  305. package/src/features/AgentSetting/AgentPlugin/index.tsx +2 -2
  306. package/src/features/ChatInput/ActionBar/STT/browser.tsx +2 -2
  307. package/src/features/ChatInput/ActionBar/STT/openai.tsx +2 -2
  308. package/src/features/ChatInput/ActionBar/Tools/useControls.tsx +1 -3
  309. package/src/features/ChatInput/ActionBar/index.tsx +2 -2
  310. package/src/features/ChatInput/InputEditor/index.tsx +2 -2
  311. package/src/features/Conversation/Error/ErrorJsonViewer.tsx +4 -3
  312. package/src/features/Conversation/Error/OllamaBizError/index.tsx +7 -2
  313. package/src/features/Conversation/Error/index.tsx +15 -5
  314. package/src/features/Conversation/MarkdownElements/LobeArtifact/Render/index.tsx +2 -2
  315. package/src/features/Conversation/Messages/Assistant/Extra/index.tsx +2 -2
  316. package/src/features/Conversation/Messages/Assistant/MessageContent.tsx +5 -3
  317. package/src/features/Conversation/Messages/Assistant/Tool/Inspector/BuiltinPluginTitle.tsx +2 -2
  318. package/src/features/Conversation/Messages/Assistant/Tool/Inspector/ToolTitle.tsx +4 -2
  319. package/src/features/Conversation/Messages/Assistant/Tool/Render/CustomRender.tsx +2 -2
  320. package/src/features/Conversation/Messages/Assistant/Tool/Render/index.tsx +2 -2
  321. package/src/features/Conversation/Messages/Assistant/Tool/index.tsx +2 -2
  322. package/src/features/Conversation/Messages/Assistant/index.tsx +4 -4
  323. package/src/features/Conversation/Messages/Default.tsx +2 -2
  324. package/src/features/Conversation/Messages/Group/Actions/WithContentId.tsx +152 -0
  325. package/src/features/Conversation/Messages/Group/Actions/WithoutContentId.tsx +70 -0
  326. package/src/features/Conversation/Messages/Group/Actions/index.tsx +21 -0
  327. package/src/features/Conversation/Messages/Group/ContentBlock.tsx +91 -0
  328. package/src/features/Conversation/Messages/Group/EditState.tsx +51 -0
  329. package/src/features/Conversation/Messages/Group/Error/index.tsx +53 -0
  330. package/src/features/Conversation/Messages/Group/GroupChildren.tsx +73 -0
  331. package/src/features/Conversation/Messages/Group/MessageContent.tsx +39 -0
  332. package/src/features/Conversation/Messages/Group/Tool/Inspector/BuiltinPluginTitle.tsx +49 -0
  333. package/src/features/Conversation/Messages/Group/Tool/Inspector/Debug.tsx +70 -0
  334. package/src/features/Conversation/Messages/Group/Tool/Inspector/PluginResult.tsx +34 -0
  335. package/src/features/Conversation/Messages/Group/Tool/Inspector/PluginState.tsx +18 -0
  336. package/src/features/Conversation/Messages/Group/Tool/Inspector/Settings.tsx +40 -0
  337. package/src/features/Conversation/Messages/Group/Tool/Inspector/ToolTitle.tsx +92 -0
  338. package/src/features/Conversation/Messages/Group/Tool/Inspector/index.tsx +176 -0
  339. package/src/features/Conversation/Messages/Group/Tool/Render/Arguments/ObjectEntity.tsx +81 -0
  340. package/src/features/Conversation/Messages/Group/Tool/Render/Arguments/ValueCell.tsx +43 -0
  341. package/src/features/Conversation/Messages/Group/Tool/Render/Arguments/index.tsx +134 -0
  342. package/src/features/Conversation/Messages/Group/Tool/Render/CustomRender.tsx +88 -0
  343. package/src/features/Conversation/Messages/Group/Tool/Render/ErrorResponse.tsx +35 -0
  344. package/src/features/Conversation/Messages/Group/Tool/Render/LoadingPlaceholder/index.tsx +29 -0
  345. package/src/features/Conversation/Messages/Group/Tool/Render/PluginSettings.tsx +66 -0
  346. package/src/features/Conversation/Messages/Group/Tool/Render/index.tsx +105 -0
  347. package/src/features/Conversation/Messages/Group/Tool/index.tsx +75 -0
  348. package/src/features/Conversation/Messages/Group/Tools.tsx +46 -0
  349. package/src/features/Conversation/Messages/Group/index.tsx +140 -0
  350. package/src/features/Conversation/Messages/User/Extra.tsx +2 -2
  351. package/src/features/Conversation/Messages/User/index.tsx +4 -4
  352. package/src/features/Conversation/Messages/index.tsx +15 -3
  353. package/src/features/Conversation/components/AutoScroll.tsx +2 -2
  354. package/src/features/Conversation/components/Extras/Usage/UsageDetail/index.tsx +9 -6
  355. package/src/features/Conversation/components/ShareMessageModal/ShareImage/Preview.tsx +2 -2
  356. package/src/features/DataImporter/index.tsx +15 -60
  357. package/src/features/DevPanel/PostgresViewer/usePgTable.ts +3 -2
  358. package/src/features/MCP/utils.test.ts +91 -0
  359. package/src/features/MCP/utils.ts +20 -2
  360. package/src/features/PluginStore/Content.tsx +2 -3
  361. package/src/features/PluginStore/McpList/index.tsx +6 -2
  362. package/src/features/PluginTag/index.tsx +1 -3
  363. package/src/features/PluginsUI/Render/BuiltinType/index.test.tsx +37 -28
  364. package/src/features/Portal/Artifacts/Body/index.tsx +2 -2
  365. package/src/helpers/isCanUseFC.ts +0 -8
  366. package/src/hooks/useEnabledChatModels.ts +0 -8
  367. package/src/hooks/useInterceptingRoutes.test.ts +21 -3
  368. package/src/hooks/useModelContextWindowTokens.ts +0 -8
  369. package/src/hooks/useModelHasContextWindowToken.ts +1 -10
  370. package/src/hooks/useModelSupportFiles.ts +1 -11
  371. package/src/hooks/useModelSupportReasoning.ts +1 -11
  372. package/src/hooks/useModelSupportToolUse.ts +1 -11
  373. package/src/hooks/useModelSupportVision.ts +1 -11
  374. package/src/layout/AuthProvider/Clerk/index.tsx +2 -16
  375. package/src/libs/next-auth/auth.config.ts +3 -6
  376. package/src/libs/next-auth/sso-providers/auth0.ts +0 -7
  377. package/src/libs/next-auth/sso-providers/authelia.ts +3 -5
  378. package/src/libs/next-auth/sso-providers/authentik.ts +0 -7
  379. package/src/libs/next-auth/sso-providers/cloudflare-zero-trust.ts +3 -6
  380. package/src/libs/next-auth/sso-providers/cognito.ts +1 -5
  381. package/src/libs/next-auth/sso-providers/generic-oidc.ts +3 -5
  382. package/src/libs/next-auth/sso-providers/github.ts +0 -6
  383. package/src/libs/next-auth/sso-providers/google.ts +0 -2
  384. package/src/libs/next-auth/sso-providers/index.ts +0 -2
  385. package/src/libs/next-auth/sso-providers/keycloak.ts +0 -3
  386. package/src/libs/next-auth/sso-providers/logto.ts +3 -5
  387. package/src/libs/next-auth/sso-providers/okta.ts +0 -4
  388. package/src/libs/next-auth/sso-providers/zitadel.ts +0 -7
  389. package/src/libs/oidc-provider/provider.ts +1 -1
  390. package/src/libs/trpc/client/index.ts +0 -1
  391. package/src/libs/trpc/client/lambda.ts +8 -5
  392. package/src/libs/trpc/lambda/context.ts +4 -1
  393. package/src/locales/default/labs.ts +4 -0
  394. package/src/locales/default/oauth.ts +1 -0
  395. package/src/server/globalConfig/index.ts +0 -23
  396. package/src/server/modules/AssistantStore/index.ts +1 -1
  397. package/src/server/modules/ModelRuntime/trace.ts +11 -4
  398. package/src/server/routers/desktop/mcp.ts +1 -3
  399. package/src/server/routers/lambda/__tests__/integration/message.integration.test.ts +810 -70
  400. package/src/server/routers/lambda/config/__snapshots__/index.test.ts.snap +175 -12
  401. package/src/server/routers/lambda/config/index.test.ts +38 -30
  402. package/src/server/routers/lambda/market/index.ts +4 -2
  403. package/src/server/routers/lambda/message.ts +60 -52
  404. package/src/server/routers/lambda/session.ts +8 -5
  405. package/src/server/routers/lambda/topic.ts +7 -1
  406. package/src/server/routers/lambda/user.ts +32 -31
  407. package/src/server/routers/tools/mcp.ts +2 -3
  408. package/src/server/routers/tools/search.test.ts +1 -7
  409. package/src/server/routers/tools/search.ts +1 -4
  410. package/src/server/services/mcp/deps/MCPSystemDepsCheckService.test.ts +541 -0
  411. package/src/server/services/message/__tests__/index.test.ts +348 -0
  412. package/src/server/services/message/index.ts +159 -0
  413. package/src/server/services/search/impls/firecrawl/index.ts +51 -11
  414. package/src/server/services/search/impls/firecrawl/type.ts +60 -9
  415. package/src/services/__tests__/tool.test.ts +0 -3
  416. package/src/services/aiModel/index.test.ts +3 -6
  417. package/src/services/aiModel/index.ts +55 -7
  418. package/src/services/aiProvider/index.test.ts +2 -5
  419. package/src/services/aiProvider/index.ts +47 -7
  420. package/src/services/chat/chat.test.ts +13 -40
  421. package/src/services/chat/contextEngineering.test.ts +0 -30
  422. package/src/services/chat/contextEngineering.ts +7 -17
  423. package/src/services/chat/helper.ts +7 -31
  424. package/src/services/chat/index.ts +5 -10
  425. package/src/services/chat/types.ts +1 -1
  426. package/src/services/chatGroup/index.ts +64 -9
  427. package/src/services/config.ts +1 -65
  428. package/src/services/export/index.ts +9 -4
  429. package/src/services/file/index.ts +59 -10
  430. package/src/services/import/index.ts +132 -7
  431. package/src/services/mcp.test.ts +777 -0
  432. package/src/services/mcp.ts +40 -6
  433. package/src/services/message/index.ts +203 -10
  434. package/src/services/message/{__tests__/server.test.ts → server.test.ts} +3 -3
  435. package/src/services/models.ts +2 -11
  436. package/src/services/plugin/index.test.ts +8 -0
  437. package/src/services/plugin/index.ts +51 -10
  438. package/src/services/session/index.test.ts +8 -0
  439. package/src/services/session/index.ts +143 -10
  440. package/src/services/tableViewer/client.ts +12 -15
  441. package/src/services/thread/index.test.ts +8 -0
  442. package/src/services/thread/index.ts +37 -7
  443. package/src/services/topic/index.test.ts +8 -0
  444. package/src/services/topic/index.ts +74 -10
  445. package/src/services/user/index.test.ts +8 -0
  446. package/src/services/user/index.ts +50 -11
  447. package/src/store/aiInfra/slices/aiModel/action.test.ts +17 -9
  448. package/src/store/chat/helpers.test.ts +99 -0
  449. package/src/store/chat/helpers.ts +21 -2
  450. package/src/store/chat/selectors.ts +1 -1
  451. package/src/store/chat/slices/aiChat/actions/__tests__/generateAIChat.test.ts +17 -251
  452. package/src/store/chat/slices/aiChat/actions/__tests__/generateAIChatV2.test.ts +339 -7
  453. package/src/store/chat/slices/aiChat/actions/__tests__/helpers.ts +9 -5
  454. package/src/store/chat/slices/aiChat/actions/generateAIChat.ts +49 -178
  455. package/src/store/chat/slices/aiChat/actions/generateAIChatV2.ts +272 -14
  456. package/src/store/chat/slices/aiChat/actions/generateAIGroupChat.ts +7 -2
  457. package/src/store/chat/slices/builtinTool/actions/index.ts +1 -4
  458. package/src/store/chat/slices/builtinTool/actions/search.ts +3 -3
  459. package/src/store/chat/slices/message/action.test.ts +157 -16
  460. package/src/store/chat/slices/message/action.ts +153 -77
  461. package/src/store/chat/slices/message/reducer.test.ts +363 -5
  462. package/src/store/chat/slices/message/reducer.ts +87 -3
  463. package/src/store/chat/slices/message/{selectors.test.ts → selectors/chat.test.ts} +266 -30
  464. package/src/store/chat/slices/message/{selectors.ts → selectors/chat.ts} +29 -79
  465. package/src/store/chat/slices/message/selectors/index.ts +2 -0
  466. package/src/store/chat/slices/message/selectors/messageState.test.ts +36 -0
  467. package/src/store/chat/slices/message/selectors/messageState.ts +80 -0
  468. package/src/store/chat/slices/plugin/action.test.ts +118 -157
  469. package/src/store/chat/slices/plugin/action.ts +53 -68
  470. package/src/store/chat/slices/thread/action.test.ts +13 -4
  471. package/src/store/chat/slices/thread/action.ts +3 -1
  472. package/src/store/chat/slices/topic/action.test.ts +1 -1
  473. package/src/store/chat/slices/topic/action.ts +1 -2
  474. package/src/store/chat/slices/topic/reducer.ts +1 -2
  475. package/src/store/file/slices/chat/action.ts +1 -4
  476. package/src/store/file/slices/fileManager/action.ts +2 -3
  477. package/src/store/global/store.ts +1 -7
  478. package/src/store/session/slices/sessionGroup/action.test.ts +5 -5
  479. package/src/store/tool/selectors/tool.test.ts +1 -1
  480. package/src/store/tool/selectors/tool.ts +6 -8
  481. package/src/store/tool/slices/builtin/action.test.ts +83 -35
  482. package/src/store/tool/slices/builtin/action.ts +0 -9
  483. package/src/store/tool/slices/builtin/selectors.test.ts +4 -30
  484. package/src/store/tool/slices/builtin/selectors.ts +15 -21
  485. package/src/store/tool/slices/mcpStore/action.test.ts +95 -3
  486. package/src/store/tool/slices/mcpStore/action.ts +177 -53
  487. package/src/store/tool/slices/oldStore/initialState.ts +1 -2
  488. package/src/store/user/initialState.ts +1 -7
  489. package/src/store/user/selectors.ts +1 -5
  490. package/src/store/user/slices/common/action.test.ts +1 -4
  491. package/src/store/user/slices/common/action.ts +5 -4
  492. package/src/store/user/slices/preference/action.ts +8 -1
  493. package/src/store/user/slices/preference/selectors/index.ts +2 -0
  494. package/src/store/user/slices/preference/selectors/labPrefer.ts +13 -0
  495. package/src/store/user/slices/preference/{selectors.ts → selectors/preference.ts} +0 -2
  496. package/src/store/user/slices/settings/selectors/index.ts +1 -0
  497. package/src/store/user/slices/settings/selectors/keyVaults.ts +21 -0
  498. package/src/store/user/store.ts +0 -3
  499. package/src/tools/index.ts +0 -6
  500. package/src/tools/renders.ts +0 -3
  501. package/src/tools/web-browsing/Portal/Search/Footer.tsx +2 -2
  502. package/src/tools/web-browsing/Render/Search/ConfigForm/Form.tsx +1 -1
  503. package/tsconfig.json +9 -3
  504. package/packages/const/src/guide.ts +0 -89
  505. package/packages/context-engine/src/providers/InboxGuide.ts +0 -102
  506. package/packages/context-engine/src/providers/__tests__/InboxGuideProvider.test.ts +0 -121
  507. package/packages/utils/src/_deprecated/__snapshots__/parseModels.test.ts.snap +0 -104
  508. package/packages/utils/src/_deprecated/parseModels.test.ts +0 -287
  509. package/packages/utils/src/_deprecated/parseModels.ts +0 -165
  510. package/src/app/(backend)/trpc/edge/[trpc]/route.ts +0 -26
  511. package/src/app/[variants]/(main)/(mobile)/me/data/features/Category.tsx +0 -48
  512. package/src/app/[variants]/(main)/(mobile)/me/data/features/Header.tsx +0 -33
  513. package/src/app/[variants]/(main)/(mobile)/me/data/layout.tsx +0 -13
  514. package/src/app/[variants]/(main)/(mobile)/me/data/loading.tsx +0 -5
  515. package/src/app/[variants]/(main)/(mobile)/me/data/page.tsx +0 -29
  516. package/src/app/[variants]/(main)/chat/features/Migration/DBReader.ts +0 -290
  517. package/src/app/[variants]/(main)/chat/features/Migration/ExportConfigButton.tsx +0 -35
  518. package/src/app/[variants]/(main)/chat/features/Migration/Failed.tsx +0 -120
  519. package/src/app/[variants]/(main)/chat/features/Migration/Modal.tsx +0 -81
  520. package/src/app/[variants]/(main)/chat/features/Migration/Start.tsx +0 -108
  521. package/src/app/[variants]/(main)/chat/features/Migration/UpgradeButton.tsx +0 -71
  522. package/src/app/[variants]/(main)/chat/features/Migration/const.ts +0 -15
  523. package/src/app/[variants]/(main)/chat/features/Migration/index.tsx +0 -50
  524. package/src/app/[variants]/loading/Client/Content.tsx +0 -48
  525. package/src/app/[variants]/loading/Client/Error.tsx +0 -27
  526. package/src/app/[variants]/loading/Client/Redirect.tsx +0 -47
  527. package/src/app/[variants]/loading/Client/index.tsx +0 -22
  528. package/src/components/InnerLink.tsx +0 -20
  529. package/src/database/_deprecated/core/__tests__/db-upgrade.test.ts +0 -42
  530. package/src/database/_deprecated/core/__tests__/db.test.ts +0 -79
  531. package/src/database/_deprecated/core/__tests__/model.test.ts +0 -55
  532. package/src/database/_deprecated/core/db.ts +0 -246
  533. package/src/database/_deprecated/core/index.ts +0 -2
  534. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/fixtures/input.json +0 -55
  535. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/fixtures/output.json +0 -60
  536. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/index.test.ts +0 -14
  537. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/index.ts +0 -22
  538. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/type.ts +0 -105
  539. package/src/database/_deprecated/core/model.ts +0 -218
  540. package/src/database/_deprecated/core/schemas.ts +0 -88
  541. package/src/database/_deprecated/core/types/db.ts +0 -15
  542. package/src/database/_deprecated/models/__DEBUG.ts +0 -124
  543. package/src/database/_deprecated/models/__tests__/file.test.ts +0 -83
  544. package/src/database/_deprecated/models/__tests__/message.test.ts +0 -426
  545. package/src/database/_deprecated/models/__tests__/plugin.test.ts +0 -81
  546. package/src/database/_deprecated/models/__tests__/session.test.ts +0 -253
  547. package/src/database/_deprecated/models/__tests__/sessionGroup.test.ts +0 -220
  548. package/src/database/_deprecated/models/__tests__/topic.test.ts +0 -523
  549. package/src/database/_deprecated/models/__tests__/user.test.ts +0 -82
  550. package/src/database/_deprecated/models/file.ts +0 -51
  551. package/src/database/_deprecated/models/message.ts +0 -277
  552. package/src/database/_deprecated/models/plugin.ts +0 -62
  553. package/src/database/_deprecated/models/session.ts +0 -271
  554. package/src/database/_deprecated/models/sessionGroup.ts +0 -93
  555. package/src/database/_deprecated/models/topic.ts +0 -250
  556. package/src/database/_deprecated/models/user.ts +0 -69
  557. package/src/database/_deprecated/schemas/files.ts +0 -39
  558. package/src/database/_deprecated/schemas/message.ts +0 -50
  559. package/src/database/_deprecated/schemas/plugin.ts +0 -12
  560. package/src/database/_deprecated/schemas/session.ts +0 -54
  561. package/src/database/_deprecated/schemas/sessionGroup.ts +0 -8
  562. package/src/database/_deprecated/schemas/topic.ts +0 -12
  563. package/src/database/_deprecated/schemas/user.ts +0 -40
  564. package/src/envs/__tests__/auth.test.ts +0 -200
  565. package/src/features/DataImporter/_deprecated.ts +0 -43
  566. package/src/features/InitClientDB/EnableModal.tsx +0 -118
  567. package/src/features/InitClientDB/ErrorResult.tsx +0 -143
  568. package/src/features/InitClientDB/InitIndicator.tsx +0 -124
  569. package/src/features/InitClientDB/PGliteIcon.tsx +0 -28
  570. package/src/features/InitClientDB/features/DatabaseRepair/Backup.tsx +0 -75
  571. package/src/features/InitClientDB/features/DatabaseRepair/Diagnosis.tsx +0 -98
  572. package/src/features/InitClientDB/features/DatabaseRepair/Repair.tsx +0 -218
  573. package/src/features/InitClientDB/features/DatabaseRepair/index.tsx +0 -91
  574. package/src/features/InitClientDB/index.tsx +0 -37
  575. package/src/hooks/_header.ts +0 -23
  576. package/src/libs/next-auth/sso-providers/azure-ad.ts +0 -33
  577. package/src/libs/trpc/client/edge.ts +0 -26
  578. package/src/libs/trpc/edge/context.ts +0 -71
  579. package/src/libs/trpc/edge/index.ts +0 -45
  580. package/src/libs/trpc/edge/init.ts +0 -26
  581. package/src/libs/trpc/edge/middleware/jwtPayload.test.ts +0 -75
  582. package/src/libs/trpc/edge/middleware/jwtPayload.ts +0 -14
  583. package/src/migrations/FromV0ToV1.ts +0 -10
  584. package/src/migrations/FromV1ToV2/fixtures/input-v1-session.json +0 -191
  585. package/src/migrations/FromV1ToV2/fixtures/output-v2.json +0 -202
  586. package/src/migrations/FromV1ToV2/index.ts +0 -82
  587. package/src/migrations/FromV1ToV2/migrations.test.ts +0 -224
  588. package/src/migrations/FromV1ToV2/types/v1.ts +0 -78
  589. package/src/migrations/FromV1ToV2/types/v2.ts +0 -52
  590. package/src/migrations/FromV2ToV3/fixtures/input-v2-session.json +0 -72
  591. package/src/migrations/FromV2ToV3/fixtures/output-v3-from-v1.json +0 -203
  592. package/src/migrations/FromV2ToV3/fixtures/output-v3.json +0 -74
  593. package/src/migrations/FromV2ToV3/index.ts +0 -30
  594. package/src/migrations/FromV2ToV3/migrations.test.ts +0 -42
  595. package/src/migrations/FromV2ToV3/types/v3.ts +0 -27
  596. package/src/migrations/FromV3ToV4/fixtures/azure-input-v3.json +0 -79
  597. package/src/migrations/FromV3ToV4/fixtures/azure-output-v4.json +0 -75
  598. package/src/migrations/FromV3ToV4/fixtures/ollama-input-v3.json +0 -85
  599. package/src/migrations/FromV3ToV4/fixtures/ollama-output-v4.json +0 -86
  600. package/src/migrations/FromV3ToV4/fixtures/openai-input-v3.json +0 -77
  601. package/src/migrations/FromV3ToV4/fixtures/openai-output-v4.json +0 -77
  602. package/src/migrations/FromV3ToV4/fixtures/openrouter-input-v3.json +0 -82
  603. package/src/migrations/FromV3ToV4/fixtures/openrouter-output-v4.json +0 -85
  604. package/src/migrations/FromV3ToV4/fixtures/output-v4-from-v1.json +0 -203
  605. package/src/migrations/FromV3ToV4/index.ts +0 -102
  606. package/src/migrations/FromV3ToV4/migrations.test.ts +0 -195
  607. package/src/migrations/FromV3ToV4/types/v3.ts +0 -52
  608. package/src/migrations/FromV3ToV4/types/v4.ts +0 -37
  609. package/src/migrations/FromV4ToV5/fixtures/from-v1-to-v5-output.json +0 -245
  610. package/src/migrations/FromV4ToV5/fixtures/function-input-v4.json +0 -96
  611. package/src/migrations/FromV4ToV5/fixtures/function-output-v5.json +0 -120
  612. package/src/migrations/FromV4ToV5/index.ts +0 -58
  613. package/src/migrations/FromV4ToV5/migrations.test.ts +0 -49
  614. package/src/migrations/FromV4ToV5/types/v4.ts +0 -21
  615. package/src/migrations/FromV4ToV5/types/v5.ts +0 -27
  616. package/src/migrations/FromV5ToV6/fixtures/from-v1-to-v6-output.json +0 -247
  617. package/src/migrations/FromV5ToV6/fixtures/session-input-v5.json +0 -81
  618. package/src/migrations/FromV5ToV6/fixtures/session-output-v6.json +0 -85
  619. package/src/migrations/FromV5ToV6/index.ts +0 -61
  620. package/src/migrations/FromV5ToV6/migrations.test.ts +0 -50
  621. package/src/migrations/FromV5ToV6/types/v5.ts +0 -48
  622. package/src/migrations/FromV5ToV6/types/v6.ts +0 -63
  623. package/src/migrations/FromV6ToV7/fixtures/output-v7-from-v1.json +0 -203
  624. package/src/migrations/FromV6ToV7/fixtures/provider-input-v6.json +0 -103
  625. package/src/migrations/FromV6ToV7/fixtures/provider-output-v7.json +0 -118
  626. package/src/migrations/FromV6ToV7/index.ts +0 -101
  627. package/src/migrations/FromV6ToV7/migrations.test.ts +0 -64
  628. package/src/migrations/FromV6ToV7/types/v6.ts +0 -61
  629. package/src/migrations/FromV6ToV7/types/v7.ts +0 -69
  630. package/src/migrations/VersionController.test.ts +0 -88
  631. package/src/migrations/VersionController.ts +0 -67
  632. package/src/migrations/index.ts +0 -61
  633. package/src/server/globalConfig/_deprecated.test.ts +0 -92
  634. package/src/server/globalConfig/_deprecated.ts +0 -41
  635. package/src/server/routers/edge/appStatus.ts +0 -3
  636. package/src/server/routers/edge/index.ts +0 -14
  637. package/src/server/routers/edge/upload.ts +0 -16
  638. package/src/services/aiModel/client.ts +0 -70
  639. package/src/services/aiModel/server.test.ts +0 -122
  640. package/src/services/aiModel/server.ts +0 -51
  641. package/src/services/aiModel/type.ts +0 -32
  642. package/src/services/aiProvider/client.ts +0 -58
  643. package/src/services/aiProvider/server.ts +0 -43
  644. package/src/services/aiProvider/type.ts +0 -27
  645. package/src/services/baseClientService/index.ts +0 -9
  646. package/src/services/chat/__snapshots__/chat.test.ts.snap +0 -110
  647. package/src/services/chatGroup/client.ts +0 -63
  648. package/src/services/chatGroup/server.ts +0 -67
  649. package/src/services/chatGroup/type.ts +0 -22
  650. package/src/services/export/_deprecated.ts +0 -155
  651. package/src/services/export/client.ts +0 -15
  652. package/src/services/export/server.ts +0 -9
  653. package/src/services/export/type.ts +0 -5
  654. package/src/services/file/_deprecated.test.ts +0 -119
  655. package/src/services/file/_deprecated.ts +0 -80
  656. package/src/services/file/client.test.ts +0 -199
  657. package/src/services/file/client.ts +0 -85
  658. package/src/services/file/server.ts +0 -53
  659. package/src/services/file/type.ts +0 -13
  660. package/src/services/import/_deprecated.ts +0 -115
  661. package/src/services/import/client.test.ts +0 -1015
  662. package/src/services/import/client.ts +0 -64
  663. package/src/services/import/server.ts +0 -133
  664. package/src/services/import/type.ts +0 -17
  665. package/src/services/message/_deprecated.test.ts +0 -398
  666. package/src/services/message/_deprecated.ts +0 -168
  667. package/src/services/message/client.test.ts +0 -410
  668. package/src/services/message/client.ts +0 -186
  669. package/src/services/message/server.ts +0 -150
  670. package/src/services/message/type.ts +0 -54
  671. package/src/services/plugin/_deprecated.test.ts +0 -162
  672. package/src/services/plugin/_deprecated.ts +0 -42
  673. package/src/services/plugin/client.test.ts +0 -177
  674. package/src/services/plugin/client.ts +0 -46
  675. package/src/services/plugin/server.ts +0 -42
  676. package/src/services/plugin/type.ts +0 -23
  677. package/src/services/session/_deprecated.test.ts +0 -440
  678. package/src/services/session/_deprecated.ts +0 -190
  679. package/src/services/session/client.test.ts +0 -413
  680. package/src/services/session/client.ts +0 -193
  681. package/src/services/session/server.test.ts +0 -260
  682. package/src/services/session/server.ts +0 -125
  683. package/src/services/session/type.ts +0 -82
  684. package/src/services/thread/client.ts +0 -51
  685. package/src/services/thread/server.ts +0 -32
  686. package/src/services/thread/type.ts +0 -21
  687. package/src/services/topic/_deprecated.test.ts +0 -245
  688. package/src/services/topic/_deprecated.ts +0 -75
  689. package/src/services/topic/client.ts +0 -89
  690. package/src/services/topic/pglite.test.ts +0 -212
  691. package/src/services/topic/server.ts +0 -57
  692. package/src/services/topic/type.ts +0 -40
  693. package/src/services/user/_deprecated.test.ts +0 -101
  694. package/src/services/user/_deprecated.ts +0 -70
  695. package/src/services/user/client.test.ts +0 -108
  696. package/src/services/user/client.ts +0 -104
  697. package/src/services/user/server.test.ts +0 -149
  698. package/src/services/user/server.ts +0 -47
  699. package/src/services/user/type.ts +0 -21
  700. package/src/store/chat/slices/builtinTool/actions/__tests__/dalle.test.ts +0 -121
  701. package/src/store/chat/slices/builtinTool/actions/dalle.ts +0 -124
  702. package/src/store/global/actions/clientDb.ts +0 -67
  703. package/src/store/user/slices/modelList/__snapshots__/action.test.ts.snap +0 -12
  704. package/src/store/user/slices/modelList/action.test.ts +0 -359
  705. package/src/store/user/slices/modelList/action.ts +0 -223
  706. package/src/store/user/slices/modelList/initialState.ts +0 -15
  707. package/src/store/user/slices/modelList/reducers/customModelCard.test.ts +0 -204
  708. package/src/store/user/slices/modelList/reducers/customModelCard.ts +0 -64
  709. package/src/store/user/slices/modelList/selectors/index.ts +0 -3
  710. package/src/store/user/slices/modelList/selectors/keyVaults.test.ts +0 -201
  711. package/src/store/user/slices/modelList/selectors/keyVaults.ts +0 -50
  712. package/src/store/user/slices/modelList/selectors/modelConfig.test.ts +0 -219
  713. package/src/store/user/slices/modelList/selectors/modelConfig.ts +0 -95
  714. package/src/store/user/slices/modelList/selectors/modelProvider.test.ts +0 -138
  715. package/src/store/user/slices/modelList/selectors/modelProvider.ts +0 -170
  716. package/src/tools/dalle/Render/GalleyGrid.tsx +0 -60
  717. package/src/tools/dalle/Render/Item/EditMode.tsx +0 -66
  718. package/src/tools/dalle/Render/Item/Error.tsx +0 -49
  719. package/src/tools/dalle/Render/Item/Image.tsx +0 -44
  720. package/src/tools/dalle/Render/Item/ImageFileItem.tsx +0 -57
  721. package/src/tools/dalle/Render/Item/index.tsx +0 -88
  722. package/src/tools/dalle/Render/ToolBar.tsx +0 -56
  723. package/src/tools/dalle/Render/index.tsx +0 -52
  724. package/src/tools/dalle/index.ts +0 -92
  725. /package/src/{app/[variants]/(main)/settings/provider/features/ProviderConfig → components/Skeleton}/SkeletonInput.tsx +0 -0
  726. /package/src/{middleware.ts → proxy.ts} +0 -0
@@ -1,7 +1,6 @@
1
1
  /* eslint-disable sort-keys-fix/sort-keys-fix, typescript-sort-keys/interface */
2
2
  import { ToolNameResolver } from '@lobechat/context-engine';
3
3
  import {
4
- ChatErrorType,
5
4
  ChatMessageError,
6
5
  ChatToolPayload,
7
6
  CreateMessageParams,
@@ -99,8 +98,8 @@ export const chatPlugin: StateCreator<
99
98
  topicId: get().activeTopicId, // if there is activeTopicId,then add it to topicId
100
99
  };
101
100
 
102
- await messageService.createMessage(newMessage);
103
- await get().refreshMessages();
101
+ const result = await messageService.createNewMessage(newMessage);
102
+ get().replaceMessages(result.messages);
104
103
  },
105
104
 
106
105
  fillPluginMessageContent: async (id, content, triggerAiMessage) => {
@@ -111,54 +110,12 @@ export const chatPlugin: StateCreator<
111
110
  if (triggerAiMessage) await triggerAIMessage({ parentId: id });
112
111
  },
113
112
  invokeBuiltinTool: async (id, payload) => {
114
- const {
115
- internal_togglePluginApiCalling,
116
- internal_updateMessageContent,
117
- internal_updatePluginError,
118
- } = get();
119
- const params = JSON.parse(payload.arguments);
120
- internal_togglePluginApiCalling(true, id, n('invokeBuiltinTool/start') as string);
121
- let data;
122
- try {
123
- data = await useToolStore.getState().transformApiArgumentsToAiState(payload.apiName, params);
124
- } catch (error) {
125
- const err = error as Error;
126
- console.error(err);
127
-
128
- const tool = builtinTools.find((tool) => tool.identifier === payload.identifier);
129
- const schema = tool?.manifest?.api.find((api) => api.name === payload.apiName)?.parameters;
130
-
131
- await internal_updatePluginError(id, {
132
- type: ChatErrorType.PluginFailToTransformArguments,
133
- body: {
134
- message:
135
- "[plugin] fail to transform plugin arguments to ai state, it may due to model's limited tools calling capacity. You can refer to https://lobehub.com/docs/usage/tools-calling for more detail.",
136
- stack: err.stack,
137
- arguments: params,
138
- schema,
139
- },
140
- message: '',
141
- });
142
- }
143
- internal_togglePluginApiCalling(false, id, n('invokeBuiltinTool/end') as string);
144
-
145
- if (!data) return;
146
-
147
- await internal_updateMessageContent(id, data);
148
-
149
113
  // run tool api call
150
- // postToolCalling
151
114
  // @ts-ignore
152
115
  const { [payload.apiName]: action } = get();
153
116
  if (!action) return;
154
117
 
155
- let content;
156
-
157
- try {
158
- content = JSON.parse(data);
159
- } catch {
160
- /* empty block */
161
- }
118
+ const content = safeParseJSON(payload.arguments);
162
119
 
163
120
  if (!content) return;
164
121
 
@@ -187,7 +144,7 @@ export const chatPlugin: StateCreator<
187
144
 
188
145
  // if the plugin settings is not valid, then set the message with error type
189
146
  if (!result.valid) {
190
- await messageService.updateMessageError(id, {
147
+ const updateResult = await messageService.updateMessageError(id, {
191
148
  body: {
192
149
  error: result.errors,
193
150
  message: '[plugin] your settings is invalid with plugin manifest setting schema',
@@ -196,7 +153,9 @@ export const chatPlugin: StateCreator<
196
153
  type: PluginErrorType.PluginSettingsInvalid as any,
197
154
  });
198
155
 
199
- await get().refreshMessages();
156
+ if (updateResult?.success && updateResult.messages) {
157
+ get().replaceMessages(updateResult.messages);
158
+ }
200
159
  return;
201
160
  }
202
161
  },
@@ -271,15 +230,15 @@ export const chatPlugin: StateCreator<
271
230
  groupId: message.groupId, // Propagate groupId from parent message for group chat
272
231
  };
273
232
 
274
- const id = await get().internal_createMessage(toolMessage);
275
- if (!id) return;
233
+ const result = await get().internal_createMessage(toolMessage);
234
+ if (!result) return;
276
235
 
277
236
  // trigger the plugin call
278
- const data = await get().internal_invokeDifferentTypePlugin(id, payload);
237
+ const data = await get().internal_invokeDifferentTypePlugin(result.id, payload);
279
238
 
280
239
  if (data && !['markdown', 'standalone'].includes(payload.type)) {
281
240
  shouldCreateMessage = true;
282
- latestToolId = id;
241
+ latestToolId = result.id;
283
242
  }
284
243
  });
285
244
 
@@ -295,13 +254,19 @@ export const chatPlugin: StateCreator<
295
254
  await get().triggerAIMessage({ traceId, threadId, inPortalThread, inSearchWorkflow });
296
255
  },
297
256
  updatePluginState: async (id, value) => {
298
- const { refreshMessages } = get();
257
+ const { replaceMessages } = get();
299
258
 
300
259
  // optimistic update
301
260
  get().internal_dispatchMessage({ id, type: 'updateMessage', value: { pluginState: value } });
302
261
 
303
- await messageService.updateMessagePluginState(id, value);
304
- await refreshMessages();
262
+ const result = await messageService.updateMessagePluginState(id, value, {
263
+ sessionId: get().activeId,
264
+ topicId: get().activeTopicId,
265
+ });
266
+
267
+ if (result?.success && result.messages) {
268
+ replaceMessages(result.messages);
269
+ }
305
270
  },
306
271
 
307
272
  updatePluginArguments: async (id, value, replace = false) => {
@@ -379,18 +344,26 @@ export const chatPlugin: StateCreator<
379
344
  const message = chatSelectors.getMessageById(id)(get());
380
345
  if (!message || !message.tools) return;
381
346
 
382
- const { internal_toggleMessageLoading, refreshMessages } = get();
347
+ const { internal_toggleMessageLoading, replaceMessages } = get();
383
348
 
384
349
  internal_toggleMessageLoading(true, id);
385
- await messageService.updateMessage(id, { tools: message.tools });
350
+ const result = await messageService.updateMessage(
351
+ id,
352
+ { tools: message.tools },
353
+ {
354
+ sessionId: get().activeId,
355
+ topicId: get().activeTopicId,
356
+ },
357
+ );
386
358
  internal_toggleMessageLoading(false, id);
387
359
 
388
- await refreshMessages();
360
+ if (result?.success && result.messages) {
361
+ replaceMessages(result.messages);
362
+ }
389
363
  },
390
364
 
391
365
  internal_callPluginApi: async (id, payload) => {
392
- const { internal_updateMessageContent, refreshMessages, internal_togglePluginApiCalling } =
393
- get();
366
+ const { internal_updateMessageContent, internal_togglePluginApiCalling } = get();
394
367
  let data: string;
395
368
 
396
369
  try {
@@ -418,8 +391,10 @@ export const chatPlugin: StateCreator<
418
391
 
419
392
  // ignore the aborted request error
420
393
  if (!err.message.includes('The user aborted a request.')) {
421
- await messageService.updateMessageError(id, error as any);
422
- await refreshMessages();
394
+ const result = await messageService.updateMessageError(id, error as any);
395
+ if (result?.success && result.messages) {
396
+ get().replaceMessages(result.messages);
397
+ }
423
398
  }
424
399
 
425
400
  data = '';
@@ -461,7 +436,6 @@ export const chatPlugin: StateCreator<
461
436
  invokeMCPTypePlugin: async (id, payload) => {
462
437
  const {
463
438
  internal_updateMessageContent,
464
- refreshMessages,
465
439
  internal_togglePluginApiCalling,
466
440
  internal_constructToolsCallingContext,
467
441
  } = get();
@@ -487,8 +461,10 @@ export const chatPlugin: StateCreator<
487
461
 
488
462
  // ignore the aborted request error
489
463
  if (!err.message.includes('The user aborted a request.')) {
490
- await messageService.updateMessageError(id, error as any);
491
- await refreshMessages();
464
+ const result = await messageService.updateMessageError(id, error as any);
465
+ if (result?.success && result.messages) {
466
+ get().replaceMessages(result.messages);
467
+ }
492
468
  }
493
469
  }
494
470
 
@@ -530,11 +506,20 @@ export const chatPlugin: StateCreator<
530
506
  return toolNameResolver.resolve(toolCalls, manifests);
531
507
  },
532
508
  internal_updatePluginError: async (id, error) => {
533
- const { refreshMessages } = get();
509
+ const { replaceMessages } = get();
534
510
 
535
511
  get().internal_dispatchMessage({ id, type: 'updateMessage', value: { error } });
536
- await messageService.updateMessage(id, { error });
537
- await refreshMessages();
512
+ const result = await messageService.updateMessage(
513
+ id,
514
+ { error },
515
+ {
516
+ sessionId: get().activeId,
517
+ topicId: get().activeTopicId,
518
+ },
519
+ );
520
+ if (result?.success && result.messages) {
521
+ replaceMessages(result.messages);
522
+ }
538
523
  },
539
524
 
540
525
  internal_constructToolsCallingContext: (id: string) => {
@@ -764,7 +764,7 @@ describe('thread action', () => {
764
764
 
765
765
  const createMessageSpy = vi
766
766
  .spyOn(result.current, 'internal_createMessage')
767
- .mockResolvedValue('new-msg-id');
767
+ .mockResolvedValue({ id: 'new-msg-id', messages: [] });
768
768
  const coreProcessSpy = vi
769
769
  .spyOn(result.current, 'internal_coreProcessMessage')
770
770
  .mockResolvedValue();
@@ -803,7 +803,10 @@ describe('thread action', () => {
803
803
  });
804
804
  });
805
805
 
806
- vi.spyOn(result.current, 'internal_createMessage').mockResolvedValue('new-msg-id');
806
+ vi.spyOn(result.current, 'internal_createMessage').mockResolvedValue({
807
+ id: 'new-msg-id',
808
+ messages: [],
809
+ });
807
810
  vi.spyOn(result.current, 'internal_coreProcessMessage').mockResolvedValue();
808
811
  vi.spyOn(result.current, 'internal_createTmpMessage').mockReturnValue('temp-msg-id');
809
812
  vi.spyOn(result.current, 'internal_toggleMessageLoading');
@@ -833,7 +836,10 @@ describe('thread action', () => {
833
836
  });
834
837
  });
835
838
 
836
- vi.spyOn(result.current, 'internal_createMessage').mockResolvedValue('new-msg-id');
839
+ vi.spyOn(result.current, 'internal_createMessage').mockResolvedValue({
840
+ id: 'new-msg-id',
841
+ messages: [],
842
+ });
837
843
  vi.spyOn(result.current, 'internal_coreProcessMessage').mockResolvedValue();
838
844
  vi.spyOn(result.current, 'internal_createTmpMessage').mockReturnValue('temp-msg-id');
839
845
  vi.spyOn(result.current, 'internal_toggleMessageLoading');
@@ -855,7 +861,10 @@ describe('thread action', () => {
855
861
  });
856
862
 
857
863
  vi.spyOn(result.current, 'internal_shouldUseRAG').mockReturnValue(true);
858
- vi.spyOn(result.current, 'internal_createMessage').mockResolvedValue('new-msg-id');
864
+ vi.spyOn(result.current, 'internal_createMessage').mockResolvedValue({
865
+ id: 'new-msg-id',
866
+ messages: [],
867
+ });
859
868
  vi.spyOn(result.current, 'internal_createTmpMessage').mockReturnValue('temp-msg-id');
860
869
  vi.spyOn(result.current, 'internal_toggleMessageLoading');
861
870
 
@@ -158,7 +158,9 @@ export const chatThreadMessage: StateCreator<
158
158
  tempMessageId = get().internal_createTmpMessage(newMessage);
159
159
  get().internal_toggleMessageLoading(true, tempMessageId);
160
160
 
161
- parentMessageId = await get().internal_createMessage(newMessage, { tempMessageId });
161
+ const result = await get().internal_createMessage(newMessage, { tempMessageId });
162
+ if (!result) return;
163
+ parentMessageId = result.id;
162
164
  }
163
165
 
164
166
  get().internal_toggleMessageLoading(false, tempMessageId);
@@ -254,7 +254,7 @@ describe('topic action', () => {
254
254
 
255
255
  const updateFavoriteSpy = vi
256
256
  .spyOn(topicService, 'updateTopic')
257
- .mockResolvedValue({ success: 1 });
257
+ .mockResolvedValue(undefined as any);
258
258
 
259
259
  const refreshTopicSpy = vi.spyOn(result.current, 'refreshTopic');
260
260
 
@@ -15,7 +15,6 @@ import { useClientDataSWR } from '@/libs/swr';
15
15
  import { chatService } from '@/services/chat';
16
16
  import { messageService } from '@/services/message';
17
17
  import { topicService } from '@/services/topic';
18
- import { CreateTopicParams } from '@/services/topic/type';
19
18
  import type { ChatStore } from '@/store/chat';
20
19
  import type { ChatStoreState } from '@/store/chat/initialState';
21
20
  import { messageMapKey } from '@/store/chat/utils/messageMapKey';
@@ -24,7 +23,7 @@ import { useSessionStore } from '@/store/session';
24
23
  import { sessionSelectors } from '@/store/session/selectors';
25
24
  import { useUserStore } from '@/store/user';
26
25
  import { systemAgentSelectors } from '@/store/user/selectors';
27
- import { ChatTopic } from '@/types/topic';
26
+ import { ChatTopic, CreateTopicParams } from '@/types/topic';
28
27
  import { merge } from '@/utils/merge';
29
28
  import { setNamespace } from '@/utils/storeDebug';
30
29
 
@@ -1,7 +1,6 @@
1
1
  import { produce } from 'immer';
2
2
 
3
- import { CreateTopicParams } from '@/services/topic/type';
4
- import { ChatTopic } from '@/types/topic';
3
+ import { ChatTopic, CreateTopicParams } from '@/types/topic';
5
4
 
6
5
  interface AddChatTopicAction {
7
6
  type: 'addTopic';
@@ -4,7 +4,6 @@ import { StateCreator } from 'zustand/vanilla';
4
4
  import { notification } from '@/components/AntdStaticMethods';
5
5
  import { FILE_UPLOAD_BLACKLIST } from '@/const/file';
6
6
  import { fileService } from '@/services/file';
7
- import { ServerService } from '@/services/file/server';
8
7
  import { ragService } from '@/services/rag';
9
8
  import { UPLOAD_NETWORK_ERROR } from '@/services/upload';
10
9
  import {
@@ -21,8 +20,6 @@ import { FileStore } from '../../store';
21
20
 
22
21
  const n = setNamespace('chat');
23
22
 
24
- const serverFileService = new ServerService();
25
-
26
23
  export interface FileAction {
27
24
  clearChatUploadFileList: () => void;
28
25
  dispatchChatUploadFileList: (payload: UploadFileListDispatch) => void;
@@ -71,7 +68,7 @@ export const createFileSlice: StateCreator<
71
68
  let fileItem: FileListItem | undefined = undefined;
72
69
 
73
70
  try {
74
- fileItem = await serverFileService.getFileItem(id);
71
+ fileItem = await fileService.getFileItem(id);
75
72
  } catch (e) {
76
73
  console.error('getFileItem Error:', e);
77
74
  continue;
@@ -4,8 +4,7 @@ import { StateCreator } from 'zustand/vanilla';
4
4
 
5
5
  import { FILE_UPLOAD_BLACKLIST, MAX_UPLOAD_FILE_COUNT } from '@/const/file';
6
6
  import { useClientDataSWR } from '@/libs/swr';
7
- import { fileService } from '@/services/file';
8
- import { ServerService } from '@/services/file/server';
7
+ import { fileService , FileService } from '@/services/file';
9
8
  import { ragService } from '@/services/rag';
10
9
  import {
11
10
  UploadFileListDispatch,
@@ -18,7 +17,7 @@ import { unzipFile } from '@/utils/unzipFile';
18
17
  import { FileStore } from '../../store';
19
18
  import { fileManagerSelectors } from './selectors';
20
19
 
21
- const serverFileService = new ServerService();
20
+ const serverFileService = new FileService();
22
21
 
23
22
  export interface FileManageAction {
24
23
  dispatchDockFileList: (payload: UploadFileListDispatch) => void;
@@ -4,25 +4,19 @@ import { createWithEqualityFn } from 'zustand/traditional';
4
4
  import { StateCreator } from 'zustand/vanilla';
5
5
 
6
6
  import { createDevtools } from '../middleware/createDevtools';
7
- import { type GlobalClientDBAction, clientDBSlice } from './actions/clientDb';
8
7
  import { type GlobalGeneralAction, generalActionSlice } from './actions/general';
9
8
  import { type GlobalWorkspacePaneAction, globalWorkspaceSlice } from './actions/workspacePane';
10
9
  import { type GlobalState, initialState } from './initialState';
11
10
 
12
11
  // =============== 聚合 createStoreFn ============ //
13
12
 
14
- export interface GlobalStore
15
- extends GlobalState,
16
- GlobalWorkspacePaneAction,
17
- GlobalClientDBAction,
18
- GlobalGeneralAction {
13
+ export interface GlobalStore extends GlobalState, GlobalWorkspacePaneAction, GlobalGeneralAction {
19
14
  /* empty */
20
15
  }
21
16
 
22
17
  const createStore: StateCreator<GlobalStore, [['zustand/devtools', never]]> = (...parameters) => ({
23
18
  ...initialState,
24
19
  ...globalWorkspaceSlice(...parameters),
25
- ...clientDBSlice(...parameters),
26
20
  ...generalActionSlice(...parameters),
27
21
  });
28
22
 
@@ -42,7 +42,7 @@ describe('createSessionGroupSlice', () => {
42
42
  it('should clear session groups and refresh sessions', async () => {
43
43
  const spyOn = vi
44
44
  .spyOn(sessionService, 'removeSessionGroups')
45
- .mockResolvedValueOnce(undefined);
45
+ .mockResolvedValueOnce(undefined as any);
46
46
  const spyOnRefreshSessions = vi.spyOn(useSessionStore.getState(), 'refreshSessions');
47
47
 
48
48
  const { result } = renderHook(() => useSessionStore());
@@ -59,7 +59,7 @@ describe('createSessionGroupSlice', () => {
59
59
  describe('removeSessionGroup', () => {
60
60
  it('should remove a session group and refresh sessions', async () => {
61
61
  const mockId = 'mock-id';
62
- vi.spyOn(sessionService, 'removeSessionGroup').mockResolvedValueOnce(undefined);
62
+ vi.spyOn(sessionService, 'removeSessionGroup').mockResolvedValueOnce(undefined as any);
63
63
  const spyOnRefreshSessions = vi.spyOn(useSessionStore.getState(), 'refreshSessions');
64
64
 
65
65
  const { result } = renderHook(() => useSessionStore());
@@ -77,7 +77,7 @@ describe('createSessionGroupSlice', () => {
77
77
  it('should update a session group id and refresh sessions', async () => {
78
78
  const mockSessionId = 'session-id';
79
79
  const mockGroupId = 'group-id';
80
- vi.spyOn(sessionService, 'updateSession').mockResolvedValueOnce(undefined);
80
+ vi.spyOn(sessionService, 'updateSession').mockResolvedValueOnce(undefined as any);
81
81
  const spyOnRefreshSessions = vi.spyOn(useSessionStore.getState(), 'refreshSessions');
82
82
 
83
83
  const { result } = renderHook(() => useSessionStore());
@@ -98,7 +98,7 @@ describe('createSessionGroupSlice', () => {
98
98
  const mockId = 'mock-id';
99
99
  const mockName = 'New Name';
100
100
  const spyOnRefreshSessions = vi.spyOn(useSessionStore.getState(), 'refreshSessions');
101
- vi.spyOn(sessionService, 'updateSessionGroup').mockResolvedValueOnce(undefined);
101
+ vi.spyOn(sessionService, 'updateSessionGroup').mockResolvedValueOnce(undefined as any);
102
102
 
103
103
  const { result } = renderHook(() => useSessionStore());
104
104
 
@@ -117,7 +117,7 @@ describe('createSessionGroupSlice', () => {
117
117
  { id: 'id1', sort: 0 },
118
118
  { id: 'id2', sort: 1 },
119
119
  ];
120
- vi.spyOn(sessionService, 'updateSessionGroupOrder').mockResolvedValueOnce(undefined);
120
+ vi.spyOn(sessionService, 'updateSessionGroupOrder').mockResolvedValueOnce(undefined as any);
121
121
  const spyOnRefreshSessions = vi.spyOn(useSessionStore.getState(), 'refreshSessions');
122
122
 
123
123
  const { result } = renderHook(() => useSessionStore());
@@ -78,7 +78,7 @@ describe('toolSelectors', () => {
78
78
 
79
79
  describe('metaList and getMetaById', () => {
80
80
  it('should return the correct list of tool metadata', () => {
81
- const result = toolSelectors.metaList()(mockState);
81
+ const result = toolSelectors.metaList(mockState);
82
82
  expect(result).toEqual([
83
83
  {
84
84
  type: 'builtin',
@@ -53,18 +53,16 @@ const enabledSystemRoles =
53
53
  return '';
54
54
  };
55
55
 
56
- const metaList =
57
- (showDalle?: boolean) =>
58
- (s: ToolStoreState): LobeToolMeta[] => {
59
- const pluginList = pluginSelectors.installedPluginMetaList(s) as LobeToolMeta[];
56
+ const metaList = (s: ToolStoreState): LobeToolMeta[] => {
57
+ const pluginList = pluginSelectors.installedPluginMetaList(s) as LobeToolMeta[];
60
58
 
61
- return builtinToolSelectors.metaList(showDalle)(s).concat(pluginList);
62
- };
59
+ return builtinToolSelectors.metaList(s).concat(pluginList);
60
+ };
63
61
 
64
62
  const getMetaById =
65
- (id: string, showDalle: boolean = true) =>
63
+ (id: string) =>
66
64
  (s: ToolStoreState): MetaData | undefined => {
67
- const item = metaList(showDalle)(s).find((m) => m.identifier === id);
65
+ const item = metaList(s).find((m) => m.identifier === id);
68
66
 
69
67
  if (!item) return;
70
68
 
@@ -6,19 +6,20 @@ import { useToolStore } from '../../store';
6
6
  vi.mock('zustand/traditional');
7
7
 
8
8
  describe('createBuiltinToolSlice', () => {
9
- describe('invokeBuiltinTool', () => {
10
- it('should return if the tool is already loading', async () => {
9
+ describe('transformApiArgumentsToAiState', () => {
10
+ it('should return early if the tool is already loading', async () => {
11
11
  // Given
12
- const key = 'text2image';
13
- const params = {};
12
+ const key = 'mockTool';
13
+ const params = { test: 'data' };
14
14
 
15
15
  const mockFn = vi.fn();
16
16
  const { result } = renderHook(() => useToolStore());
17
17
 
18
18
  act(() => {
19
19
  useToolStore.setState({
20
- text2image: mockFn,
21
- });
20
+ builtinToolLoading: { [key]: true },
21
+ mockTool: mockFn,
22
+ } as any);
22
23
  });
23
24
 
24
25
  await act(async () => {
@@ -27,61 +28,108 @@ describe('createBuiltinToolSlice', () => {
27
28
  expect(data).toBeUndefined();
28
29
  });
29
30
 
30
- // Then
31
- expect(mockFn).toHaveBeenCalled();
31
+ // Then - should not call the action if already loading
32
+ expect(mockFn).not.toHaveBeenCalled();
32
33
  });
33
34
 
34
35
  it('should invoke the specified tool action and return the stringified result', async () => {
35
36
  // Given
36
- const key = 'text2image';
37
-
38
- const mockFn = vi.fn();
37
+ const key = 'mockTool';
38
+ const mockResult = { success: true, data: 'test result' };
39
+ const mockFn = vi.fn().mockResolvedValue(mockResult);
39
40
  const { result } = renderHook(() => useToolStore());
40
41
 
41
42
  const params = {
42
- prompts: ['test prompt'],
43
- size: '512x512',
44
- quality: 'standard',
45
- style: 'vivid',
43
+ input: 'test input',
44
+ option: 'value',
46
45
  };
47
46
 
48
47
  act(() => {
49
48
  useToolStore.setState({
50
49
  builtinToolLoading: { [key]: false },
51
- text2image: mockFn,
50
+ mockTool: mockFn,
51
+ } as any);
52
+ });
53
+
54
+ // When
55
+ let resultData: string | undefined;
56
+ await act(async () => {
57
+ resultData = await result.current.transformApiArgumentsToAiState(key, params);
58
+ });
59
+
60
+ // Then
61
+ expect(mockFn).toHaveBeenCalledWith({
62
+ input: 'test input',
63
+ option: 'value',
64
+ });
65
+ expect(resultData).toBe(JSON.stringify(mockResult));
66
+ });
67
+
68
+ it('should return stringified params if action does not exist', async () => {
69
+ // Given
70
+ const key = 'nonExistentTool';
71
+ const params = { test: 'data' };
72
+ const { result } = renderHook(() => useToolStore());
73
+
74
+ act(() => {
75
+ useToolStore.setState({
76
+ builtinToolLoading: {},
52
77
  });
53
78
  });
79
+
54
80
  // When
81
+ let resultData: string | undefined;
55
82
  await act(async () => {
56
- await result.current.transformApiArgumentsToAiState(key, params);
83
+ resultData = await result.current.transformApiArgumentsToAiState(key, params);
57
84
  });
58
85
 
59
- expect(mockFn).toBeCalledWith({
60
- prompts: ['test prompt'],
61
- quality: 'standard',
62
- size: '512x512',
63
- style: 'vivid',
86
+ // Then
87
+ expect(resultData).toBe(JSON.stringify(params));
88
+ });
89
+
90
+ it('should handle errors and toggle loading state', async () => {
91
+ // Given
92
+ const key = 'mockTool';
93
+ const params = { test: 'data' };
94
+ const error = new Error('Tool execution failed');
95
+ const mockFn = vi.fn().mockRejectedValue(error);
96
+ const { result } = renderHook(() => useToolStore());
97
+
98
+ act(() => {
99
+ useToolStore.setState({
100
+ builtinToolLoading: { [key]: false },
101
+ mockTool: mockFn,
102
+ } as any);
103
+ });
104
+
105
+ // When/Then
106
+ await act(async () => {
107
+ await expect(result.current.transformApiArgumentsToAiState(key, params)).rejects.toThrow(
108
+ 'Tool execution failed',
109
+ );
64
110
  });
111
+
112
+ // Should have toggled loading state back to false
113
+ expect(result.current.builtinToolLoading[key]).toBe(false);
65
114
  });
66
115
  });
67
116
 
68
- describe('text2image', () => {
69
- it('should map the prompts to DallEImageItem objects', () => {
70
- // When
117
+ describe('toggleBuiltinToolLoading', () => {
118
+ it('should toggle the loading state for a tool', () => {
71
119
  const { result } = renderHook(() => useToolStore());
120
+ const key = 'testTool';
121
+
122
+ act(() => {
123
+ result.current.toggleBuiltinToolLoading(key, true);
124
+ });
125
+
126
+ expect(result.current.builtinToolLoading[key]).toBe(true);
72
127
 
73
- const data = result.current.text2image({
74
- prompts: ['prompt1', 'prompt2'],
75
- size: '1024x1024',
76
- quality: 'standard',
77
- style: 'vivid',
128
+ act(() => {
129
+ result.current.toggleBuiltinToolLoading(key, false);
78
130
  });
79
131
 
80
- // Then
81
- expect(data).toEqual([
82
- { prompt: 'prompt1', quality: 'standard', size: '1024x1024', style: 'vivid' },
83
- { prompt: 'prompt2', quality: 'standard', size: '1024x1024', style: 'vivid' },
84
- ]);
132
+ expect(result.current.builtinToolLoading[key]).toBe(false);
85
133
  });
86
134
  });
87
135
  });
@@ -1,22 +1,15 @@
1
1
  import { StateCreator } from 'zustand/vanilla';
2
2
 
3
- import { OpenAIImagePayload } from '@/types/openai/image';
4
- import { DallEImageItem } from '@/types/tool/dalle';
5
3
  import { setNamespace } from '@/utils/storeDebug';
6
4
 
7
5
  import { ToolStore } from '../../store';
8
6
 
9
7
  const n = setNamespace('builtinTool');
10
8
 
11
- interface Text2ImageParams extends Pick<OpenAIImagePayload, 'quality' | 'style' | 'size'> {
12
- prompts: string[];
13
- }
14
-
15
9
  /**
16
10
  * 代理行为接口
17
11
  */
18
12
  export interface BuiltinToolAction {
19
- text2image: (params: Text2ImageParams) => DallEImageItem[];
20
13
  toggleBuiltinToolLoading: (key: string, value: boolean) => void;
21
14
  transformApiArgumentsToAiState: (key: string, params: any) => Promise<string | undefined>;
22
15
  }
@@ -27,8 +20,6 @@ export const createBuiltinToolSlice: StateCreator<
27
20
  [],
28
21
  BuiltinToolAction
29
22
  > = (set, get) => ({
30
- text2image: ({ prompts, size = '1024x1024' as const, quality = 'standard', style = 'vivid' }) =>
31
- prompts.map((p) => ({ prompt: p, quality, size, style })),
32
23
  toggleBuiltinToolLoading: (key, value) => {
33
24
  set({ builtinToolLoading: { [key]: value } }, false, n('toggleBuiltinToolLoading'));
34
25
  },