@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,245 +0,0 @@
1
- import { Mock, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
2
-
3
- import { SessionModel } from '@/database/_deprecated/models/session';
4
- import { CreateTopicParams, TopicModel } from '@/database/_deprecated/models/topic';
5
- import { ChatTopic } from '@/types/topic';
6
-
7
- import { ClientService } from './_deprecated';
8
-
9
- const topicService = new ClientService();
10
- // Mock the TopicModel
11
- vi.mock('@/database/_deprecated/models/topic', () => {
12
- return {
13
- TopicModel: {
14
- create: vi.fn(),
15
- query: vi.fn(),
16
- delete: vi.fn(),
17
- count: vi.fn(),
18
- batchDeleteBySessionId: vi.fn(),
19
- batchDelete: vi.fn(),
20
- clearTable: vi.fn(),
21
- toggleFavorite: vi.fn(),
22
- batchCreate: vi.fn(),
23
- update: vi.fn(),
24
- queryAll: vi.fn(),
25
- queryByKeyword: vi.fn(),
26
- },
27
- };
28
- });
29
-
30
- describe('TopicService', () => {
31
- // Mock data
32
- const mockTopicId = 'mock-topic-id';
33
- const mockTopic: ChatTopic = {
34
- createdAt: 100,
35
- updatedAt: 100,
36
- id: mockTopicId,
37
- title: 'Mock Topic',
38
- };
39
- const mockTopics = [mockTopic];
40
-
41
- beforeEach(() => {
42
- // Reset all mocks before running each test case
43
- vi.resetAllMocks();
44
- });
45
-
46
- describe('createTopic', () => {
47
- it('should create a topic and return its id', async () => {
48
- // Setup
49
- const createParams: CreateTopicParams = {
50
- title: 'New Topic',
51
- sessionId: '1',
52
- };
53
- (TopicModel.create as Mock).mockResolvedValue(mockTopic);
54
-
55
- // Execute
56
- const topicId = await topicService.createTopic(createParams);
57
-
58
- // Assert
59
- expect(TopicModel.create).toHaveBeenCalledWith(createParams);
60
- expect(topicId).toBe(mockTopicId);
61
- });
62
- it('should throw an error if topic creation fails', async () => {
63
- // Setup
64
- const createParams: CreateTopicParams = {
65
- title: 'New Topic',
66
- sessionId: '1',
67
- };
68
-
69
- (TopicModel.create as Mock).mockResolvedValue(null);
70
-
71
- // Execute & Assert
72
- await expect(topicService.createTopic(createParams)).rejects.toThrow('topic create Error');
73
- });
74
- });
75
-
76
- describe('getTopics', () => {
77
- // Example for getTopics
78
- it('should query topics with given parameters', async () => {
79
- // Setup
80
- const queryParams = { containerId: 'session-id' };
81
- (TopicModel.query as Mock).mockResolvedValue(mockTopics);
82
-
83
- // Execute
84
- const topics = await topicService.getTopics(queryParams);
85
-
86
- // Assert
87
- expect(TopicModel.query).toHaveBeenCalledWith(queryParams);
88
- expect(topics).toBe(mockTopics);
89
- });
90
- });
91
-
92
- describe('updateTopic', () => {
93
- // Example for updateFavorite
94
- it('should toggle favorite status of a topic', async () => {
95
- // Setup
96
- const newState = true;
97
-
98
- // Execute
99
- await topicService.updateTopic(mockTopicId, { favorite: newState });
100
-
101
- // Assert
102
- expect(TopicModel.update).toHaveBeenCalledWith(mockTopicId, { favorite: 1 });
103
- });
104
-
105
- it('should update the title of a topic', async () => {
106
- // Setup
107
- const newTitle = 'Updated Topic Title';
108
- (TopicModel.update as Mock).mockResolvedValue({ ...mockTopic, title: newTitle });
109
-
110
- // Execute
111
- const result = await topicService.updateTopic(mockTopicId, { title: newTitle });
112
-
113
- // Assert
114
- expect(TopicModel.update).toHaveBeenCalledWith(mockTopicId, { title: newTitle });
115
- expect(result).toEqual({ ...mockTopic, title: newTitle });
116
- });
117
- });
118
-
119
- describe('removeTopic', () => {
120
- it('should remove a topic by id', async () => {
121
- // Setup
122
- (TopicModel.delete as Mock).mockResolvedValue(true);
123
-
124
- // Execute
125
- const result = await topicService.removeTopic(mockTopicId);
126
-
127
- // Assert
128
- expect(TopicModel.delete).toHaveBeenCalledWith(mockTopicId);
129
- expect(result).toBe(true);
130
- });
131
- });
132
-
133
- describe('removeTopics', () => {
134
- it('should remove all topics with a given session id', async () => {
135
- // Setup
136
- const sessionId = 'session-id';
137
- (TopicModel.batchDeleteBySessionId as Mock).mockResolvedValue(true);
138
-
139
- // Execute
140
- const result = await topicService.removeTopics(sessionId);
141
-
142
- // Assert
143
- expect(TopicModel.batchDeleteBySessionId).toHaveBeenCalledWith(sessionId);
144
- expect(result).toBe(true);
145
- });
146
- });
147
-
148
- describe('batchRemoveTopics', () => {
149
- it('should batch remove topics', async () => {
150
- // Setup
151
- const topicIds = [mockTopicId, 'another-topic-id'];
152
- (TopicModel.batchDelete as Mock).mockResolvedValue(true);
153
-
154
- // Execute
155
- const result = await topicService.batchRemoveTopics(topicIds);
156
-
157
- // Assert
158
- expect(TopicModel.batchDelete).toHaveBeenCalledWith(topicIds);
159
- expect(result).toBe(true);
160
- });
161
- });
162
-
163
- describe('removeAllTopic', () => {
164
- it('should clear all topics from the table', async () => {
165
- // Setup
166
- (TopicModel.clearTable as Mock).mockResolvedValue(true);
167
-
168
- // Execute
169
- const result = await topicService.removeAllTopic();
170
-
171
- // Assert
172
- expect(TopicModel.clearTable).toHaveBeenCalled();
173
- expect(result).toBe(true);
174
- });
175
- });
176
-
177
- describe('batchCreateTopics', () => {
178
- it('should batch create topics', async () => {
179
- // Setup
180
- (TopicModel.batchCreate as Mock).mockResolvedValue(mockTopics);
181
-
182
- // Execute
183
- const result = await topicService.batchCreateTopics(mockTopics);
184
-
185
- // Assert
186
- expect(TopicModel.batchCreate).toHaveBeenCalledWith(mockTopics);
187
- expect(result).toBe(mockTopics);
188
- });
189
- });
190
-
191
- describe('getAllTopics', () => {
192
- it('should retrieve all topics', async () => {
193
- // Setup
194
- (TopicModel.queryAll as Mock).mockResolvedValue(mockTopics);
195
-
196
- // Execute
197
- const result = await topicService.getAllTopics();
198
-
199
- // Assert
200
- expect(TopicModel.queryAll).toHaveBeenCalled();
201
- expect(result).toBe(mockTopics);
202
- });
203
- });
204
-
205
- describe('searchTopics', () => {
206
- it('should return all topics that match the keyword', async () => {
207
- // Setup
208
- const keyword = 'search';
209
- (TopicModel.queryByKeyword as Mock).mockResolvedValue(mockTopics);
210
-
211
- // Execute
212
- const result = await topicService.searchTopics(keyword, undefined);
213
-
214
- // Assert
215
- expect(TopicModel.queryByKeyword).toHaveBeenCalledWith(keyword, undefined);
216
- expect(result).toBe(mockTopics);
217
- });
218
- });
219
-
220
- describe('countTopics', () => {
221
- it('should return false if no topics exist', async () => {
222
- // Setup
223
- (TopicModel.count as Mock).mockResolvedValue(0);
224
-
225
- // Execute
226
- const result = await topicService.countTopics();
227
-
228
- // Assert
229
- expect(TopicModel.count).toHaveBeenCalled();
230
- expect(result).toBe(0);
231
- });
232
-
233
- it('should return true if topics exist', async () => {
234
- // Setup
235
- (TopicModel.count as Mock).mockResolvedValue(1);
236
-
237
- // Execute
238
- const result = await topicService.countTopics();
239
-
240
- // Assert
241
- expect(TopicModel.count).toHaveBeenCalled();
242
- expect(result).toBe(1);
243
- });
244
- });
245
- });
@@ -1,75 +0,0 @@
1
- import { TopicModel } from '@/database/_deprecated/models/topic';
2
- import { ChatTopic } from '@/types/topic';
3
-
4
- import { CreateTopicParams, ITopicService, QueryTopicParams } from './type';
5
-
6
- export class ClientService implements ITopicService {
7
- async createTopic(params: CreateTopicParams): Promise<string> {
8
- const item = await TopicModel.create(params as any);
9
-
10
- if (!item) {
11
- throw new Error('topic create Error');
12
- }
13
-
14
- return item.id;
15
- }
16
-
17
- async batchCreateTopics(importTopics: ChatTopic[]) {
18
- return TopicModel.batchCreate(importTopics as any);
19
- }
20
-
21
- async cloneTopic(id: string, newTitle?: string) {
22
- return TopicModel.duplicateTopic(id, newTitle);
23
- }
24
-
25
- async getTopics(params: QueryTopicParams): Promise<ChatTopic[]> {
26
- return TopicModel.query(params);
27
- }
28
-
29
- async searchTopics(keyword: string, sessionId?: string) {
30
- return TopicModel.queryByKeyword(keyword, sessionId);
31
- }
32
-
33
- async getAllTopics() {
34
- return TopicModel.queryAll();
35
- }
36
-
37
- async countTopics() {
38
- return TopicModel.count();
39
- }
40
-
41
- // @ts-ignore
42
- async rankTopics() {
43
- throw new Error('Method not implemented.');
44
- }
45
-
46
- async updateTopicFavorite(id: string, favorite?: boolean) {
47
- return this.updateTopic(id, { favorite });
48
- }
49
-
50
- async updateTopicTitle(id: string, text: string) {
51
- return this.updateTopic(id, { title: text });
52
- }
53
-
54
- async updateTopic(id: string, data: Partial<ChatTopic>) {
55
- const favorite = typeof data.favorite !== 'undefined' ? (data.favorite ? 1 : 0) : undefined;
56
-
57
- return TopicModel.update(id, { ...data, favorite });
58
- }
59
-
60
- async removeTopic(id: string) {
61
- return TopicModel.delete(id);
62
- }
63
-
64
- async removeTopics(sessionId: string) {
65
- return TopicModel.batchDeleteBySessionId(sessionId);
66
- }
67
-
68
- async batchRemoveTopics(topics: string[]) {
69
- return TopicModel.batchDelete(topics);
70
- }
71
-
72
- async removeAllTopic() {
73
- return TopicModel.clearTable();
74
- }
75
- }
@@ -1,89 +0,0 @@
1
- import { INBOX_SESSION_ID } from '@/const/session';
2
- import { clientDB } from '@/database/client/db';
3
- import { TopicModel } from '@/database/models/topic';
4
- import { BaseClientService } from '@/services/baseClientService';
5
- import { ChatTopic } from '@/types/topic';
6
-
7
- import { ITopicService } from './type';
8
-
9
- export class ClientService extends BaseClientService implements ITopicService {
10
- private get topicModel(): TopicModel {
11
- return new TopicModel(clientDB as any, this.userId);
12
- }
13
-
14
- createTopic: ITopicService['createTopic'] = async (params) => {
15
- const item = await this.topicModel.create({
16
- ...params,
17
- sessionId: this.toDbSessionId(params.sessionId),
18
- } as any);
19
-
20
- if (!item) {
21
- throw new Error('topic create Error');
22
- }
23
-
24
- return item.id;
25
- };
26
-
27
- batchCreateTopics: ITopicService['batchCreateTopics'] = async (importTopics) => {
28
- const data = await this.topicModel.batchCreate(importTopics as any);
29
-
30
- return { added: data.length, ids: [], skips: [], success: true };
31
- };
32
-
33
- cloneTopic: ITopicService['cloneTopic'] = async (id, newTitle) => {
34
- const data = await this.topicModel.duplicate(id, newTitle);
35
- return data.topic.id;
36
- };
37
-
38
- getTopics: ITopicService['getTopics'] = async (params) => {
39
- const data = await this.topicModel.query({
40
- ...params,
41
- containerId: this.toDbSessionId(params.containerId),
42
- });
43
- return data as unknown as Promise<ChatTopic[]>;
44
- };
45
-
46
- searchTopics: ITopicService['searchTopics'] = async (keyword, sessionId) => {
47
- const data = await this.topicModel.queryByKeyword(keyword, this.toDbSessionId(sessionId));
48
-
49
- return data as unknown as Promise<ChatTopic[]>;
50
- };
51
-
52
- getAllTopics: ITopicService['getAllTopics'] = async () => {
53
- const data = await this.topicModel.queryAll();
54
-
55
- return data as unknown as Promise<ChatTopic[]>;
56
- };
57
-
58
- countTopics: ITopicService['countTopics'] = async (params) => {
59
- return this.topicModel.count(params);
60
- };
61
-
62
- rankTopics: ITopicService['rankTopics'] = async (limit) => {
63
- return this.topicModel.rank(limit);
64
- };
65
-
66
- updateTopic: ITopicService['updateTopic'] = async (id, data) => {
67
- return this.topicModel.update(id, data as any);
68
- };
69
-
70
- removeTopic: ITopicService['removeTopic'] = async (id) => {
71
- return this.topicModel.delete(id);
72
- };
73
-
74
- removeTopics: ITopicService['removeTopics'] = async (sessionId) => {
75
- return this.topicModel.batchDeleteBySessionId(this.toDbSessionId(sessionId));
76
- };
77
-
78
- batchRemoveTopics: ITopicService['batchRemoveTopics'] = async (topics) => {
79
- return this.topicModel.batchDelete(topics);
80
- };
81
-
82
- removeAllTopic: ITopicService['removeAllTopic'] = async () => {
83
- return this.topicModel.deleteAll();
84
- };
85
-
86
- private toDbSessionId(sessionId?: string | null) {
87
- return sessionId === INBOX_SESSION_ID ? null : sessionId;
88
- }
89
- }
@@ -1,212 +0,0 @@
1
- import { eq } from 'drizzle-orm';
2
- import { beforeEach, describe, expect, it, vi } from 'vitest';
3
-
4
- import { clientDB, initializeDB } from '@/database/client/db';
5
- import { sessions, topics, users } from '@/database/schemas';
6
- import { ChatTopic } from '@/types/topic';
7
-
8
- import { ClientService } from './client';
9
-
10
- // Mock data
11
- const userId = 'topic-user-test';
12
- const sessionId = 'topic-session';
13
- const mockTopicId = 'mock-topic-id';
14
-
15
- const mockTopic = {
16
- id: mockTopicId,
17
- title: 'Mock Topic',
18
- };
19
-
20
- const topicService = new ClientService(userId);
21
-
22
- beforeEach(async () => {
23
- await initializeDB();
24
-
25
- await clientDB.delete(users);
26
-
27
- // 创建测试数据
28
- await clientDB.transaction(async (tx) => {
29
- await tx.insert(users).values({ id: userId }).onConflictDoNothing();
30
- await tx.insert(sessions).values({ id: sessionId, userId });
31
- await tx.insert(topics).values({ ...mockTopic, sessionId, userId });
32
- });
33
- });
34
-
35
- describe('TopicService', () => {
36
- describe('createTopic', () => {
37
- it('should create a topic and return its id', async () => {
38
- // Setup
39
- const createParams = {
40
- title: 'New Topic',
41
- sessionId: sessionId,
42
- };
43
-
44
- // Execute
45
- const topicId = await topicService.createTopic(createParams);
46
-
47
- // Assert
48
- expect(topicId).toBeDefined();
49
- });
50
-
51
- it('should throw an error if topic creation fails', async () => {
52
- // Setup
53
- const createParams = {
54
- title: 'New Topic',
55
- sessionId: 123 as any, // sessionId should be string
56
- };
57
-
58
- // Execute & Assert
59
- await expect(topicService.createTopic(createParams)).rejects.toThrowError();
60
- });
61
- });
62
-
63
- describe('getTopics', () => {
64
- // Example for getTopics
65
- it('should query topics with given parameters', async () => {
66
- // Setup
67
- const queryParams = { containerId: sessionId };
68
-
69
- // Execute
70
- const data = await topicService.getTopics(queryParams);
71
-
72
- // Assert
73
- expect(data[0]).toMatchObject(mockTopic);
74
- });
75
- });
76
-
77
- describe('updateTopic', () => {
78
- // Example for updateFavorite
79
- it('should toggle favorite status of a topic', async () => {
80
- // Execute
81
- const result = await topicService.updateTopic(mockTopicId, { favorite: true });
82
-
83
- // Assert
84
- expect(result[0].favorite).toBeTruthy();
85
- });
86
-
87
- it('should update the title of a topic', async () => {
88
- // Setup
89
- const newTitle = 'Updated Topic Title';
90
-
91
- // Execute
92
- const result = await topicService.updateTopic(mockTopicId, { title: newTitle });
93
-
94
- // Assert
95
- expect(result[0].title).toEqual(newTitle);
96
- });
97
- });
98
-
99
- describe('removeTopic', () => {
100
- it('should remove a topic by id', async () => {
101
- // Execute
102
- await topicService.removeTopic(mockTopicId);
103
- const result = await clientDB.query.topics.findFirst({ where: eq(topics.id, mockTopicId) });
104
-
105
- // Assert
106
- expect(result).toBeUndefined();
107
- });
108
- });
109
-
110
- describe('removeTopics', () => {
111
- it('should remove all topics with a given session id', async () => {
112
- // Setup
113
- const sessionId = 'session-id';
114
-
115
- // Execute
116
- await topicService.removeTopics(sessionId);
117
- const result = await clientDB.query.topics.findMany({
118
- where: eq(topics.sessionId, sessionId),
119
- });
120
-
121
- expect(result.length).toEqual(0);
122
- });
123
- });
124
-
125
- describe('batchRemoveTopics', () => {
126
- it('should batch remove topics', async () => {
127
- await clientDB.insert(topics).values([{ id: 'topic-id-1', title: 'topic-title', userId }]);
128
- // Setup
129
- const topicIds = [mockTopicId, 'another-topic-id'];
130
-
131
- // Execute
132
- await topicService.batchRemoveTopics(topicIds);
133
-
134
- const count = await clientDB.$count(topics);
135
-
136
- // Assert
137
- expect(count).toBe(1);
138
- });
139
- });
140
-
141
- describe('removeAllTopic', () => {
142
- it('should clear all topics from the table', async () => {
143
- // Execute
144
- await topicService.removeAllTopic();
145
-
146
- const count = await clientDB.$count(topics);
147
- // Assert
148
- expect(count).toBe(0);
149
- });
150
- });
151
-
152
- describe('batchCreateTopics', () => {
153
- it('should batch create topics', async () => {
154
- // Execute
155
- const result = await topicService.batchCreateTopics([
156
- { id: 'topic-id-1', title: 'topic-title' },
157
- { id: 'topic-id-2', title: 'topic-title' },
158
- ] as ChatTopic[]);
159
-
160
- // Assert
161
- expect(result.success).toBeTruthy();
162
- expect(result.added).toBe(2);
163
- });
164
- });
165
-
166
- describe('getAllTopics', () => {
167
- it('should retrieve all topics', async () => {
168
- await clientDB.insert(topics).values([
169
- { id: 'topic-id-1', title: 'topic-title', userId },
170
- { id: 'topic-id-2', title: 'topic-title', userId },
171
- ]);
172
- // Execute
173
- const result = await topicService.getAllTopics();
174
-
175
- // Assert
176
- expect(result.length).toEqual(3);
177
- });
178
- });
179
-
180
- describe('searchTopics', () => {
181
- it('should return all topics that match the keyword', async () => {
182
- // Setup
183
- const keyword = 'Topic';
184
-
185
- // Execute
186
- const result = await topicService.searchTopics(keyword, sessionId);
187
-
188
- // Assert
189
- expect(result.length).toEqual(1);
190
- });
191
- it('should return empty topic if not match the keyword', async () => {
192
- // Setup
193
- const keyword = 'search';
194
-
195
- // Execute
196
- const result = await topicService.searchTopics(keyword, sessionId);
197
-
198
- // Assert
199
- expect(result.length).toEqual(0);
200
- });
201
- });
202
-
203
- describe('countTopics', () => {
204
- it('should return topic counts', async () => {
205
- // Execute
206
- const result = await topicService.countTopics();
207
-
208
- // Assert
209
- expect(result).toBe(1);
210
- });
211
- });
212
- });