Files
llama-agent-skills/openspec/changes/add-skill-support/specs/skill-loader/spec.md
T
Summer Shen 9578366e36 init repo
2026-03-31 09:14:32 +08:00

39 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## ADDED Requirements
### Requirement: SKILL.md 文件解析
系统 SHALL 能够解析符合标准格式的 SKILL.md 文件,提取 YAML frontmatter 中的元数据和 Markdown 正文中的指令内容。
#### Scenario: 解析标准 SKILL.md 文件
- **WHEN** 提供一个包含 YAML frontmatter`---` 分隔)和 Markdown 正文的 SKILL.md 文件路径
- **THEN** 系统返回一个 Skill 对象,包含 `name`str)、`description`str)、`metadata`dict)和 `body`str)字段
#### Scenario: 解析缺少必填字段的 SKILL.md
- **WHEN** 提供的 SKILL.md 文件的 frontmatter 中缺少 `name` 字段
- **THEN** 系统抛出 `SkillLoadError` 异常,包含明确的错误描述
#### Scenario: 解析无 frontmatter 的文件
- **WHEN** 提供的文件不包含 YAML frontmatter(无 `---` 分隔符)
- **THEN** 系统抛出 `SkillLoadError` 异常,提示文件格式不合法
### Requirement: Skill 数据模型
系统 SHALL 提供一个 `Skill` 数据类(dataclass 或 Pydantic model),用于表示解析后的 SKILL 实例。
#### Scenario: Skill 数据模型包含所有必要字段
- **WHEN** 创建一个 Skill 实例
- **THEN** 该实例 MUST 包含以下字段:`name`str,必填)、`description`str,必填)、`body`str,必填)、`metadata`dict,可选,默认空 dict)、`source_path`Path | None,可选)
#### Scenario: Skill 实例不可变
- **WHEN** 尝试修改已创建的 Skill 实例的 `name` 字段
- **THEN** 系统抛出异常(frozen dataclass / immutable model
### Requirement: Frontmatter 元数据提取
系统 SHALL 从 YAML frontmatter 中提取以下标准字段:`name``description``license``compatibility``metadata`(包含 `author``version``generatedBy`)。
#### Scenario: 提取完整的 metadata
- **WHEN** SKILL.md 的 frontmatter 包含 `metadata: { author: "test", version: "1.0" }`
- **THEN** 解析结果的 `metadata` 字段为 `{"author": "test", "version": "1.0"}`
#### Scenario: metadata 缺失时使用默认值
- **WHEN** SKILL.md 的 frontmatter 不包含 `metadata` 字段
- **THEN** 解析结果的 `metadata` 字段为空 dict `{}`