npx vitest run test/ts/comet-scripts.test.ts # shell 脚本测试
npx vitest run # 全量测试仓库已配置 Git pre-commit 钩子(husky + lint-staged),每次 git commit 会自动对 src/ 下的暂存源文件运行 prettier --write(与 CI format:check 范围一致),编辑器无关,所有贡献者生效。
提交前建议手动确认(CI 会强制检查):
pnpm format:check # Prettier 格式检查
pnpm lint # ESLint
pnpm build # TypeScript 构建
pnpm test # 单元测试注:本地 Windows 若 core.autocrlf=true,未改动的旧文件可能因 CRLF 被 prettier --check 误报;钩子只处理暂存文件,不受影响,旧文件下次编辑时会自动转为 LF。
脚本位于 assets/skills/comet/scripts/,必须跨平台兼容(macOS / Linux / Windows Git Bash):
- 禁止
sed -i(GNU/BSD 不兼容),用awk做字段替换 - 必须兼容
sha256sum(GNU)和shasum -a 256(BSD/macOS) - 所有可选 grep 结果加
|| true防止pipefail误杀 - 新增脚本必须加入
beforeEach的拷贝列表和 manifest.json
comet-state.sh ← comet-guard.sh, comet-handoff.sh, comet-archive.sh
comet-yaml-validate.sh ← comet-guard.sh (preflight 阶段)
comet-handoff.sh ← comet-state.sh (写入 handoff_context/handoff_hash)
新增共享工具函数时(如 hash、yaml 解析),如果两个脚本都需要,允许在各自脚本中独立实现,不强制抽共享文件。
每个 change 的状态文件,字段变更需要同步三处:
comet-state.sh—cmd_set白名单 + enum 验证comet-yaml-validate.sh— schema 校验 + KNOWN_KEYStest/ts/comet-scripts.test.ts— 测试中的 yaml 字符串
skill 优化时先写中文版本(assets/skills-zh/),用户确认后再修改英文版本(assets/skills/)。
每次代码产生变更你都应该在完成后写Changelog,并确定是否需要升级版本号,版本号只会比master分支的版本号大一个版本,你需要确定一下当前master的版本号后做决定
如果当前已经有了一个比master大的版本Changelog,则应该追加到同一个版本的Changelog条目下
如果修改的是Skill内容,则需要等中英文完全同步之后再写Changelog
文件:CHANGELOG.md,新版本条目置顶。
## What's Changed [x.y.z] - YYYY-MM-DD
### Added / Changed / Fixed / Tests / Removed / Security
- **功能名**: 描述做了什么以及为什么
要点:
- 版本号与
package.json的version字段一致 - 每条以
- **粗体关键词**:开头,后接具体变更内容 - 按类型分组:Added → Changed → Fixed → Tests → Removed → Security
- 描述侧重 行为变更(what + why),不是实现细节
### Tests条目汇总新增测试覆盖的场景,不逐条列出测试用例
不能够直接修改Superpowers和OpenSpec的原始Skill
不能未经过同意直接在github上评论或者提交PR