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

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 (591) 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/desktop-pr-build.yml +18 -16
  5. package/.github/workflows/docker.yml +25 -20
  6. package/.github/workflows/e2e.yml +17 -3
  7. package/.github/workflows/release-desktop-beta.yml +12 -12
  8. package/.github/workflows/release.yml +2 -4
  9. package/.github/workflows/test.yml +8 -10
  10. package/.nvmrc +1 -1
  11. package/CHANGELOG.md +459 -0
  12. package/Dockerfile +1 -3
  13. package/README.md +2 -45
  14. package/README.zh-CN.md +2 -45
  15. package/apps/desktop/src/main/utils/next-electron-rsc.ts +7 -5
  16. package/apps/desktop/tsconfig.json +0 -1
  17. package/changelog/v1.json +150 -0
  18. package/docs/development/database-schema.dbml +11 -1
  19. package/docs/self-hosting/advanced/auth/next-auth/auth0.mdx +2 -2
  20. package/docs/self-hosting/advanced/auth/next-auth/auth0.zh-CN.mdx +2 -2
  21. package/docs/self-hosting/advanced/auth/next-auth/authelia.mdx +2 -2
  22. package/docs/self-hosting/advanced/auth/next-auth/authelia.zh-CN.mdx +2 -2
  23. package/docs/self-hosting/advanced/auth/next-auth/authentik.mdx +2 -2
  24. package/docs/self-hosting/advanced/auth/next-auth/authentik.zh-CN.mdx +2 -2
  25. package/docs/self-hosting/advanced/auth/next-auth/casdoor.mdx +2 -2
  26. package/docs/self-hosting/advanced/auth/next-auth/casdoor.zh-CN.mdx +2 -2
  27. package/docs/self-hosting/advanced/auth/next-auth/cloudflare-zero-trust.mdx +2 -2
  28. package/docs/self-hosting/advanced/auth/next-auth/cloudflare-zero-trust.zh-CN.mdx +2 -2
  29. package/docs/self-hosting/advanced/auth/next-auth/github.mdx +2 -2
  30. package/docs/self-hosting/advanced/auth/next-auth/github.zh-CN.mdx +2 -2
  31. package/docs/self-hosting/advanced/auth/next-auth/google.mdx +32 -29
  32. package/docs/self-hosting/advanced/auth/next-auth/keycloak.mdx +2 -2
  33. package/docs/self-hosting/advanced/auth/next-auth/keycloak.zh-CN.mdx +2 -2
  34. package/docs/self-hosting/advanced/auth/next-auth/logto.mdx +5 -3
  35. package/docs/self-hosting/advanced/auth/next-auth/logto.zh-CN.mdx +5 -3
  36. package/docs/self-hosting/advanced/auth/next-auth/microsoft-entra-id.mdx +2 -2
  37. package/docs/self-hosting/advanced/auth/next-auth/microsoft-entra-id.zh-CN.mdx +2 -2
  38. package/docs/self-hosting/advanced/auth/next-auth/okta.mdx +2 -2
  39. package/docs/self-hosting/advanced/auth/next-auth/okta.zh-CN.mdx +2 -2
  40. package/docs/self-hosting/advanced/auth/next-auth/wechat.mdx +2 -2
  41. package/docs/self-hosting/advanced/auth/next-auth/wechat.zh-CN.mdx +2 -2
  42. package/docs/self-hosting/advanced/auth/next-auth/zitadel.mdx +2 -2
  43. package/docs/self-hosting/advanced/auth/next-auth/zitadel.zh-CN.mdx +2 -2
  44. package/docs/self-hosting/advanced/auth.mdx +32 -21
  45. package/docs/self-hosting/advanced/auth.zh-CN.mdx +30 -19
  46. package/docs/self-hosting/advanced/feature-flags.mdx +0 -1
  47. package/docs/self-hosting/advanced/feature-flags.zh-CN.mdx +0 -1
  48. package/docs/self-hosting/advanced/online-search.mdx +30 -25
  49. package/docs/self-hosting/advanced/online-search.zh-CN.mdx +25 -23
  50. package/e2e/src/features/discover/smoke.feature +34 -1
  51. package/e2e/src/steps/discover/smoke.steps.ts +116 -4
  52. package/e2e/tsconfig.json +0 -1
  53. package/locales/ar/models.json +15 -6
  54. package/locales/ar/oauth.json +1 -0
  55. package/locales/bg-BG/models.json +15 -6
  56. package/locales/bg-BG/oauth.json +1 -0
  57. package/locales/de-DE/models.json +15 -6
  58. package/locales/de-DE/oauth.json +1 -0
  59. package/locales/en-US/models.json +15 -6
  60. package/locales/en-US/oauth.json +1 -0
  61. package/locales/es-ES/models.json +15 -6
  62. package/locales/es-ES/oauth.json +1 -0
  63. package/locales/fa-IR/models.json +15 -6
  64. package/locales/fa-IR/oauth.json +1 -0
  65. package/locales/fr-FR/models.json +15 -6
  66. package/locales/fr-FR/oauth.json +1 -0
  67. package/locales/it-IT/models.json +15 -6
  68. package/locales/it-IT/oauth.json +1 -0
  69. package/locales/ja-JP/models.json +15 -6
  70. package/locales/ja-JP/oauth.json +1 -0
  71. package/locales/ko-KR/models.json +21 -12
  72. package/locales/ko-KR/oauth.json +1 -0
  73. package/locales/nl-NL/models.json +15 -6
  74. package/locales/nl-NL/oauth.json +1 -0
  75. package/locales/pl-PL/models.json +15 -6
  76. package/locales/pl-PL/oauth.json +1 -0
  77. package/locales/pt-BR/models.json +15 -6
  78. package/locales/pt-BR/oauth.json +1 -0
  79. package/locales/ru-RU/models.json +15 -6
  80. package/locales/ru-RU/oauth.json +1 -0
  81. package/locales/tr-TR/models.json +15 -6
  82. package/locales/tr-TR/oauth.json +1 -0
  83. package/locales/vi-VN/models.json +15 -6
  84. package/locales/vi-VN/oauth.json +1 -0
  85. package/locales/zh-CN/models.json +15 -6
  86. package/locales/zh-CN/oauth.json +1 -0
  87. package/locales/zh-TW/models.json +15 -6
  88. package/locales/zh-TW/oauth.json +1 -0
  89. package/next.config.ts +2 -3
  90. package/package.json +74 -80
  91. package/packages/const/src/index.ts +0 -1
  92. package/packages/const/src/models.ts +13 -0
  93. package/packages/const/src/url.ts +1 -4
  94. package/packages/const/src/version.ts +3 -3
  95. package/packages/context-engine/src/index.ts +1 -6
  96. package/packages/context-engine/src/processors/GroupMessageFlatten.ts +12 -2
  97. package/packages/context-engine/src/processors/__tests__/GroupMessageFlatten.test.ts +73 -9
  98. package/packages/context-engine/src/providers/index.ts +0 -2
  99. package/packages/database/migrations/0041_improve_index.sql +10 -0
  100. package/packages/database/migrations/meta/0041_snapshot.json +7784 -0
  101. package/packages/database/migrations/meta/_journal.json +7 -0
  102. package/packages/database/package.json +1 -1
  103. package/packages/database/src/core/migrations.json +17 -0
  104. package/packages/database/src/core/web-server.ts +2 -1
  105. package/packages/database/src/models/__tests__/message.grouping.test.ts +812 -0
  106. package/packages/database/src/models/__tests__/message.test.ts +322 -170
  107. package/packages/database/src/models/message.ts +62 -24
  108. package/packages/database/src/models/session.ts +60 -19
  109. package/packages/database/src/repositories/dataImporter/deprecated/__tests__/index.test.ts +2 -1
  110. package/packages/database/src/repositories/dataImporter/deprecated/index.ts +7 -1
  111. package/packages/database/src/schemas/agent.ts +10 -11
  112. package/packages/database/src/schemas/message.ts +5 -1
  113. package/packages/database/src/schemas/relations.ts +6 -4
  114. package/packages/database/src/schemas/session.ts +2 -0
  115. package/packages/database/src/schemas/topic.ts +6 -1
  116. package/packages/database/src/utils/__tests__/groupMessages.test.ts +145 -2
  117. package/packages/database/src/utils/groupMessages.ts +7 -5
  118. package/packages/electron-client-ipc/package.json +4 -1
  119. package/packages/file-loaders/package.json +1 -0
  120. package/packages/memory-extract/package.json +1 -1
  121. package/packages/model-bank/src/aiModels/anthropic.ts +0 -63
  122. package/packages/model-bank/src/aiModels/azure.ts +155 -0
  123. package/packages/model-bank/src/aiModels/bedrock.ts +44 -0
  124. package/packages/model-bank/src/aiModels/higress.ts +0 -55
  125. package/packages/model-bank/src/aiModels/infiniai.ts +21 -0
  126. package/packages/model-bank/src/aiModels/ollamacloud.ts +13 -0
  127. package/packages/model-bank/src/aiModels/siliconcloud.ts +19 -0
  128. package/packages/model-runtime/src/core/parameterResolver.ts +3 -0
  129. package/packages/model-runtime/src/core/streams/openai/__snapshots__/responsesStream.test.ts.snap +0 -38
  130. package/packages/model-runtime/src/providers/azureOpenai/index.ts +2 -1
  131. package/packages/model-runtime/src/providers/minimax/index.ts +5 -5
  132. package/packages/model-runtime/src/providers/search1api/index.test.ts +2 -2
  133. package/packages/model-runtime/src/utils/googleErrorParser.test.ts +125 -0
  134. package/packages/model-runtime/src/utils/googleErrorParser.ts +103 -77
  135. package/packages/types/src/message/common/base.ts +13 -0
  136. package/packages/types/src/message/common/image.ts +8 -0
  137. package/packages/types/src/message/common/metadata.ts +39 -0
  138. package/packages/types/src/message/common/tools.ts +10 -0
  139. package/packages/types/src/message/db/params.ts +47 -1
  140. package/packages/types/src/message/ui/chat.ts +4 -1
  141. package/packages/types/src/message/ui/params.ts +98 -4
  142. package/packages/types/src/search.ts +16 -0
  143. package/packages/types/src/serverConfig.ts +2 -6
  144. package/packages/types/src/user/index.ts +13 -1
  145. package/packages/types/src/user/settings/index.ts +22 -0
  146. package/packages/web-crawler/src/crawImpl/firecrawl.ts +39 -12
  147. package/packages/web-crawler/tsconfig.json +0 -1
  148. package/scripts/migrateServerDB/errorHint.js +1 -7
  149. package/scripts/migrateServerDB/index.ts +2 -1
  150. package/src/app/(backend)/webapi/revalidate/route.ts +1 -1
  151. package/src/app/[variants]/(auth)/signup/[[...signup]]/page.tsx +1 -8
  152. package/src/app/[variants]/(main)/(mobile)/me/(home)/__tests__/useCategory.test.tsx +9 -0
  153. package/src/app/[variants]/(main)/(mobile)/me/(home)/features/UserBanner.tsx +3 -6
  154. package/src/app/[variants]/(main)/(mobile)/me/(home)/layout.tsx +0 -2
  155. package/src/app/[variants]/(main)/_layout/Desktop/SideBar/TopActions.tsx +1 -4
  156. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/V1Mobile/index.tsx +2 -2
  157. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/V1Mobile/useSend.ts +6 -4
  158. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/useSend.ts +15 -10
  159. package/src/app/[variants]/(main)/chat/@session/features/SessionListContent/List/Item/Actions.tsx +3 -28
  160. package/src/app/[variants]/(main)/chat/@session/features/SessionListContent/List/Item/index.tsx +4 -2
  161. package/src/app/[variants]/(main)/chat/_layout/Desktop/index.tsx +0 -2
  162. package/src/app/[variants]/(main)/chat/_layout/Mobile.tsx +1 -5
  163. package/src/app/[variants]/(main)/chat/settings/features/HeaderContent.tsx +2 -62
  164. package/src/app/[variants]/(main)/discover/(list)/features/Pagination.tsx +1 -0
  165. package/src/app/[variants]/(main)/discover/(list)/features/SortButton/index.tsx +1 -1
  166. package/src/app/[variants]/(main)/discover/(list)/mcp/features/List/Item.tsx +1 -0
  167. package/src/app/[variants]/(main)/discover/(list)/model/features/List/Item.tsx +1 -0
  168. package/src/app/[variants]/(main)/discover/(list)/provider/features/List/Item.tsx +1 -0
  169. package/src/app/[variants]/(main)/discover/components/CategoryMenu.tsx +9 -1
  170. package/src/app/[variants]/(main)/image/@topic/features/Topics/TopicList.tsx +1 -0
  171. package/src/app/[variants]/(main)/image/features/PromptInput/index.tsx +1 -1
  172. package/src/app/[variants]/(main)/image/page.tsx +0 -2
  173. package/src/app/[variants]/(main)/labs/components/LabCard.tsx +3 -1
  174. package/src/app/[variants]/(main)/profile/_layout/Desktop/index.tsx +23 -24
  175. package/src/app/[variants]/(main)/profile/_layout/Mobile/index.tsx +5 -9
  176. package/src/app/[variants]/(main)/settings/_layout/Desktop/index.tsx +0 -2
  177. package/src/app/[variants]/(main)/settings/_layout/Mobile/index.tsx +0 -2
  178. package/src/app/[variants]/(main)/settings/_layout/SettingsContent.tsx +0 -3
  179. package/src/app/[variants]/(main)/settings/provider/(list)/ProviderGrid/Card.tsx +1 -1
  180. package/src/app/[variants]/(main)/settings/provider/detail/azure/index.tsx +5 -7
  181. package/src/app/[variants]/layout.tsx +1 -0
  182. package/src/app/[variants]/loading/index.tsx +1 -10
  183. package/src/app/[variants]/oauth/ResultLayout.tsx +47 -0
  184. package/src/app/[variants]/oauth/callback/error/page.tsx +20 -33
  185. package/src/app/[variants]/oauth/callback/layout.tsx +1 -0
  186. package/src/app/[variants]/oauth/callback/success/page.tsx +8 -22
  187. package/src/app/[variants]/oauth/consent/[uid]/Consent/BuiltinConsent.tsx +47 -0
  188. package/src/app/[variants]/oauth/consent/[uid]/{Consent.tsx → Consent/index.tsx} +12 -1
  189. package/src/app/[variants]/oauth/consent/[uid]/Login.tsx +9 -1
  190. package/src/app/sitemap.tsx +7 -1
  191. package/src/components/InvalidAPIKey/APIKeyForm/Bedrock.tsx +8 -13
  192. package/src/components/Link.tsx +12 -0
  193. package/src/components/Thinking/index.tsx +4 -3
  194. package/src/config/db.ts +0 -5
  195. package/src/config/featureFlags/schema.test.ts +0 -2
  196. package/src/config/featureFlags/schema.ts +0 -6
  197. package/src/config/modelProviders/ai21.ts +1 -16
  198. package/src/config/modelProviders/ai302.ts +1 -128
  199. package/src/config/modelProviders/ai360.ts +1 -32
  200. package/src/config/modelProviders/anthropic.ts +1 -94
  201. package/src/config/modelProviders/azure.ts +1 -51
  202. package/src/config/modelProviders/baichuan.ts +1 -57
  203. package/src/config/modelProviders/bedrock.ts +1 -276
  204. package/src/config/modelProviders/cloudflare.ts +1 -64
  205. package/src/config/modelProviders/deepseek.ts +1 -19
  206. package/src/config/modelProviders/fireworksai.ts +1 -174
  207. package/src/config/modelProviders/giteeai.ts +1 -135
  208. package/src/config/modelProviders/github.ts +1 -254
  209. package/src/config/modelProviders/google.ts +1 -130
  210. package/src/config/modelProviders/groq.ts +1 -119
  211. package/src/config/modelProviders/higress.ts +1 -1736
  212. package/src/config/modelProviders/huggingface.ts +1 -54
  213. package/src/config/modelProviders/hunyuan.ts +1 -83
  214. package/src/config/modelProviders/infiniai.ts +1 -74
  215. package/src/config/modelProviders/internlm.ts +1 -20
  216. package/src/config/modelProviders/minimax.ts +1 -1
  217. package/src/config/modelProviders/mistral.ts +1 -95
  218. package/src/config/modelProviders/modelscope.ts +1 -27
  219. package/src/config/modelProviders/moonshot.ts +1 -29
  220. package/src/config/modelProviders/novita.ts +1 -105
  221. package/src/config/modelProviders/ollama.ts +1 -325
  222. package/src/config/modelProviders/openai.ts +1 -242
  223. package/src/config/modelProviders/openrouter.ts +1 -240
  224. package/src/config/modelProviders/perplexity.ts +1 -45
  225. package/src/config/modelProviders/ppio.ts +1 -152
  226. package/src/config/modelProviders/qiniu.ts +2 -19
  227. package/src/config/modelProviders/qwen.ts +1 -245
  228. package/src/config/modelProviders/search1api.ts +1 -34
  229. package/src/config/modelProviders/sensenova.ts +1 -69
  230. package/src/config/modelProviders/siliconcloud.ts +1 -417
  231. package/src/config/modelProviders/spark.ts +1 -59
  232. package/src/config/modelProviders/stepfun.ts +1 -98
  233. package/src/config/modelProviders/taichu.ts +1 -18
  234. package/src/config/modelProviders/togetherai.ts +1 -274
  235. package/src/config/modelProviders/upstage.ts +1 -28
  236. package/src/config/modelProviders/wenxin.ts +1 -140
  237. package/src/config/modelProviders/xai.ts +1 -38
  238. package/src/config/modelProviders/zeroone.ts +1 -81
  239. package/src/config/modelProviders/zhipu.ts +1 -108
  240. package/src/envs/app.ts +5 -8
  241. package/src/envs/auth.ts +0 -179
  242. package/src/features/AgentSetting/AgentPlugin/index.tsx +2 -2
  243. package/src/features/ChatInput/ActionBar/STT/browser.tsx +2 -2
  244. package/src/features/ChatInput/ActionBar/STT/openai.tsx +2 -2
  245. package/src/features/ChatInput/ActionBar/Tools/useControls.tsx +1 -3
  246. package/src/features/Conversation/Error/ErrorJsonViewer.tsx +4 -3
  247. package/src/features/Conversation/Error/OllamaBizError/index.tsx +7 -2
  248. package/src/features/Conversation/Error/index.tsx +15 -5
  249. package/src/features/Conversation/MarkdownElements/LobeArtifact/Render/index.tsx +2 -2
  250. package/src/features/Conversation/Messages/Assistant/Extra/index.tsx +2 -2
  251. package/src/features/Conversation/Messages/Assistant/MessageContent.tsx +5 -3
  252. package/src/features/Conversation/Messages/Assistant/Tool/Inspector/BuiltinPluginTitle.tsx +2 -2
  253. package/src/features/Conversation/Messages/Assistant/Tool/Inspector/ToolTitle.tsx +4 -2
  254. package/src/features/Conversation/Messages/Assistant/Tool/Render/CustomRender.tsx +2 -2
  255. package/src/features/Conversation/Messages/Assistant/Tool/Render/index.tsx +2 -2
  256. package/src/features/Conversation/Messages/Assistant/Tool/index.tsx +2 -2
  257. package/src/features/Conversation/Messages/Assistant/index.tsx +4 -4
  258. package/src/features/Conversation/Messages/Default.tsx +2 -2
  259. package/src/features/Conversation/Messages/User/Extra.tsx +2 -2
  260. package/src/features/Conversation/Messages/User/index.tsx +4 -4
  261. package/src/features/Conversation/Messages/index.tsx +3 -3
  262. package/src/features/Conversation/components/AutoScroll.tsx +2 -2
  263. package/src/features/Conversation/components/Extras/Usage/UsageDetail/index.tsx +9 -6
  264. package/src/features/DataImporter/index.tsx +15 -60
  265. package/src/features/DevPanel/PostgresViewer/usePgTable.ts +3 -2
  266. package/src/features/PluginTag/index.tsx +1 -3
  267. package/src/features/PluginsUI/Render/BuiltinType/index.test.tsx +37 -28
  268. package/src/features/Portal/Artifacts/Body/index.tsx +2 -2
  269. package/src/helpers/isCanUseFC.ts +0 -8
  270. package/src/hooks/useEnabledChatModels.ts +0 -8
  271. package/src/hooks/useInterceptingRoutes.test.ts +21 -3
  272. package/src/hooks/useModelContextWindowTokens.ts +0 -8
  273. package/src/hooks/useModelHasContextWindowToken.ts +1 -10
  274. package/src/hooks/useModelSupportFiles.ts +1 -11
  275. package/src/hooks/useModelSupportReasoning.ts +1 -11
  276. package/src/hooks/useModelSupportToolUse.ts +1 -11
  277. package/src/hooks/useModelSupportVision.ts +1 -11
  278. package/src/layout/AuthProvider/Clerk/index.tsx +2 -16
  279. package/src/libs/next-auth/auth.config.ts +3 -6
  280. package/src/libs/next-auth/sso-providers/auth0.ts +0 -7
  281. package/src/libs/next-auth/sso-providers/authelia.ts +3 -5
  282. package/src/libs/next-auth/sso-providers/authentik.ts +0 -7
  283. package/src/libs/next-auth/sso-providers/cloudflare-zero-trust.ts +3 -6
  284. package/src/libs/next-auth/sso-providers/cognito.ts +1 -5
  285. package/src/libs/next-auth/sso-providers/generic-oidc.ts +3 -5
  286. package/src/libs/next-auth/sso-providers/github.ts +0 -6
  287. package/src/libs/next-auth/sso-providers/google.ts +0 -2
  288. package/src/libs/next-auth/sso-providers/index.ts +0 -2
  289. package/src/libs/next-auth/sso-providers/keycloak.ts +0 -3
  290. package/src/libs/next-auth/sso-providers/logto.ts +3 -5
  291. package/src/libs/next-auth/sso-providers/okta.ts +0 -4
  292. package/src/libs/next-auth/sso-providers/zitadel.ts +0 -7
  293. package/src/libs/oidc-provider/provider.ts +1 -1
  294. package/src/libs/trpc/client/index.ts +0 -1
  295. package/src/libs/trpc/client/lambda.ts +8 -5
  296. package/src/libs/trpc/lambda/context.ts +4 -1
  297. package/src/locales/default/oauth.ts +1 -0
  298. package/src/server/globalConfig/index.ts +0 -23
  299. package/src/server/modules/AssistantStore/index.ts +1 -1
  300. package/src/server/modules/ModelRuntime/trace.ts +11 -4
  301. package/src/server/routers/desktop/mcp.ts +1 -3
  302. package/src/server/routers/lambda/__tests__/integration/message.integration.test.ts +0 -41
  303. package/src/server/routers/lambda/config/__snapshots__/index.test.ts.snap +175 -12
  304. package/src/server/routers/lambda/config/index.test.ts +38 -30
  305. package/src/server/routers/lambda/message.ts +17 -13
  306. package/src/server/routers/lambda/session.ts +8 -5
  307. package/src/server/routers/lambda/user.ts +24 -25
  308. package/src/server/routers/tools/mcp.ts +2 -3
  309. package/src/server/routers/tools/search.test.ts +1 -7
  310. package/src/server/routers/tools/search.ts +1 -4
  311. package/src/server/services/search/impls/firecrawl/index.ts +51 -11
  312. package/src/server/services/search/impls/firecrawl/type.ts +60 -9
  313. package/src/services/__tests__/tool.test.ts +0 -3
  314. package/src/services/aiModel/index.test.ts +0 -3
  315. package/src/services/aiModel/index.ts +1 -7
  316. package/src/services/aiProvider/index.test.ts +0 -3
  317. package/src/services/aiProvider/index.ts +1 -7
  318. package/src/services/chat/chat.test.ts +13 -40
  319. package/src/services/chat/contextEngineering.test.ts +0 -30
  320. package/src/services/chat/contextEngineering.ts +1 -12
  321. package/src/services/chat/helper.ts +7 -31
  322. package/src/services/chat/index.ts +2 -7
  323. package/src/services/chat/types.ts +1 -1
  324. package/src/services/chatGroup/index.ts +1 -10
  325. package/src/services/config.ts +1 -65
  326. package/src/services/export/index.ts +1 -4
  327. package/src/services/file/index.ts +1 -11
  328. package/src/services/import/index.ts +1 -7
  329. package/src/services/message/index.ts +1 -11
  330. package/src/services/message/server.ts +7 -6
  331. package/src/services/message/type.ts +6 -3
  332. package/src/services/models.ts +2 -11
  333. package/src/services/plugin/index.ts +1 -11
  334. package/src/services/session/index.ts +1 -11
  335. package/src/services/tableViewer/client.ts +12 -15
  336. package/src/services/thread/index.ts +1 -7
  337. package/src/services/topic/index.ts +1 -11
  338. package/src/services/user/index.ts +1 -13
  339. package/src/store/chat/helpers.test.ts +99 -0
  340. package/src/store/chat/helpers.ts +21 -2
  341. package/src/store/chat/selectors.ts +1 -1
  342. package/src/store/chat/slices/aiChat/actions/__tests__/generateAIChat.test.ts +0 -241
  343. package/src/store/chat/slices/aiChat/actions/__tests__/generateAIChatV2.test.ts +26 -1
  344. package/src/store/chat/slices/aiChat/actions/__tests__/helpers.ts +3 -1
  345. package/src/store/chat/slices/aiChat/actions/generateAIChat.ts +45 -155
  346. package/src/store/chat/slices/builtinTool/actions/index.ts +1 -4
  347. package/src/store/chat/slices/message/action.test.ts +5 -1
  348. package/src/store/chat/slices/message/action.ts +102 -14
  349. package/src/store/chat/slices/message/reducer.test.ts +363 -5
  350. package/src/store/chat/slices/message/reducer.ts +87 -3
  351. package/src/store/chat/slices/message/{selectors.test.ts → selectors/chat.test.ts} +266 -30
  352. package/src/store/chat/slices/message/{selectors.ts → selectors/chat.ts} +29 -79
  353. package/src/store/chat/slices/message/selectors/index.ts +2 -0
  354. package/src/store/chat/slices/message/selectors/messageState.test.ts +36 -0
  355. package/src/store/chat/slices/message/selectors/messageState.ts +80 -0
  356. package/src/store/chat/slices/plugin/action.test.ts +34 -132
  357. package/src/store/chat/slices/plugin/action.ts +1 -44
  358. package/src/store/global/store.ts +1 -7
  359. package/src/store/tool/selectors/tool.test.ts +1 -1
  360. package/src/store/tool/selectors/tool.ts +6 -8
  361. package/src/store/tool/slices/builtin/action.test.ts +83 -35
  362. package/src/store/tool/slices/builtin/action.ts +0 -9
  363. package/src/store/tool/slices/builtin/selectors.test.ts +4 -30
  364. package/src/store/tool/slices/builtin/selectors.ts +15 -21
  365. package/src/store/user/initialState.ts +1 -7
  366. package/src/store/user/selectors.ts +1 -5
  367. package/src/store/user/slices/common/action.test.ts +1 -4
  368. package/src/store/user/slices/common/action.ts +5 -4
  369. package/src/store/user/slices/settings/selectors/index.ts +1 -0
  370. package/src/store/user/slices/settings/selectors/keyVaults.ts +21 -0
  371. package/src/store/user/store.ts +0 -3
  372. package/src/tools/index.ts +0 -6
  373. package/src/tools/renders.ts +0 -3
  374. package/src/tools/web-browsing/Portal/Search/Footer.tsx +2 -2
  375. package/src/tools/web-browsing/Render/Search/ConfigForm/Form.tsx +1 -1
  376. package/tsconfig.json +9 -3
  377. package/packages/const/src/guide.ts +0 -89
  378. package/packages/context-engine/src/providers/InboxGuide.ts +0 -102
  379. package/packages/context-engine/src/providers/__tests__/InboxGuideProvider.test.ts +0 -121
  380. package/packages/utils/src/_deprecated/__snapshots__/parseModels.test.ts.snap +0 -104
  381. package/packages/utils/src/_deprecated/parseModels.test.ts +0 -287
  382. package/packages/utils/src/_deprecated/parseModels.ts +0 -165
  383. package/src/app/(backend)/trpc/edge/[trpc]/route.ts +0 -26
  384. package/src/app/[variants]/(main)/(mobile)/me/data/features/Category.tsx +0 -48
  385. package/src/app/[variants]/(main)/(mobile)/me/data/features/Header.tsx +0 -33
  386. package/src/app/[variants]/(main)/(mobile)/me/data/layout.tsx +0 -13
  387. package/src/app/[variants]/(main)/(mobile)/me/data/loading.tsx +0 -5
  388. package/src/app/[variants]/(main)/(mobile)/me/data/page.tsx +0 -29
  389. package/src/app/[variants]/(main)/chat/features/Migration/DBReader.ts +0 -290
  390. package/src/app/[variants]/(main)/chat/features/Migration/ExportConfigButton.tsx +0 -35
  391. package/src/app/[variants]/(main)/chat/features/Migration/Failed.tsx +0 -120
  392. package/src/app/[variants]/(main)/chat/features/Migration/Modal.tsx +0 -81
  393. package/src/app/[variants]/(main)/chat/features/Migration/Start.tsx +0 -108
  394. package/src/app/[variants]/(main)/chat/features/Migration/UpgradeButton.tsx +0 -71
  395. package/src/app/[variants]/(main)/chat/features/Migration/const.ts +0 -15
  396. package/src/app/[variants]/(main)/chat/features/Migration/index.tsx +0 -50
  397. package/src/app/[variants]/(main)/settings/llm/ProviderList/Azure/index.tsx +0 -93
  398. package/src/app/[variants]/(main)/settings/llm/ProviderList/Bedrock/index.tsx +0 -70
  399. package/src/app/[variants]/(main)/settings/llm/ProviderList/Cloudflare/index.tsx +0 -39
  400. package/src/app/[variants]/(main)/settings/llm/ProviderList/Github/index.tsx +0 -52
  401. package/src/app/[variants]/(main)/settings/llm/ProviderList/HuggingFace/index.tsx +0 -52
  402. package/src/app/[variants]/(main)/settings/llm/ProviderList/Ollama/index.tsx +0 -20
  403. package/src/app/[variants]/(main)/settings/llm/ProviderList/OpenAI/index.tsx +0 -17
  404. package/src/app/[variants]/(main)/settings/llm/ProviderList/providers.tsx +0 -132
  405. package/src/app/[variants]/(main)/settings/llm/components/Checker.tsx +0 -118
  406. package/src/app/[variants]/(main)/settings/llm/components/ProviderConfig/index.tsx +0 -303
  407. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/CustomModelOption.tsx +0 -98
  408. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/ModelConfigModal/Form.tsx +0 -104
  409. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/ModelConfigModal/index.tsx +0 -77
  410. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/ModelFetcher.tsx +0 -105
  411. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/Option.tsx +0 -68
  412. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/index.tsx +0 -146
  413. package/src/app/[variants]/(main)/settings/llm/const.ts +0 -20
  414. package/src/app/[variants]/(main)/settings/llm/features/Footer.tsx +0 -35
  415. package/src/app/[variants]/(main)/settings/llm/index.tsx +0 -30
  416. package/src/app/[variants]/(main)/settings/llm/type.ts +0 -5
  417. package/src/app/[variants]/loading/Client/Content.tsx +0 -48
  418. package/src/app/[variants]/loading/Client/Error.tsx +0 -27
  419. package/src/app/[variants]/loading/Client/Redirect.tsx +0 -47
  420. package/src/app/[variants]/loading/Client/index.tsx +0 -22
  421. package/src/components/InnerLink.tsx +0 -20
  422. package/src/database/_deprecated/core/__tests__/db-upgrade.test.ts +0 -42
  423. package/src/database/_deprecated/core/__tests__/db.test.ts +0 -79
  424. package/src/database/_deprecated/core/__tests__/model.test.ts +0 -55
  425. package/src/database/_deprecated/core/db.ts +0 -246
  426. package/src/database/_deprecated/core/index.ts +0 -2
  427. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/fixtures/input.json +0 -55
  428. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/fixtures/output.json +0 -60
  429. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/index.test.ts +0 -14
  430. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/index.ts +0 -22
  431. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/type.ts +0 -105
  432. package/src/database/_deprecated/core/model.ts +0 -218
  433. package/src/database/_deprecated/core/schemas.ts +0 -88
  434. package/src/database/_deprecated/core/types/db.ts +0 -15
  435. package/src/database/_deprecated/models/__DEBUG.ts +0 -124
  436. package/src/database/_deprecated/models/__tests__/file.test.ts +0 -83
  437. package/src/database/_deprecated/models/__tests__/message.test.ts +0 -426
  438. package/src/database/_deprecated/models/__tests__/plugin.test.ts +0 -81
  439. package/src/database/_deprecated/models/__tests__/session.test.ts +0 -253
  440. package/src/database/_deprecated/models/__tests__/sessionGroup.test.ts +0 -220
  441. package/src/database/_deprecated/models/__tests__/topic.test.ts +0 -523
  442. package/src/database/_deprecated/models/__tests__/user.test.ts +0 -82
  443. package/src/database/_deprecated/models/file.ts +0 -51
  444. package/src/database/_deprecated/models/message.ts +0 -277
  445. package/src/database/_deprecated/models/plugin.ts +0 -62
  446. package/src/database/_deprecated/models/session.ts +0 -271
  447. package/src/database/_deprecated/models/sessionGroup.ts +0 -93
  448. package/src/database/_deprecated/models/topic.ts +0 -250
  449. package/src/database/_deprecated/models/user.ts +0 -69
  450. package/src/database/_deprecated/schemas/files.ts +0 -39
  451. package/src/database/_deprecated/schemas/message.ts +0 -50
  452. package/src/database/_deprecated/schemas/plugin.ts +0 -12
  453. package/src/database/_deprecated/schemas/session.ts +0 -54
  454. package/src/database/_deprecated/schemas/sessionGroup.ts +0 -8
  455. package/src/database/_deprecated/schemas/topic.ts +0 -12
  456. package/src/database/_deprecated/schemas/user.ts +0 -40
  457. package/src/envs/__tests__/auth.test.ts +0 -200
  458. package/src/features/DataImporter/_deprecated.ts +0 -43
  459. package/src/features/InitClientDB/EnableModal.tsx +0 -118
  460. package/src/features/InitClientDB/ErrorResult.tsx +0 -143
  461. package/src/features/InitClientDB/InitIndicator.tsx +0 -124
  462. package/src/features/InitClientDB/PGliteIcon.tsx +0 -28
  463. package/src/features/InitClientDB/features/DatabaseRepair/Backup.tsx +0 -75
  464. package/src/features/InitClientDB/features/DatabaseRepair/Diagnosis.tsx +0 -98
  465. package/src/features/InitClientDB/features/DatabaseRepair/Repair.tsx +0 -218
  466. package/src/features/InitClientDB/features/DatabaseRepair/index.tsx +0 -91
  467. package/src/features/InitClientDB/index.tsx +0 -37
  468. package/src/hooks/_header.ts +0 -23
  469. package/src/libs/next-auth/sso-providers/azure-ad.ts +0 -33
  470. package/src/libs/trpc/client/edge.ts +0 -26
  471. package/src/libs/trpc/edge/context.ts +0 -71
  472. package/src/libs/trpc/edge/index.ts +0 -45
  473. package/src/libs/trpc/edge/init.ts +0 -26
  474. package/src/libs/trpc/edge/middleware/jwtPayload.test.ts +0 -75
  475. package/src/libs/trpc/edge/middleware/jwtPayload.ts +0 -14
  476. package/src/migrations/FromV0ToV1.ts +0 -10
  477. package/src/migrations/FromV1ToV2/fixtures/input-v1-session.json +0 -191
  478. package/src/migrations/FromV1ToV2/fixtures/output-v2.json +0 -202
  479. package/src/migrations/FromV1ToV2/index.ts +0 -82
  480. package/src/migrations/FromV1ToV2/migrations.test.ts +0 -224
  481. package/src/migrations/FromV1ToV2/types/v1.ts +0 -78
  482. package/src/migrations/FromV1ToV2/types/v2.ts +0 -52
  483. package/src/migrations/FromV2ToV3/fixtures/input-v2-session.json +0 -72
  484. package/src/migrations/FromV2ToV3/fixtures/output-v3-from-v1.json +0 -203
  485. package/src/migrations/FromV2ToV3/fixtures/output-v3.json +0 -74
  486. package/src/migrations/FromV2ToV3/index.ts +0 -30
  487. package/src/migrations/FromV2ToV3/migrations.test.ts +0 -42
  488. package/src/migrations/FromV2ToV3/types/v3.ts +0 -27
  489. package/src/migrations/FromV3ToV4/fixtures/azure-input-v3.json +0 -79
  490. package/src/migrations/FromV3ToV4/fixtures/azure-output-v4.json +0 -75
  491. package/src/migrations/FromV3ToV4/fixtures/ollama-input-v3.json +0 -85
  492. package/src/migrations/FromV3ToV4/fixtures/ollama-output-v4.json +0 -86
  493. package/src/migrations/FromV3ToV4/fixtures/openai-input-v3.json +0 -77
  494. package/src/migrations/FromV3ToV4/fixtures/openai-output-v4.json +0 -77
  495. package/src/migrations/FromV3ToV4/fixtures/openrouter-input-v3.json +0 -82
  496. package/src/migrations/FromV3ToV4/fixtures/openrouter-output-v4.json +0 -85
  497. package/src/migrations/FromV3ToV4/fixtures/output-v4-from-v1.json +0 -203
  498. package/src/migrations/FromV3ToV4/index.ts +0 -102
  499. package/src/migrations/FromV3ToV4/migrations.test.ts +0 -195
  500. package/src/migrations/FromV3ToV4/types/v3.ts +0 -52
  501. package/src/migrations/FromV3ToV4/types/v4.ts +0 -37
  502. package/src/migrations/FromV4ToV5/fixtures/from-v1-to-v5-output.json +0 -245
  503. package/src/migrations/FromV4ToV5/fixtures/function-input-v4.json +0 -96
  504. package/src/migrations/FromV4ToV5/fixtures/function-output-v5.json +0 -120
  505. package/src/migrations/FromV4ToV5/index.ts +0 -58
  506. package/src/migrations/FromV4ToV5/migrations.test.ts +0 -49
  507. package/src/migrations/FromV4ToV5/types/v4.ts +0 -21
  508. package/src/migrations/FromV4ToV5/types/v5.ts +0 -27
  509. package/src/migrations/FromV5ToV6/fixtures/from-v1-to-v6-output.json +0 -247
  510. package/src/migrations/FromV5ToV6/fixtures/session-input-v5.json +0 -81
  511. package/src/migrations/FromV5ToV6/fixtures/session-output-v6.json +0 -85
  512. package/src/migrations/FromV5ToV6/index.ts +0 -61
  513. package/src/migrations/FromV5ToV6/migrations.test.ts +0 -50
  514. package/src/migrations/FromV5ToV6/types/v5.ts +0 -48
  515. package/src/migrations/FromV5ToV6/types/v6.ts +0 -63
  516. package/src/migrations/FromV6ToV7/fixtures/output-v7-from-v1.json +0 -203
  517. package/src/migrations/FromV6ToV7/fixtures/provider-input-v6.json +0 -103
  518. package/src/migrations/FromV6ToV7/fixtures/provider-output-v7.json +0 -118
  519. package/src/migrations/FromV6ToV7/index.ts +0 -101
  520. package/src/migrations/FromV6ToV7/migrations.test.ts +0 -64
  521. package/src/migrations/FromV6ToV7/types/v6.ts +0 -61
  522. package/src/migrations/FromV6ToV7/types/v7.ts +0 -69
  523. package/src/migrations/VersionController.test.ts +0 -88
  524. package/src/migrations/VersionController.ts +0 -67
  525. package/src/migrations/index.ts +0 -61
  526. package/src/server/globalConfig/_deprecated.test.ts +0 -92
  527. package/src/server/globalConfig/_deprecated.ts +0 -41
  528. package/src/server/routers/edge/appStatus.ts +0 -3
  529. package/src/server/routers/edge/index.ts +0 -14
  530. package/src/server/routers/edge/upload.ts +0 -16
  531. package/src/services/aiModel/client.ts +0 -70
  532. package/src/services/aiProvider/client.ts +0 -58
  533. package/src/services/baseClientService/index.ts +0 -9
  534. package/src/services/chat/__snapshots__/chat.test.ts.snap +0 -110
  535. package/src/services/chatGroup/client.ts +0 -63
  536. package/src/services/export/_deprecated.ts +0 -155
  537. package/src/services/export/client.ts +0 -15
  538. package/src/services/file/_deprecated.test.ts +0 -119
  539. package/src/services/file/_deprecated.ts +0 -80
  540. package/src/services/file/client.test.ts +0 -199
  541. package/src/services/file/client.ts +0 -85
  542. package/src/services/import/_deprecated.ts +0 -115
  543. package/src/services/import/client.test.ts +0 -1015
  544. package/src/services/import/client.ts +0 -64
  545. package/src/services/message/_deprecated.test.ts +0 -398
  546. package/src/services/message/_deprecated.ts +0 -168
  547. package/src/services/message/client.test.ts +0 -410
  548. package/src/services/message/client.ts +0 -186
  549. package/src/services/plugin/_deprecated.test.ts +0 -162
  550. package/src/services/plugin/_deprecated.ts +0 -42
  551. package/src/services/plugin/client.test.ts +0 -177
  552. package/src/services/plugin/client.ts +0 -46
  553. package/src/services/session/_deprecated.test.ts +0 -440
  554. package/src/services/session/_deprecated.ts +0 -190
  555. package/src/services/session/client.test.ts +0 -413
  556. package/src/services/session/client.ts +0 -193
  557. package/src/services/thread/client.ts +0 -51
  558. package/src/services/topic/_deprecated.test.ts +0 -245
  559. package/src/services/topic/_deprecated.ts +0 -75
  560. package/src/services/topic/client.ts +0 -89
  561. package/src/services/topic/pglite.test.ts +0 -212
  562. package/src/services/user/_deprecated.test.ts +0 -101
  563. package/src/services/user/_deprecated.ts +0 -70
  564. package/src/services/user/client.test.ts +0 -108
  565. package/src/services/user/client.ts +0 -104
  566. package/src/store/chat/slices/builtinTool/actions/__tests__/dalle.test.ts +0 -121
  567. package/src/store/chat/slices/builtinTool/actions/dalle.ts +0 -124
  568. package/src/store/global/actions/clientDb.ts +0 -67
  569. package/src/store/user/slices/modelList/__snapshots__/action.test.ts.snap +0 -12
  570. package/src/store/user/slices/modelList/action.test.ts +0 -359
  571. package/src/store/user/slices/modelList/action.ts +0 -223
  572. package/src/store/user/slices/modelList/initialState.ts +0 -15
  573. package/src/store/user/slices/modelList/reducers/customModelCard.test.ts +0 -204
  574. package/src/store/user/slices/modelList/reducers/customModelCard.ts +0 -64
  575. package/src/store/user/slices/modelList/selectors/index.ts +0 -3
  576. package/src/store/user/slices/modelList/selectors/keyVaults.test.ts +0 -201
  577. package/src/store/user/slices/modelList/selectors/keyVaults.ts +0 -50
  578. package/src/store/user/slices/modelList/selectors/modelConfig.test.ts +0 -219
  579. package/src/store/user/slices/modelList/selectors/modelConfig.ts +0 -95
  580. package/src/store/user/slices/modelList/selectors/modelProvider.test.ts +0 -138
  581. package/src/store/user/slices/modelList/selectors/modelProvider.ts +0 -170
  582. package/src/tools/dalle/Render/GalleyGrid.tsx +0 -60
  583. package/src/tools/dalle/Render/Item/EditMode.tsx +0 -66
  584. package/src/tools/dalle/Render/Item/Error.tsx +0 -49
  585. package/src/tools/dalle/Render/Item/Image.tsx +0 -44
  586. package/src/tools/dalle/Render/Item/ImageFileItem.tsx +0 -57
  587. package/src/tools/dalle/Render/Item/index.tsx +0 -88
  588. package/src/tools/dalle/Render/ToolBar.tsx +0 -56
  589. package/src/tools/dalle/Render/index.tsx +0 -52
  590. package/src/tools/dalle/index.ts +0 -92
  591. /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
- }