From fcdaf9d81477527e9ae9d93bd25d0756d49b558e Mon Sep 17 00:00:00 2001 From: Innei Date: Thu, 5 Feb 2026 21:40:43 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20chore:=20update=20eslint=20v2=20?= =?UTF-8?q?configuration=20and=20suppressions=20(#12133)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * v2 init * chore: update eslint suppressions and package dependencies - Removed several eslint suppressions related to array sorting and reversing from eslint-suppressions.json to clean up the configuration. - Updated @lobehub/lint package version from 2.0.0-beta.6 to 2.0.0-beta.7 in package.json for improvements and bug fixes. - Made minor formatting adjustments in vitest.config.mts and various SKILL.md files for better readability and consistency. Signed-off-by: Innei * fix: clean up import statements and formatting - Removed unnecessary whitespace in replaceComponentImports.ts for improved readability. - Standardized import statements in contextEngineering.ts and createAgentExecutors.ts by adding missing spaces for consistency. Signed-off-by: Innei * chore: update eslint suppressions and clean up code formatting * 🐛 fix: use vi.hoisted for mock variable initialization Fix TDZ error in persona service test by using vi.hoisted() to ensure mock variables are available when vi.mock factory runs. --------- Signed-off-by: Innei --- .agents/skills/add-provider-doc/SKILL.md | 2 + .agents/skills/desktop/SKILL.md | 15 +- .../references/feature-implementation.md | 12 +- .../skills/desktop/references/menu-config.md | 12 +- .../desktop/references/window-management.md | 8 +- .agents/skills/drizzle/SKILL.md | 25 +- .agents/skills/hotkey/SKILL.md | 2 +- .agents/skills/i18n/SKILL.md | 8 +- .agents/skills/microcopy/SKILL.md | 38 +- .agents/skills/modal/SKILL.md | 20 +- .agents/skills/project-overview/SKILL.md | 73 +- .agents/skills/react/SKILL.md | 12 +- .agents/skills/recent-data/SKILL.md | 8 +- .agents/skills/testing/SKILL.md | 14 +- .../testing/references/agent-runtime-e2e.md | 39 +- .../testing/references/db-model-test.md | 42 +- .../references/zustand-store-action-test.md | 14 +- .../vercel-react-best-practices/AGENTS.md | 1051 +++++++------ .../vercel-react-best-practices/SKILL.md | 24 +- .../rules/advanced-event-handler-refs.md | 30 +- .../rules/advanced-use-latest.md | 26 +- .../rules/async-api-routes.md | 21 +- .../rules/async-defer-await.md | 52 +- .../rules/async-dependencies.md | 25 +- .../rules/async-parallel.md | 12 +- .../rules/async-suspense-boundaries.md | 26 +- .../rules/bundle-barrel-imports.md | 22 +- .../rules/bundle-conditional.md | 20 +- .../rules/bundle-defer-third-party.md | 15 +- .../rules/bundle-dynamic-imports.md | 17 +- .../rules/bundle-preload.md | 20 +- .../rules/client-event-listeners.md | 46 +- .../rules/client-localstorage-schema.md | 33 +- .../rules/client-passive-event-listeners.md | 40 +- .../rules/client-swr-dedup.md | 24 +- .../rules/js-batch-dom-css.md | 26 +- .../rules/js-cache-function-results.md | 16 +- .../rules/js-cache-property-access.md | 8 +- .../rules/js-cache-storage.md | 28 +- .../rules/js-combine-iterations.md | 18 +- .../rules/js-early-exit.md | 24 +- .../rules/js-hoist-regexp.md | 6 +- .../rules/js-index-maps.md | 14 +- .../rules/js-length-check-first.md | 13 +- .../rules/js-min-max-loop.md | 52 +- .../rules/js-tosorted-immutable.md | 2 +- .../rules/rendering-activity.md | 4 +- .../rules/rendering-animate-svg-wrapper.md | 17 +- .../rules/rendering-conditional-render.md | 12 +- .../rules/rendering-content-visibility.md | 6 +- .../rules/rendering-hoist-jsx.md | 18 +- .../rules/rendering-hydration-no-flicker.md | 34 +- .../rules/rerender-defer-reads.md | 20 +- .../rules/rerender-dependencies.md | 18 +- .../rules/rerender-derived-state.md | 10 +- .../rules/rerender-functional-setstate.md | 41 +- .../rules/rerender-lazy-state-init.md | 34 +- .../rules/rerender-memo.md | 20 +- .../rules/rerender-transitions.md | 24 +- .../rules/server-after-nonblocking.md | 44 +- .../rules/server-cache-lru.md | 18 +- .../rules/server-cache-react.md | 34 +- .../rules/server-parallel-fetching.md | 30 +- .../rules/server-serialization.md | 16 +- .../zustand/references/action-patterns.md | 4 +- .../zustand/references/slice-organization.md | 10 +- .claude/prompts/security-rules.md | 2 +- .claude/prompts/team-assignment.md | 12 +- .commitlintrc.cjs | 1 - .conductor/setup.sh | 8 +- .devcontainer/devcontainer.json | 2 +- .eslintignore | 48 - .gitattributes | 2 +- .github/actions/setup-node-bun/action.yml | 2 - .github/actions/setup-node-pnpm/action.yml | 2 - .github/workflows/claude-auto-testing.yml | 2 +- .github/workflows/claude-dedupe-issues.yml | 2 +- .github/workflows/claude-issue-triage.yml | 2 +- .../workflows/claude-migration-support.yml | 2 +- .../workflows/claude-translate-comments.yml | 2 +- .github/workflows/claude-translator.yml | 2 +- .github/workflows/e2e.yml | 9 +- .../workflows/issue-auto-close-duplicates.yml | 2 +- .github/workflows/lock-closed-issues.yml | 4 +- .github/workflows/release-docker.yml | 1 - .github/workflows/test.yml | 7 +- .prettierrc.cjs | 1 - .remarkrc.cjs | 1 - .remarkrc.mdx.js | 6 - .remarkrc.mdx.mjs | 6 + .remarkrc.mjs | 3 + .stylelintrc.cjs | 9 - .vscode/extensions.json | 24 +- AGENTS.md | 26 +- CHANGELOG.md | 4 +- README.md | 10 +- README.zh-CN.md | 58 +- apps/desktop/.prettierrc.cjs | 1 - apps/desktop/.remarkrc.cjs | 1 - apps/desktop/.remarkrc.mjs | 3 + apps/desktop/.stylelintrc.cjs | 9 - apps/desktop/Development.md | 6 +- apps/desktop/prettier.config.mjs | 3 + apps/desktop/resources/error.html | 26 +- apps/desktop/resources/locales/ar/common.json | 2 +- .../resources/locales/bg-BG/common.json | 2 +- .../resources/locales/de-DE/common.json | 2 +- apps/desktop/resources/locales/en/common.json | 2 +- apps/desktop/resources/locales/en/dialog.json | 2 +- .../resources/locales/es-ES/common.json | 2 +- .../resources/locales/fa-IR/common.json | 2 +- .../resources/locales/fr-FR/common.json | 2 +- .../resources/locales/it-IT/common.json | 2 +- .../resources/locales/ja-JP/common.json | 2 +- .../resources/locales/ko-KR/common.json | 2 +- .../resources/locales/nl-NL/common.json | 2 +- .../resources/locales/pl-PL/common.json | 2 +- .../resources/locales/pt-BR/common.json | 2 +- .../resources/locales/ru-RU/common.json | 2 +- .../resources/locales/tr-TR/common.json | 2 +- .../resources/locales/vi-VN/common.json | 2 +- .../resources/locales/zh-CN/common.json | 2 +- .../resources/locales/zh-TW/common.json | 2 +- .../scripts/update-test/generate-manifest.sh | 236 +-- apps/desktop/scripts/update-test/run-test.sh | 58 +- apps/desktop/scripts/update-test/setup.sh | 4 +- .../scripts/update-test/start-server.sh | 54 +- .../scripts/update-test/stop-server.sh | 26 +- .../desktop/src/main/controllers/SystemCtr.ts | 6 +- apps/desktop/src/main/core/browser/Browser.ts | 22 +- apps/desktop/src/main/libs/mcp/types.ts | 3 - .../src/main/modules/fileSearch/base.ts | 8 +- apps/desktop/src/main/package.json | 6 +- apps/desktop/stylelint.config.mjs | 9 + codecov.yml | 13 +- commitlint.config.mjs | 3 + docker-compose/deploy/docker-compose.yml | 18 +- docker-compose/deploy/searxng-settings.yml | 77 +- .../production/grafana/docker-compose.yml | 3 +- .../otel-collector/collector-config.yaml | 2 +- .../grafana/prometheus/prometheus.yml | 8 +- .../production/grafana/searxng-settings.yml | 77 +- eslint-suppressions.json | 1334 +++++++++++++++++ eslint.config.mjs | 98 ++ locales/en-US/components.json | 2 +- locales/en-US/file.json | 2 +- locales/en-US/knowledgeBase.json | 4 +- locales/zh-CN/components.json | 2 +- locales/zh-CN/file.json | 2 +- locales/zh-CN/knowledgeBase.json | 4 +- package.json | 14 +- .../agent-runtime/examples/tools-calling.ts | 6 +- .../src/agents/GeneralChatAgent.ts | 4 +- .../agents/__tests__/GeneralChatAgent.test.ts | 4 +- .../agent-runtime/src/core/UsageCounter.ts | 10 +- .../__tests__/InterventionChecker.test.ts | 2 +- .../src/core/__tests__/UsageCounter.test.ts | 4 +- .../src/core/__tests__/runtime.test.ts | 90 +- packages/agent-runtime/src/core/runtime.ts | 4 +- .../GroupOrchestrationSupervisor.ts | 2 +- .../GroupOrchestrationSupervisor.test.ts | 4 +- .../src/groupOrchestration/types.ts | 2 +- packages/agent-runtime/src/types/event.ts | 42 +- .../agent-runtime/src/types/generalAgent.ts | 2 +- .../agent-runtime/src/types/instruction.ts | 14 +- packages/agent-runtime/src/types/runtime.ts | 4 +- packages/agent-runtime/src/types/state.ts | 128 +- packages/agent-runtime/src/types/usage.ts | 2 +- .../src/utils/tokenCounter.test.ts | 2 +- packages/builtin-agents/src/types.ts | 2 +- .../src/ExecutionRuntime/index.ts | 8 +- .../client/Inspector/UpdatePrompt/index.tsx | 4 +- .../src/client/Inspector/index.ts | 2 +- .../src/client/Intervention/InstallPlugin.tsx | 22 +- .../src/client/Render/GetAvailableModels.tsx | 6 +- .../src/client/Render/InstallPlugin.tsx | 8 +- .../src/client/Render/SearchMarketTools.tsx | 18 +- .../src/client/Render/UpdateConfig.tsx | 4 +- .../src/client/Render/UpdatePrompt.tsx | 6 +- .../Render/components/ConfigDiffView.tsx | 4 +- .../src/executor.ts | 11 +- .../src/ExecutionRuntime/index.ts | 34 +- .../client/Inspector/EditLocalFile/index.tsx | 11 +- .../client/Inspector/ExecuteCode/index.tsx | 4 +- .../client/Inspector/GlobLocalFiles/index.tsx | 4 +- .../client/Inspector/GrepContent/index.tsx | 4 +- .../client/Inspector/ListLocalFiles/index.tsx | 8 +- .../client/Inspector/ReadLocalFile/index.tsx | 4 +- .../src/client/Inspector/RunCommand/index.tsx | 4 +- .../Inspector/SearchLocalFiles/index.tsx | 4 +- .../client/Inspector/WriteLocalFile/index.tsx | 6 +- .../Intervention/EditLocalFile/index.tsx | 6 +- .../client/Intervention/ExecuteCode/index.tsx | 4 +- .../Intervention/MoveLocalFiles/index.tsx | 8 +- .../client/Intervention/RunCommand/index.tsx | 6 +- .../client/Intervention/WriteFile/index.tsx | 4 +- .../src/client/Render/EditLocalFile/index.tsx | 16 +- .../src/client/Render/ExecuteCode/index.tsx | 8 +- .../src/client/Render/ExportFile/index.tsx | 10 +- .../src/client/Render/ListFiles/index.tsx | 18 +- .../client/Render/MoveLocalFiles/index.tsx | 14 +- .../src/client/Render/ReadLocalFile/index.tsx | 14 +- .../src/client/Render/RunCommand/index.tsx | 8 +- .../src/client/Render/SearchFiles/index.tsx | 16 +- .../src/client/Render/WriteFile/index.tsx | 8 +- .../client/Streaming/ExecuteCode/index.tsx | 4 +- .../src/executor/index.ts | 23 +- .../src/types/service.ts | 4 +- .../src/ExecutionRuntime/index.ts | 3 +- .../Inspector/BatchCreateAgents/index.tsx | 2 +- .../client/Inspector/CreateAgent/index.tsx | 2 +- .../client/Inspector/GetAgentInfo/index.tsx | 2 +- .../client/Inspector/InviteAgent/index.tsx | 2 +- .../client/Inspector/RemoveAgent/index.tsx | 2 +- .../Inspector/UpdateAgentPrompt/index.tsx | 8 +- .../Inspector/UpdateGroupPrompt/index.tsx | 6 +- .../src/client/Inspector/index.ts | 2 +- .../src/client/Render/BatchCreateAgents.tsx | 6 +- .../Streaming/BatchCreateAgents/index.tsx | 4 +- .../src/executor.ts | 16 +- .../src/client/Inspector/Broadcast/index.tsx | 2 +- .../Inspector/ExecuteAgentTask/index.tsx | 4 +- .../Inspector/ExecuteAgentTasks/index.tsx | 2 +- .../src/client/Inspector/Speak/index.tsx | 2 +- .../src/client/Inspector/index.ts | 2 +- .../src/client/Intervention/ExecuteTask.tsx | 15 +- .../src/client/Intervention/ExecuteTasks.tsx | 21 +- .../src/client/Intervention/index.ts | 2 +- .../src/client/Render/ExecuteTask/index.tsx | 8 +- .../src/client/Render/ExecuteTasks/index.tsx | 10 +- .../client/Streaming/ExecuteTask/index.tsx | 2 +- .../client/Streaming/ExecuteTasks/index.tsx | 2 +- .../src/executor.ts | 14 +- .../client/Inspector/CreateTodos/index.tsx | 2 +- .../src/client/Inspector/UpdatePlan/index.tsx | 4 +- .../client/Inspector/UpdateTodos/index.tsx | 11 +- .../src/client/Inspector/index.ts | 2 +- .../src/client/Intervention/AddTodo.tsx | 4 +- .../src/client/Intervention/ClearTodos.tsx | 9 +- .../src/client/Intervention/CreatePlan.tsx | 18 +- .../src/client/Intervention/index.ts | 2 +- .../src/client/Render/CreatePlan/PlanCard.tsx | 4 +- .../src/client/Render/CreatePlan/index.tsx | 2 +- .../src/client/Render/TodoList/index.tsx | 6 +- .../src/client/Streaming/CreatePlan/index.tsx | 2 +- .../SortableTodoList/AddItemRow.tsx | 15 +- .../SortableTodoList/TodoItemRow.tsx | 20 +- .../components/SortableTodoList/TodoList.tsx | 5 +- .../components/SortableTodoList/index.tsx | 6 +- .../SortableTodoList/store/actions.ts | 3 +- .../SortableTodoList/store/index.ts | 3 +- .../SortableTodoList/store/types.ts | 2 +- .../builtin-tool-gtd/src/executor/helper.ts | 4 +- .../builtin-tool-gtd/src/executor/index.ts | 18 +- .../src/ExecutionRuntime/index.ts | 4 +- .../client/Inspector/ReadKnowledge/index.tsx | 4 +- .../Inspector/SearchKnowledgeBase/index.tsx | 4 +- .../client/Render/ReadKnowledge/FileCard.tsx | 12 +- .../src/client/Render/ReadKnowledge/index.tsx | 6 +- .../Render/SearchKnowledgeBase/Item/index.tsx | 6 +- .../Render/SearchKnowledgeBase/index.tsx | 6 +- .../src/executor/index.ts | 11 +- .../src/manifest.ts | 2 +- .../builtin-tool-knowledge-base/src/types.ts | 2 +- .../client/Inspector/EditLocalFile/index.tsx | 13 +- .../client/Inspector/GlobLocalFiles/index.tsx | 6 +- .../client/Inspector/GrepContent/index.tsx | 6 +- .../client/Inspector/ListLocalFiles/index.tsx | 10 +- .../client/Inspector/ReadLocalFile/index.tsx | 6 +- .../Inspector/RenameLocalFile/index.tsx | 6 +- .../src/client/Inspector/RunCommand/index.tsx | 4 +- .../Inspector/SearchLocalFiles/index.tsx | 6 +- .../client/Inspector/WriteLocalFile/index.tsx | 6 +- .../Intervention/EditLocalFile/index.tsx | 4 +- .../MoveLocalFiles/MoveFileItem.tsx | 2 +- .../Intervention/MoveLocalFiles/index.tsx | 4 +- .../client/Intervention/RunCommand/index.tsx | 6 +- .../client/Intervention/WriteFile/index.tsx | 4 +- .../src/client/Placeholder/ListFiles.tsx | 4 +- .../src/client/Placeholder/SearchFiles.tsx | 8 +- .../src/client/Render/EditLocalFile/index.tsx | 8 +- .../src/client/Render/ListFiles/Result.tsx | 4 +- .../src/client/Render/ListFiles/index.tsx | 6 +- .../Render/MoveLocalFiles/MoveFileItem.tsx | 2 +- .../client/Render/MoveLocalFiles/index.tsx | 4 +- .../Render/ReadLocalFile/ReadFileSkeleton.tsx | 4 +- .../Render/ReadLocalFile/ReadFileView.tsx | 22 +- .../src/client/Render/ReadLocalFile/index.tsx | 4 +- .../src/client/Render/RunCommand/index.tsx | 8 +- .../src/client/Render/SearchFiles/Result.tsx | 4 +- .../SearchFiles/SearchQuery/SearchView.tsx | 6 +- .../Render/SearchFiles/SearchQuery/index.tsx | 2 +- .../src/client/Render/SearchFiles/index.tsx | 4 +- .../src/client/Render/WriteFile/index.tsx | 8 +- .../src/client/Streaming/RunCommand/index.tsx | 4 +- .../src/client/Streaming/WriteFile/index.tsx | 6 +- .../src/client/components/FileItem.tsx | 20 +- .../src/executor/index.ts | 18 +- .../builtin-tool-local-system/src/manifest.ts | 2 +- .../builtin-tool-local-system/src/types.ts | 2 +- .../preferences/tool-call/basic/prompt.ts | 3 +- .../scripts/generate-tool-call.ts | 5 +- .../src/client/Inspector/index.ts | 2 +- .../client/Render/SearchUserMemory/index.tsx | 2 +- .../Streaming/AddExperienceMemory/index.tsx | 2 +- .../Streaming/AddPreferenceMemory/index.tsx | 2 +- .../src/client/Streaming/index.ts | 2 +- .../components/ExperienceMemoryCard.tsx | 10 +- .../components/PreferenceMemoryCard.tsx | 14 +- .../builtin-tool-memory/src/executor/index.ts | 3 +- packages/builtin-tool-memory/src/manifest.ts | 2 +- .../src/ExecutionRuntime/index.ts | 4 +- .../src/client/Inspector/index.ts | 2 +- .../src/client/Intervention/index.ts | 2 +- .../src/client/Placeholder/CreateDocument.tsx | 2 +- .../src/client/Placeholder/index.ts | 2 +- .../Render/CreateDocument/DocumentCard.tsx | 10 +- .../client/Render/CreateDocument/index.tsx | 4 +- .../client/Streaming/CreateDocument/index.tsx | 2 +- .../src/client/Streaming/index.ts | 2 +- .../builtin-tool-notebook/src/manifest.ts | 2 +- .../src/client/Inspector/InitPage/index.tsx | 8 +- .../client/Inspector/ModifyNodes/index.tsx | 9 +- .../client/Inspector/ReplaceText/index.tsx | 2 +- .../src/client/Inspector/index.ts | 2 +- .../src/client/Placeholder/index.ts | 2 +- .../src/client/Streaming/index.ts | 2 +- .../src/executor/index.ts | 5 +- packages/builtin-tool-page-agent/src/index.ts | 23 +- .../builtin-tool-page-agent/src/manifest.ts | 2 +- .../src/ExecutionRuntime/index.ts | 9 +- .../Inspector/CrawlMultiPages/index.tsx | 2 +- .../src/client/Inspector/Search/index.tsx | 6 +- .../client/Placeholder/CrawlMultiPages.tsx | 2 +- .../client/Placeholder/CrawlSinglePage.tsx | 2 +- .../src/client/Placeholder/Search.tsx | 6 +- .../src/client/Portal/PageContent/index.tsx | 28 +- .../src/client/Portal/PageContents/index.tsx | 2 +- .../src/client/Portal/Search/Footer.tsx | 4 +- .../ResultList/SearchItem/TitleExtra.tsx | 2 +- .../Search/ResultList/SearchItem/Video.tsx | 22 +- .../Search/ResultList/SearchItem/index.tsx | 6 +- .../client/Portal/Search/ResultList/index.tsx | 2 +- .../src/client/Portal/Search/index.tsx | 2 +- .../src/client/Portal/index.tsx | 2 +- .../src/client/Render/CrawlMultiPages.tsx | 6 +- .../src/client/Render/CrawlSinglePage.tsx | 6 +- .../src/client/Render/PageContent/Loading.tsx | 2 +- .../src/client/Render/PageContent/Result.tsx | 18 +- .../src/client/Render/PageContent/index.tsx | 8 +- .../client/Render/Search/ConfigForm/Form.tsx | 18 +- .../client/Render/Search/ConfigForm/index.tsx | 4 +- .../client/Render/Search/ConfigForm/style.tsx | 6 +- .../Render/Search/SearchQuery/SearchView.tsx | 8 +- .../Render/Search/SearchQuery/index.tsx | 8 +- .../Search/SearchResult/SearchResultItem.tsx | 9 +- .../Render/Search/SearchResult/ShowMore.tsx | 9 +- .../Render/Search/SearchResult/index.tsx | 10 +- .../src/client/Render/Search/index.tsx | 10 +- .../src/client/components/EngineAvatar.tsx | 4 +- .../src/client/components/SearchBar.tsx | 77 +- .../builtin-tool-web-browsing/src/manifest.ts | 2 +- packages/business/config/src/llm.ts | 2 +- .../src/router-runtime-options.ts | 2 +- packages/config/src/index.ts | 2 +- packages/const/src/desktop.ts | 2 +- packages/const/src/discover.ts | 2 +- packages/const/src/hotkeys.ts | 5 +- packages/const/src/klavis.ts | 3 +- packages/const/src/lobehubSkill.ts | 3 +- packages/const/src/meta.ts | 2 +- packages/const/src/session.ts | 3 +- packages/const/src/settings/agent.ts | 2 +- packages/const/src/settings/common.ts | 2 +- packages/const/src/settings/group.ts | 2 +- packages/const/src/settings/hotkey.ts | 2 +- packages/const/src/settings/image.ts | 2 +- packages/const/src/settings/knowledge.ts | 2 +- packages/const/src/settings/memory.ts | 2 +- packages/const/src/settings/systemAgent.ts | 2 +- packages/const/src/settings/tts.ts | 2 +- packages/const/src/trace.ts | 2 +- packages/const/src/user.ts | 3 +- packages/const/src/utils/merge.ts | 3 +- .../src/__tests__/pipeline.test.ts | 2 +- .../context-engine/src/base/BaseProcessor.ts | 2 +- .../context-engine/src/base/BaseProvider.ts | 4 +- .../src/engine/messages/MessagesEngine.ts | 4 +- .../src/engine/messages/index.ts | 2 +- .../src/engine/tools/ToolNameResolver.ts | 6 +- .../src/engine/tools/ToolsEngine.ts | 2 +- .../tools/__tests__/ToolNameResolver.test.ts | 2 +- .../tools/__tests__/ToolsEngine.test.ts | 2 +- .../context-engine/src/engine/tools/utils.ts | 2 +- .../src/processors/MessageContent.ts | 2 +- .../context-engine/src/processors/ToolCall.ts | 2 +- .../__tests__/AgentCouncilFlatten.test.ts | 2 +- .../__tests__/GroupMessageFlatten.test.ts | 2 +- .../__tests__/HistoryTruncate.test.ts | 2 +- .../__tests__/MessageContent.test.ts | 2 +- .../__tests__/PlaceholderVariables.test.ts | 2 +- .../processors/__tests__/TaskMessage.test.ts | 2 +- .../src/processors/__tests__/ToolCall.test.ts | 2 +- .../src/providers/GTDPlanInjector.ts | 5 +- .../src/providers/GroupContextInjector.ts | 4 +- .../src/providers/KnowledgeInjector.ts | 4 +- .../providers/PageEditorContextInjector.ts | 3 +- .../src/providers/ToolSystemRole.ts | 3 +- .../src/providers/UserMemoryInjector.ts | 4 +- packages/context-engine/src/types.ts | 2 +- packages/conversation-flow/src/types/index.ts | 2 +- packages/database/src/core/db-adaptor.ts | 2 +- packages/database/src/core/getTestDB.ts | 9 +- packages/database/src/core/web-server.ts | 6 +- .../src/models/__tests__/_test_template.ts | 2 +- .../src/models/__tests__/agent.test.ts | 5 +- .../src/models/__tests__/aiModel.test.ts | 9 +- .../src/models/__tests__/aiProvider.test.ts | 2 +- .../src/models/__tests__/asyncTask.test.ts | 10 +- .../src/models/__tests__/chatGroup.test.ts | 5 +- .../src/models/__tests__/chunk.test.ts | 9 +- .../src/models/__tests__/document.test.ts | 4 +- .../models/__tests__/drizzleMigration.test.ts | 4 +- .../src/models/__tests__/embedding.test.ts | 6 +- .../src/models/__tests__/file.test.ts | 10 +- .../models/__tests__/fixtures/embedding.ts | 2 +- .../src/models/__tests__/generation.test.ts | 13 +- .../models/__tests__/generationBatch.test.ts | 11 +- .../models/__tests__/generationTopic.test.ts | 8 +- .../models/__tests__/knowledgeBase.test.ts | 5 +- .../__tests__/messages/message.create.test.ts | 6 +- .../__tests__/messages/message.delete.test.ts | 9 +- .../__tests__/messages/message.query.test.ts | 10 +- .../__tests__/messages/message.stats.test.ts | 14 +- .../messages/message.thread-query.test.ts | 2 +- .../__tests__/messages/message.update.test.ts | 15 +- .../messages/messageWithTask.test.ts | 6 +- .../queryWithMessageGroup.perf.test.ts | 2 +- .../messages/queryWithMessageGroup.test.ts | 4 +- .../src/models/__tests__/oauthHandoff.test.ts | 6 +- .../src/models/__tests__/plugin.test.ts | 9 +- .../src/models/__tests__/session.test.ts | 11 +- .../src/models/__tests__/sessionGroup.test.ts | 8 +- .../src/models/__tests__/thread.test.ts | 6 +- .../models/__tests__/topicDocument.test.ts | 4 +- .../src/models/__tests__/topicShare.test.ts | 4 +- .../__tests__/topics/topic.create.test.ts | 5 +- .../__tests__/topics/topic.delete.test.ts | 4 +- .../topics/topic.memoryExtractor.test.ts | 6 +- .../__tests__/topics/topic.query.test.ts | 2 +- .../__tests__/topics/topic.stats.test.ts | 6 +- .../__tests__/topics/topic.update.test.ts | 6 +- .../src/models/__tests__/user.test.ts | 9 +- .../src/models/__tests__/userMemories.test.ts | 10 +- .../__tests__/userMemoryIdentity.test.ts | 6 +- packages/database/src/models/_template.ts | 5 +- packages/database/src/models/agent.ts | 9 +- packages/database/src/models/agentCronJob.ts | 7 +- packages/database/src/models/aiModel.ts | 12 +- packages/database/src/models/aiProvider.ts | 11 +- packages/database/src/models/asyncTask.ts | 10 +- packages/database/src/models/chatGroup.ts | 9 +- packages/database/src/models/chunk.ts | 9 +- packages/database/src/models/document.ts | 5 +- .../database/src/models/drizzleMigration.ts | 4 +- packages/database/src/models/embedding.ts | 6 +- packages/database/src/models/file.ts | 10 +- packages/database/src/models/generation.ts | 16 +- .../database/src/models/generationBatch.ts | 11 +- .../database/src/models/generationTopic.ts | 7 +- packages/database/src/models/knowledgeBase.ts | 7 +- packages/database/src/models/message.ts | 30 +- packages/database/src/models/oauthHandoff.ts | 6 +- packages/database/src/models/plugin.ts | 7 +- packages/database/src/models/session.ts | 18 +- packages/database/src/models/sessionGroup.ts | 6 +- packages/database/src/models/thread.ts | 8 +- packages/database/src/models/topic.ts | 12 +- packages/database/src/models/topicDocument.ts | 5 +- packages/database/src/models/topicShare.ts | 4 +- packages/database/src/models/user.ts | 11 +- .../userMemory/__tests__/activity.test.ts | 5 +- .../userMemory/__tests__/context.test.ts | 5 +- .../userMemory/__tests__/experience.test.ts | 7 +- .../userMemory/__tests__/identity.test.ts | 5 +- .../userMemory/__tests__/persona.test.ts | 2 +- .../userMemory/__tests__/preference.test.ts | 7 +- .../src/models/userMemory/activity.ts | 12 +- .../database/src/models/userMemory/context.ts | 9 +- .../src/models/userMemory/experience.ts | 12 +- .../src/models/userMemory/identity.ts | 12 +- .../database/src/models/userMemory/model.ts | 26 +- .../database/src/models/userMemory/persona.ts | 4 +- .../src/models/userMemory/preference.ts | 9 +- .../sources/__tests__/benchmarkLoCoMo.test.ts | 5 +- .../userMemory/sources/benchmarkLoCoMo.ts | 2 +- .../src/repositories/agentGroup/index.test.ts | 2 +- .../src/repositories/agentGroup/index.ts | 11 +- .../__tests__/agentMigrationRepo.test.ts | 2 +- .../src/repositories/agentMigration/index.ts | 2 +- .../src/repositories/aiInfra/index.test.ts | 4 +- .../src/repositories/aiInfra/index.ts | 11 +- .../repositories/compression/index.test.ts | 4 +- .../src/repositories/compression/index.ts | 8 +- .../repositories/dataExporter/index.test.ts | 4 +- .../src/repositories/dataExporter/index.ts | 4 +- .../dataImporter/__tests__/index.test.ts | 4 +- .../deprecated/__tests__/index.test.ts | 4 +- .../dataImporter/deprecated/index.ts | 12 +- .../src/repositories/dataImporter/index.ts | 8 +- .../repositories/home/__tests__/index.test.ts | 1 - .../database/src/repositories/home/index.ts | 4 +- .../knowledge/__tests__/index.test.ts | 2 +- .../src/repositories/knowledge/index.test.ts | 6 +- .../src/repositories/knowledge/index.ts | 9 +- .../src/repositories/search/index.test.ts | 15 +- .../database/src/repositories/search/index.ts | 2 +- .../__tests__/importTopic.test.ts | 7 +- .../src/repositories/topicImporter/index.ts | 2 +- .../userMemory/UserMemoryTopicRepository.ts | 2 +- .../UserMemoryTopicRepository.test.ts | 2 +- .../src/repositories/userMemory/index.ts | 2 +- packages/database/src/schemas/agentCronJob.ts | 2 +- packages/database/src/schemas/aiInfra.ts | 2 +- packages/database/src/schemas/file.ts | 11 +- packages/database/src/schemas/generation.ts | 5 +- packages/database/src/schemas/message.ts | 4 +- packages/database/src/schemas/relations.ts | 2 +- .../server/models/__tests__/adapter.test.ts | 2 +- .../src/server/models/__tests__/user.test.ts | 5 +- .../src/server/models/ragEval/dataset.ts | 7 +- .../server/models/ragEval/datasetRecord.ts | 7 +- .../src/server/models/ragEval/evaluation.ts | 11 +- packages/database/src/type.ts | 2 +- packages/database/src/utils/columns.ts | 2 +- packages/database/src/utils/genWhere.test.ts | 2 +- packages/database/src/utils/genWhere.ts | 6 +- .../database/src/utils/idGenerator.test.ts | 16 +- packages/database/tests/setup-db.ts | 3 +- packages/edge-config/src/index.ts | 5 +- packages/editor-runtime/src/EditorRuntime.ts | 9 +- .../src/__tests__/EditorRuntime.real.test.ts | 6 +- .../src/__tests__/EditorRuntime.test.ts | 6 +- .../electron-client-ipc/src/events/index.ts | 12 +- .../src/events/protocol.ts | 2 +- .../electron-client-ipc/src/events/system.ts | 2 +- .../electron-client-ipc/src/events/update.ts | 4 +- packages/electron-client-ipc/src/ipc.ts | 2 +- .../electron-client-ipc/src/streamInvoke.ts | 4 +- .../src/types/localSystem.ts | 26 +- .../src/types/proxyTRPCRequest.ts | 2 +- .../src/useWatchBroadcast.ts | 2 +- .../electron-client-ipc/src/utils/headers.ts | 2 +- .../electron-client-ipc/src/utils/request.ts | 2 +- .../electron-server-ipc/src/ipcClient.test.ts | 1 + packages/electron-server-ipc/src/ipcClient.ts | 7 +- .../electron-server-ipc/src/ipcServer.test.ts | 5 +- packages/electron-server-ipc/src/ipcServer.ts | 5 +- .../electron-server-ipc/src/types/index.ts | 2 +- .../fetch-sse/src/__tests__/fetchSSE.test.ts | 4 +- .../src/__tests__/parseError.test.ts | 2 +- .../fetch-sse/src/__tests__/request.test.ts | 22 +- packages/fetch-sse/src/fetchSSE.ts | 15 +- packages/fetch-sse/src/headers.ts | 2 +- packages/fetch-sse/src/parseError.ts | 2 +- packages/fetch-sse/src/request.ts | 2 +- packages/file-loaders/src/loadFile.test.ts | 2 +- packages/file-loaders/src/loadFile.ts | 3 +- .../src/loaders/doc/index.test.ts | 1 + .../src/loaders/docx/index.test.ts | 1 + .../file-loaders/src/loaders/docx/index.ts | 3 +- .../src/loaders/excel/index.test.ts | 1 + .../file-loaders/src/loaders/excel/index.ts | 3 +- packages/file-loaders/src/loaders/index.ts | 2 +- .../src/loaders/pdf/index.test.ts | 1 + .../file-loaders/src/loaders/pdf/index.ts | 3 +- .../src/loaders/pptx/index.test.ts | 1 + .../file-loaders/src/loaders/pptx/index.ts | 6 +- .../src/loaders/text/index.test.ts | 1 + .../file-loaders/src/loaders/text/index.ts | 3 +- packages/file-loaders/src/types.ts | 24 +- .../src/utils/parser-utils.test.ts | 3 +- packages/file-loaders/test/loaders.test.ts | 3 +- .../benchmarks/locomo/run.ts | 8 +- .../promptfoo/evals/activity/basic/prompt.ts | 3 +- .../evals/activity/locomo/buildMessages.ts | 8 +- .../promptfoo/evals/activity/locomo/prompt.ts | 3 +- .../identity/with-s3-trace/buildMessages.ts | 3 +- .../evals/identity/with-s3-trace/prompt.ts | 3 +- .../identity/with-s3-trace/tests/cases.ts | 5 +- .../promptfoo/evals/persona/prompt.ts | 2 +- .../scripts/generate-response-formats.ts | 10 +- .../src/converters/locomo.ts | 1 + .../src/extractors/activity.ts | 5 +- .../memory-user-memory/src/extractors/base.ts | 11 +- .../src/extractors/context.ts | 5 +- .../src/extractors/experience.ts | 5 +- .../src/extractors/gatekeeper.ts | 5 +- .../src/extractors/identity.test.ts | 3 +- .../src/extractors/identity.ts | 5 +- .../src/extractors/persona.test.ts | 2 +- .../src/extractors/persona.ts | 4 +- .../src/extractors/preference.ts | 5 +- .../src/providers/chatTopic.ts | 4 +- .../src/providers/existingUserMemory.test.ts | 8 +- .../src/schemas/activity.ts | 5 +- .../memory-user-memory/src/schemas/index.ts | 2 +- .../src/services/extractExecutor.ts | 10 +- packages/memory-user-memory/src/types.ts | 10 +- packages/memory-user-memory/src/utils/zod.ts | 2 +- packages/memory-user-memory/vitest.config.ts | 1 + packages/model-bank/src/aiModels/ai21.ts | 2 +- packages/model-bank/src/aiModels/ai302.ts | 2 +- packages/model-bank/src/aiModels/ai360.ts | 2 +- packages/model-bank/src/aiModels/aihubmix.ts | 2 +- packages/model-bank/src/aiModels/akashchat.ts | 2 +- packages/model-bank/src/aiModels/anthropic.ts | 2 +- packages/model-bank/src/aiModels/azure.ts | 2 +- packages/model-bank/src/aiModels/azureai.ts | 2 +- packages/model-bank/src/aiModels/baichuan.ts | 2 +- packages/model-bank/src/aiModels/bedrock.ts | 2 +- packages/model-bank/src/aiModels/bfl.ts | 5 +- packages/model-bank/src/aiModels/cerebras.ts | 2 +- .../model-bank/src/aiModels/cloudflare.ts | 2 +- packages/model-bank/src/aiModels/cohere.ts | 2 +- packages/model-bank/src/aiModels/cometapi.ts | 2 +- packages/model-bank/src/aiModels/comfyui.ts | 5 +- packages/model-bank/src/aiModels/deepseek.ts | 2 +- packages/model-bank/src/aiModels/fal.ts | 4 +- .../model-bank/src/aiModels/fireworksai.ts | 2 +- packages/model-bank/src/aiModels/giteeai.ts | 2 +- packages/model-bank/src/aiModels/github.ts | 2 +- .../model-bank/src/aiModels/githubCopilot.ts | 2 +- packages/model-bank/src/aiModels/google.ts | 4 +- packages/model-bank/src/aiModels/groq.ts | 2 +- packages/model-bank/src/aiModels/higress.ts | 2 +- .../model-bank/src/aiModels/huggingface.ts | 2 +- packages/model-bank/src/aiModels/hunyuan.ts | 2 +- packages/model-bank/src/aiModels/index.ts | 2 +- packages/model-bank/src/aiModels/infiniai.ts | 2 +- packages/model-bank/src/aiModels/internlm.ts | 2 +- packages/model-bank/src/aiModels/jina.ts | 2 +- packages/model-bank/src/aiModels/lmstudio.ts | 2 +- .../src/aiModels/lobehub/chat/anthropic.ts | 2 +- .../src/aiModels/lobehub/chat/deepseek.ts | 2 +- .../src/aiModels/lobehub/chat/google.ts | 2 +- .../src/aiModels/lobehub/chat/index.ts | 2 +- .../src/aiModels/lobehub/chat/minimax.ts | 2 +- .../src/aiModels/lobehub/chat/moonshot.ts | 2 +- .../src/aiModels/lobehub/chat/openai.ts | 2 +- .../src/aiModels/lobehub/chat/xai.ts | 2 +- .../model-bank/src/aiModels/lobehub/image.ts | 2 +- .../model-bank/src/aiModels/lobehub/utils.ts | 2 +- packages/model-bank/src/aiModels/minimax.ts | 2 +- packages/model-bank/src/aiModels/mistral.ts | 2 +- .../model-bank/src/aiModels/modelscope.ts | 2 +- packages/model-bank/src/aiModels/moonshot.ts | 2 +- packages/model-bank/src/aiModels/nebius.ts | 2 +- packages/model-bank/src/aiModels/newapi.ts | 2 +- packages/model-bank/src/aiModels/novita.ts | 2 +- packages/model-bank/src/aiModels/nvidia.ts | 2 +- packages/model-bank/src/aiModels/ollama.ts | 2 +- .../model-bank/src/aiModels/ollamacloud.ts | 2 +- packages/model-bank/src/aiModels/openai.ts | 4 +- .../model-bank/src/aiModels/openrouter.ts | 2 +- .../model-bank/src/aiModels/perplexity.ts | 2 +- packages/model-bank/src/aiModels/ppio.ts | 2 +- packages/model-bank/src/aiModels/qiniu.ts | 6 +- packages/model-bank/src/aiModels/qwen.ts | 2 +- packages/model-bank/src/aiModels/replicate.ts | 2 +- packages/model-bank/src/aiModels/sambanova.ts | 2 +- .../model-bank/src/aiModels/search1api.ts | 2 +- packages/model-bank/src/aiModels/sensenova.ts | 2 +- .../model-bank/src/aiModels/siliconcloud.ts | 2 +- packages/model-bank/src/aiModels/spark.ts | 2 +- packages/model-bank/src/aiModels/stepfun.ts | 2 +- packages/model-bank/src/aiModels/taichu.ts | 2 +- .../model-bank/src/aiModels/tencentcloud.ts | 2 +- .../model-bank/src/aiModels/togetherai.ts | 2 +- packages/model-bank/src/aiModels/upstage.ts | 2 +- packages/model-bank/src/aiModels/v0.ts | 2 +- .../src/aiModels/vercelaigateway.ts | 2 +- packages/model-bank/src/aiModels/vertexai.ts | 2 +- packages/model-bank/src/aiModels/vllm.ts | 2 +- .../model-bank/src/aiModels/volcengine.ts | 2 +- packages/model-bank/src/aiModels/wenxin.ts | 2 +- packages/model-bank/src/aiModels/xai.ts | 2 +- .../model-bank/src/aiModels/xiaomimimo.ts | 2 +- .../model-bank/src/aiModels/xinference.ts | 2 +- packages/model-bank/src/aiModels/zenmux.ts | 2 +- packages/model-bank/src/aiModels/zeroone.ts | 2 +- packages/model-bank/src/aiModels/zhipu.ts | 2 +- .../model-bank/src/const/modelProvider.ts | 4 +- packages/model-bank/src/exports.test.ts | 5 +- .../model-bank/src/modelProviders/ai21.ts | 2 +- .../model-bank/src/modelProviders/ai302.ts | 2 +- .../model-bank/src/modelProviders/ai360.ts | 2 +- .../model-bank/src/modelProviders/aihubmix.ts | 2 +- .../src/modelProviders/akashchat.ts | 2 +- .../src/modelProviders/anthropic.ts | 2 +- .../model-bank/src/modelProviders/azure.ts | 2 +- .../model-bank/src/modelProviders/azureai.ts | 2 +- .../model-bank/src/modelProviders/baichuan.ts | 2 +- .../model-bank/src/modelProviders/bedrock.ts | 2 +- packages/model-bank/src/modelProviders/bfl.ts | 2 +- .../model-bank/src/modelProviders/cerebras.ts | 2 +- .../src/modelProviders/cloudflare.ts | 2 +- .../model-bank/src/modelProviders/cohere.ts | 2 +- .../model-bank/src/modelProviders/cometapi.ts | 2 +- .../model-bank/src/modelProviders/comfyui.ts | 2 +- .../model-bank/src/modelProviders/deepseek.ts | 2 +- packages/model-bank/src/modelProviders/fal.ts | 2 +- .../src/modelProviders/fireworksai.ts | 2 +- .../model-bank/src/modelProviders/giteeai.ts | 2 +- .../model-bank/src/modelProviders/github.ts | 2 +- .../src/modelProviders/githubCopilot.ts | 2 +- .../model-bank/src/modelProviders/google.ts | 2 +- .../model-bank/src/modelProviders/groq.ts | 2 +- .../model-bank/src/modelProviders/higress.ts | 2 +- .../src/modelProviders/huggingface.ts | 2 +- .../model-bank/src/modelProviders/hunyuan.ts | 2 +- .../model-bank/src/modelProviders/index.ts | 2 +- .../model-bank/src/modelProviders/infiniai.ts | 2 +- .../model-bank/src/modelProviders/internlm.ts | 2 +- .../model-bank/src/modelProviders/jina.ts | 2 +- .../model-bank/src/modelProviders/lmstudio.ts | 2 +- .../model-bank/src/modelProviders/lobehub.ts | 2 +- .../model-bank/src/modelProviders/minimax.ts | 2 +- .../model-bank/src/modelProviders/mistral.ts | 2 +- .../src/modelProviders/modelscope.ts | 2 +- .../model-bank/src/modelProviders/moonshot.ts | 2 +- .../model-bank/src/modelProviders/nebius.ts | 2 +- .../model-bank/src/modelProviders/newapi.ts | 2 +- .../model-bank/src/modelProviders/novita.ts | 2 +- .../model-bank/src/modelProviders/nvidia.ts | 2 +- .../model-bank/src/modelProviders/ollama.ts | 2 +- .../src/modelProviders/ollamacloud.ts | 2 +- .../model-bank/src/modelProviders/openai.ts | 2 +- .../src/modelProviders/openrouter.ts | 2 +- .../src/modelProviders/perplexity.ts | 2 +- .../model-bank/src/modelProviders/ppio.ts | 2 +- .../model-bank/src/modelProviders/qiniu.ts | 2 +- .../model-bank/src/modelProviders/qwen.ts | 2 +- .../src/modelProviders/replicate.ts | 2 +- .../src/modelProviders/sambanova.ts | 2 +- .../src/modelProviders/search1api.ts | 2 +- .../src/modelProviders/sensenova.ts | 2 +- .../src/modelProviders/siliconcloud.ts | 2 +- .../model-bank/src/modelProviders/spark.ts | 2 +- .../model-bank/src/modelProviders/stepfun.ts | 2 +- .../model-bank/src/modelProviders/taichu.ts | 2 +- .../src/modelProviders/tencentcloud.ts | 2 +- .../src/modelProviders/togetherai.ts | 2 +- .../model-bank/src/modelProviders/upstage.ts | 2 +- packages/model-bank/src/modelProviders/v0.ts | 2 +- .../src/modelProviders/vercelaigateway.ts | 2 +- .../model-bank/src/modelProviders/vertexai.ts | 2 +- .../model-bank/src/modelProviders/vllm.ts | 2 +- .../src/modelProviders/volcengine.ts | 2 +- .../model-bank/src/modelProviders/wenxin.ts | 2 +- packages/model-bank/src/modelProviders/xai.ts | 2 +- .../src/modelProviders/xiaomimimo.ts | 2 +- .../src/modelProviders/xinference.ts | 2 +- .../model-bank/src/modelProviders/zenmux.ts | 2 +- .../model-bank/src/modelProviders/zeroone.ts | 2 +- .../model-bank/src/modelProviders/zhipu.ts | 2 +- .../src/standard-parameters/index.test.ts | 8 +- packages/model-bank/src/types/aiModel.ts | 2 +- packages/model-runtime/src/core/BaseAI.ts | 26 +- .../src/core/ModelRuntime.test.ts | 7 +- .../model-runtime/src/core/ModelRuntime.ts | 12 +- .../core/RouterRuntime/createRuntime.test.ts | 2 +- .../src/core/RouterRuntime/index.ts | 2 +- .../resolveCacheTTL.ts | 4 +- .../core/contextBuilders/anthropic.test.ts | 4 +- .../src/core/contextBuilders/anthropic.ts | 6 +- .../src/core/contextBuilders/google.test.ts | 7 +- .../src/core/contextBuilders/google.ts | 8 +- .../src/core/contextBuilders/openai.test.ts | 4 +- .../createImage.test.ts | 6 +- .../openaiCompatibleFactory/createImage.ts | 6 +- .../openaiCompatibleFactory/index.test.ts | 17 +- .../src/core/openaiCompatibleFactory/index.ts | 21 +- .../nonStreamToStream.test.ts | 2 +- .../nonStreamToStream.ts | 2 +- .../src/core/parameterResolver.ts | 4 +- .../src/core/streams/anthropic.test.ts | 15 +- .../src/core/streams/anthropic.ts | 13 +- .../src/core/streams/bedrock/claude.ts | 9 +- .../src/core/streams/bedrock/common.ts | 2 +- .../src/core/streams/bedrock/llama.test.ts | 2 +- .../src/core/streams/bedrock/llama.ts | 11 +- .../src/core/streams/cloudflare.test.ts | 2 +- .../src/core/streams/cloudflare.ts | 2 +- .../src/core/streams/google/google-ai.test.ts | 2 +- .../src/core/streams/google/index.ts | 13 +- .../src/core/streams/model.test.ts | 6 +- .../model-runtime/src/core/streams/model.ts | 2 +- .../src/core/streams/ollama.test.ts | 2 +- .../model-runtime/src/core/streams/ollama.ts | 11 +- .../src/core/streams/openai/openai.test.ts | 2 +- .../src/core/streams/openai/openai.ts | 20 +- .../core/streams/openai/responsesStream.ts | 15 +- .../src/core/streams/protocol.test.ts | 12 +- .../src/core/streams/protocol.ts | 12 +- .../src/core/streams/qwen.test.ts | 4 +- .../model-runtime/src/core/streams/qwen.ts | 17 +- .../model-runtime/src/core/streams/spark.ts | 13 +- .../src/core/streams/vertex-ai.ts | 13 +- .../core/usageConverters/anthropic.test.ts | 2 +- .../src/core/usageConverters/anthropic.ts | 6 +- .../core/usageConverters/google-ai.test.ts | 3 +- .../src/core/usageConverters/google-ai.ts | 9 +- .../src/core/usageConverters/openai.test.ts | 2 +- .../src/core/usageConverters/openai.ts | 8 +- .../utils/computeChatCost.test.ts | 5 +- .../usageConverters/utils/computeChatCost.ts | 4 +- .../utils/computeImageCost.test.ts | 3 +- .../usageConverters/utils/computeImageCost.ts | 2 +- .../utils/resolveImageSinglePrice.ts | 2 +- .../usageConverters/utils/withUsageCost.ts | 2 +- .../src/helpers/mergeChatMethodOptions.ts | 7 +- .../src/helpers/parseToolCalls.ts | 4 +- .../src/providerTestUtils.test.ts | 2 +- .../model-runtime/src/providerTestUtils.ts | 7 +- .../src/providers/ai302/index.test.ts | 2 +- .../src/providers/ai302/index.ts | 7 +- .../src/providers/ai360/index.test.ts | 4 +- .../src/providers/ai360/index.ts | 5 +- .../src/providers/aihubmix/index.ts | 2 +- .../src/providers/akashchat/index.ts | 7 +- .../src/providers/anthropic/index.test.ts | 7 +- .../src/providers/azureOpenai/index.test.ts | 3 +- .../src/providers/azureOpenai/index.ts | 11 +- .../src/providers/azureai/index.test.ts | 1 - .../src/providers/azureai/index.ts | 18 +- .../src/providers/baichuan/index.test.ts | 5 +- .../src/providers/baichuan/index.ts | 7 +- .../src/providers/bedrock/index.test.ts | 5 +- .../src/providers/bedrock/index.ts | 4 +- .../src/providers/bfl/createImage.test.ts | 2 +- .../src/providers/bfl/createImage.ts | 14 +- .../src/providers/bfl/index.test.ts | 2 +- .../model-runtime/src/providers/bfl/index.ts | 6 +- .../src/providers/cerebras/index.ts | 7 +- .../src/providers/cloudflare/index.test.ts | 5 +- .../src/providers/cloudflare/index.ts | 8 +- .../src/providers/cohere/index.test.ts | 36 +- .../src/providers/cohere/index.ts | 5 +- .../src/providers/cometapi/index.ts | 5 +- .../src/providers/comfyui/index.ts | 4 +- .../src/providers/deepseek/index.ts | 4 +- .../src/providers/fal/index.test.ts | 10 +- .../model-runtime/src/providers/fal/index.ts | 8 +- .../src/providers/fireworksai/index.test.ts | 3 +- .../src/providers/fireworksai/index.ts | 5 +- .../src/providers/giteeai/index.ts | 5 +- .../src/providers/github/index.test.ts | 3 +- .../src/providers/github/index.ts | 5 +- .../src/providers/githubCopilot/index.ts | 4 +- .../src/providers/google/createImage.test.ts | 4 +- .../src/providers/google/createImage.ts | 4 +- .../src/providers/google/generateObject.ts | 7 +- .../src/providers/google/index.test.ts | 2 +- .../src/providers/google/index.ts | 14 +- .../src/providers/groq/index.test.ts | 4 +- .../model-runtime/src/providers/groq/index.ts | 4 +- .../src/providers/higress/index.test.ts | 2 +- .../src/providers/higress/index.ts | 5 +- .../src/providers/huggingface/index.ts | 5 +- .../src/providers/hunyuan/index.test.ts | 2 +- .../src/providers/hunyuan/index.ts | 7 +- .../src/providers/internlm/index.ts | 4 +- .../src/providers/jina/index.test.ts | 3 +- .../model-runtime/src/providers/jina/index.ts | 5 +- .../src/providers/lmstudio/index.ts | 5 +- .../src/providers/lobehub/index.ts | 2 +- .../src/providers/minimax/createImage.test.ts | 4 +- .../src/providers/minimax/createImage.ts | 4 +- .../src/providers/minimax/index.ts | 4 +- .../src/providers/mistral/index.test.ts | 6 +- .../src/providers/mistral/index.ts | 5 +- .../src/providers/modelscope/index.test.ts | 3 +- .../src/providers/modelscope/index.ts | 5 +- .../src/providers/nebius/index.ts | 5 +- .../src/providers/newapi/index.test.ts | 24 +- .../src/providers/newapi/index.ts | 6 +- .../src/providers/novita/index.test.ts | 5 +- .../src/providers/novita/index.ts | 2 +- .../src/providers/nvidia/index.ts | 5 +- .../src/providers/ollama/index.ts | 15 +- .../src/providers/ollamacloud/index.ts | 5 +- .../src/providers/openai/index.test.ts | 3 +- .../src/providers/openai/index.ts | 7 +- .../src/providers/openrouter/index.test.ts | 2 +- .../src/providers/openrouter/index.ts | 9 +- .../src/providers/perplexity/index.test.ts | 2 +- .../src/providers/perplexity/index.ts | 4 +- .../src/providers/ppio/index.test.ts | 5 +- .../model-runtime/src/providers/ppio/index.ts | 4 +- .../src/providers/qiniu/index.ts | 7 +- .../src/providers/qwen/createImage.test.ts | 4 +- .../src/providers/qwen/createImage.ts | 7 +- .../src/providers/replicate/index.ts | 8 +- .../src/providers/search1api/index.test.ts | 4 +- .../src/providers/search1api/index.ts | 8 +- .../src/providers/sensenova/index.ts | 5 +- .../src/providers/siliconcloud/createImage.ts | 6 +- .../src/providers/siliconcloud/index.test.ts | 3 +- .../src/providers/siliconcloud/index.ts | 7 +- .../src/providers/spark/index.test.ts | 2 +- .../src/providers/spark/index.ts | 7 +- .../src/providers/stepfun/index.ts | 5 +- .../src/providers/taichu/index.test.ts | 15 +- .../src/providers/taichu/index.ts | 4 +- .../src/providers/tencentcloud/index.test.ts | 3 +- .../src/providers/tencentcloud/index.ts | 5 +- .../src/providers/togetherai/index.test.ts | 3 +- .../src/providers/togetherai/index.ts | 7 +- .../src/providers/togetherai/type.ts | 2 +- .../model-runtime/src/providers/v0/index.ts | 5 +- .../providers/vercelaigateway/index.test.ts | 3 +- .../src/providers/vercelaigateway/index.ts | 6 +- .../src/providers/vertexai/index.ts | 3 +- .../src/providers/vllm/index.test.ts | 3 +- .../providers/volcengine/createImage.test.ts | 4 +- .../src/providers/volcengine/createImage.ts | 6 +- .../src/providers/wenxin/index.test.ts | 4 +- .../src/providers/wenxin/index.ts | 5 +- .../src/providers/xai/index.test.ts | 3 +- .../src/providers/xiaomimimo/index.ts | 4 +- .../src/providers/xinference/index.test.ts | 3 +- .../src/providers/zenmux/index.test.ts | 5 +- .../src/providers/zenmux/index.ts | 2 +- .../src/providers/zeroone/index.ts | 5 +- .../src/providers/zhipu/index.test.ts | 8 +- .../src/providers/zhipu/index.ts | 4 +- packages/model-runtime/src/runtimeMap.ts | 2 +- packages/model-runtime/src/types/chat.ts | 6 +- packages/model-runtime/src/types/error.ts | 5 +- packages/model-runtime/src/types/image.ts | 6 +- .../src/types/structureOutput.ts | 2 +- packages/model-runtime/src/types/type.ts | 8 +- .../src/utils/asyncifyPolling.test.ts | 3 +- .../src/utils/comfyuiErrorParser.ts | 3 +- .../model-runtime/src/utils/consumeStream.ts | 2 +- .../model-runtime/src/utils/createError.ts | 4 +- .../model-runtime/src/utils/errorResponse.ts | 6 +- .../src/utils/googleErrorParser.ts | 5 +- .../src/utils/modelParse.test.ts | 2 +- .../model-runtime/src/utils/modelParse.ts | 3 +- .../src/utils/postProcessModelList.ts | 3 +- .../src/utils/safeParseJSON.test.ts | 2 +- .../model-runtime/src/utils/sanitizeError.ts | 2 +- packages/observability-otel/src/node.ts | 8 +- packages/observability-otel/src/trpc/index.ts | 2 +- .../promptfoo/supervisor/productive/prompt.ts | 3 +- .../chains/__tests__/abstractChunk.test.ts | 2 +- .../src/chains/__tests__/langDetect.test.ts | 2 +- .../src/chains/__tests__/rewriteQuery.test.ts | 5 +- .../chains/__tests__/summaryHistory.test.ts | 4 +- .../src/chains/__tests__/summaryTags.test.ts | 2 +- .../src/chains/__tests__/summaryTitle.test.ts | 4 +- packages/prompts/src/chains/abstractChunk.ts | 2 +- .../prompts/src/chains/answerWithContext.ts | 2 +- .../prompts/src/chains/compressContext.ts | 2 +- packages/prompts/src/chains/langDetect.ts | 2 +- packages/prompts/src/chains/pickEmoji.ts | 2 +- packages/prompts/src/chains/rewriteQuery.ts | 2 +- .../prompts/src/chains/summaryAgentName.ts | 2 +- .../prompts/src/chains/summaryDescription.ts | 2 +- .../src/chains/summaryGenerationTitle.ts | 2 +- packages/prompts/src/chains/summaryHistory.ts | 2 +- packages/prompts/src/chains/summaryTags.ts | 2 +- packages/prompts/src/chains/summaryTitle.ts | 2 +- packages/prompts/src/chains/translate.ts | 2 +- .../src/contexts/supervisor/makeDecision.ts | 2 +- .../prompts/src/contexts/supervisor/tools.ts | 2 +- .../src/prompts/chatMessages/index.test.ts | 2 +- .../prompts/src/prompts/chatMessages/index.ts | 2 +- packages/prompts/src/prompts/files/file.ts | 2 +- packages/prompts/src/prompts/files/image.ts | 2 +- .../prompts/src/prompts/files/index.test.ts | 2 +- packages/prompts/src/prompts/files/index.ts | 2 +- .../src/prompts/files/knowledgeBase.test.ts | 2 +- packages/prompts/src/prompts/files/video.ts | 2 +- .../prompts/src/prompts/groupChat/index.ts | 2 +- .../src/prompts/knowledgeBaseQA/chunk.ts | 2 +- .../formatFileContents.test.ts | 2 +- .../formatSearchResults.test.ts | 2 +- .../src/prompts/knowledgeBaseQA/index.test.ts | 3 +- .../src/prompts/knowledgeBaseQA/index.ts | 2 +- .../src/prompts/knowledgeBaseQA/knowledge.ts | 2 +- .../src/prompts/messagesToText/index.test.ts | 3 +- .../prompts/src/prompts/plugin/index.test.ts | 2 +- packages/prompts/src/prompts/plugin/index.ts | 3 +- .../prompts/src/prompts/plugin/tools.test.ts | 3 +- .../prompts/src/prompts/userMemory/index.ts | 6 +- .../python-interpreter/src/interpreter.ts | 2 +- packages/python-interpreter/src/worker.ts | 6 +- packages/ssrf-safe-fetch/index.browser.ts | 6 +- packages/ssrf-safe-fetch/index.ts | 7 +- packages/types/src/agent/item.ts | 12 +- packages/types/src/agentCronJob/index.ts | 2 +- packages/types/src/agentGroup/index.ts | 6 +- packages/types/src/aiChat.ts | 15 +- packages/types/src/aiProvider.ts | 2 +- packages/types/src/asyncTask.ts | 12 +- packages/types/src/auth.ts | 40 +- packages/types/src/conversation.ts | 40 +- packages/types/src/discover/assistants.ts | 6 +- packages/types/src/discover/index.ts | 4 +- packages/types/src/discover/mcp.ts | 6 +- packages/types/src/discover/models.ts | 4 +- packages/types/src/discover/providers.ts | 4 +- packages/types/src/document/index.ts | 10 +- packages/types/src/exportConfig.ts | 8 +- packages/types/src/fetch.ts | 2 +- packages/types/src/files/list.ts | 2 +- packages/types/src/generation/index.ts | 2 +- packages/types/src/importer.ts | 10 +- packages/types/src/knowledgeBase/index.ts | 2 +- packages/types/src/llm.ts | 6 +- packages/types/src/message/common/base.ts | 2 +- .../types/src/message/common/messageGroup.ts | 44 +- .../types/src/message/common/pageSelection.ts | 12 +- packages/types/src/message/common/tools.ts | 2 +- packages/types/src/message/db/item.ts | 60 +- packages/types/src/message/db/params.ts | 18 +- packages/types/src/message/ui/chat.ts | 14 +- packages/types/src/message/ui/extra.ts | 2 +- packages/types/src/message/ui/params.ts | 96 +- packages/types/src/message/ui/rag.ts | 4 +- packages/types/src/openai/chat.ts | 8 +- packages/types/src/plugins/mcp.ts | 20 +- packages/types/src/plugins/mcpDeps.ts | 8 +- packages/types/src/plugins/protocol.ts | 4 +- packages/types/src/rag.ts | 2 +- packages/types/src/serverConfig.ts | 14 +- packages/types/src/session/agentSession.ts | 6 +- packages/types/src/session/index.ts | 4 +- packages/types/src/session/sessionGroup.ts | 2 +- packages/types/src/tool/builtin.ts | 10 +- packages/types/src/tool/crawler.ts | 2 +- packages/types/src/tool/index.ts | 4 +- packages/types/src/tool/interpreter.ts | 2 +- packages/types/src/tool/plugin.ts | 34 +- packages/types/src/tool/search/index.ts | 12 +- packages/types/src/tool/tool.ts | 2 +- packages/types/src/topic/topic.ts | 2 +- packages/types/src/trace/action.ts | 2 +- packages/types/src/usage/usageRecord.ts | 2 +- packages/types/src/user/preference.ts | 6 +- packages/types/src/user/settings/index.ts | 20 +- .../types/src/user/settings/modelProvider.ts | 4 +- packages/types/src/user/settings/tool.ts | 2 +- packages/types/src/userMemory/index.ts | 2 +- packages/types/src/userMemory/layers.ts | 8 +- packages/types/src/userMemory/list.ts | 32 +- packages/types/src/userMemory/shared.ts | 2 +- packages/types/src/userMemory/tools.ts | 2 +- packages/types/src/userMemory/trace.ts | 2 +- packages/types/src/zustand.ts | 2 +- .../trimBatchProbe/trimBatchProbe.test.ts | 2 +- .../chunkers/trimBatchProbe/trimBatchProbe.ts | 6 +- packages/utils/src/client/cookie.ts | 4 +- .../src/client/fetchEventSource/index.ts | 7 +- .../src/client/fetchEventSource/parse.ts | 2 +- packages/utils/src/client/topic.test.ts | 2 +- packages/utils/src/client/topic.ts | 8 +- .../utils/src/client/xor-obfuscation.test.ts | 2 +- packages/utils/src/colorUtils.test.ts | 2 +- packages/utils/src/compass.ts | 4 +- packages/utils/src/error.ts | 4 +- packages/utils/src/format.ts | 2 +- packages/utils/src/genOG.test.ts | 20 +- packages/utils/src/merge.ts | 3 +- packages/utils/src/multimodalContent.test.ts | 2 +- packages/utils/src/multimodalContent.ts | 2 +- packages/utils/src/platform.ts | 2 +- packages/utils/src/pricing.test.ts | 2 +- packages/utils/src/pricing.ts | 2 +- packages/utils/src/safeParseJSON.test.ts | 2 +- packages/utils/src/sanitizeUTF8.ts | 2 +- packages/utils/src/server/sse.ts | 2 +- packages/utils/src/server/xor.ts | 2 +- packages/utils/src/time.ts | 3 +- packages/utils/src/toolManifest.ts | 5 +- packages/utils/src/trace.ts | 3 +- .../crawImpl/__tests__/browserless.test.ts | 4 +- .../src/crawImpl/__tests__/tavily.test.ts | 2 +- .../web-crawler/src/crawImpl/browserless.ts | 2 +- packages/web-crawler/src/crawImpl/exa.ts | 2 +- .../web-crawler/src/crawImpl/firecrawl.ts | 2 +- packages/web-crawler/src/crawImpl/jina.ts | 2 +- packages/web-crawler/src/crawImpl/naive.ts | 2 +- .../web-crawler/src/crawImpl/search1api.ts | 2 +- packages/web-crawler/src/crawImpl/tavily.ts | 2 +- packages/web-crawler/src/crawler.ts | 5 +- packages/web-crawler/src/urlRules.ts | 2 +- packages/web-crawler/src/utils/appUrlRules.ts | 2 +- .../src/utils/htmlToMarkdown.test.ts | 5 +- .../web-crawler/src/utils/htmlToMarkdown.ts | 5 +- packages/web-crawler/src/utils/withTimeout.ts | 1 + prettier.config.mjs | 3 + renovate.json | 2 +- scripts/buildSitemapIndex/index.ts | 4 +- scripts/cdnWorkflow/index.ts | 9 +- scripts/cdnWorkflow/s3/index.ts | 9 +- scripts/cdnWorkflow/s3/utils.ts | 2 +- scripts/cdnWorkflow/uploader.ts | 6 +- scripts/cdnWorkflow/utils.ts | 3 +- .../changelogWorkflow/buildStaticChangelog.ts | 7 +- scripts/checkConsoleLog.mts | 14 +- .../clerk-to-betterauth/_internal/config.ts | 1 + scripts/clerk-to-betterauth/_internal/db.ts | 2 +- .../_internal/load-data-from-files.ts | 2 +- .../export-clerk-users-with-api.ts | 11 +- scripts/clerk-to-betterauth/index.ts | 18 +- scripts/clerk-to-betterauth/verify.ts | 7 +- scripts/dbmlWorkflow/index.ts | 3 +- scripts/docsWorkflow/autoCDN.ts | 7 +- scripts/docsWorkflow/const.ts | 3 +- scripts/docsWorkflow/index.ts | 5 +- scripts/docsWorkflow/utils.ts | 3 +- .../electronWorkflow/buildDesktopChannel.ts | 4 +- scripts/electronWorkflow/buildElectron.ts | 1 - .../electronWorkflow/mergeMacReleaseFiles.js | 2 +- .../electronWorkflow/modifiers/nextConfig.mts | 2 +- .../modifiers/removeSuspense.mts | 6 +- .../modifiers/settingsContentToStatic.mts | 26 +- .../modifiers/wrapChildrenWithClientOnly.mts | 29 +- scripts/electronWorkflow/moveNextExports.ts | 3 +- scripts/electronWorkflow/setDesktopVersion.ts | 4 +- scripts/i18nWorkflow/analyzeUnusedKeys.ts | 42 +- scripts/i18nWorkflow/cleanUnusedKeys.ts | 11 +- scripts/i18nWorkflow/flattenLocaleKeys.ts | 10 +- scripts/i18nWorkflow/genDiff.ts | 3 +- scripts/i18nWorkflow/utils.ts | 12 +- scripts/mdxWorkflow/index.ts | 7 +- scripts/migrate-spa-navigation.ts | 4 +- scripts/migrateServerDB/index.ts | 9 +- .../nextauth-to-betterauth/_internal/db.ts | 2 +- scripts/nextauth-to-betterauth/index.ts | 10 +- scripts/nextauth-to-betterauth/verify.ts | 1 - scripts/prebuild.mts | 35 +- scripts/readmeWorkflow/const.ts | 3 +- scripts/readmeWorkflow/syncAgentIndex.ts | 3 +- scripts/readmeWorkflow/syncPluginIndex.ts | 3 +- scripts/readmeWorkflow/syncProviderIndex.ts | 5 +- scripts/readmeWorkflow/utlis.ts | 3 +- scripts/replaceComponentImports.ts | 4 +- scripts/serverLauncher/startServer.js | 2 +- scripts/setup-test-postgres-db.sh | 2 +- scripts/vercelIgnoredBuildStep.js | 4 +- .../createBizOpenAI/createAzureOpenai.ts | 3 +- src/app/(backend)/api/agent/route.ts | 3 +- src/app/(backend)/api/agent/run/route.ts | 3 +- src/app/(backend)/api/agent/stream/route.ts | 3 +- .../(backend)/api/auth/check-user/route.ts | 3 +- .../api/auth/resolve-username/route.ts | 3 +- src/app/(backend)/api/desktop/latest/route.ts | 4 +- .../benchmark-locomo/route.ts | 4 +- .../webhooks/casdoor/__tests__/route.test.ts | 14 +- .../webhooks/logto/__tests__/route.test.ts | 21 +- .../api/webhooks/logto/validateRequest.ts | 3 +- .../benchmark-locomo/route.ts | 8 +- .../api/webhooks/memory-extraction/route.ts | 4 +- .../persona/update-writing/route.ts | 2 +- .../process-topic/workflows/topic.ts | 7 +- .../chat-topic/process-topics/route.ts | 4 +- .../chat-topic/process-user-topics/route.ts | 8 +- .../chat-topic/process-users/route.ts | 8 +- .../pipelines/persona/update-writing/route.ts | 2 +- .../market/agent/[[...segments]]/route.ts | 3 +- .../market/oidc/[[...segments]]/route.ts | 3 +- .../market/social/[[...segments]]/route.ts | 3 +- .../(backend)/market/user/[username]/route.ts | 3 +- src/app/(backend)/market/user/me/route.ts | 3 +- .../(backend)/middleware/auth/index.test.ts | 3 +- src/app/(backend)/middleware/auth/index.ts | 10 +- .../middleware/validate/createValidator.ts | 3 +- src/app/(backend)/oidc/[...oidc]/route.ts | 8 +- .../(backend)/oidc/callback/desktop/route.ts | 3 +- src/app/(backend)/oidc/consent/route.ts | 3 +- src/app/(backend)/oidc/handoff/route.ts | 3 +- src/app/(backend)/trpc/trpc.test.ts | 5 +- .../webapi/chat/[provider]/route.test.ts | 4 +- .../(backend)/webapi/chat/[provider]/route.ts | 7 +- .../webapi/models/[provider]/pull/route.ts | 2 +- .../webapi/models/[provider]/route.test.ts | 3 +- .../webapi/models/[provider]/route.ts | 2 +- src/app/(backend)/webapi/proxy/route.ts | 2 +- src/app/(backend)/webapi/revalidate/route.ts | 3 +- src/app/(backend)/webapi/stt/openai/route.ts | 2 +- src/app/(backend)/webapi/trace/route.ts | 2 +- src/app/(backend)/webapi/tts/edge/route.ts | 3 +- .../(backend)/webapi/tts/microsoft/route.ts | 3 +- src/app/(backend)/webapi/tts/openai/route.ts | 2 +- src/app/[variants]/(auth)/_layout/index.tsx | 4 +- src/app/[variants]/(auth)/auth-error/page.tsx | 4 +- src/app/[variants]/(auth)/layout.tsx | 2 +- .../(auth)/market-auth-callback/page.tsx | 2 +- .../(auth)/oauth/callback/error/page.tsx | 7 +- .../(auth)/oauth/callback/success/page.tsx | 3 +- .../oauth/consent/[uid]/Consent/index.tsx | 10 +- .../(auth)/oauth/consent/[uid]/Login.tsx | 10 +- .../[uid]/components/OAuthApplicationLogo.tsx | 2 +- .../(auth)/oauth/consent/[uid]/page.tsx | 3 +- .../reset-password/ResetPasswordContent.tsx | 4 +- .../[variants]/(auth)/reset-password/page.tsx | 9 +- .../(auth)/signin/SignInEmailStep.tsx | 32 +- .../(auth)/signin/SignInPasswordStep.tsx | 18 +- src/app/[variants]/(auth)/signin/page.tsx | 4 +- .../[[...signup]]/BetterAuthSignUpForm.tsx | 16 +- .../(auth)/signup/[[...signup]]/page.tsx | 2 +- .../(auth)/signup/[[...signup]]/useSignUp.tsx | 5 +- .../verify-email/VerifyEmailContent.tsx | 2 +- .../[variants]/(auth)/verify-email/page.tsx | 7 +- .../desktop-onboarding/_layout/index.tsx | 4 +- .../components/LobeMessage.tsx | 6 +- .../components/OnboardingFooterActions.tsx | 8 +- .../features/DataModeStep.tsx | 20 +- .../desktop-onboarding/features/LoginStep.tsx | 47 +- .../features/PermissionsStep.tsx | 20 +- .../features/WelcomeStep.tsx | 11 +- .../(desktop)/desktop-onboarding/index.tsx | 2 +- .../desktop-onboarding/navigation.ts | 2 +- .../(desktop)/desktop-onboarding/storage.ts | 3 +- .../(main)/_layout/DesktopLayoutContainer.tsx | 3 +- src/app/[variants]/(main)/_layout/index.tsx | 9 +- .../_layout/Sidebar/Cron/CronTopicGroup.tsx | 14 +- .../agent/_layout/Sidebar/Cron/index.tsx | 10 +- .../_layout/Sidebar/Cron/useDropdownMenu.tsx | 3 +- .../Sidebar/Header/Agent/SwitchPanel.tsx | 5 +- .../_layout/Sidebar/Header/Agent/index.tsx | 9 +- .../agent/_layout/Sidebar/Header/index.tsx | 3 +- .../agent/_layout/Sidebar/Topic/Actions.tsx | 2 +- .../Sidebar/Topic/AllTopicsDrawer/Content.tsx | 5 +- .../Sidebar/Topic/AllTopicsDrawer/index.tsx | 10 +- .../Sidebar/Topic/List/Item/Actions.tsx | 3 +- .../Sidebar/Topic/List/Item/Editing.tsx | 4 +- .../_layout/Sidebar/Topic/List/Item/index.tsx | 16 +- .../Topic/List/Item/useDropdownMenu.tsx | 3 +- .../_layout/Sidebar/Topic/List/index.tsx | 4 +- .../TopicListContent/ByTimeMode/GroupItem.tsx | 4 +- .../TopicListContent/ByTimeMode/index.tsx | 2 +- .../Topic/TopicListContent/FlatMode/index.tsx | 2 +- .../ThreadList/ThreadItem/Actions.tsx | 3 +- .../ThreadList/ThreadItem/Editing.tsx | 4 +- .../ThreadList/ThreadItem/index.tsx | 2 +- .../ThreadList/ThreadItem/useDropdownMenu.tsx | 3 +- .../Sidebar/Topic/TopicListContent/index.tsx | 2 +- .../Sidebar/Topic/TopicSearchBar/index.tsx | 10 +- .../agent/_layout/Sidebar/Topic/index.tsx | 10 +- .../_layout/Sidebar/Topic/useDropdownMenu.tsx | 3 +- .../[variants]/(main)/agent/_layout/index.tsx | 2 +- .../(main)/agent/cron/[cronId]/CronConfig.ts | 2 +- .../features/CronJobContentEditor.tsx | 10 +- .../cron/[cronId]/features/CronJobHeader.tsx | 4 +- .../[cronId]/features/CronJobSaveButton.tsx | 2 +- .../features/CronJobScheduleConfig.tsx | 61 +- .../(main)/agent/cron/[cronId]/index.tsx | 10 +- .../AgentWelcome/OpeningQuestions.tsx | 10 +- .../AgentWelcome/ToolAuthAlert.tsx | 33 +- .../Conversation/AgentWelcome/index.tsx | 2 +- .../Conversation/ConversationArea.tsx | 6 +- .../Header/NotebookButton/index.tsx | 2 +- .../Conversation/Header/ShareButton/index.tsx | 4 +- .../Conversation/Header/Tags/KnowledgeTag.tsx | 5 +- .../Header/Tags/MemberCountTag.tsx | 2 +- .../Conversation/Header/Tags/index.tsx | 4 +- .../WorkingDirectoryContent.tsx | 22 +- .../Header/WorkingDirectory/index.tsx | 6 +- .../features/Conversation/Header/index.tsx | 2 +- .../MainChatInput/useSendMenuItems.tsx | 18 +- .../agent/features/Conversation/index.tsx | 4 +- .../features/Conversation/useAgentContext.ts | 2 +- .../agent/features/Portal/_layout/Mobile.tsx | 8 +- .../agent/features/Portal/features/Body.tsx | 2 +- .../agent/features/Portal/features/Portal.tsx | 20 +- .../features/Portal/features/PortalPanel.tsx | 2 +- .../agent/features/TelemetryNotification.tsx | 6 +- src/app/[variants]/(main)/agent/index.tsx | 2 +- .../features/AgentCronJobs/CronJobCards.tsx | 24 +- .../features/AgentCronJobs/CronJobForm.tsx | 6 +- .../features/AgentCronJobs/CronJobList.tsx | 14 +- .../profile/features/AgentCronJobs/index.tsx | 2 +- .../features/AgentSettings/Content.tsx | 14 +- .../profile/features/AgentSettings/index.tsx | 6 +- .../profile/features/EditorCanvas/TypoBar.tsx | 4 +- .../profile/features/EditorCanvas/index.tsx | 8 +- .../features/EditorCanvas/useSlashItems.tsx | 4 +- .../profile/features/Header/AgentForkTag.tsx | 2 +- .../AgentPublishButton/ForkConfirmModal.tsx | 8 +- .../AgentPublishButton/PublishResultModal.tsx | 6 +- .../Header/AgentPublishButton/index.tsx | 2 +- .../agent/profile/features/Header/index.tsx | 2 +- .../features/ProfileEditor/AgentHeader.tsx | 42 +- .../MentionList/MentionDropdown.tsx | 17 +- .../MentionList/useMentionItems.tsx | 13 +- .../profile/features/ProfileEditor/index.tsx | 12 +- .../profile/features/ProfileProvider.tsx | 5 +- .../agent/profile/features/StoreUpdater.tsx | 3 +- .../agent/profile/features/store/action.ts | 5 +- .../agent/profile/features/store/index.ts | 9 +- .../profile/features/store/initialState.ts | 6 +- .../agent/profile/features/store/selectors.ts | 2 +- .../[variants]/(main)/agent/profile/index.tsx | 11 +- .../community/(detail)/_layout/Header.tsx | 8 +- .../(detail)/agent/features/AgentForkTag.tsx | 4 +- .../agent/features/DetailProvider.tsx | 5 +- .../features/Details/Capabilities/Block.tsx | 3 +- .../Details/Capabilities/KnowledgeItem.tsx | 4 +- .../(detail)/agent/features/Details/Nav.tsx | 6 +- .../features/Details/Overview/TagList.tsx | 4 +- .../agent/features/Details/Overview/index.tsx | 6 +- .../agent/features/Details/Related/index.tsx | 2 +- .../features/Details/SystemRole/TagList.tsx | 4 +- .../features/Details/SystemRole/index.tsx | 4 +- .../agent/features/Details/Versions/index.tsx | 13 +- .../(detail)/agent/features/Details/index.tsx | 2 +- .../Sidebar/ActionButton/AddAgent.tsx | 4 +- .../Sidebar/ActionButton/ForkAndChat.tsx | 2 +- .../features/Sidebar/ActionButton/index.tsx | 2 +- .../agent/features/Sidebar/Related/Item.tsx | 6 +- .../agent/features/Sidebar/Related/index.tsx | 2 +- .../agent/features/Sidebar/Summary/index.tsx | 4 +- .../agent/features/Sidebar/TocList/index.tsx | 2 +- .../(detail)/agent/features/Sidebar/index.tsx | 4 +- .../agent/features/StatusPage/index.tsx | 18 +- .../(main)/community/(detail)/agent/index.tsx | 2 +- .../community/(detail)/agent/loading.tsx | 4 +- .../community/(detail)/features/Back.tsx | 5 +- .../community/(detail)/features/Block.tsx | 5 +- .../(detail)/features/Breadcrumb.tsx | 7 +- .../(detail)/features/DetailLayout.tsx | 5 +- .../(detail)/features/HighlightBlock.tsx | 10 +- .../(detail)/features/MakedownRender.tsx | 9 +- .../(detail)/features/ShareButton.tsx | 19 +- .../(detail)/features/SidebarContainer.tsx | 5 +- .../(detail)/features/Toc/Heading.tsx | 6 +- .../community/(detail)/features/Toc/index.tsx | 5 +- .../(detail)/features/Toc/useToc.tsx | 11 +- .../group_agent/features/DetailProvider.tsx | 5 +- .../features/Details/Members/index.tsx | 8 +- .../group_agent/features/Details/Nav.tsx | 4 +- .../features/Details/Overview/index.tsx | 14 +- .../features/Details/Related/index.tsx | 6 +- .../features/Details/SystemRole/TagList.tsx | 4 +- .../features/Details/SystemRole/index.tsx | 4 +- .../features/Details/Versions/index.tsx | 8 +- .../group_agent/features/Details/index.tsx | 2 +- .../features/GroupAgentForkTag.tsx | 4 +- .../Sidebar/ActionButton/AddGroupAgent.tsx | 6 +- .../Sidebar/ActionButton/ForkGroupAndChat.tsx | 4 +- .../features/Sidebar/ActionButton/index.tsx | 2 +- .../features/Sidebar/Summary/index.tsx | 4 +- .../group_agent/features/Sidebar/index.tsx | 4 +- .../group_agent/features/StatusPage/index.tsx | 8 +- .../community/(detail)/group_agent/index.tsx | 2 +- .../mcp/features/Details/Versions/index.tsx | 12 +- .../(detail)/mcp/features/Details/index.tsx | 4 +- .../features/Sidebar/ActionButton/index.tsx | 14 +- .../features/Sidebar/ConnectionTypeAlert.tsx | 2 +- .../mcp/features/Sidebar/Related/Item.tsx | 6 +- .../mcp/features/Sidebar/ServerConfig.tsx | 2 +- .../mcp/features/Sidebar/TocList/index.tsx | 2 +- .../(detail)/mcp/features/Sidebar/index.tsx | 4 +- .../model/features/DetailProvider.tsx | 5 +- .../(detail)/model/features/Details/Nav.tsx | 4 +- .../Details/Overview/ProviderList/index.tsx | 10 +- .../Details/Parameter/ParameterItem.tsx | 2 +- .../features/Details/Parameter/index.tsx | 8 +- .../(detail)/model/features/Details/index.tsx | 2 +- .../(detail)/model/features/Header.tsx | 12 +- .../Sidebar/ActionButton/ChatWithModel.tsx | 8 +- .../features/Sidebar/ActionButton/index.tsx | 2 +- .../model/features/Sidebar/Related/Item.tsx | 6 +- .../Sidebar/RelatedProviders/Item.tsx | 6 +- .../(detail)/model/features/Sidebar/index.tsx | 4 +- .../provider/features/DetailProvider.tsx | 5 +- .../provider/features/Details/Nav.tsx | 8 +- .../Details/Overview/ModelList/index.tsx | 10 +- .../provider/features/Details/index.tsx | 2 +- .../(detail)/provider/features/Header.tsx | 14 +- .../Sidebar/ActionButton/ProviderConfig.tsx | 2 +- .../features/Sidebar/ActionButton/index.tsx | 4 +- .../features/Sidebar/Related/Item.tsx | 6 +- .../features/Sidebar/RelatedModels/Item.tsx | 6 +- .../provider/features/Sidebar/index.tsx | 4 +- .../(detail)/user/features/DetailProvider.tsx | 11 +- .../(detail)/user/features/FollowButton.tsx | 4 +- .../(detail)/user/features/FollowStats.tsx | 6 +- .../(detail)/user/features/Header/index.tsx | 8 +- .../(detail)/user/features/UserAgentCard.tsx | 30 +- .../user/features/UserFavoriteAgents.tsx | 33 +- .../user/features/UserFavoritePlugins.tsx | 31 +- .../user/features/UserForkedAgentGroups.tsx | 6 +- .../user/features/UserForkedAgents.tsx | 6 +- .../(detail)/user/features/UserGroupCard.tsx | 30 +- .../(main)/community/(detail)/user/index.tsx | 2 +- .../community/(list)/_layout/Footer.tsx | 6 +- .../community/(list)/_layout/Header.tsx | 2 +- .../(main)/community/(list)/agent/Client.tsx | 5 +- .../community/(list)/agent/_layout/index.tsx | 2 +- .../(list)/agent/features/Category/index.tsx | 4 +- .../(list)/agent/features/List/Item.tsx | 26 +- .../(list)/agent/features/List/TokenTag.tsx | 2 +- .../(list)/agent/features/List/index.tsx | 2 +- .../agent/features/MarketSourceSwitch.tsx | 7 +- .../(main)/community/(list)/agent/index.tsx | 3 +- .../community/(list)/features/Pagination.tsx | 6 +- .../(list)/features/SortButton/index.tsx | 5 +- .../community/(list)/mcp/_layout/index.tsx | 2 +- .../(list)/mcp/features/Category/index.tsx | 4 +- .../mcp/features/List/ConnectionTypeTag.tsx | 2 +- .../(list)/mcp/features/List/Item.tsx | 32 +- .../(list)/mcp/features/List/MetaInfo.tsx | 11 +- .../(list)/mcp/features/List/index.tsx | 2 +- .../(main)/community/(list)/mcp/index.tsx | 3 +- .../community/(list)/model/_layout/index.tsx | 2 +- .../(list)/model/features/Category/index.tsx | 4 +- .../(list)/model/features/List/Item.tsx | 38 +- .../model/features/List/ModelTypeIcon.tsx | 6 +- .../(list)/model/features/List/index.tsx | 2 +- .../(main)/community/(list)/model/index.tsx | 3 +- .../(list)/provider/features/List/Item.tsx | 26 +- .../(list)/provider/features/List/index.tsx | 2 +- .../community/(list)/provider/index.tsx | 3 +- .../(main)/community/_layout/Header.tsx | 4 +- .../community/_layout/Sidebar/Header/Nav.tsx | 7 +- .../_layout/Sidebar/Header/index.tsx | 3 +- .../(main)/community/_layout/index.tsx | 2 +- .../community/components/CardBanner.tsx | 6 +- .../components/CategoryContainer.tsx | 4 +- .../community/components/CategoryMenu.tsx | 3 +- .../community/components/GitHubAvatar.tsx | 3 +- .../community/components/GridLoadingCard.tsx | 8 +- .../community/components/ListLoading.tsx | 10 +- .../(main)/community/components/Statistic.tsx | 6 +- .../(main)/community/components/Title.tsx | 14 +- .../components/VirtuosoGridList/index.tsx | 28 +- .../community/features/AssistantEmpty.tsx | 9 +- .../community/features/CreateButton/Inner.tsx | 4 +- .../community/features/CreateButton/index.tsx | 6 +- .../(main)/community/features/LikeButton.tsx | 6 +- .../(main)/community/features/McpEmpty.tsx | 9 +- .../(main)/community/features/ModelEmpty.tsx | 9 +- .../community/features/ProviderEmpty.tsx | 9 +- .../(main)/community/features/Search.tsx | 17 +- .../(main)/community/features/Title.tsx | 12 +- .../community/features/UserAvatar/index.tsx | 6 +- .../features/__tests__/calculateScore.test.ts | 2 +- .../(main)/community/features/useNav.tsx | 3 +- src/app/[variants]/(main)/components/Link.tsx | 3 +- .../Sidebar/AddGroupMemberModal/AgentItem.tsx | 6 +- .../AvailableAgentList.tsx | 14 +- .../AddGroupMemberModal/SelectedAgentList.tsx | 5 +- .../Sidebar/AddGroupMemberModal/index.tsx | 12 +- .../Sidebar/GroupConfig/AgentProfilePopup.tsx | 21 +- .../Sidebar/GroupConfig/GroupMember.tsx | 14 +- .../Sidebar/GroupConfig/GroupMemberItem.tsx | 7 +- .../_layout/Sidebar/GroupConfig/GroupRole.tsx | 19 +- .../Sidebar/GroupConfig/Header/Avatar.tsx | 12 +- .../Sidebar/GroupConfig/Header/index.tsx | 2 +- .../Sidebar/Header/Agent/SwitchPanel.tsx | 7 +- .../_layout/Sidebar/Header/Agent/index.tsx | 9 +- .../group/_layout/Sidebar/Header/Nav.tsx | 6 +- .../group/_layout/Sidebar/Header/index.tsx | 3 +- .../group/_layout/Sidebar/Members/index.tsx | 25 +- .../group/_layout/Sidebar/Topic/Actions.tsx | 2 +- .../Sidebar/Topic/AllTopicsDrawer/Content.tsx | 5 +- .../Sidebar/Topic/AllTopicsDrawer/index.tsx | 12 +- .../Sidebar/Topic/List/Item/Actions.tsx | 3 +- .../Sidebar/Topic/List/Item/Editing.tsx | 18 +- .../_layout/Sidebar/Topic/List/Item/index.tsx | 14 +- .../Topic/List/Item/useDropdownMenu.tsx | 3 +- .../_layout/Sidebar/Topic/List/index.tsx | 4 +- .../TopicListContent/ByTimeMode/GroupItem.tsx | 4 +- .../TopicListContent/ByTimeMode/index.tsx | 2 +- .../Topic/TopicListContent/FlatMode/index.tsx | 2 +- .../ThreadList/ThreadItem/Actions.tsx | 3 +- .../ThreadList/ThreadItem/Editing.tsx | 18 +- .../ThreadList/ThreadItem/index.tsx | 2 +- .../ThreadList/ThreadItem/useDropdownMenu.tsx | 3 +- .../Sidebar/Topic/TopicListContent/index.tsx | 2 +- .../Sidebar/Topic/TopicSearchBar/index.tsx | 10 +- .../Topic/hooks/useThreadNavigation.ts | 2 +- .../group/_layout/Sidebar/Topic/index.tsx | 10 +- .../_layout/Sidebar/Topic/useDropdownMenu.tsx | 3 +- .../[variants]/(main)/group/_layout/index.tsx | 2 +- .../AgentWelcome/OpeningQuestions.tsx | 10 +- .../Conversation/AgentWelcome/index.tsx | 2 +- .../features/Conversation/ChatItem/Thread.tsx | 5 +- .../Conversation/ChatItem/ThreadItem.tsx | 6 +- .../Conversation/ConversationArea.tsx | 6 +- .../Conversation/Header/ShareButton/index.tsx | 4 +- .../Conversation/Header/Tags/KnowledgeTag.tsx | 5 +- .../Conversation/Header/Tags/index.tsx | 2 +- .../features/Conversation/Header/index.tsx | 2 +- .../Conversation/MainChatInput/GroupChat.tsx | 23 +- .../MainChatInput/useSendMenuItems.tsx | 18 +- .../group/features/Conversation/index.tsx | 2 +- .../features/Conversation/useGroupContext.ts | 2 +- .../features/Conversation/useGroupHooks.ts | 4 +- .../group/features/Portal/_layout/Mobile.tsx | 8 +- .../group/features/Portal/features/Body.tsx | 2 +- .../group/features/TelemetryNotification.tsx | 6 +- src/app/[variants]/(main)/group/index.tsx | 2 +- .../AgentBuilder/AgentBuilderProvider.tsx | 8 +- .../features/AgentBuilder/TopicSelector.tsx | 7 +- .../profile/features/AgentBuilder/index.tsx | 10 +- .../features/AgentSettings/Content.tsx | 12 +- .../profile/features/AgentSettings/index.tsx | 6 +- .../features/GroupProfile/GroupForkTag.tsx | 2 +- .../features/GroupProfile/GroupHeader.tsx | 42 +- .../profile/features/GroupProfile/index.tsx | 14 +- .../features/Header/AgentBuilderToggle.tsx | 2 +- .../AgentPublishButton/PublishButton.tsx | 2 +- .../AgentPublishButton/PublishResultModal.tsx | 6 +- .../Header/AgentPublishButton/index.tsx | 4 +- .../features/Header/ChromeTabs/index.tsx | 5 +- .../GroupForkConfirmModal.tsx | 8 +- .../GroupPublishResultModal.tsx | 6 +- .../Header/GroupPublishButton/index.tsx | 2 +- .../group/profile/features/Header/index.tsx | 9 +- .../features/MemberProfile/AgentHeader.tsx | 50 +- .../features/MemberProfile/AgentTool.tsx | 2 +- .../MentionList/MentionDropdown.tsx | 17 +- .../MentionList/useMentionItems.tsx | 13 +- .../profile/features/MemberProfile/index.tsx | 12 +- .../[variants]/(main)/group/profile/index.tsx | 13 +- .../home/_layout/Body/Agent/Actions.tsx | 3 +- .../Body/Agent/AllAgentsDrawer/index.tsx | 12 +- .../Agent/List/AgentGroupItem/Editing.tsx | 18 +- .../Body/Agent/List/AgentGroupItem/index.tsx | 9 +- .../List/AgentGroupItem/useDropdownMenu.tsx | 3 +- .../Body/Agent/List/AgentItem/Avatar.tsx | 2 +- .../Body/Agent/List/AgentItem/Editing.tsx | 46 +- .../Body/Agent/List/AgentItem/index.tsx | 9 +- .../Agent/List/AgentItem/useDropdownMenu.tsx | 3 +- .../_layout/Body/Agent/List/Group/Actions.tsx | 5 +- .../_layout/Body/Agent/List/Group/Editing.tsx | 18 +- .../_layout/Body/Agent/List/Group/Item.tsx | 10 +- .../Body/Agent/List/Group/useDropdownMenu.tsx | 2 +- .../_layout/Body/Agent/List/InboxItem.tsx | 11 +- .../_layout/Body/Agent/List/Item/Actions.tsx | 3 +- .../home/_layout/Body/Agent/List/List.tsx | 7 +- .../home/_layout/Body/Agent/List/index.tsx | 2 +- .../home/_layout/Body/Agent/ModalProvider.tsx | 17 +- .../Body/Agent/Modals/CreateGroupModal.tsx | 15 +- .../(main)/home/_layout/Body/Agent/index.tsx | 10 +- .../_layout/Body/Agent/useDropdownMenu.tsx | 3 +- .../home/_layout/Body/BottomMenu/index.tsx | 2 +- .../home/_layout/Body/Project/Actions.tsx | 2 +- .../_layout/Body/Project/List/Actions.tsx | 3 +- .../_layout/Body/Project/List/Editing.tsx | 18 +- .../home/_layout/Body/Project/List/index.tsx | 4 +- .../Body/Project/List/useDropdownMenu.tsx | 3 +- .../home/_layout/Body/Project/index.tsx | 8 +- .../_layout/Body/Project/useDropdownMenu.tsx | 2 +- .../_layout/CreateGroupModal/AgentItem.tsx | 10 +- .../CreateGroupModal/AvailableAgentList.tsx | 14 +- .../CreateGroupModal/SelectedAgentList.tsx | 7 +- .../home/_layout/CreateGroupModal/index.tsx | 12 +- .../(main)/home/_layout/Footer/index.tsx | 18 +- .../_layout/Header/components/AddButton.tsx | 2 +- .../home/_layout/Header/components/Nav.tsx | 9 +- .../home/_layout/Header/components/User.tsx | 10 +- .../home/_layout/hooks/useCreateMenuItems.tsx | 5 +- .../_layout/hooks/useProjectMenuItems.tsx | 2 +- .../hooks/useSessionGroupMenuItems.tsx | 4 +- .../[variants]/(main)/home/_layout/index.tsx | 3 +- .../home/features/CommunityAgents/Item.tsx | 12 +- .../home/features/CommunityAgents/List.tsx | 2 +- .../home/features/CommunityAgents/index.tsx | 6 +- .../home/features/FeaturedPlugins/Item.tsx | 10 +- .../home/features/FeaturedPlugins/List.tsx | 2 +- .../home/features/FeaturedPlugins/index.tsx | 6 +- .../home/features/InputArea/ModeTag.tsx | 4 +- .../features/InputArea/SkillInstallBanner.tsx | 2 +- .../home/features/InputArea/StarterList.tsx | 14 +- .../(main)/home/features/InputArea/index.tsx | 15 +- .../(main)/home/features/RecentPage/Item.tsx | 6 +- .../(main)/home/features/RecentPage/List.tsx | 2 +- .../(main)/home/features/RecentPage/index.tsx | 6 +- .../home/features/RecentResource/Item.tsx | 10 +- .../home/features/RecentResource/List.tsx | 2 +- .../home/features/RecentResource/index.tsx | 6 +- .../(main)/home/features/RecentTopic/Item.tsx | 18 +- .../(main)/home/features/RecentTopic/List.tsx | 2 +- .../home/features/RecentTopic/index.tsx | 2 +- .../features/components/GroupBlock/index.tsx | 14 +- .../ScrollShadowWithButton/index.tsx | 15 +- src/app/[variants]/(main)/home/index.tsx | 2 +- .../(main)/hooks/useActiveTabKey.ts | 3 +- .../(main)/image/NotSupportClient.tsx | 14 +- .../components/AspectRatioSelect/index.tsx | 17 +- .../ConfigPanel/components/CfgSliderInput.tsx | 2 +- .../components/DimensionControlGroup.tsx | 10 +- .../ConfigPanel/components/ImageNum.tsx | 20 +- .../ConfigPanel/components/ImageUpload.tsx | 25 +- .../ConfigPanel/components/ImageUrl.tsx | 2 +- .../components/ImageUrlsUpload.tsx | 4 +- .../components/InputNumber/index.tsx | 9 +- .../components/ModelSelect/ImageModelItem.tsx | 4 +- .../components/ModelSelect/index.tsx | 30 +- .../MultiImagesUpload/ImageManageModal.tsx | 25 +- .../components/MultiImagesUpload/index.tsx | 28 +- .../ConfigPanel/components/QualitySelect.tsx | 2 +- .../components/ResolutionSelect.tsx | 2 +- .../components/SeedNumberInput.tsx | 2 +- .../ConfigPanel/components/Select/index.tsx | 22 +- .../ConfigPanel/components/SizeSelect.tsx | 2 +- .../components/StepsSliderInput.tsx | 2 +- .../image/_layout/ConfigPanel/index.tsx | 5 +- .../utils/__tests__/imageValidation.test.ts | 2 +- .../(main)/image/_layout/Header.tsx | 3 +- .../(main)/image/_layout/TopicSidebar.tsx | 2 +- .../image/_layout/Topics/NewTopicButton.tsx | 12 +- .../(main)/image/_layout/Topics/TopicItem.tsx | 14 +- .../(main)/image/_layout/Topics/index.tsx | 6 +- .../[variants]/(main)/image/_layout/index.tsx | 6 +- .../[variants]/(main)/image/_layout/type.ts | 2 +- .../features/GenerationFeed/BatchItem.tsx | 16 +- .../GenerationItem/ActionButtons.tsx | 7 +- .../GenerationItem/ErrorState.tsx | 10 +- .../GenerationItem/LoadingState.tsx | 4 +- .../GenerationItem/SuccessState.tsx | 10 +- .../GenerationFeed/GenerationItem/index.tsx | 6 +- .../GenerationFeed/GenerationItem/types.ts | 2 +- .../GenerationFeed/GenerationItem/utils.ts | 2 +- .../GenerationFeed/ReferenceImages.tsx | 10 +- .../features/ImageWorkspace/SkeletonList.tsx | 2 +- .../image/features/PromptInput/Title.tsx | 4 +- .../image/features/PromptInput/index.tsx | 14 +- .../memory/(home)/features/Persona/index.tsx | 4 +- .../features/RoleTagCloud/TagCloudCanvas.tsx | 10 +- .../(home)/features/RoleTagCloud/index.tsx | 6 +- .../[variants]/(main)/memory/(home)/index.tsx | 4 +- .../memory/_layout/Sidebar/Header/Nav.tsx | 11 +- .../memory/_layout/Sidebar/Header/index.tsx | 3 +- .../(main)/memory/_layout/index.tsx | 2 +- .../activities/features/ActivityDropdown.tsx | 6 +- .../features/ActivityRightPanel.tsx | 6 +- .../features/List/GridView/ActivityCard.tsx | 2 +- .../features/List/GridView/index.tsx | 2 +- .../List/TimelineView/ActivityCard.tsx | 2 +- .../features/List/TimelineView/index.tsx | 2 +- .../memory/activities/features/List/index.tsx | 2 +- .../(main)/memory/activities/index.tsx | 14 +- .../contexts/features/ContextDropdown.tsx | 6 +- .../contexts/features/ContextRightPanel.tsx | 10 +- .../features/List/GridView/ContextCard.tsx | 8 +- .../contexts/features/List/GridView/index.tsx | 4 +- .../List/TimelineView/ContextCard.tsx | 4 +- .../features/List/TimelineView/index.tsx | 4 +- .../memory/contexts/features/List/index.tsx | 2 +- .../(main)/memory/contexts/index.tsx | 14 +- .../features/ExperienceDropdown.tsx | 6 +- .../features/ExperienceRightPanel.tsx | 18 +- .../features/List/GridView/ExperienceCard.tsx | 6 +- .../features/List/GridView/index.tsx | 2 +- .../List/TimelineView/ExperienceCard.tsx | 2 +- .../features/List/TimelineView/index.tsx | 2 +- .../experiences/features/List/index.tsx | 2 +- .../(main)/memory/experiences/index.tsx | 14 +- .../(main)/memory/features/DetailLoading.tsx | 2 +- .../(main)/memory/features/DetailPanel.tsx | 6 +- .../memory/features/EditableModal/index.tsx | 4 +- .../(main)/memory/features/FilterBar.tsx | 12 +- .../memory/features/GridView/GridCard.tsx | 33 +- .../(main)/memory/features/GridView/index.tsx | 22 +- .../(main)/memory/features/HashTags.tsx | 2 +- .../memory/features/HighlightedContent.tsx | 2 +- .../(main)/memory/features/Loading.tsx | 4 +- .../memory/features/MemoryAnalysis/Action.tsx | 2 +- .../MemoryAnalysis/AnalysisTrigger.tsx | 8 +- .../MemoryAnalysis/DateRangeModal.tsx | 8 +- .../memory/features/MemoryAnalysis/Status.tsx | 13 +- .../memory/features/MemoryAnalysis/useTask.ts | 4 +- .../(main)/memory/features/MemoryEmpty.tsx | 12 +- .../(main)/memory/features/ProgressIcon.tsx | 5 +- .../(main)/memory/features/SourceLink.tsx | 8 +- .../features/TimeLineView/PeriodGroup.tsx | 7 +- .../features/TimeLineView/TimeLineCard.tsx | 19 +- .../memory/features/TimeLineView/index.tsx | 15 +- .../memory/features/ViewModeSwitcher.tsx | 4 +- .../identities/features/IdentityDropdown.tsx | 6 +- .../features/IdentityRightPanel.tsx | 2 +- .../features/List/GridView/IdentityCard.tsx | 2 +- .../features/List/GridView/index.tsx | 2 +- .../List/TimelineView/IdentityCard.tsx | 2 +- .../features/List/TimelineView/index.tsx | 8 +- .../memory/identities/features/List/index.tsx | 2 +- .../identities/features/SegmentedBar.tsx | 6 +- .../(main)/memory/identities/index.tsx | 21 +- .../features/List/GridView/PreferenceCard.tsx | 8 +- .../features/List/GridView/index.tsx | 6 +- .../List/TimelineView/PreferenceCard.tsx | 4 +- .../features/List/TimelineView/index.tsx | 6 +- .../preferences/features/List/index.tsx | 6 +- .../features/PreferenceDropdown.tsx | 6 +- .../features/PreferenceRightPanel.tsx | 10 +- .../(main)/memory/preferences/index.tsx | 14 +- src/app/[variants]/(main)/page/[id]/index.tsx | 2 +- .../(main)/page/_layout/Body/Actions.tsx | 3 +- .../_layout/Body/AllPagesDrawer/Content.tsx | 7 +- .../_layout/Body/AllPagesDrawer/index.tsx | 12 +- .../page/_layout/Body/List/Item/Actions.tsx | 3 +- .../page/_layout/Body/List/Item/Editing.tsx | 30 +- .../page/_layout/Body/List/Item/index.tsx | 5 +- .../Body/List/Item/useDropdownMenu.tsx | 3 +- .../(main)/page/_layout/Body/List/index.tsx | 2 +- .../(main)/page/_layout/Body/index.tsx | 10 +- .../page/_layout/Body/useDropdownMenu.tsx | 2 +- .../(main)/page/_layout/Header/AddButton.tsx | 4 +- .../(main)/page/_layout/Header/index.tsx | 6 +- .../[variants]/(main)/page/_layout/index.tsx | 2 +- src/app/[variants]/(main)/page/index.tsx | 2 +- .../_layout/Body/LibraryList/EmptyStatus.tsx | 8 +- .../_layout/Body/LibraryList/Item/Actions.tsx | 3 +- .../_layout/Body/LibraryList/Item/Editing.tsx | 18 +- .../_layout/Body/LibraryList/Item/index.tsx | 9 +- .../Body/LibraryList/Item/useDropdownMenu.tsx | 3 +- .../(home)/_layout/Body/LibraryList/index.tsx | 2 +- .../resource/(home)/_layout/Body/index.tsx | 16 +- .../(home)/_layout/Header/CategoryMenu.tsx | 2 +- .../resource/(home)/_layout/Sidebar.tsx | 2 +- .../(main)/resource/(home)/_layout/index.tsx | 2 +- .../(main)/resource/_layout/index.tsx | 2 +- .../resource/features/DndContextWrapper.tsx | 27 +- .../(main)/resource/features/FileDetail.tsx | 24 +- .../features/modal/FullscreenModal.tsx | 5 +- .../(main)/resource/features/store/action.ts | 17 +- .../resource/features/store/initialState.ts | 10 +- .../resource/features/store/selectors.ts | 5 +- .../library/_layout/Header/LibraryHead.tsx | 23 +- .../resource/library/_layout/Header/index.tsx | 2 +- .../(main)/resource/library/_layout/index.tsx | 2 +- .../resource/library/features/Container.tsx | 2 +- .../(main)/resource/store/action.ts | 7 +- .../(main)/resource/store/initialState.ts | 2 +- .../(main)/settings/_layout/Body/index.tsx | 4 +- .../_layout/ContextProvider/index.tsx | 5 +- .../(main)/settings/_layout/Header.tsx | 3 +- .../(main)/settings/_layout/index.tsx | 2 +- .../(main)/settings/_layout/type.ts | 2 +- .../(main)/settings/about/features/About.tsx | 4 +- .../settings/about/features/AboutList.tsx | 7 +- .../settings/about/features/Analytics.tsx | 3 +- .../settings/about/features/ItemCard.tsx | 4 +- .../settings/about/features/ItemLink.tsx | 5 +- .../settings/about/features/Version.tsx | 6 +- .../agent/features/DefaultAgentForm.tsx | 7 +- .../agent/features/SystemAgentForm.tsx | 16 +- .../(main)/settings/agent/features/useSync.ts | 2 +- .../settings/apikey/features/ApiKey.tsx | 32 +- .../features/ApiKeyDatePicker/index.tsx | 12 +- .../apikey/features/ApiKeyDisplay/index.tsx | 7 +- .../apikey/features/ApiKeyModal/index.tsx | 16 +- .../apikey/features/EditableCell/index.tsx | 16 +- .../features/ChatAppearance/ChatPreview.tsx | 3 +- .../ChatAppearance/ChatTransitionPreview.tsx | 4 +- .../ChatAppearance/HighlighterPreview.tsx | 3 +- .../ChatAppearance/MermaidPreview.tsx | 4 +- .../features/ChatAppearance/index.tsx | 68 +- .../common/features/Appearance/Preview.tsx | 58 +- .../ThemeSwatches/ThemeSwatchesNeutral.tsx | 5 +- .../ThemeSwatches/ThemeSwatchesPrimary.tsx | 5 +- .../common/features/Appearance/index.tsx | 8 +- .../common/features/Common/Common.tsx | 22 +- .../settings/features/SettingHeader.tsx | 6 +- .../(main)/settings/features/UpgradeAlert.tsx | 2 +- .../(main)/settings/hooks/useCategory.tsx | 4 +- .../(main)/settings/hooks/useSyncSettings.ts | 2 +- .../settings/hotkey/features/Conversation.tsx | 11 +- .../settings/hotkey/features/Desktop.tsx | 14 +- .../settings/hotkey/features/Essential.tsx | 11 +- .../(main)/settings/image/features/Image.tsx | 9 +- src/app/[variants]/(main)/settings/index.tsx | 2 +- .../settings/memory/features/Memory.tsx | 7 +- .../settings/profile/features/AvatarRow.tsx | 6 +- .../settings/profile/features/FullNameRow.tsx | 20 +- .../profile/features/InterestsRow.tsx | 42 +- .../KlavisAuthorizationList/index.tsx | 6 +- .../settings/profile/features/PasswordRow.tsx | 6 +- .../settings/profile/features/ProfileRow.tsx | 6 +- .../features/SSOProvidersList/index.tsx | 14 +- .../settings/profile/features/UsernameRow.tsx | 20 +- .../(main)/settings/profile/index.tsx | 6 +- .../settings/provider/(list)/Footer.tsx | 6 +- .../provider/(list)/ProviderGrid/Card.tsx | 8 +- .../(list)/ProviderGrid/EnableSwitch.tsx | 4 +- .../provider/(list)/ProviderGrid/index.tsx | 12 +- .../provider/ProviderMenu/Actions.tsx | 3 +- .../settings/provider/ProviderMenu/AddNew.tsx | 4 +- .../settings/provider/ProviderMenu/All.tsx | 2 +- .../settings/provider/ProviderMenu/Item.tsx | 7 +- .../settings/provider/ProviderMenu/List.tsx | 28 +- .../SortProviderModal/GroupItem.tsx | 4 +- .../ProviderMenu/SortProviderModal/index.tsx | 14 +- .../settings/provider/ProviderMenu/index.tsx | 21 +- .../provider/ProviderMenu/useDropdownMenu.tsx | 3 +- .../provider/_layout/Desktop/Container.tsx | 2 +- .../provider/_layout/Desktop/index.tsx | 4 +- .../settings/provider/_layout/Mobile.tsx | 2 +- .../settings/provider/detail/azure/index.tsx | 4 +- .../provider/detail/azureai/index.tsx | 2 +- .../provider/detail/bedrock/index.tsx | 6 +- .../provider/detail/cloudflare/index.tsx | 4 +- .../provider/detail/comfyui/index.tsx | 4 +- .../provider/detail/default/index.tsx | 3 +- .../settings/provider/detail/github/index.tsx | 4 +- .../(main)/settings/provider/detail/index.tsx | 3 +- .../provider/detail/ollama/CheckError.tsx | 5 +- .../provider/detail/ollama/Container.tsx | 3 +- .../provider/detail/vertexai/index.tsx | 6 +- .../features/CreateNewProvider/index.tsx | 31 +- .../ExtendParamsSelect.tsx | 26 +- .../ModelList/CreateNewModelModal/Form.tsx | 7 +- .../ModelList/CreateNewModelModal/index.tsx | 18 +- .../features/ModelList/DisabledModels.tsx | 4 +- .../features/ModelList/EmptyModels.tsx | 4 +- .../ModelList/EnabledModelList/index.tsx | 10 +- .../ModelList/ModelConfigModal/index.tsx | 18 +- .../provider/features/ModelList/ModelItem.tsx | 39 +- .../features/ModelList/ModelTitle/Search.tsx | 5 +- .../features/ModelList/ModelTitle/index.tsx | 20 +- .../features/ModelList/SearchResult.tsx | 4 +- .../features/ModelList/SkeletonList.tsx | 8 +- .../ModelList/SortModelModal/ListItem.tsx | 4 +- .../ModelList/SortModelModal/index.tsx | 14 +- .../provider/features/ModelList/index.tsx | 8 +- .../features/ProviderConfig/Checker.tsx | 66 +- .../features/ProviderConfig/EnableSwitch.tsx | 2 +- .../OAuthDeviceFlowAuth/index.tsx | 25 +- .../UpdateProviderInfo/SettingModal.tsx | 32 +- .../UpdateProviderInfo/index.tsx | 6 +- .../features/ProviderConfig/index.tsx | 49 +- .../(main)/settings/provider/index.tsx | 6 +- .../(main)/settings/provider/type.ts | 2 +- .../settings/proxy/features/ProxyForm.tsx | 35 +- .../settings/skill/features/Actions.tsx | 18 +- .../skill/features/EditCustomPlugin.tsx | 11 +- .../skill/features/KlavisSkillItem.tsx | 25 +- .../skill/features/LobehubSkillItem.tsx | 24 +- .../settings/skill/features/McpSkillItem.tsx | 18 +- .../settings/skill/features/SkillList.tsx | 13 +- .../(main)/settings/skill/index.tsx | 4 +- .../features/components/StatsFormGroup.tsx | 10 +- .../stats/features/components/TimeLabel.tsx | 7 +- .../features/components/UsageBarChart.tsx | 5 +- .../features/overview/ShareButton/Preview.tsx | 10 +- .../overview/ShareButton/ShareModal.tsx | 12 +- .../features/overview/ShareButton/index.tsx | 4 +- .../stats/features/overview/Welcome.tsx | 8 +- .../features/rankings/AssistantsRank.tsx | 20 +- .../stats/features/rankings/ModelsRank.tsx | 16 +- .../stats/features/rankings/TopicsRank.tsx | 20 +- .../UsageCards/ActiveModels/ModelTable.tsx | 17 +- .../usage/UsageCards/ActiveModels/index.tsx | 13 +- .../features/usage/UsageCards/MonthSpend.tsx | 6 +- .../features/usage/UsageCards/TodaySpend.tsx | 4 +- .../stats/features/usage/UsageCards/index.tsx | 4 +- .../stats/features/usage/UsageTable.tsx | 10 +- .../stats/features/usage/UsageTrends.tsx | 15 +- .../features/visualization/AiHeatmaps.tsx | 11 +- .../(main)/settings/stats/index.tsx | 19 +- .../[variants]/(main)/settings/stats/types.ts | 2 +- .../settings/storage/features/Advanced.tsx | 9 +- .../features/ToolDetectorSection.tsx | 24 +- .../(main)/settings/tts/features/OpenAI.tsx | 8 +- .../(main)/settings/tts/features/STT.tsx | 8 +- .../(mobile)/(home)/_layout/MobileLayout.tsx | 4 +- .../(mobile)/(home)/_layout/SessionHeader.tsx | 8 +- .../(home)/_layout/SessionSearchBar.tsx | 5 +- .../(mobile)/(home)/_layout/index.tsx | 2 +- .../CollapseGroup/Actions.tsx | 11 +- .../CollapseGroup/index.tsx | 9 +- .../SessionListContent/DefaultMode.tsx | 17 +- .../SessionListContent/Inbox/index.tsx | 4 +- .../SessionListContent/List/AddButton.tsx | 4 +- .../SessionListContent/List/Item/Actions.tsx | 2 +- .../SessionListContent/List/Item/index.tsx | 16 +- .../SessionListContent/List/index.tsx | 4 +- .../SessionListContent/ListItem/index.tsx | 3 +- .../Modals/ConfigGroupModal/GroupItem.tsx | 14 +- .../Modals/ConfigGroupModal/index.tsx | 16 +- .../Modals/CreateGroupModal.tsx | 15 +- .../Modals/RenameGroupModal.tsx | 11 +- .../SessionListContent/SearchMode.tsx | 3 +- src/app/[variants]/(mobile)/(home)/index.tsx | 2 +- .../[variants]/(mobile)/_layout/NavBar.tsx | 3 +- src/app/[variants]/(mobile)/_layout/index.tsx | 3 +- .../(mobile)/chat/_layout/index.tsx | 2 +- .../features/ChatHeader/ChatHeaderTitle.tsx | 4 +- .../chat/features/ChatHeader/index.tsx | 6 +- .../features/AgentConfig/Header/Avatar.tsx | 12 +- .../features/AgentConfig/Header/index.tsx | 2 +- .../Topic/features/AgentConfig/SystemRole.tsx | 25 +- .../Topic/features/AgentConfig/index.tsx | 9 +- .../features/Topic/features/ConfigLayout.tsx | 11 +- .../features/Topic/features/TopicModal.tsx | 7 +- .../(mobile)/chat/settings/_layout/Header.tsx | 4 +- .../(mobile)/chat/settings/_layout/index.tsx | 2 +- .../features/AgentInfoDescription/index.tsx | 22 +- .../chat/settings/features/SettingButton.tsx | 2 +- .../(mobile)/chat/settings/index.tsx | 6 +- .../community/(detail)/_layout/Header.tsx | 2 +- .../community/(list)/_layout/Header.tsx | 6 +- .../(mobile)/community/(list)/_layout/Nav.tsx | 24 +- .../community/(list)/_layout/index.tsx | 2 +- .../(mobile)/me/(home)/features/Header.tsx | 2 +- .../me/(home)/features/useCategory.tsx | 2 +- .../[variants]/(mobile)/me/(home)/index.tsx | 2 +- .../[variants]/(mobile)/me/(home)/layout.tsx | 2 +- .../(mobile)/me/profile/features/Category.tsx | 3 +- .../(mobile)/me/profile/features/Header.tsx | 6 +- .../(mobile)/me/settings/features/Header.tsx | 6 +- .../me/settings/features/useCategory.tsx | 2 +- .../(mobile)/me/settings/layout.tsx | 2 +- src/app/[variants]/(mobile)/router/index.tsx | 3 +- .../(mobile)/router/mobileRouter.config.tsx | 5 +- .../(mobile)/settings/_layout/Header.tsx | 8 +- src/app/[variants]/layout.tsx | 17 +- src/app/[variants]/metadata.ts | 2 +- .../[variants]/onboarding/_layout/index.tsx | 4 +- .../components/KlavisServerItem.tsx | 13 +- .../components/ServerIcon.tsx | 2 +- .../components/ServerStatusControl.tsx | 5 +- .../hooks/useKlavisServerActions.ts | 2 +- .../onboarding/components/LobeMessage.tsx | 6 +- .../onboarding/features/FullNameStep.tsx | 20 +- .../onboarding/features/InterestsStep.tsx | 28 +- .../onboarding/features/ModeSelectionStep.tsx | 18 +- .../onboarding/features/ProSettingsStep.tsx | 10 +- .../features/ResponseLanguageStep.tsx | 33 +- .../onboarding/features/TelemetryStep.tsx | 21 +- src/app/[variants]/page.tsx | 5 +- .../router/desktopRouter.config.tsx | 3 +- src/app/[variants]/router/index.tsx | 3 +- .../[variants]/share/t/[id]/_layout/Title.tsx | 2 +- .../[variants]/share/t/[id]/_layout/index.tsx | 15 +- .../share/t/[id]/features/ActionBar.tsx | 12 +- src/app/[variants]/share/t/[id]/index.tsx | 6 +- src/app/__tests__/desktop.routes.test.ts | 1 + src/app/robots.tsx | 2 +- src/app/sitemap.tsx | 2 +- src/app/sw.ts | 2 +- src/business/client/BusinessDesktopRoutes.tsx | 2 +- .../client/BusinessGlobalProvider.tsx | 2 +- src/business/client/BusinessMobileRoutes.tsx | 2 +- .../features/User/useBusinessMenuItems.tsx | 2 +- .../hooks/useBusinessErrorAlertConfig.ts | 2 +- .../client/hooks/useBusinessErrorContent.ts | 2 +- .../client/hooks/useBusinessSignup.tsx | 8 +- .../hooks/useRenderBusinessBatchItem.tsx | 4 +- ...useRenderBusinessChatErrorMessageExtra.tsx | 6 +- src/business/server/better-auth.ts | 2 +- .../image-generation/chargeAfterGenerate.ts | 4 +- .../image-generation/chargeBeforeGenerate.ts | 4 +- src/business/server/lambda-routers/file.ts | 2 +- src/business/server/user.ts | 5 +- src/components/404/index.tsx | 5 +- src/components/Analytics/Clarity.tsx | 2 +- src/components/Analytics/Desktop.tsx | 2 +- .../Analytics/LobeAnalyticsProvider.tsx | 8 +- .../LobeAnalyticsProviderWrapper.tsx | 3 +- src/components/Analytics/Plausible.tsx | 2 +- src/components/Analytics/Umami.tsx | 2 +- src/components/Analytics/index.tsx | 3 +- src/components/AnimatedCollapsed/index.tsx | 3 +- src/components/BootErrorBoundary/index.tsx | 13 +- src/components/BrandWatermark/index.tsx | 5 +- src/components/Branding/OrgBrand/index.tsx | 3 +- .../Branding/ProductLogo/Custom.tsx | 18 +- src/components/Branding/ProductLogo/index.tsx | 3 +- src/components/BrowserIcon/types.ts | 2 +- src/components/Cell/index.tsx | 12 +- src/components/ChangelogModal/index.tsx | 8 +- .../ChatGroupWizard/ChatGroupWizard.tsx | 73 +- src/components/CopyableLabel/index.tsx | 5 +- src/components/DataStyleModal/index.tsx | 17 +- src/components/DebugNode.tsx | 5 +- src/components/Descriptions/index.tsx | 17 +- src/components/DragUpload/index.tsx | 6 +- .../DragUpload/useDragUpload.test.tsx | 3 +- src/components/DragUpload/useDragUpload.tsx | 2 +- .../DragUploadZone/DragUploadProvider.tsx | 12 +- src/components/DragUploadZone/index.tsx | 11 +- .../DragUploadZone/useLocalDragUpload.ts | 2 +- src/components/DragUploadZone/usePasteFile.ts | 2 +- src/components/Editor/AutoSaveHint.tsx | 5 +- src/components/EmojiPicker/index.tsx | 3 +- src/components/Error/Description.tsx | 4 +- src/components/Error/index.tsx | 4 +- src/components/FeatureList/index.tsx | 4 +- src/components/FeedbackModal/index.tsx | 16 +- .../FileParsingStatus/EmbeddingStatus.tsx | 15 +- src/components/FileParsingStatus/index.tsx | 23 +- src/components/FormAction/index.tsx | 6 +- src/components/FormInput/FormInput.tsx | 7 +- src/components/FormInput/FormPassword.tsx | 7 +- .../FormInput/FormSliderWithInput.tsx | 3 +- src/components/GalleyGrid/Grid.tsx | 5 +- src/components/GalleyGrid/index.tsx | 3 +- src/components/GoBack/index.tsx | 2 +- src/components/GroupIcon/index.tsx | 2 +- src/components/GuideModal/index.tsx | 8 +- src/components/GuideVideo/index.tsx | 6 +- .../HighlightNotification/index.tsx | 7 +- .../HtmlPreview/HtmlPreviewAction.tsx | 4 +- src/components/HtmlPreview/PreviewDrawer.tsx | 16 +- src/components/ImageItem/index.tsx | 34 +- src/components/IndexCard/index.tsx | 16 +- src/components/InfoTooltip/index.tsx | 6 +- src/components/InitProgress/index.tsx | 7 +- src/components/InlineRename/index.tsx | 20 +- src/components/InlineTable/index.tsx | 3 +- src/components/InstantSwitch/index.tsx | 7 +- src/components/InvalidAPIKey/Bedrock.tsx | 34 +- src/components/InvalidAPIKey/ComfyUIForm.tsx | 28 +- .../InvalidAPIKey/ProviderApiKeyForm.tsx | 21 +- src/components/InvalidAPIKey/index.tsx | 8 +- .../JSONSchemaConfig/ItemRender.tsx | 2 +- src/components/KeyValueEditor/index.tsx | 18 +- src/components/LabsModal/LabCard.tsx | 7 +- src/components/LabsModal/index.tsx | 4 +- src/components/Link.tsx | 3 +- .../Loading/CircleLoading/index.tsx | 2 +- .../Loading/FullscreenLoading/index.tsx | 6 +- .../Loading/SkeletonLoading/index.tsx | 2 +- .../Loading/UpdateLoading/index.tsx | 8 +- src/components/MCPStdioCommandInput/index.tsx | 9 +- src/components/ManifestPreviewer/index.tsx | 9 +- src/components/MaxTokenSlider.tsx | 12 +- .../MemberSelectionModal.tsx | 40 +- src/components/Menu/index.tsx | 3 +- src/components/ModelSelect/index.tsx | 31 +- src/components/NeuralNetworkLoading/index.tsx | 3 +- src/components/Notification/index.tsx | 9 +- src/components/OllamaSetupGuide/index.tsx | 48 +- src/components/PanelTitle/index.tsx | 3 +- src/components/Plugins/PluginAvatar.tsx | 3 +- src/components/ProgressItem/index.tsx | 9 +- src/components/PublishedTime.tsx | 5 +- src/components/SafeSpacing/index.tsx | 3 +- src/components/SidebarHeader/index.tsx | 14 +- src/components/Statistic/index.tsx | 5 +- .../StatisticCard/TitleWithPercentage.tsx | 7 +- src/components/StatisticCard/index.tsx | 7 +- src/components/StopLoading.tsx | 5 +- src/components/StreamingMarkdown/index.tsx | 5 +- src/components/StructuredData/index.tsx | 2 +- src/components/TextArea/index.tsx | 7 +- src/components/TipGuide/index.tsx | 15 +- src/components/TodoList.tsx | 10 +- src/components/WebFavicon/index.tsx | 2 +- src/components/client/ClientOnly.tsx | 3 +- .../client/ClientResponsiveContent/index.tsx | 7 +- .../client/ClientResponsiveLayout.tsx | 7 +- src/components/mdx/CodeBlock.tsx | 4 +- src/components/mdx/Image.tsx | 9 +- src/components/mdx/Link.tsx | 2 +- src/components/mdx/index.tsx | 8 +- src/components/server/MobileNavLayout.tsx | 9 +- src/components/server/ServerLayout.tsx | 4 +- src/components/withSuspense.tsx | 3 +- src/config/featureFlags/schema.test.ts | 2 +- src/config/featureFlags/utils/parser.ts | 3 +- src/config/routes/index.ts | 4 +- src/envs/__tests__/analytics.test.ts | 2 +- .../AgentBuilder/AgentBuilderConversation.tsx | 2 +- .../AgentBuilder/AgentBuilderProvider.tsx | 8 +- .../AgentBuilder/AgentBuilderWelcome.tsx | 2 +- src/features/AgentBuilder/TopicSelector.tsx | 9 +- src/features/AgentInfo/index.tsx | 9 +- src/features/AgentSelectionEmpty.tsx | 5 +- .../AgentSetting/AgentCategory/index.tsx | 6 +- .../AgentCategory/useCategory.tsx | 2 +- src/features/AgentSetting/AgentChat/index.tsx | 5 +- .../AgentMeta/AutoGenerateAvatar.tsx | 8 +- .../AgentMeta/AutoGenerateInput.tsx | 9 +- .../AgentMeta/AutoGenerateSelect.tsx | 17 +- .../AgentMeta/BackgroundSwatches.tsx | 7 +- src/features/AgentSetting/AgentMeta/index.tsx | 11 +- .../AgentSetting/AgentModal/ModelSelect.tsx | 2 +- .../AgentSetting/AgentModal/index.tsx | 46 +- .../AgentOpening/OpeningMessage.tsx | 18 +- .../AgentOpening/OpeningQuestions.tsx | 8 +- .../AgentSetting/AgentOpening/index.tsx | 4 +- .../AgentPlugin/AddPluginButton.tsx | 18 +- .../AgentPlugin/LocalPluginItem.tsx | 4 +- .../AgentPlugin/PluginAction/index.tsx | 4 +- .../AgentSetting/AgentPlugin/index.tsx | 20 +- .../AgentSetting/AgentPrompt/index.tsx | 24 +- src/features/AgentSetting/AgentSettings.tsx | 4 +- .../AgentSetting/AgentSettingsContent.tsx | 3 +- .../AgentSetting/AgentSettingsProvider.tsx | 8 +- .../AgentTTS/SelectWithTTSPreview.tsx | 45 +- src/features/AgentSetting/AgentTTS/index.tsx | 11 +- src/features/AgentSetting/StoreUpdater.tsx | 9 +- .../AgentSetting/hooks/useAgentSettings.ts | 2 +- src/features/AgentSetting/store/action.ts | 33 +- src/features/AgentSetting/store/index.ts | 7 +- .../AgentSetting/store/initialState.ts | 4 +- .../AgentSetting/store/reducers/config.ts | 2 +- .../AgentSetting/store/reducers/meta.ts | 2 +- src/features/AgentSetting/store/selectors.ts | 4 +- src/features/AlertBanner/CloudBanner.tsx | 4 +- src/features/AuthCard/index.tsx | 6 +- src/features/AvatarWithUpload/index.tsx | 5 +- .../ChatInput/ActionBar/AgentMode/index.tsx | 8 +- .../ChatInput/ActionBar/Clear/index.tsx | 4 +- .../ChatInput/ActionBar/History/Controls.tsx | 21 +- .../ChatInput/ActionBar/History/index.tsx | 14 +- .../ChatInput/ActionBar/Knowledge/index.tsx | 16 +- .../ActionBar/Knowledge/useControls.tsx | 3 +- .../ChatInput/ActionBar/Mention/index.tsx | 7 +- .../ActionBar/Model/ContextCachingSwitch.tsx | 2 +- .../ActionBar/Model/ControlsForm.tsx | 14 +- .../Model/GPT51ReasoningEffortSlider.tsx | 3 +- .../Model/GPT52ProReasoningEffortSlider.tsx | 3 +- .../Model/GPT52ReasoningEffortSlider.tsx | 3 +- .../Model/GPT5ReasoningEffortSlider.tsx | 3 +- .../Model/ImageAspectRatioSelect.tsx | 6 +- .../ActionBar/Model/ImageResolutionSlider.tsx | 3 +- .../ChatInput/ActionBar/Model/LevelSlider.tsx | 9 +- .../ActionBar/Model/ReasoningEffortSlider.tsx | 3 +- .../ActionBar/Model/ReasoningTokenSlider.tsx | 10 +- .../ActionBar/Model/TextVerbositySlider.tsx | 3 +- .../ActionBar/Model/ThinkingBudgetSlider.tsx | 24 +- .../ActionBar/Model/ThinkingLevel2Slider.tsx | 3 +- .../ActionBar/Model/ThinkingLevelSlider.tsx | 3 +- .../ActionBar/Model/ThinkingSlider.tsx | 3 +- .../ActionBar/Model/createLevelSlider.tsx | 13 +- .../ChatInput/ActionBar/Model/index.tsx | 10 +- .../ChatInput/ActionBar/Params/Controls.tsx | 26 +- .../ChatInput/ActionBar/Params/index.tsx | 4 +- .../ChatInput/ActionBar/STT/browser.tsx | 7 +- .../ChatInput/ActionBar/STT/common.tsx | 20 +- .../ChatInput/ActionBar/STT/openai.tsx | 7 +- .../ChatInput/ActionBar/SaveTopic/index.tsx | 10 +- .../ChatInput/ActionBar/Search/Controls.tsx | 7 +- .../ActionBar/Search/FCSearchModel.tsx | 12 +- .../FunctionCallingModelSelect/index.tsx | 18 +- .../ActionBar/Search/ModelBuiltinSearch.tsx | 8 +- .../ChatInput/ActionBar/Search/index.tsx | 24 +- .../ActionBar/Token/TokenProgress.tsx | 10 +- .../ChatInput/ActionBar/Token/TokenTag.tsx | 10 +- .../ChatInput/ActionBar/Token/index.tsx | 5 +- .../ActionBar/Tools/KlavisServerItem.tsx | 25 +- .../ActionBar/Tools/KlavisSkillIcon.tsx | 2 +- .../ActionBar/Tools/LobehubSkillIcon.tsx | 2 +- .../Tools/LobehubSkillServerItem.tsx | 26 +- .../ActionBar/Tools/PopoverContent.tsx | 11 +- .../ChatInput/ActionBar/Tools/ToolItem.tsx | 7 +- .../ChatInput/ActionBar/Tools/ToolsList.tsx | 5 +- .../ChatInput/ActionBar/Tools/index.tsx | 6 +- .../ChatInput/ActionBar/Tools/useControls.tsx | 3 +- .../ChatInput/ActionBar/Typo/index.tsx | 2 +- .../ChatInput/ActionBar/Upload/ServerMode.tsx | 37 +- .../ChatInput/ActionBar/components/Action.tsx | 21 +- .../ActionBar/components/ActionDropdown.tsx | 17 +- .../ActionBar/components/ActionPopover.tsx | 14 +- .../components/CheckboxWithLoading.tsx | 15 +- src/features/ChatInput/ActionBar/config.ts | 2 +- src/features/ChatInput/ActionBar/index.tsx | 13 +- src/features/ChatInput/ChatInputProvider.tsx | 12 +- .../ContextContainer/ContextItem/Content.tsx | 2 +- .../ContextItem/FilePreviewModal.tsx | 8 +- .../ContextContainer/ContextItem/index.tsx | 7 +- .../Desktop/ContextContainer/ContextList.tsx | 8 +- .../ContextContainer/SelectionItem.tsx | 4 +- .../Desktop/FilePreview/FileItem/Content.tsx | 2 +- .../Desktop/FilePreview/FileItem/index.tsx | 10 +- .../Desktop/FilePreview/FileList.tsx | 4 +- .../MentionedUsers/MentionedUserItem.tsx | 2 +- .../Desktop/MentionedUsers/index.tsx | 2 +- src/features/ChatInput/Desktop/index.tsx | 19 +- .../ChatInput/InputEditor/Placeholder.tsx | 12 +- src/features/ChatInput/InputEditor/index.tsx | 56 +- .../ChatInput/InputEditor/useSlashItems.tsx | 4 +- .../Mobile/FilePreview/FileItem/File.tsx | 8 +- .../Mobile/FilePreview/FileItem/Image.tsx | 26 +- .../Mobile/FilePreview/FileItem/index.tsx | 7 +- .../ChatInput/Mobile/FilePreview/index.tsx | 4 +- src/features/ChatInput/Mobile/index.tsx | 8 +- .../ChatInput/SendArea/ExpandButton.tsx | 10 +- .../ChatInput/SendArea/SendButton.tsx | 4 +- .../ChatInput/SendArea/ShortcutHint.tsx | 8 +- src/features/ChatInput/SendArea/index.tsx | 5 +- src/features/ChatInput/StoreUpdater.tsx | 9 +- src/features/ChatInput/TypoBar/index.tsx | 10 +- .../components/UploadDetail/UploadStatus.tsx | 12 +- .../components/UploadDetail/index.tsx | 8 +- .../ChatInput/hooks/useChatInputEditor.ts | 2 +- .../ChatInput/hooks/useUpdateAgentConfig.ts | 2 +- src/features/ChatInput/store/action.ts | 5 +- src/features/ChatInput/store/index.ts | 9 +- src/features/ChatInput/store/initialState.ts | 4 +- src/features/ChatInput/store/selectors.ts | 3 +- src/features/ChatMiniMap/MinimapIndicator.tsx | 4 +- src/features/ChatMiniMap/index.tsx | 8 +- src/features/CommandMenu/AskAIMenu.tsx | 28 +- src/features/CommandMenu/AskAgentCommands.tsx | 8 +- .../CommandMenu/CommandMenuContext.tsx | 14 +- src/features/CommandMenu/ContextCommands.tsx | 4 +- src/features/CommandMenu/MainMenu.tsx | 26 +- src/features/CommandMenu/SearchResults.tsx | 10 +- src/features/CommandMenu/ThemeMenu.tsx | 6 +- .../CommandMenu/components/CommandInput.tsx | 4 +- .../CommandMenu/components/CommandItem.tsx | 4 +- src/features/CommandMenu/index.tsx | 24 +- .../CommandMenu/utils/contextCommands.ts | 2 +- src/features/Conversation/ChatInput/index.tsx | 21 +- .../Conversation/ChatItem/ChatItem.tsx | 6 +- .../ChatItem/components/Actions.tsx | 2 +- .../ChatItem/components/Avatar.tsx | 5 +- .../ChatItem/components/ErrorContent.tsx | 18 +- .../ChatItem/components/Loading.tsx | 2 +- .../components/MessageContent/index.tsx | 13 +- .../ChatItem/components/Title.tsx | 2 +- src/features/Conversation/ChatItem/type.ts | 6 +- .../ChatList/components/BackBottom/index.tsx | 10 +- .../ChatList/components/VirtualizedList.tsx | 14 +- .../hooks/useScrollToUserMessage.test.ts | 2 +- src/features/Conversation/ChatList/index.tsx | 5 +- .../Conversation/ConversationProvider.tsx | 7 +- .../Conversation/Error/BaseErrorForm.tsx | 9 +- .../Conversation/Error/ChatInvalidApiKey.tsx | 8 +- .../OllamaBizError/InvalidOllamaModel.tsx | 2 +- .../Error/OllamaBizError/index.tsx | 7 +- .../Error/OllamaSetupGuide/Desktop.tsx | 6 +- .../Error/OllamaSetupGuide/index.tsx | 2 +- src/features/Conversation/Error/index.tsx | 17 +- src/features/Conversation/Error/style.tsx | 8 +- src/features/Conversation/Markdown/index.tsx | 7 +- .../plugins/LobeArtifact/Render/Icon.tsx | 2 +- .../plugins/LobeArtifact/Render/index.tsx | 16 +- .../Markdown/plugins/LobeArtifact/index.ts | 6 +- .../Markdown/plugins/LobeThinking/Render.tsx | 2 +- .../Markdown/plugins/LobeThinking/index.ts | 2 +- .../plugins/LocalFile/Render/index.tsx | 2 +- .../Markdown/plugins/LocalFile/index.ts | 4 +- .../Markdown/plugins/Mention/Render.tsx | 6 +- .../Markdown/plugins/Mention/index.ts | 2 +- .../Markdown/plugins/Thinking/Render.tsx | 2 +- .../Markdown/plugins/Thinking/index.ts | 2 +- .../Conversation/Markdown/plugins/index.ts | 2 +- .../remarkPlugins/getNodeContent.test.ts | 2 +- .../plugins/remarkPlugins/getNodeContent.ts | 2 +- .../Conversation/Markdown/plugins/type.ts | 2 +- .../components/AutoScrollShadow.tsx | 7 +- .../AgentCouncil/components/CouncilList.tsx | 4 +- .../AgentCouncil/components/CouncilMember.tsx | 15 +- .../components/ScrollShadowWithButton.tsx | 13 +- .../Messages/AgentCouncil/index.tsx | 16 +- .../Messages/Assistant/Actions/Error.tsx | 2 +- .../Assistant/Actions/useAssistantActions.ts | 2 +- .../Messages/Assistant/Extra/index.tsx | 4 +- .../Assistant/components/MessageContent.tsx | 2 +- .../Conversation/Messages/Assistant/index.tsx | 27 +- .../Messages/Assistant/useMarkdown.tsx | 2 +- .../AssistantGroup/Actions/useGroupActions.ts | 2 +- .../AssistantGroup/Tool/Actions/Settings.tsx | 6 +- .../AssistantGroup/Tool/Actions/index.tsx | 10 +- .../AssistantGroup/Tool/Debug/index.tsx | 7 +- .../Tool/Detail/Arguments/index.tsx | 16 +- .../Tool/Detail/ErrorResponse.tsx | 8 +- .../Detail/Intervention/ApprovalActions.tsx | 22 +- .../Tool/Detail/Intervention/Fallback.tsx | 8 +- .../Detail/Intervention/KeyValueEditor.tsx | 25 +- .../Tool/Detail/Intervention/ModeSelector.tsx | 5 +- .../Tool/Detail/Intervention/index.tsx | 6 +- .../Tool/Detail/PluginSettings.tsx | 6 +- .../Tool/Detail/RejectedResponse.tsx | 2 +- .../Tool/Detail/Render/CustomRender.tsx | 2 +- .../Detail/Render/FallbacktArgumentRender.tsx | 2 +- .../Tool/Detail/Render/index.tsx | 2 +- .../AssistantGroup/Tool/Detail/index.tsx | 12 +- .../Tool/Inspector/StatusIndicator.tsx | 8 +- .../AssistantGroup/Tool/Inspector/index.tsx | 6 +- .../Messages/AssistantGroup/Tool/index.tsx | 12 +- .../Messages/AssistantGroup/Tools.tsx | 2 +- .../components/CollapsedMessage.tsx | 4 +- .../components/ContentBlock.tsx | 4 +- .../AssistantGroup/components/EditState.tsx | 4 +- .../AssistantGroup/components/Group.tsx | 2 +- .../AssistantGroup/components/GroupItem.tsx | 2 +- .../Messages/AssistantGroup/index.tsx | 17 +- .../Messages/AssistantGroup/useMarkdown.tsx | 5 +- .../CompressedGroup/CompressedMessageItem.tsx | 10 +- .../Contexts/MessageActionProvider.tsx | 7 +- .../Contexts/message-action-context.ts | 3 +- .../GroupTasks/TaskItem/ClientTaskItem.tsx | 15 +- .../GroupTasks/TaskItem/ServerTaskItem.tsx | 13 +- .../GroupTasks/TaskItem/TaskTitle.tsx | 14 +- .../Messages/GroupTasks/index.tsx | 18 +- .../Messages/Supervisor/Actions/index.tsx | 4 +- .../Supervisor/Actions/useGroupActions.ts | 2 +- .../components/CollapsedMessage.tsx | 4 +- .../Supervisor/components/ContentBlock.tsx | 2 +- .../Messages/Supervisor/components/Group.tsx | 2 +- .../Messages/Supervisor/index.tsx | 19 +- .../Messages/Task/Actions/Error.tsx | 2 +- .../Messages/Task/Actions/index.tsx | 9 +- .../Task/Actions/useAssistantActions.ts | 2 +- .../ClientTaskDetail/InitializingState.tsx | 2 +- .../Messages/Task/ClientTaskDetail/index.tsx | 3 +- .../Task/TaskDetailPanel/StatusContent.tsx | 5 +- .../Messages/Task/TaskDetailPanel/index.tsx | 2 +- .../Task/components/MessageContent.tsx | 2 +- .../Conversation/Messages/Task/index.tsx | 20 +- .../Tasks/TaskItem/ClientTaskItem.tsx | 9 +- .../Tasks/TaskItem/ServerTaskItem.tsx | 7 +- .../Messages/Tasks/TaskItem/TaskTitle.tsx | 14 +- .../Conversation/Messages/Tasks/index.tsx | 10 +- .../Messages/Tasks/shared/CompletedState.tsx | 19 +- .../Messages/Tasks/shared/ErrorState.tsx | 9 +- .../Tasks/shared/InitializingState.tsx | 2 +- .../Messages/Tasks/shared/ProcessingState.tsx | 22 +- .../Messages/Tasks/shared/TaskAvatar.tsx | 6 +- .../Messages/Tasks/shared/TaskContent.tsx | 5 +- .../Messages/Tasks/shared/TaskMessages.tsx | 29 +- .../Messages/Tasks/shared/useTaskPolling.ts | 2 +- .../Messages/Tasks/shared/utils.ts | 6 +- .../Tool/ErrorBoundary/ErrorResult.tsx | 13 +- .../Messages/Tool/ErrorBoundary/index.tsx | 3 +- .../Conversation/Messages/Tool/Tool/index.tsx | 11 +- .../Conversation/Messages/Tool/index.tsx | 8 +- .../Messages/User/Actions/index.tsx | 6 +- .../Messages/User/Actions/useUserActions.ts | 2 +- .../Conversation/Messages/User/Extra.tsx | 2 +- .../User/components/ContentPreview.tsx | 4 +- .../User/components/FileListViewer/Item.tsx | 12 +- .../User/components/FileListViewer/index.tsx | 2 +- .../User/components/MessageContent.tsx | 2 +- .../User/components/PageSelections.tsx | 4 +- .../User/components/VideoFileListViewer.tsx | 2 +- .../Conversation/Messages/User/index.tsx | 25 +- .../Messages/User/useMarkdown.tsx | 5 +- .../Messages/components/ContentLoading.tsx | 4 +- .../Messages/components/DisplayContent.tsx | 2 +- .../components/Extras/ExtraContainer.tsx | 3 +- .../components/Extras/TTS/FilePlayer.tsx | 2 +- .../components/Extras/TTS/InitPlayer.tsx | 2 +- .../Messages/components/Extras/TTS/Player.tsx | 23 +- .../Messages/components/Extras/TTS/index.tsx | 3 +- .../Messages/components/Extras/Translate.tsx | 20 +- .../Extras/Usage/UsageDetail/ModelCard.tsx | 28 +- .../Usage/UsageDetail/TokenProgress.tsx | 8 +- .../Extras/Usage/UsageDetail/index.tsx | 35 +- .../Extras/Usage/UsageDetail/pricing.ts | 2 +- .../Extras/Usage/UsageDetail/tokens.ts | 4 +- .../components/Extras/Usage/index.tsx | 6 +- .../components/FileChunks/ChunkItem.tsx | 6 +- .../Messages/components/FileChunks/index.tsx | 10 +- .../components/IntentUnderstanding.tsx | 4 +- .../Messages/components/MessageBranch.tsx | 6 +- .../Messages/components/Reasoning.tsx | 2 +- .../components/RichContentRenderer.tsx | 2 +- .../Messages/components/SearchGrounding.tsx | 24 +- src/features/Conversation/Messages/index.tsx | 5 +- .../Conversation/TodoProgress/index.tsx | 14 +- .../Conversation/components/History/index.tsx | 4 +- .../ShareMessageModal/ShareImage/Preview.tsx | 14 +- .../ShareMessageModal/ShareImage/index.tsx | 14 +- .../ShareMessageModal/ShareImage/type.ts | 2 +- .../ShareMessageModal/ShareText/index.tsx | 12 +- .../ShareText/template.test.ts | 2 +- .../ShareMessageModal/ShareText/template.ts | 6 +- .../components/ShareMessageModal/index.tsx | 15 +- .../Conversation/components/SkeletonList.tsx | 6 +- .../components/Thinking/StatusIndicator.tsx | 8 +- .../components/Thinking/Title.tsx | 2 +- .../components/Thinking/index.tsx | 12 +- .../Conversation/hooks/useAgentMeta.ts | 2 +- .../hooks/useChatItemContextMenu.tsx | 12 +- .../Conversation/hooks/useDoubleClickEdit.ts | 3 +- src/features/Conversation/store/action.ts | 3 +- src/features/Conversation/store/index.ts | 5 +- .../Conversation/store/initialState.ts | 13 +- .../store/slices/data/action.test.ts | 2 +- .../Conversation/store/slices/data/action.ts | 3 +- .../store/slices/data/reducer.test.ts | 5 +- .../store/slices/generation/action.ts | 24 +- .../store/slices/message/action/crud.ts | 17 +- .../store/slices/message/action/index.ts | 3 +- .../store/slices/message/action/state.test.ts | 2 +- .../store/slices/messageState/selectors.ts | 4 +- src/features/Conversation/types/context.ts | 2 +- src/features/Conversation/types/hooks.ts | 422 +++--- src/features/Conversation/types/ui.ts | 8 +- src/features/Conversation/utils/markdown.ts | 8 +- src/features/DataImporter/Error.tsx | 20 +- src/features/DataImporter/FileUploading.tsx | 4 +- src/features/DataImporter/ImportDetail.tsx | 16 +- src/features/DataImporter/SuccessResult.tsx | 20 +- src/features/DataImporter/config.ts | 2 +- src/features/DataImporter/index.tsx | 20 +- .../DevPanel/CacheViewer/DataTable/index.tsx | 2 +- .../DevPanel/CacheViewer/cacheProvider.tsx | 12 +- .../DevPanel/CacheViewer/getCacheEntries.ts | 4 +- src/features/DevPanel/CacheViewer/index.tsx | 2 +- .../DevPanel/FeatureFlagViewer/Form.tsx | 8 +- .../DevPanel/MetadataViewer/MetaData.tsx | 4 +- src/features/DevPanel/MetadataViewer/Og.tsx | 11 +- .../DevPanel/MetadataViewer/index.tsx | 4 +- .../DevPanel/SystemInspector/index.tsx | 2 +- src/features/DevPanel/features/FloatPanel.tsx | 15 +- src/features/DevPanel/features/Header.tsx | 10 +- .../features/Table/TooltipContent.tsx | 8 +- .../DevPanel/features/Table/index.tsx | 2 +- src/features/DevPanel/index.tsx | 1 + src/features/EditorCanvas/AutoSaveHint.tsx | 3 +- src/features/EditorCanvas/DiffAllToolbar.tsx | 15 +- src/features/EditorCanvas/DocumentIdMode.tsx | 8 +- .../EditorCanvas/EditorCanvas.test.tsx | 10 +- src/features/EditorCanvas/EditorCanvas.tsx | 8 +- src/features/EditorCanvas/EditorDataMode.tsx | 4 +- src/features/EditorCanvas/ErrorBoundary.tsx | 9 +- src/features/EditorCanvas/InlineToolbar.tsx | 15 +- .../EditorCanvas/InternalEditor.test.tsx | 8 +- src/features/EditorCanvas/InternalEditor.tsx | 12 +- src/features/EditorModal/EditorCanvas.tsx | 27 +- src/features/EditorModal/TextArea.tsx | 12 +- src/features/EditorModal/Typobar.tsx | 11 +- src/features/EditorModal/index.tsx | 23 +- .../Electron/AuthRequiredModal/index.tsx | 9 +- .../Electron/connection/Connection.tsx | 4 +- .../Electron/connection/ConnectionMode.tsx | 23 +- src/features/Electron/connection/Option.tsx | 6 +- .../Electron/connection/RemoteStatus.tsx | 2 +- src/features/Electron/connection/Waiting.tsx | 4 +- .../Electron/navigation/routeMetadata.ts | 4 +- .../navigation/useNavigationHistory.ts | 5 +- .../Electron/titlebar/NavigationBar.tsx | 10 +- .../titlebar/RecentlyViewed/PageItem.tsx | 6 +- .../titlebar/RecentlyViewed/Section.tsx | 2 +- .../RecentlyViewed/hooks/usePluginContext.ts | 4 +- .../RecentlyViewed/hooks/useResolvedPages.ts | 2 +- .../titlebar/RecentlyViewed/index.tsx | 6 +- .../RecentlyViewed/plugins/agentPlugin.ts | 7 +- .../plugins/agentTopicPlugin.ts | 7 +- .../RecentlyViewed/plugins/communityPlugin.ts | 7 +- .../RecentlyViewed/plugins/groupPlugin.ts | 7 +- .../plugins/groupTopicPlugin.ts | 7 +- .../RecentlyViewed/plugins/homePlugin.ts | 7 +- .../RecentlyViewed/plugins/imagePlugin.ts | 7 +- .../RecentlyViewed/plugins/memoryPlugin.ts | 7 +- .../RecentlyViewed/plugins/pagePlugin.ts | 7 +- .../RecentlyViewed/plugins/registry.ts | 10 +- .../RecentlyViewed/plugins/resourcePlugin.ts | 7 +- .../RecentlyViewed/plugins/settingsPlugin.ts | 7 +- .../titlebar/RecentlyViewed/plugins/types.ts | 17 +- .../titlebar/RecentlyViewed/storage.ts | 2 +- .../Electron/titlebar/RecentlyViewed/types.ts | 4 +- .../Electron/titlebar/SimpleTitleBar.tsx | 4 +- src/features/Electron/titlebar/TitleBar.tsx | 6 +- src/features/Electron/updater/UpdateModal.tsx | 18 +- .../Electron/updater/UpdateNotification.tsx | 21 +- src/features/FileSidePanel/index.tsx | 10 +- src/features/FileViewer/NotSupport/index.tsx | 3 +- .../FileViewer/Renderer/Image/index.tsx | 4 +- .../Renderer/PDF/HighlightLayer.tsx | 5 +- .../FileViewer/Renderer/PDF/index.tsx | 9 +- .../Renderer/PDF/useResizeObserver.ts | 4 +- .../FileViewer/Renderer/Video/index.tsx | 2 +- src/features/FileViewer/index.tsx | 5 +- src/features/Follow/index.tsx | 2 +- src/features/GroupAvatar/index.tsx | 7 +- src/features/GroupInfo/index.tsx | 9 +- .../HotkeyHelperPanel/HotkeyContent.tsx | 4 +- src/features/HotkeyHelperPanel/index.tsx | 11 +- src/features/ImageSidePanel/index.tsx | 10 +- src/features/ImageTopicPanel/index.tsx | 18 +- .../AddFilesToKnowledgeBase/SelectForm.tsx | 16 +- .../AddFilesToKnowledgeBase/index.tsx | 6 +- .../AssignKnowledgeBase/Item/Action.tsx | 6 +- .../Item/EditCustomPlugin.tsx | 10 +- .../AssignKnowledgeBase/Item/MasonryItem.tsx | 4 +- .../Item/MasonryItemWrapper.tsx | 2 +- .../AssignKnowledgeBase/Item/PluginTag.tsx | 2 +- .../AssignKnowledgeBase/Item/index.tsx | 12 +- .../LibraryModal/AssignKnowledgeBase/List.tsx | 13 +- .../AssignKnowledgeBase/ViewSwitcher.tsx | 6 +- .../AssignKnowledgeBase/index.tsx | 6 +- .../LibraryModal/CreateNew/CreateForm.tsx | 8 +- src/features/LibraryModal/CreateNew/index.tsx | 4 +- src/features/LocalFile/LocalFile.tsx | 12 +- src/features/LocalFile/LocalFolder.tsx | 8 +- src/features/MCP/MCPDetail/Loading.tsx | 6 +- src/features/MCP/MCPDetail/index.tsx | 4 +- .../InstallError/ErrorDetails.tsx | 2 +- .../MCPInstallProgress/InstallError/index.tsx | 10 +- .../MCP/MCPInstallProgress/MCPConfigForm.tsx | 10 +- .../MCPDependenciesGuide.tsx | 14 +- .../MCP/MCPSettings/McpSettingsModal.tsx | 9 +- src/features/MCP/MCPSettings/index.tsx | 14 +- src/features/MCP/Scores.tsx | 16 +- src/features/MCP/calculateScore.ts | 6 +- src/features/MCP/useScoreList.ts | 3 +- src/features/MCP/utils.ts | 2 +- src/features/MCPPluginDetail/Agents.tsx | 8 +- src/features/MCPPluginDetail/CollapseDesc.tsx | 3 +- .../MCPPluginDetail/CollapseLayout.tsx | 6 +- .../Deployment/Platform/index.tsx | 6 +- .../MCPPluginDetail/Deployment/index.tsx | 24 +- .../MCPPluginDetail/DetailProvider.tsx | 5 +- src/features/MCPPluginDetail/Header.tsx | 30 +- src/features/MCPPluginDetail/Nav.tsx | 13 +- .../MCPPluginDetail/Overview/TagList.tsx | 7 +- .../MCPPluginDetail/Overview/index.tsx | 2 +- src/features/MCPPluginDetail/Schema/Block.tsx | 13 +- .../MCPPluginDetail/Schema/Prompts.tsx | 10 +- .../MCPPluginDetail/Schema/Resources.tsx | 6 +- src/features/MCPPluginDetail/Schema/Tools.tsx | 10 +- .../Score/GithubBadge/index.tsx | 8 +- .../MCPPluginDetail/Score/ScoreItem.tsx | 9 +- .../MCPPluginDetail/Score/ScoreList.tsx | 3 +- .../MCPPluginDetail/Score/TotalScore.tsx | 9 +- src/features/MCPPluginDetail/Score/index.tsx | 2 +- src/features/MobileSwitchLoading/index.tsx | 6 +- src/features/MobileTabBar/index.tsx | 6 +- .../ModelParamsControl/FrequencyPenalty.tsx | 14 +- .../ModelParamsControl/PresencePenalty.tsx | 14 +- .../ModelParamsControl/Temperature.tsx | 12 +- src/features/ModelParamsControl/TopP.tsx | 14 +- src/features/ModelSelect/index.tsx | 34 +- .../ModelSwitchPanel/components/Footer.tsx | 10 +- .../components/List/ListItemRenderer.tsx | 26 +- .../List/MultipleProvidersModelItem.tsx | 6 +- .../components/PanelContent.tsx | 12 +- .../ModelSwitchPanel/components/Toolbar.tsx | 10 +- src/features/ModelSwitchPanel/index.tsx | 4 +- src/features/NavHeader/index.tsx | 12 +- src/features/NavPanel/SideBarDrawer.tsx | 17 +- src/features/NavPanel/SideBarHeaderLayout.tsx | 18 +- src/features/NavPanel/SideBarLayout.tsx | 3 +- .../NavPanel/ToggleLeftPanelButton.tsx | 8 +- .../NavPanel/components/BackButton.tsx | 5 +- src/features/NavPanel/components/BackNav.tsx | 11 +- .../NavPanel/components/EmptyNavItem.tsx | 6 +- src/features/NavPanel/components/NavItem.tsx | 23 +- .../NavPanel/components/NavPanelDraggable.tsx | 7 +- .../NavPanel/components/SkeletonList.tsx | 5 +- src/features/NavPanel/hooks/useNavPanel.ts | 2 +- src/features/NavPanel/index.tsx | 5 +- src/features/OllamaModelDownloader/index.tsx | 16 +- src/features/OllamaSetupGuide/Desktop.tsx | 2 +- src/features/PWAInstall/Install.tsx | 4 +- src/features/PWAInstall/index.tsx | 2 +- .../Copilot/AgentSelector/Actions.tsx | 3 +- .../Copilot/AgentSelector/AgentItem.tsx | 6 +- .../Copilot/AgentSelector/useDropdownMenu.tsx | 3 +- .../PageEditor/Copilot/Conversation.tsx | 2 +- src/features/PageEditor/Copilot/Toolbar.tsx | 36 +- .../Copilot/TopicSelector/Actions.tsx | 3 +- .../Copilot/TopicSelector/TopicItem.tsx | 4 +- .../Copilot/TopicSelector/useDropdownMenu.tsx | 3 +- src/features/PageEditor/Copilot/Welcome.tsx | 2 +- .../PageEditor/EditorCanvas/index.tsx | 3 +- .../EditorCanvas/useAskCopilotItem.tsx | 15 +- .../PageEditor/EditorCanvas/useSlashItems.tsx | 5 +- src/features/PageEditor/Header/Breadcrumb.tsx | 4 +- src/features/PageEditor/Header/useMenu.tsx | 3 +- src/features/PageEditor/PageAgentProvider.tsx | 8 +- src/features/PageEditor/PageEditor.test.tsx | 4 +- src/features/PageEditor/PageEditor.tsx | 15 +- .../PageEditor/PageEditorProvider.tsx | 14 +- src/features/PageEditor/StoreUpdater.tsx | 3 +- src/features/PageEditor/TitleSection.tsx | 52 +- src/features/PageEditor/store/action.ts | 5 +- src/features/PageEditor/store/index.ts | 9 +- src/features/PageEditor/store/initialState.ts | 2 +- src/features/PageEditor/store/selectors.ts | 2 +- src/features/PageEmpty.tsx | 5 +- .../PageExplorer/PageExplorerPlaceholder.tsx | 12 +- src/features/PageExplorer/index.tsx | 4 +- src/features/PlanIcon/index.tsx | 13 +- src/features/PluginDetailModal/APIs.tsx | 10 +- src/features/PluginDetailModal/Meta.tsx | 2 +- src/features/PluginDetailModal/index.tsx | 13 +- src/features/PluginDevModal/LocalForm.tsx | 7 +- .../MCPManifestForm/ArgsInput.tsx | 22 +- .../MCPManifestForm/CollapsibleSection.tsx | 3 +- .../MCPManifestForm/MCPTypeSelect.tsx | 6 +- .../MCPManifestForm/QuickImportSection.tsx | 20 +- .../PluginDevModal/MCPManifestForm/index.tsx | 23 +- .../PluginDevModal/MCPManifestForm/utils.ts | 2 +- .../PluginPreview/ApiVisualizer.tsx | 2 +- .../PluginDevModal/PluginPreview/index.tsx | 11 +- .../PluginDevModal/UrlManifestForm.tsx | 33 +- src/features/PluginDevModal/index.tsx | 48 +- src/features/PluginSettings/index.tsx | 8 +- src/features/PluginTag/PluginStatus.tsx | 18 +- src/features/PluginTag/index.tsx | 3 +- .../Render/BuiltinType/index.test.tsx | 20 +- .../Render/DefaultType/IFrameRender/index.tsx | 10 +- .../DefaultType/SystemJsRender/index.tsx | 2 +- .../DefaultType/SystemJsRender/utils.ts | 5 +- .../PluginsUI/Render/DefaultType/index.tsx | 4 +- .../PluginsUI/Render/MCPType/index.tsx | 2 +- .../Render/StandaloneType/Iframe.tsx | 10 +- .../PluginsUI/Render/StandaloneType/index.tsx | 2 +- src/features/PluginsUI/Render/index.tsx | 6 +- .../Artifacts/Body/Renderer/React/index.tsx | 6 +- .../Portal/Artifacts/Body/Renderer/index.tsx | 3 +- src/features/Portal/Artifacts/Title.tsx | 16 +- src/features/Portal/Artifacts/index.ts | 2 +- src/features/Portal/Document/Header.tsx | 6 +- src/features/Portal/Document/TodoList.tsx | 12 +- src/features/Portal/Document/Wrapper.tsx | 3 +- src/features/Portal/Document/index.ts | 2 +- .../Portal/FilePreview/Body/index.tsx | 6 +- src/features/Portal/FilePreview/Title.tsx | 4 +- src/features/Portal/FilePreview/index.ts | 2 +- .../GroupThread/Body/ThreadChatList.tsx | 2 +- .../Portal/GroupThread/Header/index.tsx | 12 +- src/features/Portal/GroupThread/index.ts | 2 +- .../Portal/Home/Body/Files/FileList/Item.tsx | 4 +- .../Body/Plugins/ArtifactList/Item/index.tsx | 10 +- src/features/Portal/MessageDetail/Title.tsx | 2 +- src/features/Portal/MessageDetail/index.ts | 2 +- src/features/Portal/Notebook/DocumentItem.tsx | 13 +- src/features/Portal/Notebook/index.ts | 2 +- src/features/Portal/Plugins/Title.tsx | 8 +- src/features/Portal/Plugins/index.ts | 2 +- src/features/Portal/Thread/Chat/index.tsx | 20 +- src/features/Portal/Thread/Header/Active.tsx | 2 +- src/features/Portal/Thread/Header/New.tsx | 10 +- src/features/Portal/Thread/Header/index.tsx | 8 +- src/features/Portal/Thread/index.ts | 2 +- src/features/Portal/components/Header.tsx | 13 +- src/features/Portal/router.tsx | 4 +- src/features/Portal/type.ts | 2 +- src/features/ProfileEditor/AgentTool.tsx | 25 +- src/features/ProfileEditor/Empty.tsx | 4 +- src/features/ProfileEditor/PluginTag.tsx | 13 +- src/features/ProfileEditor/PopoverContent.tsx | 15 +- .../InstallPlugin/ConfigDisplay.tsx | 6 +- .../CustomPluginInstallModal.tsx | 23 +- .../OfficialPluginInstallModal/Detail.tsx | 6 +- .../OfficialPluginInstallModal/index.tsx | 8 +- .../InstallPlugin/index.tsx | 3 +- .../ProtocolUrlHandler/InstallPlugin/types.ts | 2 +- src/features/ProtocolUrlHandler/index.tsx | 2 +- .../ChunkDrawer/ChunkList/ChunkItem.tsx | 2 +- .../components/ChunkDrawer/Content.tsx | 2 +- .../ChunkDrawer/SimilaritySearchList/Item.tsx | 4 +- .../components/ChunkDrawer/index.tsx | 12 +- .../components/Editor/FileCopilot.tsx | 2 +- .../components/Editor/index.tsx | 14 +- .../components/Explorer/EmptyPlaceholder.tsx | 14 +- .../components/Explorer/Header/Breadcrumb.tsx | 12 +- .../components/Explorer/Header/index.tsx | 10 +- .../Explorer/ItemDropdown/DropdownMenu.tsx | 2 +- .../ItemDropdown/useFileItemDropdown.tsx | 6 +- .../Explorer/ListView/ListItem/ChunkTag.tsx | 6 +- .../Explorer/ListView/ListItem/index.tsx | 55 +- .../components/Explorer/ListView/Skeleton.tsx | 4 +- .../components/Explorer/ListView/index.tsx | 32 +- .../MasonryItem/DefaultFileItem.tsx | 4 +- .../MasonryView/MasonryItem/ImageFileItem.tsx | 10 +- .../MasonryItem/MarkdownFileItem.tsx | 4 +- .../MasonryItem/MasonryItemWrapper.tsx | 4 +- .../MasonryView/MasonryItem/NoteFileItem.tsx | 5 +- .../MasonryView/MasonryItem/index.tsx | 22 +- .../components/Explorer/MasonryView/index.tsx | 7 +- .../components/Explorer/MoveToFolderModal.tsx | 19 +- .../ToolBar/ActionIconWithChevron.tsx | 2 +- .../Explorer/ToolBar/BatchActionsDropdown.tsx | 3 +- .../components/Explorer/ToolBar/Config.tsx | 2 +- .../Explorer/ToolBar/MultiSelectActions.tsx | 28 +- .../Explorer/ToolBar/SortDropdown.tsx | 6 +- .../Explorer/ToolBar/ViewSwitcher.tsx | 2 +- .../components/Explorer/hooks/useViewMode.ts | 2 +- .../components/Explorer/useCheckTaskStatus.ts | 2 +- .../Explorer/useResourceExplorer.ts | 2 +- .../components/FolderTree/index.tsx | 12 +- .../components/Header/AddButton.tsx | 22 +- .../Header/hooks/useNotionImport.ts | 3 +- .../Header/hooks/useUploadFolder.ts | 3 +- .../LibraryHierarchy/HierarchyNode.tsx | 70 +- .../LibraryHierarchy/TreeSkeleton.tsx | 2 +- .../components/LibraryHierarchy/index.tsx | 6 +- .../components/UploadDock/Item.tsx | 11 +- .../components/UploadDock/index.tsx | 32 +- src/features/ResourceManager/index.tsx | 6 +- .../RightPanel/ToggleRightPanelButton.tsx | 8 +- src/features/RightPanel/index.tsx | 15 +- src/features/Setting/Footer.tsx | 21 +- src/features/Setting/SettingContainer.tsx | 10 +- .../ShareModal/ShareImage/Preview.tsx | 8 +- src/features/ShareModal/ShareImage/index.tsx | 13 +- src/features/ShareModal/ShareImage/type.ts | 2 +- src/features/ShareModal/ShareJSON/Preview.tsx | 4 +- .../ShareJSON/generateFullExport.test.ts | 2 +- .../ShareJSON/generateFullExport.ts | 4 +- .../ShareJSON/generateMessages.test.ts | 2 +- .../ShareModal/ShareJSON/generateMessages.ts | 4 +- src/features/ShareModal/ShareJSON/index.tsx | 20 +- src/features/ShareModal/ShareJSON/type.ts | 2 +- .../ShareModal/SharePdf/PdfPreview.tsx | 36 +- src/features/ShareModal/SharePdf/index.tsx | 14 +- src/features/ShareModal/ShareText/index.tsx | 14 +- .../ShareModal/ShareText/template.test.ts | 2 +- src/features/ShareModal/ShareText/template.ts | 8 +- src/features/ShareModal/index.tsx | 12 +- src/features/SharePopover/index.tsx | 25 +- src/features/SkillStore/Search/index.tsx | 6 +- .../SkillStore/SkillDetail/AgentItem.tsx | 4 +- .../SkillStore/SkillDetail/Agents.tsx | 10 +- .../SkillStore/SkillDetail/DetailContext.tsx | 4 +- .../SkillStore/SkillDetail/Header.tsx | 8 +- .../SkillDetail/KlavisDetailProvider.tsx | 5 +- .../SkillDetail/LobehubDetailProvider.tsx | 5 +- .../SkillStore/SkillDetail/Overview.tsx | 8 +- .../SkillStore/SkillDetail/Schema.tsx | 10 +- .../SkillDetail/SkillDetailInner.tsx | 5 +- .../SkillDetail/VirtuosoLoading.tsx | 2 +- .../SkillStore/SkillList/AddSkillButton.tsx | 16 +- .../SkillStore/SkillList/Community/Item.tsx | 22 +- .../SkillStore/SkillList/Community/index.tsx | 8 +- .../SkillStore/SkillList/Custom/Item.tsx | 16 +- src/features/SkillStore/SkillList/Empty.tsx | 5 +- .../SkillStore/SkillList/LobeHub/Item.tsx | 12 +- .../SkillStore/SkillList/LobeHub/index.tsx | 6 +- .../SkillStore/SkillList/VirtuosoLoading.tsx | 2 +- src/features/SkillStore/SkillStoreContent.tsx | 6 +- src/features/ToolTag/index.tsx | 3 +- src/features/TopicEmpty.tsx | 5 +- src/features/User/DataStatistics.tsx | 7 +- src/features/User/UserAvatar.tsx | 11 +- src/features/User/UserInfo.tsx | 12 +- .../User/UserLoginOrSignup/Community.tsx | 2 +- src/features/User/UserPanel/LangButton.tsx | 5 +- src/features/User/UserPanel/PanelContent.tsx | 2 +- src/features/User/UserPanel/ThemeButton.tsx | 6 +- src/features/User/UserPanel/UpgradeBadge.tsx | 5 +- src/features/User/UserPanel/index.tsx | 13 +- src/features/User/UserPanel/useMenu.tsx | 7 +- .../User/__tests__/PanelContent.test.tsx | 6 +- .../WideScreenContainer/WideScreenButton.tsx | 2 +- src/features/WideScreenContainer/index.tsx | 8 +- src/features/ZenModeToast/Toast.tsx | 2 +- src/helpers/parserPlaceholder/index.test.ts | 2 +- src/helpers/toolEngineering/index.test.ts | 4 +- src/helpers/toolEngineering/index.ts | 4 +- src/hooks/useAgentOwnershipCheck.ts | 2 +- src/hooks/useAutoScroll.ts | 3 +- src/hooks/useEnabledChatModels.ts | 2 +- src/hooks/useHotkeys/useHotkeyById.ts | 7 +- src/hooks/useImgToClipboard.ts | 2 +- src/hooks/useInitBuiltinAgent.ts | 2 +- src/hooks/useMCPCategory.tsx | 2 +- src/hooks/useOperationState.ts | 2 +- src/hooks/usePWAInstall.test.ts | 2 +- src/hooks/useQueryParam.ts | 16 +- src/hooks/useQueryRoute.ts | 3 +- src/hooks/useShare.tsx | 2 +- src/hooks/useTTS.ts | 9 +- .../AuthProvider/BetterAuth/UserUpdater.tsx | 2 +- src/layout/AuthProvider/BetterAuth/index.tsx | 2 +- src/layout/AuthProvider/Desktop/index.tsx | 3 +- .../MarketAuth/MarketAuthConfirmModal.tsx | 18 +- .../MarketAuth/MarketAuthProvider.tsx | 27 +- .../MarketAuth/ProfileSetupModal.tsx | 63 +- src/layout/AuthProvider/MarketAuth/oidc.ts | 2 +- .../MarketAuth/useMarketUserProfile.ts | 2 +- src/layout/AuthProvider/NoAuth/index.tsx | 3 +- src/layout/AuthProvider/index.tsx | 2 +- src/layout/GlobalProvider/AppTheme.tsx | 27 +- src/layout/GlobalProvider/CmdkLazy.tsx | 2 +- src/layout/GlobalProvider/Editor.tsx | 3 +- src/layout/GlobalProvider/FaviconProvider.tsx | 15 +- .../GlobalProvider/GroupWizardProvider.tsx | 11 +- src/layout/GlobalProvider/Locale.tsx | 3 +- .../GlobalProvider/NextThemeProvider.tsx | 6 +- src/layout/GlobalProvider/Query.tsx | 5 +- .../ServerVersionOutdatedAlert.tsx | 6 +- src/layout/GlobalProvider/StyleRegistry.tsx | 4 +- src/layout/GlobalProvider/index.tsx | 5 +- src/libs/better-auth/define-config.ts | 9 +- .../better-auth/plugins/email-whitelist.ts | 2 +- .../loaders/code/__tests__/index.test.ts | 2 +- src/libs/langchain/loaders/code/index.ts | 4 +- .../loaders/csv/__tests__/index.test.ts | 3 +- .../loaders/epub/__tests__/index.test.ts | 1 + src/libs/langchain/loaders/index.ts | 6 +- .../loaders/latex/__tests__/index.test.ts | 3 +- .../loaders/markdown/__tests__/index.test.ts | 2 +- .../loaders/txt/__tests__/index.test.ts | 2 +- src/libs/mcp/client.ts | 14 +- .../next/proxy/createRouteMatcher.test.ts | 2 +- src/libs/next/proxy/createRouteMatcher.ts | 2 +- src/libs/next/proxy/define-config.ts | 5 +- src/libs/oidc-provider/adapter.ts | 2 +- src/libs/oidc-provider/config.ts | 2 +- src/libs/oidc-provider/http-adapter.ts | 5 +- src/libs/oidc-provider/provider.ts | 5 +- src/libs/pdfjs/index.tsx | 3 +- src/libs/redis/manager.test.ts | 4 +- src/libs/redis/manager.ts | 2 +- src/libs/redis/redis.test.ts | 2 +- src/libs/redis/redis.ts | 10 +- src/libs/redis/types.ts | 34 +- src/libs/redis/utils.ts | 2 +- src/libs/router/Link.tsx | 3 +- src/libs/swr/index.ts | 3 +- src/libs/swr/localStorageProvider.ts | 4 +- src/libs/traces/event.test.ts | 2 +- src/libs/traces/event.ts | 10 +- src/libs/traces/index.test.ts | 2 +- src/libs/traces/index.ts | 2 +- src/libs/trpc/async/asyncAuth.ts | 2 +- src/libs/trpc/async/context.ts | 4 +- src/libs/trpc/async/init.ts | 2 +- src/libs/trpc/client/async.ts | 2 +- src/libs/trpc/client/lambda.ts | 13 +- src/libs/trpc/lambda/context.ts | 10 +- src/libs/trpc/lambda/middleware/marketSDK.ts | 2 +- .../trpc/lambda/middleware/telemetry.test.ts | 3 +- .../trpc/middleware/openTelemetry.test.ts | 10 +- src/libs/trpc/middleware/openTelemetry.ts | 11 +- src/libs/trpc/middleware/userAuth.test.ts | 3 +- src/libs/trpc/utils/internalJwt.ts | 2 +- src/libs/trpc/utils/request-adapter.ts | 2 +- src/libs/trpc/utils/responseMeta.ts | 2 +- .../globalConfig/genServerAiProviderConfig.ts | 5 +- src/server/globalConfig/index.test.ts | 4 +- src/server/globalConfig/index.ts | 2 +- src/server/globalConfig/parseDefaultAgent.ts | 2 +- src/server/globalConfig/parseFilesConfig.ts | 6 +- .../parseMemoryExtractionConfig.ts | 7 +- src/server/globalConfig/parseSystemAgent.ts | 4 +- src/server/ld.ts | 2 +- src/server/manifest.test.ts | 2 - src/server/metadata.ts | 11 +- .../AgentRuntime/AgentRuntimeCoordinator.ts | 4 +- .../modules/AgentRuntime/AgentStateManager.ts | 6 +- .../InMemoryStreamEventManager.ts | 2 +- .../modules/AgentRuntime/RuntimeExecutors.ts | 32 +- .../AgentRuntime/StreamEventManager.ts | 2 +- .../__tests__/RuntimeExecutors.test.ts | 3 +- src/server/modules/AgentRuntime/factory.ts | 2 +- src/server/modules/AgentRuntime/types.ts | 46 +- .../modules/AssistantStore/index.test.ts | 4 +- src/server/modules/AssistantStore/index.ts | 5 +- src/server/modules/ContentChunk/index.ts | 4 +- .../modules/KeyVaultsEncrypt/index.test.ts | 2 +- src/server/modules/KeyVaultsEncrypt/index.ts | 2 +- .../modules/Mecha/AgentToolsEngine/index.ts | 3 +- src/server/modules/ModelRuntime/index.test.ts | 2 +- src/server/modules/ModelRuntime/index.ts | 15 +- src/server/modules/ModelRuntime/trace.ts | 5 +- src/server/modules/PluginStore/index.test.ts | 2 +- src/server/modules/PluginStore/index.ts | 3 +- src/server/routers/async/caller.ts | 2 +- src/server/routers/async/file.ts | 6 +- src/server/routers/async/image.ts | 2 +- src/server/routers/async/index.ts | 2 +- .../routers/lambda/__tests__/agent.test.ts | 1 - .../aiAgent.execGroupSubAgentTask.test.ts | 2 +- .../__tests__/aiAgent.getTaskStatus.test.ts | 2 +- .../__tests__/aiAgent.interruptTask.test.ts | 2 +- .../routers/lambda/__tests__/aiAgent.test.ts | 2 +- .../routers/lambda/__tests__/aiModel.test.ts | 1 - .../lambda/__tests__/aiProvider.test.ts | 2 +- .../lambda/__tests__/generationBatch.test.ts | 2 +- .../lambda/__tests__/generationTopic.test.ts | 2 +- .../routers/lambda/__tests__/importer.test.ts | 4 +- ...ntGroupAgentTaskThread.integration.test.ts | 2 +- ...createClientTaskThread.integration.test.ts | 2 +- .../aiAgent.task.integration.test.ts | 2 +- .../aiAgent/execAgent.integration.test.ts | 6 +- .../aiAgent/execAgents.integration.test.ts | 8 +- .../execGroupAgent.integration.test.ts | 4 +- .../__tests__/integration/aiAgent/helpers.ts | 4 +- .../multiRoundTools.integration.test.ts | 4 +- .../integration/message.integration.test.ts | 2 +- .../lambda/__tests__/integration/setup.ts | 2 +- .../integration/topic.integration.test.ts | 2 +- .../routers/lambda/__tests__/message.test.ts | 2 +- .../routers/lambda/__tests__/user.test.ts | 3 +- .../routers/lambda/_helpers/resolveContext.ts | 4 +- src/server/routers/lambda/_template.ts | 2 +- src/server/routers/lambda/agent.ts | 3 +- src/server/routers/lambda/agentCronJob.ts | 5 +- src/server/routers/lambda/agentGroup.ts | 4 +- src/server/routers/lambda/aiAgent.ts | 9 +- src/server/routers/lambda/aiChat.ts | 4 +- src/server/routers/lambda/aiModel.ts | 6 +- src/server/routers/lambda/aiProvider.ts | 7 +- src/server/routers/lambda/chunk.ts | 5 +- .../routers/lambda/config/index.test.ts | 3 +- src/server/routers/lambda/config/index.ts | 2 +- src/server/routers/lambda/exporter.ts | 2 +- src/server/routers/lambda/file.ts | 3 +- src/server/routers/lambda/generation.ts | 5 +- src/server/routers/lambda/generationTopic.ts | 2 +- src/server/routers/lambda/image/index.ts | 5 +- src/server/routers/lambda/importer.ts | 4 +- src/server/routers/lambda/knowledge.ts | 3 +- src/server/routers/lambda/knowledgeBase.ts | 2 +- src/server/routers/lambda/market/agent.ts | 3 +- .../routers/lambda/market/agentGroup.ts | 3 +- src/server/routers/lambda/notebook.ts | 2 +- src/server/routers/lambda/oauthDeviceFlow.ts | 2 +- src/server/routers/lambda/plugin.ts | 2 +- src/server/routers/lambda/ragEval.ts | 6 +- src/server/routers/lambda/session.ts | 4 +- src/server/routers/lambda/sessionGroup.ts | 2 +- src/server/routers/lambda/thread.ts | 3 +- src/server/routers/lambda/topic.ts | 8 +- src/server/routers/lambda/user.ts | 6 +- src/server/routers/lambda/userMemories.ts | 13 +- src/server/routers/mobile/index.ts | 2 +- src/server/routers/mobile/topic.ts | 2 +- .../tools/_helpers/scheduleToolCallReport.ts | 2 +- src/server/routers/tools/market.ts | 4 +- src/server/routers/tools/mcp.ts | 2 +- src/server/services/agent/index.test.ts | 2 +- src/server/services/agent/index.ts | 11 +- src/server/services/agent/type.ts | 2 +- src/server/services/agentGroup/index.ts | 8 +- .../agentRuntime/AgentRuntimeService.test.ts | 4 +- .../agentRuntime/AgentRuntimeService.ts | 18 +- .../__tests__/executeSync.test.ts | 2 +- .../__tests__/stepLifecycleCallbacks.test.ts | 2 +- src/server/services/agentRuntime/types.ts | 6 +- src/server/services/aiAgent/index.ts | 6 +- src/server/services/aiChat/index.test.ts | 2 +- src/server/services/aiChat/index.ts | 2 +- src/server/services/changelog/index.test.ts | 2 +- src/server/services/changelog/index.ts | 6 +- src/server/services/chunk/index.ts | 5 +- .../__tests__/config/promptToolConst.test.ts | 6 +- .../__tests__/config/systemComponents.test.ts | 2 +- .../__tests__/core/comfyUIAuthService.test.ts | 2 +- .../__tests__/core/comfyuiClient.test.ts | 3 +- .../__tests__/core/errorHandling.test.ts | 2 - .../__tests__/core/imageService.test.ts | 4 +- .../__tests__/core/modelResolver.test.ts | 2 +- .../__tests__/core/workflowBuilder.test.ts | 9 +- .../integration/parameterMapping.test.ts | 4 +- .../__tests__/utils/componentInfo.test.ts | 3 - .../__tests__/utils/imageResizer.test.ts | 4 +- .../__tests__/utils/workflowDetector.test.ts | 7 +- .../__tests__/workflows/flux-kontext.test.ts | 7 +- .../__tests__/workflows/simple-sd.test.ts | 7 +- .../workflows/unified-workflows.test.ts | 9 +- .../comfyui/core/comfyUIClientService.ts | 3 +- .../comfyui/core/errorHandlerService.ts | 6 +- .../services/comfyui/core/imageService.ts | 10 +- .../comfyui/core/modelResolverService.ts | 4 +- .../comfyui/core/workflowBuilderService.ts | 6 +- .../comfyui/utils/staticModelLookup.ts | 4 +- .../services/comfyui/workflows/simple-sd.ts | 2 +- .../services/desktopRelease/index.test.ts | 4 +- src/server/services/discover/index.test.ts | 2 +- src/server/services/discover/index.ts | 52 +- src/server/services/doc/index.tsx | 5 +- src/server/services/document/index.ts | 7 +- src/server/services/email/impls/index.test.ts | 2 +- src/server/services/email/impls/index.ts | 2 +- .../services/email/impls/nodemailer/index.ts | 6 +- .../services/email/impls/resend/index.ts | 4 +- src/server/services/email/impls/type.ts | 2 +- src/server/services/email/index.test.ts | 2 +- src/server/services/email/index.ts | 3 +- src/server/services/file/impls/index.ts | 4 +- src/server/services/file/impls/s3.ts | 4 +- src/server/services/file/impls/type.ts | 22 +- src/server/services/file/index.ts | 6 +- src/server/services/generation/index.test.ts | 3 +- src/server/services/generation/index.ts | 2 +- src/server/services/klavis/index.ts | 2 +- src/server/services/market/index.ts | 6 +- src/server/services/mcp/contentProcessor.ts | 4 +- .../deps/MCPSystemDepsCheckService.test.ts | 4 +- .../mcp/deps/MCPSystemDepsCheckService.ts | 13 +- .../checkers/ManualInstallationChecker.ts | 2 +- .../deps/checkers/NpmInstallationChecker.ts | 2 +- .../checkers/PythonInstallationChecker.ts | 2 +- src/server/services/mcp/deps/index.ts | 2 +- src/server/services/mcp/deps/types.ts | 2 +- src/server/services/mcp/index.ts | 17 +- .../__tests__/extract.payload.test.ts | 5 +- .../__tests__/extract.runtime.test.ts | 2 +- .../services/memory/userMemory/extract.ts | 28 +- .../persona/__tests__/service.test.ts | 40 +- .../memory/userMemory/persona/service.ts | 16 +- .../__tests__/index.integration.test.ts | 2 +- .../services/message/__tests__/index.test.ts | 2 +- src/server/services/message/index.ts | 9 +- .../__tests__/providers/githubCopilot.test.ts | 2 +- src/server/services/oauthDeviceFlow/index.ts | 2 +- .../providers/githubCopilot.ts | 2 +- src/server/services/oidc/index.ts | 2 +- src/server/services/oidc/oidcProvider.ts | 3 +- src/server/services/pluginGateway/index.ts | 6 +- src/server/services/queue/QueueService.ts | 5 +- src/server/services/queue/impls/index.ts | 2 +- src/server/services/queue/impls/local.ts | 4 +- src/server/services/queue/impls/qstash.ts | 4 +- src/server/services/queue/impls/type.ts | 12 +- src/server/services/queue/types.ts | 2 +- src/server/services/sandbox/index.ts | 12 +- .../services/search/impls/anspire/index.ts | 8 +- .../services/search/impls/anspire/type.ts | 4 +- .../services/search/impls/bocha/index.ts | 8 +- .../services/search/impls/brave/index.ts | 8 +- src/server/services/search/impls/exa/index.ts | 10 +- .../services/search/impls/firecrawl/index.ts | 8 +- .../services/search/impls/google/index.ts | 8 +- src/server/services/search/impls/index.ts | 5 +- .../services/search/impls/jina/index.ts | 8 +- .../services/search/impls/kagi/index.ts | 6 +- .../services/search/impls/search1api/index.ts | 6 +- .../search/impls/searxng/fixtures/searXNG.ts | 2 +- .../services/search/impls/searxng/index.ts | 5 +- .../services/search/impls/tavily/index.ts | 10 +- src/server/services/search/impls/type.ts | 4 +- src/server/services/search/index.test.ts | 2 +- src/server/services/search/index.ts | 7 +- src/server/services/toolExecution/builtin.ts | 6 +- src/server/services/toolExecution/index.ts | 18 +- .../serverRuntimes/cloudSandbox.ts | 2 +- .../toolExecution/serverRuntimes/types.ts | 2 +- .../serverRuntimes/webBrowsing.ts | 2 +- src/server/services/toolExecution/types.ts | 8 +- src/server/services/usage/index.test.ts | 4 +- src/server/services/usage/index.ts | 10 +- src/server/services/user/index.ts | 2 +- src/server/services/webhookUser/index.ts | 5 +- src/server/sitemap.ts | 5 +- src/server/translation.ts | 3 +- .../utils/__tests__/tempFileManager.test.ts | 2 +- src/services/__tests__/_auth.test.ts | 5 - .../__tests__/generationTopic.test.ts | 2 +- src/services/__tests__/global.test.ts | 5 +- src/services/__tests__/models.test.ts | 3 +- src/services/__tests__/tool.test.ts | 2 +- src/services/_auth.ts | 18 +- src/services/_header.ts | 4 +- src/services/agent.ts | 2 +- src/services/agentRuntime/client.ts | 2 +- src/services/agentRuntime/index.ts | 4 +- src/services/agentRuntime/type.ts | 2 +- src/services/aiChat.ts | 2 +- src/services/aiModel/index.ts | 8 +- src/services/aiProvider/index.ts | 9 +- src/services/chat/chat.test.ts | 14 +- src/services/chat/index.ts | 26 +- .../chat/mecha/agentConfigResolver.ts | 11 +- .../chat/mecha/clientModelRuntime.test.ts | 3 +- .../chat/mecha/contextEngineering.test.ts | 2 +- src/services/chat/mecha/contextEngineering.ts | 18 +- .../chat/mecha/modelParamsResolver.ts | 2 +- src/services/chat/types.ts | 8 +- src/services/chatGroup/index.ts | 9 +- src/services/config.ts | 2 +- src/services/discover.ts | 38 +- src/services/document/index.ts | 2 +- src/services/electron/desktopNotification.ts | 3 +- src/services/electron/remoteServer.ts | 2 +- src/services/electron/settings.ts | 2 +- src/services/electron/toolDetector.ts | 2 +- src/services/export/index.ts | 3 +- src/services/file/index.ts | 9 +- src/services/generationBatch.ts | 4 +- src/services/generationTopic.ts | 6 +- src/services/global.ts | 4 +- src/services/image.ts | 2 +- src/services/import/index.test.ts | 84 +- src/services/import/index.ts | 9 +- src/services/knowledgeBase.ts | 2 +- src/services/marketApi.ts | 8 +- src/services/mcp.test.ts | 5 +- src/services/mcp.ts | 12 +- src/services/message/index.ts | 16 +- src/services/models.ts | 4 +- src/services/notebook.ts | 2 +- src/services/plugin/index.test.ts | 1 + src/services/plugin/index.ts | 6 +- src/services/python.ts | 2 +- src/services/rag.ts | 2 +- src/services/ragEval.ts | 9 +- src/services/resource/index.ts | 3 +- src/services/search.ts | 2 +- src/services/session/index.test.ts | 1 + src/services/session/index.ts | 16 +- src/services/share.ts | 2 +- src/services/social.ts | 2 +- src/services/thread/index.test.ts | 1 + src/services/thread/index.ts | 4 +- src/services/tool.ts | 2 +- src/services/topic/index.test.ts | 1 + src/services/topic/index.ts | 10 +- src/services/trace.ts | 2 +- src/services/upload.ts | 6 +- src/services/user/index.test.ts | 1 + src/services/user/index.ts | 10 +- src/services/userMemory/crud.ts | 2 +- src/services/userMemory/index.ts | 22 +- src/store/agent/initialState.ts | 6 +- .../agent/selectors/agentByIdSelectors.ts | 2 +- .../selectors/builtinAgentSelectors.test.ts | 2 +- .../agent/selectors/builtinAgentSelectors.ts | 2 +- .../selectors/chatConfigByIdSelectors.test.ts | 2 +- .../selectors/chatConfigByIdSelectors.ts | 4 +- .../selectors/chatConfigSelectors.test.ts | 2 +- .../agent/selectors/chatConfigSelectors.ts | 4 +- src/store/agent/selectors/selectors.test.ts | 2 +- src/store/agent/selectors/selectors.ts | 9 +- src/store/agent/slices/agent/action.test.ts | 5 +- src/store/agent/slices/agent/action.ts | 15 +- src/store/agent/slices/agent/initialState.ts | 6 +- src/store/agent/slices/builtin/action.ts | 6 +- src/store/agent/slices/cron/action.ts | 2 +- .../agent/slices/knowledge/action.test.ts | 2 +- src/store/agent/slices/knowledge/action.ts | 4 +- src/store/agent/slices/plugin/action.test.ts | 1 - src/store/agent/slices/plugin/action.ts | 2 +- src/store/agent/store.ts | 20 +- src/store/agentGroup/action.ts | 13 +- src/store/agentGroup/reducers.ts | 4 +- src/store/agentGroup/selectors/byId.test.ts | 4 +- src/store/agentGroup/slices/curd.test.ts | 2 +- src/store/agentGroup/slices/curd.ts | 4 +- src/store/agentGroup/slices/member.ts | 2 +- src/store/agentGroup/store.ts | 8 +- src/store/aiInfra/initialState.ts | 6 +- .../aiInfra/slices/aiModel/action.test.ts | 4 +- src/store/aiInfra/slices/aiModel/action.ts | 11 +- .../aiInfra/slices/aiModel/initialState.ts | 2 +- .../aiInfra/slices/aiModel/selectors.test.ts | 2 +- src/store/aiInfra/slices/aiModel/selectors.ts | 2 +- src/store/aiInfra/slices/aiProvider/action.ts | 25 +- .../aiInfra/slices/aiProvider/initialState.ts | 10 +- .../aiInfra/slices/aiProvider/selectors.ts | 7 +- src/store/aiInfra/store.ts | 11 +- .../createAgentExecutors/call-llm.test.ts | 2 +- .../createAgentExecutors/call-tool.test.ts | 8 +- .../createAgentExecutors/finish.test.ts | 2 +- .../fixtures/mockInstructions.ts | 2 +- .../fixtures/mockOperations.ts | 2 +- .../resolve-aborted-tools.test.ts | 1 - src/store/chat/agents/createAgentExecutors.ts | 21 +- src/store/chat/helpers.test.ts | 5 +- src/store/chat/helpers.ts | 2 +- src/store/chat/initialState.ts | 24 +- .../actions/__tests__/agentGroup.test.ts | 1 - .../chat/slices/aiAgent/actions/agentGroup.ts | 9 +- .../aiAgent/actions/groupOrchestration.ts | 8 +- .../chat/slices/aiAgent/actions/index.ts | 15 +- .../chat/slices/aiAgent/actions/runAgent.ts | 9 +- .../__tests__/conversationControl.test.ts | 4 +- .../__tests__/conversationLifecycle.test.ts | 2 +- .../aiChat/actions/__tests__/fixtures.ts | 2 +- .../aiChat/actions/__tests__/helpers.ts | 2 +- .../__tests__/streamingExecutor.test.ts | 6 +- .../aiChat/actions/conversationControl.ts | 10 +- .../aiChat/actions/conversationLifecycle.ts | 12 +- src/store/chat/slices/aiChat/actions/index.ts | 21 +- .../chat/slices/aiChat/actions/memory.ts | 7 +- .../aiChat/actions/streamingExecutor.ts | 27 +- .../slices/aiChat/actions/streamingStates.ts | 4 +- .../actions/__tests__/search.test.ts | 6 +- .../chat/slices/builtinTool/actions/index.ts | 10 +- .../slices/builtinTool/actions/interpreter.ts | 12 +- .../chat/slices/builtinTool/actions/search.ts | 6 +- .../chat/slices/builtinTool/initialState.ts | 2 +- .../chat/slices/builtinTool/selectors.ts | 2 +- src/store/chat/slices/message/action.test.ts | 7 +- .../chat/slices/message/actions/index.ts | 20 +- .../chat/slices/message/actions/internals.ts | 9 +- .../message/actions/optimisticUpdate.ts | 18 +- .../chat/slices/message/actions/publicApi.ts | 8 +- .../chat/slices/message/actions/query.ts | 11 +- .../slices/message/actions/runtimeState.ts | 6 +- src/store/chat/slices/message/initialState.ts | 4 +- src/store/chat/slices/message/reducer.test.ts | 5 +- src/store/chat/slices/message/reducer.ts | 9 +- .../slices/message/selectors/chat.test.ts | 4 +- .../chat/slices/message/selectors/chat.ts | 2 +- .../slices/message/selectors/dbMessage.ts | 2 +- .../message/selectors/displayMessage.test.ts | 6 +- .../message/selectors/displayMessage.ts | 2 +- .../message/selectors/messageState.test.ts | 2 +- .../chat/slices/message/supervisor.test.ts | 3 +- src/store/chat/slices/message/supervisor.ts | 4 +- src/store/chat/slices/operation/actions.ts | 7 +- src/store/chat/slices/operation/selectors.ts | 3 +- src/store/chat/slices/operation/types.ts | 72 +- src/store/chat/slices/plugin/action.test.ts | 6 +- .../chat/slices/plugin/actions/exector.ts | 4 +- src/store/chat/slices/plugin/actions/index.ts | 20 +- .../chat/slices/plugin/actions/internals.ts | 8 +- .../slices/plugin/actions/optimisticUpdate.ts | 13 +- .../chat/slices/plugin/actions/pluginTypes.ts | 11 +- .../chat/slices/plugin/actions/publicApi.ts | 8 +- .../chat/slices/plugin/actions/workflow.ts | 6 +- src/store/chat/slices/portal/action.ts | 9 +- src/store/chat/slices/portal/initialState.ts | 2 +- .../chat/slices/portal/selectors.test.ts | 2 +- src/store/chat/slices/portal/selectors.ts | 5 +- .../chat/slices/portal/selectors/thread.ts | 3 +- src/store/chat/slices/thread/action.test.ts | 7 +- src/store/chat/slices/thread/action.ts | 14 +- src/store/chat/slices/thread/initialState.ts | 5 +- src/store/chat/slices/thread/reducer.ts | 2 +- .../chat/slices/thread/selectors/index.ts | 2 +- .../chat/slices/thread/selectors/util.ts | 3 +- src/store/chat/slices/topic/action.test.ts | 5 +- src/store/chat/slices/topic/action.ts | 18 +- src/store/chat/slices/topic/initialState.ts | 2 +- src/store/chat/slices/topic/reducer.test.ts | 6 +- src/store/chat/slices/topic/reducer.ts | 2 +- src/store/chat/slices/topic/selectors.test.ts | 3 +- src/store/chat/slices/topic/selectors.ts | 6 +- .../chat/slices/translate/action.test.ts | 3 +- src/store/chat/slices/translate/action.ts | 7 +- src/store/chat/slices/tts/action.test.ts | 2 +- src/store/chat/slices/tts/action.ts | 6 +- src/store/chat/store.ts | 38 +- src/store/chat/utils/messageMapKey.ts | 2 +- src/store/discover/slices/assistant/action.ts | 17 +- .../discover/slices/groupAgent/action.ts | 16 +- src/store/discover/slices/mcp/action.ts | 14 +- src/store/discover/slices/model/action.ts | 16 +- src/store/discover/slices/plugin/action.ts | 16 +- src/store/discover/slices/provider/action.ts | 14 +- src/store/discover/slices/social/action.ts | 17 +- src/store/discover/slices/user/action.ts | 9 +- src/store/discover/store.ts | 26 +- src/store/document/slices/document/action.ts | 8 +- src/store/document/slices/editor/action.ts | 7 +- .../document/slices/editor/initialState.ts | 4 +- .../document/slices/editor/reducer.test.ts | 5 +- src/store/document/slices/editor/reducer.ts | 3 +- src/store/document/store.ts | 10 +- src/store/electron/actions/app.ts | 8 +- .../electron/actions/navigationHistory.ts | 2 +- src/store/electron/actions/recentPages.ts | 7 +- src/store/electron/actions/settings.ts | 10 +- src/store/electron/actions/sync.ts | 7 +- src/store/electron/initialState.ts | 13 +- .../selectors/__tests__/desktopState.test.ts | 3 +- src/store/electron/selectors/desktopState.ts | 2 +- src/store/electron/selectors/hotkey.ts | 2 +- src/store/electron/selectors/sync.ts | 2 +- src/store/electron/store.ts | 21 +- src/store/file/initialState.ts | 15 +- .../file/reducers/uploadFileList.test.ts | 2 +- src/store/file/reducers/uploadFileList.ts | 6 +- src/store/file/slices/chat/action.test.ts | 6 +- src/store/file/slices/chat/action.ts | 14 +- src/store/file/slices/chat/initialState.ts | 4 +- src/store/file/slices/chat/selectors.test.ts | 6 +- src/store/file/slices/chat/selectors.ts | 2 +- src/store/file/slices/chunk/action.ts | 4 +- src/store/file/slices/chunk/initialState.ts | 2 +- src/store/file/slices/chunk/selectors.ts | 2 +- src/store/file/slices/document/action.ts | 9 +- .../file/slices/document/initialState.ts | 2 +- src/store/file/slices/document/selectors.ts | 4 +- .../file/slices/fileManager/action.test.ts | 7 +- src/store/file/slices/fileManager/action.ts | 10 +- .../file/slices/fileManager/initialState.ts | 4 +- .../file/slices/fileManager/selectors.ts | 4 +- src/store/file/slices/resource/action.ts | 5 +- .../file/slices/resource/initialState.ts | 10 +- src/store/file/slices/tts/action.ts | 8 +- src/store/file/slices/upload/action.ts | 6 +- src/store/file/store.ts | 28 +- src/store/global/action.test.ts | 2 +- .../global/actions/__tests__/general.test.ts | 2 +- src/store/global/actions/general.ts | 6 +- src/store/global/actions/workspacePane.ts | 2 +- src/store/global/initialState.ts | 21 +- src/store/global/selectors/clientDB.ts | 2 +- src/store/global/selectors/general.test.ts | 3 +- src/store/global/selectors/general.ts | 4 +- .../global/selectors/systemStatus.test.ts | 3 +- src/store/global/selectors/systemStatus.ts | 3 +- src/store/global/store.ts | 11 +- src/store/groupProfile/action.ts | 7 +- src/store/groupProfile/index.ts | 3 +- src/store/groupProfile/initialState.ts | 4 +- src/store/groupProfile/selectors.ts | 4 +- src/store/home/initialState.ts | 12 +- src/store/home/slices/agentList/action.ts | 2 +- src/store/home/slices/group/action.ts | 2 +- src/store/home/slices/homeInput/action.ts | 2 +- src/store/home/slices/recent/action.ts | 2 +- src/store/home/slices/sidebarUI/action.ts | 4 +- src/store/home/store.ts | 18 +- src/store/image/initialState.ts | 15 +- src/store/image/slices/createImage/action.ts | 6 +- .../slices/createImage/selectors.test.ts | 2 +- .../image/slices/createImage/selectors.ts | 2 +- .../slices/generationBatch/action.test.ts | 4 +- .../image/slices/generationBatch/action.ts | 11 +- .../slices/generationBatch/initialState.ts | 2 +- .../slices/generationBatch/reducer.test.ts | 5 +- .../image/slices/generationBatch/reducer.ts | 2 +- .../slices/generationBatch/selectors.test.ts | 4 +- .../image/slices/generationBatch/selectors.ts | 4 +- .../slices/generationConfig/action.test.ts | 5 +- .../image/slices/generationConfig/action.ts | 10 +- .../slices/generationConfig/hooks.test.ts | 7 +- .../image/slices/generationConfig/hooks.ts | 5 +- .../slices/generationConfig/initialState.ts | 5 +- .../slices/generationConfig/selectors.test.ts | 6 +- .../slices/generationConfig/selectors.ts | 4 +- .../slices/generationTopic/action.test.ts | 6 +- .../image/slices/generationTopic/action.ts | 9 +- .../slices/generationTopic/initialState.ts | 2 +- .../slices/generationTopic/reducer.test.ts | 5 +- .../image/slices/generationTopic/reducer.ts | 4 +- .../slices/generationTopic/selectors.test.ts | 4 +- .../image/slices/generationTopic/selectors.ts | 2 +- src/store/image/store.ts | 20 +- src/store/image/utils/aspectRatio.test.ts | 2 +- src/store/image/utils/aspectRatio.ts | 2 +- src/store/library/initialState.ts | 6 +- src/store/library/slices/content/action.ts | 4 +- src/store/library/slices/crud/action.test.ts | 4 +- src/store/library/slices/crud/action.ts | 6 +- src/store/library/slices/crud/initialState.ts | 2 +- src/store/library/slices/crud/selectors.ts | 2 +- .../library/slices/ragEval/actions/dataset.ts | 10 +- .../slices/ragEval/actions/evaluation.ts | 6 +- .../library/slices/ragEval/actions/index.ts | 10 +- src/store/library/store.ts | 14 +- src/store/mention/action.ts | 4 +- src/store/mention/selectors.ts | 2 +- src/store/mention/store.ts | 8 +- src/store/middleware/createDevtools.ts | 2 +- src/store/notebook/action.ts | 11 +- src/store/notebook/initialState.ts | 2 +- src/store/notebook/store.ts | 8 +- src/store/page/initialState.ts | 4 +- src/store/page/slices/crud/action.ts | 7 +- src/store/page/slices/internal/action.ts | 7 +- src/store/page/slices/internal/reducer.ts | 2 +- src/store/page/slices/list/action.ts | 8 +- src/store/page/slices/list/initialState.ts | 4 +- src/store/page/slices/list/selectors.ts | 4 +- src/store/page/slices/selection/action.ts | 4 +- src/store/page/store.ts | 17 +- src/store/serverConfig/Provider.tsx | 10 +- src/store/serverConfig/action.test.ts | 4 +- src/store/serverConfig/action.ts | 6 +- src/store/serverConfig/selectors.test.ts | 2 +- src/store/serverConfig/selectors.ts | 2 +- src/store/serverConfig/store.test.ts | 5 +- src/store/serverConfig/store.ts | 17 +- src/store/session/initialState.ts | 12 +- src/store/session/slices/homeInput/action.ts | 2 +- src/store/session/slices/recent/action.ts | 10 +- .../session/slices/recent/initialState.ts | 4 +- src/store/session/slices/recent/selectors.ts | 2 +- .../session/slices/session/action.test.ts | 1 - src/store/session/slices/session/action.ts | 18 +- src/store/session/slices/session/helpers.ts | 9 +- .../session/slices/session/initialState.ts | 10 +- .../session/slices/session/reducers.test.ts | 8 +- src/store/session/slices/session/reducers.ts | 2 +- .../slices/session/selectors/list.test.ts | 3 +- .../session/slices/session/selectors/list.ts | 12 +- .../slices/session/selectors/meta.test.ts | 2 +- .../session/slices/session/selectors/meta.ts | 2 +- .../session/slices/sessionGroup/action.ts | 11 +- .../slices/sessionGroup/initialState.ts | 4 +- .../slices/sessionGroup/reducer.test.ts | 2 +- .../session/slices/sessionGroup/reducer.ts | 2 +- .../session/slices/sessionGroup/selectors.ts | 2 +- src/store/session/store.ts | 17 +- src/store/tool/helpers.ts | 4 +- src/store/tool/initialState.ts | 23 +- src/store/tool/selectors/tool.test.ts | 6 +- src/store/tool/selectors/tool.ts | 8 +- src/store/tool/slices/builtin/action.ts | 4 +- .../executors/__tests__/BaseExecutor.test.ts | 3 +- .../builtin/executors/lobe-web-browsing.ts | 10 +- src/store/tool/slices/builtin/initialState.ts | 2 +- .../tool/slices/builtin/selectors.test.ts | 3 +- src/store/tool/slices/builtin/selectors.ts | 2 +- .../tool/slices/customPlugin/action.test.ts | 2 +- src/store/tool/slices/customPlugin/action.ts | 8 +- .../tool/slices/customPlugin/initialState.ts | 2 +- .../customPlugin/reducers/customPluginList.ts | 2 +- .../slices/customPlugin/selectors.test.ts | 5 +- src/store/tool/slices/klavisStore/action.ts | 17 +- .../tool/slices/klavisStore/initialState.ts | 2 +- .../tool/slices/klavisStore/selectors.test.ts | 2 +- .../tool/slices/klavisStore/selectors.ts | 5 +- .../tool/slices/lobehubSkillStore/action.ts | 16 +- .../slices/lobehubSkillStore/initialState.ts | 2 +- .../lobehubSkillStore/selectors.test.ts | 5 +- .../slices/lobehubSkillStore/selectors.ts | 5 +- src/store/tool/slices/mcpStore/action.test.ts | 8 +- src/store/tool/slices/mcpStore/action.ts | 28 +- .../tool/slices/mcpStore/initialState.ts | 4 +- src/store/tool/slices/mcpStore/selectors.ts | 2 +- src/store/tool/slices/oldStore/action.test.ts | 7 +- src/store/tool/slices/oldStore/action.ts | 22 +- .../tool/slices/oldStore/initialState.ts | 8 +- .../tool/slices/oldStore/selectors.test.ts | 3 +- src/store/tool/slices/oldStore/selectors.ts | 2 +- src/store/tool/slices/plugin/action.test.ts | 5 +- src/store/tool/slices/plugin/action.ts | 8 +- src/store/tool/slices/plugin/initialState.ts | 2 +- .../tool/slices/plugin/reducers/manifest.ts | 4 +- .../tool/slices/plugin/selectors.test.ts | 8 +- src/store/tool/slices/plugin/selectors.ts | 4 +- src/store/tool/store.ts | 27 +- src/store/user/initialState.ts | 15 +- src/store/user/slices/auth/action.ts | 4 +- src/store/user/slices/auth/initialState.ts | 4 +- src/store/user/slices/auth/selectors.test.ts | 2 +- src/store/user/slices/auth/selectors.ts | 2 +- src/store/user/slices/common/action.test.ts | 6 +- src/store/user/slices/common/action.ts | 7 +- src/store/user/slices/common/initialState.ts | 2 +- src/store/user/slices/onboarding/action.ts | 2 +- .../user/slices/onboarding/initialState.ts | 2 +- .../user/slices/preference/action.test.ts | 7 +- src/store/user/slices/preference/action.ts | 4 +- .../user/slices/preference/initialState.ts | 2 +- .../user/slices/preference/selectors.test.ts | 2 +- src/store/user/slices/settings/action.test.ts | 8 +- src/store/user/slices/settings/action.ts | 12 +- .../user/slices/settings/initialState.ts | 2 +- .../slices/settings/selectors/general.test.ts | 5 +- .../user/slices/settings/selectors/general.ts | 2 +- .../slices/settings/selectors/keyVaults.ts | 4 +- .../settings/selectors/settings.test.ts | 6 +- .../slices/settings/selectors/settings.ts | 8 +- .../selectors/toolIntervention.test.ts | 5 +- src/store/user/store.ts | 20 +- src/store/userMemory/initialState.ts | 18 +- .../userMemory/slices/activity/action.ts | 10 +- src/store/userMemory/slices/agent/action.ts | 4 +- src/store/userMemory/slices/base/action.ts | 6 +- src/store/userMemory/slices/context/action.ts | 12 +- .../userMemory/slices/context/initialState.ts | 2 +- .../userMemory/slices/experience/action.ts | 10 +- src/store/userMemory/slices/home/action.ts | 8 +- .../userMemory/slices/identity/action.ts | 15 +- .../userMemory/slices/preference/action.ts | 12 +- .../slices/preference/initialState.ts | 2 +- src/store/userMemory/store.ts | 29 +- src/styles/antdOverride.ts | 3 +- src/styles/global.ts | 3 +- src/styles/mobileHeader.ts | 2 +- src/tools/artifacts/index.ts | 2 +- src/tools/index.ts | 2 +- src/tools/inspectors.ts | 2 +- src/tools/interventions.ts | 2 +- src/tools/placeholders.ts | 2 +- src/tools/portals.ts | 2 +- src/tools/renders.ts | 2 +- src/tools/streamings.ts | 2 +- src/types/global.d.ts | 9 +- src/types/i18next.d.ts | 2 +- src/types/locale.ts | 2 +- src/types/resource.ts | 4 +- src/utils/client/switchLang.test.ts | 2 +- src/utils/client/switchLang.ts | 2 +- src/utils/errorResponse.ts | 6 +- src/utils/locale.ts | 3 +- src/utils/router.tsx | 13 +- src/utils/server/pageProps.ts | 2 +- src/utils/server/parseModels.test.ts | 4 +- src/utils/server/parseModels.ts | 4 +- src/utils/server/routeVariants.test.ts | 5 +- src/utils/server/routeVariants.ts | 2 +- stylelint.config.mjs | 13 + tests/setup.ts | 9 +- tests/utils.tsx | 2 +- vitest.config.mts | 1 - 3488 files changed, 15606 insertions(+), 13651 deletions(-) delete mode 100644 .commitlintrc.cjs delete mode 100644 .eslintignore delete mode 100644 .prettierrc.cjs delete mode 100644 .remarkrc.cjs delete mode 100644 .remarkrc.mdx.js create mode 100644 .remarkrc.mdx.mjs create mode 100644 .remarkrc.mjs delete mode 100644 .stylelintrc.cjs delete mode 100644 apps/desktop/.prettierrc.cjs delete mode 100644 apps/desktop/.remarkrc.cjs create mode 100644 apps/desktop/.remarkrc.mjs delete mode 100644 apps/desktop/.stylelintrc.cjs create mode 100644 apps/desktop/prettier.config.mjs create mode 100644 apps/desktop/stylelint.config.mjs create mode 100644 commitlint.config.mjs create mode 100644 eslint-suppressions.json create mode 100644 eslint.config.mjs create mode 100644 prettier.config.mjs create mode 100644 stylelint.config.mjs diff --git a/.agents/skills/add-provider-doc/SKILL.md b/.agents/skills/add-provider-doc/SKILL.md index 82568080ab..cab8a26b6e 100644 --- a/.agents/skills/add-provider-doc/SKILL.md +++ b/.agents/skills/add-provider-doc/SKILL.md @@ -43,11 +43,13 @@ Reference: `docs/usage/providers/fal.mdx` ```markdown ### `{PROVIDER}_API_KEY` + - Type: Required - Description: API key from {Provider Name} - Example: `{api-key-format}` ### `{PROVIDER}_MODEL_LIST` + - Type: Optional - Description: Control model list. Use `+` to add, `-` to hide - Example: `-all,+model-1,+model-2=Display Name` diff --git a/.agents/skills/desktop/SKILL.md b/.agents/skills/desktop/SKILL.md index 01f9650179..da5c0ea0ca 100644 --- a/.agents/skills/desktop/SKILL.md +++ b/.agents/skills/desktop/SKILL.md @@ -17,6 +17,7 @@ LobeChat desktop is built on Electron with main-renderer architecture: ## Adding New Desktop Features ### 1. Create Controller + Location: `apps/desktop/src/main/controllers/` ```typescript @@ -36,14 +37,21 @@ export default class NewFeatureCtr extends ControllerModule { Register in `apps/desktop/src/main/controllers/registry.ts`. ### 2. Define IPC Types + Location: `packages/electron-client-ipc/src/types.ts` ```typescript -export interface SomeParams { /* ... */ } -export interface SomeResult { success: boolean; error?: string } +export interface SomeParams { + /* ... */ +} +export interface SomeResult { + success: boolean; + error?: string; +} ``` ### 3. Create Renderer Service + Location: `src/services/electron/` ```typescript @@ -57,14 +65,17 @@ export const newFeatureService = async (params: SomeParams) => { ``` ### 4. Implement Store Action + Location: `src/store/` ### 5. Add Tests + Location: `apps/desktop/src/main/controllers/__tests__/` ## Detailed Guides See `references/` for specific topics: + - **Feature implementation**: `references/feature-implementation.md` - **Local tools workflow**: `references/local-tools.md` - **Menu configuration**: `references/menu-config.md` diff --git a/.agents/skills/desktop/references/feature-implementation.md b/.agents/skills/desktop/references/feature-implementation.md index cfc155edf8..1332950a33 100644 --- a/.agents/skills/desktop/references/feature-implementation.md +++ b/.agents/skills/desktop/references/feature-implementation.md @@ -22,7 +22,10 @@ Main Process Renderer Process ```typescript // apps/desktop/src/main/controllers/NotificationCtr.ts -import type { ShowDesktopNotificationParams, DesktopNotificationResult } from '@lobechat/electron-client-ipc'; +import type { + ShowDesktopNotificationParams, + DesktopNotificationResult, +} from '@lobechat/electron-client-ipc'; import { Notification } from 'electron'; import { ControllerModule, IpcMethod } from '@/controllers'; @@ -30,7 +33,9 @@ export default class NotificationCtr extends ControllerModule { static override readonly groupName = 'notification'; @IpcMethod() - async showDesktopNotification(params: ShowDesktopNotificationParams): Promise { + async showDesktopNotification( + params: ShowDesktopNotificationParams, + ): Promise { if (!Notification.isSupported()) { return { error: 'Notifications not supported', success: false }; } @@ -72,8 +77,7 @@ import { ensureElectronIpc } from '@/utils/electron/ipc'; const ipc = ensureElectronIpc(); export const notificationService = { - show: (params: ShowDesktopNotificationParams) => - ipc.notification.showDesktopNotification(params), + show: (params: ShowDesktopNotificationParams) => ipc.notification.showDesktopNotification(params), }; ``` diff --git a/.agents/skills/desktop/references/menu-config.md b/.agents/skills/desktop/references/menu-config.md index 769eaf0f4f..74fc5d387e 100644 --- a/.agents/skills/desktop/references/menu-config.md +++ b/.agents/skills/desktop/references/menu-config.md @@ -30,7 +30,13 @@ export const createAppMenu = (win: BrowserWindow) => { { label: 'File', submenu: [ - { label: 'New', accelerator: 'CmdOrCtrl+N', click: () => { /* ... */ } }, + { + label: 'New', + accelerator: 'CmdOrCtrl+N', + click: () => { + /* ... */ + }, + }, { type: 'separator' }, { role: 'quit' }, ], @@ -82,9 +88,7 @@ import { i18n } from '../locales'; const template = [ { label: i18n.t('menu.file'), - submenu: [ - { label: i18n.t('menu.new'), click: createNew }, - ], + submenu: [{ label: i18n.t('menu.new'), click: createNew }], }, ]; ``` diff --git a/.agents/skills/desktop/references/window-management.md b/.agents/skills/desktop/references/window-management.md index b8d9a7f8b3..499e843b03 100644 --- a/.agents/skills/desktop/references/window-management.md +++ b/.agents/skills/desktop/references/window-management.md @@ -131,8 +131,12 @@ const window = new BrowserWindow({ ``` ```css -.titlebar { -webkit-app-region: drag; } -.titlebar-button { -webkit-app-region: no-drag; } +.titlebar { + -webkit-app-region: drag; +} +.titlebar-button { + -webkit-app-region: no-drag; +} ``` ## Best Practices diff --git a/.agents/skills/drizzle/SKILL.md b/.agents/skills/drizzle/SKILL.md index a44389cef8..68a51b9502 100644 --- a/.agents/skills/drizzle/SKILL.md +++ b/.agents/skills/drizzle/SKILL.md @@ -73,9 +73,16 @@ export type AgentItem = typeof agents.$inferSelect; export const agents = pgTable( 'agents', { - id: text('id').primaryKey().$defaultFn(() => idGenerator('agents')).notNull(), - slug: varchar('slug', { length: 100 }).$defaultFn(() => randomSlug(4)).unique(), - userId: text('user_id').references(() => users.id, { onDelete: 'cascade' }).notNull(), + id: text('id') + .primaryKey() + .$defaultFn(() => idGenerator('agents')) + .notNull(), + slug: varchar('slug', { length: 100 }) + .$defaultFn(() => randomSlug(4)) + .unique(), + userId: text('user_id') + .references(() => users.id, { onDelete: 'cascade' }) + .notNull(), clientId: text('client_id'), chatConfig: jsonb('chat_config').$type(), ...timestamps, @@ -92,9 +99,15 @@ export const agents = pgTable( export const agentsKnowledgeBases = pgTable( 'agents_knowledge_bases', { - agentId: text('agent_id').references(() => agents.id, { onDelete: 'cascade' }).notNull(), - knowledgeBaseId: text('knowledge_base_id').references(() => knowledgeBases.id, { onDelete: 'cascade' }).notNull(), - userId: text('user_id').references(() => users.id, { onDelete: 'cascade' }).notNull(), + agentId: text('agent_id') + .references(() => agents.id, { onDelete: 'cascade' }) + .notNull(), + knowledgeBaseId: text('knowledge_base_id') + .references(() => knowledgeBases.id, { onDelete: 'cascade' }) + .notNull(), + userId: text('user_id') + .references(() => users.id, { onDelete: 'cascade' }) + .notNull(), enabled: boolean('enabled').default(true), ...timestamps, }, diff --git a/.agents/skills/hotkey/SKILL.md b/.agents/skills/hotkey/SKILL.md index 2f96149aa8..0517c2e9aa 100644 --- a/.agents/skills/hotkey/SKILL.md +++ b/.agents/skills/hotkey/SKILL.md @@ -71,7 +71,7 @@ const clearChatHotkey = useUserStore(settingsSelectors.getHotkeyById(HotkeyEnum. - ) + ); } ``` @@ -548,13 +542,11 @@ function EditorButton({ onClick }: { onClick: () => void }) { function FlagsProvider({ children, flags }: Props) { useEffect(() => { if (flags.editorEnabled && typeof window !== 'undefined') { - void import('./monaco-editor').then(mod => mod.init()) + void import('./monaco-editor').then((mod) => mod.init()); } - }, [flags.editorEnabled]) + }, [flags.editorEnabled]); - return - {children} - + return {children}; } ``` @@ -577,20 +569,20 @@ Optimizing server-side rendering and data fetching eliminates server-side waterf **Implementation:** ```typescript -import { LRUCache } from 'lru-cache' +import { LRUCache } from 'lru-cache'; const cache = new LRUCache({ max: 1000, - ttl: 5 * 60 * 1000 // 5 minutes -}) + ttl: 5 * 60 * 1000, // 5 minutes +}); export async function getUser(id: string) { - const cached = cache.get(id) - if (cached) return cached + const cached = cache.get(id); + if (cached) return cached; - const user = await db.user.findUnique({ where: { id } }) - cache.set(id, user) - return user + const user = await db.user.findUnique({ where: { id } }); + cache.set(id, user); + return user; } // Request 1: DB query, result cached @@ -603,7 +595,7 @@ Use when sequential user actions hit multiple endpoints needing the same data wi **In traditional serverless:** Each invocation runs in isolation, so consider Redis for cross-process caching. -Reference: [https://github.com/isaacs/node-lru-cache](https://github.com/isaacs/node-lru-cache) +Reference: ### 3.2 Minimize Serialization at RSC Boundaries @@ -615,13 +607,13 @@ The React Server/Client boundary serializes all object properties into strings a ```tsx async function Page() { - const user = await fetchUser() // 50 fields - return + const user = await fetchUser(); // 50 fields + return ; } -'use client' +('use client'); function Profile({ user }: { user: User }) { - return
{user.name}
// uses 1 field + return
{user.name}
; // uses 1 field } ``` @@ -629,13 +621,13 @@ function Profile({ user }: { user: User }) { ```tsx async function Page() { - const user = await fetchUser() - return + const user = await fetchUser(); + return ; } -'use client' +('use client'); function Profile({ name }: { name: string }) { - return
{name}
+ return
{name}
; } ``` @@ -649,18 +641,18 @@ React Server Components execute sequentially within a tree. Restructure with com ```tsx export default async function Page() { - const header = await fetchHeader() + const header = await fetchHeader(); return (
{header}
- ) + ); } async function Sidebar() { - const items = await fetchSidebarItems() - return + const items = await fetchSidebarItems(); + return ; } ``` @@ -668,13 +660,13 @@ async function Sidebar() { ```tsx async function Header() { - const data = await fetchHeader() - return
{data}
+ const data = await fetchHeader(); + return
{data}
; } async function Sidebar() { - const items = await fetchSidebarItems() - return + const items = await fetchSidebarItems(); + return ; } export default function Page() { @@ -683,7 +675,7 @@ export default function Page() {
- ) + ); } ``` @@ -691,13 +683,13 @@ export default function Page() { ```tsx async function Header() { - const data = await fetchHeader() - return
{data}
+ const data = await fetchHeader(); + return
{data}
; } async function Sidebar() { - const items = await fetchSidebarItems() - return + const items = await fetchSidebarItems(); + return ; } function Layout({ children }: { children: ReactNode }) { @@ -706,7 +698,7 @@ function Layout({ children }: { children: ReactNode }) {
{children} - ) + ); } export default function Page() { @@ -714,7 +706,7 @@ export default function Page() { - ) + ); } ``` @@ -727,15 +719,15 @@ Use `React.cache()` for server-side request deduplication. Authentication and da **Usage:** ```typescript -import { cache } from 'react' +import { cache } from 'react'; export const getCurrentUser = cache(async () => { - const session = await auth() - if (!session?.user?.id) return null + const session = await auth(); + if (!session?.user?.id) return null; return await db.user.findUnique({ - where: { id: session.user.id } - }) -}) + where: { id: session.user.id }, + }); +}); ``` Within a single request, multiple calls to `getCurrentUser()` execute the query only once. @@ -748,20 +740,20 @@ Within a single request, multiple calls to `getCurrentUser()` execute the query ```typescript const getUser = cache(async (params: { uid: number }) => { - return await db.user.findUnique({ where: { id: params.uid } }) -}) + return await db.user.findUnique({ where: { id: params.uid } }); +}); // Each call creates new object, never hits cache -getUser({ uid: 1 }) -getUser({ uid: 1 }) // Cache miss, runs query again +getUser({ uid: 1 }); +getUser({ uid: 1 }); // Cache miss, runs query again ``` **Correct: cache hit** ```typescript -const params = { uid: 1 } -getUser(params) // Query runs -getUser(params) // Cache hit (same reference) +const params = { uid: 1 }; +getUser(params); // Query runs +getUser(params); // Cache hit (same reference) ``` If you must pass objects, pass the same reference: @@ -782,7 +774,7 @@ In Next.js, the `fetch` API is automatically extended with request memoization. Use `React.cache()` to deduplicate these operations across your component tree. -Reference: [https://react.dev/reference/react/cache](https://react.dev/reference/react/cache) +Reference: ### 3.5 Use after() for Non-Blocking Operations @@ -793,46 +785,46 @@ Use Next.js's `after()` to schedule work that should execute after a response is **Incorrect: blocks response** ```tsx -import { logUserAction } from '@/app/utils' +import { logUserAction } from '@/app/utils'; export async function POST(request: Request) { // Perform mutation - await updateDatabase(request) - + await updateDatabase(request); + // Logging blocks the response - const userAgent = request.headers.get('user-agent') || 'unknown' - await logUserAction({ userAgent }) - + const userAgent = request.headers.get('user-agent') || 'unknown'; + await logUserAction({ userAgent }); + return new Response(JSON.stringify({ status: 'success' }), { status: 200, - headers: { 'Content-Type': 'application/json' } - }) + headers: { 'Content-Type': 'application/json' }, + }); } ``` **Correct: non-blocking** ```tsx -import { after } from 'next/server' -import { headers, cookies } from 'next/headers' -import { logUserAction } from '@/app/utils' +import { after } from 'next/server'; +import { headers, cookies } from 'next/headers'; +import { logUserAction } from '@/app/utils'; export async function POST(request: Request) { // Perform mutation - await updateDatabase(request) - + await updateDatabase(request); + // Log after response is sent after(async () => { - const userAgent = (await headers()).get('user-agent') || 'unknown' - const sessionCookie = (await cookies()).get('session-id')?.value || 'anonymous' - - logUserAction({ sessionCookie, userAgent }) - }) - + const userAgent = (await headers()).get('user-agent') || 'unknown'; + const sessionCookie = (await cookies()).get('session-id')?.value || 'anonymous'; + + logUserAction({ sessionCookie, userAgent }); + }); + return new Response(JSON.stringify({ status: 'success' }), { status: 200, - headers: { 'Content-Type': 'application/json' } - }) + headers: { 'Content-Type': 'application/json' }, + }); } ``` @@ -856,7 +848,7 @@ The response is sent immediately while logging happens in the background. - Works in Server Actions, Route Handlers, and Server Components -Reference: [https://nextjs.org/docs/app/api-reference/functions/after](https://nextjs.org/docs/app/api-reference/functions/after) +Reference: --- @@ -879,12 +871,12 @@ function useKeyboardShortcut(key: string, callback: () => void) { useEffect(() => { const handler = (e: KeyboardEvent) => { if (e.metaKey && e.key === key) { - callback() + callback(); } - } - window.addEventListener('keydown', handler) - return () => window.removeEventListener('keydown', handler) - }, [key, callback]) + }; + window.addEventListener('keydown', handler); + return () => window.removeEventListener('keydown', handler); + }, [key, callback]); } ``` @@ -893,45 +885,49 @@ When using the `useKeyboardShortcut` hook multiple times, each instance will reg **Correct: N instances = 1 listener** ```tsx -import useSWRSubscription from 'swr/subscription' +import useSWRSubscription from 'swr/subscription'; // Module-level Map to track callbacks per key -const keyCallbacks = new Map void>>() +const keyCallbacks = new Map void>>(); function useKeyboardShortcut(key: string, callback: () => void) { // Register this callback in the Map useEffect(() => { if (!keyCallbacks.has(key)) { - keyCallbacks.set(key, new Set()) + keyCallbacks.set(key, new Set()); } - keyCallbacks.get(key)!.add(callback) + keyCallbacks.get(key)!.add(callback); return () => { - const set = keyCallbacks.get(key) + const set = keyCallbacks.get(key); if (set) { - set.delete(callback) + set.delete(callback); if (set.size === 0) { - keyCallbacks.delete(key) + keyCallbacks.delete(key); } } - } - }, [key, callback]) + }; + }, [key, callback]); useSWRSubscription('global-keydown', () => { const handler = (e: KeyboardEvent) => { if (e.metaKey && keyCallbacks.has(e.key)) { - keyCallbacks.get(e.key)!.forEach(cb => cb()) + keyCallbacks.get(e.key)!.forEach((cb) => cb()); } - } - window.addEventListener('keydown', handler) - return () => window.removeEventListener('keydown', handler) - }) + }; + window.addEventListener('keydown', handler); + return () => window.removeEventListener('keydown', handler); + }); } function Profile() { // Multiple shortcuts will share the same listener - useKeyboardShortcut('p', () => { /* ... */ }) - useKeyboardShortcut('k', () => { /* ... */ }) + useKeyboardShortcut('p', () => { + /* ... */ + }); + useKeyboardShortcut('k', () => { + /* ... */ + }); // ... } ``` @@ -946,34 +942,34 @@ Add `{ passive: true }` to touch and wheel event listeners to enable immediate s ```typescript useEffect(() => { - const handleTouch = (e: TouchEvent) => console.log(e.touches[0].clientX) - const handleWheel = (e: WheelEvent) => console.log(e.deltaY) - - document.addEventListener('touchstart', handleTouch) - document.addEventListener('wheel', handleWheel) - + const handleTouch = (e: TouchEvent) => console.log(e.touches[0].clientX); + const handleWheel = (e: WheelEvent) => console.log(e.deltaY); + + document.addEventListener('touchstart', handleTouch); + document.addEventListener('wheel', handleWheel); + return () => { - document.removeEventListener('touchstart', handleTouch) - document.removeEventListener('wheel', handleWheel) - } -}, []) + document.removeEventListener('touchstart', handleTouch); + document.removeEventListener('wheel', handleWheel); + }; +}, []); ``` **Correct:** ```typescript useEffect(() => { - const handleTouch = (e: TouchEvent) => console.log(e.touches[0].clientX) - const handleWheel = (e: WheelEvent) => console.log(e.deltaY) - - document.addEventListener('touchstart', handleTouch, { passive: true }) - document.addEventListener('wheel', handleWheel, { passive: true }) - + const handleTouch = (e: TouchEvent) => console.log(e.touches[0].clientX); + const handleWheel = (e: WheelEvent) => console.log(e.deltaY); + + document.addEventListener('touchstart', handleTouch, { passive: true }); + document.addEventListener('wheel', handleWheel, { passive: true }); + return () => { - document.removeEventListener('touchstart', handleTouch) - document.removeEventListener('wheel', handleWheel) - } -}, []) + document.removeEventListener('touchstart', handleTouch); + document.removeEventListener('wheel', handleWheel); + }; +}, []); ``` **Use passive when:** tracking/analytics, logging, any listener that doesn't call `preventDefault()`. @@ -990,47 +986,47 @@ SWR enables request deduplication, caching, and revalidation across component in ```tsx function UserList() { - const [users, setUsers] = useState([]) + const [users, setUsers] = useState([]); useEffect(() => { fetch('/api/users') - .then(r => r.json()) - .then(setUsers) - }, []) + .then((r) => r.json()) + .then(setUsers); + }, []); } ``` **Correct: multiple instances share one request** ```tsx -import useSWR from 'swr' +import useSWR from 'swr'; function UserList() { - const { data: users } = useSWR('/api/users', fetcher) + const { data: users } = useSWR('/api/users', fetcher); } ``` **For immutable data:** ```tsx -import { useImmutableSWR } from '@/lib/swr' +import { useImmutableSWR } from '@/lib/swr'; function StaticContent() { - const { data } = useImmutableSWR('/api/config', fetcher) + const { data } = useImmutableSWR('/api/config', fetcher); } ``` **For mutations:** ```tsx -import { useSWRMutation } from 'swr/mutation' +import { useSWRMutation } from 'swr/mutation'; function UpdateButton() { - const { trigger } = useSWRMutation('/api/user', updateUser) - return + const { trigger } = useSWRMutation('/api/user', updateUser); + return ; } ``` -Reference: [https://swr.vercel.app](https://swr.vercel.app) +Reference: ### 4.4 Version and Minimize localStorage Data @@ -1042,18 +1038,18 @@ Add version prefix to keys and store only needed fields. Prevents schema conflic ```typescript // No version, stores everything, no error handling -localStorage.setItem('userConfig', JSON.stringify(fullUserObject)) -const data = localStorage.getItem('userConfig') +localStorage.setItem('userConfig', JSON.stringify(fullUserObject)); +const data = localStorage.getItem('userConfig'); ``` **Correct:** ```typescript -const VERSION = 'v2' +const VERSION = 'v2'; function saveConfig(config: { theme: string; language: string }) { try { - localStorage.setItem(`userConfig:${VERSION}`, JSON.stringify(config)) + localStorage.setItem(`userConfig:${VERSION}`, JSON.stringify(config)); } catch { // Throws in incognito/private browsing, quota exceeded, or disabled } @@ -1061,21 +1057,21 @@ function saveConfig(config: { theme: string; language: string }) { function loadConfig() { try { - const data = localStorage.getItem(`userConfig:${VERSION}`) - return data ? JSON.parse(data) : null + const data = localStorage.getItem(`userConfig:${VERSION}`); + return data ? JSON.parse(data) : null; } catch { - return null + return null; } } // Migration from v1 to v2 function migrate() { try { - const v1 = localStorage.getItem('userConfig:v1') + const v1 = localStorage.getItem('userConfig:v1'); if (v1) { - const old = JSON.parse(v1) - saveConfig({ theme: old.darkMode ? 'dark' : 'light', language: old.lang }) - localStorage.removeItem('userConfig:v1') + const old = JSON.parse(v1); + saveConfig({ theme: old.darkMode ? 'dark' : 'light', language: old.lang }); + localStorage.removeItem('userConfig:v1'); } } catch {} } @@ -1087,10 +1083,13 @@ function migrate() { // User object has 20+ fields, only store what UI needs function cachePrefs(user: FullUser) { try { - localStorage.setItem('prefs:v1', JSON.stringify({ - theme: user.preferences.theme, - notifications: user.preferences.notifications - })) + localStorage.setItem( + 'prefs:v1', + JSON.stringify({ + theme: user.preferences.theme, + notifications: user.preferences.notifications, + }), + ); } catch {} } ``` @@ -1117,14 +1116,14 @@ Don't subscribe to dynamic state (searchParams, localStorage) if you only read i ```tsx function ShareButton({ chatId }: { chatId: string }) { - const searchParams = useSearchParams() + const searchParams = useSearchParams(); const handleShare = () => { - const ref = searchParams.get('ref') - shareChat(chatId, { ref }) - } + const ref = searchParams.get('ref'); + shareChat(chatId, { ref }); + }; - return + return ; } ``` @@ -1133,12 +1132,12 @@ function ShareButton({ chatId }: { chatId: string }) { ```tsx function ShareButton({ chatId }: { chatId: string }) { const handleShare = () => { - const params = new URLSearchParams(window.location.search) - const ref = params.get('ref') - shareChat(chatId, { ref }) - } + const params = new URLSearchParams(window.location.search); + const ref = params.get('ref'); + shareChat(chatId, { ref }); + }; - return + return ; } ``` @@ -1153,12 +1152,12 @@ Extract expensive work into memoized components to enable early returns before c ```tsx function Profile({ user, loading }: Props) { const avatar = useMemo(() => { - const id = computeAvatarId(user) - return - }, [user]) + const id = computeAvatarId(user); + return ; + }, [user]); - if (loading) return - return
{avatar}
+ if (loading) return ; + return
{avatar}
; } ``` @@ -1166,17 +1165,17 @@ function Profile({ user, loading }: Props) { ```tsx const UserAvatar = memo(function UserAvatar({ user }: { user: User }) { - const id = useMemo(() => computeAvatarId(user), [user]) - return -}) + const id = useMemo(() => computeAvatarId(user), [user]); + return ; +}); function Profile({ user, loading }: Props) { - if (loading) return + if (loading) return ; return (
- ) + ); } ``` @@ -1192,16 +1191,16 @@ Specify primitive dependencies instead of objects to minimize effect re-runs. ```tsx useEffect(() => { - console.log(user.id) -}, [user]) + console.log(user.id); +}, [user]); ``` **Correct: re-runs only when id changes** ```tsx useEffect(() => { - console.log(user.id) -}, [user.id]) + console.log(user.id); +}, [user.id]); ``` **For derived state, compute outside effect:** @@ -1210,17 +1209,17 @@ useEffect(() => { // Incorrect: runs on width=767, 766, 765... useEffect(() => { if (width < 768) { - enableMobileMode() + enableMobileMode(); } -}, [width]) +}, [width]); // Correct: runs only on boolean transition -const isMobile = width < 768 +const isMobile = width < 768; useEffect(() => { if (isMobile) { - enableMobileMode() + enableMobileMode(); } -}, [isMobile]) +}, [isMobile]); ``` ### 5.4 Subscribe to Derived State @@ -1233,9 +1232,9 @@ Subscribe to derived boolean state instead of continuous values to reduce re-ren ```tsx function Sidebar() { - const width = useWindowWidth() // updates continuously - const isMobile = width < 768 - return