SuperAPI AI 工具集

openspec-continue-change

编程与开发

查看项目

更新于 10-15 10:24

技能介绍

用途

openspec-continue-change 用于继续推进一个 OpenSpec 变更,方式是创建该变更的下一个工件(artifact)。当用户想要推进自己的变更、创建下一个工件或继续某项变更时,可使用此技能。

主要能力

  • 列出可用变更:运行 openspec list --json 获取按最近修改时间排序的变更列表。
  • 让用户选择变更:使用 AskUserQuestion 工具让用户选择要处理的变更,展示最近修改的前 3-4 个变更作为选项,包含变更名称、schema(来自 schema 字段,若不存在则为 "spec-driven")、状态(如 "0/5 tasks"、"complete"、"no tasks")以及最近修改时间(来自 lastModified 字段),并将最近修改的变更标记为 "(Recommended)"。
  • 检查当前状态:运行 openspec status --change "<name>" --json,解析 JSON 以了解当前状态,响应包含 schemaName(使用的工作流 schema,如 "spec-driven")、artifacts(工件数组及其状态 "done"、"ready"、"blocked")、isComplete(布尔值,表示所有工件是否完成)。
  • 根据状态执行操作:
    • 若所有工件已完成(isComplete: true):向用户表示祝贺,展示包含所用 schema 的最终状态,并建议 "All artifacts created! You can now implement this change or archive it.",然后停止。
    • 若有工件处于 ready 状态:从状态输出中选取第一个状态为 "ready" 的工件,运行 openspec instructions <artifact-id> --change "<name>" --json 获取其指令,解析 JSON 中的关键字段(context:项目背景,作为约束,不写入输出;rules:工件特定规则,作为约束,不写入输出;template:输出文件的结构;instruction:schema 特定指导;outputPath:工件写入位置;dependencies:用于上下文的已完成工件),然后创建工件文件:读取任何已完成的依赖文件作为上下文,使用 template 作为结构并填充其各节,将 context 和 rules 作为约束应用但不复制进文件,写入指令中指定的输出路径,展示创建了什么以及现在解锁了什么,创建完一个工件后停止。
    • 若无工件处于 ready 状态(全部 blocked):这不应在有效 schema 下发生,展示状态并建议检查问题。
  • 创建工件后展示进度:运行 openspec status --change "<name>"。

使用方式

输入:可选指定变更名称。若省略,检查是否可从对话上下文推断。若模糊或不明确,必须提示选择可用变更。

重要:不要猜测或自动选择变更,始终让用户选择。

每次调用后输出:创建了哪个工件、使用的 schema 工作流、当前进度(N/M 完成)、现在解锁了哪些工件,并提示:"Want to continue? Just ask me to continue or tell me what to do next."

工件创建指南

工件类型及其用途取决于 schema。使用 instructions 输出中的 instruction 字段来了解要创建什么。

常见工件模式(spec-driven schema:proposal → specs → design → tasks):

  • proposal.md:若变更不清晰,询问用户。填写 Why、What Changes、Capabilities、Impact。Capabilities 部分至关重要——列出的每个能力都需要一个 spec 文件。
  • specs//spec.md:为 proposal 的 Capabilities 部分列出的每个能力创建一个 spec(使用能力名称,而非变更名称)。
  • design.md:记录技术决策、架构和实现方法。
  • tasks.md:将实现拆分为带复选框的任务。

对于其他 schema,遵循 CLI 输出中的 instruction 字段。

限制与护栏

  • 每次调用只创建一个工件。
  • 创建新工件前始终读取依赖工件。
  • 绝不跳过工件或乱序创建。
  • 若上下文不清晰,创建前询问用户。
  • 写入后、标记进度前验证工件文件存在。
  • 使用 schema 的工件顺序,不要假设具体工件名称。
  • 重要:context 和 rules 是对你的约束,不是文件内容。不要将 <context>、<rules>、<project_context> 块复制进工件。这些指导你写什么,但绝不应出现在输出中。