@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,277 +0,0 @@
1
- import { UIChatMessage } from '@lobechat/types';
2
- import type { PartialDeep } from 'type-fest';
3
-
4
- import { BaseModel } from '@/database/_deprecated/core';
5
- import { DBModel } from '@/database/_deprecated/core/types/db';
6
- import { DB_Message, DB_MessageSchema } from '@/database/_deprecated/schemas/message';
7
- import { nanoid } from '@/utils/uuid';
8
-
9
- /**
10
- * use `@/types/message` instead
11
- * @deprecated
12
- */
13
- export interface CreateMessageParams
14
- extends Partial<Omit<UIChatMessage, 'content' | 'role'>>,
15
- Pick<UIChatMessage, 'content' | 'role'> {
16
- files?: string[];
17
- fromModel?: string;
18
- fromProvider?: string;
19
- sessionId: string;
20
- traceId?: string;
21
- }
22
-
23
- export interface QueryMessageParams {
24
- current?: number;
25
- pageSize?: number;
26
- sessionId: string;
27
- topicId?: string;
28
- }
29
-
30
- class _MessageModel extends BaseModel {
31
- constructor() {
32
- super('messages', DB_MessageSchema);
33
- }
34
-
35
- // **************** Query *************** //
36
-
37
- async query({
38
- sessionId,
39
- topicId,
40
- pageSize = 9999,
41
- current = 0,
42
- }: QueryMessageParams): Promise<UIChatMessage[]> {
43
- const offset = current * pageSize;
44
-
45
- const query = !!topicId
46
- ? // TODO: The query {"sessionId":"xxx","topicId":"xxx"} on messages would benefit of a compound index [sessionId+topicId]
47
- this.table.where({ sessionId, topicId }) // Use a compound index
48
- : this.table
49
- .where('sessionId')
50
- .equals(sessionId)
51
- .and((message) => !message.topicId);
52
-
53
- const dbMessages: DBModel<DB_Message>[] = await query
54
- .sortBy('createdAt')
55
- // handle page size
56
- .then((sortedArray) => sortedArray.slice(offset, offset + pageSize));
57
-
58
- const messages = dbMessages.map((msg) => this.mapToChatMessage(msg));
59
-
60
- const finalList: UIChatMessage[] = [];
61
-
62
- const addItem = (item: UIChatMessage) => {
63
- const isExist = finalList.some((i) => item.id === i.id);
64
- if (!isExist) {
65
- finalList.push(item);
66
- }
67
- };
68
- const messageMap = new Map<string, UIChatMessage>();
69
- for (const item of messages) messageMap.set(item.id, item);
70
-
71
- for (const item of messages) {
72
- if (!item.parentId || !messageMap.has(item.parentId)) {
73
- // 如果消息没有父消息或者父消息不在列表中,直接添加
74
- addItem(item);
75
- } else {
76
- // 如果消息有父消息,确保先添加父消息
77
- addItem(messageMap.get(item.parentId)!);
78
- addItem(item);
79
- }
80
- }
81
- return finalList;
82
- }
83
-
84
- async findById(id: string): Promise<DBModel<DB_Message>> {
85
- return this.table.get(id);
86
- }
87
-
88
- async queryAll() {
89
- const data: DBModel<DB_Message>[] = await this.table.orderBy('updatedAt').toArray();
90
-
91
- return data.map((element) => this.mapToChatMessage(element));
92
- }
93
-
94
- async queryBySessionId(sessionId: string) {
95
- return this.table.where('sessionId').equals(sessionId).toArray();
96
- }
97
-
98
- queryByTopicId = async (topicId: string) => {
99
- const dbMessages = await this.table.where('topicId').equals(topicId).toArray();
100
-
101
- return dbMessages.map((message) => this.mapToChatMessage(message));
102
- };
103
-
104
- async count() {
105
- return this.table.count();
106
- }
107
-
108
- // **************** Create *************** //
109
-
110
- async create(data: CreateMessageParams) {
111
- const id = nanoid();
112
-
113
- const messageData: DB_Message = this.mapChatMessageToDBMessage(data as UIChatMessage);
114
-
115
- return this._addWithSync(messageData, id);
116
- }
117
-
118
- async batchCreate(messages: UIChatMessage[]) {
119
- const data: DB_Message[] = messages.map((m) => this.mapChatMessageToDBMessage(m));
120
-
121
- return this._batchAdd(data);
122
- }
123
-
124
- async duplicateMessages(messages: UIChatMessage[]): Promise<UIChatMessage[]> {
125
- const duplicatedMessages = await this.createDuplicateMessages(messages);
126
- // 批量添加复制后的消息到数据库
127
- await this.batchCreate(duplicatedMessages);
128
- return duplicatedMessages;
129
- }
130
-
131
- // **************** Delete *************** //
132
-
133
- async delete(id: string) {
134
- return super._deleteWithSync(id);
135
- }
136
-
137
- async bulkDelete(ids: string[]) {
138
- return super._bulkDeleteWithSync(ids);
139
- }
140
-
141
- async clearTable() {
142
- return this._clearWithSync();
143
- }
144
-
145
- /**
146
- * Deletes multiple messages based on the assistantId and optionally the topicId.
147
- * If topicId is not provided, it deletes messages where topicId is undefined or null.
148
- * If topicId is provided, it deletes messages with that specific topicId.
149
- *
150
- * @param {string} sessionId - The identifier of the assistant associated with the messages.
151
- * @param {string | undefined} topicId - The identifier of the topic associated with the messages (optional).
152
- * @returns {Promise<void>}
153
- */
154
- async batchDelete(sessionId: string, topicId: string | undefined): Promise<void> {
155
- // If topicId is specified, use both assistantId and topicId as the filter criteria in the query.
156
- // Otherwise, filter by assistantId and require that topicId is undefined.
157
- const query = !!topicId
158
- ? this.table.where({ sessionId, topicId }) // Use a compound index
159
- : this.table
160
- .where('sessionId')
161
- .equals(sessionId)
162
- .and((message) => !message.topicId);
163
-
164
- // Retrieve a collection of message IDs that satisfy the criteria
165
- const messageIds = await query.primaryKeys();
166
-
167
- // Use the bulkDelete method to delete all selected messages in bulk
168
- return this._bulkDeleteWithSync(messageIds);
169
- }
170
-
171
- async batchDeleteBySessionId(sessionId: string): Promise<void> {
172
- // If topicId is specified, use both assistantId and topicId as the filter criteria in the query.
173
- // Otherwise, filter by assistantId and require that topicId is undefined.
174
- const messageIds = await this.table.where('sessionId').equals(sessionId).primaryKeys();
175
-
176
- // Use the bulkDelete method to delete all selected messages in bulk
177
- return this._bulkDeleteWithSync(messageIds);
178
- }
179
-
180
- /**
181
- * Delete all messages associated with the topicId
182
- * @param topicId
183
- */
184
- async batchDeleteByTopicId(topicId: string): Promise<void> {
185
- const messageIds = await this.table.where('topicId').equals(topicId).primaryKeys();
186
-
187
- return this._bulkDeleteWithSync(messageIds);
188
- }
189
-
190
- // **************** Update *************** //
191
-
192
- async update(id: string, data: PartialDeep<DB_Message>) {
193
- return super._updateWithSync(id, data);
194
- }
195
-
196
- async updatePluginState(id: string, value: any) {
197
- const item = await this.findById(id);
198
-
199
- return this.update(id, { pluginState: { ...item.pluginState, ...value } });
200
- }
201
-
202
- async updatePlugin(id: string, value: any) {
203
- const item = await this.findById(id);
204
-
205
- return this.update(id, { plugin: { ...item.plugin, ...value } });
206
- }
207
-
208
- /**
209
- * Batch updates multiple fields of the specified messages.
210
- *
211
- * @param {string[]} messageIds - The identifiers of the messages to be updated.
212
- * @param {Partial<DB_Message>} updateFields - An object containing the fields to update and their new values.
213
- * @returns {Promise<number>} - The number of updated messages.
214
- */
215
- async batchUpdate(messageIds: string[], updateFields: Partial<DB_Message>): Promise<number> {
216
- // Retrieve the messages by their IDs
217
- const messagesToUpdate = await this.table.where('id').anyOf(messageIds).toArray();
218
-
219
- // Update the specified fields of each message
220
- const updatedMessages = messagesToUpdate.map((message) => ({
221
- ...message,
222
- ...updateFields,
223
- }));
224
-
225
- // Use the bulkPut method to update the messages in bulk
226
- await this._bulkPutWithSync(updatedMessages);
227
-
228
- return updatedMessages.length;
229
- }
230
-
231
- // **************** Helper *************** //
232
-
233
- private async createDuplicateMessages(messages: UIChatMessage[]): Promise<UIChatMessage[]> {
234
- // 创建一个映射来存储原始消息ID和复制消息ID之间的关系
235
- const idMapping = new Map<string, string>();
236
-
237
- // 首先复制所有消息,并为每个复制的消息生成新的ID
238
- const duplicatedMessages = messages.map((originalMessage) => {
239
- const newId = nanoid();
240
- idMapping.set(originalMessage.id, newId);
241
-
242
- return { ...originalMessage, id: newId };
243
- });
244
-
245
- // 更新 parentId 为复制后的新ID
246
- for (const duplicatedMessage of duplicatedMessages) {
247
- if (duplicatedMessage.parentId && idMapping.has(duplicatedMessage.parentId)) {
248
- duplicatedMessage.parentId = idMapping.get(duplicatedMessage.parentId);
249
- }
250
- }
251
-
252
- return duplicatedMessages;
253
- }
254
-
255
- private mapChatMessageToDBMessage(message: UIChatMessage): DB_Message {
256
- const { extra, ...messageData } = message;
257
-
258
- return { ...messageData, ...extra } as DB_Message;
259
- }
260
-
261
- private mapToChatMessage = ({
262
- fromModel,
263
- fromProvider,
264
- translate,
265
- tts,
266
- ...item
267
- }: DBModel<DB_Message>) => {
268
- return {
269
- ...item,
270
- extra: { fromModel, fromProvider, translate, tts },
271
- meta: {},
272
- topicId: item.topicId ?? undefined,
273
- } as UIChatMessage;
274
- };
275
- }
276
-
277
- export const MessageModel = new _MessageModel();
@@ -1,62 +0,0 @@
1
- import { LobeTool } from '@lobechat/types';
2
- import { LobeChatPluginManifest } from '@lobehub/chat-plugin-sdk';
3
-
4
- import { BaseModel } from '@/database/_deprecated/core';
5
- import { merge } from '@/utils/merge';
6
-
7
- import { DB_Plugin, DB_PluginSchema } from '../schemas/plugin';
8
-
9
- export interface InstallPluginParams {
10
- identifier: string;
11
- manifest?: LobeChatPluginManifest;
12
- type: 'plugin' | 'customPlugin';
13
- }
14
-
15
- class _PluginModel extends BaseModel {
16
- constructor() {
17
- super('plugins', DB_PluginSchema);
18
- }
19
- // **************** Query *************** //
20
-
21
- getList = async (): Promise<DB_Plugin[]> => {
22
- return this.table.toArray();
23
- };
24
- // **************** Create *************** //
25
-
26
- create = async (plugin: InstallPluginParams) => {
27
- const old = await this.table.get(plugin.identifier);
28
- const dbPlugin = this.mapToDBPlugin(plugin);
29
-
30
- return this._putWithSync(merge(old, dbPlugin), plugin.identifier);
31
- };
32
-
33
- batchCreate = async (plugins: LobeTool[]) => {
34
- const dbPlugins = plugins.map((item) => this.mapToDBPlugin(item));
35
-
36
- return this._batchAdd(dbPlugins);
37
- };
38
- // **************** Delete *************** //
39
-
40
- delete(id: string) {
41
- return this._deleteWithSync(id);
42
- }
43
- clear() {
44
- return this._clearWithSync();
45
- }
46
-
47
- // **************** Update *************** //
48
-
49
- update: (id: string, value: Partial<DB_Plugin>) => Promise<number> = async (id, value) => {
50
- const { success } = await this._updateWithSync(id, value);
51
-
52
- return success;
53
- };
54
-
55
- // **************** Helper *************** //
56
-
57
- mapToDBPlugin(plugin: LobeTool) {
58
- return { ...plugin, id: plugin.identifier } as DB_Plugin;
59
- }
60
- }
61
-
62
- export const PluginModel = new _PluginModel();
@@ -1,271 +0,0 @@
1
- import type { PartialDeep } from 'type-fest';
2
-
3
- import { DEFAULT_AGENT_LOBE_SESSION } from '@/const/session';
4
- import { BaseModel } from '@/database/_deprecated/core';
5
- import { DBModel } from '@/database/_deprecated/core/types/db';
6
- import { DB_Session, DB_SessionSchema } from '@/database/_deprecated/schemas/session';
7
- import { LobeAgentConfig } from '@/types/agent';
8
- import {
9
- ChatSessionList,
10
- LobeAgentSession,
11
- LobeSessions,
12
- SessionDefaultGroup,
13
- SessionGroupId,
14
- } from '@/types/session';
15
- import { merge } from '@/utils/merge';
16
- import { uuid } from '@/utils/uuid';
17
-
18
- import { MessageModel } from './message';
19
- import { SessionGroupModel } from './sessionGroup';
20
- import { TopicModel } from './topic';
21
-
22
- class _SessionModel extends BaseModel {
23
- constructor() {
24
- super('sessions', DB_SessionSchema);
25
- }
26
-
27
- // **************** Query *************** //
28
-
29
- async query({
30
- pageSize = 9999,
31
- current = 0,
32
- }: { current?: number; pageSize?: number } = {}): Promise<LobeSessions> {
33
- const offset = current * pageSize;
34
-
35
- const items: DBModel<DB_Session>[] = await this.table
36
- .orderBy('updatedAt')
37
- .reverse()
38
- .offset(offset)
39
- .limit(pageSize)
40
- .toArray();
41
-
42
- return this.mapToAgentSessions(items);
43
- }
44
-
45
- async queryWithGroups(): Promise<ChatSessionList> {
46
- const sessionGroups = await SessionGroupModel.query();
47
-
48
- const sessions = await this.query();
49
-
50
- return { sessionGroups, sessions };
51
- }
52
-
53
- /**
54
- * get sessions by group
55
- * @param group
56
- */
57
- async querySessionsByGroupId(group: SessionGroupId): Promise<LobeSessions> {
58
- const items: DBModel<DB_Session>[] = await this.table
59
- .where('group')
60
- .equals(group)
61
- .and((session) => !session.pinned)
62
- .reverse()
63
- .sortBy('updatedAt');
64
-
65
- return this.mapToAgentSessions(items);
66
- }
67
-
68
- async queryByGroupIds(groups: string[]) {
69
- const pools = groups.map(async (id) => {
70
- return [id, await this.querySessionsByGroupId(id)] as const;
71
- });
72
- const groupItems = await Promise.all(pools);
73
-
74
- return Object.fromEntries(groupItems);
75
- }
76
-
77
- /**
78
- * Query sessions by keyword in title, description, content, or translated content
79
- * @param keyword The keyword to search for
80
- */
81
- async queryByKeyword(keyword: string): Promise<LobeSessions> {
82
- if (!keyword) return [];
83
-
84
- const startTime = Date.now();
85
- const keywordLowerCase = keyword.toLowerCase();
86
-
87
- // First, filter sessions by title and description
88
- const matchingSessionsPromise = this.table
89
- .filter((session) => {
90
- return (
91
- session.meta.title?.toLowerCase().includes(keywordLowerCase) ||
92
- session.meta.description?.toLowerCase().includes(keywordLowerCase)
93
- );
94
- })
95
- .toArray();
96
-
97
- // Next, find message IDs that contain the keyword in content or translated content
98
- const matchingMessagesPromise = this.db.messages
99
- .filter((message) => {
100
- // check content
101
- if (message.content.toLowerCase().includes(keywordLowerCase)) return true;
102
-
103
- // check translate content
104
- if (message.translate && message.translate.content) {
105
- return message.translate.content.toLowerCase().includes(keywordLowerCase);
106
- }
107
-
108
- return false;
109
- })
110
- .toArray();
111
-
112
- // match topics
113
- const matchingTopicsPromise = this.db.topics
114
- .filter((topic) => {
115
- return topic.title?.toLowerCase().includes(keywordLowerCase);
116
- })
117
- .toArray();
118
-
119
- // Resolve both promises
120
- const [matchingSessions, matchingMessages, matchingTopics] = await Promise.all([
121
- matchingSessionsPromise,
122
- matchingMessagesPromise,
123
- matchingTopicsPromise,
124
- ]);
125
-
126
- const sessionIdsFromMessages = matchingMessages.map((message) => message.sessionId);
127
- const sessionIdsFromTopics = matchingTopics.map((topic) => topic.sessionId);
128
-
129
- // Combine session IDs from both sources
130
- const combinedSessionIds = new Set([
131
- ...sessionIdsFromMessages,
132
- ...sessionIdsFromTopics,
133
- ...matchingSessions.map((session) => session.id),
134
- ]);
135
-
136
- // Retrieve unique sessions by IDs
137
- const items: DBModel<DB_Session>[] = await this.table
138
- .where('id')
139
- .anyOf([...combinedSessionIds])
140
- .toArray();
141
-
142
- console.log(`检索到 ${items.length} 项,耗时 ${Date.now() - startTime}ms`);
143
- return this.mapToAgentSessions(items);
144
- }
145
-
146
- async getPinnedSessions(): Promise<LobeSessions> {
147
- const items: DBModel<DB_Session>[] = await this.table
148
- .where('pinned')
149
- .equals(1)
150
- .reverse()
151
- .sortBy('updatedAt');
152
-
153
- return this.mapToAgentSessions(items);
154
- }
155
-
156
- async findById(id: string): Promise<DBModel<DB_Session>> {
157
- return this.table.get(id);
158
- }
159
-
160
- async isEmpty() {
161
- return (await this.table.count()) === 0;
162
- }
163
-
164
- async count() {
165
- return this.table.count();
166
- }
167
-
168
- // **************** Create *************** //
169
-
170
- async create(type: 'agent' | 'group', defaultValue: Partial<LobeAgentSession>, id = uuid()) {
171
- const data = merge(DEFAULT_AGENT_LOBE_SESSION, { type, ...defaultValue });
172
- const dataDB = this.mapToDB_Session(data);
173
- return this._addWithSync(dataDB, id);
174
- }
175
-
176
- async batchCreate(sessions: LobeAgentSession[]) {
177
- const DB_Sessions = await Promise.all(
178
- sessions.map(async (s) => {
179
- if (s.group && s.group !== SessionDefaultGroup.Default) {
180
- // Check if the group exists in the SessionGroup table
181
- const groupExists = await SessionGroupModel.findById(s.group);
182
- // If the group does not exist, set it to default
183
- if (!groupExists) {
184
- s.group = SessionDefaultGroup.Default;
185
- }
186
- }
187
- return this.mapToDB_Session(s);
188
- }),
189
- );
190
-
191
- return this._batchAdd<DB_Session>(DB_Sessions, { idGenerator: uuid });
192
- }
193
-
194
- async duplicate(id: string, newTitle?: string) {
195
- const session = await this.findById(id);
196
- if (!session) return;
197
-
198
- const newSession = merge(session, { meta: { title: newTitle } });
199
-
200
- return this._addWithSync(newSession, uuid());
201
- }
202
-
203
- // **************** Delete *************** //
204
-
205
- /**
206
- * Delete a session , also delete all messages and topic associated with it.
207
- */
208
- async delete(id: string) {
209
- return this.db.transaction('rw', [this.table, this.db.topics, this.db.messages], async () => {
210
- // Delete all topics associated with the session
211
- await TopicModel.batchDeleteBySessionId(id);
212
-
213
- // Delete all messages associated with the session
214
- await MessageModel.batchDeleteBySessionId(id);
215
-
216
- // Finally, delete the session itself
217
- await this._deleteWithSync(id);
218
- });
219
- }
220
-
221
- async batchDelete(ids: string[]) {
222
- return this._bulkDeleteWithSync(ids);
223
- }
224
-
225
- async clearTable() {
226
- return this._clearWithSync();
227
- }
228
-
229
- // **************** Update *************** //
230
-
231
- async update(id: string, data: Partial<DB_Session>) {
232
- return super._updateWithSync(id, data);
233
- }
234
-
235
- async updateConfig(id: string, data: PartialDeep<LobeAgentConfig>) {
236
- const session = await this.findById(id);
237
- if (!session) return;
238
-
239
- const config = merge(session.config, data);
240
-
241
- return this.update(id, { config });
242
- }
243
-
244
- // **************** Helper *************** //
245
-
246
- private mapToDB_Session(session: LobeAgentSession): DBModel<DB_Session> {
247
- return {
248
- ...session,
249
- createdAt: session.createdAt?.valueOf(),
250
- group: session.group || SessionDefaultGroup.Default,
251
- pinned: session.pinned ? 1 : 0,
252
- updatedAt: session.updatedAt?.valueOf(),
253
- };
254
- }
255
-
256
- private DB_SessionToAgentSession(session: DBModel<DB_Session>) {
257
- return {
258
- ...session,
259
- createdAt: new Date(session.createdAt),
260
- model: session.config.model,
261
- pinned: !!session.pinned,
262
- updatedAt: new Date(session.updatedAt),
263
- } as LobeAgentSession;
264
- }
265
-
266
- private mapToAgentSessions(session: DBModel<DB_Session>[]) {
267
- return session.map((item) => this.DB_SessionToAgentSession(item));
268
- }
269
- }
270
-
271
- export const SessionModel = new _SessionModel();
@@ -1,93 +0,0 @@
1
- import { BaseModel } from '@/database/_deprecated/core';
2
- import {
3
- DB_SessionGroup,
4
- DB_SessionGroupSchema,
5
- } from '@/database/_deprecated/schemas/sessionGroup';
6
- import { SessionGroups } from '@/types/session';
7
- import { nanoid } from '@/utils/uuid';
8
-
9
- class _SessionGroupModel extends BaseModel {
10
- constructor() {
11
- super('sessionGroups', DB_SessionGroupSchema);
12
- }
13
-
14
- // **************** Query *************** //
15
-
16
- async query(): Promise<SessionGroups> {
17
- const allGroups = await this.table.toArray();
18
-
19
- // 自定义排序,先按 sort 存在与否分组,然后分别排序
20
- return allGroups.sort((a, b) => {
21
- // 如果两个项都有 sort,则按 sort 排序
22
- if (a.sort !== undefined && b.sort !== undefined) {
23
- // 如果sort 一样,按时间倒序排序
24
- if (a.sort === b.sort) return b.createdAt - a.createdAt;
25
-
26
- return a.sort - b.sort;
27
- }
28
- // 如果 a 有 sort 而 b 没有,则 a 排在前面
29
- if (a.sort !== undefined) {
30
- return -1;
31
- }
32
- // 如果 b 有 sort 而 a 没有,则 b 排在前面
33
- if (b.sort !== undefined) {
34
- return 1;
35
- }
36
- // 如果两个项都没有 sort,则按 createdAt 倒序排序
37
- return b.createdAt - a.createdAt;
38
- });
39
- }
40
-
41
- async findById(id: string): Promise<DB_SessionGroup> {
42
- return this.table.get(id);
43
- }
44
-
45
- // **************** Create *************** //
46
-
47
- async create(name: string, sort?: number, id = nanoid()) {
48
- return this._addWithSync({ name, sort }, id);
49
- }
50
-
51
- async batchCreate(groups: SessionGroups) {
52
- return this._batchAdd(groups, { idGenerator: nanoid });
53
- }
54
-
55
- // **************** Delete *************** //
56
- async delete(id: string, removeGroupItem: boolean = false) {
57
- const { SessionModel } = await import('./session');
58
- this.db.sessions.toCollection().modify(async (session) => {
59
- // update all session associated with the sessionGroup to default
60
- if (session.group === id) {
61
- await SessionModel.update(session.id, { group: 'default' });
62
- }
63
- });
64
-
65
- if (!removeGroupItem) {
66
- return this._deleteWithSync(id);
67
- } else {
68
- const sessionIds = await this.db.sessions.where('group').equals(id).primaryKeys();
69
-
70
- return await SessionModel.batchDelete(sessionIds);
71
- }
72
- }
73
-
74
- async clear() {
75
- await this._clearWithSync();
76
- }
77
-
78
- // **************** Update *************** //
79
-
80
- async update(id: string, data: Partial<DB_SessionGroup>) {
81
- return super._updateWithSync(id, data);
82
- }
83
-
84
- async updateOrder(sortMap: { id: string; sort: number }[]) {
85
- return this.db.transaction('rw', this.table, async () => {
86
- for (const { id, sort } of sortMap) {
87
- await this.update(id, { sort });
88
- }
89
- });
90
- }
91
- }
92
-
93
- export const SessionGroupModel = new _SessionGroupModel();