"""Skill 能力包 API(/tools/skills,skills-design §6)。""" from fastapi import APIRouter, Query, status from app.schemas.skills import ( CreateSkillRequest, SkillResponse, UpdateSkillRequest, ) from app.services import skills as skills_service router = APIRouter(prefix="/tools/skills", tags=["skills"]) @router.post("", response_model=SkillResponse, status_code=status.HTTP_201_CREATED) async def create_skill(payload: CreateSkillRequest) -> SkillResponse: """注册 Skill 能力包(name 唯一)。""" return await skills_service.create_skill( name=payload.name, description=payload.description, trigger=payload.trigger, prompt_fragment=payload.prompt_fragment, tool_bindings=payload.tool_bindings, risk_level=payload.risk_level, status=payload.status, ) @router.get("", response_model=list[SkillResponse]) async def list_skills( status: str | None = Query(default=None, description="按状态过滤:enabled/disabled"), ) -> list[SkillResponse]: """列举 Skill(可按 status 过滤)。""" return await skills_service.list_skills(status=status) @router.patch("/{skill_id}", response_model=SkillResponse) async def update_skill(skill_id: str, payload: UpdateSkillRequest) -> SkillResponse: """更新 / 启用 / 禁用 Skill。""" return await skills_service.update_skill( skill_id, description=payload.description, trigger=payload.trigger, prompt_fragment=payload.prompt_fragment, tool_bindings=payload.tool_bindings, risk_level=payload.risk_level, status=payload.status, ) @router.delete("/{skill_id}", status_code=status.HTTP_204_NO_CONTENT) async def delete_skill(skill_id: str) -> None: """删除 Skill。""" await skills_service.delete_skill(skill_id)