@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
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
2
|
-
|
|
3
|
-
import { DB_Plugin } from '../../schemas/plugin';
|
|
4
|
-
import { PluginModel } from '../plugin';
|
|
5
|
-
|
|
6
|
-
describe('PluginModel', () => {
|
|
7
|
-
let pluginData: DB_Plugin;
|
|
8
|
-
|
|
9
|
-
beforeEach(() => {
|
|
10
|
-
// 设置正确结构的插件数据
|
|
11
|
-
pluginData = {
|
|
12
|
-
identifier: 'test-plugin',
|
|
13
|
-
id: 'test-plugin',
|
|
14
|
-
manifest: {},
|
|
15
|
-
type: 'plugin',
|
|
16
|
-
};
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
afterEach(async () => {
|
|
20
|
-
// 每次测试后清理数据库
|
|
21
|
-
await PluginModel.clear();
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
describe('getList', () => {
|
|
25
|
-
it('should fetch and return the plugin list', async () => {
|
|
26
|
-
await PluginModel.create(pluginData);
|
|
27
|
-
const plugins = await PluginModel.getList();
|
|
28
|
-
expect(plugins).toHaveLength(1);
|
|
29
|
-
expect(plugins[0]).toEqual(pluginData);
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
describe('create', () => {
|
|
34
|
-
it('should create a plugin record', async () => {
|
|
35
|
-
await PluginModel.create(pluginData);
|
|
36
|
-
const plugins = await PluginModel.getList();
|
|
37
|
-
expect(plugins).toHaveLength(1);
|
|
38
|
-
expect(plugins[0]).toEqual(pluginData);
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
describe('batchCreate', () => {
|
|
43
|
-
it('should batch create plugin records', async () => {
|
|
44
|
-
await PluginModel.batchCreate([pluginData, { ...pluginData, identifier: 'abc' }]);
|
|
45
|
-
const plugins = await PluginModel.getList();
|
|
46
|
-
expect(plugins).toHaveLength(2);
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
describe('delete', () => {
|
|
51
|
-
it('should delete a plugin', async () => {
|
|
52
|
-
await PluginModel.create(pluginData);
|
|
53
|
-
await PluginModel.delete(pluginData.identifier);
|
|
54
|
-
const plugins = await PluginModel.getList();
|
|
55
|
-
expect(plugins).toHaveLength(0);
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
describe('update', () => {
|
|
60
|
-
it('should update a plugin', async () => {
|
|
61
|
-
await PluginModel.create(pluginData);
|
|
62
|
-
const updatedPluginData: DB_Plugin = {
|
|
63
|
-
...pluginData,
|
|
64
|
-
type: 'customPlugin',
|
|
65
|
-
};
|
|
66
|
-
await PluginModel.update(pluginData.identifier, updatedPluginData);
|
|
67
|
-
const plugins = await PluginModel.getList();
|
|
68
|
-
expect(plugins).toHaveLength(1);
|
|
69
|
-
expect(plugins[0]).toEqual({ ...updatedPluginData, updatedAt: expect.any(Number) });
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
describe('clear', () => {
|
|
74
|
-
it('should clear the table', async () => {
|
|
75
|
-
await PluginModel.create(pluginData);
|
|
76
|
-
await PluginModel.clear();
|
|
77
|
-
const plugins = await PluginModel.getList();
|
|
78
|
-
expect(plugins).toHaveLength(0);
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
});
|
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
2
|
-
|
|
3
|
-
import { DEFAULT_AGENT_CONFIG } from '@/const/settings';
|
|
4
|
-
import { CreateMessageParams, MessageModel } from '@/database/_deprecated/models/message';
|
|
5
|
-
import { SessionGroupModel } from '@/database/_deprecated/models/sessionGroup';
|
|
6
|
-
import { TopicModel } from '@/database/_deprecated/models/topic';
|
|
7
|
-
import { LobeAgentConfig } from '@/types/agent';
|
|
8
|
-
import {
|
|
9
|
-
LobeAgentSession,
|
|
10
|
-
LobeSessionType,
|
|
11
|
-
SessionDefaultGroup,
|
|
12
|
-
SessionGroupId,
|
|
13
|
-
} from '@/types/session';
|
|
14
|
-
|
|
15
|
-
import { SessionModel } from '../session';
|
|
16
|
-
|
|
17
|
-
describe('SessionModel', () => {
|
|
18
|
-
let sessionData: Partial<LobeAgentSession>;
|
|
19
|
-
|
|
20
|
-
beforeEach(() => {
|
|
21
|
-
// Set up session data with the correct structure
|
|
22
|
-
sessionData = {
|
|
23
|
-
type: LobeSessionType.Agent,
|
|
24
|
-
group: 'testGroup',
|
|
25
|
-
meta: {},
|
|
26
|
-
config: DEFAULT_AGENT_CONFIG,
|
|
27
|
-
};
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
afterEach(async () => {
|
|
31
|
-
// Clean up the database after each test
|
|
32
|
-
await SessionModel.clearTable();
|
|
33
|
-
});
|
|
34
|
-
describe('create', () => {
|
|
35
|
-
it('should create a session record', async () => {
|
|
36
|
-
const result = await SessionModel.create('agent', sessionData);
|
|
37
|
-
|
|
38
|
-
expect(result).toHaveProperty('id');
|
|
39
|
-
// Verify that the session has been added to the database
|
|
40
|
-
// Assuming findById is a method that retrieves a session by ID
|
|
41
|
-
const sessionInDb = await SessionModel.findById(result.id);
|
|
42
|
-
|
|
43
|
-
expect(sessionInDb).toEqual(expect.objectContaining(sessionData));
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
describe('batchCreate', () => {
|
|
48
|
-
it('should batch create session records', async () => {
|
|
49
|
-
const sessionsToCreate = [sessionData, sessionData];
|
|
50
|
-
const results = await SessionModel.batchCreate(sessionsToCreate as LobeAgentSession[]);
|
|
51
|
-
|
|
52
|
-
expect(results.ids).toHaveLength(sessionsToCreate.length);
|
|
53
|
-
// Verify that the sessions have been added to the database
|
|
54
|
-
for (const result of results.ids!) {
|
|
55
|
-
const sessionInDb = await SessionModel.findById(result);
|
|
56
|
-
expect(sessionInDb).toEqual(expect.objectContaining(sessionData));
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
it('should set group to default if it does not exist in SessionGroup', async () => {
|
|
61
|
-
const sessionDataWithInvalidGroup = {
|
|
62
|
-
...sessionData,
|
|
63
|
-
group: 'nonExistentGroup',
|
|
64
|
-
} as LobeAgentSession;
|
|
65
|
-
|
|
66
|
-
const results = await SessionModel.batchCreate([sessionDataWithInvalidGroup]);
|
|
67
|
-
|
|
68
|
-
// Verify that the group has been set to default
|
|
69
|
-
for (const result of results.ids!) {
|
|
70
|
-
const sessionInDb = await SessionModel.findById(result);
|
|
71
|
-
expect(sessionInDb.group).toEqual(SessionDefaultGroup.Default);
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
describe('query', () => {
|
|
77
|
-
it('should query sessions with pagination', async () => {
|
|
78
|
-
// Create multiple sessions to test the query method
|
|
79
|
-
await SessionModel.batchCreate([sessionData, sessionData] as LobeAgentSession[]);
|
|
80
|
-
|
|
81
|
-
const queriedSessions = await SessionModel.query({ pageSize: 1, current: 0 });
|
|
82
|
-
|
|
83
|
-
expect(queriedSessions).toHaveLength(1);
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
describe('querySessionsByGroupId', () => {
|
|
88
|
-
it('should query sessions by group', async () => {
|
|
89
|
-
// Create multiple sessions to test the queryByGroup method
|
|
90
|
-
const group: SessionGroupId = 'testGroup';
|
|
91
|
-
await SessionGroupModel.create('测试分组', 0, group);
|
|
92
|
-
|
|
93
|
-
await SessionModel.batchCreate([sessionData, sessionData] as LobeAgentSession[]);
|
|
94
|
-
|
|
95
|
-
const sessionsByGroup = await SessionModel.querySessionsByGroupId(group);
|
|
96
|
-
|
|
97
|
-
// Assuming all created sessions belong to the same group
|
|
98
|
-
expect(sessionsByGroup).toHaveLength(2);
|
|
99
|
-
expect(sessionsByGroup.every((i) => i.group === group)).toBeTruthy();
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
describe('update', () => {
|
|
104
|
-
it('should update a session', async () => {
|
|
105
|
-
const createdSession = await SessionModel.create('agent', sessionData);
|
|
106
|
-
const updateData = { group: 'newGroup' };
|
|
107
|
-
|
|
108
|
-
await SessionModel.update(createdSession.id, updateData);
|
|
109
|
-
const updatedSession = await SessionModel.findById(createdSession.id);
|
|
110
|
-
|
|
111
|
-
expect(updatedSession).toHaveProperty('group', 'newGroup');
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
it('should update pinned status of a session', async () => {
|
|
115
|
-
const createdSession = await SessionModel.create('agent', sessionData);
|
|
116
|
-
await SessionModel.update(createdSession.id, { pinned: 1 });
|
|
117
|
-
const updatedSession = await SessionModel.findById(createdSession.id);
|
|
118
|
-
expect(updatedSession).toHaveProperty('pinned', 1);
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
describe('updateConfig', () => {
|
|
123
|
-
it('should update config of a session', async () => {
|
|
124
|
-
const { id } = await SessionModel.create('agent', sessionData);
|
|
125
|
-
const dbSession = await SessionModel.findById(id);
|
|
126
|
-
|
|
127
|
-
const newConfig = { ...dbSession.config, systemRole: 'newValue' } as LobeAgentConfig;
|
|
128
|
-
await SessionModel.updateConfig(id, newConfig);
|
|
129
|
-
const updatedSession = await SessionModel.findById(id);
|
|
130
|
-
expect(updatedSession.config).toEqual(newConfig);
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
describe('clearTable', () => {
|
|
135
|
-
it('should clear all sessions', async () => {
|
|
136
|
-
await SessionModel.batchCreate([sessionData, sessionData] as LobeAgentSession[]);
|
|
137
|
-
await SessionModel.clearTable();
|
|
138
|
-
const sessionsInDb = await SessionModel.query();
|
|
139
|
-
expect(sessionsInDb).toHaveLength(0);
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
describe('isEmpty', () => {
|
|
144
|
-
it('should check if table is empty', async () => {
|
|
145
|
-
await SessionModel.clearTable();
|
|
146
|
-
const isEmpty = await SessionModel.isEmpty();
|
|
147
|
-
expect(isEmpty).toBeTruthy();
|
|
148
|
-
await SessionModel.create('agent', sessionData);
|
|
149
|
-
const isNotEmpty = await SessionModel.isEmpty();
|
|
150
|
-
expect(isNotEmpty).toBeFalsy();
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
describe('queryByKeyword', () => {
|
|
155
|
-
it('should query sessions by keyword', async () => {
|
|
156
|
-
const keyword = 'testKeyword';
|
|
157
|
-
const sessionWithKeyword = { ...sessionData, meta: { title: keyword } };
|
|
158
|
-
await SessionModel.create('agent', sessionWithKeyword);
|
|
159
|
-
const sessionsByKeyword = await SessionModel.queryByKeyword(keyword);
|
|
160
|
-
expect(sessionsByKeyword).toHaveLength(1);
|
|
161
|
-
expect(sessionsByKeyword[0].meta.title).toContain(keyword);
|
|
162
|
-
});
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
describe('getPinnedSessions', () => {
|
|
166
|
-
it('should get pinned sessions', async () => {
|
|
167
|
-
const pinnedSession = { ...sessionData, pinned: true };
|
|
168
|
-
const unpinnedSession = { ...sessionData, pinned: false };
|
|
169
|
-
await SessionModel.batchCreate([pinnedSession, unpinnedSession] as LobeAgentSession[]);
|
|
170
|
-
const pinnedSessions = await SessionModel.getPinnedSessions();
|
|
171
|
-
expect(pinnedSessions).toHaveLength(1);
|
|
172
|
-
expect(pinnedSessions[0].pinned).toBeTruthy();
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
describe('queryWithGroups', () => {
|
|
177
|
-
it('should query sessions with groups', async () => {
|
|
178
|
-
await SessionModel.create('agent', sessionData);
|
|
179
|
-
|
|
180
|
-
const sessionsWithGroups = await SessionModel.queryWithGroups();
|
|
181
|
-
expect(sessionsWithGroups.sessions).toHaveLength(1);
|
|
182
|
-
expect(sessionsWithGroups.sessions[0]).toEqual(expect.objectContaining(sessionData));
|
|
183
|
-
});
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
describe('queryByGroupIds', () => {
|
|
187
|
-
it('should query sessions by group ids', async () => {
|
|
188
|
-
const createdSession = await SessionModel.create('agent', sessionData);
|
|
189
|
-
const session = await SessionModel.findById(createdSession.id);
|
|
190
|
-
const sessionsByGroupIds = await SessionModel.queryByGroupIds([session.group]);
|
|
191
|
-
expect(sessionsByGroupIds[session.group]).toHaveLength(1);
|
|
192
|
-
expect(sessionsByGroupIds[session.group][0]).toEqual(expect.objectContaining(sessionData));
|
|
193
|
-
});
|
|
194
|
-
});
|
|
195
|
-
|
|
196
|
-
describe('delete', () => {
|
|
197
|
-
it('should delete a session', async () => {
|
|
198
|
-
const createdSession = await SessionModel.create('agent', sessionData);
|
|
199
|
-
await SessionModel.delete(createdSession.id);
|
|
200
|
-
const sessionInDb = await SessionModel.findById(createdSession.id);
|
|
201
|
-
expect(sessionInDb).toBeUndefined();
|
|
202
|
-
});
|
|
203
|
-
|
|
204
|
-
// 删除一个 session 时,也需要同步删除具有 sessionId 的 topic 和 message
|
|
205
|
-
it('should delete a session and its associated data', async () => {
|
|
206
|
-
// create session , topic and message test data
|
|
207
|
-
const { id: sessionId } = await SessionModel.create('agent', sessionData);
|
|
208
|
-
|
|
209
|
-
const topicData = {
|
|
210
|
-
title: 'Test Topic',
|
|
211
|
-
sessionId: sessionId,
|
|
212
|
-
favorite: false,
|
|
213
|
-
};
|
|
214
|
-
const createdTopic = await TopicModel.create(topicData);
|
|
215
|
-
|
|
216
|
-
const messageData: CreateMessageParams = {
|
|
217
|
-
content: 'Test Message',
|
|
218
|
-
sessionId: sessionId,
|
|
219
|
-
topicId: createdTopic.id,
|
|
220
|
-
role: 'user',
|
|
221
|
-
};
|
|
222
|
-
await MessageModel.create(messageData);
|
|
223
|
-
|
|
224
|
-
await SessionModel.delete(sessionId);
|
|
225
|
-
|
|
226
|
-
// Verify the session and its related data (topics, messages) are deleted
|
|
227
|
-
const sessionInDb = await SessionModel.findById(sessionId);
|
|
228
|
-
expect(sessionInDb).toBeUndefined();
|
|
229
|
-
|
|
230
|
-
// You need to verify that topics and messages related to the session are also deleted
|
|
231
|
-
const topicsInDb = await TopicModel.findBySessionId(sessionId);
|
|
232
|
-
expect(topicsInDb).toHaveLength(0);
|
|
233
|
-
|
|
234
|
-
// Verify all associated messages are deleted
|
|
235
|
-
const messagesInDb = await MessageModel.query({ sessionId });
|
|
236
|
-
expect(messagesInDb).toHaveLength(0);
|
|
237
|
-
});
|
|
238
|
-
});
|
|
239
|
-
|
|
240
|
-
describe('duplicate', () => {
|
|
241
|
-
it('should duplicate a session', async () => {
|
|
242
|
-
const createdSession = await SessionModel.create('agent', sessionData);
|
|
243
|
-
const duplicatedSession = await SessionModel.duplicate(createdSession.id);
|
|
244
|
-
const sessionsInDb = await SessionModel.query();
|
|
245
|
-
expect(sessionsInDb).toHaveLength(2);
|
|
246
|
-
|
|
247
|
-
if (!duplicatedSession) return;
|
|
248
|
-
const session = await SessionModel.findById(duplicatedSession.id);
|
|
249
|
-
|
|
250
|
-
expect(session).toEqual(expect.objectContaining(sessionData));
|
|
251
|
-
});
|
|
252
|
-
});
|
|
253
|
-
});
|
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
2
|
-
|
|
3
|
-
import { SessionModel } from '@/database/_deprecated/models/session';
|
|
4
|
-
import { SessionGroups } from '@/types/session';
|
|
5
|
-
|
|
6
|
-
import { DB_SessionGroup } from '../../schemas/sessionGroup';
|
|
7
|
-
import { SessionGroupModel } from '../sessionGroup';
|
|
8
|
-
|
|
9
|
-
const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
10
|
-
|
|
11
|
-
describe('SessionGroupModel', () => {
|
|
12
|
-
let sessionGroupData: DB_SessionGroup;
|
|
13
|
-
|
|
14
|
-
beforeEach(() => {
|
|
15
|
-
// 设置正确结构的会话组数据
|
|
16
|
-
sessionGroupData = {
|
|
17
|
-
name: 'test-group',
|
|
18
|
-
sort: 1,
|
|
19
|
-
};
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
afterEach(async () => {
|
|
23
|
-
// 每次测试后清理数据库
|
|
24
|
-
await SessionGroupModel.clear();
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
describe('create', () => {
|
|
28
|
-
it('should create a session group record', async () => {
|
|
29
|
-
const createdGroup = await SessionGroupModel.create(
|
|
30
|
-
sessionGroupData.name,
|
|
31
|
-
sessionGroupData.sort,
|
|
32
|
-
);
|
|
33
|
-
const item = await SessionGroupModel.findById(createdGroup.id);
|
|
34
|
-
expect(item.name).toEqual(sessionGroupData.name);
|
|
35
|
-
expect(item.sort).toEqual(sessionGroupData.sort);
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
describe('batchCreate', () => {
|
|
40
|
-
it('should batch create session group records', async () => {
|
|
41
|
-
const groups = [
|
|
42
|
-
sessionGroupData,
|
|
43
|
-
{ ...sessionGroupData, name: 'another-group' },
|
|
44
|
-
] as SessionGroups;
|
|
45
|
-
await SessionGroupModel.batchCreate(groups);
|
|
46
|
-
const fetchedGroups = await SessionGroupModel.query();
|
|
47
|
-
expect(fetchedGroups).toHaveLength(2);
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
describe('update', () => {
|
|
52
|
-
it('should update a session group', async () => {
|
|
53
|
-
const createdGroup = await SessionGroupModel.create(
|
|
54
|
-
sessionGroupData.name,
|
|
55
|
-
sessionGroupData.sort,
|
|
56
|
-
);
|
|
57
|
-
const updatedGroupData: DB_SessionGroup = { ...sessionGroupData, name: 'updated-group' };
|
|
58
|
-
await SessionGroupModel.update(createdGroup.id, updatedGroupData);
|
|
59
|
-
const fetchedGroups = await SessionGroupModel.query();
|
|
60
|
-
expect(fetchedGroups[0].name).toEqual(updatedGroupData.name);
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
describe('delete', () => {
|
|
65
|
-
it('should delete a session group', async () => {
|
|
66
|
-
const createdGroup = await SessionGroupModel.create(
|
|
67
|
-
sessionGroupData.name,
|
|
68
|
-
sessionGroupData.sort,
|
|
69
|
-
);
|
|
70
|
-
await SessionGroupModel.delete(createdGroup.id);
|
|
71
|
-
const fetchedGroups = await SessionGroupModel.query();
|
|
72
|
-
expect(fetchedGroups).toHaveLength(0);
|
|
73
|
-
});
|
|
74
|
-
it('should delete a session group and update associated sessions', async () => {
|
|
75
|
-
// Create a new session group
|
|
76
|
-
const createdGroup = await SessionGroupModel.create(
|
|
77
|
-
sessionGroupData.name,
|
|
78
|
-
sessionGroupData.sort,
|
|
79
|
-
);
|
|
80
|
-
|
|
81
|
-
// Delete the created session group
|
|
82
|
-
await SessionGroupModel.delete(createdGroup.id);
|
|
83
|
-
|
|
84
|
-
// Fetch all session groups to confirm deletion
|
|
85
|
-
const fetchedGroups = await SessionGroupModel.query();
|
|
86
|
-
expect(fetchedGroups).toHaveLength(0);
|
|
87
|
-
|
|
88
|
-
// Fetch all sessions to confirm update
|
|
89
|
-
const fetchedSessions = await SessionModel.query();
|
|
90
|
-
fetchedSessions.forEach((session) => {
|
|
91
|
-
expect(session.group).not.toEqual(createdGroup.id);
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
it('should update associated sessions to default group when a session group is deleted', async () => {
|
|
95
|
-
const createdGroup = await SessionGroupModel.create(
|
|
96
|
-
sessionGroupData.name,
|
|
97
|
-
sessionGroupData.sort,
|
|
98
|
-
);
|
|
99
|
-
const sessionId = await SessionModel.create('agent', {}, createdGroup.id);
|
|
100
|
-
await SessionGroupModel.delete(createdGroup.id);
|
|
101
|
-
const updatedSession = await SessionModel.findById(sessionId.id);
|
|
102
|
-
expect(updatedSession.group).toEqual('default');
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
describe('query', () => {
|
|
107
|
-
it('should fetch and return the session group list', async () => {
|
|
108
|
-
await SessionGroupModel.create(sessionGroupData.name, sessionGroupData.sort);
|
|
109
|
-
const fetchedGroups = await SessionGroupModel.query();
|
|
110
|
-
expect(fetchedGroups).toHaveLength(1);
|
|
111
|
-
expect(fetchedGroups[0].name).toEqual(sessionGroupData.name);
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
it('should return an empty array when there are no session groups', async () => {
|
|
115
|
-
const fetchedGroups = await SessionGroupModel.query();
|
|
116
|
-
expect(fetchedGroups).toEqual([]);
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
it('should return session groups sorted by sort field when it exists', async () => {
|
|
120
|
-
const group1 = await SessionGroupModel.create('group1', 2);
|
|
121
|
-
const group2 = await SessionGroupModel.create('group2', 1);
|
|
122
|
-
const fetchedGroups = await SessionGroupModel.query();
|
|
123
|
-
expect(fetchedGroups[0].id).toEqual(group2.id);
|
|
124
|
-
expect(fetchedGroups[1].id).toEqual(group1.id);
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
it('should return session groups sorted by createdAt when sort field does not exist', async () => {
|
|
128
|
-
const group1 = await SessionGroupModel.create('group1');
|
|
129
|
-
await new Promise((resolve) => setTimeout(() => resolve(undefined), 300));
|
|
130
|
-
const group2 = await SessionGroupModel.create('group2');
|
|
131
|
-
|
|
132
|
-
const fetchedGroups = await SessionGroupModel.query();
|
|
133
|
-
|
|
134
|
-
expect(fetchedGroups[0].id).toEqual(group2.id);
|
|
135
|
-
expect(fetchedGroups[1].id).toEqual(group1.id);
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
it('should return session groups sorted by sort field first and then by createdAt', async () => {
|
|
139
|
-
const group0 = await SessionGroupModel.create('group0');
|
|
140
|
-
await sleep(10);
|
|
141
|
-
const group1 = await SessionGroupModel.create('group1', 1);
|
|
142
|
-
await sleep(10);
|
|
143
|
-
const group2 = await SessionGroupModel.create('group2');
|
|
144
|
-
await sleep(10);
|
|
145
|
-
const group3 = await SessionGroupModel.create('group3', 2);
|
|
146
|
-
await sleep(10);
|
|
147
|
-
|
|
148
|
-
const fetchedGroups = await SessionGroupModel.query();
|
|
149
|
-
expect(fetchedGroups[0].id).toEqual(group1.id);
|
|
150
|
-
expect(fetchedGroups[1].id).toEqual(group3.id);
|
|
151
|
-
expect(fetchedGroups[2].id).toEqual(group2.id);
|
|
152
|
-
expect(fetchedGroups[3].id).toEqual(group0.id);
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
it('should return session groups sorted by sort ', async () => {
|
|
156
|
-
const group1 = await SessionGroupModel.create('group1', 1);
|
|
157
|
-
const group2 = await SessionGroupModel.create('group2');
|
|
158
|
-
const group3 = await SessionGroupModel.create('group3', 2);
|
|
159
|
-
const fetchedGroups = await SessionGroupModel.query();
|
|
160
|
-
expect(fetchedGroups[0].id).toEqual(group1.id);
|
|
161
|
-
expect(fetchedGroups[1].id).toEqual(group3.id);
|
|
162
|
-
expect(fetchedGroups[2].id).toEqual(group2.id);
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
it('should return session groups sorted by createdAt when sort fields are equal', async () => {
|
|
166
|
-
const group1 = await SessionGroupModel.create('group1', 1);
|
|
167
|
-
await new Promise((resolve) => setTimeout(() => resolve(undefined), 300));
|
|
168
|
-
const group2 = await SessionGroupModel.create('group2', 1);
|
|
169
|
-
const fetchedGroups = await SessionGroupModel.query();
|
|
170
|
-
expect(fetchedGroups[0].id).toEqual(group2.id);
|
|
171
|
-
expect(fetchedGroups[1].id).toEqual(group1.id);
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
it('should sort session groups correctly when only b has a sort value', async () => {
|
|
175
|
-
const groupA = await SessionGroupModel.create('groupA'); // sort undefined
|
|
176
|
-
const groupB = await SessionGroupModel.create('groupB', 1); // sort defined
|
|
177
|
-
const fetchedGroups = await SessionGroupModel.query();
|
|
178
|
-
expect(fetchedGroups[0].id).toEqual(groupB.id);
|
|
179
|
-
expect(fetchedGroups[1].id).toEqual(groupA.id);
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
describe('updateOrder', () => {
|
|
184
|
-
it('should update the order of session groups', async () => {
|
|
185
|
-
const group1 = await SessionGroupModel.create(sessionGroupData.name, sessionGroupData.sort);
|
|
186
|
-
const group2 = await SessionGroupModel.create('another-group', 2);
|
|
187
|
-
await SessionGroupModel.updateOrder([
|
|
188
|
-
{ id: group1.id, sort: 2 },
|
|
189
|
-
{ id: group2.id, sort: 1 },
|
|
190
|
-
]);
|
|
191
|
-
const fetchedGroups = await SessionGroupModel.query();
|
|
192
|
-
expect(fetchedGroups[0].id).toEqual(group2.id);
|
|
193
|
-
expect(fetchedGroups[1].id).toEqual(group1.id);
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
describe('findById', () => {
|
|
198
|
-
it('should find a session group by id', async () => {
|
|
199
|
-
const createdGroup = await SessionGroupModel.create(
|
|
200
|
-
sessionGroupData.name,
|
|
201
|
-
sessionGroupData.sort,
|
|
202
|
-
);
|
|
203
|
-
const fetchedGroup = await SessionGroupModel.findById(createdGroup.id);
|
|
204
|
-
expect(fetchedGroup).toMatchObject({ ...createdGroup, ...sessionGroupData });
|
|
205
|
-
});
|
|
206
|
-
});
|
|
207
|
-
|
|
208
|
-
describe('clear', () => {
|
|
209
|
-
it('should clear all session groups', async () => {
|
|
210
|
-
await SessionGroupModel.create(sessionGroupData.name, sessionGroupData.sort);
|
|
211
|
-
const first = await SessionGroupModel.query();
|
|
212
|
-
expect(first).toHaveLength(1);
|
|
213
|
-
|
|
214
|
-
await SessionGroupModel.clear();
|
|
215
|
-
|
|
216
|
-
const fetchedGroups = await SessionGroupModel.query();
|
|
217
|
-
expect(fetchedGroups).toHaveLength(0);
|
|
218
|
-
});
|
|
219
|
-
});
|
|
220
|
-
});
|