name: openspec-apply-change description: 实现OpenSpec更改中的任务。当用户想要开始实施、继续实施或处理任务时使用。 license: MIT compatibility: 需要openspec CLI。 metadata: author: openspec version: “1.0” generatedBy: “1.0.0”
实现OpenSpec更改中的任务。
输入:可选指定更改名称。如果省略,检查是否可以从对话上下文中推断。如果模糊或含糊,您必须提示可用的更改。
步骤
-
选择更改
如果提供了名称,使用它。否则:
- 如果用户提到了更改,从对话上下文中推断
- 如果只有一个活动更改存在,自动选择
- 如果含糊,运行
openspec list --json获取可用更改,并使用 AskUserQuestion工具 让用户选择
始终宣布:“使用更改:<名称>” 以及如何覆盖(例如,
/opsx:apply <其他>)。 -
检查状态以了解模式
openspec status --change "<name>" --json解析JSON以理解:
schemaName:正在使用的工作流(例如,“spec-driven”, “tdd”)- 哪个工件包含任务(通常对于spec-driven是"tasks",检查状态以获取其他)
-
获取应用指令
openspec instructions apply --change "<name>" --json返回:
- 上下文文件路径(因模式而异 - 可能是proposal/specs/design/tasks或spec/tests/implementation/docs)
- 进度(总数、完成、剩余)
- 任务列表及状态
- 基于当前状态的动态指令
处理状态:
- 如果
state: "blocked"(缺少工件):显示消息,建议使用openspec-continue-change - 如果
state: "all_done":祝贺,建议归档 - 否则:继续实施
-
读取上下文文件
从应用指令输出中读取列在
contextFiles中的文件。 文件取决于正在使用的模式:- spec-driven:proposal、specs、design、tasks
- tdd:spec、tests、implementation、docs
- 其他模式:遵循CLI输出中的contextFiles
-
显示当前进度
显示:
- 正在使用的模式
- 进度:“N/M 任务完成”
- 剩余任务概述
- CLI中的动态指令
-
实施任务(循环直到完成或阻塞)
对于每个待处理任务:
- 显示正在处理哪个任务
- 进行所需的代码更改
- 保持更改最小化且集中
- 在任务文件中标记任务完成:
- [ ]→- [x] - 继续下一个任务
如果暂停:
- 任务不清晰 → 请求澄清
- 实施揭示设计问题 → 建议更新工件
- 遇到错误或阻塞 → 报告并等待指导
- 用户中断
-
在完成或暂停时,显示状态
显示:
- 本次会话完成的任务
- 总体进度:“N/M 任务完成”
- 如果全部完成:建议归档
- 如果暂停:解释原因并等待指导
实施期间输出
## 实施中:<更改名称> (模式:<模式名称>)
处理任务 3/7:<任务描述>
[...实施进行中...]
✓ 任务完成
处理任务 4/7:<任务描述>
[...实施进行中...]
✓ 任务完成
完成时输出
## 实施完成
**更改:** <更改名称>
**模式:** <模式名称>
**进度:** 7/7 任务完成 ✓
### 本次会话完成
- [x] 任务 1
- [x] 任务 2
...
所有任务完成!准备归档此更改。
暂停时输出(遇到问题)
## 实施暂停
**更改:** <更改名称>
**模式:** <模式名称>
**进度:** 4/7 任务完成
### 遇到的问题
<问题描述>
**选项:**
1. <选项 1>
2. <选项 2>
3. 其他方法
您想做什么?
防护措施
- 持续处理任务直到完成或阻塞
- 始终在开始前读取上下文文件(从应用指令输出)
- 如果任务含糊,在实施前暂停并询问
- 如果实施揭示问题,暂停并建议更新工件
- 保持代码更改最小化并限定于每个任务
- 在完成每个任务后立即更新任务复选框
- 在错误、阻塞或不明确需求时暂停 - 不要猜测
- 使用CLI输出中的contextFiles,不要假设特定文件名
流畅工作流集成
此技能支持"对更改的操作"模型:
- 可以随时调用:在所有工件完成前(如果任务存在),部分实施后,与其他操作交错
- 允许工件更新:如果实施揭示设计问题,建议更新工件 - 不锁定阶段,流畅工作