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

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 (728) 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 +684 -0
  14. package/Dockerfile +1 -3
  15. package/README.md +2 -45
  16. package/README.zh-CN.md +2 -45
  17. package/apps/desktop/src/main/controllers/AuthCtr.ts +53 -39
  18. package/apps/desktop/src/main/controllers/MenuCtr.ts +5 -5
  19. package/apps/desktop/src/main/controllers/NotificationCtr.ts +29 -29
  20. package/apps/desktop/src/main/controllers/RemoteServerConfigCtr.ts +16 -16
  21. package/apps/desktop/src/main/controllers/ShortcutCtr.ts +2 -2
  22. package/apps/desktop/src/main/controllers/TrayMenuCtr.ts +18 -18
  23. package/apps/desktop/src/main/controllers/UpdaterCtr.ts +4 -4
  24. package/apps/desktop/src/main/controllers/__tests__/AuthCtr.test.ts +706 -0
  25. package/apps/desktop/src/main/controllers/__tests__/TrayMenuCtr.test.ts +5 -5
  26. package/apps/desktop/src/main/controllers/index.ts +4 -4
  27. package/apps/desktop/src/main/utils/next-electron-rsc.ts +7 -5
  28. package/apps/desktop/tsconfig.json +0 -1
  29. package/changelog/v1.json +232 -0
  30. package/docs/development/database-schema.dbml +12 -0
  31. package/docs/self-hosting/advanced/auth/next-auth/auth0.mdx +2 -2
  32. package/docs/self-hosting/advanced/auth/next-auth/auth0.zh-CN.mdx +2 -2
  33. package/docs/self-hosting/advanced/auth/next-auth/authelia.mdx +2 -2
  34. package/docs/self-hosting/advanced/auth/next-auth/authelia.zh-CN.mdx +2 -2
  35. package/docs/self-hosting/advanced/auth/next-auth/authentik.mdx +2 -2
  36. package/docs/self-hosting/advanced/auth/next-auth/authentik.zh-CN.mdx +2 -2
  37. package/docs/self-hosting/advanced/auth/next-auth/casdoor.mdx +2 -2
  38. package/docs/self-hosting/advanced/auth/next-auth/casdoor.zh-CN.mdx +2 -2
  39. package/docs/self-hosting/advanced/auth/next-auth/cloudflare-zero-trust.mdx +2 -2
  40. package/docs/self-hosting/advanced/auth/next-auth/cloudflare-zero-trust.zh-CN.mdx +2 -2
  41. package/docs/self-hosting/advanced/auth/next-auth/github.mdx +2 -2
  42. package/docs/self-hosting/advanced/auth/next-auth/github.zh-CN.mdx +2 -2
  43. package/docs/self-hosting/advanced/auth/next-auth/google.mdx +32 -29
  44. package/docs/self-hosting/advanced/auth/next-auth/keycloak.mdx +2 -2
  45. package/docs/self-hosting/advanced/auth/next-auth/keycloak.zh-CN.mdx +2 -2
  46. package/docs/self-hosting/advanced/auth/next-auth/logto.mdx +5 -3
  47. package/docs/self-hosting/advanced/auth/next-auth/logto.zh-CN.mdx +5 -3
  48. package/docs/self-hosting/advanced/auth/next-auth/microsoft-entra-id.mdx +2 -2
  49. package/docs/self-hosting/advanced/auth/next-auth/microsoft-entra-id.zh-CN.mdx +2 -2
  50. package/docs/self-hosting/advanced/auth/next-auth/okta.mdx +2 -2
  51. package/docs/self-hosting/advanced/auth/next-auth/okta.zh-CN.mdx +2 -2
  52. package/docs/self-hosting/advanced/auth/next-auth/wechat.mdx +2 -2
  53. package/docs/self-hosting/advanced/auth/next-auth/wechat.zh-CN.mdx +2 -2
  54. package/docs/self-hosting/advanced/auth/next-auth/zitadel.mdx +2 -2
  55. package/docs/self-hosting/advanced/auth/next-auth/zitadel.zh-CN.mdx +2 -2
  56. package/docs/self-hosting/advanced/auth.mdx +32 -21
  57. package/docs/self-hosting/advanced/auth.zh-CN.mdx +30 -19
  58. package/docs/self-hosting/advanced/feature-flags.mdx +0 -1
  59. package/docs/self-hosting/advanced/feature-flags.zh-CN.mdx +0 -1
  60. package/docs/self-hosting/advanced/online-search.mdx +30 -25
  61. package/docs/self-hosting/advanced/online-search.zh-CN.mdx +25 -23
  62. package/e2e/src/features/discover/detail-pages.feature +95 -0
  63. package/e2e/src/features/discover/interactions.feature +113 -0
  64. package/e2e/src/features/discover/smoke.feature +34 -1
  65. package/e2e/src/steps/discover/detail-pages.steps.ts +295 -0
  66. package/e2e/src/steps/discover/interactions.steps.ts +451 -0
  67. package/e2e/src/steps/discover/smoke.steps.ts +116 -4
  68. package/e2e/tsconfig.json +0 -1
  69. package/locales/ar/labs.json +4 -0
  70. package/locales/ar/models.json +15 -6
  71. package/locales/ar/oauth.json +1 -0
  72. package/locales/bg-BG/labs.json +4 -0
  73. package/locales/bg-BG/models.json +15 -6
  74. package/locales/bg-BG/oauth.json +1 -0
  75. package/locales/de-DE/labs.json +4 -0
  76. package/locales/de-DE/models.json +15 -6
  77. package/locales/de-DE/oauth.json +1 -0
  78. package/locales/en-US/labs.json +4 -0
  79. package/locales/en-US/models.json +15 -6
  80. package/locales/en-US/oauth.json +1 -0
  81. package/locales/es-ES/labs.json +4 -0
  82. package/locales/es-ES/models.json +15 -6
  83. package/locales/es-ES/oauth.json +1 -0
  84. package/locales/fa-IR/labs.json +4 -0
  85. package/locales/fa-IR/models.json +15 -6
  86. package/locales/fa-IR/oauth.json +1 -0
  87. package/locales/fr-FR/labs.json +4 -0
  88. package/locales/fr-FR/models.json +15 -6
  89. package/locales/fr-FR/oauth.json +1 -0
  90. package/locales/it-IT/labs.json +4 -0
  91. package/locales/it-IT/models.json +15 -6
  92. package/locales/it-IT/oauth.json +1 -0
  93. package/locales/ja-JP/labs.json +4 -0
  94. package/locales/ja-JP/models.json +15 -6
  95. package/locales/ja-JP/oauth.json +1 -0
  96. package/locales/ko-KR/labs.json +4 -0
  97. package/locales/ko-KR/models.json +21 -12
  98. package/locales/ko-KR/oauth.json +1 -0
  99. package/locales/nl-NL/labs.json +4 -0
  100. package/locales/nl-NL/models.json +15 -6
  101. package/locales/nl-NL/oauth.json +1 -0
  102. package/locales/pl-PL/labs.json +4 -0
  103. package/locales/pl-PL/models.json +15 -6
  104. package/locales/pl-PL/oauth.json +1 -0
  105. package/locales/pt-BR/labs.json +4 -0
  106. package/locales/pt-BR/models.json +15 -6
  107. package/locales/pt-BR/oauth.json +1 -0
  108. package/locales/ru-RU/labs.json +4 -0
  109. package/locales/ru-RU/models.json +15 -6
  110. package/locales/ru-RU/oauth.json +1 -0
  111. package/locales/tr-TR/labs.json +4 -0
  112. package/locales/tr-TR/models.json +15 -6
  113. package/locales/tr-TR/oauth.json +1 -0
  114. package/locales/vi-VN/labs.json +4 -0
  115. package/locales/vi-VN/models.json +15 -6
  116. package/locales/vi-VN/oauth.json +1 -0
  117. package/locales/zh-CN/labs.json +4 -0
  118. package/locales/zh-CN/models.json +15 -6
  119. package/locales/zh-CN/oauth.json +1 -0
  120. package/locales/zh-TW/labs.json +4 -0
  121. package/locales/zh-TW/models.json +15 -6
  122. package/locales/zh-TW/oauth.json +1 -0
  123. package/next.config.ts +2 -3
  124. package/package.json +76 -82
  125. package/packages/const/src/index.ts +0 -1
  126. package/packages/const/src/url.ts +1 -4
  127. package/packages/const/src/user.ts +5 -2
  128. package/packages/const/src/version.ts +3 -3
  129. package/packages/context-engine/src/index.ts +1 -6
  130. package/packages/context-engine/src/processors/GroupMessageFlatten.ts +12 -2
  131. package/packages/context-engine/src/processors/__tests__/GroupMessageFlatten.test.ts +73 -9
  132. package/packages/context-engine/src/providers/index.ts +0 -2
  133. package/packages/database/migrations/0041_improve_index.sql +10 -0
  134. package/packages/database/migrations/0042_improve_agent_index.sql +1 -0
  135. package/packages/database/migrations/0043_add_ai_model_settings.sql +1 -0
  136. package/packages/database/migrations/meta/0041_snapshot.json +7784 -0
  137. package/packages/database/migrations/meta/0042_snapshot.json +7800 -0
  138. package/packages/database/migrations/meta/0043_snapshot.json +8419 -0
  139. package/packages/database/migrations/meta/_journal.json +21 -0
  140. package/packages/database/package.json +2 -2
  141. package/packages/database/src/core/migrations.json +33 -0
  142. package/packages/database/src/core/web-server.ts +2 -1
  143. package/packages/database/src/models/__tests__/message.grouping.test.ts +812 -0
  144. package/packages/database/src/models/__tests__/message.test.ts +256 -233
  145. package/packages/database/src/models/agent.ts +16 -13
  146. package/packages/database/src/models/message.ts +90 -74
  147. package/packages/database/src/models/session.ts +80 -28
  148. package/packages/database/src/models/user.ts +2 -1
  149. package/packages/database/src/repositories/aiInfra/index.test.ts +198 -0
  150. package/packages/database/src/repositories/aiInfra/index.ts +2 -1
  151. package/packages/database/src/repositories/dataImporter/deprecated/__tests__/index.test.ts +2 -1
  152. package/packages/database/src/repositories/dataImporter/deprecated/index.ts +7 -1
  153. package/packages/database/src/schemas/agent.ts +13 -11
  154. package/packages/database/src/schemas/aiInfra.ts +2 -0
  155. package/packages/database/src/schemas/message.ts +5 -1
  156. package/packages/database/src/schemas/relations.ts +6 -4
  157. package/packages/database/src/schemas/session.ts +2 -0
  158. package/packages/database/src/schemas/topic.ts +6 -1
  159. package/packages/database/src/utils/__tests__/groupMessages.test.ts +145 -2
  160. package/packages/database/src/utils/groupMessages.ts +7 -5
  161. package/packages/electron-client-ipc/package.json +4 -1
  162. package/packages/file-loaders/package.json +1 -0
  163. package/packages/memory-extract/package.json +2 -2
  164. package/packages/model-bank/src/aiModels/anthropic.ts +0 -63
  165. package/packages/model-bank/src/aiModels/higress.ts +0 -55
  166. package/packages/model-bank/src/aiModels/infiniai.ts +21 -0
  167. package/packages/model-bank/src/aiModels/ollamacloud.ts +13 -0
  168. package/packages/model-bank/src/aiModels/siliconcloud.ts +19 -0
  169. package/packages/model-runtime/src/core/streams/openai/__snapshots__/responsesStream.test.ts.snap +0 -38
  170. package/packages/model-runtime/src/providers/minimax/index.ts +5 -5
  171. package/packages/model-runtime/src/providers/search1api/index.test.ts +2 -2
  172. package/packages/model-runtime/src/utils/googleErrorParser.test.ts +125 -0
  173. package/packages/model-runtime/src/utils/googleErrorParser.ts +103 -77
  174. package/packages/obervability-otel/package.json +1 -3
  175. package/packages/obervability-otel/src/node.ts +3 -7
  176. package/packages/types/src/discover/mcp.ts +6 -0
  177. package/packages/types/src/index.ts +0 -1
  178. package/packages/types/src/message/common/base.ts +13 -0
  179. package/packages/types/src/message/common/image.ts +8 -0
  180. package/packages/types/src/message/common/metadata.ts +39 -0
  181. package/packages/types/src/message/common/tools.ts +10 -0
  182. package/packages/types/src/message/db/params.ts +47 -1
  183. package/packages/types/src/message/ui/chat.ts +4 -1
  184. package/packages/types/src/message/ui/params.ts +49 -4
  185. package/packages/types/src/plugins/mcp.ts +4 -1
  186. package/packages/types/src/search.ts +16 -0
  187. package/packages/types/src/serverConfig.ts +2 -6
  188. package/packages/types/src/topic/topic.ts +14 -0
  189. package/packages/types/src/user/index.ts +2 -76
  190. package/packages/types/src/user/preference.ts +105 -0
  191. package/packages/types/src/user/settings/index.ts +22 -0
  192. package/packages/utils/src/apiKey.test.ts +139 -0
  193. package/packages/utils/src/client/clipboard.ts +2 -2
  194. package/packages/utils/src/client/exportFile.ts +10 -10
  195. package/packages/utils/src/client/parserPlaceholder.ts +18 -18
  196. package/packages/utils/src/client/topic.ts +10 -10
  197. package/packages/utils/src/client/xor-obfuscation.ts +11 -11
  198. package/packages/utils/src/server/auth.ts +6 -6
  199. package/packages/utils/src/server/geo.ts +9 -9
  200. package/packages/utils/src/server/xor.ts +7 -7
  201. package/packages/web-crawler/src/crawImpl/firecrawl.ts +39 -12
  202. package/packages/web-crawler/tsconfig.json +0 -1
  203. package/renovate.json +23 -1
  204. package/scripts/migrateServerDB/errorHint.js +1 -7
  205. package/scripts/migrateServerDB/index.ts +2 -1
  206. package/src/app/(backend)/webapi/revalidate/route.ts +1 -1
  207. package/src/app/[variants]/(auth)/signup/[[...signup]]/page.tsx +1 -8
  208. package/src/app/[variants]/(main)/(mobile)/me/(home)/__tests__/useCategory.test.tsx +9 -0
  209. package/src/app/[variants]/(main)/(mobile)/me/(home)/features/UserBanner.tsx +3 -6
  210. package/src/app/[variants]/(main)/(mobile)/me/(home)/layout.tsx +0 -2
  211. package/src/app/[variants]/(main)/_layout/Desktop/SideBar/TopActions.tsx +1 -4
  212. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/V1Mobile/index.tsx +2 -2
  213. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/V1Mobile/useSend.ts +6 -4
  214. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/useSend.ts +15 -10
  215. package/src/app/[variants]/(main)/chat/@session/features/SessionListContent/List/Item/Actions.tsx +3 -28
  216. package/src/app/[variants]/(main)/chat/@session/features/SessionListContent/List/Item/index.tsx +4 -2
  217. package/src/app/[variants]/(main)/chat/_layout/Desktop/index.tsx +0 -2
  218. package/src/app/[variants]/(main)/chat/_layout/Mobile.tsx +1 -5
  219. package/src/app/[variants]/(main)/chat/settings/features/HeaderContent.tsx +2 -62
  220. package/src/app/[variants]/(main)/discover/(list)/features/Pagination.tsx +1 -0
  221. package/src/app/[variants]/(main)/discover/(list)/features/SortButton/index.tsx +1 -1
  222. package/src/app/[variants]/(main)/discover/(list)/mcp/features/List/Item.tsx +1 -0
  223. package/src/app/[variants]/(main)/discover/(list)/model/features/List/Item.tsx +1 -0
  224. package/src/app/[variants]/(main)/discover/(list)/provider/features/List/Item.tsx +1 -0
  225. package/src/app/[variants]/(main)/discover/components/CategoryMenu.tsx +9 -1
  226. package/src/app/[variants]/(main)/image/@topic/features/Topics/TopicList.tsx +1 -0
  227. package/src/app/[variants]/(main)/image/features/PromptInput/index.tsx +1 -1
  228. package/src/app/[variants]/(main)/image/page.tsx +0 -2
  229. package/src/app/[variants]/(main)/labs/components/LabCard.tsx +8 -6
  230. package/src/app/[variants]/(main)/labs/page.tsx +19 -22
  231. package/src/app/[variants]/(main)/profile/_layout/Desktop/index.tsx +23 -24
  232. package/src/app/[variants]/(main)/profile/_layout/Mobile/index.tsx +5 -9
  233. package/src/app/[variants]/(main)/settings/_layout/Desktop/index.tsx +0 -2
  234. package/src/app/[variants]/(main)/settings/_layout/Mobile/index.tsx +0 -2
  235. package/src/app/[variants]/(main)/settings/provider/(list)/ProviderGrid/Card.tsx +1 -1
  236. package/src/app/[variants]/(main)/settings/provider/detail/azure/index.tsx +6 -8
  237. package/src/app/[variants]/(main)/settings/provider/detail/azureai/index.tsx +1 -1
  238. package/src/app/[variants]/(main)/settings/provider/detail/bedrock/index.tsx +1 -1
  239. package/src/app/[variants]/(main)/settings/provider/detail/cloudflare/index.tsx +1 -1
  240. package/src/app/[variants]/(main)/settings/provider/detail/comfyui/index.tsx +1 -1
  241. package/src/app/[variants]/(main)/settings/provider/detail/github/index.tsx +1 -1
  242. package/src/app/[variants]/(main)/settings/provider/detail/vertexai/index.tsx +1 -1
  243. package/src/app/[variants]/(main)/settings/provider/features/ProviderConfig/index.tsx +2 -4
  244. package/src/app/[variants]/layout.tsx +1 -0
  245. package/src/app/[variants]/loading/index.tsx +1 -10
  246. package/src/app/[variants]/oauth/ResultLayout.tsx +47 -0
  247. package/src/app/[variants]/oauth/callback/error/page.tsx +20 -33
  248. package/src/app/[variants]/oauth/callback/layout.tsx +1 -0
  249. package/src/app/[variants]/oauth/callback/success/page.tsx +8 -22
  250. package/src/app/[variants]/oauth/consent/[uid]/Consent/BuiltinConsent.tsx +47 -0
  251. package/src/app/[variants]/oauth/consent/[uid]/{Consent.tsx → Consent/index.tsx} +12 -1
  252. package/src/app/[variants]/oauth/consent/[uid]/Login.tsx +19 -2
  253. package/src/app/sitemap.tsx +7 -1
  254. package/src/components/InvalidAPIKey/APIKeyForm/Bedrock.tsx +8 -13
  255. package/src/components/Link.tsx +12 -0
  256. package/src/components/Skeleton/SkeletonSwitch.tsx +13 -0
  257. package/src/components/Skeleton/index.ts +2 -0
  258. package/src/components/Thinking/index.tsx +4 -3
  259. package/src/config/db.ts +0 -5
  260. package/src/config/featureFlags/schema.test.ts +0 -2
  261. package/src/config/featureFlags/schema.ts +0 -6
  262. package/src/config/modelProviders/ai21.ts +1 -16
  263. package/src/config/modelProviders/ai302.ts +1 -128
  264. package/src/config/modelProviders/ai360.ts +1 -32
  265. package/src/config/modelProviders/anthropic.ts +1 -94
  266. package/src/config/modelProviders/azure.ts +1 -51
  267. package/src/config/modelProviders/baichuan.ts +1 -57
  268. package/src/config/modelProviders/bedrock.ts +1 -276
  269. package/src/config/modelProviders/cloudflare.ts +1 -64
  270. package/src/config/modelProviders/deepseek.ts +1 -19
  271. package/src/config/modelProviders/fireworksai.ts +1 -174
  272. package/src/config/modelProviders/giteeai.ts +1 -135
  273. package/src/config/modelProviders/github.ts +1 -254
  274. package/src/config/modelProviders/google.ts +1 -130
  275. package/src/config/modelProviders/groq.ts +1 -119
  276. package/src/config/modelProviders/higress.ts +1 -1736
  277. package/src/config/modelProviders/huggingface.ts +1 -54
  278. package/src/config/modelProviders/hunyuan.ts +1 -83
  279. package/src/config/modelProviders/infiniai.ts +1 -74
  280. package/src/config/modelProviders/internlm.ts +1 -20
  281. package/src/config/modelProviders/minimax.ts +1 -1
  282. package/src/config/modelProviders/mistral.ts +1 -95
  283. package/src/config/modelProviders/modelscope.ts +1 -27
  284. package/src/config/modelProviders/moonshot.ts +1 -29
  285. package/src/config/modelProviders/novita.ts +1 -105
  286. package/src/config/modelProviders/ollama.ts +1 -325
  287. package/src/config/modelProviders/openai.ts +1 -242
  288. package/src/config/modelProviders/openrouter.ts +1 -240
  289. package/src/config/modelProviders/perplexity.ts +1 -45
  290. package/src/config/modelProviders/ppio.ts +1 -152
  291. package/src/config/modelProviders/qiniu.ts +2 -19
  292. package/src/config/modelProviders/qwen.ts +1 -245
  293. package/src/config/modelProviders/search1api.ts +1 -34
  294. package/src/config/modelProviders/sensenova.ts +1 -69
  295. package/src/config/modelProviders/siliconcloud.ts +1 -417
  296. package/src/config/modelProviders/spark.ts +1 -59
  297. package/src/config/modelProviders/stepfun.ts +1 -98
  298. package/src/config/modelProviders/taichu.ts +1 -18
  299. package/src/config/modelProviders/togetherai.ts +1 -274
  300. package/src/config/modelProviders/upstage.ts +1 -28
  301. package/src/config/modelProviders/wenxin.ts +1 -140
  302. package/src/config/modelProviders/xai.ts +1 -38
  303. package/src/config/modelProviders/zeroone.ts +1 -81
  304. package/src/config/modelProviders/zhipu.ts +1 -108
  305. package/src/envs/app.ts +5 -8
  306. package/src/envs/auth.ts +0 -179
  307. package/src/features/AgentSetting/AgentPlugin/index.tsx +2 -2
  308. package/src/features/ChatInput/ActionBar/STT/browser.tsx +2 -2
  309. package/src/features/ChatInput/ActionBar/STT/openai.tsx +2 -2
  310. package/src/features/ChatInput/ActionBar/Tools/useControls.tsx +1 -3
  311. package/src/features/ChatInput/ActionBar/index.tsx +2 -2
  312. package/src/features/ChatInput/InputEditor/index.tsx +2 -2
  313. package/src/features/Conversation/Error/ErrorJsonViewer.tsx +4 -3
  314. package/src/features/Conversation/Error/OllamaBizError/index.tsx +7 -2
  315. package/src/features/Conversation/Error/index.tsx +15 -5
  316. package/src/features/Conversation/MarkdownElements/LobeArtifact/Render/index.tsx +2 -2
  317. package/src/features/Conversation/Messages/Assistant/Extra/index.tsx +2 -2
  318. package/src/features/Conversation/Messages/Assistant/MessageContent.tsx +5 -3
  319. package/src/features/Conversation/Messages/Assistant/Tool/Inspector/BuiltinPluginTitle.tsx +2 -2
  320. package/src/features/Conversation/Messages/Assistant/Tool/Inspector/ToolTitle.tsx +4 -2
  321. package/src/features/Conversation/Messages/Assistant/Tool/Render/CustomRender.tsx +2 -2
  322. package/src/features/Conversation/Messages/Assistant/Tool/Render/index.tsx +2 -2
  323. package/src/features/Conversation/Messages/Assistant/Tool/index.tsx +2 -2
  324. package/src/features/Conversation/Messages/Assistant/index.tsx +4 -4
  325. package/src/features/Conversation/Messages/Default.tsx +2 -2
  326. package/src/features/Conversation/Messages/Group/Actions/WithContentId.tsx +152 -0
  327. package/src/features/Conversation/Messages/Group/Actions/WithoutContentId.tsx +70 -0
  328. package/src/features/Conversation/Messages/Group/Actions/index.tsx +21 -0
  329. package/src/features/Conversation/Messages/Group/ContentBlock.tsx +91 -0
  330. package/src/features/Conversation/Messages/Group/EditState.tsx +51 -0
  331. package/src/features/Conversation/Messages/Group/Error/index.tsx +53 -0
  332. package/src/features/Conversation/Messages/Group/GroupChildren.tsx +73 -0
  333. package/src/features/Conversation/Messages/Group/MessageContent.tsx +39 -0
  334. package/src/features/Conversation/Messages/Group/Tool/Inspector/BuiltinPluginTitle.tsx +49 -0
  335. package/src/features/Conversation/Messages/Group/Tool/Inspector/Debug.tsx +70 -0
  336. package/src/features/Conversation/Messages/Group/Tool/Inspector/PluginResult.tsx +34 -0
  337. package/src/features/Conversation/Messages/Group/Tool/Inspector/PluginState.tsx +18 -0
  338. package/src/features/Conversation/Messages/Group/Tool/Inspector/Settings.tsx +40 -0
  339. package/src/features/Conversation/Messages/Group/Tool/Inspector/ToolTitle.tsx +92 -0
  340. package/src/features/Conversation/Messages/Group/Tool/Inspector/index.tsx +176 -0
  341. package/src/features/Conversation/Messages/Group/Tool/Render/Arguments/ObjectEntity.tsx +81 -0
  342. package/src/features/Conversation/Messages/Group/Tool/Render/Arguments/ValueCell.tsx +43 -0
  343. package/src/features/Conversation/Messages/Group/Tool/Render/Arguments/index.tsx +134 -0
  344. package/src/features/Conversation/Messages/Group/Tool/Render/CustomRender.tsx +88 -0
  345. package/src/features/Conversation/Messages/Group/Tool/Render/ErrorResponse.tsx +35 -0
  346. package/src/features/Conversation/Messages/Group/Tool/Render/LoadingPlaceholder/index.tsx +29 -0
  347. package/src/features/Conversation/Messages/Group/Tool/Render/PluginSettings.tsx +66 -0
  348. package/src/features/Conversation/Messages/Group/Tool/Render/index.tsx +105 -0
  349. package/src/features/Conversation/Messages/Group/Tool/index.tsx +75 -0
  350. package/src/features/Conversation/Messages/Group/Tools.tsx +46 -0
  351. package/src/features/Conversation/Messages/Group/index.tsx +140 -0
  352. package/src/features/Conversation/Messages/User/Extra.tsx +2 -2
  353. package/src/features/Conversation/Messages/User/index.tsx +4 -4
  354. package/src/features/Conversation/Messages/index.tsx +15 -3
  355. package/src/features/Conversation/components/AutoScroll.tsx +2 -2
  356. package/src/features/Conversation/components/Extras/Usage/UsageDetail/index.tsx +9 -6
  357. package/src/features/Conversation/components/ShareMessageModal/ShareImage/Preview.tsx +2 -2
  358. package/src/features/DataImporter/index.tsx +15 -60
  359. package/src/features/DevPanel/PostgresViewer/usePgTable.ts +3 -2
  360. package/src/features/MCP/utils.test.ts +91 -0
  361. package/src/features/MCP/utils.ts +20 -2
  362. package/src/features/PluginStore/Content.tsx +2 -3
  363. package/src/features/PluginStore/McpList/index.tsx +6 -2
  364. package/src/features/PluginTag/index.tsx +1 -3
  365. package/src/features/PluginsUI/Render/BuiltinType/index.test.tsx +37 -28
  366. package/src/features/Portal/Artifacts/Body/index.tsx +2 -2
  367. package/src/helpers/isCanUseFC.ts +0 -8
  368. package/src/hooks/useEnabledChatModels.ts +0 -8
  369. package/src/hooks/useInterceptingRoutes.test.ts +21 -3
  370. package/src/hooks/useModelContextWindowTokens.ts +0 -8
  371. package/src/hooks/useModelHasContextWindowToken.ts +1 -10
  372. package/src/hooks/useModelSupportFiles.ts +1 -11
  373. package/src/hooks/useModelSupportReasoning.ts +1 -11
  374. package/src/hooks/useModelSupportToolUse.ts +1 -11
  375. package/src/hooks/useModelSupportVision.ts +1 -11
  376. package/src/layout/AuthProvider/Clerk/index.tsx +2 -16
  377. package/src/libs/next-auth/auth.config.ts +3 -6
  378. package/src/libs/next-auth/sso-providers/auth0.ts +0 -7
  379. package/src/libs/next-auth/sso-providers/authelia.ts +3 -5
  380. package/src/libs/next-auth/sso-providers/authentik.ts +0 -7
  381. package/src/libs/next-auth/sso-providers/cloudflare-zero-trust.ts +3 -6
  382. package/src/libs/next-auth/sso-providers/cognito.ts +1 -5
  383. package/src/libs/next-auth/sso-providers/generic-oidc.ts +3 -5
  384. package/src/libs/next-auth/sso-providers/github.ts +0 -6
  385. package/src/libs/next-auth/sso-providers/google.ts +0 -2
  386. package/src/libs/next-auth/sso-providers/index.ts +0 -2
  387. package/src/libs/next-auth/sso-providers/keycloak.ts +0 -3
  388. package/src/libs/next-auth/sso-providers/logto.ts +3 -5
  389. package/src/libs/next-auth/sso-providers/okta.ts +0 -4
  390. package/src/libs/next-auth/sso-providers/zitadel.ts +0 -7
  391. package/src/libs/oidc-provider/provider.ts +1 -1
  392. package/src/libs/trpc/client/index.ts +0 -1
  393. package/src/libs/trpc/client/lambda.ts +8 -5
  394. package/src/libs/trpc/lambda/context.ts +4 -1
  395. package/src/locales/default/labs.ts +4 -0
  396. package/src/locales/default/oauth.ts +1 -0
  397. package/src/server/globalConfig/index.ts +0 -23
  398. package/src/server/modules/AssistantStore/index.ts +1 -1
  399. package/src/server/modules/ModelRuntime/trace.ts +11 -4
  400. package/src/server/routers/desktop/mcp.ts +1 -3
  401. package/src/server/routers/lambda/__tests__/integration/message.integration.test.ts +810 -70
  402. package/src/server/routers/lambda/config/__snapshots__/index.test.ts.snap +175 -12
  403. package/src/server/routers/lambda/config/index.test.ts +38 -30
  404. package/src/server/routers/lambda/market/index.ts +4 -2
  405. package/src/server/routers/lambda/message.ts +60 -52
  406. package/src/server/routers/lambda/session.ts +8 -5
  407. package/src/server/routers/lambda/topic.ts +7 -1
  408. package/src/server/routers/lambda/user.ts +32 -31
  409. package/src/server/routers/tools/mcp.ts +2 -3
  410. package/src/server/routers/tools/search.test.ts +1 -7
  411. package/src/server/routers/tools/search.ts +1 -4
  412. package/src/server/services/mcp/deps/MCPSystemDepsCheckService.test.ts +541 -0
  413. package/src/server/services/message/__tests__/index.test.ts +348 -0
  414. package/src/server/services/message/index.ts +159 -0
  415. package/src/server/services/search/impls/firecrawl/index.ts +51 -11
  416. package/src/server/services/search/impls/firecrawl/type.ts +60 -9
  417. package/src/services/__tests__/tool.test.ts +0 -3
  418. package/src/services/aiModel/index.test.ts +3 -6
  419. package/src/services/aiModel/index.ts +55 -7
  420. package/src/services/aiProvider/index.test.ts +2 -5
  421. package/src/services/aiProvider/index.ts +47 -7
  422. package/src/services/chat/chat.test.ts +13 -40
  423. package/src/services/chat/contextEngineering.test.ts +0 -30
  424. package/src/services/chat/contextEngineering.ts +7 -17
  425. package/src/services/chat/helper.ts +7 -31
  426. package/src/services/chat/index.ts +5 -10
  427. package/src/services/chat/types.ts +1 -1
  428. package/src/services/chatGroup/index.ts +64 -9
  429. package/src/services/config.ts +1 -65
  430. package/src/services/export/index.ts +9 -4
  431. package/src/services/file/index.ts +59 -10
  432. package/src/services/import/index.ts +132 -7
  433. package/src/services/mcp.test.ts +777 -0
  434. package/src/services/mcp.ts +40 -6
  435. package/src/services/message/index.ts +203 -10
  436. package/src/services/message/{__tests__/server.test.ts → server.test.ts} +3 -3
  437. package/src/services/models.ts +2 -11
  438. package/src/services/plugin/index.test.ts +8 -0
  439. package/src/services/plugin/index.ts +51 -10
  440. package/src/services/session/index.test.ts +8 -0
  441. package/src/services/session/index.ts +143 -10
  442. package/src/services/tableViewer/client.ts +12 -15
  443. package/src/services/thread/index.test.ts +8 -0
  444. package/src/services/thread/index.ts +37 -7
  445. package/src/services/topic/index.test.ts +8 -0
  446. package/src/services/topic/index.ts +74 -10
  447. package/src/services/user/index.test.ts +8 -0
  448. package/src/services/user/index.ts +50 -11
  449. package/src/store/aiInfra/slices/aiModel/action.test.ts +17 -9
  450. package/src/store/chat/helpers.test.ts +99 -0
  451. package/src/store/chat/helpers.ts +21 -2
  452. package/src/store/chat/selectors.ts +1 -1
  453. package/src/store/chat/slices/aiChat/actions/__tests__/generateAIChat.test.ts +17 -251
  454. package/src/store/chat/slices/aiChat/actions/__tests__/generateAIChatV2.test.ts +339 -7
  455. package/src/store/chat/slices/aiChat/actions/__tests__/helpers.ts +9 -5
  456. package/src/store/chat/slices/aiChat/actions/generateAIChat.ts +49 -178
  457. package/src/store/chat/slices/aiChat/actions/generateAIChatV2.ts +272 -14
  458. package/src/store/chat/slices/aiChat/actions/generateAIGroupChat.ts +7 -2
  459. package/src/store/chat/slices/builtinTool/actions/index.ts +1 -4
  460. package/src/store/chat/slices/builtinTool/actions/search.ts +3 -3
  461. package/src/store/chat/slices/message/action.test.ts +157 -16
  462. package/src/store/chat/slices/message/action.ts +153 -77
  463. package/src/store/chat/slices/message/reducer.test.ts +363 -5
  464. package/src/store/chat/slices/message/reducer.ts +87 -3
  465. package/src/store/chat/slices/message/{selectors.test.ts → selectors/chat.test.ts} +266 -30
  466. package/src/store/chat/slices/message/{selectors.ts → selectors/chat.ts} +29 -79
  467. package/src/store/chat/slices/message/selectors/index.ts +2 -0
  468. package/src/store/chat/slices/message/selectors/messageState.test.ts +36 -0
  469. package/src/store/chat/slices/message/selectors/messageState.ts +80 -0
  470. package/src/store/chat/slices/plugin/action.test.ts +118 -157
  471. package/src/store/chat/slices/plugin/action.ts +53 -68
  472. package/src/store/chat/slices/thread/action.test.ts +13 -4
  473. package/src/store/chat/slices/thread/action.ts +3 -1
  474. package/src/store/chat/slices/topic/action.test.ts +1 -1
  475. package/src/store/chat/slices/topic/action.ts +1 -2
  476. package/src/store/chat/slices/topic/reducer.ts +1 -2
  477. package/src/store/file/slices/chat/action.ts +1 -4
  478. package/src/store/file/slices/fileManager/action.ts +2 -3
  479. package/src/store/global/store.ts +1 -7
  480. package/src/store/session/slices/sessionGroup/action.test.ts +5 -5
  481. package/src/store/tool/selectors/tool.test.ts +1 -1
  482. package/src/store/tool/selectors/tool.ts +6 -8
  483. package/src/store/tool/slices/builtin/action.test.ts +83 -35
  484. package/src/store/tool/slices/builtin/action.ts +0 -9
  485. package/src/store/tool/slices/builtin/selectors.test.ts +4 -30
  486. package/src/store/tool/slices/builtin/selectors.ts +15 -21
  487. package/src/store/tool/slices/mcpStore/action.test.ts +95 -3
  488. package/src/store/tool/slices/mcpStore/action.ts +177 -53
  489. package/src/store/tool/slices/oldStore/initialState.ts +1 -2
  490. package/src/store/user/initialState.ts +1 -7
  491. package/src/store/user/selectors.ts +1 -5
  492. package/src/store/user/slices/common/action.test.ts +1 -4
  493. package/src/store/user/slices/common/action.ts +5 -4
  494. package/src/store/user/slices/preference/action.ts +8 -1
  495. package/src/store/user/slices/preference/selectors/index.ts +2 -0
  496. package/src/store/user/slices/preference/selectors/labPrefer.ts +13 -0
  497. package/src/store/user/slices/preference/{selectors.ts → selectors/preference.ts} +0 -2
  498. package/src/store/user/slices/settings/selectors/index.ts +1 -0
  499. package/src/store/user/slices/settings/selectors/keyVaults.ts +21 -0
  500. package/src/store/user/store.ts +0 -3
  501. package/src/tools/index.ts +0 -6
  502. package/src/tools/renders.ts +0 -3
  503. package/src/tools/web-browsing/Portal/Search/Footer.tsx +2 -2
  504. package/src/tools/web-browsing/Render/Search/ConfigForm/Form.tsx +1 -1
  505. package/tsconfig.json +9 -3
  506. package/packages/const/src/guide.ts +0 -89
  507. package/packages/context-engine/src/providers/InboxGuide.ts +0 -102
  508. package/packages/context-engine/src/providers/__tests__/InboxGuideProvider.test.ts +0 -121
  509. package/packages/utils/src/_deprecated/__snapshots__/parseModels.test.ts.snap +0 -104
  510. package/packages/utils/src/_deprecated/parseModels.test.ts +0 -287
  511. package/packages/utils/src/_deprecated/parseModels.ts +0 -165
  512. package/src/app/(backend)/trpc/edge/[trpc]/route.ts +0 -26
  513. package/src/app/[variants]/(main)/(mobile)/me/data/features/Category.tsx +0 -48
  514. package/src/app/[variants]/(main)/(mobile)/me/data/features/Header.tsx +0 -33
  515. package/src/app/[variants]/(main)/(mobile)/me/data/layout.tsx +0 -13
  516. package/src/app/[variants]/(main)/(mobile)/me/data/loading.tsx +0 -5
  517. package/src/app/[variants]/(main)/(mobile)/me/data/page.tsx +0 -29
  518. package/src/app/[variants]/(main)/chat/features/Migration/DBReader.ts +0 -290
  519. package/src/app/[variants]/(main)/chat/features/Migration/ExportConfigButton.tsx +0 -35
  520. package/src/app/[variants]/(main)/chat/features/Migration/Failed.tsx +0 -120
  521. package/src/app/[variants]/(main)/chat/features/Migration/Modal.tsx +0 -81
  522. package/src/app/[variants]/(main)/chat/features/Migration/Start.tsx +0 -108
  523. package/src/app/[variants]/(main)/chat/features/Migration/UpgradeButton.tsx +0 -71
  524. package/src/app/[variants]/(main)/chat/features/Migration/const.ts +0 -15
  525. package/src/app/[variants]/(main)/chat/features/Migration/index.tsx +0 -50
  526. package/src/app/[variants]/loading/Client/Content.tsx +0 -48
  527. package/src/app/[variants]/loading/Client/Error.tsx +0 -27
  528. package/src/app/[variants]/loading/Client/Redirect.tsx +0 -47
  529. package/src/app/[variants]/loading/Client/index.tsx +0 -22
  530. package/src/components/InnerLink.tsx +0 -20
  531. package/src/database/_deprecated/core/__tests__/db-upgrade.test.ts +0 -42
  532. package/src/database/_deprecated/core/__tests__/db.test.ts +0 -79
  533. package/src/database/_deprecated/core/__tests__/model.test.ts +0 -55
  534. package/src/database/_deprecated/core/db.ts +0 -246
  535. package/src/database/_deprecated/core/index.ts +0 -2
  536. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/fixtures/input.json +0 -55
  537. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/fixtures/output.json +0 -60
  538. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/index.test.ts +0 -14
  539. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/index.ts +0 -22
  540. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/type.ts +0 -105
  541. package/src/database/_deprecated/core/model.ts +0 -218
  542. package/src/database/_deprecated/core/schemas.ts +0 -88
  543. package/src/database/_deprecated/core/types/db.ts +0 -15
  544. package/src/database/_deprecated/models/__DEBUG.ts +0 -124
  545. package/src/database/_deprecated/models/__tests__/file.test.ts +0 -83
  546. package/src/database/_deprecated/models/__tests__/message.test.ts +0 -426
  547. package/src/database/_deprecated/models/__tests__/plugin.test.ts +0 -81
  548. package/src/database/_deprecated/models/__tests__/session.test.ts +0 -253
  549. package/src/database/_deprecated/models/__tests__/sessionGroup.test.ts +0 -220
  550. package/src/database/_deprecated/models/__tests__/topic.test.ts +0 -523
  551. package/src/database/_deprecated/models/__tests__/user.test.ts +0 -82
  552. package/src/database/_deprecated/models/file.ts +0 -51
  553. package/src/database/_deprecated/models/message.ts +0 -277
  554. package/src/database/_deprecated/models/plugin.ts +0 -62
  555. package/src/database/_deprecated/models/session.ts +0 -271
  556. package/src/database/_deprecated/models/sessionGroup.ts +0 -93
  557. package/src/database/_deprecated/models/topic.ts +0 -250
  558. package/src/database/_deprecated/models/user.ts +0 -69
  559. package/src/database/_deprecated/schemas/files.ts +0 -39
  560. package/src/database/_deprecated/schemas/message.ts +0 -50
  561. package/src/database/_deprecated/schemas/plugin.ts +0 -12
  562. package/src/database/_deprecated/schemas/session.ts +0 -54
  563. package/src/database/_deprecated/schemas/sessionGroup.ts +0 -8
  564. package/src/database/_deprecated/schemas/topic.ts +0 -12
  565. package/src/database/_deprecated/schemas/user.ts +0 -40
  566. package/src/envs/__tests__/auth.test.ts +0 -200
  567. package/src/features/DataImporter/_deprecated.ts +0 -43
  568. package/src/features/InitClientDB/EnableModal.tsx +0 -118
  569. package/src/features/InitClientDB/ErrorResult.tsx +0 -143
  570. package/src/features/InitClientDB/InitIndicator.tsx +0 -124
  571. package/src/features/InitClientDB/PGliteIcon.tsx +0 -28
  572. package/src/features/InitClientDB/features/DatabaseRepair/Backup.tsx +0 -75
  573. package/src/features/InitClientDB/features/DatabaseRepair/Diagnosis.tsx +0 -98
  574. package/src/features/InitClientDB/features/DatabaseRepair/Repair.tsx +0 -218
  575. package/src/features/InitClientDB/features/DatabaseRepair/index.tsx +0 -91
  576. package/src/features/InitClientDB/index.tsx +0 -37
  577. package/src/hooks/_header.ts +0 -23
  578. package/src/libs/next-auth/sso-providers/azure-ad.ts +0 -33
  579. package/src/libs/trpc/client/edge.ts +0 -26
  580. package/src/libs/trpc/edge/context.ts +0 -71
  581. package/src/libs/trpc/edge/index.ts +0 -45
  582. package/src/libs/trpc/edge/init.ts +0 -26
  583. package/src/libs/trpc/edge/middleware/jwtPayload.test.ts +0 -75
  584. package/src/libs/trpc/edge/middleware/jwtPayload.ts +0 -14
  585. package/src/migrations/FromV0ToV1.ts +0 -10
  586. package/src/migrations/FromV1ToV2/fixtures/input-v1-session.json +0 -191
  587. package/src/migrations/FromV1ToV2/fixtures/output-v2.json +0 -202
  588. package/src/migrations/FromV1ToV2/index.ts +0 -82
  589. package/src/migrations/FromV1ToV2/migrations.test.ts +0 -224
  590. package/src/migrations/FromV1ToV2/types/v1.ts +0 -78
  591. package/src/migrations/FromV1ToV2/types/v2.ts +0 -52
  592. package/src/migrations/FromV2ToV3/fixtures/input-v2-session.json +0 -72
  593. package/src/migrations/FromV2ToV3/fixtures/output-v3-from-v1.json +0 -203
  594. package/src/migrations/FromV2ToV3/fixtures/output-v3.json +0 -74
  595. package/src/migrations/FromV2ToV3/index.ts +0 -30
  596. package/src/migrations/FromV2ToV3/migrations.test.ts +0 -42
  597. package/src/migrations/FromV2ToV3/types/v3.ts +0 -27
  598. package/src/migrations/FromV3ToV4/fixtures/azure-input-v3.json +0 -79
  599. package/src/migrations/FromV3ToV4/fixtures/azure-output-v4.json +0 -75
  600. package/src/migrations/FromV3ToV4/fixtures/ollama-input-v3.json +0 -85
  601. package/src/migrations/FromV3ToV4/fixtures/ollama-output-v4.json +0 -86
  602. package/src/migrations/FromV3ToV4/fixtures/openai-input-v3.json +0 -77
  603. package/src/migrations/FromV3ToV4/fixtures/openai-output-v4.json +0 -77
  604. package/src/migrations/FromV3ToV4/fixtures/openrouter-input-v3.json +0 -82
  605. package/src/migrations/FromV3ToV4/fixtures/openrouter-output-v4.json +0 -85
  606. package/src/migrations/FromV3ToV4/fixtures/output-v4-from-v1.json +0 -203
  607. package/src/migrations/FromV3ToV4/index.ts +0 -102
  608. package/src/migrations/FromV3ToV4/migrations.test.ts +0 -195
  609. package/src/migrations/FromV3ToV4/types/v3.ts +0 -52
  610. package/src/migrations/FromV3ToV4/types/v4.ts +0 -37
  611. package/src/migrations/FromV4ToV5/fixtures/from-v1-to-v5-output.json +0 -245
  612. package/src/migrations/FromV4ToV5/fixtures/function-input-v4.json +0 -96
  613. package/src/migrations/FromV4ToV5/fixtures/function-output-v5.json +0 -120
  614. package/src/migrations/FromV4ToV5/index.ts +0 -58
  615. package/src/migrations/FromV4ToV5/migrations.test.ts +0 -49
  616. package/src/migrations/FromV4ToV5/types/v4.ts +0 -21
  617. package/src/migrations/FromV4ToV5/types/v5.ts +0 -27
  618. package/src/migrations/FromV5ToV6/fixtures/from-v1-to-v6-output.json +0 -247
  619. package/src/migrations/FromV5ToV6/fixtures/session-input-v5.json +0 -81
  620. package/src/migrations/FromV5ToV6/fixtures/session-output-v6.json +0 -85
  621. package/src/migrations/FromV5ToV6/index.ts +0 -61
  622. package/src/migrations/FromV5ToV6/migrations.test.ts +0 -50
  623. package/src/migrations/FromV5ToV6/types/v5.ts +0 -48
  624. package/src/migrations/FromV5ToV6/types/v6.ts +0 -63
  625. package/src/migrations/FromV6ToV7/fixtures/output-v7-from-v1.json +0 -203
  626. package/src/migrations/FromV6ToV7/fixtures/provider-input-v6.json +0 -103
  627. package/src/migrations/FromV6ToV7/fixtures/provider-output-v7.json +0 -118
  628. package/src/migrations/FromV6ToV7/index.ts +0 -101
  629. package/src/migrations/FromV6ToV7/migrations.test.ts +0 -64
  630. package/src/migrations/FromV6ToV7/types/v6.ts +0 -61
  631. package/src/migrations/FromV6ToV7/types/v7.ts +0 -69
  632. package/src/migrations/VersionController.test.ts +0 -88
  633. package/src/migrations/VersionController.ts +0 -67
  634. package/src/migrations/index.ts +0 -61
  635. package/src/server/globalConfig/_deprecated.test.ts +0 -92
  636. package/src/server/globalConfig/_deprecated.ts +0 -41
  637. package/src/server/routers/edge/appStatus.ts +0 -3
  638. package/src/server/routers/edge/index.ts +0 -14
  639. package/src/server/routers/edge/upload.ts +0 -16
  640. package/src/services/aiModel/client.ts +0 -70
  641. package/src/services/aiModel/server.test.ts +0 -122
  642. package/src/services/aiModel/server.ts +0 -51
  643. package/src/services/aiModel/type.ts +0 -32
  644. package/src/services/aiProvider/client.ts +0 -58
  645. package/src/services/aiProvider/server.ts +0 -43
  646. package/src/services/aiProvider/type.ts +0 -27
  647. package/src/services/baseClientService/index.ts +0 -9
  648. package/src/services/chat/__snapshots__/chat.test.ts.snap +0 -110
  649. package/src/services/chatGroup/client.ts +0 -63
  650. package/src/services/chatGroup/server.ts +0 -67
  651. package/src/services/chatGroup/type.ts +0 -22
  652. package/src/services/export/_deprecated.ts +0 -155
  653. package/src/services/export/client.ts +0 -15
  654. package/src/services/export/server.ts +0 -9
  655. package/src/services/export/type.ts +0 -5
  656. package/src/services/file/_deprecated.test.ts +0 -119
  657. package/src/services/file/_deprecated.ts +0 -80
  658. package/src/services/file/client.test.ts +0 -199
  659. package/src/services/file/client.ts +0 -85
  660. package/src/services/file/server.ts +0 -53
  661. package/src/services/file/type.ts +0 -13
  662. package/src/services/import/_deprecated.ts +0 -115
  663. package/src/services/import/client.test.ts +0 -1015
  664. package/src/services/import/client.ts +0 -64
  665. package/src/services/import/server.ts +0 -133
  666. package/src/services/import/type.ts +0 -17
  667. package/src/services/message/_deprecated.test.ts +0 -398
  668. package/src/services/message/_deprecated.ts +0 -168
  669. package/src/services/message/client.test.ts +0 -410
  670. package/src/services/message/client.ts +0 -186
  671. package/src/services/message/server.ts +0 -150
  672. package/src/services/message/type.ts +0 -54
  673. package/src/services/plugin/_deprecated.test.ts +0 -162
  674. package/src/services/plugin/_deprecated.ts +0 -42
  675. package/src/services/plugin/client.test.ts +0 -177
  676. package/src/services/plugin/client.ts +0 -46
  677. package/src/services/plugin/server.ts +0 -42
  678. package/src/services/plugin/type.ts +0 -23
  679. package/src/services/session/_deprecated.test.ts +0 -440
  680. package/src/services/session/_deprecated.ts +0 -190
  681. package/src/services/session/client.test.ts +0 -413
  682. package/src/services/session/client.ts +0 -193
  683. package/src/services/session/server.test.ts +0 -260
  684. package/src/services/session/server.ts +0 -125
  685. package/src/services/session/type.ts +0 -82
  686. package/src/services/thread/client.ts +0 -51
  687. package/src/services/thread/server.ts +0 -32
  688. package/src/services/thread/type.ts +0 -21
  689. package/src/services/topic/_deprecated.test.ts +0 -245
  690. package/src/services/topic/_deprecated.ts +0 -75
  691. package/src/services/topic/client.ts +0 -89
  692. package/src/services/topic/pglite.test.ts +0 -212
  693. package/src/services/topic/server.ts +0 -57
  694. package/src/services/topic/type.ts +0 -40
  695. package/src/services/user/_deprecated.test.ts +0 -101
  696. package/src/services/user/_deprecated.ts +0 -70
  697. package/src/services/user/client.test.ts +0 -108
  698. package/src/services/user/client.ts +0 -104
  699. package/src/services/user/server.test.ts +0 -149
  700. package/src/services/user/server.ts +0 -47
  701. package/src/services/user/type.ts +0 -21
  702. package/src/store/chat/slices/builtinTool/actions/__tests__/dalle.test.ts +0 -121
  703. package/src/store/chat/slices/builtinTool/actions/dalle.ts +0 -124
  704. package/src/store/global/actions/clientDb.ts +0 -67
  705. package/src/store/user/slices/modelList/__snapshots__/action.test.ts.snap +0 -12
  706. package/src/store/user/slices/modelList/action.test.ts +0 -359
  707. package/src/store/user/slices/modelList/action.ts +0 -223
  708. package/src/store/user/slices/modelList/initialState.ts +0 -15
  709. package/src/store/user/slices/modelList/reducers/customModelCard.test.ts +0 -204
  710. package/src/store/user/slices/modelList/reducers/customModelCard.ts +0 -64
  711. package/src/store/user/slices/modelList/selectors/index.ts +0 -3
  712. package/src/store/user/slices/modelList/selectors/keyVaults.test.ts +0 -201
  713. package/src/store/user/slices/modelList/selectors/keyVaults.ts +0 -50
  714. package/src/store/user/slices/modelList/selectors/modelConfig.test.ts +0 -219
  715. package/src/store/user/slices/modelList/selectors/modelConfig.ts +0 -95
  716. package/src/store/user/slices/modelList/selectors/modelProvider.test.ts +0 -138
  717. package/src/store/user/slices/modelList/selectors/modelProvider.ts +0 -170
  718. package/src/tools/dalle/Render/GalleyGrid.tsx +0 -60
  719. package/src/tools/dalle/Render/Item/EditMode.tsx +0 -66
  720. package/src/tools/dalle/Render/Item/Error.tsx +0 -49
  721. package/src/tools/dalle/Render/Item/Image.tsx +0 -44
  722. package/src/tools/dalle/Render/Item/ImageFileItem.tsx +0 -57
  723. package/src/tools/dalle/Render/Item/index.tsx +0 -88
  724. package/src/tools/dalle/Render/ToolBar.tsx +0 -56
  725. package/src/tools/dalle/Render/index.tsx +0 -52
  726. package/src/tools/dalle/index.ts +0 -92
  727. /package/src/{app/[variants]/(main)/settings/provider/features/ProviderConfig → components/Skeleton}/SkeletonInput.tsx +0 -0
  728. /package/src/{middleware.ts → proxy.ts} +0 -0
