new-provider
用于在 cc-router 仓库新增一个 LLM provider(即在 src-tauri/providers/ 下添加 YAML 描述符并完成配套的同步改动)。当用户说「加…
cc-router 发版准备一条龙:升版本号 → 根据上一个 tag 以来的提交写 release-notes/<版本>/ 的中英日三份更新内容 → 校验 → 给用户审 → 本地提交「Bump version to X.Y.Z」,停在打 tag 之前。当用户说「准备发版」「发个版」「发 6.1.0」「写发版说明 / 更新内容 / release notes」「bump 版本」时必须走本 skill;即便用户只说了一个版本号,只要意图是发新版,就走本流程,不要只跑 pnpm version:set 了事。绝不打 tag、绝不推送。
$ npx -y skills add finch-xu/cc-router --skill release-prep --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/release-prepContext preview
The summary Claude sees to decide when to auto-load this skill.
cc-router 发版准备一条龙:升版本号 → 根据上一个 tag 以来的提交写 release-notes/<版本>/ 的中英日三份更新内容 → 校验 → 给用户审 → 本地提交「Bump version to X.Y.Z」,停在打 tag 之前。当用户说「准备发版」「发个版」「发 6.1.0」「写发版说明 / 更新内容 / release notes」「bump 版本」时必须走本 skill;即便用户只说了一个版本号,只要意图是发新版,就走本流程,不要只跑 pnpm version:set 了事。绝不打 tag、绝不推送。
name: release-prep description: cc-router 发版准备一条龙:升版本号 → 根据上一个 tag 以来的提交写 release-notes/<版本>/ 的中英日三份更新内容 → 校验 → 给用户审 → 本地提交「Bump version to X.Y.Z」,停在打 tag 之前。当用户说「准备发版」「发个版」「发 6.1.0」「写发版说明 / 更新内容 / release notes」「bump 版本」时必须走本 skill;即便用户只说了一个版本号,只要意图是发新版,就走本流程,不要只跑 pnpm version:set 了事。绝不打 tag、绝不推送。
cc-router 每个版本的更新内容写在仓库根目录 `release-notes/<版本>/`,编译期内嵌进 app(升级后自动弹窗展示,侧栏底部礼花可重开),CI 也用同一份文件生成 GitHub Release 正文。本 skill 把「升版本号 + 写三语更新内容 + 校验 + 本地提交」串起来,**停在打 tag 之前**。
完整设计见 `docs/superpowers/specs/2026-09-27-release-notes-popup-design.md`(本地文件,被 gitignore)。
git status --short # 必须干净(允许的只有与本次发版无关、用户明确说不管的文件)
git rev-parse --abbrev-ref HEAD # 应在 main;不在就问用户
git describe --tags --abbrev=0 --match 'v*' # 上一个版本 tag,记为 PREV
node -p "require('./package.json').version" # 当前版本号git log --no-merges --reverse --format='--- %h %an%n%B' PREV..HEAD
默认只读提交信息(标题 + 正文)——这个仓库的提交正文大多写得很完整,够用。**以下情况必须看改动本身**:标题含糊(如 `update providers`、`fix`、`wip`)、没有正文、或正文与标题对不上。先 `git show --stat <sha>` 看动了哪些文件,再只看相关文件的 diff(`git show <sha> -- <path>`),弄清它实际包含几处用户可感知的变化。
整理规则:
0. **排除只动 `release-notes/` 的提交**:它们是在补写 / 修订**已发布版本**的说明(例如 PREV 打 tag 之后才补齐的上一版说明),不是本版本的变化。 1. **按用户可感知的变化归类**,不按 conventional-commit 前缀机械归类:
2. **同一版本里新功能的修补提交并进那条新功能**,不单列进「修复」。判断方法:修的东西是在 PREV 之后才加的(同一 scope、提交时间在 PREV 之后)。 3. **默认不写**:纯重构、测试、CI 流程、内部文档、代码风格、只影响开发者的改动。例外:它带来了用户可见的影响(例如「安装目录不再附带 yaml 文件」)。 4. **合并同类、拆分混装**:同一功能的多个提交写成一条,子要点用二级列表;反过来,**一个提交里混了几处不相干的变化**(常见于标题含糊的提交,比如一个「修复 + 新端点 + 改名」的厂商更新),按变化拆到各自的分节里。 5. **外部贡献者的 PR**(提交作者不是维护者):问用户要不要致谢,不要自己决定。PR 编号从合并提交的标题找(`Merge pull request #48 from …`),找不到再用只读命令 `gh pr list --state merged --search <sha>`。用户同意的话,写在要点名后面的编号里:
6. 拿不准的条目汇总成一个列表问用户(一次问完,不要一条一条问)。
pnpm version:set X.Y.Z
它同步 `package.json` / `tauri.conf.json` / 两个 `Cargo.toml` / `Cargo.lock`,并在 `release-notes/X.Y.Z/` 下生成 `meta.json`(日期是今天)和只有分节标题的 `zh.md` 骨架。有代号就把 `"codename": "…"` 加进 `meta.json`。
路径:`release-notes/X.Y.Z/zh.md`、`en.md`、`ja.md`(覆盖骨架)。
| 语法 | 用途 | |---|---| | 第一个 `## ` 之前的段落,**一行一段** | 摘要 | | `## 标题` | 分节 | | `- 文字` | 列表项(分节里只允许列表项,不允许段落) | | 两个空格 + `- 文字` | 二级列表项,只允许一层 | | `**粗体**` | 列表项开头的要点名 | | `` `代码` `` | 字段名、命令、路径(三份要一致:要么都用,要么都不用) | | `[文字](https://…)` | 链接,只允许 http(s) |
禁止:图片、HTML(`<` 后面紧跟字母)、`#` / `###` 标题、有序列表、表格、引用、`*` / `+` 列表符号、三层嵌套、空分节。
| zh | en | ja | |---|---|---| | `## 新功能` | `## Features` | `## 新機能` | | `## 修复` | `## Fixes` | `## 修正` | | `## 其他` | `## Other` | `## その他` |
某一节没有内容就**整节删掉**(空分节会被解析器拒绝)。
参考片段(6.0.0 真实内容的节选):
这是一个大版本:桌面端换上与官网一致的「手绘速写本」外观;新增终端界面 cc-router-tui,不开窗口也能管理 cc-router。升级后默认行为不变,终端界面默认关闭。 ## 新功能 - **终端界面 cc-router-tui**(默认关闭):在终端里管理正在运行的 cc-router。打开方式:设置 → 安全与访问 → 终端界面,打开「启用终端界面」。 - 共五个标签:总览、订阅、虚拟模型、实时路由、请求日志。 - 只接受本机连接,不需要打开网页界面。 ## 修复 - **数据库体积上限真正生效**:这个设置以前不起作用。现在超过上限(默认 500 MB)会从最旧的请求日志和事件开始删除;设为 0 表示关闭。
node scripts/release-body.mjs --check vX.Y.Z # CI 第一个 job 用的同一条检查 cd src-tauri && cargo test every_embedded_release_note_is_valid # 与 app 同一个解析器 cd .. && node scripts/release-body.mjs vX.Y.Z # 预览 GitHub Release 正文
守卫测试报错会给出文件和行号,按上面的子集改格式后重跑。三份都过了再进 Step 6。
把三份全文贴给用户(不要只贴摘要),附上:
用户改了中文 → 把改动同步到 en / ja(保持逐条对应)→ 重跑 Step 5。 用户直接改了英文或日文 → 只改那一份,不要反向改中文。 反复到用户明确说「可以 / 提交」为止。
git add -u && git add release-notes/X.Y.Z git commit -m "Bump version to X.Y.Z" # 按当前环境要求附上 Co-Authored-By 尾行 git status -sb # 报告领先 origin 几个提交
然后**停下**,告诉用户接下来由他本人执行:
git tag vX.Y.Z
git push && git push --tags
并提醒:推 tag 后 CI 会先检查 `zh.md`,构建通过后用这三份文件生成 Release 正文并自动发布。
本地运行的大模型聚合网关,GUI桌面端app,零代码部署,把Coding Plan、大模型 API 额度聚合成一个虚拟 Plan,一键接入 Claude Code、Claude Desktop App、OpenClaw、OpenCode 等工具。Bundle your scattered Token Plan, Coding Plan, and LLM API quotas into a single virtual Plan, and plug it into Claude Code, Claude Desktop App, OpenClaw, OpenCode, and more.
Repo: finch-xu/cc-router
用于在 cc-router 仓库新增一个 LLM provider(即在 src-tauri/providers/ 下添加 YAML 描述符并完成配套的同步改动)。当用户说「加…