.agents/skills/release-note-generator.md
基于本地 git 历史和实际代码 diff 生成 BetterGI 发布说明。发布说明的结构、分类和措辞应贴近 GitHub 已发布 Releases 的历史风格;生成具体内容时不依赖网络,所有变更信息从本地仓库获取。
已发布日志的稳定特征:
## <version> <简短主题>,例如 0.61.0 原神6.6、0.61.2 优化、0.60.1 修复老问题、0.59 自动烹饪与BUG修复。版本适配 / <月之X适配>、自动战斗、地图追踪、地图遮罩、独立任务、JS脚本 / JS相关、实时任务、自动剧情、其他。其他 分类保留,用于 UI、通知、配置、稳定性、OCR、启动器、仓库、文档等无法归入核心模块的内容。(#3132) @haokaiyang;多个 PR 可以写在同一括号组里,例如 (#3101 #3108)。Contributors、Assets、reaction 等区块。禁止执行或参考 git tag、git describe --tags。版本边界和输出版本号都不能使用 tag 作为依据。
从 HEAD 向后遍历提交历史,匹配明确以版本号发布为主题的提交:
Update version to X.Y.Zbump version to X.Y.Zrelease X.Y.ZvX.Y.Z\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?alpha 的提交(boundary_commit, HEAD],边界提交本身不计入git -c i18n.logOutputEncoding=utf8 -c core.quotepath=false log 获取提交序列--pretty=format:"%H%x00%h%x00%an%x00%ae%x00%s%x00%b%x1e",字段用 \x00 分隔,commit 用 \x1e 分隔git rev-list --count 取总数,采集后校验一致性Co-authored-by、正文中的 PR/Issue 号和补充说明git diff <sha>~1..<sha>@ 前缀author email 解析标识:
数字[email protected] → @login[email protected] → @login[email protected] 等非 noreply 邮箱 → @author name(即提交中的 an 字段值前加 @)Co-authored-by: name <email> 提取共同作者,并按同样规则解析huiyadanli(含邮箱 [email protected])时省略 @author(项目维护者,无需标注)优先使用以下历史 Release 常见分类,按顺序输出。只有对应分类下有变更时才输出该分类标题,无变更则跳过不输出。
分类来源于项目已发布 GitHub Releases,与项目实际使用习惯对齐:
| 分类名 | 对应项目模块 | 覆盖范围 |
|---|---|---|
版本适配 / <月之X适配> | Assets/ AutoFight/Assets/ AutoGeniusInvokation/Assets/ AutoTrackPath/Assets/ | 新角色识别数据、新地图添加、传送点/锚点数据更新、七圣召唤角色牌等元数据更新 |
| 自动战斗 | GameTask/AutoFight GameTask/Macro GameTask/SkillCd | 战斗策略、角色切换、技能释放与CD、一键宏、经验值拾取、战后拾取、游泳检测、角色数据(非版本适配类) |
| 地图追踪 | GameTask/AutoPathing GameTask/AutoTrackPath GameTask/MapMask | 路径执行与所有路径处理器(含莉奈娅挖矿、拾取、采矿等 Handler)、地图类型、传送逻辑、地图编辑器(MapPathingPage、MapEditorWebBridge) |
| 地图遮罩 | GameTask/MapMask View/MaskWindow* ViewModel/MaskWindow* Core/Config/MaskWindowConfig* | 地图遮罩、日志遮罩、遮罩指标栏、遮罩位置和实时展示 |
| 独立任务 | GameTask/AutoLeyLineOutcrop GameTask/AutoDomain GameTask/AutoBoss GameTask/AutoStygianOnslaught GameTask/AutoCook GameTask/AutoWood GameTask/AutoFishing GameTask/FarmingPlan GameTask/AutoSkip GameTask/QuickSereniteaPot | 地脉花、秘境、首领讨伐、幽境危战、烹饪、伐木、钓鱼、养成计划、自动剧情、快速尘歌壶等独立运行的任务 |
| JS脚本 | Core/Script Core/BgiVision | JS 脚本 API、BvLocator、HTML 遮罩、模块导入、v8 引擎、脚本项目 |
| 实时任务 | GameTask/TaskTriggerDispatcher* GameTask/AutoPick GameTask/AutoEat GameTask/Common | 自动拾取、自动吃药、自动跳过、实时触发器、进入游戏与界面检测等 |
| 其他 | — | 无法归入以上分类的杂项(必须保留,即使为空也输出) |
<月之X适配>;否则使用 版本适配新功能feat/fix/refactor每条记录格式:
描述内容 (#PR号) @author
huiyadanli 时省略 @author(项目维护者,无需标注)feat:、fix: 等 Conventional Commits 前缀(#3111))@id1 @id2(#3101 #3108),不要写成多个分散条目生成后必须做后处理检查,确保表达准确:
输出到 .claude/documents/ReleaseNotes-<version>.md(文件名 ASCII)。
输出文件的版本号规则:取边界版本号的次版本号(minor)加 1,补丁版本归零。即 major.(minor+1).0。例如边界为 0.60.1,输出版本号为 0.61.0。
若用户明确指定版本号或发布主题,以用户指定为准;否则按上述规则推导。
## <version> <版本主题>
<一句话版本主题>
### 分类名1
- 变更描述 (#PR号) @author
- 变更描述 @author
### 分类名2
- 变更描述 (#PR号) @author
### 其他
- 变更描述 @author
补丁版本或少量修复可以不分分类,直接输出 bullet;但如果使用分类,仍必须保留 其他 分类。