@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.
- package/.env.desktop +1 -2
- package/.env.example +0 -3
- package/.env.example.development +0 -2
- package/.github/workflows/claude-auto-testing.yml +73 -0
- package/.github/workflows/claude-translate-comments.yml +67 -0
- package/.github/workflows/desktop-pr-build.yml +18 -16
- package/.github/workflows/docker.yml +25 -20
- package/.github/workflows/e2e.yml +17 -3
- package/.github/workflows/release-desktop-beta.yml +12 -12
- package/.github/workflows/release.yml +3 -5
- package/.github/workflows/test.yml +47 -12
- package/.nvmrc +1 -1
- package/CHANGELOG.md +684 -0
- package/Dockerfile +1 -3
- package/README.md +2 -45
- package/README.zh-CN.md +2 -45
- package/apps/desktop/src/main/controllers/AuthCtr.ts +53 -39
- package/apps/desktop/src/main/controllers/MenuCtr.ts +5 -5
- package/apps/desktop/src/main/controllers/NotificationCtr.ts +29 -29
- package/apps/desktop/src/main/controllers/RemoteServerConfigCtr.ts +16 -16
- package/apps/desktop/src/main/controllers/ShortcutCtr.ts +2 -2
- package/apps/desktop/src/main/controllers/TrayMenuCtr.ts +18 -18
- package/apps/desktop/src/main/controllers/UpdaterCtr.ts +4 -4
- package/apps/desktop/src/main/controllers/__tests__/AuthCtr.test.ts +706 -0
- package/apps/desktop/src/main/controllers/__tests__/TrayMenuCtr.test.ts +5 -5
- package/apps/desktop/src/main/controllers/index.ts +4 -4
- package/apps/desktop/src/main/utils/next-electron-rsc.ts +7 -5
- package/apps/desktop/tsconfig.json +0 -1
- package/changelog/v1.json +232 -0
- package/docs/development/database-schema.dbml +12 -0
- package/docs/self-hosting/advanced/auth/next-auth/auth0.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/auth0.zh-CN.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/authelia.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/authelia.zh-CN.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/authentik.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/authentik.zh-CN.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/casdoor.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/casdoor.zh-CN.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/cloudflare-zero-trust.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/cloudflare-zero-trust.zh-CN.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/github.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/github.zh-CN.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/google.mdx +32 -29
- package/docs/self-hosting/advanced/auth/next-auth/keycloak.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/keycloak.zh-CN.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/logto.mdx +5 -3
- package/docs/self-hosting/advanced/auth/next-auth/logto.zh-CN.mdx +5 -3
- package/docs/self-hosting/advanced/auth/next-auth/microsoft-entra-id.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/microsoft-entra-id.zh-CN.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/okta.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/okta.zh-CN.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/wechat.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/wechat.zh-CN.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/zitadel.mdx +2 -2
- package/docs/self-hosting/advanced/auth/next-auth/zitadel.zh-CN.mdx +2 -2
- package/docs/self-hosting/advanced/auth.mdx +32 -21
- package/docs/self-hosting/advanced/auth.zh-CN.mdx +30 -19
- package/docs/self-hosting/advanced/feature-flags.mdx +0 -1
- package/docs/self-hosting/advanced/feature-flags.zh-CN.mdx +0 -1
- package/docs/self-hosting/advanced/online-search.mdx +30 -25
- package/docs/self-hosting/advanced/online-search.zh-CN.mdx +25 -23
- package/e2e/src/features/discover/detail-pages.feature +95 -0
- package/e2e/src/features/discover/interactions.feature +113 -0
- package/e2e/src/features/discover/smoke.feature +34 -1
- package/e2e/src/steps/discover/detail-pages.steps.ts +295 -0
- package/e2e/src/steps/discover/interactions.steps.ts +451 -0
- package/e2e/src/steps/discover/smoke.steps.ts +116 -4
- package/e2e/tsconfig.json +0 -1
- package/locales/ar/labs.json +4 -0
- package/locales/ar/models.json +15 -6
- package/locales/ar/oauth.json +1 -0
- package/locales/bg-BG/labs.json +4 -0
- package/locales/bg-BG/models.json +15 -6
- package/locales/bg-BG/oauth.json +1 -0
- package/locales/de-DE/labs.json +4 -0
- package/locales/de-DE/models.json +15 -6
- package/locales/de-DE/oauth.json +1 -0
- package/locales/en-US/labs.json +4 -0
- package/locales/en-US/models.json +15 -6
- package/locales/en-US/oauth.json +1 -0
- package/locales/es-ES/labs.json +4 -0
- package/locales/es-ES/models.json +15 -6
- package/locales/es-ES/oauth.json +1 -0
- package/locales/fa-IR/labs.json +4 -0
- package/locales/fa-IR/models.json +15 -6
- package/locales/fa-IR/oauth.json +1 -0
- package/locales/fr-FR/labs.json +4 -0
- package/locales/fr-FR/models.json +15 -6
- package/locales/fr-FR/oauth.json +1 -0
- package/locales/it-IT/labs.json +4 -0
- package/locales/it-IT/models.json +15 -6
- package/locales/it-IT/oauth.json +1 -0
- package/locales/ja-JP/labs.json +4 -0
- package/locales/ja-JP/models.json +15 -6
- package/locales/ja-JP/oauth.json +1 -0
- package/locales/ko-KR/labs.json +4 -0
- package/locales/ko-KR/models.json +21 -12
- package/locales/ko-KR/oauth.json +1 -0
- package/locales/nl-NL/labs.json +4 -0
- package/locales/nl-NL/models.json +15 -6
- package/locales/nl-NL/oauth.json +1 -0
- package/locales/pl-PL/labs.json +4 -0
- package/locales/pl-PL/models.json +15 -6
- package/locales/pl-PL/oauth.json +1 -0
- package/locales/pt-BR/labs.json +4 -0
- package/locales/pt-BR/models.json +15 -6
- package/locales/pt-BR/oauth.json +1 -0
- package/locales/ru-RU/labs.json +4 -0
- package/locales/ru-RU/models.json +15 -6
- package/locales/ru-RU/oauth.json +1 -0
- package/locales/tr-TR/labs.json +4 -0
- package/locales/tr-TR/models.json +15 -6
- package/locales/tr-TR/oauth.json +1 -0
- package/locales/vi-VN/labs.json +4 -0
- package/locales/vi-VN/models.json +15 -6
- package/locales/vi-VN/oauth.json +1 -0
- package/locales/zh-CN/labs.json +4 -0
- package/locales/zh-CN/models.json +15 -6
- package/locales/zh-CN/oauth.json +1 -0
- package/locales/zh-TW/labs.json +4 -0
- package/locales/zh-TW/models.json +15 -6
- package/locales/zh-TW/oauth.json +1 -0
- package/next.config.ts +2 -3
- package/package.json +76 -82
- package/packages/const/src/index.ts +0 -1
- package/packages/const/src/url.ts +1 -4
- package/packages/const/src/user.ts +5 -2
- package/packages/const/src/version.ts +3 -3
- package/packages/context-engine/src/index.ts +1 -6
- package/packages/context-engine/src/processors/GroupMessageFlatten.ts +12 -2
- package/packages/context-engine/src/processors/__tests__/GroupMessageFlatten.test.ts +73 -9
- package/packages/context-engine/src/providers/index.ts +0 -2
- package/packages/database/migrations/0041_improve_index.sql +10 -0
- package/packages/database/migrations/0042_improve_agent_index.sql +1 -0
- package/packages/database/migrations/0043_add_ai_model_settings.sql +1 -0
- package/packages/database/migrations/meta/0041_snapshot.json +7784 -0
- package/packages/database/migrations/meta/0042_snapshot.json +7800 -0
- package/packages/database/migrations/meta/0043_snapshot.json +8419 -0
- package/packages/database/migrations/meta/_journal.json +21 -0
- package/packages/database/package.json +2 -2
- package/packages/database/src/core/migrations.json +33 -0
- package/packages/database/src/core/web-server.ts +2 -1
- package/packages/database/src/models/__tests__/message.grouping.test.ts +812 -0
- package/packages/database/src/models/__tests__/message.test.ts +256 -233
- package/packages/database/src/models/agent.ts +16 -13
- package/packages/database/src/models/message.ts +90 -74
- package/packages/database/src/models/session.ts +80 -28
- package/packages/database/src/models/user.ts +2 -1
- package/packages/database/src/repositories/aiInfra/index.test.ts +198 -0
- package/packages/database/src/repositories/aiInfra/index.ts +2 -1
- package/packages/database/src/repositories/dataImporter/deprecated/__tests__/index.test.ts +2 -1
- package/packages/database/src/repositories/dataImporter/deprecated/index.ts +7 -1
- package/packages/database/src/schemas/agent.ts +13 -11
- package/packages/database/src/schemas/aiInfra.ts +2 -0
- package/packages/database/src/schemas/message.ts +5 -1
- package/packages/database/src/schemas/relations.ts +6 -4
- package/packages/database/src/schemas/session.ts +2 -0
- package/packages/database/src/schemas/topic.ts +6 -1
- package/packages/database/src/utils/__tests__/groupMessages.test.ts +145 -2
- package/packages/database/src/utils/groupMessages.ts +7 -5
- package/packages/electron-client-ipc/package.json +4 -1
- package/packages/file-loaders/package.json +1 -0
- package/packages/memory-extract/package.json +2 -2
- package/packages/model-bank/src/aiModels/anthropic.ts +0 -63
- package/packages/model-bank/src/aiModels/higress.ts +0 -55
- package/packages/model-bank/src/aiModels/infiniai.ts +21 -0
- package/packages/model-bank/src/aiModels/ollamacloud.ts +13 -0
- package/packages/model-bank/src/aiModels/siliconcloud.ts +19 -0
- package/packages/model-runtime/src/core/streams/openai/__snapshots__/responsesStream.test.ts.snap +0 -38
- package/packages/model-runtime/src/providers/minimax/index.ts +5 -5
- package/packages/model-runtime/src/providers/search1api/index.test.ts +2 -2
- package/packages/model-runtime/src/utils/googleErrorParser.test.ts +125 -0
- package/packages/model-runtime/src/utils/googleErrorParser.ts +103 -77
- package/packages/obervability-otel/package.json +1 -3
- package/packages/obervability-otel/src/node.ts +3 -7
- package/packages/types/src/discover/mcp.ts +6 -0
- package/packages/types/src/index.ts +0 -1
- package/packages/types/src/message/common/base.ts +13 -0
- package/packages/types/src/message/common/image.ts +8 -0
- package/packages/types/src/message/common/metadata.ts +39 -0
- package/packages/types/src/message/common/tools.ts +10 -0
- package/packages/types/src/message/db/params.ts +47 -1
- package/packages/types/src/message/ui/chat.ts +4 -1
- package/packages/types/src/message/ui/params.ts +49 -4
- package/packages/types/src/plugins/mcp.ts +4 -1
- package/packages/types/src/search.ts +16 -0
- package/packages/types/src/serverConfig.ts +2 -6
- package/packages/types/src/topic/topic.ts +14 -0
- package/packages/types/src/user/index.ts +2 -76
- package/packages/types/src/user/preference.ts +105 -0
- package/packages/types/src/user/settings/index.ts +22 -0
- package/packages/utils/src/apiKey.test.ts +139 -0
- package/packages/utils/src/client/clipboard.ts +2 -2
- package/packages/utils/src/client/exportFile.ts +10 -10
- package/packages/utils/src/client/parserPlaceholder.ts +18 -18
- package/packages/utils/src/client/topic.ts +10 -10
- package/packages/utils/src/client/xor-obfuscation.ts +11 -11
- package/packages/utils/src/server/auth.ts +6 -6
- package/packages/utils/src/server/geo.ts +9 -9
- package/packages/utils/src/server/xor.ts +7 -7
- package/packages/web-crawler/src/crawImpl/firecrawl.ts +39 -12
- package/packages/web-crawler/tsconfig.json +0 -1
- package/renovate.json +23 -1
- package/scripts/migrateServerDB/errorHint.js +1 -7
- package/scripts/migrateServerDB/index.ts +2 -1
- package/src/app/(backend)/webapi/revalidate/route.ts +1 -1
- package/src/app/[variants]/(auth)/signup/[[...signup]]/page.tsx +1 -8
- package/src/app/[variants]/(main)/(mobile)/me/(home)/__tests__/useCategory.test.tsx +9 -0
- package/src/app/[variants]/(main)/(mobile)/me/(home)/features/UserBanner.tsx +3 -6
- package/src/app/[variants]/(main)/(mobile)/me/(home)/layout.tsx +0 -2
- package/src/app/[variants]/(main)/_layout/Desktop/SideBar/TopActions.tsx +1 -4
- package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/V1Mobile/index.tsx +2 -2
- package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/V1Mobile/useSend.ts +6 -4
- package/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatInput/useSend.ts +15 -10
- package/src/app/[variants]/(main)/chat/@session/features/SessionListContent/List/Item/Actions.tsx +3 -28
- package/src/app/[variants]/(main)/chat/@session/features/SessionListContent/List/Item/index.tsx +4 -2
- package/src/app/[variants]/(main)/chat/_layout/Desktop/index.tsx +0 -2
- package/src/app/[variants]/(main)/chat/_layout/Mobile.tsx +1 -5
- package/src/app/[variants]/(main)/chat/settings/features/HeaderContent.tsx +2 -62
- package/src/app/[variants]/(main)/discover/(list)/features/Pagination.tsx +1 -0
- package/src/app/[variants]/(main)/discover/(list)/features/SortButton/index.tsx +1 -1
- package/src/app/[variants]/(main)/discover/(list)/mcp/features/List/Item.tsx +1 -0
- package/src/app/[variants]/(main)/discover/(list)/model/features/List/Item.tsx +1 -0
- package/src/app/[variants]/(main)/discover/(list)/provider/features/List/Item.tsx +1 -0
- package/src/app/[variants]/(main)/discover/components/CategoryMenu.tsx +9 -1
- package/src/app/[variants]/(main)/image/@topic/features/Topics/TopicList.tsx +1 -0
- package/src/app/[variants]/(main)/image/features/PromptInput/index.tsx +1 -1
- package/src/app/[variants]/(main)/image/page.tsx +0 -2
- package/src/app/[variants]/(main)/labs/components/LabCard.tsx +8 -6
- package/src/app/[variants]/(main)/labs/page.tsx +19 -22
- package/src/app/[variants]/(main)/profile/_layout/Desktop/index.tsx +23 -24
- package/src/app/[variants]/(main)/profile/_layout/Mobile/index.tsx +5 -9
- package/src/app/[variants]/(main)/settings/_layout/Desktop/index.tsx +0 -2
- package/src/app/[variants]/(main)/settings/_layout/Mobile/index.tsx +0 -2
- package/src/app/[variants]/(main)/settings/provider/(list)/ProviderGrid/Card.tsx +1 -1
- package/src/app/[variants]/(main)/settings/provider/detail/azure/index.tsx +6 -8
- package/src/app/[variants]/(main)/settings/provider/detail/azureai/index.tsx +1 -1
- package/src/app/[variants]/(main)/settings/provider/detail/bedrock/index.tsx +1 -1
- package/src/app/[variants]/(main)/settings/provider/detail/cloudflare/index.tsx +1 -1
- package/src/app/[variants]/(main)/settings/provider/detail/comfyui/index.tsx +1 -1
- package/src/app/[variants]/(main)/settings/provider/detail/github/index.tsx +1 -1
- package/src/app/[variants]/(main)/settings/provider/detail/vertexai/index.tsx +1 -1
- package/src/app/[variants]/(main)/settings/provider/features/ProviderConfig/index.tsx +2 -4
- package/src/app/[variants]/layout.tsx +1 -0
- package/src/app/[variants]/loading/index.tsx +1 -10
- package/src/app/[variants]/oauth/ResultLayout.tsx +47 -0
- package/src/app/[variants]/oauth/callback/error/page.tsx +20 -33
- package/src/app/[variants]/oauth/callback/layout.tsx +1 -0
- package/src/app/[variants]/oauth/callback/success/page.tsx +8 -22
- package/src/app/[variants]/oauth/consent/[uid]/Consent/BuiltinConsent.tsx +47 -0
- package/src/app/[variants]/oauth/consent/[uid]/{Consent.tsx → Consent/index.tsx} +12 -1
- package/src/app/[variants]/oauth/consent/[uid]/Login.tsx +19 -2
- package/src/app/sitemap.tsx +7 -1
- package/src/components/InvalidAPIKey/APIKeyForm/Bedrock.tsx +8 -13
- package/src/components/Link.tsx +12 -0
- package/src/components/Skeleton/SkeletonSwitch.tsx +13 -0
- package/src/components/Skeleton/index.ts +2 -0
- package/src/components/Thinking/index.tsx +4 -3
- package/src/config/db.ts +0 -5
- package/src/config/featureFlags/schema.test.ts +0 -2
- package/src/config/featureFlags/schema.ts +0 -6
- package/src/config/modelProviders/ai21.ts +1 -16
- package/src/config/modelProviders/ai302.ts +1 -128
- package/src/config/modelProviders/ai360.ts +1 -32
- package/src/config/modelProviders/anthropic.ts +1 -94
- package/src/config/modelProviders/azure.ts +1 -51
- package/src/config/modelProviders/baichuan.ts +1 -57
- package/src/config/modelProviders/bedrock.ts +1 -276
- package/src/config/modelProviders/cloudflare.ts +1 -64
- package/src/config/modelProviders/deepseek.ts +1 -19
- package/src/config/modelProviders/fireworksai.ts +1 -174
- package/src/config/modelProviders/giteeai.ts +1 -135
- package/src/config/modelProviders/github.ts +1 -254
- package/src/config/modelProviders/google.ts +1 -130
- package/src/config/modelProviders/groq.ts +1 -119
- package/src/config/modelProviders/higress.ts +1 -1736
- package/src/config/modelProviders/huggingface.ts +1 -54
- package/src/config/modelProviders/hunyuan.ts +1 -83
- package/src/config/modelProviders/infiniai.ts +1 -74
- package/src/config/modelProviders/internlm.ts +1 -20
- package/src/config/modelProviders/minimax.ts +1 -1
- package/src/config/modelProviders/mistral.ts +1 -95
- package/src/config/modelProviders/modelscope.ts +1 -27
- package/src/config/modelProviders/moonshot.ts +1 -29
- package/src/config/modelProviders/novita.ts +1 -105
- package/src/config/modelProviders/ollama.ts +1 -325
- package/src/config/modelProviders/openai.ts +1 -242
- package/src/config/modelProviders/openrouter.ts +1 -240
- package/src/config/modelProviders/perplexity.ts +1 -45
- package/src/config/modelProviders/ppio.ts +1 -152
- package/src/config/modelProviders/qiniu.ts +2 -19
- package/src/config/modelProviders/qwen.ts +1 -245
- package/src/config/modelProviders/search1api.ts +1 -34
- package/src/config/modelProviders/sensenova.ts +1 -69
- package/src/config/modelProviders/siliconcloud.ts +1 -417
- package/src/config/modelProviders/spark.ts +1 -59
- package/src/config/modelProviders/stepfun.ts +1 -98
- package/src/config/modelProviders/taichu.ts +1 -18
- package/src/config/modelProviders/togetherai.ts +1 -274
- package/src/config/modelProviders/upstage.ts +1 -28
- package/src/config/modelProviders/wenxin.ts +1 -140
- package/src/config/modelProviders/xai.ts +1 -38
- package/src/config/modelProviders/zeroone.ts +1 -81
- package/src/config/modelProviders/zhipu.ts +1 -108
- package/src/envs/app.ts +5 -8
- package/src/envs/auth.ts +0 -179
- package/src/features/AgentSetting/AgentPlugin/index.tsx +2 -2
- package/src/features/ChatInput/ActionBar/STT/browser.tsx +2 -2
- package/src/features/ChatInput/ActionBar/STT/openai.tsx +2 -2
- package/src/features/ChatInput/ActionBar/Tools/useControls.tsx +1 -3
- package/src/features/ChatInput/ActionBar/index.tsx +2 -2
- package/src/features/ChatInput/InputEditor/index.tsx +2 -2
- package/src/features/Conversation/Error/ErrorJsonViewer.tsx +4 -3
- package/src/features/Conversation/Error/OllamaBizError/index.tsx +7 -2
- package/src/features/Conversation/Error/index.tsx +15 -5
- package/src/features/Conversation/MarkdownElements/LobeArtifact/Render/index.tsx +2 -2
- package/src/features/Conversation/Messages/Assistant/Extra/index.tsx +2 -2
- package/src/features/Conversation/Messages/Assistant/MessageContent.tsx +5 -3
- package/src/features/Conversation/Messages/Assistant/Tool/Inspector/BuiltinPluginTitle.tsx +2 -2
- package/src/features/Conversation/Messages/Assistant/Tool/Inspector/ToolTitle.tsx +4 -2
- package/src/features/Conversation/Messages/Assistant/Tool/Render/CustomRender.tsx +2 -2
- package/src/features/Conversation/Messages/Assistant/Tool/Render/index.tsx +2 -2
- package/src/features/Conversation/Messages/Assistant/Tool/index.tsx +2 -2
- package/src/features/Conversation/Messages/Assistant/index.tsx +4 -4
- package/src/features/Conversation/Messages/Default.tsx +2 -2
- package/src/features/Conversation/Messages/Group/Actions/WithContentId.tsx +152 -0
- package/src/features/Conversation/Messages/Group/Actions/WithoutContentId.tsx +70 -0
- package/src/features/Conversation/Messages/Group/Actions/index.tsx +21 -0
- package/src/features/Conversation/Messages/Group/ContentBlock.tsx +91 -0
- package/src/features/Conversation/Messages/Group/EditState.tsx +51 -0
- package/src/features/Conversation/Messages/Group/Error/index.tsx +53 -0
- package/src/features/Conversation/Messages/Group/GroupChildren.tsx +73 -0
- package/src/features/Conversation/Messages/Group/MessageContent.tsx +39 -0
- package/src/features/Conversation/Messages/Group/Tool/Inspector/BuiltinPluginTitle.tsx +49 -0
- package/src/features/Conversation/Messages/Group/Tool/Inspector/Debug.tsx +70 -0
- package/src/features/Conversation/Messages/Group/Tool/Inspector/PluginResult.tsx +34 -0
- package/src/features/Conversation/Messages/Group/Tool/Inspector/PluginState.tsx +18 -0
- package/src/features/Conversation/Messages/Group/Tool/Inspector/Settings.tsx +40 -0
- package/src/features/Conversation/Messages/Group/Tool/Inspector/ToolTitle.tsx +92 -0
- package/src/features/Conversation/Messages/Group/Tool/Inspector/index.tsx +176 -0
- package/src/features/Conversation/Messages/Group/Tool/Render/Arguments/ObjectEntity.tsx +81 -0
- package/src/features/Conversation/Messages/Group/Tool/Render/Arguments/ValueCell.tsx +43 -0
- package/src/features/Conversation/Messages/Group/Tool/Render/Arguments/index.tsx +134 -0
- package/src/features/Conversation/Messages/Group/Tool/Render/CustomRender.tsx +88 -0
- package/src/features/Conversation/Messages/Group/Tool/Render/ErrorResponse.tsx +35 -0
- package/src/features/Conversation/Messages/Group/Tool/Render/LoadingPlaceholder/index.tsx +29 -0
- package/src/features/Conversation/Messages/Group/Tool/Render/PluginSettings.tsx +66 -0
- package/src/features/Conversation/Messages/Group/Tool/Render/index.tsx +105 -0
- package/src/features/Conversation/Messages/Group/Tool/index.tsx +75 -0
- package/src/features/Conversation/Messages/Group/Tools.tsx +46 -0
- package/src/features/Conversation/Messages/Group/index.tsx +140 -0
- package/src/features/Conversation/Messages/User/Extra.tsx +2 -2
- package/src/features/Conversation/Messages/User/index.tsx +4 -4
- package/src/features/Conversation/Messages/index.tsx +15 -3
- package/src/features/Conversation/components/AutoScroll.tsx +2 -2
- package/src/features/Conversation/components/Extras/Usage/UsageDetail/index.tsx +9 -6
- package/src/features/Conversation/components/ShareMessageModal/ShareImage/Preview.tsx +2 -2
- package/src/features/DataImporter/index.tsx +15 -60
- package/src/features/DevPanel/PostgresViewer/usePgTable.ts +3 -2
- package/src/features/MCP/utils.test.ts +91 -0
- package/src/features/MCP/utils.ts +20 -2
- package/src/features/PluginStore/Content.tsx +2 -3
- package/src/features/PluginStore/McpList/index.tsx +6 -2
- package/src/features/PluginTag/index.tsx +1 -3
- package/src/features/PluginsUI/Render/BuiltinType/index.test.tsx +37 -28
- package/src/features/Portal/Artifacts/Body/index.tsx +2 -2
- package/src/helpers/isCanUseFC.ts +0 -8
- package/src/hooks/useEnabledChatModels.ts +0 -8
- package/src/hooks/useInterceptingRoutes.test.ts +21 -3
- package/src/hooks/useModelContextWindowTokens.ts +0 -8
- package/src/hooks/useModelHasContextWindowToken.ts +1 -10
- package/src/hooks/useModelSupportFiles.ts +1 -11
- package/src/hooks/useModelSupportReasoning.ts +1 -11
- package/src/hooks/useModelSupportToolUse.ts +1 -11
- package/src/hooks/useModelSupportVision.ts +1 -11
- package/src/layout/AuthProvider/Clerk/index.tsx +2 -16
- package/src/libs/next-auth/auth.config.ts +3 -6
- package/src/libs/next-auth/sso-providers/auth0.ts +0 -7
- package/src/libs/next-auth/sso-providers/authelia.ts +3 -5
- package/src/libs/next-auth/sso-providers/authentik.ts +0 -7
- package/src/libs/next-auth/sso-providers/cloudflare-zero-trust.ts +3 -6
- package/src/libs/next-auth/sso-providers/cognito.ts +1 -5
- package/src/libs/next-auth/sso-providers/generic-oidc.ts +3 -5
- package/src/libs/next-auth/sso-providers/github.ts +0 -6
- package/src/libs/next-auth/sso-providers/google.ts +0 -2
- package/src/libs/next-auth/sso-providers/index.ts +0 -2
- package/src/libs/next-auth/sso-providers/keycloak.ts +0 -3
- package/src/libs/next-auth/sso-providers/logto.ts +3 -5
- package/src/libs/next-auth/sso-providers/okta.ts +0 -4
- package/src/libs/next-auth/sso-providers/zitadel.ts +0 -7
- package/src/libs/oidc-provider/provider.ts +1 -1
- package/src/libs/trpc/client/index.ts +0 -1
- package/src/libs/trpc/client/lambda.ts +8 -5
- package/src/libs/trpc/lambda/context.ts +4 -1
- package/src/locales/default/labs.ts +4 -0
- package/src/locales/default/oauth.ts +1 -0
- package/src/server/globalConfig/index.ts +0 -23
- package/src/server/modules/AssistantStore/index.ts +1 -1
- package/src/server/modules/ModelRuntime/trace.ts +11 -4
- package/src/server/routers/desktop/mcp.ts +1 -3
- package/src/server/routers/lambda/__tests__/integration/message.integration.test.ts +810 -70
- package/src/server/routers/lambda/config/__snapshots__/index.test.ts.snap +175 -12
- package/src/server/routers/lambda/config/index.test.ts +38 -30
- package/src/server/routers/lambda/market/index.ts +4 -2
- package/src/server/routers/lambda/message.ts +60 -52
- package/src/server/routers/lambda/session.ts +8 -5
- package/src/server/routers/lambda/topic.ts +7 -1
- package/src/server/routers/lambda/user.ts +32 -31
- package/src/server/routers/tools/mcp.ts +2 -3
- package/src/server/routers/tools/search.test.ts +1 -7
- package/src/server/routers/tools/search.ts +1 -4
- package/src/server/services/mcp/deps/MCPSystemDepsCheckService.test.ts +541 -0
- package/src/server/services/message/__tests__/index.test.ts +348 -0
- package/src/server/services/message/index.ts +159 -0
- package/src/server/services/search/impls/firecrawl/index.ts +51 -11
- package/src/server/services/search/impls/firecrawl/type.ts +60 -9
- package/src/services/__tests__/tool.test.ts +0 -3
- package/src/services/aiModel/index.test.ts +3 -6
- package/src/services/aiModel/index.ts +55 -7
- package/src/services/aiProvider/index.test.ts +2 -5
- package/src/services/aiProvider/index.ts +47 -7
- package/src/services/chat/chat.test.ts +13 -40
- package/src/services/chat/contextEngineering.test.ts +0 -30
- package/src/services/chat/contextEngineering.ts +7 -17
- package/src/services/chat/helper.ts +7 -31
- package/src/services/chat/index.ts +5 -10
- package/src/services/chat/types.ts +1 -1
- package/src/services/chatGroup/index.ts +64 -9
- package/src/services/config.ts +1 -65
- package/src/services/export/index.ts +9 -4
- package/src/services/file/index.ts +59 -10
- package/src/services/import/index.ts +132 -7
- package/src/services/mcp.test.ts +777 -0
- package/src/services/mcp.ts +40 -6
- package/src/services/message/index.ts +203 -10
- package/src/services/message/{__tests__/server.test.ts → server.test.ts} +3 -3
- package/src/services/models.ts +2 -11
- package/src/services/plugin/index.test.ts +8 -0
- package/src/services/plugin/index.ts +51 -10
- package/src/services/session/index.test.ts +8 -0
- package/src/services/session/index.ts +143 -10
- package/src/services/tableViewer/client.ts +12 -15
- package/src/services/thread/index.test.ts +8 -0
- package/src/services/thread/index.ts +37 -7
- package/src/services/topic/index.test.ts +8 -0
- package/src/services/topic/index.ts +74 -10
- package/src/services/user/index.test.ts +8 -0
- package/src/services/user/index.ts +50 -11
- package/src/store/aiInfra/slices/aiModel/action.test.ts +17 -9
- package/src/store/chat/helpers.test.ts +99 -0
- package/src/store/chat/helpers.ts +21 -2
- package/src/store/chat/selectors.ts +1 -1
- package/src/store/chat/slices/aiChat/actions/__tests__/generateAIChat.test.ts +17 -251
- package/src/store/chat/slices/aiChat/actions/__tests__/generateAIChatV2.test.ts +339 -7
- package/src/store/chat/slices/aiChat/actions/__tests__/helpers.ts +9 -5
- package/src/store/chat/slices/aiChat/actions/generateAIChat.ts +49 -178
- package/src/store/chat/slices/aiChat/actions/generateAIChatV2.ts +272 -14
- package/src/store/chat/slices/aiChat/actions/generateAIGroupChat.ts +7 -2
- package/src/store/chat/slices/builtinTool/actions/index.ts +1 -4
- package/src/store/chat/slices/builtinTool/actions/search.ts +3 -3
- package/src/store/chat/slices/message/action.test.ts +157 -16
- package/src/store/chat/slices/message/action.ts +153 -77
- package/src/store/chat/slices/message/reducer.test.ts +363 -5
- package/src/store/chat/slices/message/reducer.ts +87 -3
- package/src/store/chat/slices/message/{selectors.test.ts → selectors/chat.test.ts} +266 -30
- package/src/store/chat/slices/message/{selectors.ts → selectors/chat.ts} +29 -79
- package/src/store/chat/slices/message/selectors/index.ts +2 -0
- package/src/store/chat/slices/message/selectors/messageState.test.ts +36 -0
- package/src/store/chat/slices/message/selectors/messageState.ts +80 -0
- package/src/store/chat/slices/plugin/action.test.ts +118 -157
- package/src/store/chat/slices/plugin/action.ts +53 -68
- package/src/store/chat/slices/thread/action.test.ts +13 -4
- package/src/store/chat/slices/thread/action.ts +3 -1
- package/src/store/chat/slices/topic/action.test.ts +1 -1
- package/src/store/chat/slices/topic/action.ts +1 -2
- package/src/store/chat/slices/topic/reducer.ts +1 -2
- package/src/store/file/slices/chat/action.ts +1 -4
- package/src/store/file/slices/fileManager/action.ts +2 -3
- package/src/store/global/store.ts +1 -7
- package/src/store/session/slices/sessionGroup/action.test.ts +5 -5
- package/src/store/tool/selectors/tool.test.ts +1 -1
- package/src/store/tool/selectors/tool.ts +6 -8
- package/src/store/tool/slices/builtin/action.test.ts +83 -35
- package/src/store/tool/slices/builtin/action.ts +0 -9
- package/src/store/tool/slices/builtin/selectors.test.ts +4 -30
- package/src/store/tool/slices/builtin/selectors.ts +15 -21
- package/src/store/tool/slices/mcpStore/action.test.ts +95 -3
- package/src/store/tool/slices/mcpStore/action.ts +177 -53
- package/src/store/tool/slices/oldStore/initialState.ts +1 -2
- package/src/store/user/initialState.ts +1 -7
- package/src/store/user/selectors.ts +1 -5
- package/src/store/user/slices/common/action.test.ts +1 -4
- package/src/store/user/slices/common/action.ts +5 -4
- package/src/store/user/slices/preference/action.ts +8 -1
- package/src/store/user/slices/preference/selectors/index.ts +2 -0
- package/src/store/user/slices/preference/selectors/labPrefer.ts +13 -0
- package/src/store/user/slices/preference/{selectors.ts → selectors/preference.ts} +0 -2
- package/src/store/user/slices/settings/selectors/index.ts +1 -0
- package/src/store/user/slices/settings/selectors/keyVaults.ts +21 -0
- package/src/store/user/store.ts +0 -3
- package/src/tools/index.ts +0 -6
- package/src/tools/renders.ts +0 -3
- package/src/tools/web-browsing/Portal/Search/Footer.tsx +2 -2
- package/src/tools/web-browsing/Render/Search/ConfigForm/Form.tsx +1 -1
- package/tsconfig.json +9 -3
- package/packages/const/src/guide.ts +0 -89
- package/packages/context-engine/src/providers/InboxGuide.ts +0 -102
- package/packages/context-engine/src/providers/__tests__/InboxGuideProvider.test.ts +0 -121
- package/packages/utils/src/_deprecated/__snapshots__/parseModels.test.ts.snap +0 -104
- package/packages/utils/src/_deprecated/parseModels.test.ts +0 -287
- package/packages/utils/src/_deprecated/parseModels.ts +0 -165
- package/src/app/(backend)/trpc/edge/[trpc]/route.ts +0 -26
- package/src/app/[variants]/(main)/(mobile)/me/data/features/Category.tsx +0 -48
- package/src/app/[variants]/(main)/(mobile)/me/data/features/Header.tsx +0 -33
- package/src/app/[variants]/(main)/(mobile)/me/data/layout.tsx +0 -13
- package/src/app/[variants]/(main)/(mobile)/me/data/loading.tsx +0 -5
- package/src/app/[variants]/(main)/(mobile)/me/data/page.tsx +0 -29
- package/src/app/[variants]/(main)/chat/features/Migration/DBReader.ts +0 -290
- package/src/app/[variants]/(main)/chat/features/Migration/ExportConfigButton.tsx +0 -35
- package/src/app/[variants]/(main)/chat/features/Migration/Failed.tsx +0 -120
- package/src/app/[variants]/(main)/chat/features/Migration/Modal.tsx +0 -81
- package/src/app/[variants]/(main)/chat/features/Migration/Start.tsx +0 -108
- package/src/app/[variants]/(main)/chat/features/Migration/UpgradeButton.tsx +0 -71
- package/src/app/[variants]/(main)/chat/features/Migration/const.ts +0 -15
- package/src/app/[variants]/(main)/chat/features/Migration/index.tsx +0 -50
- package/src/app/[variants]/loading/Client/Content.tsx +0 -48
- package/src/app/[variants]/loading/Client/Error.tsx +0 -27
- package/src/app/[variants]/loading/Client/Redirect.tsx +0 -47
- package/src/app/[variants]/loading/Client/index.tsx +0 -22
- package/src/components/InnerLink.tsx +0 -20
- package/src/database/_deprecated/core/__tests__/db-upgrade.test.ts +0 -42
- package/src/database/_deprecated/core/__tests__/db.test.ts +0 -79
- package/src/database/_deprecated/core/__tests__/model.test.ts +0 -55
- package/src/database/_deprecated/core/db.ts +0 -246
- package/src/database/_deprecated/core/index.ts +0 -2
- package/src/database/_deprecated/core/migrations/migrateSettingsToUser/fixtures/input.json +0 -55
- package/src/database/_deprecated/core/migrations/migrateSettingsToUser/fixtures/output.json +0 -60
- package/src/database/_deprecated/core/migrations/migrateSettingsToUser/index.test.ts +0 -14
- package/src/database/_deprecated/core/migrations/migrateSettingsToUser/index.ts +0 -22
- package/src/database/_deprecated/core/migrations/migrateSettingsToUser/type.ts +0 -105
- package/src/database/_deprecated/core/model.ts +0 -218
- package/src/database/_deprecated/core/schemas.ts +0 -88
- package/src/database/_deprecated/core/types/db.ts +0 -15
- package/src/database/_deprecated/models/__DEBUG.ts +0 -124
- package/src/database/_deprecated/models/__tests__/file.test.ts +0 -83
- package/src/database/_deprecated/models/__tests__/message.test.ts +0 -426
- package/src/database/_deprecated/models/__tests__/plugin.test.ts +0 -81
- package/src/database/_deprecated/models/__tests__/session.test.ts +0 -253
- package/src/database/_deprecated/models/__tests__/sessionGroup.test.ts +0 -220
- package/src/database/_deprecated/models/__tests__/topic.test.ts +0 -523
- package/src/database/_deprecated/models/__tests__/user.test.ts +0 -82
- package/src/database/_deprecated/models/file.ts +0 -51
- package/src/database/_deprecated/models/message.ts +0 -277
- package/src/database/_deprecated/models/plugin.ts +0 -62
- package/src/database/_deprecated/models/session.ts +0 -271
- package/src/database/_deprecated/models/sessionGroup.ts +0 -93
- package/src/database/_deprecated/models/topic.ts +0 -250
- package/src/database/_deprecated/models/user.ts +0 -69
- package/src/database/_deprecated/schemas/files.ts +0 -39
- package/src/database/_deprecated/schemas/message.ts +0 -50
- package/src/database/_deprecated/schemas/plugin.ts +0 -12
- package/src/database/_deprecated/schemas/session.ts +0 -54
- package/src/database/_deprecated/schemas/sessionGroup.ts +0 -8
- package/src/database/_deprecated/schemas/topic.ts +0 -12
- package/src/database/_deprecated/schemas/user.ts +0 -40
- package/src/envs/__tests__/auth.test.ts +0 -200
- package/src/features/DataImporter/_deprecated.ts +0 -43
- package/src/features/InitClientDB/EnableModal.tsx +0 -118
- package/src/features/InitClientDB/ErrorResult.tsx +0 -143
- package/src/features/InitClientDB/InitIndicator.tsx +0 -124
- package/src/features/InitClientDB/PGliteIcon.tsx +0 -28
- package/src/features/InitClientDB/features/DatabaseRepair/Backup.tsx +0 -75
- package/src/features/InitClientDB/features/DatabaseRepair/Diagnosis.tsx +0 -98
- package/src/features/InitClientDB/features/DatabaseRepair/Repair.tsx +0 -218
- package/src/features/InitClientDB/features/DatabaseRepair/index.tsx +0 -91
- package/src/features/InitClientDB/index.tsx +0 -37
- package/src/hooks/_header.ts +0 -23
- package/src/libs/next-auth/sso-providers/azure-ad.ts +0 -33
- package/src/libs/trpc/client/edge.ts +0 -26
- package/src/libs/trpc/edge/context.ts +0 -71
- package/src/libs/trpc/edge/index.ts +0 -45
- package/src/libs/trpc/edge/init.ts +0 -26
- package/src/libs/trpc/edge/middleware/jwtPayload.test.ts +0 -75
- package/src/libs/trpc/edge/middleware/jwtPayload.ts +0 -14
- package/src/migrations/FromV0ToV1.ts +0 -10
- package/src/migrations/FromV1ToV2/fixtures/input-v1-session.json +0 -191
- package/src/migrations/FromV1ToV2/fixtures/output-v2.json +0 -202
- package/src/migrations/FromV1ToV2/index.ts +0 -82
- package/src/migrations/FromV1ToV2/migrations.test.ts +0 -224
- package/src/migrations/FromV1ToV2/types/v1.ts +0 -78
- package/src/migrations/FromV1ToV2/types/v2.ts +0 -52
- package/src/migrations/FromV2ToV3/fixtures/input-v2-session.json +0 -72
- package/src/migrations/FromV2ToV3/fixtures/output-v3-from-v1.json +0 -203
- package/src/migrations/FromV2ToV3/fixtures/output-v3.json +0 -74
- package/src/migrations/FromV2ToV3/index.ts +0 -30
- package/src/migrations/FromV2ToV3/migrations.test.ts +0 -42
- package/src/migrations/FromV2ToV3/types/v3.ts +0 -27
- package/src/migrations/FromV3ToV4/fixtures/azure-input-v3.json +0 -79
- package/src/migrations/FromV3ToV4/fixtures/azure-output-v4.json +0 -75
- package/src/migrations/FromV3ToV4/fixtures/ollama-input-v3.json +0 -85
- package/src/migrations/FromV3ToV4/fixtures/ollama-output-v4.json +0 -86
- package/src/migrations/FromV3ToV4/fixtures/openai-input-v3.json +0 -77
- package/src/migrations/FromV3ToV4/fixtures/openai-output-v4.json +0 -77
- package/src/migrations/FromV3ToV4/fixtures/openrouter-input-v3.json +0 -82
- package/src/migrations/FromV3ToV4/fixtures/openrouter-output-v4.json +0 -85
- package/src/migrations/FromV3ToV4/fixtures/output-v4-from-v1.json +0 -203
- package/src/migrations/FromV3ToV4/index.ts +0 -102
- package/src/migrations/FromV3ToV4/migrations.test.ts +0 -195
- package/src/migrations/FromV3ToV4/types/v3.ts +0 -52
- package/src/migrations/FromV3ToV4/types/v4.ts +0 -37
- package/src/migrations/FromV4ToV5/fixtures/from-v1-to-v5-output.json +0 -245
- package/src/migrations/FromV4ToV5/fixtures/function-input-v4.json +0 -96
- package/src/migrations/FromV4ToV5/fixtures/function-output-v5.json +0 -120
- package/src/migrations/FromV4ToV5/index.ts +0 -58
- package/src/migrations/FromV4ToV5/migrations.test.ts +0 -49
- package/src/migrations/FromV4ToV5/types/v4.ts +0 -21
- package/src/migrations/FromV4ToV5/types/v5.ts +0 -27
- package/src/migrations/FromV5ToV6/fixtures/from-v1-to-v6-output.json +0 -247
- package/src/migrations/FromV5ToV6/fixtures/session-input-v5.json +0 -81
- package/src/migrations/FromV5ToV6/fixtures/session-output-v6.json +0 -85
- package/src/migrations/FromV5ToV6/index.ts +0 -61
- package/src/migrations/FromV5ToV6/migrations.test.ts +0 -50
- package/src/migrations/FromV5ToV6/types/v5.ts +0 -48
- package/src/migrations/FromV5ToV6/types/v6.ts +0 -63
- package/src/migrations/FromV6ToV7/fixtures/output-v7-from-v1.json +0 -203
- package/src/migrations/FromV6ToV7/fixtures/provider-input-v6.json +0 -103
- package/src/migrations/FromV6ToV7/fixtures/provider-output-v7.json +0 -118
- package/src/migrations/FromV6ToV7/index.ts +0 -101
- package/src/migrations/FromV6ToV7/migrations.test.ts +0 -64
- package/src/migrations/FromV6ToV7/types/v6.ts +0 -61
- package/src/migrations/FromV6ToV7/types/v7.ts +0 -69
- package/src/migrations/VersionController.test.ts +0 -88
- package/src/migrations/VersionController.ts +0 -67
- package/src/migrations/index.ts +0 -61
- package/src/server/globalConfig/_deprecated.test.ts +0 -92
- package/src/server/globalConfig/_deprecated.ts +0 -41
- package/src/server/routers/edge/appStatus.ts +0 -3
- package/src/server/routers/edge/index.ts +0 -14
- package/src/server/routers/edge/upload.ts +0 -16
- package/src/services/aiModel/client.ts +0 -70
- package/src/services/aiModel/server.test.ts +0 -122
- package/src/services/aiModel/server.ts +0 -51
- package/src/services/aiModel/type.ts +0 -32
- package/src/services/aiProvider/client.ts +0 -58
- package/src/services/aiProvider/server.ts +0 -43
- package/src/services/aiProvider/type.ts +0 -27
- package/src/services/baseClientService/index.ts +0 -9
- package/src/services/chat/__snapshots__/chat.test.ts.snap +0 -110
- package/src/services/chatGroup/client.ts +0 -63
- package/src/services/chatGroup/server.ts +0 -67
- package/src/services/chatGroup/type.ts +0 -22
- package/src/services/export/_deprecated.ts +0 -155
- package/src/services/export/client.ts +0 -15
- package/src/services/export/server.ts +0 -9
- package/src/services/export/type.ts +0 -5
- package/src/services/file/_deprecated.test.ts +0 -119
- package/src/services/file/_deprecated.ts +0 -80
- package/src/services/file/client.test.ts +0 -199
- package/src/services/file/client.ts +0 -85
- package/src/services/file/server.ts +0 -53
- package/src/services/file/type.ts +0 -13
- package/src/services/import/_deprecated.ts +0 -115
- package/src/services/import/client.test.ts +0 -1015
- package/src/services/import/client.ts +0 -64
- package/src/services/import/server.ts +0 -133
- package/src/services/import/type.ts +0 -17
- package/src/services/message/_deprecated.test.ts +0 -398
- package/src/services/message/_deprecated.ts +0 -168
- package/src/services/message/client.test.ts +0 -410
- package/src/services/message/client.ts +0 -186
- package/src/services/message/server.ts +0 -150
- package/src/services/message/type.ts +0 -54
- package/src/services/plugin/_deprecated.test.ts +0 -162
- package/src/services/plugin/_deprecated.ts +0 -42
- package/src/services/plugin/client.test.ts +0 -177
- package/src/services/plugin/client.ts +0 -46
- package/src/services/plugin/server.ts +0 -42
- package/src/services/plugin/type.ts +0 -23
- package/src/services/session/_deprecated.test.ts +0 -440
- package/src/services/session/_deprecated.ts +0 -190
- package/src/services/session/client.test.ts +0 -413
- package/src/services/session/client.ts +0 -193
- package/src/services/session/server.test.ts +0 -260
- package/src/services/session/server.ts +0 -125
- package/src/services/session/type.ts +0 -82
- package/src/services/thread/client.ts +0 -51
- package/src/services/thread/server.ts +0 -32
- package/src/services/thread/type.ts +0 -21
- package/src/services/topic/_deprecated.test.ts +0 -245
- package/src/services/topic/_deprecated.ts +0 -75
- package/src/services/topic/client.ts +0 -89
- package/src/services/topic/pglite.test.ts +0 -212
- package/src/services/topic/server.ts +0 -57
- package/src/services/topic/type.ts +0 -40
- package/src/services/user/_deprecated.test.ts +0 -101
- package/src/services/user/_deprecated.ts +0 -70
- package/src/services/user/client.test.ts +0 -108
- package/src/services/user/client.ts +0 -104
- package/src/services/user/server.test.ts +0 -149
- package/src/services/user/server.ts +0 -47
- package/src/services/user/type.ts +0 -21
- package/src/store/chat/slices/builtinTool/actions/__tests__/dalle.test.ts +0 -121
- package/src/store/chat/slices/builtinTool/actions/dalle.ts +0 -124
- package/src/store/global/actions/clientDb.ts +0 -67
- package/src/store/user/slices/modelList/__snapshots__/action.test.ts.snap +0 -12
- package/src/store/user/slices/modelList/action.test.ts +0 -359
- package/src/store/user/slices/modelList/action.ts +0 -223
- package/src/store/user/slices/modelList/initialState.ts +0 -15
- package/src/store/user/slices/modelList/reducers/customModelCard.test.ts +0 -204
- package/src/store/user/slices/modelList/reducers/customModelCard.ts +0 -64
- package/src/store/user/slices/modelList/selectors/index.ts +0 -3
- package/src/store/user/slices/modelList/selectors/keyVaults.test.ts +0 -201
- package/src/store/user/slices/modelList/selectors/keyVaults.ts +0 -50
- package/src/store/user/slices/modelList/selectors/modelConfig.test.ts +0 -219
- package/src/store/user/slices/modelList/selectors/modelConfig.ts +0 -95
- package/src/store/user/slices/modelList/selectors/modelProvider.test.ts +0 -138
- package/src/store/user/slices/modelList/selectors/modelProvider.ts +0 -170
- package/src/tools/dalle/Render/GalleyGrid.tsx +0 -60
- package/src/tools/dalle/Render/Item/EditMode.tsx +0 -66
- package/src/tools/dalle/Render/Item/Error.tsx +0 -49
- package/src/tools/dalle/Render/Item/Image.tsx +0 -44
- package/src/tools/dalle/Render/Item/ImageFileItem.tsx +0 -57
- package/src/tools/dalle/Render/Item/index.tsx +0 -88
- package/src/tools/dalle/Render/ToolBar.tsx +0 -56
- package/src/tools/dalle/Render/index.tsx +0 -52
- package/src/tools/dalle/index.ts +0 -92
- /package/src/{app/[variants]/(main)/settings/provider/features/ProviderConfig → components/Skeleton}/SkeletonInput.tsx +0 -0
- /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,
|
package/packages/model-runtime/src/core/streams/openai/__snapshots__/responsesStream.test.ts.snap
CHANGED
|
@@ -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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
|
833
|
+
{ id: 'gpt-4o' },
|
|
834
834
|
{ id: 'unknown-model-1' },
|
|
835
|
-
{ id: '
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
prefix:
|
|
64
|
-
}
|
|
65
|
-
}
|
|
53
|
+
const closeBracketIndex = message.indexOf(']', openBracketIndex);
|
|
54
|
+
if (closeBracketIndex === -1) {
|
|
55
|
+
return { errorDetails: null, prefix: message };
|
|
56
|
+
}
|
|
66
57
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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
|
-
*
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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.
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
const
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
const
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
error
|
|
151
|
-
|
|
152
|
-
message
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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;
|