feat(skills): sdlc 产线默认 task/team-communication 技能 + skill_loader 支持 capability/tools

- 产线技能放正确位置 pipelines/sdlc_general/common/(原 all/ 误放全局,已删)
- skill_loader 支持 frontmatter capability/tools 字段,to_prompt_block 注入配套能力+工具名
- task/team-communication frontmatter 声明 capability+tools
This commit is contained in:
yumoqing 2026-08-17 00:07:57 +08:00
parent 5f754a8f61
commit 189d75f12c
3 changed files with 29 additions and 9 deletions

View File

@ -64,6 +64,8 @@ class Skill:
scope_id: str = "" # org_id / pipeline_id / pipeline_id:role / project_id / user_id
trigger_keywords: List[str] = field(default_factory=list)
version: str = "1.0.0"
capability: str = "" # 配套能力名(如 task_capability / communication
tools: List[str] = field(default_factory=list) # 配套工具名列表
@classmethod
def from_file(cls, filepath: str, scope: str = "global",
@ -73,6 +75,8 @@ class Skill:
description = ""
trigger_keywords = []
version = "1.0.0"
capability = ""
tools = []
try:
with open(filepath, "r", encoding="utf-8") as f:
@ -87,6 +91,8 @@ class Skill:
trigger_keywords = fm.get("trigger_keywords", trigger_keywords)
version = fm.get("version", version)
scope = fm.get("scope", scope)
capability = fm.get("capability", "") or ""
tools = fm.get("tools", []) or []
if not description:
for line in content.split("\n"):
@ -99,6 +105,7 @@ class Skill:
name=name, path=filepath, description=description,
content=content, scope=scope, scope_id=scope_id,
trigger_keywords=trigger_keywords, version=version,
capability=capability, tools=tools,
)
def to_prompt_block(self) -> str:
@ -109,10 +116,19 @@ class Skill:
end = body.find("---", 3)
if end != -1:
body = body[end + 3:].strip()
# 配套能力/工具声明frontmatter 里 capability/tools剥离后这里显式注入让 LLM 知道工具在哪)
cap_line = ""
if self.capability or self.tools:
parts = []
if self.capability:
parts.append(f"配套能力: {self.capability}")
if self.tools:
parts.append(f"配套工具: {', '.join(self.tools)}")
cap_line = " | ".join(parts) + "\n"
return f"""## [{scope_tag}] {self.name}
{self.description}
{body}
{cap_line}{body}
"""

View File

@ -1,9 +1,11 @@
---
name: task
description: 任务状态机规范——定义任务状态、合法流转、角色→操作权限、门禁、人拍板点。agent 处理任务时据此操作LLM 读本 skill 判断流转合法性。产线默认 SDLC 状态机,项目可同名覆盖。触发:认领/提交/审核/退回/完成/重试任务。
description: SDLC 产线默认任务状态机规范——定义任务状态、合法流转、角色→操作权限、门禁、人拍板点。agent 处理任务时据此操作LLM 读本 skill 判断流转合法性。项目可同名 skill 覆盖。触发:认领/提交/审核/退回/完成/重试任务。
capability: task_capability
tools: [claim_task, submit_task, approve_task, reject_task, complete_task, mark_failed, retry_task, suspend_task, revive_task, set_task_state]
---
# 任务状态机规范
# 任务状态机规范SDLC 产线默认)
本 skill 是**规范**(任务状态 + 流转规则 + 角色权限)。任务操作由系统固化的 **task 能力**(工具)执行,
本 skill 描述这些工具该怎么用、什么时候能用。
@ -75,5 +77,5 @@ problem_type 用 approval/confirm。人答复后由 agent 再执行状态迁
## 八、分层覆盖
本 skill 是产线默认SDLC 状态机);项目可放**同名 task skill** 覆盖:简化/扩展状态机、改角色权限。
加载顺序:项目级 → 产线级 → 全局兜底
本 skill 是 **SDLC 产线默认**状态机;项目可用**同名 task skill** 覆盖:简化/扩展状态机、改角色权限。
加载优先级低→高global → org → pipeline(common) → role → project → user

View File

@ -1,9 +1,11 @@
---
name: team-communication
description: 团队沟通规范问题冒泡——定义团队角色、问题类型、冒泡路径agent 有问题时据此处理(提问题/找自己要处理的/回答/转交。角色用规范名agent 角色 agent.{role},人角色 {orgtype}.{role}。产线默认规范项目可同名覆盖。触发agent 发现问题、角色缺信息、PM 退回、故障上报、客户提问、待处理问题>0。
description: SDLC 产线默认团队沟通规范问题冒泡——定义团队角色、问题类型、冒泡路径agent 有问题时据此处理(提问题/找自己要处理的/回答/转交。角色用规范名agent 角色 agent.{role},人角色 {orgtype}.{role}。项目可同名覆盖。触发agent 发现问题、角色缺信息、PM 退回、故障上报、客户提问、待处理问题>0。
capability: communication
tools: [raise_problem, resolve_problem, escalate_problem, list_problems_for]
---
# 团队沟通(问题冒泡)规范
# 团队沟通(问题冒泡)规范SDLC 产线默认)
本 skill 是**规范**(团队结构 + 问题类型 + 冒泡路径)。问题操作的工具由系统固化,
agent 读本 skill 理解规范后,用工具执行。
@ -58,8 +60,8 @@ cockpit 侧包装:`list_questions`(查待我处理)、`answer_question`
## 六、分层与覆盖
- 本 skill 是**产线默认规范**;项目可用**同名 team-communication skill** 覆盖。
- 加载顺序:项目级 → 产线级 → 全局兜底
本 skill 是 **SDLC 产线默认**规范;项目可用**同名 team-communication skill** 覆盖。
加载优先级低→高global → org → pipeline(common) → role → project → user
## 七、状态与归属