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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (726) hide show
  1. package/.env.desktop +1 -2
  2. package/.env.example +0 -3
  3. package/.env.example.development +0 -2
  4. package/.github/workflows/claude-auto-testing.yml +73 -0
  5. package/.github/workflows/claude-translate-comments.yml +67 -0
  6. package/.github/workflows/desktop-pr-build.yml +18 -16
  7. package/.github/workflows/docker.yml +25 -20
  8. package/.github/workflows/e2e.yml +17 -3
  9. package/.github/workflows/release-desktop-beta.yml +12 -12
  10. package/.github/workflows/release.yml +3 -5
  11. package/.github/workflows/test.yml +47 -12
  12. package/.nvmrc +1 -1
  13. package/CHANGELOG.md +667 -0
  14. package/Dockerfile +1 -3
  15. package/README.md +2 -45
  16. package/README.zh-CN.md +2 -45
  17. package/apps/desktop/src/main/controllers/AuthCtr.ts +53 -39
  18. package/apps/desktop/src/main/controllers/MenuCtr.ts +5 -5
  19. package/apps/desktop/src/main/controllers/NotificationCtr.ts +29 -29
  20. package/apps/desktop/src/main/controllers/RemoteServerConfigCtr.ts +16 -16
  21. package/apps/desktop/src/main/controllers/ShortcutCtr.ts +2 -2
  22. package/apps/desktop/src/main/controllers/TrayMenuCtr.ts +18 -18
  23. package/apps/desktop/src/main/controllers/UpdaterCtr.ts +4 -4
  24. package/apps/desktop/src/main/controllers/__tests__/AuthCtr.test.ts +706 -0
  25. package/apps/desktop/src/main/controllers/__tests__/TrayMenuCtr.test.ts +5 -5
  26. package/apps/desktop/src/main/controllers/index.ts +4 -4
  27. package/apps/desktop/src/main/utils/next-electron-rsc.ts +7 -5
  28. package/apps/desktop/tsconfig.json +0 -1
  29. package/changelog/v1.json +227 -0
  30. package/docs/development/database-schema.dbml +12 -0
  31. package/docs/self-hosting/advanced/auth/next-auth/auth0.mdx +2 -2
  32. package/docs/self-hosting/advanced/auth/next-auth/auth0.zh-CN.mdx +2 -2
  33. package/docs/self-hosting/advanced/auth/next-auth/authelia.mdx +2 -2
  34. package/docs/self-hosting/advanced/auth/next-auth/authelia.zh-CN.mdx +2 -2
  35. package/docs/self-hosting/advanced/auth/next-auth/authentik.mdx +2 -2
  36. package/docs/self-hosting/advanced/auth/next-auth/authentik.zh-CN.mdx +2 -2
  37. package/docs/self-hosting/advanced/auth/next-auth/casdoor.mdx +2 -2
  38. package/docs/self-hosting/advanced/auth/next-auth/casdoor.zh-CN.mdx +2 -2
  39. package/docs/self-hosting/advanced/auth/next-auth/cloudflare-zero-trust.mdx +2 -2
  40. package/docs/self-hosting/advanced/auth/next-auth/cloudflare-zero-trust.zh-CN.mdx +2 -2
  41. package/docs/self-hosting/advanced/auth/next-auth/github.mdx +2 -2
  42. package/docs/self-hosting/advanced/auth/next-auth/github.zh-CN.mdx +2 -2
  43. package/docs/self-hosting/advanced/auth/next-auth/google.mdx +32 -29
  44. package/docs/self-hosting/advanced/auth/next-auth/keycloak.mdx +2 -2
  45. package/docs/self-hosting/advanced/auth/next-auth/keycloak.zh-CN.mdx +2 -2
  46. package/docs/self-hosting/advanced/auth/next-auth/logto.mdx +5 -3
  47. package/docs/self-hosting/advanced/auth/next-auth/logto.zh-CN.mdx +5 -3
  48. package/docs/self-hosting/advanced/auth/next-auth/microsoft-entra-id.mdx +2 -2
  49. package/docs/self-hosting/advanced/auth/next-auth/microsoft-entra-id.zh-CN.mdx +2 -2
  50. package/docs/self-hosting/advanced/auth/next-auth/okta.mdx +2 -2
  51. package/docs/self-hosting/advanced/auth/next-auth/okta.zh-CN.mdx +2 -2
  52. package/docs/self-hosting/advanced/auth/next-auth/wechat.mdx +2 -2
  53. package/docs/self-hosting/advanced/auth/next-auth/wechat.zh-CN.mdx +2 -2
  54. package/docs/self-hosting/advanced/auth/next-auth/zitadel.mdx +2 -2
  55. package/docs/self-hosting/advanced/auth/next-auth/zitadel.zh-CN.mdx +2 -2
  56. package/docs/self-hosting/advanced/auth.mdx +32 -21
  57. package/docs/self-hosting/advanced/auth.zh-CN.mdx +30 -19
  58. package/docs/self-hosting/advanced/feature-flags.mdx +0 -1
  59. package/docs/self-hosting/advanced/feature-flags.zh-CN.mdx +0 -1
  60. package/docs/self-hosting/advanced/online-search.mdx +30 -25
  61. package/docs/self-hosting/advanced/online-search.zh-CN.mdx +25 -23
  62. package/e2e/src/features/discover/detail-pages.feature +95 -0
  63. package/e2e/src/features/discover/interactions.feature +113 -0
  64. package/e2e/src/features/discover/smoke.feature +34 -1
  65. package/e2e/src/steps/discover/detail-pages.steps.ts +295 -0
  66. package/e2e/src/steps/discover/interactions.steps.ts +451 -0
  67. package/e2e/src/steps/discover/smoke.steps.ts +116 -4
  68. package/e2e/tsconfig.json +0 -1
  69. package/locales/ar/labs.json +4 -0
  70. package/locales/ar/models.json +15 -6
  71. package/locales/ar/oauth.json +1 -0
  72. package/locales/bg-BG/labs.json +4 -0
  73. package/locales/bg-BG/models.json +15 -6
  74. package/locales/bg-BG/oauth.json +1 -0
  75. package/locales/de-DE/labs.json +4 -0
  76. package/locales/de-DE/models.json +15 -6
  77. package/locales/de-DE/oauth.json +1 -0
  78. package/locales/en-US/labs.json +4 -0
  79. package/locales/en-US/models.json +15 -6
  80. package/locales/en-US/oauth.json +1 -0
  81. package/locales/es-ES/labs.json +4 -0
  82. package/locales/es-ES/models.json +15 -6
  83. package/locales/es-ES/oauth.json +1 -0
  84. package/locales/fa-IR/labs.json +4 -0
  85. package/locales/fa-IR/models.json +15 -6
  86. package/locales/fa-IR/oauth.json +1 -0
  87. package/locales/fr-FR/labs.json +4 -0
  88. package/locales/fr-FR/models.json +15 -6
  89. package/locales/fr-FR/oauth.json +1 -0
  90. package/locales/it-IT/labs.json +4 -0
  91. package/locales/it-IT/models.json +15 -6
  92. package/locales/it-IT/oauth.json +1 -0
  93. package/locales/ja-JP/labs.json +4 -0
  94. package/locales/ja-JP/models.json +15 -6
  95. package/locales/ja-JP/oauth.json +1 -0
  96. package/locales/ko-KR/labs.json +4 -0
  97. package/locales/ko-KR/models.json +21 -12
  98. package/locales/ko-KR/oauth.json +1 -0
  99. package/locales/nl-NL/labs.json +4 -0
  100. package/locales/nl-NL/models.json +15 -6
  101. package/locales/nl-NL/oauth.json +1 -0
  102. package/locales/pl-PL/labs.json +4 -0
  103. package/locales/pl-PL/models.json +15 -6
  104. package/locales/pl-PL/oauth.json +1 -0
  105. package/locales/pt-BR/labs.json +4 -0
  106. package/locales/pt-BR/models.json +15 -6
  107. package/locales/pt-BR/oauth.json +1 -0
  108. package/locales/ru-RU/labs.json +4 -0
  109. package/locales/ru-RU/models.json +15 -6
  110. package/locales/ru-RU/oauth.json +1 -0
  111. package/locales/tr-TR/labs.json +4 -0
  112. package/locales/tr-TR/models.json +15 -6
  113. package/locales/tr-TR/oauth.json +1 -0
  114. package/locales/vi-VN/labs.json +4 -0
  115. package/locales/vi-VN/models.json +15 -6
  116. package/locales/vi-VN/oauth.json +1 -0
  117. package/locales/zh-CN/labs.json +4 -0
  118. package/locales/zh-CN/models.json +15 -6
  119. package/locales/zh-CN/oauth.json +1 -0
  120. package/locales/zh-TW/labs.json +4 -0
  121. package/locales/zh-TW/models.json +15 -6
  122. package/locales/zh-TW/oauth.json +1 -0
  123. package/next.config.ts +2 -3
  124. package/package.json +74 -80
  125. package/packages/const/src/index.ts +0 -1
  126. package/packages/const/src/url.ts +1 -4
  127. package/packages/const/src/user.ts +5 -2
  128. package/packages/const/src/version.ts +3 -3
  129. package/packages/context-engine/src/index.ts +1 -6
  130. package/packages/context-engine/src/processors/GroupMessageFlatten.ts +12 -2
  131. package/packages/context-engine/src/processors/__tests__/GroupMessageFlatten.test.ts +73 -9
  132. package/packages/context-engine/src/providers/index.ts +0 -2
  133. package/packages/database/migrations/0041_improve_index.sql +10 -0
  134. package/packages/database/migrations/0042_improve_agent_index.sql +1 -0
  135. package/packages/database/migrations/0043_add_ai_model_settings.sql +1 -0
  136. package/packages/database/migrations/meta/0041_snapshot.json +7784 -0
  137. package/packages/database/migrations/meta/0042_snapshot.json +7800 -0
  138. package/packages/database/migrations/meta/0043_snapshot.json +8419 -0
  139. package/packages/database/migrations/meta/_journal.json +21 -0
  140. package/packages/database/package.json +2 -2
  141. package/packages/database/src/core/migrations.json +33 -0
  142. package/packages/database/src/core/web-server.ts +2 -1
  143. package/packages/database/src/models/__tests__/message.grouping.test.ts +812 -0
  144. package/packages/database/src/models/__tests__/message.test.ts +256 -233
  145. package/packages/database/src/models/agent.ts +16 -13
  146. package/packages/database/src/models/message.ts +90 -74
  147. package/packages/database/src/models/session.ts +80 -28
  148. package/packages/database/src/models/user.ts +2 -1
  149. package/packages/database/src/repositories/aiInfra/index.test.ts +198 -0
  150. package/packages/database/src/repositories/aiInfra/index.ts +2 -1
  151. package/packages/database/src/repositories/dataImporter/deprecated/__tests__/index.test.ts +2 -1
  152. package/packages/database/src/repositories/dataImporter/deprecated/index.ts +7 -1
  153. package/packages/database/src/schemas/agent.ts +13 -11
  154. package/packages/database/src/schemas/aiInfra.ts +2 -0
  155. package/packages/database/src/schemas/message.ts +5 -1
  156. package/packages/database/src/schemas/relations.ts +6 -4
  157. package/packages/database/src/schemas/session.ts +2 -0
  158. package/packages/database/src/schemas/topic.ts +6 -1
  159. package/packages/database/src/utils/__tests__/groupMessages.test.ts +145 -2
  160. package/packages/database/src/utils/groupMessages.ts +7 -5
  161. package/packages/electron-client-ipc/package.json +4 -1
  162. package/packages/file-loaders/package.json +1 -0
  163. package/packages/memory-extract/package.json +2 -2
  164. package/packages/model-bank/src/aiModels/anthropic.ts +0 -63
  165. package/packages/model-bank/src/aiModels/higress.ts +0 -55
  166. package/packages/model-bank/src/aiModels/infiniai.ts +21 -0
  167. package/packages/model-bank/src/aiModels/ollamacloud.ts +13 -0
  168. package/packages/model-bank/src/aiModels/siliconcloud.ts +19 -0
  169. package/packages/model-runtime/src/core/streams/openai/__snapshots__/responsesStream.test.ts.snap +0 -38
  170. package/packages/model-runtime/src/providers/minimax/index.ts +5 -5
  171. package/packages/model-runtime/src/providers/search1api/index.test.ts +2 -2
  172. package/packages/model-runtime/src/utils/googleErrorParser.test.ts +125 -0
  173. package/packages/model-runtime/src/utils/googleErrorParser.ts +103 -77
  174. package/packages/types/src/discover/mcp.ts +6 -0
  175. package/packages/types/src/index.ts +0 -1
  176. package/packages/types/src/message/common/base.ts +13 -0
  177. package/packages/types/src/message/common/image.ts +8 -0
  178. package/packages/types/src/message/common/metadata.ts +39 -0
  179. package/packages/types/src/message/common/tools.ts +10 -0
  180. package/packages/types/src/message/db/params.ts +47 -1
  181. package/packages/types/src/message/ui/chat.ts +4 -1
  182. package/packages/types/src/message/ui/params.ts +49 -4
  183. package/packages/types/src/plugins/mcp.ts +4 -1
  184. package/packages/types/src/search.ts +16 -0
  185. package/packages/types/src/serverConfig.ts +2 -6
  186. package/packages/types/src/topic/topic.ts +14 -0
  187. package/packages/types/src/user/index.ts +2 -76
  188. package/packages/types/src/user/preference.ts +105 -0
  189. package/packages/types/src/user/settings/index.ts +22 -0
  190. package/packages/utils/src/apiKey.test.ts +139 -0
  191. package/packages/utils/src/client/clipboard.ts +2 -2
  192. package/packages/utils/src/client/exportFile.ts +10 -10
  193. package/packages/utils/src/client/parserPlaceholder.ts +18 -18
  194. package/packages/utils/src/client/topic.ts +10 -10
  195. package/packages/utils/src/client/xor-obfuscation.ts +11 -11
  196. package/packages/utils/src/server/auth.ts +6 -6
  197. package/packages/utils/src/server/geo.ts +9 -9
  198. package/packages/utils/src/server/xor.ts +7 -7
  199. package/packages/web-crawler/src/crawImpl/firecrawl.ts +39 -12
  200. package/packages/web-crawler/tsconfig.json +0 -1
  201. package/renovate.json +23 -1
  202. package/scripts/migrateServerDB/errorHint.js +1 -7
  203. package/scripts/migrateServerDB/index.ts +2 -1
  204. package/src/app/(backend)/webapi/revalidate/route.ts +1 -1
  205. package/src/app/[variants]/(auth)/signup/[[...signup]]/page.tsx +1 -8
  206. package/src/app/[variants]/(main)/(mobile)/me/(home)/__tests__/useCategory.test.tsx +9 -0
  207. package/src/app/[variants]/(main)/(mobile)/me/(home)/features/UserBanner.tsx +3 -6
  208. package/src/app/[variants]/(main)/(mobile)/me/(home)/layout.tsx +0 -2
  209. package/src/app/[variants]/(main)/_layout/Desktop/SideBar/TopActions.tsx +1 -4
  210. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/V1Mobile/index.tsx +2 -2
  211. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/V1Mobile/useSend.ts +6 -4
  212. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/useSend.ts +15 -10
  213. package/src/app/[variants]/(main)/chat/@session/features/SessionListContent/List/Item/Actions.tsx +3 -28
  214. package/src/app/[variants]/(main)/chat/@session/features/SessionListContent/List/Item/index.tsx +4 -2
  215. package/src/app/[variants]/(main)/chat/_layout/Desktop/index.tsx +0 -2
  216. package/src/app/[variants]/(main)/chat/_layout/Mobile.tsx +1 -5
  217. package/src/app/[variants]/(main)/chat/settings/features/HeaderContent.tsx +2 -62
  218. package/src/app/[variants]/(main)/discover/(list)/features/Pagination.tsx +1 -0
  219. package/src/app/[variants]/(main)/discover/(list)/features/SortButton/index.tsx +1 -1
  220. package/src/app/[variants]/(main)/discover/(list)/mcp/features/List/Item.tsx +1 -0
  221. package/src/app/[variants]/(main)/discover/(list)/model/features/List/Item.tsx +1 -0
  222. package/src/app/[variants]/(main)/discover/(list)/provider/features/List/Item.tsx +1 -0
  223. package/src/app/[variants]/(main)/discover/components/CategoryMenu.tsx +9 -1
  224. package/src/app/[variants]/(main)/image/@topic/features/Topics/TopicList.tsx +1 -0
  225. package/src/app/[variants]/(main)/image/features/PromptInput/index.tsx +1 -1
  226. package/src/app/[variants]/(main)/image/page.tsx +0 -2
  227. package/src/app/[variants]/(main)/labs/components/LabCard.tsx +8 -6
  228. package/src/app/[variants]/(main)/labs/page.tsx +19 -22
  229. package/src/app/[variants]/(main)/profile/_layout/Desktop/index.tsx +23 -24
  230. package/src/app/[variants]/(main)/profile/_layout/Mobile/index.tsx +5 -9
  231. package/src/app/[variants]/(main)/settings/_layout/Desktop/index.tsx +0 -2
  232. package/src/app/[variants]/(main)/settings/_layout/Mobile/index.tsx +0 -2
  233. package/src/app/[variants]/(main)/settings/provider/(list)/ProviderGrid/Card.tsx +1 -1
  234. package/src/app/[variants]/(main)/settings/provider/detail/azure/index.tsx +6 -8
  235. package/src/app/[variants]/(main)/settings/provider/detail/azureai/index.tsx +1 -1
  236. package/src/app/[variants]/(main)/settings/provider/detail/bedrock/index.tsx +1 -1
  237. package/src/app/[variants]/(main)/settings/provider/detail/cloudflare/index.tsx +1 -1
  238. package/src/app/[variants]/(main)/settings/provider/detail/comfyui/index.tsx +1 -1
  239. package/src/app/[variants]/(main)/settings/provider/detail/github/index.tsx +1 -1
  240. package/src/app/[variants]/(main)/settings/provider/detail/vertexai/index.tsx +1 -1
  241. package/src/app/[variants]/(main)/settings/provider/features/ProviderConfig/index.tsx +2 -4
  242. package/src/app/[variants]/layout.tsx +1 -0
  243. package/src/app/[variants]/loading/index.tsx +1 -10
  244. package/src/app/[variants]/oauth/ResultLayout.tsx +47 -0
  245. package/src/app/[variants]/oauth/callback/error/page.tsx +20 -33
  246. package/src/app/[variants]/oauth/callback/layout.tsx +1 -0
  247. package/src/app/[variants]/oauth/callback/success/page.tsx +8 -22
  248. package/src/app/[variants]/oauth/consent/[uid]/Consent/BuiltinConsent.tsx +47 -0
  249. package/src/app/[variants]/oauth/consent/[uid]/{Consent.tsx → Consent/index.tsx} +12 -1
  250. package/src/app/[variants]/oauth/consent/[uid]/Login.tsx +19 -2
  251. package/src/app/sitemap.tsx +7 -1
  252. package/src/components/InvalidAPIKey/APIKeyForm/Bedrock.tsx +8 -13
  253. package/src/components/Link.tsx +12 -0
  254. package/src/components/Skeleton/SkeletonSwitch.tsx +13 -0
  255. package/src/components/Skeleton/index.ts +2 -0
  256. package/src/components/Thinking/index.tsx +4 -3
  257. package/src/config/db.ts +0 -5
  258. package/src/config/featureFlags/schema.test.ts +0 -2
  259. package/src/config/featureFlags/schema.ts +0 -6
  260. package/src/config/modelProviders/ai21.ts +1 -16
  261. package/src/config/modelProviders/ai302.ts +1 -128
  262. package/src/config/modelProviders/ai360.ts +1 -32
  263. package/src/config/modelProviders/anthropic.ts +1 -94
  264. package/src/config/modelProviders/azure.ts +1 -51
  265. package/src/config/modelProviders/baichuan.ts +1 -57
  266. package/src/config/modelProviders/bedrock.ts +1 -276
  267. package/src/config/modelProviders/cloudflare.ts +1 -64
  268. package/src/config/modelProviders/deepseek.ts +1 -19
  269. package/src/config/modelProviders/fireworksai.ts +1 -174
  270. package/src/config/modelProviders/giteeai.ts +1 -135
  271. package/src/config/modelProviders/github.ts +1 -254
  272. package/src/config/modelProviders/google.ts +1 -130
  273. package/src/config/modelProviders/groq.ts +1 -119
  274. package/src/config/modelProviders/higress.ts +1 -1736
  275. package/src/config/modelProviders/huggingface.ts +1 -54
  276. package/src/config/modelProviders/hunyuan.ts +1 -83
  277. package/src/config/modelProviders/infiniai.ts +1 -74
  278. package/src/config/modelProviders/internlm.ts +1 -20
  279. package/src/config/modelProviders/minimax.ts +1 -1
  280. package/src/config/modelProviders/mistral.ts +1 -95
  281. package/src/config/modelProviders/modelscope.ts +1 -27
  282. package/src/config/modelProviders/moonshot.ts +1 -29
  283. package/src/config/modelProviders/novita.ts +1 -105
  284. package/src/config/modelProviders/ollama.ts +1 -325
  285. package/src/config/modelProviders/openai.ts +1 -242
  286. package/src/config/modelProviders/openrouter.ts +1 -240
  287. package/src/config/modelProviders/perplexity.ts +1 -45
  288. package/src/config/modelProviders/ppio.ts +1 -152
  289. package/src/config/modelProviders/qiniu.ts +2 -19
  290. package/src/config/modelProviders/qwen.ts +1 -245
  291. package/src/config/modelProviders/search1api.ts +1 -34
  292. package/src/config/modelProviders/sensenova.ts +1 -69
  293. package/src/config/modelProviders/siliconcloud.ts +1 -417
  294. package/src/config/modelProviders/spark.ts +1 -59
  295. package/src/config/modelProviders/stepfun.ts +1 -98
  296. package/src/config/modelProviders/taichu.ts +1 -18
  297. package/src/config/modelProviders/togetherai.ts +1 -274
  298. package/src/config/modelProviders/upstage.ts +1 -28
  299. package/src/config/modelProviders/wenxin.ts +1 -140
  300. package/src/config/modelProviders/xai.ts +1 -38
  301. package/src/config/modelProviders/zeroone.ts +1 -81
  302. package/src/config/modelProviders/zhipu.ts +1 -108
  303. package/src/envs/app.ts +5 -8
  304. package/src/envs/auth.ts +0 -179
  305. package/src/features/AgentSetting/AgentPlugin/index.tsx +2 -2
  306. package/src/features/ChatInput/ActionBar/STT/browser.tsx +2 -2
  307. package/src/features/ChatInput/ActionBar/STT/openai.tsx +2 -2
  308. package/src/features/ChatInput/ActionBar/Tools/useControls.tsx +1 -3
  309. package/src/features/ChatInput/ActionBar/index.tsx +2 -2
  310. package/src/features/ChatInput/InputEditor/index.tsx +2 -2
  311. package/src/features/Conversation/Error/ErrorJsonViewer.tsx +4 -3
  312. package/src/features/Conversation/Error/OllamaBizError/index.tsx +7 -2
  313. package/src/features/Conversation/Error/index.tsx +15 -5
  314. package/src/features/Conversation/MarkdownElements/LobeArtifact/Render/index.tsx +2 -2
  315. package/src/features/Conversation/Messages/Assistant/Extra/index.tsx +2 -2
  316. package/src/features/Conversation/Messages/Assistant/MessageContent.tsx +5 -3
  317. package/src/features/Conversation/Messages/Assistant/Tool/Inspector/BuiltinPluginTitle.tsx +2 -2
  318. package/src/features/Conversation/Messages/Assistant/Tool/Inspector/ToolTitle.tsx +4 -2
  319. package/src/features/Conversation/Messages/Assistant/Tool/Render/CustomRender.tsx +2 -2
  320. package/src/features/Conversation/Messages/Assistant/Tool/Render/index.tsx +2 -2
  321. package/src/features/Conversation/Messages/Assistant/Tool/index.tsx +2 -2
  322. package/src/features/Conversation/Messages/Assistant/index.tsx +4 -4
  323. package/src/features/Conversation/Messages/Default.tsx +2 -2
  324. package/src/features/Conversation/Messages/Group/Actions/WithContentId.tsx +152 -0
  325. package/src/features/Conversation/Messages/Group/Actions/WithoutContentId.tsx +70 -0
  326. package/src/features/Conversation/Messages/Group/Actions/index.tsx +21 -0
  327. package/src/features/Conversation/Messages/Group/ContentBlock.tsx +91 -0
  328. package/src/features/Conversation/Messages/Group/EditState.tsx +51 -0
  329. package/src/features/Conversation/Messages/Group/Error/index.tsx +53 -0
  330. package/src/features/Conversation/Messages/Group/GroupChildren.tsx +73 -0
  331. package/src/features/Conversation/Messages/Group/MessageContent.tsx +39 -0
  332. package/src/features/Conversation/Messages/Group/Tool/Inspector/BuiltinPluginTitle.tsx +49 -0
  333. package/src/features/Conversation/Messages/Group/Tool/Inspector/Debug.tsx +70 -0
  334. package/src/features/Conversation/Messages/Group/Tool/Inspector/PluginResult.tsx +34 -0
  335. package/src/features/Conversation/Messages/Group/Tool/Inspector/PluginState.tsx +18 -0
  336. package/src/features/Conversation/Messages/Group/Tool/Inspector/Settings.tsx +40 -0
  337. package/src/features/Conversation/Messages/Group/Tool/Inspector/ToolTitle.tsx +92 -0
  338. package/src/features/Conversation/Messages/Group/Tool/Inspector/index.tsx +176 -0
  339. package/src/features/Conversation/Messages/Group/Tool/Render/Arguments/ObjectEntity.tsx +81 -0
  340. package/src/features/Conversation/Messages/Group/Tool/Render/Arguments/ValueCell.tsx +43 -0
  341. package/src/features/Conversation/Messages/Group/Tool/Render/Arguments/index.tsx +134 -0
  342. package/src/features/Conversation/Messages/Group/Tool/Render/CustomRender.tsx +88 -0
  343. package/src/features/Conversation/Messages/Group/Tool/Render/ErrorResponse.tsx +35 -0
  344. package/src/features/Conversation/Messages/Group/Tool/Render/LoadingPlaceholder/index.tsx +29 -0
  345. package/src/features/Conversation/Messages/Group/Tool/Render/PluginSettings.tsx +66 -0
  346. package/src/features/Conversation/Messages/Group/Tool/Render/index.tsx +105 -0
  347. package/src/features/Conversation/Messages/Group/Tool/index.tsx +75 -0
  348. package/src/features/Conversation/Messages/Group/Tools.tsx +46 -0
  349. package/src/features/Conversation/Messages/Group/index.tsx +140 -0
  350. package/src/features/Conversation/Messages/User/Extra.tsx +2 -2
  351. package/src/features/Conversation/Messages/User/index.tsx +4 -4
  352. package/src/features/Conversation/Messages/index.tsx +15 -3
  353. package/src/features/Conversation/components/AutoScroll.tsx +2 -2
  354. package/src/features/Conversation/components/Extras/Usage/UsageDetail/index.tsx +9 -6
  355. package/src/features/Conversation/components/ShareMessageModal/ShareImage/Preview.tsx +2 -2
  356. package/src/features/DataImporter/index.tsx +15 -60
  357. package/src/features/DevPanel/PostgresViewer/usePgTable.ts +3 -2
  358. package/src/features/MCP/utils.test.ts +91 -0
  359. package/src/features/MCP/utils.ts +20 -2
  360. package/src/features/PluginStore/Content.tsx +2 -3
  361. package/src/features/PluginStore/McpList/index.tsx +6 -2
  362. package/src/features/PluginTag/index.tsx +1 -3
  363. package/src/features/PluginsUI/Render/BuiltinType/index.test.tsx +37 -28
  364. package/src/features/Portal/Artifacts/Body/index.tsx +2 -2
  365. package/src/helpers/isCanUseFC.ts +0 -8
  366. package/src/hooks/useEnabledChatModels.ts +0 -8
  367. package/src/hooks/useInterceptingRoutes.test.ts +21 -3
  368. package/src/hooks/useModelContextWindowTokens.ts +0 -8
  369. package/src/hooks/useModelHasContextWindowToken.ts +1 -10
  370. package/src/hooks/useModelSupportFiles.ts +1 -11
  371. package/src/hooks/useModelSupportReasoning.ts +1 -11
  372. package/src/hooks/useModelSupportToolUse.ts +1 -11
  373. package/src/hooks/useModelSupportVision.ts +1 -11
  374. package/src/layout/AuthProvider/Clerk/index.tsx +2 -16
  375. package/src/libs/next-auth/auth.config.ts +3 -6
  376. package/src/libs/next-auth/sso-providers/auth0.ts +0 -7
  377. package/src/libs/next-auth/sso-providers/authelia.ts +3 -5
  378. package/src/libs/next-auth/sso-providers/authentik.ts +0 -7
  379. package/src/libs/next-auth/sso-providers/cloudflare-zero-trust.ts +3 -6
  380. package/src/libs/next-auth/sso-providers/cognito.ts +1 -5
  381. package/src/libs/next-auth/sso-providers/generic-oidc.ts +3 -5
  382. package/src/libs/next-auth/sso-providers/github.ts +0 -6
  383. package/src/libs/next-auth/sso-providers/google.ts +0 -2
  384. package/src/libs/next-auth/sso-providers/index.ts +0 -2
  385. package/src/libs/next-auth/sso-providers/keycloak.ts +0 -3
  386. package/src/libs/next-auth/sso-providers/logto.ts +3 -5
  387. package/src/libs/next-auth/sso-providers/okta.ts +0 -4
  388. package/src/libs/next-auth/sso-providers/zitadel.ts +0 -7
  389. package/src/libs/oidc-provider/provider.ts +1 -1
  390. package/src/libs/trpc/client/index.ts +0 -1
  391. package/src/libs/trpc/client/lambda.ts +8 -5
  392. package/src/libs/trpc/lambda/context.ts +4 -1
  393. package/src/locales/default/labs.ts +4 -0
  394. package/src/locales/default/oauth.ts +1 -0
  395. package/src/server/globalConfig/index.ts +0 -23
  396. package/src/server/modules/AssistantStore/index.ts +1 -1
  397. package/src/server/modules/ModelRuntime/trace.ts +11 -4
  398. package/src/server/routers/desktop/mcp.ts +1 -3
  399. package/src/server/routers/lambda/__tests__/integration/message.integration.test.ts +810 -70
  400. package/src/server/routers/lambda/config/__snapshots__/index.test.ts.snap +175 -12
  401. package/src/server/routers/lambda/config/index.test.ts +38 -30
  402. package/src/server/routers/lambda/market/index.ts +4 -2
  403. package/src/server/routers/lambda/message.ts +60 -52
  404. package/src/server/routers/lambda/session.ts +8 -5
  405. package/src/server/routers/lambda/topic.ts +7 -1
  406. package/src/server/routers/lambda/user.ts +32 -31
  407. package/src/server/routers/tools/mcp.ts +2 -3
  408. package/src/server/routers/tools/search.test.ts +1 -7
  409. package/src/server/routers/tools/search.ts +1 -4
  410. package/src/server/services/mcp/deps/MCPSystemDepsCheckService.test.ts +541 -0
  411. package/src/server/services/message/__tests__/index.test.ts +348 -0
  412. package/src/server/services/message/index.ts +159 -0
  413. package/src/server/services/search/impls/firecrawl/index.ts +51 -11
  414. package/src/server/services/search/impls/firecrawl/type.ts +60 -9
  415. package/src/services/__tests__/tool.test.ts +0 -3
  416. package/src/services/aiModel/index.test.ts +3 -6
  417. package/src/services/aiModel/index.ts +55 -7
  418. package/src/services/aiProvider/index.test.ts +2 -5
  419. package/src/services/aiProvider/index.ts +47 -7
  420. package/src/services/chat/chat.test.ts +13 -40
  421. package/src/services/chat/contextEngineering.test.ts +0 -30
  422. package/src/services/chat/contextEngineering.ts +7 -17
  423. package/src/services/chat/helper.ts +7 -31
  424. package/src/services/chat/index.ts +5 -10
  425. package/src/services/chat/types.ts +1 -1
  426. package/src/services/chatGroup/index.ts +64 -9
  427. package/src/services/config.ts +1 -65
  428. package/src/services/export/index.ts +9 -4
  429. package/src/services/file/index.ts +59 -10
  430. package/src/services/import/index.ts +132 -7
  431. package/src/services/mcp.test.ts +777 -0
  432. package/src/services/mcp.ts +40 -6
  433. package/src/services/message/index.ts +203 -10
  434. package/src/services/message/{__tests__/server.test.ts → server.test.ts} +3 -3
  435. package/src/services/models.ts +2 -11
  436. package/src/services/plugin/index.test.ts +8 -0
  437. package/src/services/plugin/index.ts +51 -10
  438. package/src/services/session/index.test.ts +8 -0
  439. package/src/services/session/index.ts +143 -10
  440. package/src/services/tableViewer/client.ts +12 -15
  441. package/src/services/thread/index.test.ts +8 -0
  442. package/src/services/thread/index.ts +37 -7
  443. package/src/services/topic/index.test.ts +8 -0
  444. package/src/services/topic/index.ts +74 -10
  445. package/src/services/user/index.test.ts +8 -0
  446. package/src/services/user/index.ts +50 -11
  447. package/src/store/aiInfra/slices/aiModel/action.test.ts +17 -9
  448. package/src/store/chat/helpers.test.ts +99 -0
  449. package/src/store/chat/helpers.ts +21 -2
  450. package/src/store/chat/selectors.ts +1 -1
  451. package/src/store/chat/slices/aiChat/actions/__tests__/generateAIChat.test.ts +17 -251
  452. package/src/store/chat/slices/aiChat/actions/__tests__/generateAIChatV2.test.ts +339 -7
  453. package/src/store/chat/slices/aiChat/actions/__tests__/helpers.ts +9 -5
  454. package/src/store/chat/slices/aiChat/actions/generateAIChat.ts +49 -178
  455. package/src/store/chat/slices/aiChat/actions/generateAIChatV2.ts +272 -14
  456. package/src/store/chat/slices/aiChat/actions/generateAIGroupChat.ts +7 -2
  457. package/src/store/chat/slices/builtinTool/actions/index.ts +1 -4
  458. package/src/store/chat/slices/builtinTool/actions/search.ts +3 -3
  459. package/src/store/chat/slices/message/action.test.ts +157 -16
  460. package/src/store/chat/slices/message/action.ts +153 -77
  461. package/src/store/chat/slices/message/reducer.test.ts +363 -5
  462. package/src/store/chat/slices/message/reducer.ts +87 -3
  463. package/src/store/chat/slices/message/{selectors.test.ts → selectors/chat.test.ts} +266 -30
  464. package/src/store/chat/slices/message/{selectors.ts → selectors/chat.ts} +29 -79
  465. package/src/store/chat/slices/message/selectors/index.ts +2 -0
  466. package/src/store/chat/slices/message/selectors/messageState.test.ts +36 -0
  467. package/src/store/chat/slices/message/selectors/messageState.ts +80 -0
  468. package/src/store/chat/slices/plugin/action.test.ts +118 -157
  469. package/src/store/chat/slices/plugin/action.ts +53 -68
  470. package/src/store/chat/slices/thread/action.test.ts +13 -4
  471. package/src/store/chat/slices/thread/action.ts +3 -1
  472. package/src/store/chat/slices/topic/action.test.ts +1 -1
  473. package/src/store/chat/slices/topic/action.ts +1 -2
  474. package/src/store/chat/slices/topic/reducer.ts +1 -2
  475. package/src/store/file/slices/chat/action.ts +1 -4
  476. package/src/store/file/slices/fileManager/action.ts +2 -3
  477. package/src/store/global/store.ts +1 -7
  478. package/src/store/session/slices/sessionGroup/action.test.ts +5 -5
  479. package/src/store/tool/selectors/tool.test.ts +1 -1
  480. package/src/store/tool/selectors/tool.ts +6 -8
  481. package/src/store/tool/slices/builtin/action.test.ts +83 -35
  482. package/src/store/tool/slices/builtin/action.ts +0 -9
  483. package/src/store/tool/slices/builtin/selectors.test.ts +4 -30
  484. package/src/store/tool/slices/builtin/selectors.ts +15 -21
  485. package/src/store/tool/slices/mcpStore/action.test.ts +95 -3
  486. package/src/store/tool/slices/mcpStore/action.ts +177 -53
  487. package/src/store/tool/slices/oldStore/initialState.ts +1 -2
  488. package/src/store/user/initialState.ts +1 -7
  489. package/src/store/user/selectors.ts +1 -5
  490. package/src/store/user/slices/common/action.test.ts +1 -4
  491. package/src/store/user/slices/common/action.ts +5 -4
  492. package/src/store/user/slices/preference/action.ts +8 -1
  493. package/src/store/user/slices/preference/selectors/index.ts +2 -0
  494. package/src/store/user/slices/preference/selectors/labPrefer.ts +13 -0
  495. package/src/store/user/slices/preference/{selectors.ts → selectors/preference.ts} +0 -2
  496. package/src/store/user/slices/settings/selectors/index.ts +1 -0
  497. package/src/store/user/slices/settings/selectors/keyVaults.ts +21 -0
  498. package/src/store/user/store.ts +0 -3
  499. package/src/tools/index.ts +0 -6
  500. package/src/tools/renders.ts +0 -3
  501. package/src/tools/web-browsing/Portal/Search/Footer.tsx +2 -2
  502. package/src/tools/web-browsing/Render/Search/ConfigForm/Form.tsx +1 -1
  503. package/tsconfig.json +9 -3
  504. package/packages/const/src/guide.ts +0 -89
  505. package/packages/context-engine/src/providers/InboxGuide.ts +0 -102
  506. package/packages/context-engine/src/providers/__tests__/InboxGuideProvider.test.ts +0 -121
  507. package/packages/utils/src/_deprecated/__snapshots__/parseModels.test.ts.snap +0 -104
  508. package/packages/utils/src/_deprecated/parseModels.test.ts +0 -287
  509. package/packages/utils/src/_deprecated/parseModels.ts +0 -165
  510. package/src/app/(backend)/trpc/edge/[trpc]/route.ts +0 -26
  511. package/src/app/[variants]/(main)/(mobile)/me/data/features/Category.tsx +0 -48
  512. package/src/app/[variants]/(main)/(mobile)/me/data/features/Header.tsx +0 -33
  513. package/src/app/[variants]/(main)/(mobile)/me/data/layout.tsx +0 -13
  514. package/src/app/[variants]/(main)/(mobile)/me/data/loading.tsx +0 -5
  515. package/src/app/[variants]/(main)/(mobile)/me/data/page.tsx +0 -29
  516. package/src/app/[variants]/(main)/chat/features/Migration/DBReader.ts +0 -290
  517. package/src/app/[variants]/(main)/chat/features/Migration/ExportConfigButton.tsx +0 -35
  518. package/src/app/[variants]/(main)/chat/features/Migration/Failed.tsx +0 -120
  519. package/src/app/[variants]/(main)/chat/features/Migration/Modal.tsx +0 -81
  520. package/src/app/[variants]/(main)/chat/features/Migration/Start.tsx +0 -108
  521. package/src/app/[variants]/(main)/chat/features/Migration/UpgradeButton.tsx +0 -71
  522. package/src/app/[variants]/(main)/chat/features/Migration/const.ts +0 -15
  523. package/src/app/[variants]/(main)/chat/features/Migration/index.tsx +0 -50
  524. package/src/app/[variants]/loading/Client/Content.tsx +0 -48
  525. package/src/app/[variants]/loading/Client/Error.tsx +0 -27
  526. package/src/app/[variants]/loading/Client/Redirect.tsx +0 -47
  527. package/src/app/[variants]/loading/Client/index.tsx +0 -22
  528. package/src/components/InnerLink.tsx +0 -20
  529. package/src/database/_deprecated/core/__tests__/db-upgrade.test.ts +0 -42
  530. package/src/database/_deprecated/core/__tests__/db.test.ts +0 -79
  531. package/src/database/_deprecated/core/__tests__/model.test.ts +0 -55
  532. package/src/database/_deprecated/core/db.ts +0 -246
  533. package/src/database/_deprecated/core/index.ts +0 -2
  534. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/fixtures/input.json +0 -55
  535. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/fixtures/output.json +0 -60
  536. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/index.test.ts +0 -14
  537. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/index.ts +0 -22
  538. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/type.ts +0 -105
  539. package/src/database/_deprecated/core/model.ts +0 -218
  540. package/src/database/_deprecated/core/schemas.ts +0 -88
  541. package/src/database/_deprecated/core/types/db.ts +0 -15
  542. package/src/database/_deprecated/models/__DEBUG.ts +0 -124
  543. package/src/database/_deprecated/models/__tests__/file.test.ts +0 -83
  544. package/src/database/_deprecated/models/__tests__/message.test.ts +0 -426
  545. package/src/database/_deprecated/models/__tests__/plugin.test.ts +0 -81
  546. package/src/database/_deprecated/models/__tests__/session.test.ts +0 -253
  547. package/src/database/_deprecated/models/__tests__/sessionGroup.test.ts +0 -220
  548. package/src/database/_deprecated/models/__tests__/topic.test.ts +0 -523
  549. package/src/database/_deprecated/models/__tests__/user.test.ts +0 -82
  550. package/src/database/_deprecated/models/file.ts +0 -51
  551. package/src/database/_deprecated/models/message.ts +0 -277
  552. package/src/database/_deprecated/models/plugin.ts +0 -62
  553. package/src/database/_deprecated/models/session.ts +0 -271
  554. package/src/database/_deprecated/models/sessionGroup.ts +0 -93
  555. package/src/database/_deprecated/models/topic.ts +0 -250
  556. package/src/database/_deprecated/models/user.ts +0 -69
  557. package/src/database/_deprecated/schemas/files.ts +0 -39
  558. package/src/database/_deprecated/schemas/message.ts +0 -50
  559. package/src/database/_deprecated/schemas/plugin.ts +0 -12
  560. package/src/database/_deprecated/schemas/session.ts +0 -54
  561. package/src/database/_deprecated/schemas/sessionGroup.ts +0 -8
  562. package/src/database/_deprecated/schemas/topic.ts +0 -12
  563. package/src/database/_deprecated/schemas/user.ts +0 -40
  564. package/src/envs/__tests__/auth.test.ts +0 -200
  565. package/src/features/DataImporter/_deprecated.ts +0 -43
  566. package/src/features/InitClientDB/EnableModal.tsx +0 -118
  567. package/src/features/InitClientDB/ErrorResult.tsx +0 -143
  568. package/src/features/InitClientDB/InitIndicator.tsx +0 -124
  569. package/src/features/InitClientDB/PGliteIcon.tsx +0 -28
  570. package/src/features/InitClientDB/features/DatabaseRepair/Backup.tsx +0 -75
  571. package/src/features/InitClientDB/features/DatabaseRepair/Diagnosis.tsx +0 -98
  572. package/src/features/InitClientDB/features/DatabaseRepair/Repair.tsx +0 -218
  573. package/src/features/InitClientDB/features/DatabaseRepair/index.tsx +0 -91
  574. package/src/features/InitClientDB/index.tsx +0 -37
  575. package/src/hooks/_header.ts +0 -23
  576. package/src/libs/next-auth/sso-providers/azure-ad.ts +0 -33
  577. package/src/libs/trpc/client/edge.ts +0 -26
  578. package/src/libs/trpc/edge/context.ts +0 -71
  579. package/src/libs/trpc/edge/index.ts +0 -45
  580. package/src/libs/trpc/edge/init.ts +0 -26
  581. package/src/libs/trpc/edge/middleware/jwtPayload.test.ts +0 -75
  582. package/src/libs/trpc/edge/middleware/jwtPayload.ts +0 -14
  583. package/src/migrations/FromV0ToV1.ts +0 -10
  584. package/src/migrations/FromV1ToV2/fixtures/input-v1-session.json +0 -191
  585. package/src/migrations/FromV1ToV2/fixtures/output-v2.json +0 -202
  586. package/src/migrations/FromV1ToV2/index.ts +0 -82
  587. package/src/migrations/FromV1ToV2/migrations.test.ts +0 -224
  588. package/src/migrations/FromV1ToV2/types/v1.ts +0 -78
  589. package/src/migrations/FromV1ToV2/types/v2.ts +0 -52
  590. package/src/migrations/FromV2ToV3/fixtures/input-v2-session.json +0 -72
  591. package/src/migrations/FromV2ToV3/fixtures/output-v3-from-v1.json +0 -203
  592. package/src/migrations/FromV2ToV3/fixtures/output-v3.json +0 -74
  593. package/src/migrations/FromV2ToV3/index.ts +0 -30
  594. package/src/migrations/FromV2ToV3/migrations.test.ts +0 -42
  595. package/src/migrations/FromV2ToV3/types/v3.ts +0 -27
  596. package/src/migrations/FromV3ToV4/fixtures/azure-input-v3.json +0 -79
  597. package/src/migrations/FromV3ToV4/fixtures/azure-output-v4.json +0 -75
  598. package/src/migrations/FromV3ToV4/fixtures/ollama-input-v3.json +0 -85
  599. package/src/migrations/FromV3ToV4/fixtures/ollama-output-v4.json +0 -86
  600. package/src/migrations/FromV3ToV4/fixtures/openai-input-v3.json +0 -77
  601. package/src/migrations/FromV3ToV4/fixtures/openai-output-v4.json +0 -77
  602. package/src/migrations/FromV3ToV4/fixtures/openrouter-input-v3.json +0 -82
  603. package/src/migrations/FromV3ToV4/fixtures/openrouter-output-v4.json +0 -85
  604. package/src/migrations/FromV3ToV4/fixtures/output-v4-from-v1.json +0 -203
  605. package/src/migrations/FromV3ToV4/index.ts +0 -102
  606. package/src/migrations/FromV3ToV4/migrations.test.ts +0 -195
  607. package/src/migrations/FromV3ToV4/types/v3.ts +0 -52
  608. package/src/migrations/FromV3ToV4/types/v4.ts +0 -37
  609. package/src/migrations/FromV4ToV5/fixtures/from-v1-to-v5-output.json +0 -245
  610. package/src/migrations/FromV4ToV5/fixtures/function-input-v4.json +0 -96
  611. package/src/migrations/FromV4ToV5/fixtures/function-output-v5.json +0 -120
  612. package/src/migrations/FromV4ToV5/index.ts +0 -58
  613. package/src/migrations/FromV4ToV5/migrations.test.ts +0 -49
  614. package/src/migrations/FromV4ToV5/types/v4.ts +0 -21
  615. package/src/migrations/FromV4ToV5/types/v5.ts +0 -27
  616. package/src/migrations/FromV5ToV6/fixtures/from-v1-to-v6-output.json +0 -247
  617. package/src/migrations/FromV5ToV6/fixtures/session-input-v5.json +0 -81
  618. package/src/migrations/FromV5ToV6/fixtures/session-output-v6.json +0 -85
  619. package/src/migrations/FromV5ToV6/index.ts +0 -61
  620. package/src/migrations/FromV5ToV6/migrations.test.ts +0 -50
  621. package/src/migrations/FromV5ToV6/types/v5.ts +0 -48
  622. package/src/migrations/FromV5ToV6/types/v6.ts +0 -63
  623. package/src/migrations/FromV6ToV7/fixtures/output-v7-from-v1.json +0 -203
  624. package/src/migrations/FromV6ToV7/fixtures/provider-input-v6.json +0 -103
  625. package/src/migrations/FromV6ToV7/fixtures/provider-output-v7.json +0 -118
  626. package/src/migrations/FromV6ToV7/index.ts +0 -101
  627. package/src/migrations/FromV6ToV7/migrations.test.ts +0 -64
  628. package/src/migrations/FromV6ToV7/types/v6.ts +0 -61
  629. package/src/migrations/FromV6ToV7/types/v7.ts +0 -69
  630. package/src/migrations/VersionController.test.ts +0 -88
  631. package/src/migrations/VersionController.ts +0 -67
  632. package/src/migrations/index.ts +0 -61
  633. package/src/server/globalConfig/_deprecated.test.ts +0 -92
  634. package/src/server/globalConfig/_deprecated.ts +0 -41
  635. package/src/server/routers/edge/appStatus.ts +0 -3
  636. package/src/server/routers/edge/index.ts +0 -14
  637. package/src/server/routers/edge/upload.ts +0 -16
  638. package/src/services/aiModel/client.ts +0 -70
  639. package/src/services/aiModel/server.test.ts +0 -122
  640. package/src/services/aiModel/server.ts +0 -51
  641. package/src/services/aiModel/type.ts +0 -32
  642. package/src/services/aiProvider/client.ts +0 -58
  643. package/src/services/aiProvider/server.ts +0 -43
  644. package/src/services/aiProvider/type.ts +0 -27
  645. package/src/services/baseClientService/index.ts +0 -9
  646. package/src/services/chat/__snapshots__/chat.test.ts.snap +0 -110
  647. package/src/services/chatGroup/client.ts +0 -63
  648. package/src/services/chatGroup/server.ts +0 -67
  649. package/src/services/chatGroup/type.ts +0 -22
  650. package/src/services/export/_deprecated.ts +0 -155
  651. package/src/services/export/client.ts +0 -15
  652. package/src/services/export/server.ts +0 -9
  653. package/src/services/export/type.ts +0 -5
  654. package/src/services/file/_deprecated.test.ts +0 -119
  655. package/src/services/file/_deprecated.ts +0 -80
  656. package/src/services/file/client.test.ts +0 -199
  657. package/src/services/file/client.ts +0 -85
  658. package/src/services/file/server.ts +0 -53
  659. package/src/services/file/type.ts +0 -13
  660. package/src/services/import/_deprecated.ts +0 -115
  661. package/src/services/import/client.test.ts +0 -1015
  662. package/src/services/import/client.ts +0 -64
  663. package/src/services/import/server.ts +0 -133
  664. package/src/services/import/type.ts +0 -17
  665. package/src/services/message/_deprecated.test.ts +0 -398
  666. package/src/services/message/_deprecated.ts +0 -168
  667. package/src/services/message/client.test.ts +0 -410
  668. package/src/services/message/client.ts +0 -186
  669. package/src/services/message/server.ts +0 -150
  670. package/src/services/message/type.ts +0 -54
  671. package/src/services/plugin/_deprecated.test.ts +0 -162
  672. package/src/services/plugin/_deprecated.ts +0 -42
  673. package/src/services/plugin/client.test.ts +0 -177
  674. package/src/services/plugin/client.ts +0 -46
  675. package/src/services/plugin/server.ts +0 -42
  676. package/src/services/plugin/type.ts +0 -23
  677. package/src/services/session/_deprecated.test.ts +0 -440
  678. package/src/services/session/_deprecated.ts +0 -190
  679. package/src/services/session/client.test.ts +0 -413
  680. package/src/services/session/client.ts +0 -193
  681. package/src/services/session/server.test.ts +0 -260
  682. package/src/services/session/server.ts +0 -125
  683. package/src/services/session/type.ts +0 -82
  684. package/src/services/thread/client.ts +0 -51
  685. package/src/services/thread/server.ts +0 -32
  686. package/src/services/thread/type.ts +0 -21
  687. package/src/services/topic/_deprecated.test.ts +0 -245
  688. package/src/services/topic/_deprecated.ts +0 -75
  689. package/src/services/topic/client.ts +0 -89
  690. package/src/services/topic/pglite.test.ts +0 -212
  691. package/src/services/topic/server.ts +0 -57
  692. package/src/services/topic/type.ts +0 -40
  693. package/src/services/user/_deprecated.test.ts +0 -101
  694. package/src/services/user/_deprecated.ts +0 -70
  695. package/src/services/user/client.test.ts +0 -108
  696. package/src/services/user/client.ts +0 -104
  697. package/src/services/user/server.test.ts +0 -149
  698. package/src/services/user/server.ts +0 -47
  699. package/src/services/user/type.ts +0 -21
  700. package/src/store/chat/slices/builtinTool/actions/__tests__/dalle.test.ts +0 -121
  701. package/src/store/chat/slices/builtinTool/actions/dalle.ts +0 -124
  702. package/src/store/global/actions/clientDb.ts +0 -67
  703. package/src/store/user/slices/modelList/__snapshots__/action.test.ts.snap +0 -12
  704. package/src/store/user/slices/modelList/action.test.ts +0 -359
  705. package/src/store/user/slices/modelList/action.ts +0 -223
  706. package/src/store/user/slices/modelList/initialState.ts +0 -15
  707. package/src/store/user/slices/modelList/reducers/customModelCard.test.ts +0 -204
  708. package/src/store/user/slices/modelList/reducers/customModelCard.ts +0 -64
  709. package/src/store/user/slices/modelList/selectors/index.ts +0 -3
  710. package/src/store/user/slices/modelList/selectors/keyVaults.test.ts +0 -201
  711. package/src/store/user/slices/modelList/selectors/keyVaults.ts +0 -50
  712. package/src/store/user/slices/modelList/selectors/modelConfig.test.ts +0 -219
  713. package/src/store/user/slices/modelList/selectors/modelConfig.ts +0 -95
  714. package/src/store/user/slices/modelList/selectors/modelProvider.test.ts +0 -138
  715. package/src/store/user/slices/modelList/selectors/modelProvider.ts +0 -170
  716. package/src/tools/dalle/Render/GalleyGrid.tsx +0 -60
  717. package/src/tools/dalle/Render/Item/EditMode.tsx +0 -66
  718. package/src/tools/dalle/Render/Item/Error.tsx +0 -49
  719. package/src/tools/dalle/Render/Item/Image.tsx +0 -44
  720. package/src/tools/dalle/Render/Item/ImageFileItem.tsx +0 -57
  721. package/src/tools/dalle/Render/Item/index.tsx +0 -88
  722. package/src/tools/dalle/Render/ToolBar.tsx +0 -56
  723. package/src/tools/dalle/Render/index.tsx +0 -52
  724. package/src/tools/dalle/index.ts +0 -92
  725. /package/src/{app/[variants]/(main)/settings/provider/features/ProviderConfig → components/Skeleton}/SkeletonInput.tsx +0 -0
  726. /package/src/{middleware.ts → proxy.ts} +0 -0
@@ -1,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();