背景
作为总任务 #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
设计约束
- runtime / tui 不直接读 skill 文件
- 只能通过 internal/skills 暴露统一接口
- skill 加载失败不能拖垮主链路
- 不允许把 provider 或 tool 执行逻辑塞进 skill loader
验收标准
- internal/skills 模块可独立列出本地可用 skills
- 支持通过 id 查询 skill 内容
- 单个 skill 损坏时,其余 skill 仍可用
- 重复 id / 非法 metadata / 空内容有明确错误
- 补齐以下测试:
- 本地加载成功
- 缺失 SKILL.md
- 非法 metadata
- 重复 id
- refresh 后结果更新
Refs
背景
作为总任务 #255 的第一步,当前需要先把 Skills 从“文本概念”提升为正式的领域对象。
在这一阶段,不处理 runtime 注入、不处理 UI 交互,而是先解决:
目标
建立 internal/skills 基础模块,提供统一的 skills 契约、加载器与注册表。
范围
1. 建立 Skills 领域模型
建议至少包含:
2. 建立本地 Loader
建议支持:
V1 可接受的约束:
3. 建立 Registry
建议提供:
4. 错误与可观测
需要明确:
的错误行为与降级路径。
非目标
设计约束
验收标准
Refs