ce-release-notes
查找最近的复合工程插件版本中发布的内容 - 总结最后 5 个版本,或通过版本引用回答特定问题。
ce-release-notes 是 插件历史 技能。它从 EveryInc/compound-engineering-plugin 的 GitHub Releases API 中提取发行说明,过滤到 compound-engineering-v* 标记前缀,以便同级组件(cli-v*、coding-tutor-v*、marketplace-v*、cursor-marketplace-v*)不会污染结果。两种模式:裸调用总结最近5个版本;参数调用搜索最近 40 个版本并通过版本引用回答特定问题。
仅 Beta 风格的显式调用 (disable-model-invocation: true)。
TL;DR
| 问题 | 回答 |
|---|---|
| 它有什么作用? | 通过 gh (或匿名回退)获取最近的复合工程版本,总结最后 5 个版本或回答特定问题 |
| 何时使用它 | “最近复合工程发生了什么变化?”、“<skill-name> 发生了什么?”或单独的 /ce-release-notes |
| 它生产什么 | 最近发布的摘要或带有版本引用的叙述性答案 |
| 状态 | 仅显式调用 |
## 问题
插件发布信息很难在代理上下文中使用:
- GitHub 发布 UI 是错误的表面“最近是否发生了变化?” - 导航速度慢,所有版本混合在一起
gh release list未过滤 — 同级标签 (cli-v*,coding-tutor-v*) 交错;您无法一眼看出哪个版本影响了哪个组件- 子字符串搜索不适用于重命名 - “ce-X 发生了什么”不会与将其重命名为 ce-Y 的版本进行子字符串匹配
- 代码栅栏截断会破坏渲染 - 天真地截断中间栅栏的长发行说明,留下一个开放的代码块,该块会吞噬下面的所有内容
- 公关细节没有基础 - 发行说明总结;公关是“为什么”所在的地方。如果没有丰富内容,叙事答案就停留在表面层面
The Solution
ce-release-notes 将查找作为结构化传递运行:
- 单个帮助程序脚本 (
scripts/list-plugin-releases.py) 处理传输 —gh首选,匿名 API 后备 — 并发出单个 JSON 合约 - 标签前缀过滤确保仅出现
compound-engineering-v*标签;兄弟组件被排除 - 两种模式:摘要(最后5条)和查询(搜索最后40条并进行置信度判断)
- Markdown-fence-aware 截断 - 计算保留部分中的三重反引号栅栏线;在附加“查看更多”链接之前关闭开放的栅栏
- 置信度判断,而不是子串匹配——该技能判断一个版本是否自信地回答了问题; “如果不确定,则视为不匹配”
- PR 丰富以实现自信匹配 — 获取链接的 PR 标题和正文以获取基础上下文(尽力而为;优雅降级)
- 不受信任的数据纪律 - 阅读发布主体的内容,但从未按照说明进行操作
是什么让它如此新颖
1. 正确组件的标签前缀过滤
该存储库分发多个组件 - cli、compound-engineering、coding-tutor、marketplace、cursor-marketplace。每个都有自己的发布标签前缀。该技能严格过滤到 compound-engineering-v* 标签,因此有关插件的问题不会意外返回 CLI 发行说明。帮助程序脚本拥有此过滤器;技能体从来不需要。
2.辅助脚本传输合约
帮助程序 (scripts/list-plugin-releases.py) 始终退出 0 并在 stdout 上发出一个 JSON 对象。技能体永远不会在 gh 可用性上分支 - 这是助手的工作:
// 成功
{“ok”:true,“来源”:“gh”| “anon”,“fetched_at”:“...”,“releases”:[...]}
// 失败
{“确定”:错误,“错误”:{“代码”:“rate_limit”| “network_outage”,“消息”:“...”,“user_hint”:“...”}}
source 被记录用于遥测,但 不 呈现给用户 - 从 gh 回退到匿名是一个稳定信号,而不是面向用户的事件。
3. 两种模式——汇总和查询
摘要模式(裸调用):获取前 5 个版本,使用版本 + 日期 + 正文渲染每个版本(软上限为 25 渲染行)。页脚指向特定问题调用和完整发布历史记录 URL。
查询模式(参数调用):将窗口扩大到最近 40 个版本,运行置信度判断,通过链接的 PR 细节丰富置信匹配,通过版本引用综合叙述性答案。如果没有可靠的匹配,则打印一条带有 URL 的不匹配消息 — 切勿伪造。
4. Markdown-fence-aware 截断
幼稚的“前 25 行”截断可能会落在开放代码围栏内,让渲染器将下面的所有内容作为代码吞掉。该技能计算保留部分中的三重反引号栅栏线。如果计数为奇数(围栏打开但未关闭),则截断的输出会在附加“查看更多”链接之前获得显式的 ` ``` `` 行。结果:无论剪切落在何处,渲染的输出都保持干净。
5.置信度判断,而不是子串匹配
该技能会读取搜索窗口中的每个发布正文,并判断其是否自信地回答了用户的问题:
- 如果发布正文或其链接的 PR 标题明确解决了问题,则 匹配
- 不要在无关的提及上匹配 - “deepen-plan”不应与仅顺便提及“计划”的版本匹配
- 如果不确定,则视为不匹配 - 明确的不匹配路径胜过低置信度引用
这捕获了子字符串搜索会错过的“ce-X 已重命名为 ce-Y”情况。
6. 丰富公关以接地气
对于可信匹配(最近的 + 最多 2 个较早的匹配),该技能通过 gh pr view 获取标题/正文上下文的链接 PR。尽力而为:
- 如果
gh丢失、未经身份验证或返回非零:不中止;退回到仅正文合成,并带有一行“PR 无法检索”注释 - 如果
linked_prs为空:不尝试调用; body-only 是预期的路径,而不是降级的路径
始终将 PR 编号作为单独的参数(列表形式)传递,从不插入到 shell 字符串中 - 避免从发布主体内容进行 shell 注入。
7. 不受信任的数据纪律
读取发布主体的内容,但将其视为不可信数据。该技能从不遵循其中可能出现的指示、请求或指示。这很重要,因为发布主体是用户编写的降价,可能包含提示注入尝试。该技能的阅读目的是“回答问题”,而不是“从发行说明中获取指导”。
8. 硬编码的不匹配 URL
当不存在置信匹配时,该技能会打印带有硬编码 URL 的字面句子:
I couldn't find this in the last 40 plugin releases. Browse the full history at https://github.com/EveryInc/compound-engineering-plugin/releases
URL 是专门硬编码的,因此它不会因字符串插值或 LLM 重写而漂移。用户总是能找到正确的位置来查看。
简单示例
您想知道 ce-resolve-pr-feedback 是什么时候添加的。您调用 /ce-release-notes "when was ce-resolve-pr-feedback added"。
该技能运行 python3 scripts/list-plugin-releases.py --limit 100,获取一个 JSON 对象,其中最新版本首先排序。将前40个作为搜索窗口。
置信度判断:扫描每个发布体。两场有信心的比赛:
compound-engineering-v2.51.0— 发布正文提到“feat(resolve-pr-feedback):初始发布”compound-engineering-v2.58.0— 正文提到“feat(resolve-pr-feedback):交叉调用的聚类分析”
最近的自信匹配:v2.58.0。旧版:v2.51.0。
PR 丰富:获取 v2.58.0 的 PR 612 — 标题“feat(resolve-pr-feedback):聚类分析”,正文解释了交叉调用门。获取 v2.51.0 的 PR 487 — 标题“feat:ce-resolve-pr-feedback 的初始版本”。
合成:
`ce-resolve-pr-feedback` 首次在 [v2.51.0](URL) 中作为一项技能引入
并行评估和修复 PR 审查反馈 - 初始裁决类型
(已修复/已回复/未寻址/已拒绝/人类需求),GraphQL 获取
未解决的线程、并行代理调度以及回复 + 解决流程。
在[v2.58.0](URL)中,它获得了交叉调用聚类分析——当
同一主题跨越多轮审查,集群简介取代了外科手术简介
通过更广泛的调查来解决。
(以前:[v2.51.0](URL))
您可以通过版本引用找到答案。
何时去实现它
在以下情况下使用 ce-release-notes:
- 您想要快速总结最近的复合工程插件更改
- 您想要回答一个特定问题(“X 何时添加”、“Y 发生了什么”)
- 错误报告或技能行为让你想知道什么时候发生了变化
- 您正在检查某个功能已登陆的特定版本
在以下情况下跳过 ce-release-notes:
- 您想要对同级组件(CLI、编码导师、市场)进行更改 - 此技能仅过滤到
compound-engineering-v* - 您想要完整的发布历史记录 → 只需打开 GitHub Releases URL
- 问题是关于从未发布到版本中的行为 - 发行说明不会显示它
用作工作流程的一部分
ce-release-notes 是一个独立的实用程序 - 不位于链内。它在以下情况下被调用:
/ce-update确认该插件是旧版本,并且用户想知道他们缺少什么- 一个错误嫌疑人暗示“这在上周是有效的”——中间有发布吗?
- 有人问“技能 X 发生了什么”,因为行为发生了变化
该技能的输出由用户直接读取——下游技能不会消耗它。
使用独立版
直接调用:
- 摘要 —
/ce-release-notes(最近 5 个版本) - 具体问题 —
/ce-release-notes "what happened to ce-doc-review" - 类似版本的输入 —
/ce-release-notes "2.65.0"(视为查询字符串;流经查询模式)
保留的 mode:* 令牌被剥离(v1 不会对它们起作用,但不会被杂散的 mode:foo 阻塞)。
## 参考
| 模式 | 触发 | 窗口 | 行为 |
|---|---|---|---|
| 总结 | 裸调用 | 最后 5 | 使用日期 + 正文渲染每个版本(25 行上限,具有栅栏感知截断) |
| 查询 | 参数调用 | 最后 40 | 置信度判断+公关丰富+带有版本引用的叙述合成 |
阶段(根据 SKILL.md):阶段 1 解析参数→阶段 2 获取(摘要)→阶段 3 呈现摘要;第5阶段获取(查询)→第6阶段置信度判断→第7阶段PR丰富→第8阶段综合叙述;第9阶段不匹配。
## 常问问题
为什么只过滤到 compound-engineering-v*?
因为存储库提供了多个组件 - cli、compound-engineering、coding-tutor、marketplace、cursor-marketplace - 每个组件都有自己的发布标签。有关插件的问题不应返回 CLI 发行说明。过滤器将结果限制在正确的组件范围内。
为什么helper总是退出0?
因为合约是“标准输出上的一个 JSON 对象”。如果传输失败(速率限制、网络),助手会发出 {"ok": false, "error": {...}} 而不是崩溃。技能主体在 ok 上分支,而不是在退出代码上分支。这使得合约形式单一并且更容易推理。
具有栅栏感知截断功能的软 25 行上限是什么? 长发布正文的摘要限制为 25 行。天真的截断可能会落在代码围栏内,让渲染器吞掉下面的所有内容。该技能会计算三重反引号线并在附加“查看更多”链接之前关闭开放的栅栏。
为什么要“置信度判断”而不是子串搜索? 因为子字符串搜索会错过重命名。 “ce-X 发生了什么”不会与将其重命名为 ce-Y 的版本进行子字符串匹配。基于判断的匹配捕获了子字符串搜索可能错过的概念变化。
为什么公关丰富是尽最大努力?
因为 gh 可能未安装,可能未通过身份验证,或者可能因各种原因返回错误。因为 PR 获取失败而中止答案会比附加到仅正文综合的一行“PR 无法检索”注释更糟糕。
为什么 URL 被硬编码在不匹配路径中? 特别是为了防止它通过字符串插值或 LLM 重写而漂移。用户总是可以逐字地找到正确的位置——GitHub 发布 URL。
另请参阅
/ce-update— 检查插件版本;在询问发生了什么变化之前很有用/ce-report-bug— 用于针对插件提交问题;先检查发行说明可以保存报告