SuperAPI AI 工具集

openspec-archive-change

编程与开发

查看项目

更新于 10-16 09:03

技能介绍

用途

openspec-archive-change 用于在实验性工作流中归档一个已完成的变更。当用户希望在实现完成后最终确定并归档某个变更时,可以使用该技能。

主要能力

  • 列出并选择要归档的变更(仅显示尚未归档的活动变更,并尽可能显示每个变更所用的 schema)。
  • 检查工件完成状态(通过 openspec status --change "<name>" --json 解析 schemaName、planningHome、changeRoot、artifactPaths、actionContext 以及各工件的完成状态)。
  • 检查任务完成状态(读取 tasks.md,统计未完成任务与已完成任务)。
  • 评估增量规格(delta spec)同步状态,比较增量规格与 openspec/specs/<capability>/spec.md 中的主规格,判断将应用的添加、修改、删除、重命名等变更,并在提示前显示合并摘要。
  • 执行归档:在 planningHome.changesDir 下创建 archive 目录,以 YYYY-MM-DD-<change-name> 生成目标名称,检查目标是否已存在,然后将 changeRoot 移动到归档目录。
  • 显示归档完成摘要,包括变更名称、所用 schema、归档位置、规格是否已同步以及任何警告说明。

使用方式

  • 存储选择:如果用户指定了 store(store 是本机注册的独立 OpenSpec 仓库),或工作位于某个 store 中,则运行 openspec store list --json 发现已注册的 store id,然后在读取或写入规格与变更的命令(new change、status、instructions、list、show、validate、archive、doctor、context)上传递 --store <id>。其他命令不接受该标志。命令打印的提示已带有该标志,后续操作应保留。没有 store 时,命令作用于最近的本地 openspec/ 根目录。
  • 输入:可选指定变更名称。如果省略,检查是否可从对话上下文推断。如果模糊或不明确,必须提示选择可用变更。
  • 步骤:
    1. 如果未提供变更名称,运行 openspec list --json 获取可用变更,使用 AskUserQuestion 工具让用户选择。只显示活动变更(未归档)。尽可能包含每个变更所用的 schema。重要:不要猜测或自动选择变更,始终让用户选择。
    2. 运行 openspec status --change "<name>" --json 检查工件完成状态。解析 JSON 以了解 schemaName、planningHome、changeRoot、artifactPaths、actionContext 以及工件列表及其状态。如果有工件未完成,显示警告列出未完成工件,使用 AskUserQuestion 工具确认用户是否继续。用户确认后继续。
    3. 读取任务文件(通常是 tasks.md)检查未完成任务。统计 - [ ](未完成)与 - [x](已完成)。如果发现未完成任务,显示警告及数量,使用 AskUserQuestion 工具确认用户是否继续。用户确认后继续。如果不存在任务文件,则跳过任务相关警告直接继续。
    4. 使用状态 JSON 中的 artifactPaths.specs.existingOutputPaths 检查增量规格。如果不存在,跳过同步提示直接继续。如果存在,将每个增量规格与其对应的主规格 openspec/specs/<capability>/spec.md 比较,确定将应用的变更(添加、修改、删除、重命名),在提示前显示合并摘要。提示选项:如果需要变更,显示“立即同步(推荐)”“不同步直接归档”;如果已同步,显示“立即归档”“仍然同步”“取消”。如果用户选择同步,使用 Task 工具(subagent_type: "general-purpose",prompt: "Use Skill tool to invoke openspec-sync-specs for change ''。Delta spec analysis: ")。无论选择如何,都继续归档。
    5. 执行归档:如果 planningHome.changesDir 下不存在 archive 目录则创建:mkdir -p "<planningHome.changesDir>/archive"。使用当前日期生成目标名称:YYYY-MM-DD-<change-name>。检查目标是否已存在:如果存在,报错并建议重命名现有归档或使用不同日期;如果不存在,将 changeRoot 移动到归档目录:mv "<changeRoot>" "<planningHome.changesDir>/archive/YYYY-MM-DD-<name>"。
    6. 显示摘要:显示归档完成摘要,包括变更名称、所用 schema、归档位置、规格是否已同步(如适用)以及任何警告说明(未完成工件/任务)。
  • 成功输出格式:

    Archive Complete

    Change: <change-name> Schema: <schema-name> Archived to: 由 planningHome.changesDir/YYYY-MM-DD-<name>/ 推导的归档路径 Specs: ✓ 已同步到主规格(或“无增量规格”或“跳过同步”) 所有工件完成。所有任务完成。

适用场景

  • 用户希望在实现完成后最终确定并归档某个变更。
  • 需要检查变更的工件与任务完成状态,并决定是否在归档前同步增量规格。
  • 工作位于已注册的 OpenSpec store 中,或位于本地 openspec/ 根目录下。

限制

  • 该技能属于实验性工作流。
  • 如果未提供变更名称且无法从上下文推断,必须提示用户选择,不能猜测或自动选择。
  • 归档不会因警告而阻塞,只会告知并确认。
  • 移动到归档时保留 .openspec.yaml(随目录一起移动)。
  • 如果目标归档名称已存在,归档失败并建议重命名现有归档或使用不同日期。
  • 如果请求同步,使用 openspec-sync-specs 方式(由 agent 驱动)。
  • 如果存在增量规格,始终运行同步评估并在提示前显示合并摘要。
  • 关于收费、价格、平台支持等具体信息,资料中暂未提供。