news 2026/9/5 17:08:13

Spec Kit 集成目录开发指南:从内置集成到社区目录的完整贡献流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spec Kit 集成目录开发指南:从内置集成到社区目录的完整贡献流程

Spec Kit 集成目录开发指南:从内置集成到社区目录的完整贡献流程

【免费下载链接】spec-kit💫 Toolkit to help you get started with Spec-Driven Development项目地址: https://gitcode.com/GitHub_Trending/sp/spec-kit

本篇基于 Spec Kit 仓库的 集成目录贡献指南,系统讲解如何将 AI Agent 集成(如 Copilot、Claude Code、Gemini CLI 等)贡献到 Spec Kit 的内置目录或社区目录。读完本文,你将掌握两类集成各自的落地清单、catalog.json目录条目格式、integration.yml描述文件的字段规范与校验规则,以及specify integration upgrade的 diff 感知升级机制在源码中的实际实现。

集成生态的两种形态:内置集成与社区集成

Spec Kit 通过specify integration子命令族将 Spec-Driven 开发的命令模板分发到不同 AI 助手。贡献指南明确区分了两条路径(见 integrations/CONTRIBUTING.md):

  • 内置集成(Built-In):由 Spec Kit 核心团队维护,随 CLI 一起发布,用户开箱即装;
  • 社区集成(Community):由外部开发者贡献,登记在 integrations/catalog.community.json 中供发现,用户从集成自身的源仓库安装。

从源码结构看,内置集成全部注册在 INTEGRATION_REGISTRY 这个全局字典中。_register()函数在注册时做了两道防线:空 key 抛ValueError、重复 key 抛KeyError(注册实现)。_register_builtins()目前按字母序导入了 39 个集成模块并逐一注册,覆盖agyclaudecopilotgeminicursor_agentkiro_cli等主流工具。

一个值得注意的命名约定:用户面向的集成 key 保留连字符(如cursor-agentkiro-cli,与实际 CLI 工具/二进制名一致),而包目录必须使用 Python 合法的包名——即连字符替换为下划线(cursor-agentcursor_agent/kiro-clikiro_cli/)。该约定在init.py 的文档字符串 中有明确说明。

新增内置集成的六步清单

贡献指南给出的内置集成落地清单如下,每一步都能在当前仓库中找到对应落点:

  1. 创建集成的子包:位于src/specify_cli/integrations/<package_dir>/<package_dir>在无连字符时与集成 key 一致(如gemini),有连字符时将连字符替换为下划线(如 keycursor-agent→ 目录cursor_agent/)——因为 Python 包名不允许连字符;
  2. 实现集成类:继承MarkdownIntegrationTomlIntegrationSkillsIntegration三者之一;
  3. 注册集成:在src/specify_cli/integrations/__init__.py中导入并调用_register(...)
  4. 添加测试:位于tests/integrations/test_integration_<package_dir>.py(仓库中已有如 test_integration_claude.py、test_integration_gemini.py 等 30 余个同构测试文件可参照);
  5. 添加目录条目:写入 integrations/catalog.json;
  6. 更新文档:同步修改AGENTS.mdREADME.md

三种基类分别对应哪种安装形态

base.py 的模块文档说明了三种基类的定位:

基类适用形态说明
MarkdownIntegration标准 Markdown 命令格式最常见情况,子类只需设置三个类属性即可
TomlIntegrationTOML 命令格式适用于 Gemini、Tabnine 等以 TOML 存储命令的 Agent
SkillsIntegration以 Agent Skill 形式安装命令采用speckit-<name>/SKILL.md布局

base.py还定义了 IntegrationOption 数据类,用于声明集成接受的--integration-options选项(如--commands-dir、布尔标志--skills),包括is_flagrequireddefaulthelp等字段。此外,base.py中维护了 _CORE_COMMAND_TEMPLATE_ORDER 常量,规定了核心命令模板(analyzeclarifyconstitutionimplementconvergeplanchecklistspecifytaskstaskstoissues)的安装排序——新增内置集成时,其命令安装行为会自动对齐这一顺序。

catalog.json 条目格式

内置目录条目添加在 integrations/catalog.json 顶层integrations键下,标准格式如下:

{ "schema_version": "1.0", "integrations": { "my-agent": { "id": "my-agent", "name": "My Agent", "version": "1.0.0", "description": "Integration for My Agent", "author": "spec-kit-core", "repository": "https://github.com/github/spec-kit", "tags": ["cli"] } } }

