diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json index 0bbff15..f6917a2 100644 --- a/.agents/plugins/marketplace.json +++ b/.agents/plugins/marketplace.json @@ -19,7 +19,7 @@ }, { "name": "self-improvement", - "version": "0.1.6", + "version": "0.1.7", "source": { "source": "local", "path": "./plugins/self-improvement" @@ -30,6 +30,19 @@ }, "category": "Productivity" }, + { + "name": "skill-maintenance", + "version": "0.1.0", + "source": { + "source": "local", + "path": "./plugins/skill-maintenance" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "Productivity" + }, { "name": "knowledge-maintenance", "version": "0.1.3", diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 6ab648a..0745f0c 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -13,9 +13,14 @@ }, { "name": "self-improvement", - "version": "0.1.6", + "version": "0.1.7", "source": "./plugins/self-improvement" }, + { + "name": "skill-maintenance", + "version": "0.1.0", + "source": "./plugins/skill-maintenance" + }, { "name": "knowledge-maintenance", "version": "0.1.3", diff --git a/README.md b/README.md index f556a78..0f54f66 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ 正文中指向 `Eridanus117/agent-control` 的 Issue 链接**不在本次改动范围**:那些是历史证据,老仓冻结后仍可读,指向它是正确的。 -仓库目前包含七个可安装 Plugin:`grilling` `0.1.2`、`self-improvement` `0.1.6`、`knowledge-maintenance` `0.1.3`、`orchestrated-collaboration` `0.2.6`、`adaptive-problem-solving` `0.2.12`、`github-collaboration` `0.3.18` 与 `resource-observability` `0.2.4`。 +仓库目前包含八个可安装 Plugin:`grilling` `0.1.2`、`self-improvement` `0.1.7`、`skill-maintenance` `0.1.0`、`knowledge-maintenance` `0.1.3`、`orchestrated-collaboration` `0.2.6`、`adaptive-problem-solving` `0.2.12`、`github-collaboration` `0.3.18` 与 `resource-observability` `0.2.4`。 `self-improvement` `0.1.4` 按[关联 agent-control#139(P0-1 迭代回执地基)](https://github.com/Eridanus117/agent-control/issues/139)承载一份按需读取的十字段迭代回执协议;`adaptive-problem-solving` `0.2.9` 在阶段合同与攻防裁决需要跨 Session 恢复时引用该协议,`knowledge-maintenance` `0.1.1` 只回填知识出口证据。回执寄生于当前 Issue 的同一条自足评论与自然里程碑,不建数据库、独立登记表或定时器;APS 继续是唯一任务内控制器,Issue 生命周期与知识准入仍各归现有机制,`orchestrated-collaboration` 不成为第二承载面。 @@ -36,6 +36,10 @@ `self-improvement` 在用户指出 Agent 漂移、误解或重复犯错,或者讨论陷入只增加抽象却没有减少不确定性的循环时,帮助 Agent 停止旧路径、保存纠正、诊断断点,用最小可逆资产检验高层判断,并把值得复用的行为改进放到系统提示词或 Skill。它是完整元方法能力的第一个窄切片,不代表知识、多 Agent 或整个元方法领域都被做成了 Skill。 +`self-improvement` `0.1.7` 把承载位置已确定为 Skill 的纠正交给 `skill-maintenance`,自己只负责停止漂移、诊断根因、判断长期价值和选择持久载体,不再复制来源盘点、预算、版本、clean cutover 或审查协议。 + +`skill-maintenance` `0.1.0` 在明确创建、审计、修正、拆分、升级、迁移或退役 Skill 时进入:先绑定当前行为合同与授权,预注册行为判据,再同步主合同、按需 reference、全部调用者、双端发现入口、版本、生成物和复杂度预算;安全门零回退,调用者 clean cutover,方案/实施同源时必须独立审查。它不维护普通业务代码,也不替 `self-improvement` 决定一次纠正应该落到哪里。 + `knowledge-maintenance` 在多来源调研、可重复实验或重要决定前,先复用仍成立的当前知识,只补查变化、冲突和缺口;新结论逐条通过价值门与可信门后才能进入当前知识。它不保存原始会话,不替代研发记忆,也不决定知识平台、私域结构或知识图谱。 `orchestrated-collaboration` 在已获授权的多 Agent、多 Session 或共享写入碰撞中,区分用户目标、必要约束与 Agent 假设,建立唯一协调者、写入所有权、可追踪交付、独立验收和结果综合。`0.1.2` 增加共享写入前置检查:只有仍在线的协调者和明确资源范围共同成立时才视为占用,重叠 Session 在写入前必须加入协调、隔离或退回只读。`0.1.3` 补上同源盲区:协调者参与了高价值、多 PR 的 Agent 系统能力或工作流替代的拆分或方案设计时,综合前必须由另一个未参与拆分和实现的 Agent 做父目标级只读复核,子 PR 的 Peer Review 不能替代它;详细检查项来自 `adaptive-problem-solving`,普通单 PR、低风险、容易回退的任务不强制增加这一层。`0.1.5` 优先高层受监督生命周期,并为派发完成后的资源收口给出可达且安全的判据:先读取标准释放回执,再按对象是否被回执覆盖并确认释放、回执是否要求必须执行的恢复动作、四项证明是否齐全逐个处置,不声称这些情形互斥或穷尽;标准释放未覆盖的残留 worktree,以及释放不适用或未文档且没有恢复要求的对象,都在远端持久化、干净工作树、唯一精确身份与删除连带影响四项证明齐全后才可以精确显式收口,回执要求恢复动作或任一证明缺失时一律保留,不强制删除。`0.1.6` 按 [`agent-control#44 实施已批准决定`](https://github.com/Eridanus117/agent-control/issues/44) 的 D1 精确化 Orca 运行面语义:Orca TUI 是观察面,供人观察和输入,不承载协调状态、也不是编排协议;`orca orchestration` 才是执行事实与协调后端,Run、Task、Dispatch、持久消息和交付来源链的执行事实以它为准,不以界面上看到的画面为准。被替代的表述是「Orca TUI 只作为观察和输入界面」——它只说明 TUI 不是什么,没有指明执行事实由哪个面承载。该精确化不解禁任何自动化,也不把 Orca 升级为长期依赖。它使用当前任务已经选择的真实协调后端;选择 Orca 时动态读取 orchestration 及所需终端/worktree 指南。Skill 不替系统决定长期依赖、Fork/维护还是自建协调产品,也不新建审查平台或评分系统。`0.1.7` 在协调者职责处并入两条经负责人两次实证纠偏的协调循环规则:每处理完一次交付、合并或验收,立即重新扫描任务图并派发因此解除依赖的切片,不等催促或整批收口;已有对齐工作池且资源充裕时,不得以在途任务未收口为由推迟无依赖的新工作,推迟必须指出真实依赖边、写入冲突或协调净收益为负。两条规则不扩大授权,派发仍要满足既有核对与写入所有权分区。`0.1.8` 删除 Skill 内对共享单点六类的改写,改为只引用 `agent-control/authority/04-collaboration.md` 的唯一规范源;同时把 description 压到三端共同的 1000 UTF-8 字节预算内,保留授权协作、碰撞处理、父目标复核与 Orca 动态指南路由。`0.1.9` 按 [`agent-control#80 协作方法资产化`](https://github.com/Eridanus117/agent-control/issues/80) 把五张波次回执验证过的协调方法固化为派发合同骨架、`input_accepted` 后的终端落点与提交核对、GitHub 报错后的先核验再重试,以及“产能数字是手段”的弹性用量规则;这些规则只保存跨后端语义,不复制 Orca 命令,也不新增轮询或调度。`0.1.10` 按 [关联 agent-control#94(协作形态选择模型调研)](https://github.com/Eridanus117/agent-control/issues/94) 的 94-D1=C,把第一节原有进入信号与收益散述合并置换为四条人工选择规则:用五项输入选一层执行拓扑,按需叠加质量机制与阶段承载,CF-0 直接退回普通路径;八张形态卡放在 Skill 自有 `references/`,保留样本水位、失败门和降级出口。主 Skill 不净增,description 保持不变;该版不自动选型、不复制 Orca 命令,也不产生新的授权或长期平台承诺。`0.1.11` 按 [关联 agent-control#97(继任协议承载实施)](https://github.com/Eridanus117/agent-control/issues/97) 的 95-D1=E,复用共享写入前置检查在接管场景的既有触发,把“创建或绑定 Run”的泛化条目精确置换为 K12 知识路由与双协调停止门;动态命令继续来自运行时指南。description 保持 989 UTF-8 字节,主 Skill 按 LF 规范化保持 21841 UTF-8 字节;该版不执行接管、不建调度器,也不产生新的长期依赖。`0.1.12` 按 [关联 #105(K12 继任协议停门与可发现性修复)](https://github.com/Eridanus117/agent-control/issues/105) 的 C10,把依赖当前目录的裸跨仓路径置换为指向 K12 当前版本的绝对 GitHub 链接,并压缩同段第 2、6 条维持主 Skill 体积上限;符合性检查同时要求该路由是可跨工作区解析的 HTTPS URL。95-D1=E 承载决定、双协调停止门、description、动态命令来源与不接管边界均不变。`0.2.0` 按[关联 #110(三方审阅机制修复实施)](https://github.com/Eridanus117/agent-control/issues/110)把 CF-6 就地替换为席位联合类型、机械映射、先密封后公开和状态机/时间盒四机制,并降回 M0;新增 TypeScript 只读验证器与正负夹具,历史 #90 反向绑定样本必须判失败。oc 主 Skill 与 description 均零改动;不改 #44 授权记录、不消费决定,C3 保持 A。 @@ -97,6 +101,13 @@ codex plugin add self-improvement@agent-plugins --json claude plugin install self-improvement@agent-plugins --scope user ``` +安装 `skill-maintenance` 时也使用同一个 Marketplace: + +```powershell +codex plugin add skill-maintenance@agent-plugins --json +claude plugin install skill-maintenance@agent-plugins --scope user +``` + 安装 `knowledge-maintenance` 时也使用同一个 Marketplace: ```powershell diff --git a/docs/lifecycle.md b/docs/lifecycle.md index 4a0a426..efb1ecf 100644 --- a/docs/lifecycle.md +++ b/docs/lifecycle.md @@ -92,14 +92,14 @@ python tools/plugin_release/plugin_release.py retire <插件> --apply | 项 | 上限 | 依据 | | --- | --- | --- | -| Skill 数量 | 12 | 今天的实际数量 | -| 语料总字节 | 209,000 | 今天的实际总量 208,420,向上取整 | +| Skill 数量 | 13 | 原基线 12 且不留余量;负责人在 [`agent-control#57`](https://github.com/zaurakworks/agent-control/issues/57) 明确批准新增一个独立 `skill-maintenance`,只把本次上限提高到 13 | +| 语料总字节 | 209,000 | 基线总量 208,420,向上取整 | **语料总量同时覆盖 `SKILL.md` 与 `references/`。** 只卡正文会直接导致把文字挪进 references——预算必须堵住这条洗白路径。 预算的对象是**会被当作 Skill 加载进 Agent 上下文的字节**。`docs/`(含本文)与 `README.md` 是写给人看的,不计入;它们的约束是别的——没人读的文档不会因为不占预算就变得有用。 -上限取当天实际值,不是留出余量:目的就是让「加」必须伴随「换」。撞上上限时的正确动作是给出被压缩或退役的对象,而**不是**把数字改大。提高上限是负责人决定,且必须在 Issue 里留下理由——改一个数字很容易,所以规则必须说明什么情况下才允许改。 +上限默认取实际值,不留余量:目的就是让「加」必须伴随「换」。撞上上限时的正确动作是给出被压缩或退役的对象,而**不是**把数字改大。提高上限是负责人决定,且必须在 Issue 里留下理由;[`agent-control#57`](https://github.com/zaurakworks/agent-control/issues/57) 是一次只增加一个独立维护 Skill 的窄例外,不授权未来继续提高数量或字节上限。 逐 Skill 的既有棘轮保持原样:它们锁定的是具体版本的谈判结果,与总量预算目的不同,合并会丢掉信息。 diff --git a/docs/skills-overview.md b/docs/skills-overview.md index e55666c..b904710 100644 --- a/docs/skills-overview.md +++ b/docs/skills-overview.md @@ -6,14 +6,14 @@ 这是给人看的入口:每个 Skill 替你做什么、什么时候会用到、你怎么看出它在起作用, 以及它花掉多少复杂度预算。`SKILL.md` 是给 Agent 执行的行为合同,优先保证触发、硬门、分支和退出完整,不是按顺序阅读的教程;只有维护或审查行为时才需要下钻。 -当前 12 个 Skill,共 205,354 字节,占复杂度预算 98.3%。 +当前 13 个 Skill,共 208,913 字节,占复杂度预算 100.0%。 | Skill | 版本 | 体积 | 占预算 | 上次复核 | | --- | --- | ---: | ---: | --- | | [issue-workflow](#issue-workflow) | 0.3.18 | 60.2 KB | 29.5% | 2026-08-15 | | [orchestrated-collaboration](#orchestrated-collaboration) | 0.2.6 | 21.2 KB | 10.4% | 2026-08-15 | | [adaptive-problem-solving](#adaptive-problem-solving) | 0.2.12 | 19.0 KB | 9.3% | 2026-08-15 | -| [self-improvement](#self-improvement) | 0.1.6 | 16.3 KB | 8.0% | 2026-08-15 | +| [self-improvement](#self-improvement) | 0.1.7 | 16.0 KB | 7.8% | 2026-08-15 | | [pr-integration](#pr-integration) | 0.3.18 | 15.6 KB | 7.7% | 2026-08-15 | | [issue-delivery](#issue-delivery) | 0.3.18 | 15.2 KB | 7.4% | 2026-08-15 | | [objective-to-issues](#objective-to-issues) | 0.3.18 | 13.0 KB | 6.4% | 2026-08-15 | @@ -22,6 +22,7 @@ | [issue-contract-compaction](#issue-contract-compaction) | 0.3.18 | 8.6 KB | 4.2% | 2026-08-15 | | [knowledge-maintenance](#knowledge-maintenance) | 0.1.3 | 6.3 KB | 3.1% | 2026-08-15 | | [grilling](#grilling) | 0.1.2 | 3.9 KB | 1.9% | 2026-08-15 | +| [skill-maintenance](#skill-maintenance) | 0.1.0 | 3.8 KB | 1.9% | 2026-08-16 | ## issue-workflow @@ -69,7 +70,7 @@ **什么会让它失效** 入口、Skill、任务记录三个改进承载面之一消失或职责变更,使路由判据指向不存在的去向。 -所属 Plugin `self-improvement` `0.1.6`|体积 16.3 KB(占预算 8.0%)|上次复核 2026-08-15|Agent 行为合同(维护/审查时读取)[`plugins/self-improvement/skills/self-improvement/SKILL.md`](../plugins/self-improvement/skills/self-improvement/SKILL.md) +所属 Plugin `self-improvement` `0.1.7`|体积 16.0 KB(占预算 7.8%)|上次复核 2026-08-15|Agent 行为合同(维护/审查时读取)[`plugins/self-improvement/skills/self-improvement/SKILL.md`](../plugins/self-improvement/skills/self-improvement/SKILL.md) ## pr-integration @@ -166,3 +167,15 @@ **什么会让它失效** 明示同意门被取消,或运行端改为按关键词自动进入长期盘问。 所属 Plugin `grilling` `0.1.2`|体积 3.9 KB(占预算 1.9%)|上次复核 2026-08-15|Agent 行为合同(维护/审查时读取)[`plugins/grilling/skills/grilling/SKILL.md`](../plugins/grilling/skills/grilling/SKILL.md) + +## skill-maintenance + +**它替你做什么** 创建、审计、拆分、升级或退役 Skill 时,把行为合同、调用者、版本、预算和验证一次维护完整。 + +**什么时候用** 已经确定要维护某个 Skill 时;尚未决定行为该放哪里时不用。 + +**你怎么知道它在起作用** 改动前有行为判据,改动后没有旧调用者,版本、生成物、预算、验证和独立审查能相互对上。 + +**什么会让它失效** Skill 的发现入口、版本声明、复杂度预算、生成物或发布/退役工具发生变化,使正文盘点面和 clean cutover 步骤不再覆盖真实运行路径。 + +所属 Plugin `skill-maintenance` `0.1.0`|体积 3.8 KB(占预算 1.9%)|上次复核 2026-08-16|Agent 行为合同(维护/审查时读取)[`plugins/skill-maintenance/skills/skill-maintenance/SKILL.md`](../plugins/skill-maintenance/skills/skill-maintenance/SKILL.md) diff --git a/plugins/self-improvement/.claude-plugin/plugin.json b/plugins/self-improvement/.claude-plugin/plugin.json index 188d329..c526b34 100644 --- a/plugins/self-improvement/.claude-plugin/plugin.json +++ b/plugins/self-improvement/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "self-improvement", - "version": "0.1.6", + "version": "0.1.7", "description": "Turn observed Agent drift and reusable corrections into bounded prompt or Skill improvements.", "author": { "name": "zaurakworks" diff --git a/plugins/self-improvement/.codex-plugin/plugin.json b/plugins/self-improvement/.codex-plugin/plugin.json index 188d329..c526b34 100644 --- a/plugins/self-improvement/.codex-plugin/plugin.json +++ b/plugins/self-improvement/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "self-improvement", - "version": "0.1.6", + "version": "0.1.7", "description": "Turn observed Agent drift and reusable corrections into bounded prompt or Skill improvements.", "author": { "name": "zaurakworks" diff --git a/plugins/self-improvement/skills/self-improvement/SKILL.md b/plugins/self-improvement/skills/self-improvement/SKILL.md index 572f7ed..13ed85a 100644 --- a/plugins/self-improvement/skills/self-improvement/SKILL.md +++ b/plugins/self-improvement/skills/self-improvement/SKILL.md @@ -100,7 +100,7 @@ Agent 必须根据问题性质主动提出载体,不等待负责人把实现 - 原始讨论、实验和纠正证据,进入研发记忆或任务证据; - 通信、并发、权限或外部操作能力,属于工具和运行环境,不由 Skill 假装提供。 -系统提示词只保留触发条件和不变量,详细步骤放入 Skill。避免在两处复制同一套长流程。 +系统提示词只留触发和不变量,详细步骤只放 Skill,不复制长流程。 ## 六、判断是否值得形成长期改进 @@ -116,19 +116,13 @@ Agent 必须根据问题性质主动提出载体,不等待负责人把实现 ## 七、按授权实施最小改进 -修改共享系统提示词、用户级入口或共享 Skill 前,检查当前任务是否已有明确授权。已有授权时直接实施并保持范围最小;没有授权时,给出一次具体的改动范围和主要副作用,请求决定,不反复索要零碎批准。 +修改共享载体前绑定授权;缺少时一次说明范围和副作用并请求决定。 -实施时: - -1. 找到版本化来源和所有真实运行入口; -2. 系统提示词只加入始终生效的触发规则; -3. Skill 写明触发条件、禁止触发条件、输入、步骤、输出和退出方式; -4. Codex 与 Claude 的差异只在确实存在时分开; -5. 不从旧仓、旧 Issue 或旧实现反向推导当前需求。 +提示词/项目入口按授权最小实施并同步真实入口。承载位置是 Skill 时,把纠正、根因、目标行为和授权交给 `skill-maintenance`,消费其验证/审查结果;本 Skill 不复制维护协议,也不从旧仓、旧 Issue 或旧实现反推需求。 ## 八、做与风险相称的检查 -至少检查文件格式、差异、真实入口同步和 Skill 可发现性。只有当前授权包含新会话或行为试验时,才运行对应检查。不要为了证明改进有效而建设独立评测平台;在后续真实任务中观察是否再次出现相同问题。 +非 Skill 载体检查格式、差异和真实入口;Skill 载体使用 `skill-maintenance` 的结果。行为试验须有授权;不建设独立评测平台,后续真实任务再观察复发。 ## 九、按需使用统一迭代回执 diff --git a/plugins/skill-maintenance/.claude-plugin/plugin.json b/plugins/skill-maintenance/.claude-plugin/plugin.json new file mode 100644 index 0000000..b2d75c1 --- /dev/null +++ b/plugins/skill-maintenance/.claude-plugin/plugin.json @@ -0,0 +1,10 @@ +{ + "name": "skill-maintenance", + "version": "0.1.0", + "description": "Maintain Skill behavior contracts, callers, versions, budgets, generated surfaces, and clean cutovers.", + "author": { + "name": "zaurakworks" + }, + "repository": "https://github.com/zaurakworks/agent-plugins", + "skills": "./skills/" +} \ No newline at end of file diff --git a/plugins/skill-maintenance/.codex-plugin/plugin.json b/plugins/skill-maintenance/.codex-plugin/plugin.json new file mode 100644 index 0000000..b2d75c1 --- /dev/null +++ b/plugins/skill-maintenance/.codex-plugin/plugin.json @@ -0,0 +1,10 @@ +{ + "name": "skill-maintenance", + "version": "0.1.0", + "description": "Maintain Skill behavior contracts, callers, versions, budgets, generated surfaces, and clean cutovers.", + "author": { + "name": "zaurakworks" + }, + "repository": "https://github.com/zaurakworks/agent-plugins", + "skills": "./skills/" +} \ No newline at end of file diff --git a/plugins/skill-maintenance/skills/skill-maintenance/SKILL.md b/plugins/skill-maintenance/skills/skill-maintenance/SKILL.md new file mode 100644 index 0000000..1e513cc --- /dev/null +++ b/plugins/skill-maintenance/skills/skill-maintenance/SKILL.md @@ -0,0 +1,39 @@ +--- +name: skill-maintenance +description: >- + 创建、审计、修正、拆分、升级、迁移或退役 Skill,或其合同/入口已漂移时,先恢复行为、授权与预算,再同步正文、调用者、版本、生成物和验证。普通业务维护、纯格式修正、承载位置未定的纠正不触发。Use for explicit Skill maintenance, not carrier choice. +--- + +# Skill 维护 + +只维护已确定由 Skill 承载的行为;不扩权、不降门、不造第二控制器。 + +## 进入与合同 + +进入:明确维护请求;或触发/跳过、步骤、硬门、退出、来源、调用者、版本、生成物、发现入口、符合性已有漂移证据。 + +不进入:普通业务代码、产品文档、非 Skill 测试;不改发布身份或行为的错字/格式(但已发布字节的现行版本规则仍服从);承载位置未定的纠正返回 `self-improvement`,不替它决定。 + +问题证据不授权写入、发布、安装、退役;缺授权只读并返回缺口。编辑前绑定:原始行为与可观察成功;触发/输入/步骤/输出/退出;授权、同意、写入所有权、证据等级;生命周期驱动者与本 Skill 角色;证据上限。 + +盘点主 `SKILL.md`、按需 references、全部调用/返回/reference 边、人类入口、双端 manifest/Marketplace、生成物及唯一命令、版本/生命周期/预算/符合性/发布退役工具;获授权才查安装端。未知就标未知,不从旧仓、旧 Issue 或记忆猜。 + +## 归型与设计 + +主类型:轻量文本、行为修正、结构重构、新能力、迁移/重命名、退役。新能力查净价值、误触发、预算、发现入口;迁移要求所有调用者 clean cutover;退役要求无入边、负责人批准、精确卸载回读。实验通过不等于发布或长期证据。 + +新增/扩张前计算 Skill 数与 `SKILL.md`+references 总字节。默认增加伴随压缩/合并/退役,不以搬 reference、拆 Plugin 或改单文件门洗白。只有负责人显式决定可以提高数量或字节上限;须有稳定记录且只到本次需要,提高一次不授权下一次继续提高。 + +主 `SKILL.md` 只放共用控制面;reference 仅命中时加载,主文件写命中、读取、返回。一个行为一个正文;调用者只路由;reference 不成为第二个控制器、生命周期驱动者或状态库;路径可定位;人类总览由生成物承载。 + +## 场景、切换与验证 + +行为修正、结构重构、新能力、迁移、退役须在编辑前预注册进入、分支/加载、硬门、退出/返回、证据上限;重构以同场景比较基线/候选。授权、明示同意、写入所有权、安全、不可逆动作、证据等级、角色下限是零回退门;漏一项即失败,不能用字节/行数减少或模型多数通过抵消。 + +实施:先改唯一正文,迁移全部调用者;删除旧路径、章节号、重复段落、别名、兼容壳、过期 re-export;生成物只运行唯一生成命令;已发布内容按生命周期规则递增版本,并同步 manifest、Marketplace、注册表、版本夹具、人类总览;发布、安装、指纹、退役只用已有工具。 + +先跑最窄检查,再跑完整符合性;行为变化跑预注册场景,部署主张跑真实入口。文本断言只证合同存在;探针记录模型/上下文/样本边界。新 Skill、跨 Skill 迁移、控制器拆分、退役、安全门、发布须独立审查;审查者必须与方案和实施者不同。blocker 要修源头、增加永久防线并重验。 + +## 返回 + +返回类型/目标、行为变化、预算与例外、迁移/删除/未知入口、运行/未运行/失败/证据边界、独立审查、下一责任人与动作。只返回段结果,不决定 Issue/PR/父目标生命周期;退出。 \ No newline at end of file diff --git a/plugins/skill-maintenance/skills/skill-maintenance/agents/openai.yaml b/plugins/skill-maintenance/skills/skill-maintenance/agents/openai.yaml new file mode 100644 index 0000000..bc1f461 --- /dev/null +++ b/plugins/skill-maintenance/skills/skill-maintenance/agents/openai.yaml @@ -0,0 +1,6 @@ +interface: + display_name: "Skill Maintenance" + short_description: "Maintain Skill contracts, callers, versions, and cutovers" + +policy: + allow_implicit_invocation: true \ No newline at end of file diff --git a/tests/workflow-routing.json b/tests/workflow-routing.json index 662f428..33c7ee0 100644 --- a/tests/workflow-routing.json +++ b/tests/workflow-routing.json @@ -47,8 +47,13 @@ }, "self-improvement": { "plugin": "self-improvement", + "drive": ["skill-maintenance"], "reference": ["adaptive-problem-solving"] }, + "skill-maintenance": { + "plugin": "skill-maintenance", + "reference": ["self-improvement"] + }, "knowledge-maintenance": { "plugin": "knowledge-maintenance", "reference": ["self-improvement"] @@ -174,6 +179,12 @@ "lastVerified": "2026-08-15", "suspect": false }, + "skill-maintenance": { + "invalidatedWhen": "Skill 的发现入口、版本声明、复杂度预算、生成物或发布/退役工具发生变化,使正文盘点面和 clean cutover 步骤不再覆盖真实运行路径。", + "minimalRecheck": "选择一个当前 Skill 做不写入审计,逐项确认行为合同、全部调用者、两端发现入口、版本、生成物、预算和独立审查出口仍能按正文定位。", + "lastVerified": "2026-08-16", + "suspect": false + }, "knowledge-maintenance": { "invalidatedWhen": "agent-control/authority/01-knowledge.md 的两道准入门或可信门八项条件发生变化。", "minimalRecheck": "读一次该权威,逐条比对价值门与可信门八项和正文引用是否一致。", @@ -242,6 +253,11 @@ "whenToUse": "你指出漂移、误解,或同类错误复发时。一次性小错不触发。", "workingSignals": "纠正落到某个持久载体,而不只是当次口头改了。" }, + "skill-maintenance": { + "forYou": "创建、审计、拆分、升级或退役 Skill 时,把行为合同、调用者、版本、预算和验证一次维护完整。", + "whenToUse": "已经确定要维护某个 Skill 时;尚未决定行为该放哪里时不用。", + "workingSignals": "改动前有行为判据,改动后没有旧调用者,版本、生成物、预算、验证和独立审查能相互对上。" + }, "knowledge-maintenance": { "forYou": "知识准入:价值门、可信门、失效条件与下次最少复核步骤。", "whenToUse": "多来源调研、可重复实验,或结论会影响权威与重要决定时。", @@ -260,19 +276,33 @@ } }, "complexityBudget": { - "comment": "上限取 2026-08-15 的实际值,不留余量:目的是让「加」必须伴随「换」。撞上限时的正确动作是给出被压缩或退役的对象,不是把数字改大;提高上限是负责人决定,且必须在 Issue 留下理由。corpusMaxUtf8Bytes 同时覆盖 SKILL.md 与 references/,否则把正文挪进 references 就能绕过。docs/ 与 README 写给人看,不计入。", + "comment": "原基线取 2026-08-15 的实际值且不留余量,默认要求「加」伴随「换」。负责人在 agent-control#57 明确选择新增一个独立 skill-maintenance,因此仅把 maxSkills 从 12 提高到 13;该例外不授权未来继续提高数量或字节上限。corpusMaxUtf8Bytes 仍覆盖 SKILL.md 与 references/,否则把正文挪进 references 就能绕过。docs/ 与 README 写给人看,不计入。", "unit": "utf8-bytes", - "maxSkills": 12, + "maxSkills": 13, "corpusMaxUtf8Bytes": 209000, + "exceptions": [ + { + "dimension": "maxSkills", + "from": 12, + "to": 13, + "authorizedBy": "https://github.com/zaurakworks/agent-control/issues/57", + "scope": "新增一个独立 skill-maintenance;不授权未来继续提高任何上限" + } + ], "baseline": { "observedAt": "2026-08-15", "skills": 12, - "corpusUtf8Bytes": 208420 + "corpusUtf8Bytes": 208420, + "limits": { + "maxSkills": 12, + "corpusMaxUtf8Bytes": 209000 + } } }, "pluginVersions": { "grilling": "0.1.2", - "self-improvement": "0.1.6", + "self-improvement": "0.1.7", + "skill-maintenance": "0.1.0", "knowledge-maintenance": "0.1.3", "orchestrated-collaboration": "0.2.6", "adaptive-problem-solving": "0.2.12", @@ -2583,6 +2613,167 @@ ] } ] + }, + { + "id": "skill-maintenance-sm1-skips-product-code", + "title": "SM1 普通业务代码维护不触发 Skill 维护", + "checks": [ + { + "skill": "skill-maintenance", + "mustContain": [ + "普通业务代码、产品文档、非 Skill 测试", + "不进入" + ] + } + ] + }, + { + "id": "skill-maintenance-sm2-keeps-text-fix-light", + "title": "SM2 不改行为的错字修正只服从现有发布身份规则", + "checks": [ + { + "skill": "skill-maintenance", + "mustContain": [ + "不改发布身份或行为的错字/格式", + "已发布字节的现行版本规则仍服从" + ] + } + ] + }, + { + "id": "skill-maintenance-sm3-gates-new-capability", + "title": "SM3 新能力先恢复合同并支付误触发与预算成本", + "checks": [ + { + "skill": "skill-maintenance", + "mustContain": [ + "新能力", + "新能力查净价值、误触发、预算、发现入口", + "行为修正、结构重构、新能力、迁移、退役须在编辑前预注册" + ] + } + ] + }, + { + "id": "skill-maintenance-sm4-splits-one-controller", + "title": "SM4 过密合同只下沉命中分支且不建立第二控制器", + "checks": [ + { + "skill": "skill-maintenance", + "mustContain": [ + "主 `SKILL.md` 只放共用控制面", + "reference 仅命中时加载", + "reference 不成为第二个控制器、生命周期驱动者或状态库" + ] + } + ] + }, + { + "id": "skill-maintenance-sm5-updates-published-identity", + "title": "SM5 已发布行为同步全部版本与发现入口", + "checks": [ + { + "skill": "skill-maintenance", + "mustContain": [ + "已发布内容按生命周期规则递增版本", + "同步 manifest、Marketplace、注册表、版本夹具、人类总览", + "发布、安装、指纹、退役只用已有工具" + ] + } + ] + }, + { + "id": "skill-maintenance-sm6-clean-cutover", + "title": "SM6 跨 Skill 迁移不保留旧调用或兼容壳", + "checks": [ + { + "skill": "skill-maintenance", + "mustContain": [ + "所有调用者 clean cutover", + "删除旧路径、章节号、重复段落、别名、兼容壳、过期 re-export" + ] + } + ] + }, + { + "id": "skill-maintenance-sm7-zero-regression-gates", + "title": "SM7 安全门回退不能用压缩收益抵消", + "checks": [ + { + "skill": "skill-maintenance", + "mustContain": [ + "是零回退门", + "漏一项即失败", + "不能用字节/行数减少或模型多数通过抵消" + ] + } + ] + }, + { + "id": "skill-maintenance-sm8-owner-budget-exception", + "title": "SM8 只有负责人稳定决定才能提高复杂度上限", + "checks": [ + { + "skill": "skill-maintenance", + "mustContain": [ + "只有负责人显式决定可以提高数量或字节上限", + "须有稳定记录", + "提高一次不授权下一次继续提高" + ] + } + ] + }, + { + "id": "skill-maintenance-sm9-retires-through-existing-tool", + "title": "SM9 退役先清入边和授权再调用现有工具", + "checks": [ + { + "skill": "skill-maintenance", + "mustContain": [ + "无入边、负责人批准、精确卸载回读", + "发布、安装、指纹、退役只用已有工具" + ] + } + ] + }, + { + "id": "skill-maintenance-sm10-regenerates-derived-files", + "title": "SM10 生成物只由唯一生成命令重建", + "checks": [ + { + "skill": "skill-maintenance", + "mustContain": [ + "生成物及唯一命令", + "生成物只运行唯一生成命令" + ] + } + ] + }, + { + "id": "skill-maintenance-sm11-independent-review", + "title": "SM11 方案实施同源时必须独立审查并沉淀防线", + "checks": [ + { + "skill": "skill-maintenance", + "mustContain": [ + "审查者必须与方案和实施者不同", + "blocker 要修源头、增加永久防线并重验" + ] + } + ] + }, + { + "id": "skill-maintenance-sm12-returns-unclassified-correction", + "title": "SM12 未决定承载位置的纠正返回 self-improvement", + "checks": [ + { + "skill": "skill-maintenance", + "mustContain": [ + "承载位置未定的纠正返回 `self-improvement`", + "不替它决定" + ] + } + ] } ] } diff --git a/tests/workflow-routing.test.ts b/tests/workflow-routing.test.ts index f55a5ac..6087a43 100644 --- a/tests/workflow-routing.test.ts +++ b/tests/workflow-routing.test.ts @@ -1349,6 +1349,7 @@ const requiredDescriptionTriggers = new Map([ ['operating-ledger-maintenance', ['跨 Session 保留', '分开维护执行、诉求和证据状态', '当前、明确、未消费', '下一责任人与动作', '普通任务、轮询、自动派发、未授权写入或历史迁移']], ['pr-integration', ['当前 head', 'required/optional checks', 'Draft → ready', 'lease', '明确授权才合并', '不判生命周期']], ['grilling', ['用户直接要求', '明确接受建议', '复杂性、关键词或 Agent 偏好不构成同意']], + ['skill-maintenance', ['创建、审计、修正、拆分、升级、迁移或退役 Skill', '合同/入口已漂移', '普通业务维护', '承载位置未定']], ['knowledge-maintenance', ['多来源调研', '可重复实验', '权威/Agent 配置/重要决定', '复用、复核、更新当前知识', '价值门和可信门', '低成本一次性事实']], ['orchestrated-collaboration', ['明确要求多 Agent/多 Session/跨 Provider 协作', '已授权委派', '共享写入碰撞', '排他所有权', '唯一协调者', '只冻结重叠', '协调者参与高价值多交付件能力的拆分或设计', '未参与者复核父目标', '动态读 orchestration 指南', '不要因复杂、额度或空闲 Agent 擅自并行', '不把试用变成长期依赖']], ['resource-observability', ['账户额度', '重置时间', '重置券', '单 Session Token', '启动、并行、降级、延后或停止', 'Orca 账户快照', '固定 ccusage', '轮询、自动调度/消费权益']], @@ -2614,13 +2615,82 @@ for (const [skill, entry] of Object.entries(skillLifecycle)) { invalidationTexts.set(entry.invalidatedWhen, skill); } +type ComplexityBudgetDimension = 'maxSkills' | 'corpusMaxUtf8Bytes'; +type ComplexityBudgetException = { + dimension: ComplexityBudgetDimension; + from: number; + to: number; + authorizedBy: string; + scope: string; +}; const budget = manifest.complexityBudget as { unit: string; maxSkills: number; corpusMaxUtf8Bytes: number; + exceptions: ComplexityBudgetException[]; + baseline: { + observedAt: string; + skills: number; + corpusUtf8Bytes: number; + limits: Record; + }; }; assert.ok(budget, 'tests/workflow-routing.json 缺少 complexityBudget'); assert.equal(budget.unit, 'utf8-bytes', '复杂度预算量纲必须是 UTF-8 字节'); +assert.deepEqual( + budget.baseline, + { + observedAt: '2026-08-15', + skills: 12, + corpusUtf8Bytes: 208_420, + limits: { maxSkills: 12, corpusMaxUtf8Bytes: 209_000 }, + }, + '复杂度预算历史基线必须保持稳定;提高上限只能追加负责人例外,不能改写基线', +); +assert.deepEqual( + budget.exceptions[0], + { + dimension: 'maxSkills', + from: 12, + to: 13, + authorizedBy: 'https://github.com/zaurakworks/agent-control/issues/57', + scope: '新增一个独立 skill-maintenance;不授权未来继续提高任何上限', + }, + '12→13 是 agent-control#57 的一次性历史例外,不能扩写或挪作后续授权', +); +const authorizedCaps: Record = { ...budget.baseline.limits }; +const budgetAuthorizationRecords = new Set(); +for (const exception of budget.exceptions) { + assert.equal( + exception.from, + authorizedCaps[exception.dimension], + `${exception.dimension}: 预算例外必须从上一已授权上限连续追加,不能改写或跳过历史`, + ); + assert.ok( + Number.isSafeInteger(exception.to) && exception.to > exception.from, + `${exception.dimension}: 预算例外必须是有限的正向整数增量`, + ); + assert.match( + exception.authorizedBy, + /^https:\/\/github\.com\/zaurakworks\/agent-control\/issues\/\d+$/, + `${exception.dimension}: 预算例外必须指向 agent-control 中稳定的负责人决定`, + ); + assert.ok(exception.scope.trim().length > 0, `${exception.dimension}: 预算例外缺少窄范围`); + assert.ok( + !budgetAuthorizationRecords.has(exception.authorizedBy), + `${exception.dimension}: 同一个负责人决定不能重复授权多次提高上限`, + ); + budgetAuthorizationRecords.add(exception.authorizedBy); + authorizedCaps[exception.dimension] = exception.to; +} +assert.ok( + budget.maxSkills <= authorizedCaps.maxSkills, + `Skill 数上限 ${budget.maxSkills} 超过已登记负责人例外可达的 ${authorizedCaps.maxSkills}`, +); +assert.ok( + budget.corpusMaxUtf8Bytes <= authorizedCaps.corpusMaxUtf8Bytes, + `Skill 字节上限 ${budget.corpusMaxUtf8Bytes} 超过已登记负责人例外可达的 ${authorizedCaps.corpusMaxUtf8Bytes}`, +); assert.ok( declared.length <= budget.maxSkills, `Skill 数量 ${declared.length} 超过上限 ${budget.maxSkills}:新增必须同时给出被退役的对象,或由负责人批准提高上限并在 Issue 留下理由`,