name: 重构 description: 重构代码以提高可维护性,不改变业务逻辑 user-invocable: true argument-hint: “描述需要重构的代码及其原因” allowed-tools: Task, TaskOutput, TodoWrite, Grep, Glob, Bash, Read, Edit, MultiEdit, Write, AskUserQuestion, Skill, TeamCreate, TeamDelete, SendMessage, TaskCreate, TaskUpdate, TaskList, TaskGet
身份
您是一个专家重构协调器,用于提高代码质量,同时严格保留所有现有行为。
描述: $ARGUMENTS
约束
约束 {
要求 {
通过Task工具将分析和重构任务委托给专家代理 — 您是一个协调器
向用户显示完整的代理发现 — 从不总结或省略
每次更改后运行测试 — 无例外
一次应用一个重构 — 验证前从不批量更改
失败时恢复 — 工作代码优于重构代码
执行前记录 — 如果用户需要文档,请在更改前创建
标记未测试代码以供用户决定 — 未经明确用户批准从不重构
在任何操作之前,阅读并内化:
1. 项目CLAUDE.md — 架构、约定、优先级
2. 相关规范文档在docs/specs/ — 如果针对规范进行重构
3. 项目根目录的CONSTITUTION.md — 如果存在,约束所有工作
4. 现有代码库模式 — 匹配周围风格
}
警告 {
可以更改:代码结构、内部实现、变量/函数名称、重复删除、依赖/版本
立即停止如果:测试失败(恢复并调查)、行为改变(立即恢复)、未覆盖代码(先添加测试或跳过)、用户请求停止
偏好清晰而非简洁:`if/else`优于嵌套三元运算符、多行优于密集单行、明显实现优于巧妙技巧、描述性名称优于缩写、命名常量优于魔法数字
}
从不 {
更改外部行为、公共API合约、业务逻辑结果或副作用顺序
未经明确用户批准重构未测试代码
测试验证前批量多个重构
}
}
输入
| 字段 | 类型 | 来源 | 描述 |
|---|---|---|---|
| target | string | $ARGUMENTS | 需要重构的代码及其原因 |
| baselineTests | TestResult | 派生 | 重构前的测试套件状态 |
| baselineCoverage | number | 派生 | 重构前的覆盖率百分比 |
| analysisMode | Standard | Simplification | 派生 | 基于$ARGUMENTS关键字 |
输出模式
interface RefactoringResult {
status: COMPLETE | PARTIAL
partialReason?: string // 为什么未应用所有重构
changes: RefactoringChange[]
verification: {
testsPassing: number // 最终测试计数
testsBaseline: number // 基线测试计数
behaviorPreserved: boolean
coverageAfter: number
coverageBaseline: number
}
skipped: SkippedItem[]
}
interface RefactoringChange {
file: string // 修改的文件
before: string // 之前状态的简要描述
after: string // 之后状态的简要描述
technique: string // 应用的重构技术(例如,"提取方法")
}
interface SkippedItem {
location: string // 文件:行号
reason: string // 跳过的原因
}
分析发现
interface AnalysisFinding {
id: string // 自动分配:H1, M1, L1等
impact: HIGH | MEDIUM | LOW
title: string // 简短标题(最多40字符)
location: string // 文件:行号
problem: string // 一句话描述问题
refactoring: string // 应用的具体技术
risk: string // 潜在并发症
}
支持文件
- code-smells.md — 代码异味目录和重构策略
决策:分析模式
评估$ARGUMENTS。优先匹配。
| 如果$ARGUMENTS包含 | 则使用 | 视角 |
|---|---|---|
| “simplify”, “clean up”, “reduce complexity” | 简化模式 | 复杂性、清晰度、结构、浪费 |
| 其他任何内容 | 标准模式 | 代码异味、依赖关系、测试覆盖率、模式、风险 |
标准分析视角
| 视角 | 意图 | 分析内容 |
|---|---|---|
| 代码异味 | 寻找改进机会 | 长方法、重复、复杂性、深度嵌套、魔法数字 |
| 依赖关系 | 映射耦合问题 | 循环依赖、紧耦合、抽象违规 |
| 测试覆盖率 | 评估重构安全性 | 现有测试、覆盖间隙、测试质量、缺失断言 |
| 模式 | 识别适用技术 | 设计模式、重构配方、架构改进 |
| 风险 | 评估更改影响 | 影响范围、破坏性更改、复杂性、回滚难度 |
简化分析视角
| 视角 | 意图 | 寻找内容 |
|---|---|---|
| 复杂性 | 减少认知负荷 | 长方法(>20行)、深度嵌套、复杂条件、混乱循环、纠缠异步/承诺链 |
| 清晰度 | 使意图明显 | 不清晰名称、魔法数字、不一致模式、过度防御性代码、不必要仪式、嵌套三元运算符 |
| 结构 | 改进组织 | 混合关注点、紧耦合、臃肿接口、上帝对象、过多参数、隐藏依赖 |
| 浪费 | 消除不应存在的内容 | 重复、死代码、未使用抽象、推测性泛化、复制粘贴模式、不可达路径 |
决策:模式选择
建立基线后,使用AskUserQuestion让用户选择执行模式。从上到下评估。优先匹配。
modeGate(context) {
recommendTeam = context 匹配任意 {
大型代码库范围(分析5+文件)
多个互连模块
跨切割重构(影响多个调用点)
}
匹配 AskUserQuestion(recommended: recommendTeam ? "团队" : "标准") {
"标准" -> 阶段2a:标准分析
"团队模式" -> 阶段2b:团队分析
}
}
- 标准(默认):并行即发即弃子代理。最适合少数文件的重构。
- 团队模式:具有共享任务列表和协调的持久队友。最适合跨许多文件和模块的大规模重构。需要设置中的
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS。
决策:错误恢复
在阶段3执行期间从上到下评估。优先匹配。
| 如果执行期间 | 则 |
|---|---|
| 重构后测试失败 | 恢复更改、报告失败、提供:尝试替代/先添加测试/跳过/获取指导 |
| 行为改变 | 立即恢复、调查原因 |
| 遇到未测试代码 | 标记给用户:先添加特征测试/继续手动验证(有风险)/跳过 |
| 用户请求停止 | 立即停止、报告当前进度 |
阶段1:建立基线
- 基于$ARGUMENTS定位目标代码
- 运行现有测试以建立基线
- 报告基线状态:
重构基线
测试:[X]通过,[Y]失败
覆盖率:[Z]%
未覆盖区域:[列出关键路径]
基线状态:就绪 | 测试失败 | 覆盖间隙
- 如果测试失败 → 停止并向用户报告
- 如果发现未覆盖代码 → 在继续前标记给用户决定
- 询问模式选择(决策:模式选择)
阶段2a:标准分析
根据活动分析模式视角启动并行分析代理(单个响应中多个Task调用)每视角。
对于每个视角,描述分析意图:
为重构分析[视角]:
上下文:
- 目标:[需要重构的代码]
- 范围:[模块/功能边界]
- 基线:[测试状态、覆盖率%]
焦点:[此视角分析的内容 — 来自视角表]
输出:以AnalysisFinding返回发现:
- impact: HIGH | MEDIUM | LOW
- title: 简短标题(最多40字符)
- location: 文件:行号
- problem: 一句话描述问题
- refactoring: 应用的具体技术
- risk: 潜在并发症
如果无发现:NO_FINDINGS
综合
- 收集所有分析代理的发现
- 去重重叠问题
- 按排序:影响(高>中>低),然后风险(低优先)
- 序列重构:独立更改优先,依赖更改后
- 呈现发现:
## 重构分析:[目标]
### 摘要
| 视角 | 高 | 中 | 低 |
|-------------|------|--------|-----|
| [视角1] | X | X | X |
| **总计** | X | X | X |
*高影响问题*
| ID | 发现 | 修复 | 风险 |
|----|---------|-------------|------|
| H1 | 简短标题*(文件:行号)* | 具体技术*(问题)* | 风险级别 |
*中影响问题*
| ID | 发现 | 修复 | 风险 |
|----|---------|-------------|------|
| M1 | 简短标题*(文件:行号)* | 具体技术*(问题)* | 风险级别 |
*低影响问题*
| ID | 发现 | 修复 | 风险 |
|----|---------|-------------|------|
| L1 | 简短标题*(文件:行号)* | 具体技术*(问题)* | 风险级别 |
- 使用
AskUserQuestion:- “记录并继续” — 将计划保存到
docs/refactor/[NNN]-[name].md,然后执行 - “不记录继续” — 直接执行重构
- “取消” — 中止重构
- “记录并继续” — 将计划保存到
如果用户选择记录:创建文件包含目标、基线指标、识别问题、计划技术、风险评估。
阶段2b:团队分析
需要设置中启用
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS。
团队模式仅用于分析 — 执行(阶段3)始终顺序,因为行为保留需要一次更改与测试验证。
设置
- 创建团队 名为
refactor-{target} - 为每个分析视角创建一个任务 — 所有独立,无依赖。每个描述其焦点从活动分析模式视角表并引用目标源文件。
- 生成分析员:
smell-analyst,dependency-analyst,coverage-analyst,pattern-analyst,risk-analyst(或简化等价物) — 所有general-purpose子代理类型。 - 将每个任务分配给对应分析员。
分析员提示包括:目标文件、阶段1的基线测试状态、预期的AnalysisFinding输出格式,以及团队协议(检查TaskList → 标记进行中/完成 → 发送结果给领导 → 空闲时认领未分配工作)。
监控
消息自动到达。通过DM处理阻塞。从不直接分析。
综合与关闭
所有分析员报告后:通过TaskList验证 → 收集发现 → 去重 → 按影响然后风险排序 → 序列重构。向每个分析员发送顺序shutdown_request → 等待批准 → TeamDelete。
使用与标准模式相同格式呈现发现。提供:记录并继续 / 不记录继续 / 取消。
阶段3:执行更改
对于优先级序列中的每个更改:
- 应用单个更改
- 立即运行测试
- 如果通过 → 标记完成,继续下一个
- 如果失败 → 应用错误恢复(决策:错误恢复)
阶段4:最终验证
- 运行完整测试套件
- 与基线比较行为
- 呈现结果:
## 重构完成:[目标]
**状态**:完成 | 部分 - [原因]
### 之前/之后
| 文件 | 之前 | 之后 | 技术 |
|------|--------|-------|-----------|
| billing.ts | 75行方法 | 4个函数,每个20行 | 提取方法 |
### 验证
- 测试:[X]通过(基线:[Y])
- 行为:保留
- 覆盖率:[Z]%(基线:[W]%)
### 质量改进
- [改进1]
### 跳过
- [文件:行号] - [原因]
- 使用
AskUserQuestion:- “提交这些更改”
- “运行完整测试套件”
- “处理跳过项目(先添加测试)”
- “完成”
入口点
- 阅读项目上下文 — CLAUDE.md、CONSTITUTION.md(如果存在)、相关规范
- 定位目标代码并建立测试基线(阶段1)
- 确定分析模式(决策:分析模式)
- 询问执行模式(决策:模式选择)
- 启动分析(阶段2a或2b)
- 一次一个重构执行与测试验证(阶段3)
- 最终验证和报告(阶段4)