@@ -1,523 +0,0 @@
1
- import { afterEach, beforeEach, describe, expect, it } from 'vitest';
2
-
3
- import { DBModel } from '@/database/_deprecated/core/types/db';
4
- import { CreateMessageParams, MessageModel } from '@/database/_deprecated/models/message';
5
- import { DB_Message } from '@/database/_deprecated/schemas/message';
6
- import { DB_Topic } from '@/database/_deprecated/schemas/topic';
7
- import { nanoid } from '@/utils/uuid';
8
- import * as uuidUtils from '@/utils/uuid';
9
-
10
- import { CreateTopicParams, QueryTopicParams, TopicModel } from '../topic';
11
-
12
- describe('TopicModel', () => {
13
- let topicData: CreateTopicParams;
14
- const currentSessionId = 'session1';
15
- beforeEach(() => {
16
- // Set up topic data with the correct structure
17
- topicData = {
18
- sessionId: currentSessionId,
19
- title: 'Test Topic',
20
- favorite: false,
21
- };
22
- });
23
-
24
- afterEach(async () => {
25
- // Clean up the database after each test
26
- await TopicModel.clearTable();
27
- });
28
-
29
- describe('create', () => {
30
- it('should create a topic record', async () => {
31
- const result = await TopicModel.create(topicData);
32
-
33
- expect(result).toHaveProperty('id');
34
- // Verify that the topic has been added to the database
35
- const topicInDb = await TopicModel.findById(result.id);
36
-
37
- expect(topicInDb).toEqual(
38
- expect.objectContaining({
39
- title: topicData.title,
40
- favorite: topicData.favorite ? 1 : 0,
41
- sessionId: topicData.sessionId,
42
- }),
43
- );
44
- });
45
-
46
- it('should create a topic with favorite set to true', async () => {
47
- const favoriteTopicData: CreateTopicParams = {
48
- ...topicData,
49
- favorite: true,
50
- };
51
- const result = await TopicModel.create(favoriteTopicData);
52
-
53
- expect(result).toHaveProperty('id');
54
- const topicInDb = await TopicModel.findById(result.id);
55
- expect(topicInDb).toEqual(
56
- expect.objectContaining({
57
- title: favoriteTopicData.title,
58
- favorite: 1,
59
- sessionId: favoriteTopicData.sessionId,
60
- }),
61
- );
62
- });
63
-
64
- it('should update messages with the new topic id when messages are provided', async () => {
65
- const messagesToUpdate = [nanoid(), nanoid()];
66
- // 假设这些消息存在于数据库中
67
- for (const messageId of messagesToUpdate) {
68
- await MessageModel.table.add({ id: messageId, text: 'Sample message', topicId: null });
69
- }
70
-
71
- const topicDataWithMessages = {
72
- ...topicData,
73
- messages: messagesToUpdate,
74
- };
75
-
76
- const topic = await TopicModel.create(topicDataWithMessages);
77
- expect(topic).toHaveProperty('id');
78
-
79
- // 验证数据库中的消息是否已更新
80
- const updatedMessages: DB_Message[] = await MessageModel.table
81
- .where('id')
82
- .anyOf(messagesToUpdate)
83
- .toArray();
84
-
85
- expect(updatedMessages).toHaveLength(messagesToUpdate.length);
86
- for (const message of updatedMessages) {
87
- expect(message.topicId).toEqual(topic.id);
88
- }
89
- });
90
-
91
- it('should create a topic with a unique id when no id is provided', async () => {
92
- const spy = vi.spyOn(uuidUtils, 'nanoid'); // 使用 Vitest 的 spy 功能来监视 nanoid 调用
93
- const result = await TopicModel.create(topicData);
94
-
95
- expect(spy).toHaveBeenCalled(); // 验证 nanoid 被调用来生成 id
96
- expect(result).toHaveProperty('id');
97
- expect(typeof result.id).toBe('string');
98
- spy.mockRestore(); // 测试结束后恢复原始行为
99
- });
100
- });
101
- describe('batch create', () => {
102
- it('should batch create topic records', async () => {
103
- const topicsToCreate = [topicData, topicData];
104
- const results = await TopicModel.batchCreate(topicsToCreate);
105
-
106
- expect(results.ids).toHaveLength(topicsToCreate.length);
107
- // Verify that the topics have been added to the database
108
- for (const result of results.ids!) {
109
- const topicInDb = await TopicModel.findById(result);
110
- expect(topicInDb).toEqual(
111
- expect.objectContaining({
112
- title: topicData.title,
113
- favorite: topicData.favorite ? 1 : 0,
114
- sessionId: topicData.sessionId,
115
- }),
116
- );
117
- }
118
- });
119
-
120
- it('should batch create topics with mixed favorite values', async () => {
121
- const mixedTopicsData: CreateTopicParams[] = [
122
- { ...topicData, favorite: true },
123
- { ...topicData, favorite: false },
124
- ];
125
-
126
- const results = await TopicModel.batchCreate(mixedTopicsData);
127
-
128
- expect(results.ids).toHaveLength(mixedTopicsData.length);
129
- for (const id of results.ids!) {
130
- const topicInDb = await TopicModel.findById(id);
131
- expect(topicInDb).toBeDefined();
132
- expect(topicInDb.favorite).toBeGreaterThanOrEqual(0);
133
- expect(topicInDb.favorite).toBeLessThanOrEqual(1);
134
- }
135
- });
136
- });
137
-
138
- it('should query topics with pagination', async () => {
139
- // Create multiple topics to test the query method
140
- await TopicModel.batchCreate([topicData, topicData]);
141
-
142
- const queryParams: QueryTopicParams = { pageSize: 1, current: 0, containerId: 'session1' };
143
- const queriedTopics = await TopicModel.query(queryParams);
144
-
145
- expect(queriedTopics).toHaveLength(1);
146
- });
147
-
148
- it('should find topics by session id', async () => {
149
- // Create multiple topics to test the findBySessionId method
150
- await TopicModel.batchCreate([topicData, topicData]);
151
-
152
- const topicsBySessionId = await TopicModel.findBySessionId(topicData.sessionId);
153
-
154
- expect(topicsBySessionId).toHaveLength(2);
155
- expect(topicsBySessionId.every((i) => i.sessionId === topicData.sessionId)).toBeTruthy();
156
- });
157
-
158
- it('should delete a topic and its associated messages', async () => {
159
- const createdTopic = await TopicModel.create(topicData);
160
-
161
- await TopicModel.delete(createdTopic.id);
162
-
163
- // Verify the topic and its related messages are deleted
164
- const topicInDb = await TopicModel.findById(createdTopic.id);
165
- expect(topicInDb).toBeUndefined();
166
-
167
- // You need to verify that messages related to the topic are also deleted
168
- // This would require additional setup to create messages associated with the topic
169
- // and then assertions to check that they're deleted after the topic itself is deleted
170
- });
171
-
172
- it('should batch delete topics by session id', async () => {
173
- // Create multiple topics to test the batchDeleteBySessionId method
174
- await TopicModel.batchCreate([topicData, topicData]);
175
-
176
- await TopicModel.batchDeleteBySessionId(topicData.sessionId);
177
-
178
- // Verify that all topics with the given session id are deleted
179
- const topicsInDb = await TopicModel.findBySessionId(topicData.sessionId);
180
- expect(topicsInDb).toHaveLength(0);
181
- });
182
-
183
- it('should update a topic', async () => {
184
- const createdTopic = await TopicModel.create(topicData);
185
- const updateData = { title: 'New Title' };
186
-
187
- await TopicModel.update(createdTopic.id, updateData);
188
- const updatedTopic = await TopicModel.findById(createdTopic.id);
189
-
190
- expect(updatedTopic).toHaveProperty('title', 'New Title');
191
- });
192
-
193
- describe('toggleFavorite', () => {
194
- it('should toggle favorite status of a topic', async () => {
195
- const createdTopic = await TopicModel.create(topicData);
196
-
197
- const newState = await TopicModel.toggleFavorite(createdTopic.id);
198
-
199
- expect(newState).toBe(true);
200
- const topicInDb = await TopicModel.findById(createdTopic.id);
201
- expect(topicInDb).toHaveProperty('favorite', 1);
202
- });
203
-
204
- it('should handle toggleFavorite when topic does not exist', async () => {
205
- const nonExistentTopicId = 'non-existent-id';
206
- await expect(TopicModel.toggleFavorite(nonExistentTopicId)).rejects.toThrow(
207
- `Topic with id ${nonExistentTopicId} not found`,
208
- );
209
- });
210
-
211
- it('should set favorite to specific state using toggleFavorite', async () => {
212
- const createdTopic = await TopicModel.create(topicData);
213
-
214
- // Set favorite to true regardless of current state
215
- await TopicModel.toggleFavorite(createdTopic.id, true);
216
- let topicInDb = await TopicModel.findById(createdTopic.id);
217
- expect(topicInDb.favorite).toBe(1);
218
-
219
- // Set favorite to false regardless of current state
220
- await TopicModel.toggleFavorite(createdTopic.id, false);
221
- topicInDb = await TopicModel.findById(createdTopic.id);
222
- expect(topicInDb.favorite).toBe(0);
223
- });
224
- });
225
-
226
- it('should delete a topic and its associated messages', async () => {
227
- // 创建话题和相关联的消息
228
- const createdTopic = await TopicModel.create(topicData);
229
- const messageData: CreateMessageParams = {
230
- content: 'Test Message',
231
- topicId: createdTopic.id,
232
- sessionId: topicData.sessionId,
233
- role: 'user',
234
- };
235
- await MessageModel.create(messageData);
236
-
237
- // 删除话题
238
- await TopicModel.delete(createdTopic.id);
239
-
240
- // 验证话题是否被删除
241
- const topicInDb = await TopicModel.findById(createdTopic.id);
242
- expect(topicInDb).toBeUndefined();
243
-
244
- // 验证与话题关联的消息是否也被删除
245
- const messagesInDb = await MessageModel.query({
246
- sessionId: topicData.sessionId,
247
- topicId: createdTopic.id,
248
- });
249
- expect(messagesInDb).toHaveLength(0);
250
- });
251
-
252
- it('should batch delete topics and their associated messages', async () => {
253
- // 创建多个话题和相关联的消息
254
- const createdTopic1 = await TopicModel.create(topicData);
255
- const createdTopic2 = await TopicModel.create(topicData);
256
-
257
- const messageData1: CreateMessageParams = {
258
- content: 'Test Message 1',
259
- topicId: createdTopic1.id,
260
- sessionId: topicData.sessionId,
261
- role: 'user',
262
- };
263
- const messageData2: CreateMessageParams = {
264
- content: 'Test Message 2',
265
- topicId: createdTopic2.id,
266
- sessionId: topicData.sessionId,
267
- role: 'user',
268
- };
269
- await MessageModel.create(messageData1);
270
- await MessageModel.create(messageData2);
271
-
272
- // 执行批量删除
273
- await TopicModel.batchDelete([createdTopic1.id, createdTopic2.id]);
274
-
275
- // 验证话题是否被删除
276
- const topicInDb1 = await TopicModel.findById(createdTopic1.id);
277
- const topicInDb2 = await TopicModel.findById(createdTopic2.id);
278
- expect(topicInDb1).toBeUndefined();
279
- expect(topicInDb2).toBeUndefined();
280
-
281
- // 验证与话题关联的消息是否也被删除
282
- const messagesInDb1 = await MessageModel.query({
283
- sessionId: topicData.sessionId,
284
- topicId: createdTopic1.id,
285
- });
286
- const messagesInDb2 = await MessageModel.query({
287
- sessionId: topicData.sessionId,
288
- topicId: createdTopic2.id,
289
- });
290
- expect(messagesInDb1).toHaveLength(0);
291
- expect(messagesInDb2).toHaveLength(0);
292
- });
293
-
294
- describe('duplicateTopic', () => {
295
- let originalTopic: DBModel<DB_Topic>;
296
- let originalMessages: any[];
297
-
298
- beforeEach(async () => {
299
- // 创建一个原始主题
300
- const { id } = await TopicModel.create({
301
- title: 'Original Topic',
302
- sessionId: 'session1',
303
- favorite: false,
304
- });
305
- originalTopic = await TopicModel.findById(id);
306
-
307
- // 创建一些关联到原始主题的消息
308
- originalMessages = await Promise.all(
309
- ['Message 1', 'Message 2'].map((text) =>
310
- MessageModel.create({
311
- content: text,
312
- topicId: originalTopic.id,
313
- sessionId: originalTopic.sessionId!,
314
- role: 'user',
315
- }),
316
- ),
317
- );
318
- });
319
-
320
- afterEach(async () => {
321
- // 清理数据库中的所有主题和消息
322
- await TopicModel.clearTable();
323
- await MessageModel.clearTable();
324
- });
325
-
326
- it('should duplicate a topic with all associated messages', async () => {
327
- // 执行复制操作
328
- await TopicModel.duplicateTopic(originalTopic.id);
329
-
330
- // 验证复制后的主题是否存在
331
- const duplicatedTopic = await TopicModel.findBySessionId(originalTopic.sessionId!);
332
- expect(duplicatedTopic).toHaveLength(2);
333
-
334
- // 验证复制后的消息是否存在
335
- const duplicatedMessages = await MessageModel.query({
336
- sessionId: originalTopic.sessionId!,
337
- topicId: duplicatedTopic[1].id, // 假设复制的主题是第二个
338
- });
339
- expect(duplicatedMessages).toHaveLength(originalMessages.length);
340
- });
341
-
342
- it('should throw an error if the topic does not exist', async () => {
343
- // 尝试复制一个不存在的主题
344
- const nonExistentTopicId = nanoid();
345
- await expect(TopicModel.duplicateTopic(nonExistentTopicId)).rejects.toThrow(
346
- `Topic with id ${nonExistentTopicId} not found`,
347
- );
348
- });
349
-
350
- it('should preserve the properties of the duplicated topic', async () => {
351
- // 执行复制操作
352
- await TopicModel.duplicateTopic(originalTopic.id);
353
-
354
- // 获取复制的主题
355
- const topics = await TopicModel.findBySessionId(originalTopic.sessionId!);
356
- const duplicatedTopic = topics.find((topic) => topic.id !== originalTopic.id);
357
-
358
- // 验证复制的主题是否保留了原始主题的属性
359
- expect(duplicatedTopic).toBeDefined();
360
- expect(duplicatedTopic).toMatchObject({
361
- title: originalTopic.title,
362
- favorite: originalTopic.favorite,
363
- sessionId: originalTopic.sessionId,
364
- });
365
- // 确保生成了新的 ID
366
- expect(duplicatedTopic.id).not.toBe(originalTopic.id);
367
- });
368
-
369
- it('should properly handle the messages hierarchy when duplicating', async () => {
370
- // 创建一个子消息关联到其中一个原始消息
371
- const { id } = await MessageModel.create({
372
- content: 'Child Message',
373
- topicId: originalTopic.id,
374
- parentId: originalMessages[0].id,
375
- sessionId: originalTopic.sessionId!,
376
- role: 'user',
377
- });
378
- const childMessage = await MessageModel.findById(id);
379
-
380
- // 执行复制操作
381
- await TopicModel.duplicateTopic(originalTopic.id);
382
-
383
- // 获取复制的消息
384
- const duplicatedMessages = await MessageModel.queryBySessionId(originalTopic.sessionId!);
385
-
386
- // 验证复制的子消息是否存在并且 parentId 已更新
387
- const duplicatedChildMessage = duplicatedMessages.find(
388
- (message) => message.content === childMessage.content && message.id !== childMessage.id,
389
- );
390
-
391
- expect(duplicatedChildMessage).toBeDefined();
392
- expect(duplicatedChildMessage.parentId).not.toBe(childMessage.parentId);
393
- expect(duplicatedChildMessage.parentId).toBeDefined();
394
- });
395
-
396
- it('should fail if the database transaction fails', async () => {
397
- // 强制数据库事务失败,例如通过在复制过程中抛出异常
398
- const dbTransactionFailedError = new Error('DB transaction failed');
399
- const spyOn = vi.spyOn(TopicModel['db'], 'transaction').mockImplementation((async () => {
400
- throw dbTransactionFailedError;
401
- }) as any);
402
-
403
- // 尝试复制主题并捕捉期望的错误
404
- await expect(TopicModel.duplicateTopic(originalTopic.id)).rejects.toThrow(
405
- dbTransactionFailedError,
406
- );
407
- spyOn.mockRestore();
408
- });
409
-
410
- it('should not create partial duplicates if the process fails at some point', async () => {
411
- // 假设复制消息的过程中发生了错误
412
- vi.spyOn(MessageModel, 'duplicateMessages').mockImplementation(async () => {
413
- throw new Error('Failed to duplicate messages');
414
- });
415
-
416
- // 尝试复制主题,期望会抛出错误
417
- await expect(TopicModel.duplicateTopic(originalTopic.id)).rejects.toThrow();
418
-
419
- // 确保没有创建任何副本
420
- const topics = await TopicModel.findBySessionId(originalTopic.sessionId!);
421
- expect(topics).toHaveLength(1); // 只有原始主题
422
-
423
- const messages = await MessageModel.queryBySessionId(originalTopic.sessionId!);
424
- expect(messages).toHaveLength(originalMessages.length); // 只有原始消息
425
- });
426
- });
427
-
428
- describe('clearTable', () => {
429
- it('should clear the table', async () => {
430
- // Create a topic to ensure the table is not empty
431
- await TopicModel.create(topicData);
432
-
433
- // Clear the table
434
- await TopicModel.clearTable();
435
-
436
- // Verify the table is empty
437
- const topics = await TopicModel.queryAll();
438
- expect(topics).toHaveLength(0);
439
- });
440
- });
441
-
442
- describe('update', () => {
443
- it('should update a topic', async () => {
444
- // Create a topic
445
- const createdTopic = await TopicModel.create(topicData);
446
-
447
- // Update the topic
448
- const newTitle = 'Updated Title';
449
- await TopicModel.update(createdTopic.id, { title: newTitle });
450
-
451
- // Verify the topic is updated
452
- const updatedTopic = await TopicModel.findById(createdTopic.id);
453
- expect(updatedTopic.title).toBe(newTitle);
454
- });
455
- });
456
-
457
- describe('batchDelete', () => {
458
- it('should batch delete topics', async () => {
459
- // Create multiple topics
460
- const topic1 = await TopicModel.create(topicData);
461
- const topic2 = await TopicModel.create(topicData);
462
-
463
- await TopicModel.create(topicData);
464
-
465
- const ids = [topic1.id, topic2.id];
466
- // Batch delete the topics
467
- await TopicModel.batchDelete(ids);
468
-
469
- expect(await TopicModel.table.count()).toEqual(1);
470
- });
471
- });
472
-
473
- describe('queryAll', () => {
474
- it('should query all topics', async () => {
475
- // Create multiple topics
476
- await TopicModel.batchCreate([topicData, topicData]);
477
-
478
- // Query all topics
479
- const topics = await TopicModel.queryAll();
480
-
481
- // Verify all topics are queried
482
- expect(topics).toHaveLength(2);
483
- });
484
- });
485
-
486
- describe('queryByKeyword', () => {
487
- it('should query global topics by keyword', async () => {
488
- // Create a topic with a unique title
489
- const uniqueTitle = 'Unique Title';
490
- await TopicModel.create({ ...topicData, title: uniqueTitle });
491
-
492
- // Query topics by the unique title
493
- const topics = await TopicModel.queryByKeyword(uniqueTitle);
494
-
495
- // Verify the correct topic is queried
496
- expect(topics).toHaveLength(1);
497
- expect(topics[0].title).toBe(uniqueTitle);
498
- });
499
- it('should query topics in current session by keyword', async () => {
500
- // Create a topic with a unique title
501
- const uniqueTitle = 'Unique Title';
502
- await TopicModel.create({ ...topicData, title: uniqueTitle });
503
-
504
- // Query topics by the unique title
505
- const topics = await TopicModel.queryByKeyword(uniqueTitle, currentSessionId);
506
-
507
- // Verify the correct topic is queried
508
- expect(topics).toHaveLength(1);
509
- expect(topics[0].title).toBe(uniqueTitle);
510
- });
511
- it('should not query any topic in other session by keyword', async () => {
512
- // Create a topic with a unique title
513
- const uniqueTitle = 'Unique Title';
514
- await TopicModel.create({ ...topicData, title: uniqueTitle });
515
-
516
- // Query topics by the unique title
517
- const topics = await TopicModel.queryByKeyword(uniqueTitle, 'session-id-2');
518
-
519
- // Verify the correct topic is queried
520
- expect(topics).toHaveLength(0);
521
- });
522
- });
523
- });
@@ -1,82 +0,0 @@
1
- import { afterEach, beforeEach, describe, expect, it } from 'vitest';
2
-
3
- import { UserModel } from '../user';
4
-
5
- describe('UserModel', () => {
6
- let userData: any;
7
-
8
- beforeEach(() => {
9
- // Set up user data with the correct structure
10
- userData = {
11
- uuid: 'user1',
12
- settings: {},
13
- avatar: 'avatar.png',
14
- };
15
- });
16
-
17
- afterEach(async () => {
18
- // Clean up the database after each test
19
- await UserModel.clear();
20
- });
21
-
22
- it('should create a user record', async () => {
23
- const result = await UserModel.create(userData);
24
-
25
- expect(result).toEqual(1);
26
- // Verify that the user has been added to the database
27
- const userInDb = await UserModel.getUser();
28
-
29
- expect(userInDb).toEqual(
30
- expect.objectContaining({
31
- uuid: userData.uuid,
32
- settings: userData.settings,
33
- avatar: userData.avatar,
34
- }),
35
- );
36
- });
37
-
38
- it('should update a user record', async () => {
39
- const result = await UserModel.create(userData);
40
-
41
- const newAvatar = 'new_avatar.png';
42
- await UserModel.updateAvatar(newAvatar);
43
-
44
- const userInDb = await UserModel.getUser();
45
-
46
- expect(userInDb).toHaveProperty('avatar', newAvatar);
47
- });
48
-
49
- it('should update user settings', async () => {
50
- await UserModel.create(userData);
51
-
52
- await UserModel.updateSettings({ general: { themeMode: 'dark' } });
53
-
54
- const userInDb = await UserModel.getUser();
55
-
56
- expect(userInDb).toHaveProperty('settings', {
57
- general: { themeMode: 'dark' },
58
- });
59
- });
60
-
61
- it('should reset user settings', async () => {
62
- await UserModel.create(userData);
63
-
64
- await UserModel.updateSettings({ general: { themeMode: 'dark' } });
65
-
66
- await UserModel.resetSettings();
67
-
68
- const userInDb = await UserModel.getUser();
69
-
70
- expect(userInDb.settings).toBeUndefined();
71
- });
72
-
73
- it('should clear the user table', async () => {
74
- await UserModel.create(userData);
75
-
76
- await UserModel.clear();
77
-
78
- const userInDb = await UserModel.table.count();
79
-
80
- expect(userInDb).toEqual(0);
81
- });
82
- });
@@ -1,51 +0,0 @@
1
- import { DBModel } from '@/database/_deprecated/core/types/db';
2
- import { DB_File, DB_FileSchema } from '@/database/_deprecated/schemas/files';
3
- import { clientS3Storage } from '@/services/file/ClientS3';
4
- import { nanoid } from '@/utils/uuid';
5
-
6
- import { BaseModel } from '../core';
7
-
8
- class _FileModel extends BaseModel<'files'> {
9
- constructor() {
10
- super('files', DB_FileSchema);
11
- }
12
-
13
- async create(file: DB_File) {
14
- const id = nanoid();
15
-
16
- return this._addWithSync(file, `file-${id}`);
17
- }
18
-
19
- async findById(id: string): Promise<DBModel<DB_File> | undefined> {
20
- const item = await this.table.get(id);
21
- if (!item) return;
22
-
23
- // arrayBuffer to url
24
- let base64;
25
- if (!item.data) {
26
- const hash = (item.url as string).replace('client-s3://', '');
27
- base64 = await this.getBase64ByFileHash(hash);
28
- } else {
29
- base64 = Buffer.from(item.data).toString('base64');
30
- }
31
-
32
- return { ...item, base64, url: `data:${item.fileType};base64,${base64}` };
33
- }
34
-
35
- async delete(id: string) {
36
- return this.table.delete(id);
37
- }
38
-
39
- async clear() {
40
- return this.table.clear();
41
- }
42
-
43
- private async getBase64ByFileHash(hash: string) {
44
- const fileItem = await clientS3Storage.getObject(hash);
45
- if (!fileItem) throw new Error('file not found');
46
-
47
- return Buffer.from(await fileItem.arrayBuffer()).toString('base64');
48
- }
49
- }
50
-
51
- export const FileModel = new _FileModel();