@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
@@ -145,6 +145,25 @@ const siliconcloudChatModels: AIChatModelCard[] = [
145
145
  releasedAt: '2025-09-01',
146
146
  type: 'chat',
147
147
  },
148
+ {
149
+ abilities: {
150
+ functionCall: true,
151
+ },
152
+ contextWindowTokens: 131_072,
153
+ description:
154
+ 'KAT-Dev(32B)是一款专为软件工程任务设计的开源 32B 参数模型。在 SWE-Bench Verified 基准测试中,它取得了 62.4% 的解决率,在所有不同规模的开源模型中排名第五。该模型通过多个阶段进行优化,包括中间训练、监督微调(SFT)与强化学习(RL),旨在为代码补全、缺陷修复、代码评审等复杂编程任务提供强大支持。',
155
+ displayName: 'KAT-Dev 32B',
156
+ id: 'Kwaipilot/KAT-Dev',
157
+ pricing: {
158
+ currency: 'CNY',
159
+ units: [
160
+ { name: 'textInput', rate: 1, strategy: 'fixed', unit: 'millionTokens' },
161
+ { name: 'textOutput', rate: 4, strategy: 'fixed', unit: 'millionTokens' },
162
+ ],
163
+ },
164
+ releasedAt: '2025-09-27',
165
+ type: 'chat',
166
+ },
148
167
  {
149
168
  abilities: {
150
169
  functionCall: true,
@@ -145,25 +145,6 @@ exports[`OpenAIResponsesStream > Reasoning > summary 1`] = `
145
145
  ]
146
146
  `;
147
147
 
148
- exports[`OpenAIResponsesStream > should handle chunk errors in catch block 1`] = `
149
- [
150
- "id: resp_error_catch
151
- ",
152
- "event: data
153
- ",
154
- "data: "in_progress"
155
-
156
- ",
157
- "id: undefined
158
- ",
159
- "event: reasoning
160
- ",
161
- "data: undefined
162
-
163
- ",
164
- ]
165
- `;
166
-
167
148
  exports[`OpenAIResponsesStream > should handle chunks with undefined values gracefully 1`] = `
168
149
  [
169
150
  "id: resp_undefined_vals
@@ -546,25 +527,6 @@ exports[`OpenAIResponsesStream > should handle response.reasoning_summary_text.d
546
527
  ]
547
528
  `;
548
529
 
549
- exports[`OpenAIResponsesStream > should handle stream chunk transformation error with null access 1`] = `
550
- [
551
- "id: resp_error_test
552
- ",
553
- "event: data
554
- ",
555
- "data: "in_progress"
556
-
557
- ",
558
- "id: null
559
- ",
560
- "event: text
561
- ",
562
- "data: "test"
563
-
564
- ",
565
- ]
566
- `;
567
-
568
530
  exports[`OpenAIResponsesStream > should handle unknown chunk type as data 1`] = `
569
531
  [
570
532
  "id: resp_unknown
@@ -17,11 +17,11 @@ export const LobeMinimaxAI = createOpenAICompatibleRuntime({
17
17
 
18
18
  const minimaxTools = enabledSearch
19
19
  ? [
20
- ...(tools || []),
21
- {
22
- type: 'web_search',
23
- },
24
- ]
20
+ ...(tools || []),
21
+ {
22
+ type: 'web_search',
23
+ },
24
+ ]
25
25
  : tools;
26
26
 
27
27
  // Resolve parameters with constraints
@@ -830,9 +830,9 @@ describe('LobeSearch1API - custom features', () => {
830
830
  it('should handle mix of known and unknown models', async () => {
831
831
  mockClient.models.list.mockResolvedValue({
832
832
  data: [
833
- { id: 'gpt-4o-mini' },
833
+ { id: 'gpt-4o' },
834
834
  { id: 'unknown-model-1' },
835
- { id: 'claude-3-5-sonnet-20241022' },
835
+ { id: 'gpt-4o-mini' },
836
836
  { id: 'unknown-model-2' },
837
837
  ],
838
838
  });
@@ -86,6 +86,119 @@ describe('googleErrorParser', () => {
86
86
  });
87
87
  expect(result.prefix).toBe('Error');
88
88
  });
89
+
90
+ it('should handle multiple spaces between status code and text', () => {
91
+ const input = 'Error [500 Internal Server Error] Something went wrong';
92
+ const result = extractStatusCodeFromError(input);
93
+
94
+ expect(result.errorDetails).toEqual({
95
+ message: 'Something went wrong',
96
+ statusCode: 500,
97
+ statusCodeText: '[500 Internal Server Error]',
98
+ });
99
+ expect(result.prefix).toBe('Error');
100
+ });
101
+
102
+ it('should handle status code at the beginning of message', () => {
103
+ const input = '[429 Too Many Requests] Rate limit exceeded';
104
+ const result = extractStatusCodeFromError(input);
105
+
106
+ expect(result.errorDetails).toEqual({
107
+ message: 'Rate limit exceeded',
108
+ statusCode: 429,
109
+ statusCodeText: '[429 Too Many Requests]',
110
+ });
111
+ expect(result.prefix).toBe('');
112
+ });
113
+
114
+ it('should handle status code at the end of message', () => {
115
+ const input = 'Request failed [503 Service Unavailable]';
116
+ const result = extractStatusCodeFromError(input);
117
+
118
+ expect(result.errorDetails).toEqual({
119
+ message: '',
120
+ statusCode: 503,
121
+ statusCodeText: '[503 Service Unavailable]',
122
+ });
123
+ expect(result.prefix).toBe('Request failed');
124
+ });
125
+
126
+ it('should not be vulnerable to ReDoS attacks', () => {
127
+ // Test with a potentially malicious input that could cause catastrophic backtracking
128
+ const maliciousInput = 'Error ' + 'a'.repeat(10000) + ' [not matching]';
129
+ const startTime = Date.now();
130
+ const result = extractStatusCodeFromError(maliciousInput);
131
+ const endTime = Date.now();
132
+
133
+ // Should complete quickly (under 100ms) even with large input
134
+ expect(endTime - startTime).toBeLessThan(100);
135
+ expect(result.errorDetails).toBeNull();
136
+ });
137
+
138
+ it('should not be vulnerable to ReDoS with many spaces', () => {
139
+ // Test the specific case mentioned in the security warning: '[9 ' + many spaces
140
+ const maliciousInput = '[9 ' + ' '.repeat(10000) + ']';
141
+ const startTime = Date.now();
142
+ const result = extractStatusCodeFromError(maliciousInput);
143
+ const endTime = Date.now();
144
+
145
+ // Should complete quickly (under 100ms) even with many spaces
146
+ expect(endTime - startTime).toBeLessThan(100);
147
+ expect(result.errorDetails).toBeDefined();
148
+ });
149
+
150
+ it('should handle very long error messages efficiently', () => {
151
+ const longMessage = 'a'.repeat(50000);
152
+ const input = `Prefix [400 Bad Request] ${longMessage}`;
153
+ const startTime = Date.now();
154
+ const result = extractStatusCodeFromError(input);
155
+ const endTime = Date.now();
156
+
157
+ // Should complete quickly even with very long input
158
+ expect(endTime - startTime).toBeLessThan(100);
159
+ expect(result.errorDetails?.statusCode).toBe(400);
160
+ });
161
+
162
+ it('should safely handle edge cases with match.index', () => {
163
+ // Test various edge cases where match.index might be 0 or at different positions
164
+ const testCases = [
165
+ { input: '[400 Bad Request]', expectedPrefix: '' },
166
+ { input: '[500 Error] Message', expectedPrefix: '' },
167
+ { input: 'Some text [404 Not Found] More text', expectedPrefix: 'Some text' },
168
+ ];
169
+
170
+ testCases.forEach(({ input, expectedPrefix }) => {
171
+ const result = extractStatusCodeFromError(input);
172
+ expect(result.errorDetails).toBeDefined();
173
+ expect(result.prefix).toBe(expectedPrefix);
174
+ });
175
+ });
176
+
177
+ it('should find status code when there are multiple brackets', () => {
178
+ // Real-world case from Google AI API errors with JSON arrays in the message
179
+ const input =
180
+ '[GoogleGenerativeAI Error]: Error fetching: [400 Bad Request] API key not valid. [{"@type":"type.googleapis.com"}]';
181
+ const result = extractStatusCodeFromError(input);
182
+
183
+ expect(result.errorDetails).toEqual({
184
+ message: 'API key not valid. [{"@type":"type.googleapis.com"}]',
185
+ statusCode: 400,
186
+ statusCodeText: '[400 Bad Request]',
187
+ });
188
+ expect(result.prefix).toBe('[GoogleGenerativeAI Error]: Error fetching:');
189
+ });
190
+
191
+ it('should skip brackets that do not contain valid status codes', () => {
192
+ const input = 'Error [not a code] happened [500 Internal Server Error] please retry';
193
+ const result = extractStatusCodeFromError(input);
194
+
195
+ expect(result.errorDetails).toEqual({
196
+ message: 'please retry',
197
+ statusCode: 500,
198
+ statusCodeText: '[500 Internal Server Error]',
199
+ });
200
+ expect(result.prefix).toBe('Error [not a code] happened');
201
+ });
89
202
  });
90
203
 
91
204
  describe('parseGoogleErrorMessage', () => {
@@ -110,6 +223,18 @@ describe('googleErrorParser', () => {
110
223
  });
111
224
  });
112
225
 
226
+ it('should not be vulnerable to ReDoS in status JSON parsing', () => {
227
+ // Test with malicious input that could cause catastrophic backtracking
228
+ const maliciousInput = 'got status: UNAVAILABLE. ' + 'a'.repeat(10000);
229
+ const startTime = Date.now();
230
+ const result = parseGoogleErrorMessage(maliciousInput);
231
+ const endTime = Date.now();
232
+
233
+ // Should complete quickly (under 100ms) even with large input
234
+ expect(endTime - startTime).toBeLessThan(100);
235
+ expect(result.errorType).toBe(AgentRuntimeErrorType.ProviderBizError);
236
+ });
237
+
113
238
  it('should handle direct JSON parsing', () => {
114
239
  const input =
115
240
  '{"error":{"code":400,"message":"* API key not valid. Please pass a valid API key.","status":"INVALID_ARGUMENT"}}';
@@ -17,64 +17,81 @@ export interface GoogleChatError {
17
17
  export type GoogleChatErrors = GoogleChatError[];
18
18
 
19
19
  /**
20
- * 清理错误消息,移除格式化字符和多余的空格
21
- * @param message - 原始错误消息
22
- * @returns 清理后的错误消息
20
+ * Clean error message by removing formatting characters and extra spaces
21
+ * @param message - Original error message
22
+ * @returns Cleaned error message
23
23
  */
24
24
  export function cleanErrorMessage(message: string): string {
25
25
  return message
26
- .replaceAll(/^\*\s*/g, '') // 移除开头的星号和空格
27
- .replaceAll('\\n', '\n') // 转换转义的换行符
28
- .replaceAll(/\n+/g, ' ') // 将多个换行符替换为单个空格
29
- .trim(); // 去除首尾空格
26
+ .replaceAll(/^\*\s*/g, '') // Remove leading asterisks and spaces
27
+ .replaceAll('\\n', '\n') // Convert escaped newlines
28
+ .replaceAll(/\n+/g, ' ') // Replace multiple newlines with single space
29
+ .trim(); // Trim leading/trailing spaces
30
30
  }
31
31
 
32
32
  /**
33
- * 从错误消息中提取状态码信息
34
- * @param message - 错误消息
35
- * @returns 提取的错误详情和前缀
33
+ * Extract status code information from error message
34
+ * @param message - Error message
35
+ * @returns Extracted error details and prefix
36
36
  */
37
37
  export function extractStatusCodeFromError(message: string): {
38
38
  errorDetails: any;
39
39
  prefix: string;
40
40
  } {
41
- // 使用正则表达式匹配状态码部分 [数字 描述文本]
42
- const regex = /^(.*?)(\[\d+ [^\]]+])(.*)$/;
43
- const match = message.match(regex);
44
-
45
- if (match) {
46
- const prefix = match[1].trim();
47
- const statusCodeWithBrackets = match[2].trim();
48
- const messageContent = match[3].trim();
49
-
50
- // 提取状态码数字
51
- const statusCodeMatch = statusCodeWithBrackets.match(/\[(\d+)/);
52
- const statusCode = statusCodeMatch ? parseInt(statusCodeMatch[1]) : null;
53
-
54
- // 创建包含状态码和消息的JSON
55
- const resultJson = {
56
- message: messageContent,
57
- statusCode: statusCode,
58
- statusCodeText: statusCodeWithBrackets,
59
- };
41
+ // Match status code pattern [number description text]
42
+ // Use string methods instead of regex to avoid ReDoS attacks
43
+ // We need to find a bracket that contains a status code (3-digit number followed by space and text)
44
+
45
+ let searchStart = 0;
46
+ // eslint-disable-next-line no-constant-condition
47
+ while (true) {
48
+ const openBracketIndex = message.indexOf('[', searchStart);
49
+ if (openBracketIndex === -1) {
50
+ return { errorDetails: null, prefix: message };
51
+ }
60
52
 
61
- return {
62
- errorDetails: resultJson,
63
- prefix: prefix,
64
- };
65
- }
53
+ const closeBracketIndex = message.indexOf(']', openBracketIndex);
54
+ if (closeBracketIndex === -1) {
55
+ return { errorDetails: null, prefix: message };
56
+ }
66
57
 
67
- // 如果无法匹配,返回原始消息
68
- return {
69
- errorDetails: null,
70
- prefix: message,
71
- };
58
+ const bracketContent = message.slice(openBracketIndex + 1, closeBracketIndex).trim();
59
+
60
+ // Find the first space to separate status code from description
61
+ const spaceIndex = bracketContent.indexOf(' ');
62
+ if (spaceIndex !== -1) {
63
+ const statusCodeStr = bracketContent.slice(0, spaceIndex);
64
+ const statusCode = parseInt(statusCodeStr, 10);
65
+
66
+ // Validate that statusCode is a valid HTTP status code (3 digits)
67
+ if (!isNaN(statusCode) && statusCode >= 100 && statusCode < 600) {
68
+ const statusText = bracketContent.slice(spaceIndex + 1).trim();
69
+ const prefix = message.slice(0, openBracketIndex).trim();
70
+ const messageContent = message.slice(closeBracketIndex + 1).trim();
71
+
72
+ // Create JSON containing status code and message
73
+ const resultJson = {
74
+ message: messageContent,
75
+ statusCode: statusCode,
76
+ statusCodeText: `[${statusCode} ${statusText}]`,
77
+ };
78
+
79
+ return {
80
+ errorDetails: resultJson,
81
+ prefix: prefix,
82
+ };
83
+ }
84
+ }
85
+
86
+ // Move to next bracket
87
+ searchStart = openBracketIndex + 1;
88
+ }
72
89
  }
73
90
 
74
91
  /**
75
- * 解析Google AI API返回的错误消息
76
- * @param message - 原始错误消息
77
- * @returns 解析后的错误对象和错误类型
92
+ * Parse error message from Google AI API
93
+ * @param message - Original error message
94
+ * @returns Parsed error object and error type
78
95
  */
79
96
  export function parseGoogleErrorMessage(message: string): ParsedError {
80
97
  const defaultError = {
@@ -82,12 +99,12 @@ export function parseGoogleErrorMessage(message: string): ParsedError {
82
99
  errorType: AgentRuntimeErrorType.ProviderBizError,
83
100
  };
84
101
 
85
- // 快速识别特殊错误
102
+ // Quick identification of special errors
86
103
  if (message.includes('location is not supported')) {
87
104
  return { error: { message }, errorType: AgentRuntimeErrorType.LocationNotSupportError };
88
105
  }
89
106
 
90
- // 统一的错误类型判断函数
107
+ // Unified error type determination function
91
108
  const getErrorType = (code: number | null, message: string): ILobeAgentRuntimeErrorType => {
92
109
  if (code === 400 && message.includes('API key not valid')) {
93
110
  return AgentRuntimeErrorType.InvalidProviderAPIKey;
@@ -97,30 +114,30 @@ export function parseGoogleErrorMessage(message: string): ParsedError {
97
114
  return AgentRuntimeErrorType.ProviderBizError;
98
115
  };
99
116
 
100
- // 递归解析JSON,处理嵌套的JSON字符串
117
+ // Recursively parse JSON, handling nested JSON strings
101
118
  const parseJsonRecursively = (str: string, maxDepth: number = 5): any => {
102
119
  if (maxDepth <= 0) return null;
103
120
 
104
121
  try {
105
122
  const parsed = JSON.parse(str);
106
123
 
107
- // 如果解析出的对象包含error字段
124
+ // If parsed object contains error field
108
125
  if (parsed && typeof parsed === 'object' && parsed.error) {
109
126
  const errorInfo = parsed.error;
110
127
 
111
- // 清理错误消息
128
+ // Clean error message
112
129
  if (typeof errorInfo.message === 'string') {
113
130
  errorInfo.message = cleanErrorMessage(errorInfo.message);
114
131
 
115
- // 如果error.message还是一个JSON字符串,继续递归解析
132
+ // If error.message is still a JSON string, continue recursive parsing
116
133
  try {
117
134
  const nestedResult = parseJsonRecursively(errorInfo.message, maxDepth - 1);
118
- // 只有当深层结果包含带有 code error 对象时,才优先返回深层结果
135
+ // Only return deeper result if it contains an error object with code
119
136
  if (nestedResult && nestedResult.error && nestedResult.error.code) {
120
137
  return nestedResult;
121
138
  }
122
139
  } catch {
123
- // 如果嵌套解析失败,使用当前层的信息
140
+ // If nested parsing fails, use current layer info
124
141
  }
125
142
  }
126
143
 
@@ -133,31 +150,40 @@ export function parseGoogleErrorMessage(message: string): ParsedError {
133
150
  }
134
151
  };
135
152
 
136
- // 1. 处理 "got status: UNAVAILABLE. {JSON}" 格式
137
- const statusJsonMatch = message.match(/got status: (\w+)\.\s*({.*})$/);
138
- if (statusJsonMatch) {
139
- const statusFromMessage = statusJsonMatch[1];
140
- const jsonPart = statusJsonMatch[2];
141
-
142
- const parsedError = parseJsonRecursively(jsonPart);
143
- if (parsedError && parsedError.error) {
144
- const errorInfo = parsedError.error;
145
- const finalMessage = errorInfo.message || message;
146
- const finalCode = errorInfo.code || null;
147
- const finalStatus = errorInfo.status || statusFromMessage;
148
-
149
- return {
150
- error: {
151
- code: finalCode,
152
- message: finalMessage,
153
- status: finalStatus,
154
- },
155
- errorType: getErrorType(finalCode, finalMessage),
156
- };
153
+ // 1. Handle "got status: UNAVAILABLE. {JSON}" format
154
+ const statusPrefix = 'got status: ';
155
+ const statusPrefixIndex = message.indexOf(statusPrefix);
156
+ if (statusPrefixIndex !== -1) {
157
+ const afterPrefix = message.slice(statusPrefixIndex + statusPrefix.length);
158
+ const dotIndex = afterPrefix.indexOf('.');
159
+ if (dotIndex !== -1) {
160
+ const statusFromMessage = afterPrefix.slice(0, dotIndex).trim();
161
+ const afterDot = afterPrefix.slice(dotIndex + 1).trim();
162
+ const braceIndex = afterDot.indexOf('{');
163
+ if (braceIndex !== -1) {
164
+ const jsonPart = afterDot.slice(braceIndex);
165
+
166
+ const parsedError = parseJsonRecursively(jsonPart);
167
+ if (parsedError && parsedError.error) {
168
+ const errorInfo = parsedError.error;
169
+ const finalMessage = errorInfo.message || message;
170
+ const finalCode = errorInfo.code || null;
171
+ const finalStatus = errorInfo.status || statusFromMessage;
172
+
173
+ return {
174
+ error: {
175
+ code: finalCode,
176
+ message: finalMessage,
177
+ status: finalStatus,
178
+ },
179
+ errorType: getErrorType(finalCode, finalMessage),
180
+ };
181
+ }
182
+ }
157
183
  }
158
184
  }
159
185
 
160
- // 2. 尝试直接解析整个消息作为JSON
186
+ // 2. Try to parse entire message as JSON directly
161
187
  const directParsed = parseJsonRecursively(message);
162
188
  if (directParsed && directParsed.error) {
163
189
  const errorInfo = directParsed.error;
@@ -175,7 +201,7 @@ export function parseGoogleErrorMessage(message: string): ParsedError {
175
201
  };
176
202
  }
177
203
 
178
- // 3. 处理嵌套JSON格式,特别是message字段包含JSON的情况
204
+ // 3. Handle nested JSON format, especially when message field contains JSON
179
205
  try {
180
206
  const firstLevelParsed = JSON.parse(message);
181
207
  if (firstLevelParsed && firstLevelParsed.error && firstLevelParsed.error.message) {
@@ -197,10 +223,10 @@ export function parseGoogleErrorMessage(message: string): ParsedError {
197
223
  }
198
224
  }
199
225
  } catch {
200
- // 继续其他解析方式
226
+ // Continue with other parsing methods
201
227
  }
202
228
 
203
- // 4. 原有的数组格式解析逻辑
229
+ // 4. Original array format parsing logic
204
230
  const startIndex = message.lastIndexOf('[');
205
231
  if (startIndex !== -1) {
206
232
  try {
@@ -214,11 +240,11 @@ export function parseGoogleErrorMessage(message: string): ParsedError {
214
240
 
215
241
  return { error: json, errorType: AgentRuntimeErrorType.ProviderBizError };
216
242
  } catch {
217
- // 忽略解析错误
243
+ // Ignore parsing errors
218
244
  }
219
245
  }
220
246
 
221
- // 5. 使用状态码提取逻辑作为最后的后备方案
247
+ // 5. Use status code extraction logic as last fallback
222
248
  const errorObj = extractStatusCodeFromError(message);
223
249
  if (errorObj.errorDetails) {
224
250
  return { error: errorObj.errorDetails, errorType: AgentRuntimeErrorType.ProviderBizError };
@@ -18,8 +18,6 @@
18
18
  "@opentelemetry/sdk-node": "^0.207.0",
19
19
  "@opentelemetry/sdk-trace-node": "^2.0.1",
20
20
  "@opentelemetry/semantic-conventions": "^1.36.0",
21
- "@vercel/otel": "^1.13.0",
22
- "import-in-the-middle": "^1.14.2",
23
- "require-in-the-middle": "^7.5.2"
21
+ "@vercel/otel": "^1.13.0"
24
22
  }
25
23
  }
@@ -9,9 +9,7 @@ import { PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
9
9
  import { NodeSDK } from '@opentelemetry/sdk-node';
10
10
  import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
11
11
 
12
-
13
-
14
- export function register(options?: { debug?: true | DiagLogLevel, version?: string; }) {
12
+ export function register(options?: { debug?: true | DiagLogLevel; version?: string }) {
15
13
  const attributes: Record<string, string> = {
16
14
  [ATTR_SERVICE_NAME]: 'lobe-chat',
17
15
  };
@@ -31,9 +29,7 @@ export function register(options?: { debug?: true | DiagLogLevel, version?: stri
31
29
  new HttpInstrumentation(),
32
30
  getNodeAutoInstrumentations(),
33
31
  ],
34
- metricReader: new PeriodicExportingMetricReader({
35
- exporter: new OTLPMetricExporter(),
36
- }),
32
+ metricReaders: [new PeriodicExportingMetricReader({ exporter: new OTLPMetricExporter() })],
37
33
  resource: resourceFromAttributes(attributes),
38
34
  traceExporter: new OTLPTraceExporter(),
39
35
  });
@@ -41,4 +37,4 @@ export function register(options?: { debug?: true | DiagLogLevel, version?: stri
41
37
  sdk.start();
42
38
  }
43
39
 
44
- export {DiagLogLevel} from '@opentelemetry/api';
40
+ export { DiagLogLevel } from '@opentelemetry/api';
@@ -39,10 +39,16 @@ export enum McpNavKey {
39
39
  Version = 'version',
40
40
  }
41
41
 
42
+ export enum McpConnectionType {
43
+ http = 'http',
44
+ stdio = 'stdio'
45
+ }
46
+
42
47
  export type DiscoverMcpItem = PluginItem;
43
48
 
44
49
  export interface McpQueryParams {
45
50
  category?: string;
51
+ connectionType?: McpConnectionType;
46
52
  locale?: string;
47
53
  order?: 'asc' | 'desc';
48
54
  page?: number;
@@ -26,7 +26,6 @@ export * from './session';
26
26
  export * from './tool';
27
27
  export * from './topic';
28
28
  export * from './user';
29
- export * from './user/settings';
30
29
  // FIXME: I think we need a refactor for the "openai" types
31
30
  // it more likes the UI message payload
32
31
  export * from './openai/chat';
@@ -1,5 +1,6 @@
1
1
  import type { ILobeAgentRuntimeErrorType } from '@lobechat/model-runtime';
2
2
  import type { IPluginErrorType } from '@lobehub/chat-plugin-sdk';
3
+ import { z } from 'zod';
3
4
 
4
5
  import { ErrorType } from '../../fetch';
5
6
 
@@ -12,6 +13,12 @@ export interface ChatMessageError {
12
13
  type: ErrorType | IPluginErrorType | ILobeAgentRuntimeErrorType;
13
14
  }
14
15
 
16
+ export const ChatMessageErrorSchema = z.object({
17
+ body: z.any().optional(),
18
+ message: z.string(),
19
+ type: z.union([z.string(), z.number()]),
20
+ });
21
+
15
22
  export interface ChatCitationItem {
16
23
  id?: string;
17
24
  onlyUrl?: boolean;
@@ -24,3 +31,9 @@ export interface ModelReasoning {
24
31
  duration?: number;
25
32
  signature?: string;
26
33
  }
34
+
35
+ export const ModelReasoningSchema = z.object({
36
+ content: z.string().optional(),
37
+ duration: z.number().optional(),
38
+ signature: z.string().optional(),
39
+ });
@@ -1,9 +1,17 @@
1
+ import { z } from 'zod';
2
+
1
3
  export interface ChatImageItem {
2
4
  alt: string;
3
5
  id: string;
4
6
  url: string;
5
7
  }
6
8
 
9
+ export const ChatImageItemSchema = z.object({
10
+ alt: z.string(),
11
+ id: z.string(),
12
+ url: z.string(),
13
+ });
14
+
7
15
  export interface ChatImageChunk {
8
16
  data: string;
9
17
  id: string;