From ee624513f1559e26b2ed6c8697ed201dc79b4707 Mon Sep 17 00:00:00 2001 From: Wenjie Zhang Date: Mon, 27 Apr 2026 02:24:52 +0800 Subject: [PATCH] =?UTF-8?q?style(format):=20=E6=A0=BC=E5=BC=8F=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../knowledge/implementations/lightrag.py | 6 +- .../yuxi/knowledge/implementations/milvus.py | 4 +- backend/package/yuxi/knowledge/manager.py | 4 +- backend/package/yuxi/services/chat_service.py | 3 +- .../yuxi/services/model_provider_service.py | 2 +- docs/.vitepress/config.mts | 3 +- web/src/assets/css/extension-detail.less | 6 +- web/src/assets/css/model-selector-common.less | 1 - web/src/components/EmbeddingModelSelector.vue | 7 +- web/src/components/KnowledgeBaseCard.vue | 35 ++++++-- web/src/components/ModelSelectorComponent.vue | 3 +- web/src/components/ToolsManagerComponent.vue | 6 +- .../components/extensions/ExtensionCard.vue | 78 ++++++++++++----- .../extensions/ExtensionCardGrid.vue | 5 +- .../extensions/ExtensionDetailLayout.vue | 2 +- .../extensions/ExtensionToolbar.vue | 2 +- web/src/components/extensions/McpCardList.vue | 28 ++++-- .../components/extensions/McpDetailView.vue | 47 +++++++--- .../components/extensions/McpFormModal.vue | 49 +++++++++-- .../components/extensions/SkillCardList.vue | 60 +++++++++---- .../components/extensions/SkillDetailView.vue | 85 +++++++++++++++---- .../extensions/SubagentCardList.vue | 15 ++-- .../extensions/SubagentDetailView.vue | 12 ++- .../components/extensions/ToolsCardList.vue | 2 +- web/src/components/shared/PageHeader.vue | 4 +- web/src/composables/useModelStatus.js | 14 ++- web/src/utils/modelIcon.js | 2 +- web/src/views/ExtensionsView.vue | 6 +- web/src/views/ModelConfigView.vue | 1 - 29 files changed, 368 insertions(+), 124 deletions(-) diff --git a/backend/package/yuxi/knowledge/implementations/lightrag.py b/backend/package/yuxi/knowledge/implementations/lightrag.py index cb8c9fd2..d0e22971 100644 --- a/backend/package/yuxi/knowledge/implementations/lightrag.py +++ b/backend/package/yuxi/knowledge/implementations/lightrag.py @@ -302,7 +302,9 @@ class LightRagKB(KnowledgeBase): ), ) - async def index_file(self, db_id: str, file_id: str, operator_id: str | None = None, params: dict | None = None) -> dict: + async def index_file( + self, db_id: str, file_id: str, operator_id: str | None = None, params: dict | None = None + ) -> dict: """ Index parsed file (Status: INDEXING -> INDEXED/ERROR_INDEXING) @@ -395,7 +397,7 @@ class LightRagKB(KnowledgeBase): logger.info( f"Indexed file {file_id} into LightRAG with {len(chunks)} chunks, " - f"chunk_preset_id={processing_params.get('chunk_preset_id')}" + f"chunk_preset_id={params.get('chunk_preset_id')}" ) # Update status diff --git a/backend/package/yuxi/knowledge/implementations/milvus.py b/backend/package/yuxi/knowledge/implementations/milvus.py index 59579ea5..35b82a2d 100644 --- a/backend/package/yuxi/knowledge/implementations/milvus.py +++ b/backend/package/yuxi/knowledge/implementations/milvus.py @@ -284,7 +284,9 @@ class MilvusKB(KnowledgeBase): """将文本分割成块""" return chunk_markdown(text, file_id, filename, params) - async def index_file(self, db_id: str, file_id: str, operator_id: str | None = None, params: dict | None = None) -> dict: + async def index_file( + self, db_id: str, file_id: str, operator_id: str | None = None, params: dict | None = None + ) -> dict: """ Index parsed file (Status: INDEXING -> INDEXED/ERROR_INDEXING) diff --git a/backend/package/yuxi/knowledge/manager.py b/backend/package/yuxi/knowledge/manager.py index 77bdc54a..b23ed87d 100644 --- a/backend/package/yuxi/knowledge/manager.py +++ b/backend/package/yuxi/knowledge/manager.py @@ -415,7 +415,9 @@ class KnowledgeBaseManager: kb_instance = await self._get_kb_for_database(db_id) return await kb_instance.parse_file(db_id, file_id, operator_id) - async def index_file(self, db_id: str, file_id: str, operator_id: str | None = None, params: dict | None = None) -> dict: + async def index_file( + self, db_id: str, file_id: str, operator_id: str | None = None, params: dict | None = None + ) -> dict: """Index parsed file""" kb_instance = await self._get_kb_for_database(db_id) return await kb_instance.index_file(db_id, file_id, operator_id, params=params) diff --git a/backend/package/yuxi/services/chat_service.py b/backend/package/yuxi/services/chat_service.py index 518d186e..b9cb9def 100644 --- a/backend/package/yuxi/services/chat_service.py +++ b/backend/package/yuxi/services/chat_service.py @@ -263,6 +263,7 @@ async def save_messages_from_langgraph_state( elif msg_type == "tool": await _save_tool_message(conv_repo, msg_dict) + def _extract_interrupt_info(state) -> Any | None: """从 LangGraph state 中提取中断信息""" if hasattr(state, "tasks") and state.tasks: @@ -1086,7 +1087,7 @@ async def stream_agent_resume( except Exception as e: logger.error(f"Error saving messages from LangGraph state: {e}") logger.error(traceback.format_exc()) - yield make_chunk(status="warning", message=f"消息保存失败: {e}", meta=meta) + yield make_resume_chunk(status="warning", message=f"消息保存失败: {e}", meta=meta) yield make_resume_chunk(status="finished", meta=meta) diff --git a/backend/package/yuxi/services/model_provider_service.py b/backend/package/yuxi/services/model_provider_service.py index f4125108..ec4b6d37 100644 --- a/backend/package/yuxi/services/model_provider_service.py +++ b/backend/package/yuxi/services/model_provider_service.py @@ -7,6 +7,7 @@ from typing import Any import httpx from sqlalchemy.ext.asyncio import AsyncSession +from yuxi.config.builtin_providers import BUILTIN_PROVIDERS from yuxi.repositories.model_provider_repository import ( create_model_provider, delete_model_provider, @@ -14,7 +15,6 @@ from yuxi.repositories.model_provider_repository import ( list_model_providers, update_model_provider, ) -from yuxi.config.builtin_providers import BUILTIN_PROVIDERS from yuxi.services.model_cache import is_v2_spec_format from yuxi.storage.postgres.models_business import ModelProvider diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 93cb262b..5c4edf65 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -11,7 +11,8 @@ export default defineConfig({ ignoreDeadLinks: [ /localhost/, /CONTRIBUTING$/, - /docker-compose\.yml$/ + /docker-compose\.yml$/, + /^\.\/intro\// ], markdown: { config: (md) => { diff --git a/web/src/assets/css/extension-detail.less b/web/src/assets/css/extension-detail.less index e7550cf3..6747b411 100644 --- a/web/src/assets/css/extension-detail.less +++ b/web/src/assets/css/extension-detail.less @@ -27,7 +27,9 @@ cursor: pointer; padding: 4px 8px; border-radius: 6px; - transition: color 0.15s, background 0.15s; + transition: + color 0.15s, + background 0.15s; &:hover { color: var(--gray-700); @@ -90,4 +92,4 @@ min-height: 0; overflow: hidden; } -} \ No newline at end of file +} diff --git a/web/src/assets/css/model-selector-common.less b/web/src/assets/css/model-selector-common.less index 52d0cfa1..34c2dead 100644 --- a/web/src/assets/css/model-selector-common.less +++ b/web/src/assets/css/model-selector-common.less @@ -86,7 +86,6 @@ } } - // Provider 标签样式 .provider-tag { padding: 2px 4px; diff --git a/web/src/components/EmbeddingModelSelector.vue b/web/src/components/EmbeddingModelSelector.vue index 6305ca1e..56dc18d1 100644 --- a/web/src/components/EmbeddingModelSelector.vue +++ b/web/src/components/EmbeddingModelSelector.vue @@ -101,7 +101,12 @@ const emit = defineEmits(['update:value', 'change']) const v2Models = ref({}) const v1ModelStatuses = reactive({}) -const { statusMap: v2ModelStatuses, getStatusIcon: getV2StatusIcon, getStatusClass: getV2StatusClass, getStatusTooltip: getV2StatusTooltip, checkV2Status, checkV2Statuses } = useModelStatus() +const { + getStatusIcon: getV2StatusIcon, + getStatusClass: getV2StatusClass, + getStatusTooltip: getV2StatusTooltip, + checkV2Statuses +} = useModelStatus() const state = reactive({ checkingStatus: false }) diff --git a/web/src/components/KnowledgeBaseCard.vue b/web/src/components/KnowledgeBaseCard.vue index 12478f98..015fd5f6 100644 --- a/web/src/components/KnowledgeBaseCard.vue +++ b/web/src/components/KnowledgeBaseCard.vue @@ -530,12 +530,33 @@ const deleteDatabase = () => { background: var(--gray-100); color: var(--gray-600); - &.tag-purple { background: #f3e8ff; color: #7c3aed; } - &.tag-blue { background: var(--color-info-50); color: var(--color-info-700); } - &.tag-red { background: var(--color-error-50); color: var(--color-error-700); } - &.tag-green { background: var(--color-success-50); color: var(--color-success-700); } - &.tag-gold { background: #fef3c7; color: #d97706; } - &.tag-cyan { background: #cffafe; color: #0891b2; } - &.tag-orange { background: #fff7ed; color: #ea580c; } + &.tag-purple { + background: #f3e8ff; + color: #7c3aed; + } + &.tag-blue { + background: var(--color-info-50); + color: var(--color-info-700); + } + &.tag-red { + background: var(--color-error-50); + color: var(--color-error-700); + } + &.tag-green { + background: var(--color-success-50); + color: var(--color-success-700); + } + &.tag-gold { + background: #fef3c7; + color: #d97706; + } + &.tag-cyan { + background: #cffafe; + color: #0891b2; + } + &.tag-orange { + background: #fff7ed; + color: #ea580c; + } } diff --git a/web/src/components/ModelSelectorComponent.vue b/web/src/components/ModelSelectorComponent.vue index 925381a9..a88b487f 100644 --- a/web/src/components/ModelSelectorComponent.vue +++ b/web/src/components/ModelSelectorComponent.vue @@ -125,7 +125,7 @@ const refreshCache = async () => { } // 状态管理 -const { statusMap: modelStatusMap, getStatusIcon, getStatusTooltip } = useModelStatus() +useModelStatus() const state = reactive({ currentModelStatus: null, checkingStatus: false, @@ -197,7 +197,6 @@ const handleSelectV2Model = (spec) => { \ No newline at end of file + diff --git a/web/src/components/extensions/ExtensionToolbar.vue b/web/src/components/extensions/ExtensionToolbar.vue index bf7d8070..dbee79ad 100644 --- a/web/src/components/extensions/ExtensionToolbar.vue +++ b/web/src/components/extensions/ExtensionToolbar.vue @@ -76,4 +76,4 @@ defineProps({ background-color: transparent; } } - \ No newline at end of file + diff --git a/web/src/components/extensions/McpCardList.vue b/web/src/components/extensions/McpCardList.vue index d7a87391..eb907725 100644 --- a/web/src/components/extensions/McpCardList.vue +++ b/web/src/components/extensions/McpCardList.vue @@ -14,8 +14,14 @@ -
- +
+