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