@lobehub/lobehub 2.0.0-next.2 → 2.0.0-next.21

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 (603) 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 +484 -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/__tests__/AuthCtr.test.ts +706 -0
  19. package/apps/desktop/src/main/utils/next-electron-rsc.ts +7 -5
  20. package/apps/desktop/tsconfig.json +0 -1
  21. package/changelog/v1.json +159 -0
  22. package/docs/development/database-schema.dbml +11 -1
  23. package/docs/self-hosting/advanced/auth/next-auth/auth0.mdx +2 -2
  24. package/docs/self-hosting/advanced/auth/next-auth/auth0.zh-CN.mdx +2 -2
  25. package/docs/self-hosting/advanced/auth/next-auth/authelia.mdx +2 -2
  26. package/docs/self-hosting/advanced/auth/next-auth/authelia.zh-CN.mdx +2 -2
  27. package/docs/self-hosting/advanced/auth/next-auth/authentik.mdx +2 -2
  28. package/docs/self-hosting/advanced/auth/next-auth/authentik.zh-CN.mdx +2 -2
  29. package/docs/self-hosting/advanced/auth/next-auth/casdoor.mdx +2 -2
  30. package/docs/self-hosting/advanced/auth/next-auth/casdoor.zh-CN.mdx +2 -2
  31. package/docs/self-hosting/advanced/auth/next-auth/cloudflare-zero-trust.mdx +2 -2
  32. package/docs/self-hosting/advanced/auth/next-auth/cloudflare-zero-trust.zh-CN.mdx +2 -2
  33. package/docs/self-hosting/advanced/auth/next-auth/github.mdx +2 -2
  34. package/docs/self-hosting/advanced/auth/next-auth/github.zh-CN.mdx +2 -2
  35. package/docs/self-hosting/advanced/auth/next-auth/google.mdx +32 -29
  36. package/docs/self-hosting/advanced/auth/next-auth/keycloak.mdx +2 -2
  37. package/docs/self-hosting/advanced/auth/next-auth/keycloak.zh-CN.mdx +2 -2
  38. package/docs/self-hosting/advanced/auth/next-auth/logto.mdx +5 -3
  39. package/docs/self-hosting/advanced/auth/next-auth/logto.zh-CN.mdx +5 -3
  40. package/docs/self-hosting/advanced/auth/next-auth/microsoft-entra-id.mdx +2 -2
  41. package/docs/self-hosting/advanced/auth/next-auth/microsoft-entra-id.zh-CN.mdx +2 -2
  42. package/docs/self-hosting/advanced/auth/next-auth/okta.mdx +2 -2
  43. package/docs/self-hosting/advanced/auth/next-auth/okta.zh-CN.mdx +2 -2
  44. package/docs/self-hosting/advanced/auth/next-auth/wechat.mdx +2 -2
  45. package/docs/self-hosting/advanced/auth/next-auth/wechat.zh-CN.mdx +2 -2
  46. package/docs/self-hosting/advanced/auth/next-auth/zitadel.mdx +2 -2
  47. package/docs/self-hosting/advanced/auth/next-auth/zitadel.zh-CN.mdx +2 -2
  48. package/docs/self-hosting/advanced/auth.mdx +32 -21
  49. package/docs/self-hosting/advanced/auth.zh-CN.mdx +30 -19
  50. package/docs/self-hosting/advanced/feature-flags.mdx +0 -1
  51. package/docs/self-hosting/advanced/feature-flags.zh-CN.mdx +0 -1
  52. package/docs/self-hosting/advanced/online-search.mdx +30 -25
  53. package/docs/self-hosting/advanced/online-search.zh-CN.mdx +25 -23
  54. package/e2e/src/features/discover/smoke.feature +34 -1
  55. package/e2e/src/steps/discover/smoke.steps.ts +116 -4
  56. package/e2e/tsconfig.json +0 -1
  57. package/locales/ar/models.json +15 -6
  58. package/locales/ar/oauth.json +1 -0
  59. package/locales/bg-BG/models.json +15 -6
  60. package/locales/bg-BG/oauth.json +1 -0
  61. package/locales/de-DE/models.json +15 -6
  62. package/locales/de-DE/oauth.json +1 -0
  63. package/locales/en-US/models.json +15 -6
  64. package/locales/en-US/oauth.json +1 -0
  65. package/locales/es-ES/models.json +15 -6
  66. package/locales/es-ES/oauth.json +1 -0
  67. package/locales/fa-IR/models.json +15 -6
  68. package/locales/fa-IR/oauth.json +1 -0
  69. package/locales/fr-FR/models.json +15 -6
  70. package/locales/fr-FR/oauth.json +1 -0
  71. package/locales/it-IT/models.json +15 -6
  72. package/locales/it-IT/oauth.json +1 -0
  73. package/locales/ja-JP/models.json +15 -6
  74. package/locales/ja-JP/oauth.json +1 -0
  75. package/locales/ko-KR/models.json +21 -12
  76. package/locales/ko-KR/oauth.json +1 -0
  77. package/locales/nl-NL/models.json +15 -6
  78. package/locales/nl-NL/oauth.json +1 -0
  79. package/locales/pl-PL/models.json +15 -6
  80. package/locales/pl-PL/oauth.json +1 -0
  81. package/locales/pt-BR/models.json +15 -6
  82. package/locales/pt-BR/oauth.json +1 -0
  83. package/locales/ru-RU/models.json +15 -6
  84. package/locales/ru-RU/oauth.json +1 -0
  85. package/locales/tr-TR/models.json +15 -6
  86. package/locales/tr-TR/oauth.json +1 -0
  87. package/locales/vi-VN/models.json +15 -6
  88. package/locales/vi-VN/oauth.json +1 -0
  89. package/locales/zh-CN/models.json +15 -6
  90. package/locales/zh-CN/oauth.json +1 -0
  91. package/locales/zh-TW/models.json +15 -6
  92. package/locales/zh-TW/oauth.json +1 -0
  93. package/next.config.ts +2 -3
  94. package/package.json +74 -80
  95. package/packages/const/src/index.ts +0 -1
  96. package/packages/const/src/models.ts +13 -0
  97. package/packages/const/src/url.ts +1 -4
  98. package/packages/const/src/version.ts +3 -3
  99. package/packages/context-engine/src/index.ts +1 -6
  100. package/packages/context-engine/src/processors/GroupMessageFlatten.ts +12 -2
  101. package/packages/context-engine/src/processors/__tests__/GroupMessageFlatten.test.ts +73 -9
  102. package/packages/context-engine/src/providers/index.ts +0 -2
  103. package/packages/database/migrations/0041_improve_index.sql +10 -0
  104. package/packages/database/migrations/meta/0041_snapshot.json +7784 -0
  105. package/packages/database/migrations/meta/_journal.json +7 -0
  106. package/packages/database/package.json +1 -1
  107. package/packages/database/src/core/migrations.json +17 -0
  108. package/packages/database/src/core/web-server.ts +2 -1
  109. package/packages/database/src/models/__tests__/message.grouping.test.ts +812 -0
  110. package/packages/database/src/models/__tests__/message.test.ts +322 -170
  111. package/packages/database/src/models/message.ts +62 -24
  112. package/packages/database/src/models/session.ts +60 -19
  113. package/packages/database/src/repositories/dataImporter/deprecated/__tests__/index.test.ts +2 -1
  114. package/packages/database/src/repositories/dataImporter/deprecated/index.ts +7 -1
  115. package/packages/database/src/schemas/agent.ts +10 -11
  116. package/packages/database/src/schemas/message.ts +5 -1
  117. package/packages/database/src/schemas/relations.ts +6 -4
  118. package/packages/database/src/schemas/session.ts +2 -0
  119. package/packages/database/src/schemas/topic.ts +6 -1
  120. package/packages/database/src/utils/__tests__/groupMessages.test.ts +145 -2
  121. package/packages/database/src/utils/groupMessages.ts +7 -5
  122. package/packages/electron-client-ipc/package.json +4 -1
  123. package/packages/file-loaders/package.json +1 -0
  124. package/packages/memory-extract/package.json +1 -1
  125. package/packages/model-bank/src/aiModels/anthropic.ts +0 -63
  126. package/packages/model-bank/src/aiModels/azure.ts +155 -0
  127. package/packages/model-bank/src/aiModels/bedrock.ts +44 -0
  128. package/packages/model-bank/src/aiModels/higress.ts +0 -55
  129. package/packages/model-bank/src/aiModels/infiniai.ts +21 -0
  130. package/packages/model-bank/src/aiModels/ollamacloud.ts +13 -0
  131. package/packages/model-bank/src/aiModels/siliconcloud.ts +19 -0
  132. package/packages/model-runtime/src/core/parameterResolver.ts +3 -0
  133. package/packages/model-runtime/src/core/streams/openai/__snapshots__/responsesStream.test.ts.snap +0 -38
  134. package/packages/model-runtime/src/providers/azureOpenai/index.ts +2 -1
  135. package/packages/model-runtime/src/providers/minimax/index.ts +5 -5
  136. package/packages/model-runtime/src/providers/search1api/index.test.ts +2 -2
  137. package/packages/model-runtime/src/utils/googleErrorParser.test.ts +125 -0
  138. package/packages/model-runtime/src/utils/googleErrorParser.ts +103 -77
  139. package/packages/types/src/message/common/base.ts +13 -0
  140. package/packages/types/src/message/common/image.ts +8 -0
  141. package/packages/types/src/message/common/metadata.ts +39 -0
  142. package/packages/types/src/message/common/tools.ts +10 -0
  143. package/packages/types/src/message/db/params.ts +47 -1
  144. package/packages/types/src/message/ui/chat.ts +4 -1
  145. package/packages/types/src/message/ui/params.ts +98 -4
  146. package/packages/types/src/search.ts +16 -0
  147. package/packages/types/src/serverConfig.ts +2 -6
  148. package/packages/types/src/user/index.ts +13 -1
  149. package/packages/types/src/user/settings/index.ts +22 -0
  150. package/packages/utils/src/apiKey.test.ts +139 -0
  151. package/packages/utils/src/client/clipboard.ts +2 -2
  152. package/packages/utils/src/client/exportFile.ts +10 -10
  153. package/packages/utils/src/client/parserPlaceholder.ts +18 -18
  154. package/packages/utils/src/client/topic.ts +10 -10
  155. package/packages/utils/src/client/xor-obfuscation.ts +11 -11
  156. package/packages/web-crawler/src/crawImpl/firecrawl.ts +39 -12
  157. package/packages/web-crawler/tsconfig.json +0 -1
  158. package/renovate.json +20 -3
  159. package/scripts/migrateServerDB/errorHint.js +1 -7
  160. package/scripts/migrateServerDB/index.ts +2 -1
  161. package/src/app/(backend)/webapi/revalidate/route.ts +1 -1
  162. package/src/app/[variants]/(auth)/signup/[[...signup]]/page.tsx +1 -8
  163. package/src/app/[variants]/(main)/(mobile)/me/(home)/__tests__/useCategory.test.tsx +9 -0
  164. package/src/app/[variants]/(main)/(mobile)/me/(home)/features/UserBanner.tsx +3 -6
  165. package/src/app/[variants]/(main)/(mobile)/me/(home)/layout.tsx +0 -2
  166. package/src/app/[variants]/(main)/_layout/Desktop/SideBar/TopActions.tsx +1 -4
  167. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/V1Mobile/index.tsx +2 -2
  168. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/V1Mobile/useSend.ts +6 -4
  169. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/useSend.ts +15 -10
  170. package/src/app/[variants]/(main)/chat/@session/features/SessionListContent/List/Item/Actions.tsx +3 -28
  171. package/src/app/[variants]/(main)/chat/@session/features/SessionListContent/List/Item/index.tsx +4 -2
  172. package/src/app/[variants]/(main)/chat/_layout/Desktop/index.tsx +0 -2
  173. package/src/app/[variants]/(main)/chat/_layout/Mobile.tsx +1 -5
  174. package/src/app/[variants]/(main)/chat/settings/features/HeaderContent.tsx +2 -62
  175. package/src/app/[variants]/(main)/discover/(list)/features/Pagination.tsx +1 -0
  176. package/src/app/[variants]/(main)/discover/(list)/features/SortButton/index.tsx +1 -1
  177. package/src/app/[variants]/(main)/discover/(list)/mcp/features/List/Item.tsx +1 -0
  178. package/src/app/[variants]/(main)/discover/(list)/model/features/List/Item.tsx +1 -0
  179. package/src/app/[variants]/(main)/discover/(list)/provider/features/List/Item.tsx +1 -0
  180. package/src/app/[variants]/(main)/discover/components/CategoryMenu.tsx +9 -1
  181. package/src/app/[variants]/(main)/image/@topic/features/Topics/TopicList.tsx +1 -0
  182. package/src/app/[variants]/(main)/image/features/PromptInput/index.tsx +1 -1
  183. package/src/app/[variants]/(main)/image/page.tsx +0 -2
  184. package/src/app/[variants]/(main)/labs/components/LabCard.tsx +3 -1
  185. package/src/app/[variants]/(main)/profile/_layout/Desktop/index.tsx +23 -24
  186. package/src/app/[variants]/(main)/profile/_layout/Mobile/index.tsx +5 -9
  187. package/src/app/[variants]/(main)/settings/_layout/Desktop/index.tsx +0 -2
  188. package/src/app/[variants]/(main)/settings/_layout/Mobile/index.tsx +0 -2
  189. package/src/app/[variants]/(main)/settings/_layout/SettingsContent.tsx +0 -3
  190. package/src/app/[variants]/(main)/settings/provider/(list)/ProviderGrid/Card.tsx +1 -1
  191. package/src/app/[variants]/(main)/settings/provider/detail/azure/index.tsx +5 -7
  192. package/src/app/[variants]/layout.tsx +1 -0
  193. package/src/app/[variants]/loading/index.tsx +1 -10
  194. package/src/app/[variants]/oauth/ResultLayout.tsx +47 -0
  195. package/src/app/[variants]/oauth/callback/error/page.tsx +20 -33
  196. package/src/app/[variants]/oauth/callback/layout.tsx +1 -0
  197. package/src/app/[variants]/oauth/callback/success/page.tsx +8 -22
  198. package/src/app/[variants]/oauth/consent/[uid]/Consent/BuiltinConsent.tsx +47 -0
  199. package/src/app/[variants]/oauth/consent/[uid]/{Consent.tsx → Consent/index.tsx} +12 -1
  200. package/src/app/[variants]/oauth/consent/[uid]/Login.tsx +19 -2
  201. package/src/app/sitemap.tsx +7 -1
  202. package/src/components/InvalidAPIKey/APIKeyForm/Bedrock.tsx +8 -13
  203. package/src/components/Link.tsx +12 -0
  204. package/src/components/Thinking/index.tsx +4 -3
  205. package/src/config/db.ts +0 -5
  206. package/src/config/featureFlags/schema.test.ts +0 -2
  207. package/src/config/featureFlags/schema.ts +0 -6
  208. package/src/config/modelProviders/ai21.ts +1 -16
  209. package/src/config/modelProviders/ai302.ts +1 -128
  210. package/src/config/modelProviders/ai360.ts +1 -32
  211. package/src/config/modelProviders/anthropic.ts +1 -94
  212. package/src/config/modelProviders/azure.ts +1 -51
  213. package/src/config/modelProviders/baichuan.ts +1 -57
  214. package/src/config/modelProviders/bedrock.ts +1 -276
  215. package/src/config/modelProviders/cloudflare.ts +1 -64
  216. package/src/config/modelProviders/deepseek.ts +1 -19
  217. package/src/config/modelProviders/fireworksai.ts +1 -174
  218. package/src/config/modelProviders/giteeai.ts +1 -135
  219. package/src/config/modelProviders/github.ts +1 -254
  220. package/src/config/modelProviders/google.ts +1 -130
  221. package/src/config/modelProviders/groq.ts +1 -119
  222. package/src/config/modelProviders/higress.ts +1 -1736
  223. package/src/config/modelProviders/huggingface.ts +1 -54
  224. package/src/config/modelProviders/hunyuan.ts +1 -83
  225. package/src/config/modelProviders/infiniai.ts +1 -74
  226. package/src/config/modelProviders/internlm.ts +1 -20
  227. package/src/config/modelProviders/minimax.ts +1 -1
  228. package/src/config/modelProviders/mistral.ts +1 -95
  229. package/src/config/modelProviders/modelscope.ts +1 -27
  230. package/src/config/modelProviders/moonshot.ts +1 -29
  231. package/src/config/modelProviders/novita.ts +1 -105
  232. package/src/config/modelProviders/ollama.ts +1 -325
  233. package/src/config/modelProviders/openai.ts +1 -242
  234. package/src/config/modelProviders/openrouter.ts +1 -240
  235. package/src/config/modelProviders/perplexity.ts +1 -45
  236. package/src/config/modelProviders/ppio.ts +1 -152
  237. package/src/config/modelProviders/qiniu.ts +2 -19
  238. package/src/config/modelProviders/qwen.ts +1 -245
  239. package/src/config/modelProviders/search1api.ts +1 -34
  240. package/src/config/modelProviders/sensenova.ts +1 -69
  241. package/src/config/modelProviders/siliconcloud.ts +1 -417
  242. package/src/config/modelProviders/spark.ts +1 -59
  243. package/src/config/modelProviders/stepfun.ts +1 -98
  244. package/src/config/modelProviders/taichu.ts +1 -18
  245. package/src/config/modelProviders/togetherai.ts +1 -274
  246. package/src/config/modelProviders/upstage.ts +1 -28
  247. package/src/config/modelProviders/wenxin.ts +1 -140
  248. package/src/config/modelProviders/xai.ts +1 -38
  249. package/src/config/modelProviders/zeroone.ts +1 -81
  250. package/src/config/modelProviders/zhipu.ts +1 -108
  251. package/src/envs/app.ts +5 -8
  252. package/src/envs/auth.ts +0 -179
  253. package/src/features/AgentSetting/AgentPlugin/index.tsx +2 -2
  254. package/src/features/ChatInput/ActionBar/STT/browser.tsx +2 -2
  255. package/src/features/ChatInput/ActionBar/STT/openai.tsx +2 -2
  256. package/src/features/ChatInput/ActionBar/Tools/useControls.tsx +1 -3
  257. package/src/features/Conversation/Error/ErrorJsonViewer.tsx +4 -3
  258. package/src/features/Conversation/Error/OllamaBizError/index.tsx +7 -2
  259. package/src/features/Conversation/Error/index.tsx +15 -5
  260. package/src/features/Conversation/MarkdownElements/LobeArtifact/Render/index.tsx +2 -2
  261. package/src/features/Conversation/Messages/Assistant/Extra/index.tsx +2 -2
  262. package/src/features/Conversation/Messages/Assistant/MessageContent.tsx +5 -3
  263. package/src/features/Conversation/Messages/Assistant/Tool/Inspector/BuiltinPluginTitle.tsx +2 -2
  264. package/src/features/Conversation/Messages/Assistant/Tool/Inspector/ToolTitle.tsx +4 -2
  265. package/src/features/Conversation/Messages/Assistant/Tool/Render/CustomRender.tsx +2 -2
  266. package/src/features/Conversation/Messages/Assistant/Tool/Render/index.tsx +2 -2
  267. package/src/features/Conversation/Messages/Assistant/Tool/index.tsx +2 -2
  268. package/src/features/Conversation/Messages/Assistant/index.tsx +4 -4
  269. package/src/features/Conversation/Messages/Default.tsx +2 -2
  270. package/src/features/Conversation/Messages/User/Extra.tsx +2 -2
  271. package/src/features/Conversation/Messages/User/index.tsx +4 -4
  272. package/src/features/Conversation/Messages/index.tsx +3 -3
  273. package/src/features/Conversation/components/AutoScroll.tsx +2 -2
  274. package/src/features/Conversation/components/Extras/Usage/UsageDetail/index.tsx +9 -6
  275. package/src/features/DataImporter/index.tsx +15 -60
  276. package/src/features/DevPanel/PostgresViewer/usePgTable.ts +3 -2
  277. package/src/features/PluginTag/index.tsx +1 -3
  278. package/src/features/PluginsUI/Render/BuiltinType/index.test.tsx +37 -28
  279. package/src/features/Portal/Artifacts/Body/index.tsx +2 -2
  280. package/src/helpers/isCanUseFC.ts +0 -8
  281. package/src/hooks/useEnabledChatModels.ts +0 -8
  282. package/src/hooks/useInterceptingRoutes.test.ts +21 -3
  283. package/src/hooks/useModelContextWindowTokens.ts +0 -8
  284. package/src/hooks/useModelHasContextWindowToken.ts +1 -10
  285. package/src/hooks/useModelSupportFiles.ts +1 -11
  286. package/src/hooks/useModelSupportReasoning.ts +1 -11
  287. package/src/hooks/useModelSupportToolUse.ts +1 -11
  288. package/src/hooks/useModelSupportVision.ts +1 -11
  289. package/src/layout/AuthProvider/Clerk/index.tsx +2 -16
  290. package/src/libs/next-auth/auth.config.ts +3 -6
  291. package/src/libs/next-auth/sso-providers/auth0.ts +0 -7
  292. package/src/libs/next-auth/sso-providers/authelia.ts +3 -5
  293. package/src/libs/next-auth/sso-providers/authentik.ts +0 -7
  294. package/src/libs/next-auth/sso-providers/cloudflare-zero-trust.ts +3 -6
  295. package/src/libs/next-auth/sso-providers/cognito.ts +1 -5
  296. package/src/libs/next-auth/sso-providers/generic-oidc.ts +3 -5
  297. package/src/libs/next-auth/sso-providers/github.ts +0 -6
  298. package/src/libs/next-auth/sso-providers/google.ts +0 -2
  299. package/src/libs/next-auth/sso-providers/index.ts +0 -2
  300. package/src/libs/next-auth/sso-providers/keycloak.ts +0 -3
  301. package/src/libs/next-auth/sso-providers/logto.ts +3 -5
  302. package/src/libs/next-auth/sso-providers/okta.ts +0 -4
  303. package/src/libs/next-auth/sso-providers/zitadel.ts +0 -7
  304. package/src/libs/oidc-provider/provider.ts +1 -1
  305. package/src/libs/trpc/client/index.ts +0 -1
  306. package/src/libs/trpc/client/lambda.ts +8 -5
  307. package/src/libs/trpc/lambda/context.ts +4 -1
  308. package/src/locales/default/oauth.ts +1 -0
  309. package/src/server/globalConfig/index.ts +0 -23
  310. package/src/server/modules/AssistantStore/index.ts +1 -1
  311. package/src/server/modules/ModelRuntime/trace.ts +11 -4
  312. package/src/server/routers/desktop/mcp.ts +1 -3
  313. package/src/server/routers/lambda/__tests__/integration/message.integration.test.ts +0 -41
  314. package/src/server/routers/lambda/config/__snapshots__/index.test.ts.snap +175 -12
  315. package/src/server/routers/lambda/config/index.test.ts +38 -30
  316. package/src/server/routers/lambda/message.ts +17 -13
  317. package/src/server/routers/lambda/session.ts +8 -5
  318. package/src/server/routers/lambda/user.ts +24 -25
  319. package/src/server/routers/tools/mcp.ts +2 -3
  320. package/src/server/routers/tools/search.test.ts +1 -7
  321. package/src/server/routers/tools/search.ts +1 -4
  322. package/src/server/services/search/impls/firecrawl/index.ts +51 -11
  323. package/src/server/services/search/impls/firecrawl/type.ts +60 -9
  324. package/src/services/__tests__/tool.test.ts +0 -3
  325. package/src/services/aiModel/index.test.ts +0 -3
  326. package/src/services/aiModel/index.ts +1 -7
  327. package/src/services/aiProvider/index.test.ts +0 -3
  328. package/src/services/aiProvider/index.ts +1 -7
  329. package/src/services/chat/chat.test.ts +13 -40
  330. package/src/services/chat/contextEngineering.test.ts +0 -30
  331. package/src/services/chat/contextEngineering.ts +1 -12
  332. package/src/services/chat/helper.ts +7 -31
  333. package/src/services/chat/index.ts +5 -10
  334. package/src/services/chat/types.ts +1 -1
  335. package/src/services/chatGroup/index.ts +1 -10
  336. package/src/services/config.ts +1 -65
  337. package/src/services/export/index.ts +1 -4
  338. package/src/services/file/index.ts +1 -11
  339. package/src/services/import/index.ts +1 -7
  340. package/src/services/mcp.test.ts +777 -0
  341. package/src/services/message/index.ts +1 -11
  342. package/src/services/message/server.ts +7 -6
  343. package/src/services/message/type.ts +6 -3
  344. package/src/services/models.ts +2 -11
  345. package/src/services/plugin/index.ts +1 -11
  346. package/src/services/session/index.ts +1 -11
  347. package/src/services/tableViewer/client.ts +12 -15
  348. package/src/services/thread/index.ts +1 -7
  349. package/src/services/topic/index.ts +1 -11
  350. package/src/services/user/index.ts +1 -13
  351. package/src/store/chat/helpers.test.ts +99 -0
  352. package/src/store/chat/helpers.ts +21 -2
  353. package/src/store/chat/selectors.ts +1 -1
  354. package/src/store/chat/slices/aiChat/actions/__tests__/generateAIChat.test.ts +0 -241
  355. package/src/store/chat/slices/aiChat/actions/__tests__/generateAIChatV2.test.ts +26 -1
  356. package/src/store/chat/slices/aiChat/actions/__tests__/helpers.ts +3 -1
  357. package/src/store/chat/slices/aiChat/actions/generateAIChat.ts +45 -155
  358. package/src/store/chat/slices/builtinTool/actions/index.ts +1 -4
  359. package/src/store/chat/slices/message/action.test.ts +5 -1
  360. package/src/store/chat/slices/message/action.ts +102 -14
  361. package/src/store/chat/slices/message/reducer.test.ts +363 -5
  362. package/src/store/chat/slices/message/reducer.ts +87 -3
  363. package/src/store/chat/slices/message/{selectors.test.ts → selectors/chat.test.ts} +266 -30
  364. package/src/store/chat/slices/message/{selectors.ts → selectors/chat.ts} +29 -79
  365. package/src/store/chat/slices/message/selectors/index.ts +2 -0
  366. package/src/store/chat/slices/message/selectors/messageState.test.ts +36 -0
  367. package/src/store/chat/slices/message/selectors/messageState.ts +80 -0
  368. package/src/store/chat/slices/plugin/action.test.ts +34 -132
  369. package/src/store/chat/slices/plugin/action.ts +1 -44
  370. package/src/store/global/store.ts +1 -7
  371. package/src/store/tool/selectors/tool.test.ts +1 -1
  372. package/src/store/tool/selectors/tool.ts +6 -8
  373. package/src/store/tool/slices/builtin/action.test.ts +83 -35
  374. package/src/store/tool/slices/builtin/action.ts +0 -9
  375. package/src/store/tool/slices/builtin/selectors.test.ts +4 -30
  376. package/src/store/tool/slices/builtin/selectors.ts +15 -21
  377. package/src/store/user/initialState.ts +1 -7
  378. package/src/store/user/selectors.ts +1 -5
  379. package/src/store/user/slices/common/action.test.ts +1 -4
  380. package/src/store/user/slices/common/action.ts +5 -4
  381. package/src/store/user/slices/settings/selectors/index.ts +1 -0
  382. package/src/store/user/slices/settings/selectors/keyVaults.ts +21 -0
  383. package/src/store/user/store.ts +0 -3
  384. package/src/tools/index.ts +0 -6
  385. package/src/tools/renders.ts +0 -3
  386. package/src/tools/web-browsing/Portal/Search/Footer.tsx +2 -2
  387. package/src/tools/web-browsing/Render/Search/ConfigForm/Form.tsx +1 -1
  388. package/tsconfig.json +9 -3
  389. package/packages/const/src/guide.ts +0 -89
  390. package/packages/context-engine/src/providers/InboxGuide.ts +0 -102
  391. package/packages/context-engine/src/providers/__tests__/InboxGuideProvider.test.ts +0 -121
  392. package/packages/utils/src/_deprecated/__snapshots__/parseModels.test.ts.snap +0 -104
  393. package/packages/utils/src/_deprecated/parseModels.test.ts +0 -287
  394. package/packages/utils/src/_deprecated/parseModels.ts +0 -165
  395. package/src/app/(backend)/trpc/edge/[trpc]/route.ts +0 -26
  396. package/src/app/[variants]/(main)/(mobile)/me/data/features/Category.tsx +0 -48
  397. package/src/app/[variants]/(main)/(mobile)/me/data/features/Header.tsx +0 -33
  398. package/src/app/[variants]/(main)/(mobile)/me/data/layout.tsx +0 -13
  399. package/src/app/[variants]/(main)/(mobile)/me/data/loading.tsx +0 -5
  400. package/src/app/[variants]/(main)/(mobile)/me/data/page.tsx +0 -29
  401. package/src/app/[variants]/(main)/chat/features/Migration/DBReader.ts +0 -290
  402. package/src/app/[variants]/(main)/chat/features/Migration/ExportConfigButton.tsx +0 -35
  403. package/src/app/[variants]/(main)/chat/features/Migration/Failed.tsx +0 -120
  404. package/src/app/[variants]/(main)/chat/features/Migration/Modal.tsx +0 -81
  405. package/src/app/[variants]/(main)/chat/features/Migration/Start.tsx +0 -108
  406. package/src/app/[variants]/(main)/chat/features/Migration/UpgradeButton.tsx +0 -71
  407. package/src/app/[variants]/(main)/chat/features/Migration/const.ts +0 -15
  408. package/src/app/[variants]/(main)/chat/features/Migration/index.tsx +0 -50
  409. package/src/app/[variants]/(main)/settings/llm/ProviderList/Azure/index.tsx +0 -93
  410. package/src/app/[variants]/(main)/settings/llm/ProviderList/Bedrock/index.tsx +0 -70
  411. package/src/app/[variants]/(main)/settings/llm/ProviderList/Cloudflare/index.tsx +0 -39
  412. package/src/app/[variants]/(main)/settings/llm/ProviderList/Github/index.tsx +0 -52
  413. package/src/app/[variants]/(main)/settings/llm/ProviderList/HuggingFace/index.tsx +0 -52
  414. package/src/app/[variants]/(main)/settings/llm/ProviderList/Ollama/index.tsx +0 -20
  415. package/src/app/[variants]/(main)/settings/llm/ProviderList/OpenAI/index.tsx +0 -17
  416. package/src/app/[variants]/(main)/settings/llm/ProviderList/providers.tsx +0 -132
  417. package/src/app/[variants]/(main)/settings/llm/components/Checker.tsx +0 -118
  418. package/src/app/[variants]/(main)/settings/llm/components/ProviderConfig/index.tsx +0 -303
  419. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/CustomModelOption.tsx +0 -98
  420. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/ModelConfigModal/Form.tsx +0 -104
  421. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/ModelConfigModal/index.tsx +0 -77
  422. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/ModelFetcher.tsx +0 -105
  423. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/Option.tsx +0 -68
  424. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/index.tsx +0 -146
  425. package/src/app/[variants]/(main)/settings/llm/const.ts +0 -20
  426. package/src/app/[variants]/(main)/settings/llm/features/Footer.tsx +0 -35
  427. package/src/app/[variants]/(main)/settings/llm/index.tsx +0 -30
  428. package/src/app/[variants]/(main)/settings/llm/type.ts +0 -5
  429. package/src/app/[variants]/loading/Client/Content.tsx +0 -48
  430. package/src/app/[variants]/loading/Client/Error.tsx +0 -27
  431. package/src/app/[variants]/loading/Client/Redirect.tsx +0 -47
  432. package/src/app/[variants]/loading/Client/index.tsx +0 -22
  433. package/src/components/InnerLink.tsx +0 -20
  434. package/src/database/_deprecated/core/__tests__/db-upgrade.test.ts +0 -42
  435. package/src/database/_deprecated/core/__tests__/db.test.ts +0 -79
  436. package/src/database/_deprecated/core/__tests__/model.test.ts +0 -55
  437. package/src/database/_deprecated/core/db.ts +0 -246
  438. package/src/database/_deprecated/core/index.ts +0 -2
  439. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/fixtures/input.json +0 -55
  440. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/fixtures/output.json +0 -60
  441. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/index.test.ts +0 -14
  442. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/index.ts +0 -22
  443. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/type.ts +0 -105
  444. package/src/database/_deprecated/core/model.ts +0 -218
  445. package/src/database/_deprecated/core/schemas.ts +0 -88
  446. package/src/database/_deprecated/core/types/db.ts +0 -15
  447. package/src/database/_deprecated/models/__DEBUG.ts +0 -124
  448. package/src/database/_deprecated/models/__tests__/file.test.ts +0 -83
  449. package/src/database/_deprecated/models/__tests__/message.test.ts +0 -426
  450. package/src/database/_deprecated/models/__tests__/plugin.test.ts +0 -81
  451. package/src/database/_deprecated/models/__tests__/session.test.ts +0 -253
  452. package/src/database/_deprecated/models/__tests__/sessionGroup.test.ts +0 -220
  453. package/src/database/_deprecated/models/__tests__/topic.test.ts +0 -523
  454. package/src/database/_deprecated/models/__tests__/user.test.ts +0 -82
  455. package/src/database/_deprecated/models/file.ts +0 -51
  456. package/src/database/_deprecated/models/message.ts +0 -277
  457. package/src/database/_deprecated/models/plugin.ts +0 -62
  458. package/src/database/_deprecated/models/session.ts +0 -271
  459. package/src/database/_deprecated/models/sessionGroup.ts +0 -93
  460. package/src/database/_deprecated/models/topic.ts +0 -250
  461. package/src/database/_deprecated/models/user.ts +0 -69
  462. package/src/database/_deprecated/schemas/files.ts +0 -39
  463. package/src/database/_deprecated/schemas/message.ts +0 -50
  464. package/src/database/_deprecated/schemas/plugin.ts +0 -12
  465. package/src/database/_deprecated/schemas/session.ts +0 -54
  466. package/src/database/_deprecated/schemas/sessionGroup.ts +0 -8
  467. package/src/database/_deprecated/schemas/topic.ts +0 -12
  468. package/src/database/_deprecated/schemas/user.ts +0 -40
  469. package/src/envs/__tests__/auth.test.ts +0 -200
  470. package/src/features/DataImporter/_deprecated.ts +0 -43
  471. package/src/features/InitClientDB/EnableModal.tsx +0 -118
  472. package/src/features/InitClientDB/ErrorResult.tsx +0 -143
  473. package/src/features/InitClientDB/InitIndicator.tsx +0 -124
  474. package/src/features/InitClientDB/PGliteIcon.tsx +0 -28
  475. package/src/features/InitClientDB/features/DatabaseRepair/Backup.tsx +0 -75
  476. package/src/features/InitClientDB/features/DatabaseRepair/Diagnosis.tsx +0 -98
  477. package/src/features/InitClientDB/features/DatabaseRepair/Repair.tsx +0 -218
  478. package/src/features/InitClientDB/features/DatabaseRepair/index.tsx +0 -91
  479. package/src/features/InitClientDB/index.tsx +0 -37
  480. package/src/hooks/_header.ts +0 -23
  481. package/src/libs/next-auth/sso-providers/azure-ad.ts +0 -33
  482. package/src/libs/trpc/client/edge.ts +0 -26
  483. package/src/libs/trpc/edge/context.ts +0 -71
  484. package/src/libs/trpc/edge/index.ts +0 -45
  485. package/src/libs/trpc/edge/init.ts +0 -26
  486. package/src/libs/trpc/edge/middleware/jwtPayload.test.ts +0 -75
  487. package/src/libs/trpc/edge/middleware/jwtPayload.ts +0 -14
  488. package/src/migrations/FromV0ToV1.ts +0 -10
  489. package/src/migrations/FromV1ToV2/fixtures/input-v1-session.json +0 -191
  490. package/src/migrations/FromV1ToV2/fixtures/output-v2.json +0 -202
  491. package/src/migrations/FromV1ToV2/index.ts +0 -82
  492. package/src/migrations/FromV1ToV2/migrations.test.ts +0 -224
  493. package/src/migrations/FromV1ToV2/types/v1.ts +0 -78
  494. package/src/migrations/FromV1ToV2/types/v2.ts +0 -52
  495. package/src/migrations/FromV2ToV3/fixtures/input-v2-session.json +0 -72
  496. package/src/migrations/FromV2ToV3/fixtures/output-v3-from-v1.json +0 -203
  497. package/src/migrations/FromV2ToV3/fixtures/output-v3.json +0 -74
  498. package/src/migrations/FromV2ToV3/index.ts +0 -30
  499. package/src/migrations/FromV2ToV3/migrations.test.ts +0 -42
  500. package/src/migrations/FromV2ToV3/types/v3.ts +0 -27
  501. package/src/migrations/FromV3ToV4/fixtures/azure-input-v3.json +0 -79
  502. package/src/migrations/FromV3ToV4/fixtures/azure-output-v4.json +0 -75
  503. package/src/migrations/FromV3ToV4/fixtures/ollama-input-v3.json +0 -85
  504. package/src/migrations/FromV3ToV4/fixtures/ollama-output-v4.json +0 -86
  505. package/src/migrations/FromV3ToV4/fixtures/openai-input-v3.json +0 -77
  506. package/src/migrations/FromV3ToV4/fixtures/openai-output-v4.json +0 -77
  507. package/src/migrations/FromV3ToV4/fixtures/openrouter-input-v3.json +0 -82
  508. package/src/migrations/FromV3ToV4/fixtures/openrouter-output-v4.json +0 -85
  509. package/src/migrations/FromV3ToV4/fixtures/output-v4-from-v1.json +0 -203
  510. package/src/migrations/FromV3ToV4/index.ts +0 -102
  511. package/src/migrations/FromV3ToV4/migrations.test.ts +0 -195
  512. package/src/migrations/FromV3ToV4/types/v3.ts +0 -52
  513. package/src/migrations/FromV3ToV4/types/v4.ts +0 -37
  514. package/src/migrations/FromV4ToV5/fixtures/from-v1-to-v5-output.json +0 -245
  515. package/src/migrations/FromV4ToV5/fixtures/function-input-v4.json +0 -96
  516. package/src/migrations/FromV4ToV5/fixtures/function-output-v5.json +0 -120
  517. package/src/migrations/FromV4ToV5/index.ts +0 -58
  518. package/src/migrations/FromV4ToV5/migrations.test.ts +0 -49
  519. package/src/migrations/FromV4ToV5/types/v4.ts +0 -21
  520. package/src/migrations/FromV4ToV5/types/v5.ts +0 -27
  521. package/src/migrations/FromV5ToV6/fixtures/from-v1-to-v6-output.json +0 -247
  522. package/src/migrations/FromV5ToV6/fixtures/session-input-v5.json +0 -81
  523. package/src/migrations/FromV5ToV6/fixtures/session-output-v6.json +0 -85
  524. package/src/migrations/FromV5ToV6/index.ts +0 -61
  525. package/src/migrations/FromV5ToV6/migrations.test.ts +0 -50
  526. package/src/migrations/FromV5ToV6/types/v5.ts +0 -48
  527. package/src/migrations/FromV5ToV6/types/v6.ts +0 -63
  528. package/src/migrations/FromV6ToV7/fixtures/output-v7-from-v1.json +0 -203
  529. package/src/migrations/FromV6ToV7/fixtures/provider-input-v6.json +0 -103
  530. package/src/migrations/FromV6ToV7/fixtures/provider-output-v7.json +0 -118
  531. package/src/migrations/FromV6ToV7/index.ts +0 -101
  532. package/src/migrations/FromV6ToV7/migrations.test.ts +0 -64
  533. package/src/migrations/FromV6ToV7/types/v6.ts +0 -61
  534. package/src/migrations/FromV6ToV7/types/v7.ts +0 -69
  535. package/src/migrations/VersionController.test.ts +0 -88
  536. package/src/migrations/VersionController.ts +0 -67
  537. package/src/migrations/index.ts +0 -61
  538. package/src/server/globalConfig/_deprecated.test.ts +0 -92
  539. package/src/server/globalConfig/_deprecated.ts +0 -41
  540. package/src/server/routers/edge/appStatus.ts +0 -3
  541. package/src/server/routers/edge/index.ts +0 -14
  542. package/src/server/routers/edge/upload.ts +0 -16
  543. package/src/services/aiModel/client.ts +0 -70
  544. package/src/services/aiProvider/client.ts +0 -58
  545. package/src/services/baseClientService/index.ts +0 -9
  546. package/src/services/chat/__snapshots__/chat.test.ts.snap +0 -110
  547. package/src/services/chatGroup/client.ts +0 -63
  548. package/src/services/export/_deprecated.ts +0 -155
  549. package/src/services/export/client.ts +0 -15
  550. package/src/services/file/_deprecated.test.ts +0 -119
  551. package/src/services/file/_deprecated.ts +0 -80
  552. package/src/services/file/client.test.ts +0 -199
  553. package/src/services/file/client.ts +0 -85
  554. package/src/services/import/_deprecated.ts +0 -115
  555. package/src/services/import/client.test.ts +0 -1015
  556. package/src/services/import/client.ts +0 -64
  557. package/src/services/message/_deprecated.test.ts +0 -398
  558. package/src/services/message/_deprecated.ts +0 -168
  559. package/src/services/message/client.test.ts +0 -410
  560. package/src/services/message/client.ts +0 -186
  561. package/src/services/plugin/_deprecated.test.ts +0 -162
  562. package/src/services/plugin/_deprecated.ts +0 -42
  563. package/src/services/plugin/client.test.ts +0 -177
  564. package/src/services/plugin/client.ts +0 -46
  565. package/src/services/session/_deprecated.test.ts +0 -440
  566. package/src/services/session/_deprecated.ts +0 -190
  567. package/src/services/session/client.test.ts +0 -413
  568. package/src/services/session/client.ts +0 -193
  569. package/src/services/thread/client.ts +0 -51
  570. package/src/services/topic/_deprecated.test.ts +0 -245
  571. package/src/services/topic/_deprecated.ts +0 -75
  572. package/src/services/topic/client.ts +0 -89
  573. package/src/services/topic/pglite.test.ts +0 -212
  574. package/src/services/user/_deprecated.test.ts +0 -101
  575. package/src/services/user/_deprecated.ts +0 -70
  576. package/src/services/user/client.test.ts +0 -108
  577. package/src/services/user/client.ts +0 -104
  578. package/src/store/chat/slices/builtinTool/actions/__tests__/dalle.test.ts +0 -121
  579. package/src/store/chat/slices/builtinTool/actions/dalle.ts +0 -124
  580. package/src/store/global/actions/clientDb.ts +0 -67
  581. package/src/store/user/slices/modelList/__snapshots__/action.test.ts.snap +0 -12
  582. package/src/store/user/slices/modelList/action.test.ts +0 -359
  583. package/src/store/user/slices/modelList/action.ts +0 -223
  584. package/src/store/user/slices/modelList/initialState.ts +0 -15
  585. package/src/store/user/slices/modelList/reducers/customModelCard.test.ts +0 -204
  586. package/src/store/user/slices/modelList/reducers/customModelCard.ts +0 -64
  587. package/src/store/user/slices/modelList/selectors/index.ts +0 -3
  588. package/src/store/user/slices/modelList/selectors/keyVaults.test.ts +0 -201
  589. package/src/store/user/slices/modelList/selectors/keyVaults.ts +0 -50
  590. package/src/store/user/slices/modelList/selectors/modelConfig.test.ts +0 -219
  591. package/src/store/user/slices/modelList/selectors/modelConfig.ts +0 -95
  592. package/src/store/user/slices/modelList/selectors/modelProvider.test.ts +0 -138
  593. package/src/store/user/slices/modelList/selectors/modelProvider.ts +0 -170
  594. package/src/tools/dalle/Render/GalleyGrid.tsx +0 -60
  595. package/src/tools/dalle/Render/Item/EditMode.tsx +0 -66
  596. package/src/tools/dalle/Render/Item/Error.tsx +0 -49
  597. package/src/tools/dalle/Render/Item/Image.tsx +0 -44
  598. package/src/tools/dalle/Render/Item/ImageFileItem.tsx +0 -57
  599. package/src/tools/dalle/Render/Item/index.tsx +0 -88
  600. package/src/tools/dalle/Render/ToolBar.tsx +0 -56
  601. package/src/tools/dalle/Render/index.tsx +0 -52
  602. package/src/tools/dalle/index.ts +0 -92
  603. /package/src/{middleware.ts → proxy.ts} +0 -0
