Files
lyxy-document/openspec/specs/skill-packaging/spec.md
lanyuanxiaoyao 78063b9e07 fix: 修正 pyarmor_runtime 目录位置到 scripts 内部
- 修改 build.py 中混淆后文件移动逻辑,先移动 scripts 目录,再将 pyarmor_runtime 移动到 scripts 内部
- 更新 spec.md 中关于混淆后文件结构的描述
- 更新 config.yaml 中测试规范,强调严禁跳过测试

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 12:42:08 +08:00

4.2 KiB
Raw Blame History

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 your@email.com"

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 目录进行混淆,然后将 pyarmor_runtime 目录移动到 scripts 内部。

Scenario: PyArmor 成功执行

  • WHEN PyArmor 可用
  • THEN 系统执行 pyarmor gen --recursive 命令

Scenario: 混淆后文件输出

  • WHEN PyArmor 混淆完成
  • THEN build/ 目录包含混淆后的 scripts 目录,且 pyarmor_runtime 子目录位于 scripts/ 内部

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 系统依次执行混淆构建和发布