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. 正确组件的标签前缀过滤

该存储库分发多个组件 - clicompound-engineeringcoding-tutormarketplacecursor-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* 因为存储库提供了多个组件 - clicompound-engineeringcoding-tutormarketplacecursor-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 — 用于针对插件提交问题;先检查发行说明可以保存报告