Origin 镜像迁移 API
以用户权限重试初始同步、查询迁移状态,或永久解除上游镜像。
This page has not been translated into English yet. The original Chinese version is shown below.
Migration API 由运营人员以 Cursor 用户身份调用,不是 Origin App 接口。可以使用 origin auth login 或通过 origin api 提供 Cursor API key;基础地址是 https://api.cursor.com/v1/origin。产品仍为 early beta,更新集成时核对官方 OpenAPI。
权限和接口
| 接口(基础路径之后) | 权限与用途 |
|---|---|
POST /repos/{ownerSlug}/{repoName}/mirror:transition | repository:mirror:write,重试镜像初始同步 |
DELETE /repos/{ownerSlug}/{repoName}/mirror | repository:mirror:delete,需要 Admin,永久 detach |
GET /repos/{ownerSlug}/{repoName}/mirror/transition-jobs/{jobId} | repository:mirror:read,读取指定 job |
GET /repos/{ownerSlug}/{repoName}/mirror/transition-jobs:active | 同上,读取 activeJob 和 lastJob |
用户还必须管理上游 GitHub 仓库。App 不能请求 write/delete scope,也不能调用这些迁移端点;App 的 mirror:read 仅用于 Get Repo 的 mirror 字段。
重试初始同步
Transition 请求体的当前支持值是 {"transition":"initial_to_inbound"}。起始状态不符合要求或已经有活跃 job 会返回 FailedPrecondition / HTTP 400;没有上游管理权限返回 403。响应含 repository 和 job,需继续查询后续状态。
完成判断看 status,不要硬匹配 phase:阶段未来可增加。官方字段列出 queued、running、succeeded、failed_rolled_back、requires_attention、superseded;后三种中的 requires_attention 需人工介入,succeeded、failed_rolled_back、superseded 为终态。
官方样例另将 failed_rolled_back 写成 failed-rolled-back,与枚举不一致。实现时以当前 schema 与实际响应核实,不直接把样例字符串写死。active 查询两个字段都可缺省;activeJob 消失后看 lastJob 判断结束结果,空对象也可能只是从未运行过。
解除镜像
Detach 保留当前仓库内容并变成原生仓库,停止双向同步;部署 key 保留但不使用。对 inbound 仓库会等待正在进行的最后 fetch,最多两分钟,以免覆盖解除后的新推送。
fetch 失败、远端无法解析、超时等会返回错误并保留镜像状态;上游 App 安装已消失/暂停或 GitHub 仓库不存在时可不做最后 fetch。成功返回 204、无响应体。
该 API 无法反向恢复 detach。重复解除已 detached 仓库无效果且成功;从未有镜像、或与其他状态修改竞争则可能返回 FailedPrecondition。调用前应明确这是永久改变同步关系的操作。