对照真实仓库中的 catalog.json,各字段取值有明确模式:核心团队维护的条目author统一为spec-kit-corerepository指向 spec-kit 仓库本体;tags用于标注集成类别,例如 Claude Code 是["cli", "anthropic"]、Cline 是["ide"]、Droid 是["cli", "skills", "factory"]。顶层还包含updated_at(ISO 8601 时间戳)与catalog_url元数据字段,如 integrations/README.md 的 Schema 一节所列。

新增社区集成的前置条件

社区集成由外部开发者贡献,指南列出了五项前置条件:

  1. 可用的集成—— 已通过specify integration install实测;
  2. 公开仓库—— 托管在 GitHub 或同类平台;
  3. integration.yml描述文件—— 格式有效的描述符(下文详述);
  4. 文档—— 含使用说明的 README;
  5. 开源许可证文件

integration.yml 描述文件

每个社区集成必须包含integration.yml,完整示例如下:

schema_version: "1.0" integration: id: "my-agent" name: "My Agent" version: "1.0.0" description: "Integration for My Agent" author: "your-name" repository: "https://github.com/your-name/speckit-my-agent" license: "MIT" requires: speckit_version: ">=0.6.0" tools: - name: "my-agent" version: ">=1.0.0" required: true provides: commands: - name: "speckit.specify" file: "templates/speckit.specify.md" scripts: - update-context.sh

描述文件校验规则

