Skip to content

feat(skills): 建立 Skills Registry / Loader / Source Model #257

@Cai-Tang-www

Description

@Cai-Tang-www

背景

作为总任务 #255 的第一步,当前需要先把 Skills 从“文本概念”提升为正式的领域对象。
在这一阶段,不处理 runtime 注入、不处理 UI 交互,而是先解决:

  • skill 是什么
  • 从哪里加载
  • 如何注册、查询、刷新
  • 如何保证 runtime / tui 不直接读 skill 文件

目标

建立 internal/skills 基础模块,提供统一的 skills 契约、加载器与注册表。

范围

1. 建立 Skills 领域模型

建议至少包含:

  • Descriptor
    • ID
    • Name
    • Description
    • Version
    • Source
    • Scope
  • Content
    • Instruction
    • References
    • Examples
    • ToolHints
  • Reference
    • 路径 / 标题 / 可选摘要
  • SourceKind
    • local / builtin(先支持这两类即可)
  • ActivationScope
    • global / workspace / session / explicit

2. 建立本地 Loader

建议支持:

  • 从约定 skill 根目录扫描
  • 识别 SKILL.md
  • 读取基础 metadata
  • 返回结构化 Descriptor + Content

V1 可接受的约束:

  • metadata 可以来自 frontmatter,或者约定的 markdown 头部块
  • 如果 metadata 缺失,允许按安全默认值降级
  • 但不能因为单个坏 skill 导致整个 registry 初始化失败

3. 建立 Registry

建议提供:

  • List(ctx, input)
  • Get(ctx, id)
  • Refresh(ctx)
  • 过滤能力:按 source / workspace / visible scope 过滤

4. 错误与可观测

需要明确:

  • skill 文件不存在
  • metadata 非法
  • 内容为空
  • 重复 id
  • 刷新失败
    的错误行为与降级路径。

非目标

  • 不在本 issue 接 runtime/context 注入
  • 不在本 issue 做 slash command 或 TUI
  • 不在本 issue 做自动推荐
  • 不在本 issue 做远程 marketplace

设计约束

  1. runtime / tui 不直接读 skill 文件
  2. 只能通过 internal/skills 暴露统一接口
  3. skill 加载失败不能拖垮主链路
  4. 不允许把 provider 或 tool 执行逻辑塞进 skill loader

验收标准

  • internal/skills 模块可独立列出本地可用 skills
  • 支持通过 id 查询 skill 内容
  • 单个 skill 损坏时,其余 skill 仍可用
  • 重复 id / 非法 metadata / 空内容有明确错误
  • 补齐以下测试:
    • 本地加载成功
    • 缺失 SKILL.md
    • 非法 metadata
    • 重复 id
    • refresh 后结果更新

Refs

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions