跳到正文
OcHub

Deep Link

生成带版本的 ochub:// 链接,将模型供应商和其他资源导入 OcHub。

更新于 查看 Markdown

当供应商网站、账户控制台或安装指南需要把一份完整配置交给 OcHub 桌面端时,可以使用 Deep Link。

导入模型供应商时,OcHub 会先打开可编辑预览。只有用户点击“导入模型供应商”后才会写入; Manifest 包含 applyTo 时,预览还会列出要配置此供应商的工具,用户可在确认前关闭任意目标。

兼容性与行为

当前协议版本为 v1

ochub://v1/import?resource=<resource>&...

模型供应商资源可由 macOS 桌面端和 ochcli 处理。桌面端支持冷启动,也支持应用已运行时 接收链接。

OcHub 本地网关配置应使用 resource=model-provider。不要与 resource=provider 混淆;后者表示给一个目标应用导入直接连接。

模型供应商 URL

模型供应商链接除 resource 外只有一个 Query 参数:

ochub://v1/import?resource=model-provider&payload=<base64url-json>

payload 是将 UTF-8 JSON Manifest 编码为无 Padding 的 Base64URL 后得到的内容。 它不是普通 Base64:应使用 URL 安全的 -_,并移除末尾的 =。解码后的 JSON 最大为 64 KiB。

不要把 apiKey 作为单独的明文 Query 参数。应先把它写入 Manifest,再编码完整 Payload。

Manifest 示例

{
  "schema": "io.ochub.model-provider/v1",
  "source": {
    "id": "com.aster/default",
    "revision": "2026-07-01",
    "website": "https://aster.example"
  },
  "name": "Aster API",
  "apiKey": "sk-user-secret",
  "dialects": ["messages", "responses"],
  "models": ["claude-sonnet-4-5", "gpt-5.4"],
  "websocketEnabled": true,
  "endpoints": [
    {
      "baseUrl": "https://api.aster.example"
    },
    {
      "baseUrl": "https://backup.aster.example"
    }
  ],
  "defaultModel": "claude-sonnet-4-5",
  "modelRules": [
    {
      "model": "fast",
      "upstreamModel": "claude-sonnet-4-5",
      "dialect": "messages"
    }
  ],
  "reasoning": {
    "mode": "passthrough"
  },
  "applyTo": [
    { "app": "codex", "preferredModel": "gpt-5.4" },
    { "app": "claude", "preferredModel": "claude-sonnet-4-5" },
    { "app": "opencode" }
  ],
  "enabled": true,
  "requires": []
}

预览页会遮罩 API Key,用户可以在导入前显示或替换。CLI 无法暂停并等待桌面表单输入,因此 通过 CLI 导入时必须提供 apiKey

Manifest 字段

字段 必填 含义
schema 必须为 io.ochub.model-provider/v1
name 模型供应商及其生成接口的显示名称
apiKey 一键导入时必填 由所有 Endpoint 生成的 Channel 共用
dialects 供应商接口:messagesresponseschat 中的一种或多种
models 供应商提供的模型,最多 500 个且不能重复;留空表示任意模型
websocketEnabled 所有 Endpoint 共用的原生 Responses WebSocket 能力;默认为 false
endpoints 一至八个上游 API Endpoint
source 稳定来源 ID,以及可选的版本和官网元数据
website 供应商官网;与 source.website 同时存在时优先使用
defaultModel 请求没有命中规则时使用的默认上游模型
modelRules 客户端模型改写和可选接口规则
reasoning 思考参数处理方式;默认原样传递
applyTo 用户确认导入后,要配置此供应商的工具列表
enabled 供应商和 Channel 的初始状态;默认为 true
requires 预留能力列表;当前必须为空

每个 Endpoint 支持:

字段 必填 含义
baseUrl 含 Host、不内嵌凭据的 HTTP 或 HTTPS 基础地址

每个 Endpoint 只接受 baseUrl。这些地址能力等价,按数组顺序故障切换,并共用供应商 API Key、接口、模型和 WebSocket 能力。websocketEnabled: true 要求启用 responses,并表示所有故障切换地址都原生支持 Responses WebSocket;能力不同的地址 应定义为不同供应商。

OcHub 内部会为每个 Endpoint 和 Dialect 组合创建一个 Channel。一个 Manifest 最多包含 8 个 Endpoint 和 100 条模型规则;单个字符串最大为 4 KiB。重复的供应商 Dialect、 模型或 Endpoint 地址会被拒绝。

应用目标

每个 applyTo 项包含 app 和可选的 preferredModel。支持的应用值为 claudeclaude-desktopcodexgrokbuildopencodeopenclawhermes;同一应用只能出现一次。 供应商 models 非空时,preferredModel 必须匹配其中一个精确名称或通配规则。供应商 必须包含与每个目标兼容的接口;applyTo 非空时,enabled 必须为 true

桌面预览默认启用 Manifest 请求的所有目标,用户可在确认前取消目标或修改默认模型。 确认后,OcHub 会导入供应商、启动本地 Gateway,并在每个选中工具中创建或切换到由 OcHub 管理的供应商。上游 API Key 只保存在 OcHub;工具配置只接收本地 Gateway 地址 和独立的本地密钥。某个目标失败时,供应商和其他成功目标会保留,并明确报告失败工具。

ochcli deeplink import 没有确认界面,会在导入供应商后立即应用所有 applyTo 目标。 成功结果包含 appliedToapplyFailures;任一目标失败时,命令会返回包含相同详情的 部分失败错误。

思考配置

省略 reasoning 等价于:

{
  "reasoning": {
    "mode": "passthrough"
  }
}

支持以下模式:

模式 行为
passthrough 尽可能保留客户端传入的思考字段
auto 在不同接口的思考强度和 Token 预算之间转换
disabled 转发前移除或关闭思考字段

自动映射可以携带明确预算:

{
  "reasoning": {
    "mode": "auto",
    "lowBudget": 4096,
    "mediumBudget": 10000,
    "highBudget": 16000,
    "maxBudget": 32000
  }
}

预算必须为正数,并满足 lowBudget ≤ mediumBudget ≤ highBudget ≤ maxBudget。默认值依次为 4096、10000、 16000 和 32000。用户仍可以在导入预览中修改模式和预算。

生成链接

Node.js:

const manifest = {
  schema: "io.ochub.model-provider/v1",
  name: "Aster API",
  apiKey: "sk-user-secret",
  dialects: ["messages", "responses"],
  models: ["claude-sonnet-4-5", "gpt-5.4"],
  websocketEnabled: true,
  applyTo: [
    { app: "codex", preferredModel: "gpt-5.4" }
  ],
  endpoints: [
    {
      baseUrl: "https://api.aster.example"
    }
  ]
};

const payload = Buffer.from(
  JSON.stringify(manifest),
  "utf8"
).toString("base64url");

const url =
  `ochub://v1/import?resource=model-provider&payload=${payload}`;

浏览器 JavaScript:

function encodeBase64Url(value) {
  const bytes = new TextEncoder().encode(JSON.stringify(value));
  let binary = "";
  for (const byte of bytes) binary += String.fromCharCode(byte);
  return btoa(binary)
    .replaceAll("+", "-")
    .replaceAll("/", "_")
    .replace(/=+$/, "");
}

const payload = encodeBase64Url(manifest);
const url =
  `ochub://v1/import?resource=model-provider&payload=${payload}`;

可以把生成的 URL 用作“导入 OcHub”按钮的目标地址。公开网站只能在用户完成身份认证后生成 个人链接,并应明确提示链接中包含用户的 API Key。

校验与测试

只解析和校验,不写入:

ochcli deeplink parse "$URL"

从自动化流程预演写入:

ochcli --dry-run deeplink import "$URL"

跳过桌面确认并直接写入:

ochcli deeplink import "$URL"

解析和演练输出默认会脱敏。不要在日志、CI 和共享终端中使用 --show-secrets。 非演练导入还会立即应用所有 applyTo 目标。

在 macOS 上测试桌面端:

open "$URL"

需要分别验证冷启动和应用已运行时的链接传递。桌面预览可以取消,取消后数据库不会变化。

其他资源类型

同一个协议外壳也支持现有资源:

Resource 必填参数 用途
provider appname 给一个应用导入直接连接
mcp appsconfig 将 Base64 编码的 MCP JSON 导入一个或多个应用
skill repo 从 GitHub owner/name 仓库导入技能

providerapp 可为 claude|codex|grokbuild|opencode|openclaw|hermes,还支持 可选的 homepageendpointapiKeymodelnotes、角色模型字段、配置字段 和用量查询字段。mcp.apps 是逗号分隔列表,config 使用此资源原有的 Base64 编码。 skill 还支持 directorybranch

新的本地网关集成应始终使用 model-provider 及其带版本 Manifest,不要拼接直接连接 provider URL。

安全与错误

Base64URL 只是编码,不是加密。拿到链接的人可以还原 API Key,因此完整 URL 应与 API Key 采用相同的保护级别:

  • 不要把它写入分析系统、Referrer 日志、问题追踪、聊天或源代码。
  • 按需生成链接,并且只向已经认证的 Key 所有者展示。
  • 链接泄露后立即在供应商后台轮换 API Key。
  • 不要记录原始 URL 或解码后的 Payload。

Scheme、协议版本、路径、Schema、Base64URL、JSON、URL、Dialect、重复字段或长度限制 不合法,以及 requires 包含尚不支持的能力时,OcHub 都会拒绝导入。被拒绝的链接不会写入 不完整的供应商状态。

Navigation

Type to search…

↑↓ navigate↵ selectEsc close