Registry 协议文档

SkillForge Registry HTTP v1 是 CLI 与远端服务之间的标准协议:多源聚合、签名发布、Scope RBAC、撤回审计,客户端和服务端都可以独立升级而不破坏链路。

CLI 侧能力
  • 多源:official / internal / corp 可配置优先级
  • @scope/name 路由到对应 scopes 的源
  • 安装 --require-signature:强制 Ed25519 校验
  • 单源失败只记录 errors,不打断全局
服务侧能力
  • publish/yank 的 Bearer Token 鉴权
  • 包上传时实时校验签名和公钥
  • scope publishers/admins 白名单
  • 完整 publish/yank/token 审计日志

HTTP v1 协议

GET/v1/skills?q=&limit=&includeYanked=&allVersions=搜索/列表技能
GET/v1/skills/:name/versions技能版本列表(不含默认全最新)
GET/v1/skills/:name/latest技能最新版本元信息
GET/v1/skills/:name/:version特定版本元信息(version 可省略 @)
GET/v1/skills/:name/:version/package.tar.gz下载归档 tarball
GET/v1/skills/:name/:version/package.tar.gz.minisig下载 minisig 签名
POST/v1/skills发布(multipart: manifest / archive / signature),需要 publish
PATCH/v1/skills/:name/:version/yank撤回/取消撤回,需要 yank

Bearer Token 鉴权

所有写操作(publish / yank / scope 更新 / token 颁发)都需要 Authorization: Bearer <token> 头。服务端启动时会生成 bootstrap token,写入 data/bootstrap-tokens.json 便于本地联调。

# 本地一键启动服务 & 读取默认 token
$ pnpm registry-service:dev
$ cat data/bootstrap-tokens.json

# CLI 登录
$ skillforge registry login official --token-stdin < <(jq -r '.tokens[] | select(.name=="bootstrap-admin") | .token' data/bootstrap-tokens.json)

# 使用管理员颁发新的 ci 只读 token
$ curl -X POST http://localhost:18081/v1/internal/tokens \
    -H "Authorization: Bearer $ADMIN_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{"owner":"ci-bot","scopes":["read"]}'

包签名

采用类似 Minisign 的 Ed25519 结构:untrusted comment 放 keyId,trusted comment 放时间戳。安装端以 trusted publishers 公钥集做白名单校验,确保即使被镜像投毒也无法通过。

# 生成密钥对 & 导出公钥
$ skillforge signer keygen --alias team-a
$ skillforge signer export-pub team-a > ./team-a.pub

# 发布时自动签名
$ skillforge publish @corp/security-review --sign

# 安装时强制校验
$ skillforge install @corp/security-review --remote \
    --require-signature \
    --trust ./team-a.pub

Scope 白名单

每个 scope 有 publishers(可发布)和 admins(可撤回/管理成员),未配置 admins 时 publishers 可自撤回。未带 scope 的全局技能不对发布者做白名单限制。

# 服务端通过 admin token 配置 scope 白名单
$ curl -X PUT http://localhost:18081/v1/scopes/corp \
    -H "Authorization: Bearer $ADMIN_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{"publishers":["alice","bob"],"admins":["alice"]}'

# CLI 侧把 scope 绑定到私有源,路由 @corp/*
$ skillforge registry add internal https://corp.internal/registry \
    --scopes corp --priority 300

审计日志

所有会影响 registry 状态的动作都会写入 audit_log:发布、撤回、scope 更新、token 颁发。通过 /v1/audit?limit=&action=&actor= 过滤,Web UI 的「审计日志」页也可直接浏览。

action资源触发时机
publishname@versionPOST /v1/skills 成功落库后
yankname@version撤回时;reason 写在 detail
unyankname@version取消撤回时
scope.update@scopePUT /v1/scopes/:scope
token.createtoken:<prefix>POST /v1/internal/tokens