字段规则
schema_version必须为"1.0"
integration.id小写字母数字 + 连字符(^[a-z0-9-]+$
integration.version合法 PEP 440 版本(用packaging.version.Version()解析)
requires.speckit_version必填字段;需给出>=0.6.0之类的版本约束(当前校验仅检查其存在且非空)
provides至少包含一个命令或脚本
provides.commands[].name字符串标识符
provides.commands[].file指向模板文件的相对路径

这些规则并非纸面约定,而是有真实的源码实现。catalog.py 中的_validate()方法 逐条执行上述校验:

  • schema_version不等于1.0时抛出 "Unsupported schema version" 错误(L722-L726);
  • integration下的idnameversiondescription四个字段缺一不可且必须为字符串(L728-L741);
  • id不匹配正则^[a-z0-9-]+$时报 "must be lowercase alphanumeric with hyphens only"(L743-L747);
  • version通过pkg_version.Version()解析,失败即视为非法 PEP 440 版本(L749-L754);
  • requires.speckit_version缺失或为空字符串直接报错(L761-L768),印证了贡献指南中"当前校验仅检查存在性"的说明;
  • providescommandsscripts全空时报 "Integration must provide at least one command or script"(L801-L804);每个 command 条目必须同时带非空的namefile

另外,catalog.py还实现了描述文件内容的 SHA-256 指纹(get_hash 方法 返回sha256:<hexdigest>格式),用于后续比对描述文件是否变更。

提交到社区目录的流程

  1. Fork spec-kit 仓库;
  2. 在 integrations/catalog.community.json 的integrations键下添加你的条目(格式与内置目录一致,author填个人/组织名,repository指向你的集成仓库);
  3. 提交 Pull Request,内容需包含:你的目录条目、集成仓库链接、以及integration.yml有效性确认。

版本更新

当你需要更新集成版本时:

  1. 发布集成的新版本;
  2. 提交 PR 更新catalog.community.json中对应条目的version字段;
  3. 保证向后兼容,或明确记录破坏性变更。

Upgrade 工作流:diff 感知升级的源码剖析

贡献指南的最后一节描述了specify integration upgrade的四个机制:

  1. 哈希比对—— manifest 记录所有已安装文件的 SHA-256 哈希;
  2. 修改文件检测—— 自安装以来被修改的文件会被标记;
  3. 安全默认—— 只要有任何已安装文件被修改,升级即被阻断;
  4. 强制重装—— 传入--force才会用最新版本覆盖被修改的文件。
# 升级当前集成(若文件被修改则阻断) specify integration upgrade # 强制升级(覆盖被修改的文件) specify integration upgrade --force

源码层面的对应实现非常清晰。哈希基础设施位于 manifest.py:模块文档明确指出"卸载时只删除哈希仍匹配的文件",IntegrationManifest内部维护rel_path → sha256 hex的映射(L129),安装时逐个记录文件内容哈希(L162),check_modified()则对每个已记录文件重新计算 SHA-256 并与期望值比对(L300-L313)。

CLI 命令本体是 _migrate_commands.py 中的integration_upgrade。其执行链为:

  • 解析目标 key:参数缺省时取当前已安装集成;未安装或 key 不在已安装列表中则直接报错退出(L604-L617);
  • .specify/integrations/<key>.manifest.json加载 manifest,manifest 不存在时提示改为执行specify integration install <key>(L619-L623);
  • 调用old_manifest.check_modified()检测修改文件;若存在修改且未传--force,逐行列出被修改文件并提示"Use --force to overwrite modified files, or resolve manually",然后以非零码退出(L631-L638);
  • 未阻断时继续按脚本类型(--script sh/ps/py)与--integration-options重建安装参数完成重装。

同文件的 uninstall 命令也复用了同一套哈希保护逻辑——默认保留被修改的文件,仅在--force下才删除它们(_install_commands.py L220-L326),即"安全默认"策略贯穿了安装、升级、卸载的完整生命周期。

贡献前检查清单

综合本文各节,提交集成 PR 前可以按以下顺序自检:

  • 内置集成:子包目录名与 key 的连字符/下划线转换正确;集成类继承了三种基类之一且三个类属性已设置;_register调用已加入__init__.pytests/integrations/下存在同构测试;catalog.json 条目字段齐全(id/name/version/description/author/repository/tags);AGENTS.mdREADME.md已同步更新。
  • 社区集成:集成可通过specify integration install实测;integration.yml能通过 catalog.py 的校验逻辑(schema_version"1.0"、id 符合^[a-z0-9-]+$、version 符合 PEP 440、requires.speckit_version非空、provides至少含一个命令或脚本);catalog.community.json 条目已添加;README 与许可证齐备。
  • 版本更新:确认新版本向后兼容,或在 PR 中明确记录破坏性变更,并知晓upgrade --force是用户覆盖本地修改的唯一途径。

以上流程均基于当前仓库的实际代码与文档,适用前提是使用支持specify integration命令族的 Spec Kit CLI 版本;目录 Schema 当前固定为schema_version "1.0"

【免费下载链接】spec-kit💫 Toolkit to help you get started with Spec-Driven Development项目地址: https://gitcode.com/GitHub_Trending/sp/spec-kit

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 17:04:39

WebGPU数字地球大气散射LUT预计算与天空渲染

写 WebGPU 版 Cesium 高性能数字地球引擎时&#xff0c;前面的阶段可以靠模型加载、相机控制和图层管理撑起来&#xff0c;但一旦把相机从地面拉到太空&#xff0c;再从太空落回地面&#xff0c;视觉是否成立就完全取决于大气和光照的处理。Atmosphere 系列这一篇要解决的不是“…

作者头像 李华
网站建设 2026/9/5 17:04:30

ONNX Runtime Windows二进制包深度解析与生产部署指南

简介&#xff1a;本资源为ONNX Runtime 1.23.1 Windows x64 CPU版官方预编译安装包&#xff0c;面向AI模型部署工程师、Python/C推理开发者及边缘端轻量级部署学习者&#xff0c;解决国内直接下载官方二进制包缓慢或失败的问题。压缩包共26个文件&#xff0c;含14个头文件&…

作者头像 李华
网站建设 2026/9/5 17:00:48

31个QT上位机实战源码解析:串口通讯、运动控制与工业HMI开发

简介&#xff1a;本资源是一套面向Qt初学者与工业上位机开发者的实战型源码合集&#xff0c;聚焦嵌入式与工控场景下的GUI应用开发&#xff0c;涵盖步进电机控制、温湿度监测、触摸屏交互、串口/CAN通信、汽车仪表盘模拟及多轴运动控制等核心方向。压缩包共77个文件&#xff0c…

作者头像 李华
网站建设 2026/9/5 16:58:15

树莓派5与深度相机构建无接触3D腰臀围测量仪

这次我们来看一个把树莓派5当嵌入式主机、把深度相机当测量探头、把点云算法当量尺的完整方案&#xff1a;无接触 3D 智能腰臀围测量仪。它的核心不是“拉软尺”&#xff0c;也不是让测量员贴身去量&#xff0c;而是让被测者站到设备前面&#xff0c;3D 相机采集人体表面点云&a…

作者头像 李华