mcpField
M
mutation-gate

mutation-gate

github.com/redhat-developerAgent 工作流1948 次安装1 天前更新
代码仓库

关于 mutation-gate

mutation-gate 是用于外部写入前获取明确批准并报告执行结果的技能。执行前需列出每项操作的目标、准确命令、预览、前置条件、失败处理和恢复方案。

主要功能

  1. 01列出计划写入及其确切目标
  2. 02展示命令、载荷预览和前置条件
  3. 03要求提供失败处理与恢复方案
  4. 04针对明确列出的操作获取批准
  5. 05按顺序报告每项操作结果

适用场景

  1. 01提交前审查拉取请求或 Jira 变更
  2. 02规划一批仓库或服务更新
  3. 03追踪已完成、失败和跳过的写入

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/redhat-developer/rhdh-skills --skill mutation-gate

安装后在 Claude Code 中输入/mutation-gate确认已加载。

附带文件agents/openai.yamlscripts/scan_credentials.py

详细介绍

RHDH 写入门禁

外部写入是指用户无法通过关闭会话来撤销的任何操作:推送提交、创建拉取请求、转换 Jira 状态、发布消息、修改他人仓库中的文件。

读取不属于写入。获取、分类处理、分析或报告的请求都属于读取意图,不代表批准任何操作。

门禁

1. 说明操作。 按执行顺序列出即将执行的每项操作。对于每项操作,提供以下信息:

字段内容
目标要更改的确切对象:owner/repo#412、RHIDP-1234、分支名称或频道
命令实际执行的确切命令或请求,不得改述
预览将要提交的正文、标签、字段值或差异
前置条件必须已满足的条件。执行前立即检查;若不满足,则停止这一批操作
失败时如果此操作失败,后续操作将如何处理
恢复此操作执行后,如何撤销或控制影响

请在对话中以表格形式呈现。用户在当前所在位置批准,因此计划应直接发给用户,而不是写入文件。

恢复措施不可省略,也不同于失败处理。 失败处理说明尚未执行的操作将如何处理。恢复措施说明已执行的操作应如何处理。请求批准前就要写明恢复措施:如果无法说明如何撤销某项操作,用户就是在盲目批准。当确实无法撤销时——例如已发布的消息、已触发的流水线、已发布的软件包——请明确写出这些话。“无法撤销;消息会保留”就是完整且有用的恢复说明。不能保持沉默。

如果计划太长,无法在对话记录中阅读——例如涉及多个仓库的版本更新,或影响数十个文件的目录变更——则按照 /handoff 的约定,将计划写入操作系统的临时目录,并打印绝对路径。不要将其写入用户的检出目录,以免它被提交。

2. 就所述操作集征求批准。 用户批准的是他们看到的内容。先前表达过发布意图,并不代表授权执行尚未展示确切目标和载荷的操作。如果计划在获批后发生变化——目标不同、增加操作或编辑正文——这就是新计划,需要重新获得批准。

3. 执行,然后报告每项操作。 按计划顺序逐项报告已完成、失败或已跳过的操作。因前一项操作失败而未执行的操作,应报告为已跳过,不得省略。写入失败时必须报告,不得悄悄以其他形式重试。

凭据不得出现在预览中

预览会显示实际执行的命令,因此可能包含粘贴的令牌、从环境中插入的令牌,或由工具返回的令牌。展示前请先扫描:

uv run scripts/scan_credentials.py <plan.json> --json
uv run scripts/scan_credentials.py --text "<a single command or body>"

如果发现形似凭据的字段或值——例如授权标头、PEM 私钥、ghp_、glpat-、xox、sk- 或 AKIA 令牌,或任意深度下名称类似 secret 的字段——该命令会以非零状态退出,并指出违规路径。它会报告字段,而不会泄露密钥。

计划中的凭据说明命令的构造方式有问题,不是可以遮盖后继续的内容。请修正构造方式,让已认证的工具在运行时提供密钥。

谁来执行

由负责目标的技能执行操作。需要写入 Jira 的调用方应调用 /rhdh-jira-update;需要写入代码托管平台的调用方则自行构造并运行命令。/rhdh-forge 负责构造代码托管平台载荷,但绝不执行它们——这种分离正是此门禁得以强制执行的关键,因为知道如何构造命令的模块无法运行它。

完成

当用户批准的每项操作都有结果、结果顺序与计划一致,且每项结果都注明目标时,流程才算完成。报告中遗漏某项操作,或报告未注明其更改的目标,都意味着门禁尚未闭合。

评论

支持 Markdown