From 69281f6fe1908f9da162a6940776bcafc7875338 Mon Sep 17 00:00:00 2001 From: Wenjie Zhang Date: Mon, 2 Mar 2026 00:04:16 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=B3=BB=E7=BB=9F=E5=90=8E=E7=AB=AF=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/utils/lifespan.py | 1 - src/agents/common/backends/__init__.py | 7 ++++- src/agents/common/backends/composite.py | 29 ++++++++++++++++++++ src/agents/common/backends/skills_backend.py | 26 +----------------- 4 files changed, 36 insertions(+), 27 deletions(-) create mode 100644 src/agents/common/backends/composite.py diff --git a/server/utils/lifespan.py b/server/utils/lifespan.py index 657e71bd..42ff8e1d 100644 --- a/server/utils/lifespan.py +++ b/server/utils/lifespan.py @@ -4,7 +4,6 @@ from fastapi import FastAPI from src.services.task_service import tasker from src.services.mcp_service import init_mcp_servers -from src.services.skill_service import init_skills_cache from src.services.run_queue_service import close_queue_clients, get_redis_client from src.storage.postgres.manager import pg_manager from src.knowledge import knowledge_base diff --git a/src/agents/common/backends/__init__.py b/src/agents/common/backends/__init__.py index 6cb67b79..f64368e6 100644 --- a/src/agents/common/backends/__init__.py +++ b/src/agents/common/backends/__init__.py @@ -1,6 +1,11 @@ -from .skills_backend import SelectedSkillsReadonlyBackend, create_agent_composite_backend +from deepagents.backends import CompositeBackend, StateBackend + +from .composite import create_agent_composite_backend +from .skills_backend import SelectedSkillsReadonlyBackend __all__ = [ + "CompositeBackend", + "StateBackend", "SelectedSkillsReadonlyBackend", "create_agent_composite_backend", ] diff --git a/src/agents/common/backends/composite.py b/src/agents/common/backends/composite.py new file mode 100644 index 00000000..d6119471 --- /dev/null +++ b/src/agents/common/backends/composite.py @@ -0,0 +1,29 @@ +from deepagents.backends import CompositeBackend, StateBackend + +from src.services.skill_resolver import normalize_selected_skills +from src.services.skill_service import is_valid_skill_slug + +from .skills_backend import SelectedSkillsReadonlyBackend + + +def _get_visible_skills_from_runtime(runtime) -> list[str]: + context = getattr(runtime, "context", None) + snapshot = getattr(context, "skill_session_snapshot", None) + if isinstance(snapshot, dict): + visible = snapshot.get("visible_skills") + if isinstance(visible, list): + return [slug for slug in visible if isinstance(slug, str) and is_valid_skill_slug(slug)] + + selected = getattr(context, "skills", None) or [] + return normalize_selected_skills(selected) + + +def create_agent_composite_backend(runtime) -> CompositeBackend: + """为 agent 构建 backend:默认 StateBackend + /skills 路由只读 backend。""" + visible_skills = _get_visible_skills_from_runtime(runtime) + return CompositeBackend( + default=StateBackend(runtime), + routes={ + "/skills/": SelectedSkillsReadonlyBackend(selected_slugs=visible_skills), + }, + ) diff --git a/src/agents/common/backends/skills_backend.py b/src/agents/common/backends/skills_backend.py index dba7b86c..b4a54810 100644 --- a/src/agents/common/backends/skills_backend.py +++ b/src/agents/common/backends/skills_backend.py @@ -3,10 +3,9 @@ from __future__ import annotations from pathlib import PurePosixPath from typing import Any -from deepagents.backends import CompositeBackend, FilesystemBackend, StateBackend +from deepagents.backends import FilesystemBackend from deepagents.backends.protocol import EditResult, FileDownloadResponse, FileUploadResponse, WriteResult -from src.services.skill_resolver import normalize_selected_skills from src.services.skill_service import get_skills_root_dir, is_valid_skill_slug @@ -118,26 +117,3 @@ class SelectedSkillsReadonlyBackend(FilesystemBackend): continue responses.append(FileDownloadResponse(path=path, content=target.read_bytes(), error=None)) return responses - - -def create_agent_composite_backend(runtime) -> CompositeBackend: - """为 agent 构建 backend:默认 StateBackend + /skills 路由只读 backend。""" - visible_skills = _get_visible_skills_from_runtime(runtime) - return CompositeBackend( - default=StateBackend(runtime), - routes={ - "/skills/": SelectedSkillsReadonlyBackend(selected_slugs=visible_skills), - }, - ) - - -def _get_visible_skills_from_runtime(runtime) -> list[str]: - context = getattr(runtime, "context", None) - snapshot = getattr(context, "skill_session_snapshot", None) - if isinstance(snapshot, dict): - visible = snapshot.get("visible_skills") - if isinstance(visible, list): - return [slug for slug in visible if isinstance(slug, str) and is_valid_skill_slug(slug)] - - selected = getattr(context, "skills", None) or [] - return normalize_selected_skills(selected)