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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (603) hide show
  1. package/.env.desktop +1 -2
  2. package/.env.example +0 -3
  3. package/.env.example.development +0 -2
  4. package/.github/workflows/claude-auto-testing.yml +73 -0
  5. package/.github/workflows/claude-translate-comments.yml +67 -0
  6. package/.github/workflows/desktop-pr-build.yml +18 -16
  7. package/.github/workflows/docker.yml +25 -20
  8. package/.github/workflows/e2e.yml +17 -3
  9. package/.github/workflows/release-desktop-beta.yml +12 -12
  10. package/.github/workflows/release.yml +3 -5
  11. package/.github/workflows/test.yml +47 -12
  12. package/.nvmrc +1 -1
  13. package/CHANGELOG.md +484 -0
  14. package/Dockerfile +1 -3
  15. package/README.md +2 -45
  16. package/README.zh-CN.md +2 -45
  17. package/apps/desktop/src/main/controllers/AuthCtr.ts +53 -39
  18. package/apps/desktop/src/main/controllers/__tests__/AuthCtr.test.ts +706 -0
  19. package/apps/desktop/src/main/utils/next-electron-rsc.ts +7 -5
  20. package/apps/desktop/tsconfig.json +0 -1
  21. package/changelog/v1.json +159 -0
  22. package/docs/development/database-schema.dbml +11 -1
  23. package/docs/self-hosting/advanced/auth/next-auth/auth0.mdx +2 -2
  24. package/docs/self-hosting/advanced/auth/next-auth/auth0.zh-CN.mdx +2 -2
  25. package/docs/self-hosting/advanced/auth/next-auth/authelia.mdx +2 -2
  26. package/docs/self-hosting/advanced/auth/next-auth/authelia.zh-CN.mdx +2 -2
  27. package/docs/self-hosting/advanced/auth/next-auth/authentik.mdx +2 -2
  28. package/docs/self-hosting/advanced/auth/next-auth/authentik.zh-CN.mdx +2 -2
  29. package/docs/self-hosting/advanced/auth/next-auth/casdoor.mdx +2 -2
  30. package/docs/self-hosting/advanced/auth/next-auth/casdoor.zh-CN.mdx +2 -2
  31. package/docs/self-hosting/advanced/auth/next-auth/cloudflare-zero-trust.mdx +2 -2
  32. package/docs/self-hosting/advanced/auth/next-auth/cloudflare-zero-trust.zh-CN.mdx +2 -2
  33. package/docs/self-hosting/advanced/auth/next-auth/github.mdx +2 -2
  34. package/docs/self-hosting/advanced/auth/next-auth/github.zh-CN.mdx +2 -2
  35. package/docs/self-hosting/advanced/auth/next-auth/google.mdx +32 -29
  36. package/docs/self-hosting/advanced/auth/next-auth/keycloak.mdx +2 -2
  37. package/docs/self-hosting/advanced/auth/next-auth/keycloak.zh-CN.mdx +2 -2
  38. package/docs/self-hosting/advanced/auth/next-auth/logto.mdx +5 -3
  39. package/docs/self-hosting/advanced/auth/next-auth/logto.zh-CN.mdx +5 -3
  40. package/docs/self-hosting/advanced/auth/next-auth/microsoft-entra-id.mdx +2 -2
  41. package/docs/self-hosting/advanced/auth/next-auth/microsoft-entra-id.zh-CN.mdx +2 -2
  42. package/docs/self-hosting/advanced/auth/next-auth/okta.mdx +2 -2
  43. package/docs/self-hosting/advanced/auth/next-auth/okta.zh-CN.mdx +2 -2
  44. package/docs/self-hosting/advanced/auth/next-auth/wechat.mdx +2 -2
  45. package/docs/self-hosting/advanced/auth/next-auth/wechat.zh-CN.mdx +2 -2
  46. package/docs/self-hosting/advanced/auth/next-auth/zitadel.mdx +2 -2
  47. package/docs/self-hosting/advanced/auth/next-auth/zitadel.zh-CN.mdx +2 -2
  48. package/docs/self-hosting/advanced/auth.mdx +32 -21
  49. package/docs/self-hosting/advanced/auth.zh-CN.mdx +30 -19
  50. package/docs/self-hosting/advanced/feature-flags.mdx +0 -1
  51. package/docs/self-hosting/advanced/feature-flags.zh-CN.mdx +0 -1
  52. package/docs/self-hosting/advanced/online-search.mdx +30 -25
  53. package/docs/self-hosting/advanced/online-search.zh-CN.mdx +25 -23
  54. package/e2e/src/features/discover/smoke.feature +34 -1
  55. package/e2e/src/steps/discover/smoke.steps.ts +116 -4
  56. package/e2e/tsconfig.json +0 -1
  57. package/locales/ar/models.json +15 -6
  58. package/locales/ar/oauth.json +1 -0
  59. package/locales/bg-BG/models.json +15 -6
  60. package/locales/bg-BG/oauth.json +1 -0
  61. package/locales/de-DE/models.json +15 -6
  62. package/locales/de-DE/oauth.json +1 -0
  63. package/locales/en-US/models.json +15 -6
  64. package/locales/en-US/oauth.json +1 -0
  65. package/locales/es-ES/models.json +15 -6
  66. package/locales/es-ES/oauth.json +1 -0
  67. package/locales/fa-IR/models.json +15 -6
  68. package/locales/fa-IR/oauth.json +1 -0
  69. package/locales/fr-FR/models.json +15 -6
  70. package/locales/fr-FR/oauth.json +1 -0
  71. package/locales/it-IT/models.json +15 -6
  72. package/locales/it-IT/oauth.json +1 -0
  73. package/locales/ja-JP/models.json +15 -6
  74. package/locales/ja-JP/oauth.json +1 -0
  75. package/locales/ko-KR/models.json +21 -12
  76. package/locales/ko-KR/oauth.json +1 -0
  77. package/locales/nl-NL/models.json +15 -6
  78. package/locales/nl-NL/oauth.json +1 -0
  79. package/locales/pl-PL/models.json +15 -6
  80. package/locales/pl-PL/oauth.json +1 -0
  81. package/locales/pt-BR/models.json +15 -6
  82. package/locales/pt-BR/oauth.json +1 -0
  83. package/locales/ru-RU/models.json +15 -6
  84. package/locales/ru-RU/oauth.json +1 -0
  85. package/locales/tr-TR/models.json +15 -6
  86. package/locales/tr-TR/oauth.json +1 -0
  87. package/locales/vi-VN/models.json +15 -6
  88. package/locales/vi-VN/oauth.json +1 -0
  89. package/locales/zh-CN/models.json +15 -6
  90. package/locales/zh-CN/oauth.json +1 -0
  91. package/locales/zh-TW/models.json +15 -6
  92. package/locales/zh-TW/oauth.json +1 -0
  93. package/next.config.ts +2 -3
  94. package/package.json +74 -80
  95. package/packages/const/src/index.ts +0 -1
  96. package/packages/const/src/models.ts +13 -0
  97. package/packages/const/src/url.ts +1 -4
  98. package/packages/const/src/version.ts +3 -3
  99. package/packages/context-engine/src/index.ts +1 -6
  100. package/packages/context-engine/src/processors/GroupMessageFlatten.ts +12 -2
  101. package/packages/context-engine/src/processors/__tests__/GroupMessageFlatten.test.ts +73 -9
  102. package/packages/context-engine/src/providers/index.ts +0 -2
  103. package/packages/database/migrations/0041_improve_index.sql +10 -0
  104. package/packages/database/migrations/meta/0041_snapshot.json +7784 -0
  105. package/packages/database/migrations/meta/_journal.json +7 -0
  106. package/packages/database/package.json +1 -1
  107. package/packages/database/src/core/migrations.json +17 -0
  108. package/packages/database/src/core/web-server.ts +2 -1
  109. package/packages/database/src/models/__tests__/message.grouping.test.ts +812 -0
  110. package/packages/database/src/models/__tests__/message.test.ts +322 -170
  111. package/packages/database/src/models/message.ts +62 -24
  112. package/packages/database/src/models/session.ts +60 -19
  113. package/packages/database/src/repositories/dataImporter/deprecated/__tests__/index.test.ts +2 -1
  114. package/packages/database/src/repositories/dataImporter/deprecated/index.ts +7 -1
  115. package/packages/database/src/schemas/agent.ts +10 -11
  116. package/packages/database/src/schemas/message.ts +5 -1
  117. package/packages/database/src/schemas/relations.ts +6 -4
  118. package/packages/database/src/schemas/session.ts +2 -0
  119. package/packages/database/src/schemas/topic.ts +6 -1
  120. package/packages/database/src/utils/__tests__/groupMessages.test.ts +145 -2
  121. package/packages/database/src/utils/groupMessages.ts +7 -5
  122. package/packages/electron-client-ipc/package.json +4 -1
  123. package/packages/file-loaders/package.json +1 -0
  124. package/packages/memory-extract/package.json +1 -1
  125. package/packages/model-bank/src/aiModels/anthropic.ts +0 -63
  126. package/packages/model-bank/src/aiModels/azure.ts +155 -0
  127. package/packages/model-bank/src/aiModels/bedrock.ts +44 -0
  128. package/packages/model-bank/src/aiModels/higress.ts +0 -55
  129. package/packages/model-bank/src/aiModels/infiniai.ts +21 -0
  130. package/packages/model-bank/src/aiModels/ollamacloud.ts +13 -0
  131. package/packages/model-bank/src/aiModels/siliconcloud.ts +19 -0
  132. package/packages/model-runtime/src/core/parameterResolver.ts +3 -0
  133. package/packages/model-runtime/src/core/streams/openai/__snapshots__/responsesStream.test.ts.snap +0 -38
  134. package/packages/model-runtime/src/providers/azureOpenai/index.ts +2 -1
  135. package/packages/model-runtime/src/providers/minimax/index.ts +5 -5
  136. package/packages/model-runtime/src/providers/search1api/index.test.ts +2 -2
  137. package/packages/model-runtime/src/utils/googleErrorParser.test.ts +125 -0
  138. package/packages/model-runtime/src/utils/googleErrorParser.ts +103 -77
  139. package/packages/types/src/message/common/base.ts +13 -0
  140. package/packages/types/src/message/common/image.ts +8 -0
  141. package/packages/types/src/message/common/metadata.ts +39 -0
  142. package/packages/types/src/message/common/tools.ts +10 -0
  143. package/packages/types/src/message/db/params.ts +47 -1
  144. package/packages/types/src/message/ui/chat.ts +4 -1
  145. package/packages/types/src/message/ui/params.ts +98 -4
  146. package/packages/types/src/search.ts +16 -0
  147. package/packages/types/src/serverConfig.ts +2 -6
  148. package/packages/types/src/user/index.ts +13 -1
  149. package/packages/types/src/user/settings/index.ts +22 -0
  150. package/packages/utils/src/apiKey.test.ts +139 -0
  151. package/packages/utils/src/client/clipboard.ts +2 -2
  152. package/packages/utils/src/client/exportFile.ts +10 -10
  153. package/packages/utils/src/client/parserPlaceholder.ts +18 -18
  154. package/packages/utils/src/client/topic.ts +10 -10
  155. package/packages/utils/src/client/xor-obfuscation.ts +11 -11
  156. package/packages/web-crawler/src/crawImpl/firecrawl.ts +39 -12
  157. package/packages/web-crawler/tsconfig.json +0 -1
  158. package/renovate.json +20 -3
  159. package/scripts/migrateServerDB/errorHint.js +1 -7
  160. package/scripts/migrateServerDB/index.ts +2 -1
  161. package/src/app/(backend)/webapi/revalidate/route.ts +1 -1
  162. package/src/app/[variants]/(auth)/signup/[[...signup]]/page.tsx +1 -8
  163. package/src/app/[variants]/(main)/(mobile)/me/(home)/__tests__/useCategory.test.tsx +9 -0
  164. package/src/app/[variants]/(main)/(mobile)/me/(home)/features/UserBanner.tsx +3 -6
  165. package/src/app/[variants]/(main)/(mobile)/me/(home)/layout.tsx +0 -2
  166. package/src/app/[variants]/(main)/_layout/Desktop/SideBar/TopActions.tsx +1 -4
  167. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/V1Mobile/index.tsx +2 -2
  168. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/V1Mobile/useSend.ts +6 -4
  169. package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/useSend.ts +15 -10
  170. package/src/app/[variants]/(main)/chat/@session/features/SessionListContent/List/Item/Actions.tsx +3 -28
  171. package/src/app/[variants]/(main)/chat/@session/features/SessionListContent/List/Item/index.tsx +4 -2
  172. package/src/app/[variants]/(main)/chat/_layout/Desktop/index.tsx +0 -2
  173. package/src/app/[variants]/(main)/chat/_layout/Mobile.tsx +1 -5
  174. package/src/app/[variants]/(main)/chat/settings/features/HeaderContent.tsx +2 -62
  175. package/src/app/[variants]/(main)/discover/(list)/features/Pagination.tsx +1 -0
  176. package/src/app/[variants]/(main)/discover/(list)/features/SortButton/index.tsx +1 -1
  177. package/src/app/[variants]/(main)/discover/(list)/mcp/features/List/Item.tsx +1 -0
  178. package/src/app/[variants]/(main)/discover/(list)/model/features/List/Item.tsx +1 -0
  179. package/src/app/[variants]/(main)/discover/(list)/provider/features/List/Item.tsx +1 -0
  180. package/src/app/[variants]/(main)/discover/components/CategoryMenu.tsx +9 -1
  181. package/src/app/[variants]/(main)/image/@topic/features/Topics/TopicList.tsx +1 -0
  182. package/src/app/[variants]/(main)/image/features/PromptInput/index.tsx +1 -1
  183. package/src/app/[variants]/(main)/image/page.tsx +0 -2
  184. package/src/app/[variants]/(main)/labs/components/LabCard.tsx +3 -1
  185. package/src/app/[variants]/(main)/profile/_layout/Desktop/index.tsx +23 -24
  186. package/src/app/[variants]/(main)/profile/_layout/Mobile/index.tsx +5 -9
  187. package/src/app/[variants]/(main)/settings/_layout/Desktop/index.tsx +0 -2
  188. package/src/app/[variants]/(main)/settings/_layout/Mobile/index.tsx +0 -2
  189. package/src/app/[variants]/(main)/settings/_layout/SettingsContent.tsx +0 -3
  190. package/src/app/[variants]/(main)/settings/provider/(list)/ProviderGrid/Card.tsx +1 -1
  191. package/src/app/[variants]/(main)/settings/provider/detail/azure/index.tsx +5 -7
  192. package/src/app/[variants]/layout.tsx +1 -0
  193. package/src/app/[variants]/loading/index.tsx +1 -10
  194. package/src/app/[variants]/oauth/ResultLayout.tsx +47 -0
  195. package/src/app/[variants]/oauth/callback/error/page.tsx +20 -33
  196. package/src/app/[variants]/oauth/callback/layout.tsx +1 -0
  197. package/src/app/[variants]/oauth/callback/success/page.tsx +8 -22
  198. package/src/app/[variants]/oauth/consent/[uid]/Consent/BuiltinConsent.tsx +47 -0
  199. package/src/app/[variants]/oauth/consent/[uid]/{Consent.tsx → Consent/index.tsx} +12 -1
  200. package/src/app/[variants]/oauth/consent/[uid]/Login.tsx +19 -2
  201. package/src/app/sitemap.tsx +7 -1
  202. package/src/components/InvalidAPIKey/APIKeyForm/Bedrock.tsx +8 -13
  203. package/src/components/Link.tsx +12 -0
  204. package/src/components/Thinking/index.tsx +4 -3
  205. package/src/config/db.ts +0 -5
  206. package/src/config/featureFlags/schema.test.ts +0 -2
  207. package/src/config/featureFlags/schema.ts +0 -6
  208. package/src/config/modelProviders/ai21.ts +1 -16
  209. package/src/config/modelProviders/ai302.ts +1 -128
  210. package/src/config/modelProviders/ai360.ts +1 -32
  211. package/src/config/modelProviders/anthropic.ts +1 -94
  212. package/src/config/modelProviders/azure.ts +1 -51
  213. package/src/config/modelProviders/baichuan.ts +1 -57
  214. package/src/config/modelProviders/bedrock.ts +1 -276
  215. package/src/config/modelProviders/cloudflare.ts +1 -64
  216. package/src/config/modelProviders/deepseek.ts +1 -19
  217. package/src/config/modelProviders/fireworksai.ts +1 -174
  218. package/src/config/modelProviders/giteeai.ts +1 -135
  219. package/src/config/modelProviders/github.ts +1 -254
  220. package/src/config/modelProviders/google.ts +1 -130
  221. package/src/config/modelProviders/groq.ts +1 -119
  222. package/src/config/modelProviders/higress.ts +1 -1736
  223. package/src/config/modelProviders/huggingface.ts +1 -54
  224. package/src/config/modelProviders/hunyuan.ts +1 -83
  225. package/src/config/modelProviders/infiniai.ts +1 -74
  226. package/src/config/modelProviders/internlm.ts +1 -20
  227. package/src/config/modelProviders/minimax.ts +1 -1
  228. package/src/config/modelProviders/mistral.ts +1 -95
  229. package/src/config/modelProviders/modelscope.ts +1 -27
  230. package/src/config/modelProviders/moonshot.ts +1 -29
  231. package/src/config/modelProviders/novita.ts +1 -105
  232. package/src/config/modelProviders/ollama.ts +1 -325
  233. package/src/config/modelProviders/openai.ts +1 -242
  234. package/src/config/modelProviders/openrouter.ts +1 -240
  235. package/src/config/modelProviders/perplexity.ts +1 -45
  236. package/src/config/modelProviders/ppio.ts +1 -152
  237. package/src/config/modelProviders/qiniu.ts +2 -19
  238. package/src/config/modelProviders/qwen.ts +1 -245
  239. package/src/config/modelProviders/search1api.ts +1 -34
  240. package/src/config/modelProviders/sensenova.ts +1 -69
  241. package/src/config/modelProviders/siliconcloud.ts +1 -417
  242. package/src/config/modelProviders/spark.ts +1 -59
  243. package/src/config/modelProviders/stepfun.ts +1 -98
  244. package/src/config/modelProviders/taichu.ts +1 -18
  245. package/src/config/modelProviders/togetherai.ts +1 -274
  246. package/src/config/modelProviders/upstage.ts +1 -28
  247. package/src/config/modelProviders/wenxin.ts +1 -140
  248. package/src/config/modelProviders/xai.ts +1 -38
  249. package/src/config/modelProviders/zeroone.ts +1 -81
  250. package/src/config/modelProviders/zhipu.ts +1 -108
  251. package/src/envs/app.ts +5 -8
  252. package/src/envs/auth.ts +0 -179
  253. package/src/features/AgentSetting/AgentPlugin/index.tsx +2 -2
  254. package/src/features/ChatInput/ActionBar/STT/browser.tsx +2 -2
  255. package/src/features/ChatInput/ActionBar/STT/openai.tsx +2 -2
  256. package/src/features/ChatInput/ActionBar/Tools/useControls.tsx +1 -3
  257. package/src/features/Conversation/Error/ErrorJsonViewer.tsx +4 -3
  258. package/src/features/Conversation/Error/OllamaBizError/index.tsx +7 -2
  259. package/src/features/Conversation/Error/index.tsx +15 -5
  260. package/src/features/Conversation/MarkdownElements/LobeArtifact/Render/index.tsx +2 -2
  261. package/src/features/Conversation/Messages/Assistant/Extra/index.tsx +2 -2
  262. package/src/features/Conversation/Messages/Assistant/MessageContent.tsx +5 -3
  263. package/src/features/Conversation/Messages/Assistant/Tool/Inspector/BuiltinPluginTitle.tsx +2 -2
  264. package/src/features/Conversation/Messages/Assistant/Tool/Inspector/ToolTitle.tsx +4 -2
  265. package/src/features/Conversation/Messages/Assistant/Tool/Render/CustomRender.tsx +2 -2
  266. package/src/features/Conversation/Messages/Assistant/Tool/Render/index.tsx +2 -2
  267. package/src/features/Conversation/Messages/Assistant/Tool/index.tsx +2 -2
  268. package/src/features/Conversation/Messages/Assistant/index.tsx +4 -4
  269. package/src/features/Conversation/Messages/Default.tsx +2 -2
  270. package/src/features/Conversation/Messages/User/Extra.tsx +2 -2
  271. package/src/features/Conversation/Messages/User/index.tsx +4 -4
  272. package/src/features/Conversation/Messages/index.tsx +3 -3
  273. package/src/features/Conversation/components/AutoScroll.tsx +2 -2
  274. package/src/features/Conversation/components/Extras/Usage/UsageDetail/index.tsx +9 -6
  275. package/src/features/DataImporter/index.tsx +15 -60
  276. package/src/features/DevPanel/PostgresViewer/usePgTable.ts +3 -2
  277. package/src/features/PluginTag/index.tsx +1 -3
  278. package/src/features/PluginsUI/Render/BuiltinType/index.test.tsx +37 -28
  279. package/src/features/Portal/Artifacts/Body/index.tsx +2 -2
  280. package/src/helpers/isCanUseFC.ts +0 -8
  281. package/src/hooks/useEnabledChatModels.ts +0 -8
  282. package/src/hooks/useInterceptingRoutes.test.ts +21 -3
  283. package/src/hooks/useModelContextWindowTokens.ts +0 -8
  284. package/src/hooks/useModelHasContextWindowToken.ts +1 -10
  285. package/src/hooks/useModelSupportFiles.ts +1 -11
  286. package/src/hooks/useModelSupportReasoning.ts +1 -11
  287. package/src/hooks/useModelSupportToolUse.ts +1 -11
  288. package/src/hooks/useModelSupportVision.ts +1 -11
  289. package/src/layout/AuthProvider/Clerk/index.tsx +2 -16
  290. package/src/libs/next-auth/auth.config.ts +3 -6
  291. package/src/libs/next-auth/sso-providers/auth0.ts +0 -7
  292. package/src/libs/next-auth/sso-providers/authelia.ts +3 -5
  293. package/src/libs/next-auth/sso-providers/authentik.ts +0 -7
  294. package/src/libs/next-auth/sso-providers/cloudflare-zero-trust.ts +3 -6
  295. package/src/libs/next-auth/sso-providers/cognito.ts +1 -5
  296. package/src/libs/next-auth/sso-providers/generic-oidc.ts +3 -5
  297. package/src/libs/next-auth/sso-providers/github.ts +0 -6
  298. package/src/libs/next-auth/sso-providers/google.ts +0 -2
  299. package/src/libs/next-auth/sso-providers/index.ts +0 -2
  300. package/src/libs/next-auth/sso-providers/keycloak.ts +0 -3
  301. package/src/libs/next-auth/sso-providers/logto.ts +3 -5
  302. package/src/libs/next-auth/sso-providers/okta.ts +0 -4
  303. package/src/libs/next-auth/sso-providers/zitadel.ts +0 -7
  304. package/src/libs/oidc-provider/provider.ts +1 -1
  305. package/src/libs/trpc/client/index.ts +0 -1
  306. package/src/libs/trpc/client/lambda.ts +8 -5
  307. package/src/libs/trpc/lambda/context.ts +4 -1
  308. package/src/locales/default/oauth.ts +1 -0
  309. package/src/server/globalConfig/index.ts +0 -23
  310. package/src/server/modules/AssistantStore/index.ts +1 -1
  311. package/src/server/modules/ModelRuntime/trace.ts +11 -4
  312. package/src/server/routers/desktop/mcp.ts +1 -3
  313. package/src/server/routers/lambda/__tests__/integration/message.integration.test.ts +0 -41
  314. package/src/server/routers/lambda/config/__snapshots__/index.test.ts.snap +175 -12
  315. package/src/server/routers/lambda/config/index.test.ts +38 -30
  316. package/src/server/routers/lambda/message.ts +17 -13
  317. package/src/server/routers/lambda/session.ts +8 -5
  318. package/src/server/routers/lambda/user.ts +24 -25
  319. package/src/server/routers/tools/mcp.ts +2 -3
  320. package/src/server/routers/tools/search.test.ts +1 -7
  321. package/src/server/routers/tools/search.ts +1 -4
  322. package/src/server/services/search/impls/firecrawl/index.ts +51 -11
  323. package/src/server/services/search/impls/firecrawl/type.ts +60 -9
  324. package/src/services/__tests__/tool.test.ts +0 -3
  325. package/src/services/aiModel/index.test.ts +0 -3
  326. package/src/services/aiModel/index.ts +1 -7
  327. package/src/services/aiProvider/index.test.ts +0 -3
  328. package/src/services/aiProvider/index.ts +1 -7
  329. package/src/services/chat/chat.test.ts +13 -40
  330. package/src/services/chat/contextEngineering.test.ts +0 -30
  331. package/src/services/chat/contextEngineering.ts +1 -12
  332. package/src/services/chat/helper.ts +7 -31
  333. package/src/services/chat/index.ts +5 -10
  334. package/src/services/chat/types.ts +1 -1
  335. package/src/services/chatGroup/index.ts +1 -10
  336. package/src/services/config.ts +1 -65
  337. package/src/services/export/index.ts +1 -4
  338. package/src/services/file/index.ts +1 -11
  339. package/src/services/import/index.ts +1 -7
  340. package/src/services/mcp.test.ts +777 -0
  341. package/src/services/message/index.ts +1 -11
  342. package/src/services/message/server.ts +7 -6
  343. package/src/services/message/type.ts +6 -3
  344. package/src/services/models.ts +2 -11
  345. package/src/services/plugin/index.ts +1 -11
  346. package/src/services/session/index.ts +1 -11
  347. package/src/services/tableViewer/client.ts +12 -15
  348. package/src/services/thread/index.ts +1 -7
  349. package/src/services/topic/index.ts +1 -11
  350. package/src/services/user/index.ts +1 -13
  351. package/src/store/chat/helpers.test.ts +99 -0
  352. package/src/store/chat/helpers.ts +21 -2
  353. package/src/store/chat/selectors.ts +1 -1
  354. package/src/store/chat/slices/aiChat/actions/__tests__/generateAIChat.test.ts +0 -241
  355. package/src/store/chat/slices/aiChat/actions/__tests__/generateAIChatV2.test.ts +26 -1
  356. package/src/store/chat/slices/aiChat/actions/__tests__/helpers.ts +3 -1
  357. package/src/store/chat/slices/aiChat/actions/generateAIChat.ts +45 -155
  358. package/src/store/chat/slices/builtinTool/actions/index.ts +1 -4
  359. package/src/store/chat/slices/message/action.test.ts +5 -1
  360. package/src/store/chat/slices/message/action.ts +102 -14
  361. package/src/store/chat/slices/message/reducer.test.ts +363 -5
  362. package/src/store/chat/slices/message/reducer.ts +87 -3
  363. package/src/store/chat/slices/message/{selectors.test.ts → selectors/chat.test.ts} +266 -30
  364. package/src/store/chat/slices/message/{selectors.ts → selectors/chat.ts} +29 -79
  365. package/src/store/chat/slices/message/selectors/index.ts +2 -0
  366. package/src/store/chat/slices/message/selectors/messageState.test.ts +36 -0
  367. package/src/store/chat/slices/message/selectors/messageState.ts +80 -0
  368. package/src/store/chat/slices/plugin/action.test.ts +34 -132
  369. package/src/store/chat/slices/plugin/action.ts +1 -44
  370. package/src/store/global/store.ts +1 -7
  371. package/src/store/tool/selectors/tool.test.ts +1 -1
  372. package/src/store/tool/selectors/tool.ts +6 -8
  373. package/src/store/tool/slices/builtin/action.test.ts +83 -35
  374. package/src/store/tool/slices/builtin/action.ts +0 -9
  375. package/src/store/tool/slices/builtin/selectors.test.ts +4 -30
  376. package/src/store/tool/slices/builtin/selectors.ts +15 -21
  377. package/src/store/user/initialState.ts +1 -7
  378. package/src/store/user/selectors.ts +1 -5
  379. package/src/store/user/slices/common/action.test.ts +1 -4
  380. package/src/store/user/slices/common/action.ts +5 -4
  381. package/src/store/user/slices/settings/selectors/index.ts +1 -0
  382. package/src/store/user/slices/settings/selectors/keyVaults.ts +21 -0
  383. package/src/store/user/store.ts +0 -3
  384. package/src/tools/index.ts +0 -6
  385. package/src/tools/renders.ts +0 -3
  386. package/src/tools/web-browsing/Portal/Search/Footer.tsx +2 -2
  387. package/src/tools/web-browsing/Render/Search/ConfigForm/Form.tsx +1 -1
  388. package/tsconfig.json +9 -3
  389. package/packages/const/src/guide.ts +0 -89
  390. package/packages/context-engine/src/providers/InboxGuide.ts +0 -102
  391. package/packages/context-engine/src/providers/__tests__/InboxGuideProvider.test.ts +0 -121
  392. package/packages/utils/src/_deprecated/__snapshots__/parseModels.test.ts.snap +0 -104
  393. package/packages/utils/src/_deprecated/parseModels.test.ts +0 -287
  394. package/packages/utils/src/_deprecated/parseModels.ts +0 -165
  395. package/src/app/(backend)/trpc/edge/[trpc]/route.ts +0 -26
  396. package/src/app/[variants]/(main)/(mobile)/me/data/features/Category.tsx +0 -48
  397. package/src/app/[variants]/(main)/(mobile)/me/data/features/Header.tsx +0 -33
  398. package/src/app/[variants]/(main)/(mobile)/me/data/layout.tsx +0 -13
  399. package/src/app/[variants]/(main)/(mobile)/me/data/loading.tsx +0 -5
  400. package/src/app/[variants]/(main)/(mobile)/me/data/page.tsx +0 -29
  401. package/src/app/[variants]/(main)/chat/features/Migration/DBReader.ts +0 -290
  402. package/src/app/[variants]/(main)/chat/features/Migration/ExportConfigButton.tsx +0 -35
  403. package/src/app/[variants]/(main)/chat/features/Migration/Failed.tsx +0 -120
  404. package/src/app/[variants]/(main)/chat/features/Migration/Modal.tsx +0 -81
  405. package/src/app/[variants]/(main)/chat/features/Migration/Start.tsx +0 -108
  406. package/src/app/[variants]/(main)/chat/features/Migration/UpgradeButton.tsx +0 -71
  407. package/src/app/[variants]/(main)/chat/features/Migration/const.ts +0 -15
  408. package/src/app/[variants]/(main)/chat/features/Migration/index.tsx +0 -50
  409. package/src/app/[variants]/(main)/settings/llm/ProviderList/Azure/index.tsx +0 -93
  410. package/src/app/[variants]/(main)/settings/llm/ProviderList/Bedrock/index.tsx +0 -70
  411. package/src/app/[variants]/(main)/settings/llm/ProviderList/Cloudflare/index.tsx +0 -39
  412. package/src/app/[variants]/(main)/settings/llm/ProviderList/Github/index.tsx +0 -52
  413. package/src/app/[variants]/(main)/settings/llm/ProviderList/HuggingFace/index.tsx +0 -52
  414. package/src/app/[variants]/(main)/settings/llm/ProviderList/Ollama/index.tsx +0 -20
  415. package/src/app/[variants]/(main)/settings/llm/ProviderList/OpenAI/index.tsx +0 -17
  416. package/src/app/[variants]/(main)/settings/llm/ProviderList/providers.tsx +0 -132
  417. package/src/app/[variants]/(main)/settings/llm/components/Checker.tsx +0 -118
  418. package/src/app/[variants]/(main)/settings/llm/components/ProviderConfig/index.tsx +0 -303
  419. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/CustomModelOption.tsx +0 -98
  420. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/ModelConfigModal/Form.tsx +0 -104
  421. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/ModelConfigModal/index.tsx +0 -77
  422. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/ModelFetcher.tsx +0 -105
  423. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/Option.tsx +0 -68
  424. package/src/app/[variants]/(main)/settings/llm/components/ProviderModelList/index.tsx +0 -146
  425. package/src/app/[variants]/(main)/settings/llm/const.ts +0 -20
  426. package/src/app/[variants]/(main)/settings/llm/features/Footer.tsx +0 -35
  427. package/src/app/[variants]/(main)/settings/llm/index.tsx +0 -30
  428. package/src/app/[variants]/(main)/settings/llm/type.ts +0 -5
  429. package/src/app/[variants]/loading/Client/Content.tsx +0 -48
  430. package/src/app/[variants]/loading/Client/Error.tsx +0 -27
  431. package/src/app/[variants]/loading/Client/Redirect.tsx +0 -47
  432. package/src/app/[variants]/loading/Client/index.tsx +0 -22
  433. package/src/components/InnerLink.tsx +0 -20
  434. package/src/database/_deprecated/core/__tests__/db-upgrade.test.ts +0 -42
  435. package/src/database/_deprecated/core/__tests__/db.test.ts +0 -79
  436. package/src/database/_deprecated/core/__tests__/model.test.ts +0 -55
  437. package/src/database/_deprecated/core/db.ts +0 -246
  438. package/src/database/_deprecated/core/index.ts +0 -2
  439. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/fixtures/input.json +0 -55
  440. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/fixtures/output.json +0 -60
  441. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/index.test.ts +0 -14
  442. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/index.ts +0 -22
  443. package/src/database/_deprecated/core/migrations/migrateSettingsToUser/type.ts +0 -105
  444. package/src/database/_deprecated/core/model.ts +0 -218
  445. package/src/database/_deprecated/core/schemas.ts +0 -88
  446. package/src/database/_deprecated/core/types/db.ts +0 -15
  447. package/src/database/_deprecated/models/__DEBUG.ts +0 -124
  448. package/src/database/_deprecated/models/__tests__/file.test.ts +0 -83
  449. package/src/database/_deprecated/models/__tests__/message.test.ts +0 -426
  450. package/src/database/_deprecated/models/__tests__/plugin.test.ts +0 -81
  451. package/src/database/_deprecated/models/__tests__/session.test.ts +0 -253
  452. package/src/database/_deprecated/models/__tests__/sessionGroup.test.ts +0 -220
  453. package/src/database/_deprecated/models/__tests__/topic.test.ts +0 -523
  454. package/src/database/_deprecated/models/__tests__/user.test.ts +0 -82
  455. package/src/database/_deprecated/models/file.ts +0 -51
  456. package/src/database/_deprecated/models/message.ts +0 -277
  457. package/src/database/_deprecated/models/plugin.ts +0 -62
  458. package/src/database/_deprecated/models/session.ts +0 -271
  459. package/src/database/_deprecated/models/sessionGroup.ts +0 -93
  460. package/src/database/_deprecated/models/topic.ts +0 -250
  461. package/src/database/_deprecated/models/user.ts +0 -69
  462. package/src/database/_deprecated/schemas/files.ts +0 -39
  463. package/src/database/_deprecated/schemas/message.ts +0 -50
  464. package/src/database/_deprecated/schemas/plugin.ts +0 -12
  465. package/src/database/_deprecated/schemas/session.ts +0 -54
  466. package/src/database/_deprecated/schemas/sessionGroup.ts +0 -8
  467. package/src/database/_deprecated/schemas/topic.ts +0 -12
  468. package/src/database/_deprecated/schemas/user.ts +0 -40
  469. package/src/envs/__tests__/auth.test.ts +0 -200
  470. package/src/features/DataImporter/_deprecated.ts +0 -43
  471. package/src/features/InitClientDB/EnableModal.tsx +0 -118
  472. package/src/features/InitClientDB/ErrorResult.tsx +0 -143
  473. package/src/features/InitClientDB/InitIndicator.tsx +0 -124
  474. package/src/features/InitClientDB/PGliteIcon.tsx +0 -28
  475. package/src/features/InitClientDB/features/DatabaseRepair/Backup.tsx +0 -75
  476. package/src/features/InitClientDB/features/DatabaseRepair/Diagnosis.tsx +0 -98
  477. package/src/features/InitClientDB/features/DatabaseRepair/Repair.tsx +0 -218
  478. package/src/features/InitClientDB/features/DatabaseRepair/index.tsx +0 -91
  479. package/src/features/InitClientDB/index.tsx +0 -37
  480. package/src/hooks/_header.ts +0 -23
  481. package/src/libs/next-auth/sso-providers/azure-ad.ts +0 -33
  482. package/src/libs/trpc/client/edge.ts +0 -26
  483. package/src/libs/trpc/edge/context.ts +0 -71
  484. package/src/libs/trpc/edge/index.ts +0 -45
  485. package/src/libs/trpc/edge/init.ts +0 -26
  486. package/src/libs/trpc/edge/middleware/jwtPayload.test.ts +0 -75
  487. package/src/libs/trpc/edge/middleware/jwtPayload.ts +0 -14
  488. package/src/migrations/FromV0ToV1.ts +0 -10
  489. package/src/migrations/FromV1ToV2/fixtures/input-v1-session.json +0 -191
  490. package/src/migrations/FromV1ToV2/fixtures/output-v2.json +0 -202
  491. package/src/migrations/FromV1ToV2/index.ts +0 -82
  492. package/src/migrations/FromV1ToV2/migrations.test.ts +0 -224
  493. package/src/migrations/FromV1ToV2/types/v1.ts +0 -78
  494. package/src/migrations/FromV1ToV2/types/v2.ts +0 -52
  495. package/src/migrations/FromV2ToV3/fixtures/input-v2-session.json +0 -72
  496. package/src/migrations/FromV2ToV3/fixtures/output-v3-from-v1.json +0 -203
  497. package/src/migrations/FromV2ToV3/fixtures/output-v3.json +0 -74
  498. package/src/migrations/FromV2ToV3/index.ts +0 -30
  499. package/src/migrations/FromV2ToV3/migrations.test.ts +0 -42
  500. package/src/migrations/FromV2ToV3/types/v3.ts +0 -27
  501. package/src/migrations/FromV3ToV4/fixtures/azure-input-v3.json +0 -79
  502. package/src/migrations/FromV3ToV4/fixtures/azure-output-v4.json +0 -75
  503. package/src/migrations/FromV3ToV4/fixtures/ollama-input-v3.json +0 -85
  504. package/src/migrations/FromV3ToV4/fixtures/ollama-output-v4.json +0 -86
  505. package/src/migrations/FromV3ToV4/fixtures/openai-input-v3.json +0 -77
  506. package/src/migrations/FromV3ToV4/fixtures/openai-output-v4.json +0 -77
  507. package/src/migrations/FromV3ToV4/fixtures/openrouter-input-v3.json +0 -82
  508. package/src/migrations/FromV3ToV4/fixtures/openrouter-output-v4.json +0 -85
  509. package/src/migrations/FromV3ToV4/fixtures/output-v4-from-v1.json +0 -203
  510. package/src/migrations/FromV3ToV4/index.ts +0 -102
  511. package/src/migrations/FromV3ToV4/migrations.test.ts +0 -195
  512. package/src/migrations/FromV3ToV4/types/v3.ts +0 -52
  513. package/src/migrations/FromV3ToV4/types/v4.ts +0 -37
  514. package/src/migrations/FromV4ToV5/fixtures/from-v1-to-v5-output.json +0 -245
  515. package/src/migrations/FromV4ToV5/fixtures/function-input-v4.json +0 -96
  516. package/src/migrations/FromV4ToV5/fixtures/function-output-v5.json +0 -120
  517. package/src/migrations/FromV4ToV5/index.ts +0 -58
  518. package/src/migrations/FromV4ToV5/migrations.test.ts +0 -49
  519. package/src/migrations/FromV4ToV5/types/v4.ts +0 -21
  520. package/src/migrations/FromV4ToV5/types/v5.ts +0 -27
  521. package/src/migrations/FromV5ToV6/fixtures/from-v1-to-v6-output.json +0 -247
  522. package/src/migrations/FromV5ToV6/fixtures/session-input-v5.json +0 -81
  523. package/src/migrations/FromV5ToV6/fixtures/session-output-v6.json +0 -85
  524. package/src/migrations/FromV5ToV6/index.ts +0 -61
  525. package/src/migrations/FromV5ToV6/migrations.test.ts +0 -50
  526. package/src/migrations/FromV5ToV6/types/v5.ts +0 -48
  527. package/src/migrations/FromV5ToV6/types/v6.ts +0 -63
  528. package/src/migrations/FromV6ToV7/fixtures/output-v7-from-v1.json +0 -203
  529. package/src/migrations/FromV6ToV7/fixtures/provider-input-v6.json +0 -103
  530. package/src/migrations/FromV6ToV7/fixtures/provider-output-v7.json +0 -118
  531. package/src/migrations/FromV6ToV7/index.ts +0 -101
  532. package/src/migrations/FromV6ToV7/migrations.test.ts +0 -64
  533. package/src/migrations/FromV6ToV7/types/v6.ts +0 -61
  534. package/src/migrations/FromV6ToV7/types/v7.ts +0 -69
  535. package/src/migrations/VersionController.test.ts +0 -88
  536. package/src/migrations/VersionController.ts +0 -67
  537. package/src/migrations/index.ts +0 -61
  538. package/src/server/globalConfig/_deprecated.test.ts +0 -92
  539. package/src/server/globalConfig/_deprecated.ts +0 -41
  540. package/src/server/routers/edge/appStatus.ts +0 -3
  541. package/src/server/routers/edge/index.ts +0 -14
  542. package/src/server/routers/edge/upload.ts +0 -16
  543. package/src/services/aiModel/client.ts +0 -70
  544. package/src/services/aiProvider/client.ts +0 -58
  545. package/src/services/baseClientService/index.ts +0 -9
  546. package/src/services/chat/__snapshots__/chat.test.ts.snap +0 -110
  547. package/src/services/chatGroup/client.ts +0 -63
  548. package/src/services/export/_deprecated.ts +0 -155
  549. package/src/services/export/client.ts +0 -15
  550. package/src/services/file/_deprecated.test.ts +0 -119
  551. package/src/services/file/_deprecated.ts +0 -80
  552. package/src/services/file/client.test.ts +0 -199
  553. package/src/services/file/client.ts +0 -85
  554. package/src/services/import/_deprecated.ts +0 -115
  555. package/src/services/import/client.test.ts +0 -1015
  556. package/src/services/import/client.ts +0 -64
  557. package/src/services/message/_deprecated.test.ts +0 -398
  558. package/src/services/message/_deprecated.ts +0 -168
  559. package/src/services/message/client.test.ts +0 -410
  560. package/src/services/message/client.ts +0 -186
  561. package/src/services/plugin/_deprecated.test.ts +0 -162
  562. package/src/services/plugin/_deprecated.ts +0 -42
  563. package/src/services/plugin/client.test.ts +0 -177
  564. package/src/services/plugin/client.ts +0 -46
  565. package/src/services/session/_deprecated.test.ts +0 -440
  566. package/src/services/session/_deprecated.ts +0 -190
  567. package/src/services/session/client.test.ts +0 -413
  568. package/src/services/session/client.ts +0 -193
  569. package/src/services/thread/client.ts +0 -51
  570. package/src/services/topic/_deprecated.test.ts +0 -245
  571. package/src/services/topic/_deprecated.ts +0 -75
  572. package/src/services/topic/client.ts +0 -89
  573. package/src/services/topic/pglite.test.ts +0 -212
  574. package/src/services/user/_deprecated.test.ts +0 -101
  575. package/src/services/user/_deprecated.ts +0 -70
  576. package/src/services/user/client.test.ts +0 -108
  577. package/src/services/user/client.ts +0 -104
  578. package/src/store/chat/slices/builtinTool/actions/__tests__/dalle.test.ts +0 -121
  579. package/src/store/chat/slices/builtinTool/actions/dalle.ts +0 -124
  580. package/src/store/global/actions/clientDb.ts +0 -67
  581. package/src/store/user/slices/modelList/__snapshots__/action.test.ts.snap +0 -12
  582. package/src/store/user/slices/modelList/action.test.ts +0 -359
  583. package/src/store/user/slices/modelList/action.ts +0 -223
  584. package/src/store/user/slices/modelList/initialState.ts +0 -15
  585. package/src/store/user/slices/modelList/reducers/customModelCard.test.ts +0 -204
  586. package/src/store/user/slices/modelList/reducers/customModelCard.ts +0 -64
  587. package/src/store/user/slices/modelList/selectors/index.ts +0 -3
  588. package/src/store/user/slices/modelList/selectors/keyVaults.test.ts +0 -201
  589. package/src/store/user/slices/modelList/selectors/keyVaults.ts +0 -50
  590. package/src/store/user/slices/modelList/selectors/modelConfig.test.ts +0 -219
  591. package/src/store/user/slices/modelList/selectors/modelConfig.ts +0 -95
  592. package/src/store/user/slices/modelList/selectors/modelProvider.test.ts +0 -138
  593. package/src/store/user/slices/modelList/selectors/modelProvider.ts +0 -170
  594. package/src/tools/dalle/Render/GalleyGrid.tsx +0 -60
  595. package/src/tools/dalle/Render/Item/EditMode.tsx +0 -66
  596. package/src/tools/dalle/Render/Item/Error.tsx +0 -49
  597. package/src/tools/dalle/Render/Item/Image.tsx +0 -44
  598. package/src/tools/dalle/Render/Item/ImageFileItem.tsx +0 -57
  599. package/src/tools/dalle/Render/Item/index.tsx +0 -88
  600. package/src/tools/dalle/Render/ToolBar.tsx +0 -56
  601. package/src/tools/dalle/Render/index.tsx +0 -52
  602. package/src/tools/dalle/index.ts +0 -92
  603. /package/src/{middleware.ts → proxy.ts} +0 -0
