版本与差异

August 24, 2026 · View on GitHub

查看 Skill 的版本记录,以及任意两个版本之间的文件级差异。

通用约定见 README.md


版本列表

GET /api/v1/skills/{slug}/versions

参数

位置参数类型必填说明
pathslugstringSkill 唯一标识

示例

curl "$SKILLHUB_BASE_URL/api/v1/skills/find-skill-skillhub/versions"

响应

{
  "slug": "find-skill-skillhub",
  "source": "community",
  "versions": [
    { "versionId": 102, "version": "1.0.2", "changelog": "补充分类参考文档", "createdAt": 1782461490627 },
    { "versionId": 101, "version": "1.0.1", "changelog": "修复关键词分词", "createdAt": 1782450000000 },
    { "versionId": 100, "version": "1.0.0", "changelog": "Initial release", "createdAt": 1782446361889 }
  ]
}
字段类型说明
slugstringSkill 唯一标识
sourcestringSkill 来源
versions[].versionIdint版本 ID
versions[].versionstring版本号(semver)
versions[].changelogstring变更日志
versions[].createdAtint发布时间(毫秒时间戳)

版本按发布时间倒序返回,第一项为最新版本。

可见性规则

只返回公开可见的版本:社区来源仅包含审核通过的版本,待审核与未通过的版本不会出现在列表中。

错误码

状态码error说明
400missing slug未提供 slug
404skill not foundSkill 不存在或不公开可见

版本差异

GET /api/v1/skills/{slug}/diff

对比两个版本的文件构成,返回增删改统计和逐文件状态。差异依据文件 SHA256 判定,不读取文件内容。

参数

位置参数类型必填说明
pathslugstringSkill 唯一标识
querybasestring基线版本号
querytargetstring目标版本号

示例

curl "$SKILLHUB_BASE_URL/api/v1/skills/find-skill-skillhub/diff?base=1.0.0&target=1.0.2"

响应

{
  "slug": "find-skill-skillhub",
  "base": "1.0.0",
  "target": "1.0.2",
  "summary": { "added": 1, "removed": 0, "changed": 2, "unchanged": 5 },
  "files": [
    {
      "path": "SKILL.md",
      "status": "changed",
      "baseSize": 2048,
      "targetSize": 2312,
      "baseSha256": "a1b2c3...",
      "targetSha256": "f6e5d4..."
    },
    {
      "path": "src/new.py",
      "status": "added",
      "baseSize": null,
      "targetSize": 512,
      "baseSha256": null,
      "targetSha256": "9c8b7a..."
    }
  ]
}
字段类型说明
summary.addedint新增文件数
summary.removedint删除文件数
summary.changedint内容变更文件数
summary.unchangedint未变更文件数
files[].pathstring文件相对路径
files[].statusstringadded / removed / changed / unchanged
files[].baseSizeint|null基线侧大小,文件在基线不存在时为 null
files[].targetSizeint|null目标侧大小,文件在目标不存在时为 null
files[].baseSha256string|null基线侧 SHA256
files[].targetSha256string|null目标侧 SHA256

files 按路径升序返回,包含 unchanged 项,便于直接渲染完整文件树。

错误码

状态码error说明
400missing slug, base or target参数缺失
404skill not foundSkill 不存在或不公开可见
404version not found or no files版本不存在或无文件

basetarget 都必须是公开可见的版本,否则统一返回 404。


单文件差异

GET /api/v1/skills/{slug}/diff/file

在版本差异的基础上,返回指定文件在两侧的文本内容,可直接喂给 diff 渲染组件。

参数

位置参数类型必填说明
pathslugstringSkill 唯一标识
querybasestring基线版本号
querytargetstring目标版本号
querypathstring文件相对路径

示例

curl "$SKILLHUB_BASE_URL/api/v1/skills/find-skill-skillhub/diff/file?base=1.0.0&target=1.0.2&path=SKILL.md"

响应

{
  "slug": "find-skill-skillhub",
  "base": "1.0.0",
  "target": "1.0.2",
  "path": "SKILL.md",
  "status": "changed",
  "tooLarge": false,
  "baseFile": {
    "exists": true,
    "size": 2048,
    "sha256": "a1b2c3...",
    "text": "# Skill\n..."
  },
  "targetFile": {
    "exists": true,
    "size": 2312,
    "sha256": "f6e5d4...",
    "text": "# Skill\n..."
  }
}
字段类型说明
statusstringadded / removed / changed / unchanged
tooLargeboolean任一侧文件超过 1MB 时为 true,此时不返回 text
baseFile.existsboolean文件在基线版本是否存在
baseFile.sizeint|null文件大小(字节)
baseFile.sha256string|null文件内容的 SHA256
baseFile.textstring|null文件文本内容,tooLarge=true 或文件不存在时为 null
targetFile.*结构同 baseFile

限制

任一侧文件超过 1MB 时,响应只返回元数据并置 tooLarge=true,不返回文本内容。 这类文件请改用 单文件内容接口 或下载 zip 包后本地对比。

错误码

状态码error说明
400missing slug, base, target or path参数缺失
404skill not foundSkill 不存在或不公开可见
404version not found or no files版本不存在或无文件
404file not found该文件在两个版本中都不存在

典型场景:版本对比视图

# 1. 取版本列表,让用户选两个版本
curl "$SKILLHUB_BASE_URL/api/v1/skills/find-skill-skillhub/versions"

# 2. 取整体差异,渲染变更文件列表
curl "$SKILLHUB_BASE_URL/api/v1/skills/find-skill-skillhub/diff?base=1.0.0&target=1.0.2"

# 3. 用户点开某个变更文件,取两侧文本做 diff 渲染
curl "$SKILLHUB_BASE_URL/api/v1/skills/find-skill-skillhub/diff/file?base=1.0.0&target=1.0.2&path=SKILL.md"

整体差异只查元数据,响应很快,适合先渲染列表再按需拉取单文件内容。