Files
beaver_project/app-instance/backend/beaver/skills/resolver/runtime.py
steven_li 8a12c30141 feat(beaver): 完成Task Team功能v1实现,重构后端架构支持统一内核
新增内部Task系统,包括验证、反馈门控机制,实现自动质量验证
(通过率>=0.75)和用户反馈闭环(satisfied/revise/abandon)。

实现Agent Team v1协调器,支持sequence/parallel/dag执行策略,
sub-agent复用主AgentLoop,每个run使用独立memory snapshot。

建立Skill学习pipeline,包含draft/审核/发布/回滚完整生命周期,
通过Task验证通过且用户满意才生成学习候选。

重构目录结构,移除third_party依赖,建立统一engine内核,
所有agent共享运行时基础组件。

更新ContextBuilder清理provider消息字段,增强SkillContext版本管理,
集成TaskExecutionPlanner和TaskSkillResolver实现技能解析机制。
2026-05-08 17:14:14 +08:00

61 lines
2.0 KiB
Python

"""Runtime skill resolver。
这层负责回答一个运行时问题:
“这一次调用,哪些 skill 要被激活,并以什么形式注入上下文?”
第一版保持保守,只综合三类来源:
1. `always` skills
不在这里做复杂的语义匹配或自动推荐。
"""
from __future__ import annotations
from dataclasses import dataclass, field
from beaver.engine.context import SkillContext
from beaver.skills.catalog.loader import SkillsLoader
from beaver.skills.catalog.utils import strip_frontmatter
@dataclass(slots=True)
class ResolvedSkillSet:
"""一次运行最终解析出的 skills 结果。"""
activated_skills: list[SkillContext] = field(default_factory=list)
class RuntimeSkillResolver:
"""把 profile/request 转成当前轮次真正激活的 skill 集合。"""
def __init__(self, loader: SkillsLoader) -> None:
self.loader = loader
def resolve(
self,
) -> ResolvedSkillSet:
selected: list[str] = []
for name in self.loader.get_always_skills():
if name not in selected:
selected.append(name)
activated_skills: list[SkillContext] = []
for name in selected:
record = self.loader.get_skill_record(name)
raw_content = self.loader.load_published_skill(name)
content = strip_frontmatter(raw_content).strip() if raw_content else ""
if not content:
continue
activated_skills.append(
SkillContext(
name=name,
content=content,
version=record.version if record is not None else "legacy",
content_hash=(record.content_hash if record is not None and record.content_hash else ""),
activation_reason="always_skill",
tool_hints=list(record.tool_hints) if record is not None else [],
)
)
return ResolvedSkillSet(activated_skills=activated_skills)