refactor: 优化文件系统后端结构

This commit is contained in:
Wenjie Zhang 2026-03-02 00:04:16 +08:00
parent 1a1f86209f
commit 69281f6fe1
4 changed files with 36 additions and 27 deletions

View File

@ -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

View File

@ -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",
]

View File

@ -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),
},
)

View File

@ -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)