## Purpose 提供自动化的 skill 打包能力,将 skill/SKILL.md 和 scripts/ 目录打包到 build/ 目录,便于 skill 分发。 ## Requirements ### Requirement: build.py 一键打包 系统 SHALL 提供 build.py 脚本,运行后完成 skill 的完整打包流程。 #### Scenario: 运行 build.py 成功 - **WHEN** 用户执行 `uv run --with pyarmor python build.py` - **THEN** 脚本完成所有打包步骤并输出成功信息 ### Requirement: 构建目录清理重建 系统 SHALL 在每次构建前删除整个 build 目录,然后重建空的 build 目录。 #### Scenario: 删除并重建 build 目录 - **WHEN** 构建开始 - **THEN** 脚本删除整个 build 目录(如有),然后创建新的空 build 目录 ### Requirement: SKILL.md 动态生成 系统 SHALL 读取 SKILL.md 模板,动态注入 version 和 author 字段后写入 build/SKILL.md。 #### Scenario: SKILL.md 包含动态元数据 - **WHEN** 构建执行 - **THEN** build/SKILL.md 的 metadata 包含 version 和 author 字段 #### Scenario: version 是时间戳 - **WHEN** 构建在 2026年3月11日 14点30分22秒执行 - **THEN** build/SKILL.md 中 `metadata.version` 值为 "20260311_143022" #### Scenario: author 来自 git 配置 - **WHEN** git config user.name 是 "Your Name",git config user.email 是 "your@email.com" - **THEN** build/SKILL.md 中 `metadata.author` 值为 "Your Name " ### Requirement: git 配置读取 系统 SHALL 从 git config 读取 user.name 和 user.email。 #### Scenario: git config 读取成功 - **WHEN** git config 已设置 user.name 和 user.email - **THEN** 系统读取到正确的值 #### Scenario: git config 未设置 - **WHEN** git config user.name 或 user.email 未设置 - **THEN** 系统显示错误信息并退出 ### Requirement: 时间戳版本号 系统 SHALL 生成 YYYYMMDD_HHMMSS 格式的时间戳作为构建版本标识。 #### Scenario: 时间戳格式正确 - **WHEN** 构建在 2025年3月9日 14点30分22秒执行 - **THEN** 生成的版本号为 20250309_143022 ### Requirement: 输出构建信息 系统 SHALL 在构建完成后打印版本号和构建结果信息。 #### Scenario: 显示构建信息 - **WHEN** 构建成功完成 - **THEN** 控制台输出版本号和作者信息 ### Requirement: 仅混淆构建 系统 SHALL 仅提供混淆构建模式,移除非混淆选项。 #### Scenario: build.py 始终混淆 - **WHEN** 用户执行 `uv run --with pyarmor python build.py` - **THEN** 系统使用 PyArmor 混淆 scripts 目录代码 #### Scenario: 无 --obfuscate 参数 - **WHEN** 用户运行 build.py - **THEN** 系统不需要 --obfuscate 参数,直接执行混淆构建 ### Requirement: PyArmor 混淆执行 系统 SHALL 调用 PyArmor 工具对 scripts 目录进行混淆。 #### Scenario: PyArmor 成功执行 - **WHEN** PyArmor 可用 - **THEN** 系统执行 pyarmor gen --recursive 命令 #### Scenario: 混淆后文件输出 - **WHEN** PyArmor 混淆完成 - **THEN** build/ 目录包含混淆后的文件和 pyarmor_runtime 子目录 ### Requirement: PyArmor 未安装友好提示 系统 SHALL 在 PyArmor 未安装时提供清晰的错误提示,引导用户正确使用 `uv run --with pyarmor`。 #### Scenario: PyArmor ImportError - **WHEN** 未通过 --with pyarmor 加载 - **THEN** 系统显示友好错误信息,提示正确命令 ### Requirement: SKILL.md 保持明文 系统 SHALL 在混淆模式下仍然将 SKILL.md 作为明文文件复制,不进行混淆。 #### Scenario: SKILL.md 保持明文 - **WHEN** 启用混淆执行构建 - **THEN** build/SKILL.md 文件为明文,内容包含动态注入的元数据 ### Requirement: 混淆错误处理 系统 SHALL 在 PyArmor 混淆失败时捕获错误并显示详细信息。 #### Scenario: PyArmor 命令失败 - **WHEN** pyarmor 命令执行返回非零退出码 - **THEN** 系统显示退出码、标准输出和错误输出信息 ### Requirement: 一键发布脚本 系统 SHALL 提供 publish.sh 脚本,一键执行混淆构建并发布。 #### Scenario: publish.sh 执行成功 - **WHEN** 用户执行 `./publish.sh` - **THEN** 系统依次执行混淆构建和发布