@@ -26,7 +26,7 @@ export class FirecrawlImpl implements SearchServiceImpl {
26
26
 
27
27
  private get baseUrl(): string {
28
28
  // Assuming the base URL is consistent with the crawl endpoint
29
- return process.env.FIRECRAWL_URL || 'https://api.firecrawl.dev/v1';
29
+ return process.env.FIRECRAWL_URL || 'https://api.firecrawl.dev/v2';
30
30
  }
31
31
 
32
32
  async query(query: string, params: SearchParams = {}): Promise<UniformSearchResponse> {
@@ -34,13 +34,14 @@ export class FirecrawlImpl implements SearchServiceImpl {
34
34
  const endpoint = urlJoin(this.baseUrl, '/search');
35
35
 
36
36
  const defaultQueryParams: FirecrawlSearchParameters = {
37
- limit: 15,
37
+ limit: 20,
38
38
  query,
39
39
  /*
40
40
  scrapeOptions: {
41
41
  formats: ["markdown"]
42
42
  },
43
43
  */
44
+ sources: [{ type: 'web' }, { type: 'news' }],
44
45
  };
45
46
 
46
47
  let body: FirecrawlSearchParameters = {
@@ -95,25 +96,64 @@ export class FirecrawlImpl implements SearchServiceImpl {
95
96
 
96
97
  log('Parsed Firecrawl response: %o', firecrawlResponse);
97
98
 
98
- const mappedResults = (firecrawlResponse.data || []).map(
99
+ // V2 API returns data as object with web/images/news arrays
100
+ const webResults = firecrawlResponse.data.web || [];
101
+ const imageResults = firecrawlResponse.data.images || [];
102
+ const newsResults = firecrawlResponse.data.news || [];
103
+
104
+ // Map web results
105
+ const mappedWebResults = webResults.map(
106
+ (result): UniformSearchResult => ({
107
+ category: 'general',
108
+ content: result.description || result.markdown || '',
109
+ engines: ['firecrawl'],
110
+ parsedUrl: result.url ? new URL(result.url).hostname : '',
111
+ score: 1,
112
+ title: result.title || '',
113
+ url: result.url,
114
+ }),
115
+ );
116
+
117
+ // Map news results
118
+ const mappedNewsResults = newsResults.map(
99
119
  (result): UniformSearchResult => ({
100
- category: 'general', // Default category
101
- content: result.description || '', // Prioritize content, fallback to snippet
102
- engines: ['firecrawl'], // Use 'firecrawl' as the engine name
103
- parsedUrl: result.url ? new URL(result.url).hostname : '', // Basic URL parsing
104
- score: 1, // Default score to 1
120
+ category: 'news',
121
+ content: result.snippet || result.markdown || '',
122
+ engines: ['firecrawl'],
123
+ parsedUrl: result.url ? new URL(result.url).hostname : '',
124
+ score: 1,
105
125
  title: result.title || '',
106
126
  url: result.url,
107
127
  }),
108
128
  );
109
129
 
110
- log('Mapped %d results to SearchResult format', mappedResults.length);
130
+ // Map image results
131
+ const mappedImageResults = imageResults.map(
132
+ (result): UniformSearchResult => ({
133
+ category: 'images',
134
+ content: result.title || '',
135
+ engines: ['firecrawl'],
136
+ parsedUrl: result.url ? new URL(result.url).hostname : '',
137
+ score: 1,
138
+ title: result.title || '',
139
+ url: result.imageUrl, // Use imageUrl for images
140
+ }),
141
+ );
142
+
143
+ // Combine all results
144
+ const allResults = [...mappedWebResults, ...mappedNewsResults, ...mappedImageResults];
145
+
146
+ log('Mapped %d results to SearchResult format', allResults.length);
147
+
148
+ if (firecrawlResponse.warning) {
149
+ log.extend('warn')('Firecrawl warning: %s', firecrawlResponse.warning);
150
+ }
111
151
 
112
152
  return {
113
153
  costTime,
114
154
  query: query,
115
- resultNumbers: mappedResults.length,
116
- results: mappedResults,
155
+ resultNumbers: allResults.length,
156
+ results: allResults,
117
157
  };
118
158
  } catch (error) {
119
159
  log.extend('error')('Error parsing Firecrawl response: %o', error);
@@ -1,35 +1,86 @@
1
+ // V2 API Types
1
2
  interface FirecrawlScrapeOptions {
2
- formats: string[];
3
+ blockAds?: boolean;
4
+ formats?: string[];
5
+ maxAge?: number;
6
+ onlyMainContent?: boolean;
7
+ removeBase64Images?: boolean;
3
8
  }
4
9
 
10
+ type FirecrawlSource =
11
+ | { location?: string; tbs?: string; type: 'web' }
12
+ | { type: 'images' }
13
+ | { type: 'news' };
14
+
15
+ type FirecrawlCategory = { type: 'github' } | { type: 'research' } | { type: 'pdf' };
16
+
5
17
  export interface FirecrawlSearchParameters {
18
+ categories?: FirecrawlCategory[];
6
19
  country?: string;
7
- lang?: string;
20
+ ignoreInvalidURLs?: boolean;
8
21
  limit?: number;
22
+ location?: string;
9
23
  query: string;
10
24
  scrapeOptions?: FirecrawlScrapeOptions;
25
+ sources?: FirecrawlSource[];
11
26
  tbs?: string;
12
27
  timeout?: number;
13
28
  }
14
29
 
15
30
  interface FirecrawlMetadata {
16
31
  description?: string;
32
+ error?: string | null;
17
33
  sourceURL?: string;
18
34
  statusCode?: number;
35
+ title?: string;
36
+ }
37
+
38
+ // Web search result
39
+ interface FirecrawlWebResult {
40
+ description: string;
41
+ html?: string | null;
42
+ links?: string[];
43
+ markdown?: string | null;
44
+ metadata?: FirecrawlMetadata;
45
+ rawHtml?: string | null;
46
+ screenshot?: string | null;
19
47
  title: string;
48
+ url: string;
20
49
  }
21
50
 
22
- interface FirecrawlData {
23
- description?: string;
24
- html?: string;
51
+ // Image search result
52
+ interface FirecrawlImageResult {
53
+ imageHeight: number;
54
+ imageUrl: string;
55
+ imageWidth: number;
56
+ position: number;
57
+ title: string;
58
+ url: string;
59
+ }
60
+
61
+ // News search result
62
+ interface FirecrawlNewsResult {
63
+ date: string;
64
+ html?: string | null;
65
+ imageUrl?: string;
25
66
  links?: string[];
26
- markdown?: string;
67
+ markdown?: string | null;
27
68
  metadata?: FirecrawlMetadata;
28
- title?: string;
69
+ position: number;
70
+ rawHtml?: string | null;
71
+ screenshot?: string | null;
72
+ snippet: string;
73
+ title: string;
29
74
  url: string;
30
75
  }
31
76
 
77
+ // V2 Response structure
32
78
  export interface FirecrawlResponse {
33
- data: FirecrawlData[];
34
- success?: boolean;
79
+ data: {
80
+ images?: FirecrawlImageResult[];
81
+ news?: FirecrawlNewsResult[];
82
+ web?: FirecrawlWebResult[];
83
+ };
84
+ success: boolean;
85
+ warning?: string | null;
35
86
  }
@@ -1,8 +1,5 @@
1
1
  import { Mock, beforeEach, describe, expect, it, vi } from 'vitest';
2
2
 
3
- import { edgeClient } from '@/libs/trpc/client';
4
- import { globalHelpers } from '@/store/global/helpers';
5
-
6
3
  import { toolService } from '../tool';
7
4
  import openAPIV3 from './openai/OpenAPI_V3.json';
8
5
  import OpenAIPlugin from './openai/plugin.json';
@@ -1,10 +1,7 @@
1
1
  import { testService } from '~test-utils';
2
2
 
3
- import { ClientService } from './client';
4
3
  import { ServerService } from './server';
5
4
 
6
5
  describe('aiModelService', () => {
7
6
  testService(ServerService);
8
-
9
- testService(ClientService);
10
7
  });
@@ -1,9 +1,3 @@
1
- import { isDesktop } from '@/const/version';
2
-
3
- import { ClientService } from './client';
4
1
  import { ServerService } from './server';
5
2
 
6
- export const aiModelService =
7
- process.env.NEXT_PUBLIC_SERVICE_MODE === 'server' || isDesktop
8
- ? new ServerService()
9
- : new ClientService();
3
+ export const aiModelService = new ServerService();
@@ -1,10 +1,7 @@
1
1
  import { testService } from '~test-utils';
2
2
 
3
- import { ClientService } from './client';
4
3
  import { ServerService } from './server';
5
4
 
6
5
  describe('aiProviderService', () => {
7
6
  testService(ServerService);
8
-
9
- testService(ClientService);
10
7
  });
@@ -1,9 +1,3 @@
1
- import { isDesktop } from '@/const/version';
2
-
3
- import { ClientService } from './client';
4
1
  import { ServerService } from './server';
5
2
 
6
- export const aiProviderService =
7
- process.env.NEXT_PUBLIC_SERVICE_MODE === 'server' || isDesktop
8
- ? new ServerService()
9
- : new ClientService();
3
+ export const aiProviderService = new ServerService();
@@ -8,18 +8,12 @@ import { type Mock, afterEach, beforeEach, describe, expect, it, vi } from 'vite
8
8
 
9
9
  import { DEFAULT_USER_AVATAR } from '@/const/meta';
10
10
  import { DEFAULT_AGENT_CONFIG } from '@/const/settings';
11
- import * as isCanUseFCModule from '@/helpers/isCanUseFC';
12
11
  import * as toolEngineeringModule from '@/helpers/toolEngineering';
13
- import { agentChatConfigSelectors, agentSelectors } from '@/store/agent/selectors';
12
+ import { agentChatConfigSelectors } from '@/store/agent/selectors';
14
13
  import { aiModelSelectors } from '@/store/aiInfra';
15
14
  import { useToolStore } from '@/store/tool';
16
- import { toolSelectors } from '@/store/tool/selectors';
17
- import { modelProviderSelectors } from '@/store/user/selectors';
18
- import { DalleManifest } from '@/tools/dalle';
19
15
  import { WebBrowsingManifest } from '@/tools/web-browsing';
20
16
 
21
- import { API_ENDPOINTS } from '../_url';
22
- import * as helpers from './helper';
23
17
  import { chatService } from './index';
24
18
 
25
19
  // Mocking external dependencies
@@ -290,6 +284,9 @@ describe('ChatService', () => {
290
284
  vi.mocked(parseDataUri).mockReturnValue({ type: 'url', base64: null, mimeType: null });
291
285
  vi.mocked(isDesktopLocalStaticServerUrl).mockReturnValue(false); // Not a local URL
292
286
 
287
+ // Mock aiModelSelectors to return true for vision support
288
+ vi.spyOn(aiModelSelectors, 'isModelSupportVision').mockReturnValue(() => true);
289
+
293
290
  const messages = [
294
291
  {
295
292
  content: 'Hello',
@@ -375,6 +372,9 @@ describe('ChatService', () => {
375
372
  mimeType: 'image/png',
376
373
  });
377
374
 
375
+ // Mock aiModelSelectors to return true for vision support
376
+ vi.spyOn(aiModelSelectors, 'isModelSupportVision').mockReturnValue(() => true);
377
+
378
378
  const messages = [
379
379
  {
380
380
  content: 'Hello',
@@ -447,6 +447,9 @@ describe('ChatService', () => {
447
447
  vi.mocked(isDesktopLocalStaticServerUrl).mockReturnValue(false); // This is NOT a local URL
448
448
  vi.mocked(imageUrlToBase64).mockClear(); // Clear to ensure it's not called
449
449
 
450
+ // Mock aiModelSelectors to return true for vision support
451
+ vi.spyOn(aiModelSelectors, 'isModelSupportVision').mockReturnValue(() => true);
452
+
450
453
  const messages = [
451
454
  {
452
455
  content: 'Hello',
@@ -524,6 +527,9 @@ describe('ChatService', () => {
524
527
  mimeType: 'image/jpeg',
525
528
  });
526
529
 
530
+ // Mock aiModelSelectors to return true for vision support
531
+ vi.spyOn(aiModelSelectors, 'isModelSupportVision').mockReturnValue(() => true);
532
+
527
533
  const messages = [
528
534
  {
529
535
  content: 'Multiple images',
@@ -831,39 +837,6 @@ describe('ChatService', () => {
831
837
  undefined,
832
838
  );
833
839
  });
834
-
835
- it('work with dalle3', async () => {
836
- const getChatCompletionSpy = vi.spyOn(chatService, 'getChatCompletion');
837
- const messages = [
838
- {
839
- role: 'user',
840
- content: 'https://vercel.com/ 请分析 chatGPT 关键词\n\n',
841
- sessionId: 'inbox',
842
- createdAt: 1702723964330,
843
- id: 'vyQvEw6V',
844
- updatedAt: 1702723964330,
845
- extra: {},
846
- meta: {
847
- avatar: DEFAULT_USER_AVATAR,
848
- },
849
- },
850
- ] as UIChatMessage[];
851
-
852
- await chatService.createAssistantMessage({
853
- messages,
854
- model: 'gpt-3.5-turbo-1106',
855
- top_p: 1,
856
- plugins: [DalleManifest.identifier],
857
- });
858
-
859
- // Assert that getChatCompletionSpy was called with the expected arguments
860
- expect(getChatCompletionSpy).toHaveBeenCalled();
861
-
862
- const calls = getChatCompletionSpy.mock.lastCall;
863
- // Take a snapshot of the first call's first argument
864
- expect(calls![0]).toMatchSnapshot();
865
- expect(calls![1]).toBeUndefined();
866
- });
867
840
  });
868
841
 
869
842
  describe('search functionality', () => {
@@ -248,36 +248,6 @@ describe('contextEngineering', () => {
248
248
  ]);
249
249
  });
250
250
 
251
- it('should inject INBOX_GUIDE_SYSTEM_ROLE for welcome questions in inbox session', async () => {
252
- // Don't mock INBOX_GUIDE_SYSTEMROLE, use the real one
253
- const messages: UIChatMessage[] = [
254
- {
255
- role: 'user',
256
- content: 'Hello, this is my first question',
257
- createdAt: Date.now(),
258
- id: 'test-welcome',
259
- meta: {},
260
- updatedAt: Date.now(),
261
- },
262
- ];
263
-
264
- const result = await contextEngineering({
265
- messages,
266
- model: 'gpt-4',
267
- provider: 'openai',
268
- isWelcomeQuestion: true,
269
- sessionId: 'inbox',
270
- });
271
-
272
- // Should have system message with inbox guide content
273
- const systemMessage = result.find((msg) => msg.role === 'system');
274
- expect(systemMessage).toBeDefined();
275
- // Check for characteristic content of the actual INBOX_GUIDE_SYSTEMROLE
276
- expect(systemMessage!.content).toContain('LobeChat Support Assistant');
277
- expect(systemMessage!.content).toContain('LobeHub');
278
- expect(Object.keys(systemMessage!).length).toEqual(2);
279
- });
280
-
281
251
  it('should inject historySummary into system message when provided', async () => {
282
252
  const historySummary = 'Previous conversation summary: User discussed AI topics.';
283
253
 
@@ -1,9 +1,8 @@
1
- import { INBOX_GUIDE_SYSTEMROLE, INBOX_SESSION_ID, isDesktop, isServerMode } from '@lobechat/const';
1
+ import { isDesktop, isServerMode } from '@lobechat/const';
2
2
  import {
3
3
  ContextEngine,
4
4
  HistorySummaryProvider,
5
5
  HistoryTruncateProcessor,
6
- InboxGuideProvider,
7
6
  InputTemplateProcessor,
8
7
  MessageCleanupProcessor,
9
8
  MessageContentProcessor,
@@ -48,8 +47,6 @@ export const contextEngineering = async ({
48
47
  enableHistoryCount,
49
48
  historyCount,
50
49
  historySummary,
51
- sessionId,
52
- isWelcomeQuestion,
53
50
  }: ContextEngineeringContext): Promise<OpenAIChatMessage[]> => {
54
51
  const toolNameResolver = new ToolNameResolver();
55
52
 
@@ -63,14 +60,6 @@ export const contextEngineering = async ({
63
60
  // 2. System role injection (agent's system role)
64
61
  new SystemRoleInjector({ systemRole }),
65
62
 
66
- // 3. Inbox guide system role injection
67
- new InboxGuideProvider({
68
- inboxGuideSystemRole: INBOX_GUIDE_SYSTEMROLE,
69
- inboxSessionId: INBOX_SESSION_ID,
70
- isWelcomeQuestion: isWelcomeQuestion,
71
- sessionId: sessionId,
72
- }),
73
-
74
63
  // 4. Tool system role injection
75
64
  new ToolSystemRoleProvider({
76
65
  getToolSystemRoles: (tools) => toolSelectors.enabledSystemRoles(tools)(getToolStoreState()),
@@ -1,16 +1,9 @@
1
- import { isDeprecatedEdition } from '@lobechat/const';
2
1
  import { ModelProvider } from 'model-bank';
3
2
 
4
3
  import { getAiInfraStoreState } from '@/store/aiInfra';
5
4
  import { aiModelSelectors, aiProviderSelectors } from '@/store/aiInfra/selectors';
6
- import { getUserStoreState, useUserStore } from '@/store/user';
7
- import { modelConfigSelectors, modelProviderSelectors } from '@/store/user/selectors';
8
5
 
9
6
  export const isCanUseVision = (model: string, provider: string): boolean => {
10
- // TODO: remove isDeprecatedEdition condition in V2.0
11
- if (isDeprecatedEdition) {
12
- return modelProviderSelectors.isModelEnabledVision(model)(getUserStoreState());
13
- }
14
7
  return aiModelSelectors.isModelSupportVision(model, provider)(getAiInfraStoreState());
15
8
  };
16
9
 
@@ -24,40 +17,23 @@ export const isCanUseVideo = (model: string, provider: string): boolean => {
24
17
  export const findDeploymentName = (model: string, provider: string) => {
25
18
  let deploymentId = model;
26
19
 
27
- // TODO: remove isDeprecatedEdition condition in V2.0
28
- if (isDeprecatedEdition) {
29
- const chatModelCards = modelProviderSelectors.getModelCardsById(ModelProvider.Azure)(
30
- useUserStore.getState(),
31
- );
32
-
33
- const deploymentName = chatModelCards.find((i) => i.id === model)?.deploymentName;
34
- if (deploymentName) deploymentId = deploymentName;
35
- } else {
36
- // find the model by id
37
- const modelItem = getAiInfraStoreState().enabledAiModels?.find(
38
- (i) => i.id === model && i.providerId === provider,
39
- );
20
+ // find the model by id
21
+ const modelItem = getAiInfraStoreState().enabledAiModels?.find(
22
+ (i) => i.id === model && i.providerId === provider,
23
+ );
40
24
 
41
- if (modelItem && modelItem.config?.deploymentName) {
42
- deploymentId = modelItem.config?.deploymentName;
43
- }
25
+ if (modelItem && modelItem.config?.deploymentName) {
26
+ deploymentId = modelItem.config?.deploymentName;
44
27
  }
45
28
 
46
29
  return deploymentId;
47
30
  };
48
31
 
49
32
  export const isEnableFetchOnClient = (provider: string) => {
50
- // TODO: remove this condition in V2.0
51
- if (isDeprecatedEdition) {
52
- return modelConfigSelectors.isProviderFetchOnClient(provider)(useUserStore.getState());
53
- } else {
54
- return aiProviderSelectors.isProviderFetchOnClient(provider)(getAiInfraStoreState());
55
- }
33
+ return aiProviderSelectors.isProviderFetchOnClient(provider)(getAiInfraStoreState());
56
34
  };
57
35
 
58
36
  export const resolveRuntimeProvider = (provider: string) => {
59
- if (isDeprecatedEdition) return provider;
60
-
61
37
  const isBuiltin = Object.values(ModelProvider).includes(provider as any);
62
38
  if (isBuiltin) return provider;
63
39
 
@@ -52,12 +52,12 @@ interface FetchAITaskResultParams extends FetchSSEOptions {
52
52
  abortController?: AbortController;
53
53
  onError?: (e: Error, rawError?: any) => void;
54
54
  /**
55
- * 加载状态变化处理函数
56
- * @param loading - 是否处于加载状态
55
+ * Loading state change handler function
56
+ * @param loading - Whether in loading state
57
57
  */
58
58
  onLoadingChange?: (loading: boolean) => void;
59
59
  /**
60
- * 请求对象
60
+ * Request object
61
61
  */
62
62
  params: ChatStreamInputParams;
63
63
  trace?: TracePayload;
@@ -66,7 +66,6 @@ interface FetchAITaskResultParams extends FetchSSEOptions {
66
66
  interface CreateAssistantMessageStream extends FetchSSEOptions {
67
67
  abortController?: AbortController;
68
68
  historySummary?: string;
69
- isWelcomeQuestion?: boolean;
70
69
  params: GetChatCompletionPayload;
71
70
  trace?: TracePayload;
72
71
  }
@@ -113,9 +112,7 @@ class ChatService {
113
112
  enableHistoryCount: agentChatConfigSelectors.enableHistoryCount(agentStoreState),
114
113
  // include user messages
115
114
  historyCount: agentChatConfigSelectors.historyCount(agentStoreState) + 2,
116
- historySummary: options?.historySummary,
117
115
  inputTemplate: chatConfig.inputTemplate,
118
- isWelcomeQuestion: options?.isWelcomeQuestion,
119
116
  messages,
120
117
  model: payload.model,
121
118
  provider: payload.provider!,
@@ -217,12 +214,10 @@ class ChatService {
217
214
  onErrorHandle,
218
215
  onFinish,
219
216
  trace,
220
- isWelcomeQuestion,
221
217
  historySummary,
222
218
  }: CreateAssistantMessageStream) => {
223
219
  await this.createAssistantMessage(params, {
224
220
  historySummary,
225
- isWelcomeQuestion,
226
221
  onAbort,
227
222
  onErrorHandle,
228
223
  onFinish,
@@ -404,7 +399,7 @@ class ChatService {
404
399
  onLoadingChange?.(true);
405
400
 
406
401
  try {
407
- const oaiMessages = await contextEngineering({
402
+ const llmMessages = await contextEngineering({
408
403
  messages: params.messages as any,
409
404
  model: params.model!,
410
405
  provider: params.provider!,
@@ -421,7 +416,7 @@ class ChatService {
421
416
  // remove plugins
422
417
  delete params.plugins;
423
418
  await this.getChatCompletion(
424
- { ...params, messages: oaiMessages, tools },
419
+ { ...params, messages: llmMessages, tools },
425
420
  {
426
421
  onErrorHandle: (error) => {
427
422
  errorHandle(new Error(error.message), error);
@@ -1,9 +1,9 @@
1
1
  import { TracePayload } from '@lobechat/types';
2
+
2
3
  import { FetchSSEOptions } from '@/utils/fetch';
3
4
 
4
5
  export interface FetchOptions extends FetchSSEOptions {
5
6
  historySummary?: string;
6
- isWelcomeQuestion?: boolean;
7
7
  signal?: AbortSignal | undefined;
8
8
  trace?: TracePayload;
9
9
  }
@@ -1,12 +1,3 @@
1
- import { isDesktop } from '@/const/version';
2
-
3
- import { ClientService } from './client';
4
1
  import { ServerService } from './server';
5
2
 
6
- const clientService =
7
- process.env.NEXT_PUBLIC_CLIENT_DB === 'pglite' ? new ClientService() : new ServerService();
8
-
9
- export const chatGroupService =
10
- process.env.NEXT_PUBLIC_SERVICE_MODE === 'server' || isDesktop
11
- ? new ServerService()
12
- : clientService;
3
+ export const chatGroupService = new ServerService();
@@ -1,23 +1,13 @@
1
- import { BRANDING_NAME, isDeprecatedEdition, isServerMode } from '@lobechat/const';
1
+ import { BRANDING_NAME, isServerMode } from '@lobechat/const';
2
2
  import { downloadFile, exportJSONFile } from '@lobechat/utils/client';
3
3
  import dayjs from 'dayjs';
4
4
 
5
- import { CURRENT_CONFIG_VERSION } from '@/migrations';
6
5
  import { ImportPgDataStructure } from '@/types/export';
7
6
 
8
7
  import { exportService } from './export';
9
- import { configService as deprecatedExportService } from './export/_deprecated';
10
8
 
11
9
  class ConfigService {
12
10
  exportAll = async () => {
13
- // TODO: remove this in V2
14
- if (isDeprecatedEdition) {
15
- const config = await deprecatedExportService.exportAll();
16
- const filename = `${BRANDING_NAME}-config-v${CURRENT_CONFIG_VERSION}.json`;
17
- exportJSONFile(config, filename);
18
- return;
19
- }
20
-
21
11
  const { data, url } = await exportService.exportData();
22
12
  const filename = `${dayjs().format('YYYY-MM-DD-hh-mm')}_${BRANDING_NAME}-data.json`;
23
13
 
@@ -34,60 +24,6 @@ class ConfigService {
34
24
  exportJSONFile(result, filename);
35
25
  };
36
26
 
37
- exportAgents = async () => {
38
- // TODO: remove this in V2
39
- if (isDeprecatedEdition) {
40
- const config = await deprecatedExportService.exportAgents();
41
- const filename = `${BRANDING_NAME}-agents-v${CURRENT_CONFIG_VERSION}.json`;
42
- exportJSONFile(config, filename);
43
- return;
44
- }
45
- };
46
-
47
- exportSingleAgent = async (agentId: string) => {
48
- // TODO: remove this in V2
49
- if (isDeprecatedEdition) {
50
- const result = await deprecatedExportService.exportSingleAgent(agentId);
51
- if (!result) return;
52
-
53
- const filename = `${BRANDING_NAME}-${result.title}-v${CURRENT_CONFIG_VERSION}.json`;
54
- exportJSONFile(result.config, filename);
55
- return;
56
- }
57
- };
58
-
59
- exportSessions = async () => {
60
- // TODO: remove this in V2
61
- if (isDeprecatedEdition) {
62
- const config = await deprecatedExportService.exportSessions();
63
- const filename = `${BRANDING_NAME}-sessions-v${CURRENT_CONFIG_VERSION}.json`;
64
- exportJSONFile(config, filename);
65
- return;
66
- }
67
- };
68
-
69
- exportSettings = async () => {
70
- // TODO: remove this in V2
71
- if (isDeprecatedEdition) {
72
- const config = await deprecatedExportService.exportSessions();
73
- const filename = `${BRANDING_NAME}-settings-v${CURRENT_CONFIG_VERSION}.json`;
74
- exportJSONFile(config, filename);
75
- return;
76
- }
77
- };
78
-
79
- exportSingleSession = async (sessionId: string) => {
80
- // TODO: remove this in V2
81
- if (isDeprecatedEdition) {
82
- const data = await deprecatedExportService.exportSingleSession(sessionId);
83
- if (!data) return;
84
-
85
- const filename = `${BRANDING_NAME}-${data.title}-v${CURRENT_CONFIG_VERSION}.json`;
86
- exportJSONFile(data.config, filename);
87
- return;
88
- }
89
- };
90
-
91
27
  private createDataStructure = async (
92
28
  data: any,
93
29
  mode: 'pglite' | 'postgres',
@@ -1,6 +1,3 @@
1
- import { isServerMode } from '@/const/version';
2
-
3
- import { ClientService } from './client';
4
1
  import { ServerService } from './server';
5
2
 
6
- export const exportService = isServerMode ? new ServerService() : new ClientService();
3
+ export const exportService = new ServerService();