39 lines
2.1 KiB
Markdown
39 lines
2.1 KiB
Markdown
## 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 `{}`
|