SkillStore v0.1.0 跨项目技能管理平台

· SkillStore

今日进展

  1. SkillStore v0.1.0 发布:跨项目技能管理与编排平台
  2. 实现技能发现:扫描 SKILL.md 自动解析元数据并注册
  3. 实现 Junction 分发:技能跨项目链接,一处修改多处生效
  4. 实现 Pipeline 编排:多技能串行/并行工作流定义
  5. 实现版本管理:SKILL.md 内容快照、diff、回滚

关键代码/伪代码

技能发现 — SKILL.md 解析

# 技能发现流程: 扫描目录 -> 解析 SKILL.md -> 注册到数据库

CLASS SkillService:
    ASYNC DEF scan_and_register(self, project_path: Path):
        FOR skill_dir IN project_path.glob("skills/*/"):
            skill_md = skill_dir / "SKILL.md"
            IF NOT skill_md.exists():
                CONTINUE
            # 解析 SKILL.md 元数据
            metadata = self._parse_skill_md(skill_md)
            # 注册到数据库
            AWAIT self.repo.upsert(Skill(
                name=metadata["name"],
                domain=metadata["domain"],  # content/develop/tool/orchestrate/rules
                version=metadata["version"],
                description=metadata["description"],
                path=str(skill_dir),
            ))

    FUNCTION _parse_skill_md(self, path: Path) -> dict:
        content = path.read_text()
        # 解析 YAML frontmatter
        frontmatter = extract_yaml_frontmatter(content)
        RETURN {
            "name": frontmatter.get("name"),
            "domain": frontmatter.get("domain"),
            "version": frontmatter.get("version", "0.1.0"),
            "description": frontmatter.get("description"),
        }

Junction 分发 — 跨项目链接

# Junction: 技能从源项目分发到目标项目的符号链接

CLASS JunctionService:
    ASYNC DEF create_junction(self, skill_id, target_project_id):
        skill = AWAIT self.skill_repo.get(skill_id)
        target = AWAIT self.project_repo.get(target_project_id)
        # 创建符号链接: 目标项目/skills/技能名 -> 源项目/skills/技能名
        link_path = target.skills_dir / skill.name
        link_path.symlink_to(skill.path)
        # 记录 Junction 关系
        AWAIT self.junction_repo.create(Junction(
            skill_id=skill_id,
            source_project=skill.project_id,
            target_project=target_project_id,
        ))

Pipeline 编排

# Pipeline: 多技能串行/并行编排

CLASS OrchestrationService:
    ASYNC DEF execute_pipeline(self, pipeline_id, context):
        pipeline = AWAIT self.repo.get(pipeline_id)
        FOR step IN pipeline.steps:
            IF step.parallel:
                # 并行执行多个技能
                results = AWAIT asyncio.gather(*[
                    self._execute_skill(step.skill_id, context)
                    FOR step IN step.parallel_steps
                ])
            ELSE:
                # 串行执行
                result = AWAIT self._execute_skill(step.skill_id, context)
                context = step.transform(context, result)

遇到的问题

  • SKILL.md 格式不统一:不同项目写的 SKILL.md 格式差异大,解析器需要兼容多种写法
  • Windows 下符号链接需要管理员权限:Junction 分发在 Windows 上改用 junction point(目录联接)
  • Pipeline 编排的上下文传递设计:串行步骤间如何传递中间结果,最终选用了 context dict 方案

明日计划

  • 实现 Hub 远程同步:本地技能注册表同步到 clawhub.ai
  • 实现规则分配:将规范类技能(baseline/security/quality)分配到项目