name: speckit-updater
description: SpecKit Safe Update
risk: critical
source: community
SpecKit 安全更新
此技能为 GitHub SpecKit 安装提供安全更新能力,在应用模板更新的同时保留自定义内容。
安装:在添加任何市场或手动克隆之前,请检查
确切的插件版本和每个捆绑文件,报告脚本以及网络或
文件系统行为,并请求用户的明确批准。不要将移动中的
分支直接安装到活跃的智能体目录中。
何时使用
- 你需要更新或安装 SpecKit 模板,同时保留项目自定义内容。
- 你想要围绕更新、回滚或特定版本的 SpecKit 操作有一个安全的批准流程。
- 任务是以对话方式操作 SpecKit 更新器,而不是盲目运行原始命令。
当此技能被调用时要做什么
当用户调用/speckit-updater时,你应该:
运行更新编排脚本,不带任何标志(对话模式):
pwsh-NoProfile-File"<skill_path>/scripts/update-wrapper.ps1"解析输出中的标记:
[PROMPT_FOR_APPROVAL]- 更新场景(已有 SpecKit 安装)[PROMPT_FOR_INSTALL]- 全新安装场景(没有 .specify/ 目录)
对于更新(找到
[PROMPT_FOR_APPROVAL]标记):- 展示 Markdown 摘要,显示:
- 当前版本 vs. 可用版本
- 要更新/添加/删除的文件
- 检测到的冲突(如果有)
- 保留的文件(已自定义)
- 备份位置
- 自定义命令
- 请求用户批准以继续更新
- 如果批准,使用
-Proceed标志重新运行 - 如果拒绝,告知用户更新已取消
- 展示 Markdown 摘要,显示:
对于全新安装(找到
[PROMPT_FOR_INSTALL]标记):- 向用户提供自然的安装邀请,例如:
- “SpecKit 目前未安装在此项目中。要我安装它吗?”
- “我可以为你安装最新的 SpecKit 模板。这将创建 .specify/ 目录结构并从 GitHub 下载模板。”
- 不要向用户提及
-Proceed标志(这是实现细节) - 如果用户批准(说"好"、“继续”、"安装它"等),使用
-Proceed标志重新运行 - 如果用户拒绝,告知他们安装已取消
- 向用户提供自然的安装邀请,例如:
通过使用
-Proceed标志重新运行来执行已批准的操作:pwsh-NoProfile-File"<skill_path>/scripts/update-wrapper.ps1"-Proceed
特殊情况:
- 如果用户请求
-CheckOnly:使用该标志运行并展示报告 - 如果用户请求
-Rollback:使用该标志运行并确认恢复 - 如果用户请求特定
-Version:包含该参数
命令
/speckit-updater
在保留自定义内容的同时更新 SpecKit 模板、命令和脚本。
用法:
/speckit-updater- 带对话式批准工作流的交互式更新/安装(推荐用于 Claude Code)/speckit-updater -Proceed- 批准后继续更新/安装(用户在确认后由 Claude 使用)/speckit-updater -CheckOnly- 检查更新但不应用/speckit-updater -Version v0.0.72- 更新到特定版本/speckit-updater -Force- 强制覆盖 SpecKit 文件(保留自定义命令)/speckit-updater -Rollback- 从之前的备份恢复/speckit-updater -Auto- 已弃用:改用对话式工作流(显示警告,映射到 -Proceed)
全新安装(无 .specify/ 目录):
- 首次调用显示带
[PROMPT_FOR_INSTALL]标记的安装邀请 - Claude Code 向用户提出自然的问题(例如,“要我安装 SpecKit 吗?”)
- 用户通过对话式回复批准(例如,“好”、“继续”、“安装它”)
- Claude 自动使用
-Proceed标志重新调用(实现细节对用户隐藏) - 脚本创建
.specify/结构、下载模板、创建清单 - 全程退出码 0(等待批准不是错误)
- 与更新流程一致:两者都使用对话式批准工作流
流程:
- 验证前提条件(已安装 Git、干净的 Git 状态、写入权限)
- 加载或创建清单(.specify/manifest.json)
- 从 GitHub Releases API 获取目标版本
- 比较文件哈希以识别自定义内容
- 创建带时间戳的备份
- 应用选择性更新,保留自定义文件
- 对冲突打开 VSCode 合并编辑器(流程 A:一次一个)
- 自动调用 /speckit.constitution 进行宪法更新
- 用新版本更新清单
- 管理备份保留(保留最近 5 个)
当你调用此命令时,我将:
- 执行 update-orchestrator.ps1 脚本
- 解析输出中的标记(更新用
[PROMPT_FOR_APPROVAL],全新安装用[PROMPT_FOR_INSTALL]) - 对于更新:展示提议更改的 Markdown 摘要
- 对于安装:自然地询问你是否要安装 SpecKit(不提及
-Proceed标志) - 通过聊天对话等待你的批准
- 批准后:自动使用
-Proceed标志重新调用以执行 - 一次一个文件地指导你解决冲突(仅更新)
- 按需打开 VSCode diff/merge 工具(仅更新)
- 用详细摘要报告结果
对话式工作流:此技能使用两步批准流程:
- 第 1 步:输出摘要 → 脚本退出 → 等待批准
- 第 2 步:批准后,Claude 使用
-Proceed重新调用 → 应用更新
要求:
- 已安装 Git 且在 PATH 中
- 互联网连接(用于从 GitHub 获取更新)
- 对 .specify/ 和 .claude/ 目录的写入权限
- 干净或已暂存的 Git 工作目录
脚本位于:{skill_path}/scripts/update-wrapper.ps1(入口点)和{skill_path}/scripts/update-orchestrator.ps1(主要逻辑)
入口点命令:
pwsh-NoProfile-Command"& '{skill_path}/scripts/update-wrapper.ps1' [parameters]"注意:通过包装脚本同时支持 PowerShell 风格(-CheckOnly)和 Linux 风格(--check-only)标志。
功能
- 自定义内容保留:使用规范化文件哈希自动检测并保留用户自定义内容
- 智能冲突解决:一次一个地指导解决冲突,有 4 个选项:合并编辑器、保留我的、使用新的、跳过
- 版本跟踪:维护带文件哈希、版本信息和备份历史的
.specify/manifest.json - 自动备份:在
.specify/backups/中创建带时间戳的备份,并自动管理保留 - 快速失败并回滚:任何错误时自动回滚,恢复到更新前状态
- 试运行模式:
--check-only显示将更改的内容而不应用更新 - 宪法集成:当宪法模板有更新时通知(运行
/speckit.constitution) - 自定义命令安全:用户创建的命令绝不会被覆盖,即使使用
--force
架构
模块
- HashUtils:规范化哈希(处理行尾、尾随空格、BOM)
- VSCodeIntegration:上下文检测、Quick Pick、diff/merge 编辑器集成
- GitHubApiClient:GitHub Releases API 交互(未认证,60 次请求/小时)
- ManifestManager:带缓存的清单 CRUD 操作
- BackupManager:备份创建、恢复和保留管理
- ConflictDetector:文件状态分析和冲突检测
工作流
- 前提条件验证(关键检查必须通过,警告允许继续)
- 清单加载/创建(安全默认:如果没有清单,假设所有文件都已自定义)
- GitHub API 查询目标版本
- 文件状态分析(6 种操作:添加/移除/合并/保留/更新/跳过)
- 带更改预览的用户确认
- 备份创建(带时间戳,排除备份目录)
- 选择性文件更新(快速失败并自动回滚)
- 冲突解决(流程 A:一次一个,VSCode 合并编辑器)
- 清单更新(版本、文件哈希、自定义标志)
- 备份清理(保留最近 5 个,需要确认)
- 显示详细摘要
退出码
| 代码 | 含义 |
|---|---|
| 0 | 成功 |
| 1 | 一般错误 |
| 2 | 前提条件未满足 |
| 3 | 网络/API 错误 |
| 4 | Git 错误 |
| 5 | 用户取消 |
| 6 | 需要回滚(自动) |
限制
- 仅当任务明确符合上述范围时使用此技能。
- 不要将输出视为特定环境验证、测试或专家审查的替代品。
- 如果缺少必需的输入、权限、安全边界或成功标准,请停下来询问澄清。