@@ -1,64 +0,0 @@
1
- import { clientDB } from '@/database/client/db';
2
- import { DataImporterRepos } from '@/database/repositories/dataImporter';
3
- import { BaseClientService } from '@/services/baseClientService';
4
- import { useUserStore } from '@/store/user';
5
- import { ImportStage } from '@/types/importer';
6
-
7
- import { IImportService } from './type';
8
-
9
- export class ClientService extends BaseClientService implements IImportService {
10
- private get dataImporter(): DataImporterRepos {
11
- return new DataImporterRepos(clientDB as any, this.userId);
12
- }
13
-
14
- importSettings: IImportService['importSettings'] = async (settings) => {
15
- await useUserStore.getState().importAppSettings(settings);
16
- };
17
-
18
- importData: IImportService['importData'] = async (data, callbacks) => {
19
- callbacks?.onStageChange?.(ImportStage.Importing);
20
- const time = Date.now();
21
- try {
22
- const result = await this.dataImporter.importData(data);
23
- const duration = Date.now() - time;
24
-
25
- callbacks?.onStageChange?.(ImportStage.Success);
26
- callbacks?.onSuccess?.(result.results, duration);
27
- } catch (e) {
28
- console.error(e);
29
- callbacks?.onStageChange?.(ImportStage.Error);
30
- const error = e as Error;
31
-
32
- callbacks?.onError?.({ code: 'ImportError', httpStatus: 0, message: error.message });
33
- }
34
- };
35
-
36
- importPgData: IImportService['importPgData'] = async (
37
- data,
38
- { callbacks, overwriteExisting } = {},
39
- ) => {
40
- callbacks?.onStageChange?.(ImportStage.Importing);
41
- const time = Date.now();
42
- try {
43
- const result = await this.dataImporter.importPgData(
44
- data,
45
- overwriteExisting ? 'override' : 'skip',
46
- );
47
-
48
- const duration = Date.now() - time;
49
-
50
- callbacks?.onStageChange?.(ImportStage.Success);
51
- if (result.success) {
52
- callbacks?.onSuccess?.(result.results, duration);
53
- } else {
54
- callbacks?.onError?.({ code: 'ImportError', httpStatus: 0, message: result.error.message });
55
- }
56
- } catch (e) {
57
- console.error(e);
58
- callbacks?.onStageChange?.(ImportStage.Error);
59
- const error = e as Error;
60
-
61
- callbacks?.onError?.({ code: 'ImportError', httpStatus: 0, message: error.message });
62
- }
63
- };
64
- }
@@ -1,398 +0,0 @@
1
- import {
2
- ChatMessageError,
3
- ChatPluginPayload,
4
- ChatTTS,
5
- ChatTranslate,
6
- UIChatMessage,
7
- } from '@lobechat/types';
8
- import dayjs from 'dayjs';
9
- import { Mock, describe, expect, it, vi } from 'vitest';
10
-
11
- import { CreateMessageParams, MessageModel } from '@/database/_deprecated/models/message';
12
-
13
- import { ClientService } from './_deprecated';
14
-
15
- const messageService = new ClientService();
16
-
17
- // Mock the MessageModel
18
- vi.mock('@/database/_deprecated/models/message', () => {
19
- return {
20
- MessageModel: {
21
- create: vi.fn(),
22
- batchCreate: vi.fn(),
23
- count: vi.fn(),
24
- query: vi.fn(),
25
- delete: vi.fn(),
26
- bulkDelete: vi.fn(),
27
- queryBySessionId: vi.fn(),
28
- update: vi.fn(),
29
- updatePlugin: vi.fn(),
30
- batchDelete: vi.fn(),
31
- clearTable: vi.fn(),
32
- batchUpdate: vi.fn(),
33
- queryAll: vi.fn(),
34
- updatePluginState: vi.fn(),
35
- },
36
- };
37
- });
38
-
39
- describe('MessageClientService', () => {
40
- // Mock data
41
- const mockMessageId = 'mock-message-id';
42
- const mockMessage = {
43
- id: mockMessageId,
44
- content: 'Mock message content',
45
- sessionId: 'mock-session-id',
46
- createdAt: 100,
47
- updatedAt: 100,
48
- role: 'user',
49
- // ... other properties
50
- } as UIChatMessage;
51
- const mockMessages = [mockMessage];
52
-
53
- beforeEach(() => {
54
- // Reset all mocks before running each test case
55
- vi.resetAllMocks();
56
- });
57
-
58
- describe('create', () => {
59
- it('should create a message and return its id', async () => {
60
- // Setup
61
- const createParams = {
62
- content: 'New message content',
63
- sessionId: '1',
64
- // ... other properties
65
- } as CreateMessageParams;
66
- (MessageModel.create as Mock).mockResolvedValue({ id: mockMessageId });
67
-
68
- // Execute
69
- const messageId = await messageService.createMessage(createParams);
70
-
71
- // Assert
72
- expect(MessageModel.create).toHaveBeenCalledWith(createParams);
73
- expect(messageId).toBe(mockMessageId);
74
- });
75
- });
76
-
77
- describe('batchCreate', () => {
78
- it('should batch create messages', async () => {
79
- // Setup
80
- (MessageModel.batchCreate as Mock).mockResolvedValue(mockMessages);
81
-
82
- // Execute
83
- const result = await messageService.batchCreateMessages(mockMessages);
84
-
85
- // Assert
86
- expect(MessageModel.batchCreate).toHaveBeenCalledWith(mockMessages);
87
- expect(result).toBe(mockMessages);
88
- });
89
- });
90
-
91
- describe('removeMessage', () => {
92
- it('should remove a message by id', async () => {
93
- // Setup
94
- (MessageModel.delete as Mock).mockResolvedValue(true);
95
-
96
- // Execute
97
- const result = await messageService.removeMessage(mockMessageId);
98
-
99
- // Assert
100
- expect(MessageModel.delete).toHaveBeenCalledWith(mockMessageId);
101
- expect(result).toBe(true);
102
- });
103
- });
104
- describe('removeMessages', () => {
105
- it('should remove a message by id', async () => {
106
- // Setup
107
- (MessageModel.bulkDelete as Mock).mockResolvedValue(true);
108
-
109
- // Execute
110
- const result = await messageService.removeMessages([mockMessageId]);
111
-
112
- // Assert
113
- expect(MessageModel.bulkDelete).toHaveBeenCalledWith([mockMessageId]);
114
- expect(result).toBe(true);
115
- });
116
- });
117
-
118
- describe('getMessages', () => {
119
- it('should retrieve messages by sessionId and topicId', async () => {
120
- // Setup
121
- const sessionId = 'session-id';
122
- const topicId = 'topic-id';
123
- (MessageModel.query as Mock).mockResolvedValue(mockMessages);
124
-
125
- // Execute
126
- const messages = await messageService.getMessages(sessionId, topicId);
127
-
128
- // Assert
129
- expect(MessageModel.query).toHaveBeenCalledWith({ sessionId, topicId });
130
- expect(messages).toEqual(mockMessages.map((i) => ({ ...i, imageList: [] })));
131
- });
132
- });
133
-
134
- describe('getAllMessagesInSession', () => {
135
- it('should retrieve all messages in a session', async () => {
136
- // Setup
137
- const sessionId = 'session-id';
138
- (MessageModel.queryBySessionId as Mock).mockResolvedValue(mockMessages);
139
-
140
- // Execute
141
- const messages = await messageService.getAllMessagesInSession(sessionId);
142
-
143
- // Assert
144
- expect(MessageModel.queryBySessionId).toHaveBeenCalledWith(sessionId);
145
- expect(messages).toBe(mockMessages);
146
- });
147
- });
148
-
149
- describe('removeMessagesByAssistant', () => {
150
- it('should batch remove messages by assistantId and topicId', async () => {
151
- // Setup
152
- const assistantId = 'assistant-id';
153
- const topicId = 'topic-id';
154
- (MessageModel.batchDelete as Mock).mockResolvedValue(true);
155
-
156
- // Execute
157
- const result = await messageService.removeMessagesByAssistant(assistantId, topicId);
158
-
159
- // Assert
160
- expect(MessageModel.batchDelete).toHaveBeenCalledWith(assistantId, topicId);
161
- expect(result).toBe(true);
162
- });
163
- });
164
-
165
- describe('clearAllMessage', () => {
166
- it('should clear all messages from the table', async () => {
167
- // Setup
168
- (MessageModel.clearTable as Mock).mockResolvedValue(true);
169
-
170
- // Execute
171
- const result = await messageService.removeAllMessages();
172
-
173
- // Assert
174
- expect(MessageModel.clearTable).toHaveBeenCalled();
175
- expect(result).toBe(true);
176
- });
177
- });
178
-
179
- describe('bindMessagesToTopic', () => {
180
- it('should batch update messages to bind them to a topic', async () => {
181
- // Setup
182
- const topicId = 'topic-id';
183
- const messageIds = [mockMessageId];
184
- (MessageModel.batchUpdate as Mock).mockResolvedValue(mockMessages);
185
-
186
- // Execute
187
- const result = await messageService.bindMessagesToTopic(topicId, messageIds);
188
-
189
- // Assert
190
- expect(MessageModel.batchUpdate).toHaveBeenCalledWith(messageIds, { topicId });
191
- expect(result).toBe(mockMessages);
192
- });
193
- });
194
-
195
- describe('getAllMessages', () => {
196
- it('should retrieve all messages', async () => {
197
- // Setup
198
- (MessageModel.queryAll as Mock).mockResolvedValue(mockMessages);
199
-
200
- // Execute
201
- const messages = await messageService.getAllMessages();
202
-
203
- // Assert
204
- expect(MessageModel.queryAll).toHaveBeenCalled();
205
- expect(messages).toBe(mockMessages);
206
- });
207
- });
208
-
209
- describe('updateMessageError', () => {
210
- it('should update the error field of a message', async () => {
211
- // Setup
212
- const newError = {
213
- type: 'InvalidProviderAPIKey',
214
- message: 'Error occurred',
215
- } as ChatMessageError;
216
- (MessageModel.update as Mock).mockResolvedValue({ ...mockMessage, error: newError });
217
-
218
- // Execute
219
- const result = await messageService.updateMessageError(mockMessageId, newError);
220
-
221
- // Assert
222
- expect(MessageModel.update).toHaveBeenCalledWith(mockMessageId, { error: newError });
223
- expect(result).toEqual({ ...mockMessage, error: newError });
224
- });
225
- });
226
-
227
- // describe('updateMessagePlugin', () => {
228
- // it('should update the plugin payload of a message', async () => {
229
- // // Setup
230
- // const newPlugin = {
231
- // type: 'default',
232
- // apiName: 'abc',
233
- // arguments: '',
234
- // identifier: 'plugin1',
235
- // } as ChatPluginPayload;
236
- //
237
- // (MessageModel.update as Mock).mockResolvedValue({ ...mockMessage, plugin: newPlugin });
238
- //
239
- // // Execute
240
- // const result = await messageService.updateMessagePlugin(mockMessageId, newPlugin);
241
- //
242
- // // Assert
243
- // expect(MessageModel.update).toHaveBeenCalledWith(mockMessageId, { plugin: newPlugin });
244
- // expect(result).toEqual({ ...mockMessage, plugin: newPlugin });
245
- // });
246
- // });
247
-
248
- describe('updateMessagePluginState', () => {
249
- it('should update the plugin state of a message', async () => {
250
- // Setup
251
- const key = 'stateKey';
252
- const value = 'stateValue';
253
- const newPluginState = { [key]: value };
254
- (MessageModel.updatePluginState as Mock).mockResolvedValue({
255
- ...mockMessage,
256
- pluginState: newPluginState,
257
- });
258
-
259
- // Execute
260
- const result = await messageService.updateMessagePluginState(mockMessageId, { key: value });
261
-
262
- // Assert
263
- expect(MessageModel.updatePluginState).toHaveBeenCalledWith(mockMessageId, { key: value });
264
- expect(result).toEqual({ ...mockMessage, pluginState: newPluginState });
265
- });
266
- });
267
-
268
- describe('updateMessagePluginArguments', () => {
269
- it('should update the plugin arguments object of a message', async () => {
270
- // Setup
271
- const key = 'stateKey';
272
- const value = 'stateValue';
273
- (MessageModel.updatePlugin as Mock).mockResolvedValue({});
274
-
275
- // Execute
276
- await messageService.updateMessagePluginArguments(mockMessageId, { key: value });
277
-
278
- // Assert
279
- expect(MessageModel.updatePlugin).toHaveBeenCalledWith(mockMessageId, {
280
- arguments: '{"key":"stateValue"}',
281
- });
282
- });
283
- it('should update the plugin arguments string of a message', async () => {
284
- // Setup
285
- const key = 'stateKey';
286
- const value = 'stateValue';
287
- (MessageModel.updatePlugin as Mock).mockResolvedValue({});
288
-
289
- // Execute
290
- await messageService.updateMessagePluginArguments(
291
- mockMessageId,
292
- JSON.stringify({ key: value }),
293
- );
294
-
295
- // Assert
296
- expect(MessageModel.updatePlugin).toHaveBeenCalledWith(mockMessageId, {
297
- arguments: '{"key":"stateValue"}',
298
- });
299
- });
300
- });
301
-
302
- describe('countMessages', () => {
303
- it('should count the total number of messages', async () => {
304
- // Setup
305
- const mockCount = 10;
306
- (MessageModel.count as Mock).mockResolvedValue(mockCount);
307
-
308
- // Execute
309
- const count = await messageService.countMessages();
310
-
311
- // Assert
312
- expect(MessageModel.count).toHaveBeenCalled();
313
- expect(count).toBe(mockCount);
314
- });
315
- });
316
-
317
- describe('countTodayMessages', () => {
318
- it('should count the number of messages created today', async () => {
319
- // Setup
320
- const today = dayjs().format('YYYY-MM-DD');
321
- const mockMessages = [
322
- { ...mockMessage, createdAt: today },
323
- { ...mockMessage, createdAt: today },
324
- { ...mockMessage, createdAt: '2023-01-01' },
325
- ];
326
- (MessageModel.queryAll as Mock).mockResolvedValue(mockMessages);
327
-
328
- // Execute
329
- const count = await messageService.countTodayMessages();
330
-
331
- // Assert
332
- expect(MessageModel.queryAll).toHaveBeenCalled();
333
- expect(count).toBe(2);
334
- });
335
- });
336
-
337
- describe('updateMessageTTS', () => {
338
- it('should update the TTS field of a message', async () => {
339
- // Setup
340
- const newTTS: ChatTTS = {
341
- contentMd5: 'abc',
342
- file: 'file-abc',
343
- };
344
-
345
- (MessageModel.update as Mock).mockResolvedValue({ ...mockMessage, tts: newTTS });
346
-
347
- // Execute
348
- const result = await messageService.updateMessageTTS(mockMessageId, newTTS);
349
-
350
- // Assert
351
- expect(MessageModel.update).toHaveBeenCalledWith(mockMessageId, { tts: newTTS });
352
- expect(result).toEqual({ ...mockMessage, tts: newTTS });
353
- });
354
- });
355
-
356
- describe('updateMessageTranslate', () => {
357
- it('should update the translate field of a message', async () => {
358
- // Setup
359
- const newTranslate: ChatTranslate = {
360
- content: 'Translated text',
361
- to: 'es',
362
- };
363
-
364
- (MessageModel.update as Mock).mockResolvedValue({ ...mockMessage, translate: newTranslate });
365
-
366
- // Execute
367
- const result = await messageService.updateMessageTranslate(mockMessageId, newTranslate);
368
-
369
- // Assert
370
- expect(MessageModel.update).toHaveBeenCalledWith(mockMessageId, { translate: newTranslate });
371
- expect(result).toEqual({ ...mockMessage, translate: newTranslate });
372
- });
373
- });
374
-
375
- describe('hasMessages', () => {
376
- it('should return true if there are messages', async () => {
377
- // Setup
378
- (MessageModel.count as Mock).mockResolvedValue(1);
379
-
380
- // Execute
381
- const result = await messageService.hasMessages();
382
-
383
- // Assert
384
- expect(result).toBe(true);
385
- });
386
-
387
- it('should return false if there are no messages', async () => {
388
- // Setup
389
- (MessageModel.count as Mock).mockResolvedValue(0);
390
-
391
- // Execute
392
- const result = await messageService.hasMessages();
393
-
394
- // Assert
395
- expect(result).toBe(false);
396
- });
397
- });
398
- });
@@ -1,168 +0,0 @@
1
- import {
2
- ChatFileItem,
3
- ChatMessageError,
4
- ChatTTS,
5
- ChatTranslate,
6
- CreateMessageParams,
7
- CreateNewMessageParams,
8
- ModelRankItem,
9
- UIChatMessage,
10
- } from '@lobechat/types';
11
- import dayjs from 'dayjs';
12
-
13
- import { FileModel } from '@/database/_deprecated/models/file';
14
- import { MessageModel } from '@/database/_deprecated/models/message';
15
- import { DB_Message } from '@/database/_deprecated/schemas/message';
16
-
17
- import { IMessageService } from './type';
18
-
19
- export class ClientService implements IMessageService {
20
- async createMessage(data: CreateMessageParams) {
21
- const { id } = await MessageModel.create(data);
22
-
23
- return id;
24
- }
25
-
26
- async createNewMessage(data: CreateNewMessageParams) {
27
- const { id } = await MessageModel.create(data as any);
28
- const messages = await this.getMessages(data.sessionId, data.topicId);
29
-
30
- return { id, messages };
31
- }
32
-
33
- // @ts-ignore
34
- async batchCreateMessages(messages: UIChatMessage[]) {
35
- return MessageModel.batchCreate(messages);
36
- }
37
-
38
- async getMessages(sessionId: string, topicId?: string): Promise<UIChatMessage[]> {
39
- const messages = await MessageModel.query({ sessionId, topicId });
40
-
41
- const fileList = (await Promise.all(
42
- messages
43
- .flatMap((item) => item.files)
44
- .filter(Boolean)
45
- .map(async (id) => FileModel.findById(id!)),
46
- )) as ChatFileItem[];
47
-
48
- return messages.map((item) => ({
49
- ...item,
50
- imageList: fileList
51
- .filter((file) => item.files?.includes(file.id) && file.fileType.startsWith('image'))
52
- .map((file) => ({
53
- alt: file.name,
54
- id: file.id,
55
- url: file.url,
56
- })),
57
- }));
58
- }
59
-
60
- async getGroupMessages(groupId: string, topicId?: string): Promise<UIChatMessage[]> {
61
- // For the deprecated service, group messages are the same as regular messages
62
- // since the old schema doesn't differentiate between session and group messages
63
- return this.getMessages(groupId, topicId);
64
- }
65
-
66
- async getAllMessages() {
67
- return MessageModel.queryAll();
68
- }
69
-
70
- async countMessages() {
71
- return MessageModel.count();
72
- }
73
-
74
- // @ts-ignore
75
- async rankModels(): Promise<ModelRankItem[]> {
76
- throw new Error('Method not implemented.');
77
- }
78
-
79
- // @ts-ignore
80
- async countWords(): Promise<number> {
81
- throw new Error('Method not implemented.');
82
- }
83
-
84
- // @ts-ignore
85
- async getHeatmaps() {
86
- throw new Error('Method not implemented.');
87
- }
88
-
89
- async countTodayMessages() {
90
- const topics = await MessageModel.queryAll();
91
- return topics.filter(
92
- (item) => dayjs(item.createdAt).format('YYYY-MM-DD') === dayjs().format('YYYY-MM-DD'),
93
- ).length;
94
- }
95
-
96
- async getAllMessagesInSession(sessionId: string) {
97
- return MessageModel.queryBySessionId(sessionId);
98
- }
99
-
100
- async updateMessageError(id: string, error: ChatMessageError) {
101
- return MessageModel.update(id, { error });
102
- }
103
-
104
- // @ts-ignore
105
- async updateMessage(id: string, message: Partial<DB_Message>) {
106
- return MessageModel.update(id, message);
107
- }
108
-
109
- async updateMessageTTS(id: string, tts: Partial<ChatTTS> | false) {
110
- return MessageModel.update(id, { tts });
111
- }
112
-
113
- async updateMessageTranslate(id: string, translate: Partial<ChatTranslate> | false) {
114
- return MessageModel.update(id, { translate });
115
- }
116
-
117
- async updateMessagePluginState(id: string, value: Record<string, any>) {
118
- return MessageModel.updatePluginState(id, value);
119
- }
120
-
121
- async updateMessagePluginArguments(id: string, value: string | Record<string, any>) {
122
- const args = typeof value === 'string' ? value : JSON.stringify(value);
123
-
124
- return MessageModel.updatePlugin(id, { arguments: args });
125
- }
126
-
127
- async bindMessagesToTopic(topicId: string, messageIds: string[]) {
128
- return MessageModel.batchUpdate(messageIds, { topicId });
129
- }
130
-
131
- async removeMessage(id: string) {
132
- return MessageModel.delete(id);
133
- }
134
-
135
- async removeMessages(ids: string[]) {
136
- return MessageModel.bulkDelete(ids);
137
- }
138
-
139
- async removeMessagesByAssistant(assistantId: string, topicId?: string) {
140
- return MessageModel.batchDelete(assistantId, topicId);
141
- }
142
-
143
- async removeMessagesByGroup(groupId: string, topicId?: string) {
144
- return MessageModel.batchDelete(groupId, topicId);
145
- }
146
-
147
- async removeAllMessages() {
148
- return MessageModel.clearTable();
149
- }
150
-
151
- async hasMessages() {
152
- const number = await this.countMessages();
153
- return number > 0;
154
- }
155
-
156
- async messageCountToCheckTrace() {
157
- const number = await this.countMessages();
158
- return number >= 4;
159
- }
160
-
161
- async updateMessagePluginError() {
162
- throw new Error('Method not implemented.');
163
- }
164
-
165
- async updateMessageRAG(): Promise<void> {
166
- throw new Error('Method not implemented.');
167
- }
168
- }