openpencil
ZSeven-W
The world's first open-source AI-native vector design tool and the first to feature concurrent Agent Teams. Design-as-Code. Turn prompts into UI directly on the live canvas. A modern alternative to Pencil.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:HeWhenJay/dsh-provider-hub
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
@hewhenjay/dsh-provider-hub 是面向 DeepSeek Harness(DSH)的独立本地模型服务中心。它把 API Key 渠道、OpenAI-compatible 中转站和 Codex / Claude / Gemini 官方账号放进同一套路由、故障切换与日志界面中。
安装 Provider Hub 不要求安装 Cockpit Desktop,也不会读取、停止或接管已有 Cockpit 服务。官方账号能力由插件自行管理的 loopback sidecar 提供;sidecar 使用上游 CLIProxyAPI 的固定版本,并在首次安装时校验官方 SHA-256。

页面顶部显示实际 Relay 地址、运行状态和 DSH 供应商同步状态;下方可在 供应商、官方账号 和 日志 之间切换。
Provider Hub 可以同时代理多个 API 提供商、同一地址下的多个 API Key,以及每个 Key 支持的多个模型。适合把免费额度、活动额度或低成本渠道放在前面持续使用,同时保留一个稳定渠道作为最后兜底:
408、409、425、429、5xx 等瞬时故障时,当前渠道会进入冷却,Provider Hub 自动尝试下一个匹配模型的 Key。故障切换无法保证第三方服务永不失败,但可以消除单一提供商或单一 Key 故障这一处明显单点。请遵守各 API 提供商的服务条款、限流政策和合理使用规则。
渠道保存或官方账号发现新模型后,Provider Hub 会自动调用 DSH 的联网检索服务,并使用 Provider Hub 中第一个已配置 API Key 的第一个可用文本模型处理证据;生图、音频、嵌入、重排等模型会自动排除。若没有可用的 Provider Hub 文本模型,才回退到 DSH 当前默认模型。用户也可以在 模型规格 页选择具体 API Key 渠道与文本模型,并点击 一键填写规格。插件分别检索上下文、最大输出和思考档位,并把 DSH 搜索提供方返回的真实引用摘录标记为 search-citation 证据;对可直接访问的 HTTPS 来源还会在公网地址校验(含压缩/展开 IPv4-mapped IPv6 的数值规范化)、固定 DNS 解析、禁止重定向、端到端硬截止与大小限制下读取页面正文并标记为 page-content。URL、标题和抓取失败状态本身不能证明任何字段,私网或不安全来源会被直接淘汰。资料来源采用“厂商官方优先、平台官方补充、社区共识兜底”:
每个字段由所选 LLM 根据联网搜索和可读取来源整理;查到多少填写多少,部分结果允许保存并标记为“LLM 查询结果(可编辑)”。系统只做基础格式、数值和模型身份检查,不再要求同一句证据、多个社区域名一致或所有字段同时被官方证明。来源仍会展示供用户复核和手动修改;私网/不安全来源、密钥和凭据不会进入查询。上下文窗口区分“最大支持窗口”和“推荐运行窗口”:如果来源只证明最大值,Provider Hub 默认取最大值的四分之一作为压缩窗口,避免把 1M 上限直接当作实际运行窗口;若来源明确给出推荐值则优先使用推荐值。模型规格页会明确显示本次使用的 API Key 名称、渠道与文本模型,并按字段标注“厂商官方证据”“平台官方证据”或“社区共识”。配置页会逐模型展示已填写字段、待补全字段、实际支撑来源和失败原因;页面始终提供 一键填写规格 按钮,用户可随时重新检索并刷新已填写字段。验证通过的内容会热同步到 DSH 自动管理的 provider-hub 模型供应商,无需为单次补全重启 Web。

/models。/v1/models、/v1/chat/completions、/v1/responses。provider-hub 供应商,并同步每个 Key 白名单过滤后的聚合模型目录。Provider-Hub- 开头的 Relay 客户端 API Key,一次性展示给用户复制;实际密钥写入 DSH credentials,JSON 配置仅保存凭据引用,用户可在服务设置中替换。purpose: model-spec-research,并记录其路由 Key、模型、状态、Token、思考程度、耗时和费用,但不记录研究提示词或完整响应。Provider Hub 为每次请求生成自己的 UUID(不持久化调用方 X-Request-ID),逐次尝试展示请求 ID、Key 名称、模型与上游模型、协议、重试、HTTP 状态、finish reason、输入/缓存/输出/推理/总 Token、首 Token 与完整耗时。客户端断开会取消上游请求并标记失败,Relay 遵守写入背压;合法的多行 SSE 事件也能正确解析 usage。Token 优先采用供应商 usage,部分 usage 帧只覆盖实际存在的字段,不会清除早先记录;缺失时明确标记本地估算;费用优先采用供应商报告,其次按渠道配置的每百万 Token 单价估算,再其次使用模型规格研究得到的官方参考价;来源分别标记为 provider-reported、route-pricing、model-spec-pricing;只有本次实际使用的普通输入、缓存输入、普通输出和推理 Token 类别都存在明确单价时才计算总费用,任一实际类别缺价就显示“未配置”,绝不把未知价格默认为免费。Anthropic 风格的 cache_read_input_tokens 作为附加输入累计,而不是误当成 input_tokens 的子集。日志不记录提示词、完整响应、密钥、凭据引用或完整上游 URL。
要求:DSH 0.1.0-rc.6 或兼容版本、Node.js 20+,以及首次安装内置账号服务时可访问 GitHub Releases。
从 GitHub tag 安装:
dsh plugin --profile web add github:HeWhenJay/dsh-provider-hub#v0.6.16
也可以下载 GitHub release 中的 hewhenjay-dsh-provider-hub-0.6.16.tgz 后安装:
dsh plugin --profile web add ./hewhenjay-dsh-provider-hub-0.6.16.tgz
npm 包名已预留为 @hewhenjay/dsh-provider-hub,但 v0.6.16 当前以 GitHub tag 和 release 资产为正式发布渠道。Host 与 Web Client 通常在下次安全重启 dsh web 后加载。不要为了安装插件停止当前正在承载会话或模型调用的服务;可在方便时重启并刷新 DSH Web 页面。
安装后可从左侧栏上方的 Provider Hub 应用入口进入。它位于任务看板之后,点击后在中间区域打开独立页面;旧的侧栏底部入口和 Settings 页面入口已移除。

全新安装第一次启动 Relay 时,如果 listen.apiKeyEnv 对应凭据不存在,Provider Hub 会生成 Provider-Hub-<安全随机值> 并写入 DSH credentials。独立页面顶部会一次性显示完整 Key:
该 Key 用于访问 Provider Hub 自己的 Relay,不是供应商 API Key。DSH 自动管理的 provider-hub 模型供应商会使用对应凭据引用,不需要把明文复制进配置文件。
安装并安全重启 dsh web 后,按下面两种方式任选一种接入模型。已有 Cockpit 或其他 DSH 供应商不会被关闭或替换。
provider-hub.json。

图中 API Key 保持为空,仅演示安全的字段填写方式。新渠道的默认凭据引用是 DSH_PROVIDER_HUB_<CHANNEL_ID>_KEY:渠道 ID 会转成大写,所有非字母数字字符替换为下划线,例如 openai-official → DSH_PROVIDER_HUB_OPENAI_OFFICIAL_KEY。

账号服务启动后,Provider Hub 会生成一个只存在于运行时的内部渠道。它使用 sidecar 返回的模型目录和账号服务优先级参与统一路由,不会把内部访问密钥返回浏览器,也不会把内部渠道写进 routes 配置。
OAuth 使用官方固定的 localhost 回调端口:
| 供应商 | 回调端口 |
|---|---|
| OpenAI / Codex | 1455 |
| Anthropic / Claude | 54545 |
| Google / Gemini | 8085 |
Provider Hub 只在 127.0.0.1 上临时监听对应端口并校验 OAuth state。若端口已被占用,登录会明确失败;插件不会关闭占用者。释放端口后重新发起登录即可。
渠道保存或官方账号提供新模型列表后,Provider Hub 会自动在后台逐个处理尚未配置的可识别模型;无需用户手动启动:
thinkingFormat 还必须与已识别厂商匹配,否则省略该兼容字段;maxTokens 和 reasoningEfforts 分别验证;只有最大上下文时按最大值四分之一派生推荐压缩窗口,查到的字段写入,没查到的字段保持空白;provider-hub.json,再热同步到自动管理的 llm-pi-ai.providers.provider-hub。任务会静默在 Host 后台运行,页面显示当前模型和进度,可以关闭 Provider Hub 页面后继续使用 DSH。再次打开页面可在 模型规格 区域逐模型查看推荐上下文窗口、最大支持窗口、最大输出窗口、思考程度、待补全字段、厂商/平台官方来源和失败原因。单次最多处理 100 个模型;超长模型 ID、无法识别厂商、没有官方证据或模型输出不符合结构时,对应字段保持空白,插件不会用模型记忆猜测规格。用户可随时点击 一键填写规格 重新检索并刷新字段。渠道删除模型时会清理对应的孤立规格,研究期间被删除的模型不会写回配置。
这项功能会消耗 DSH 联网检索与当前默认模型的调用额度;每个新模型在一次自动补全中只尝试一次,不会因保存或刷新形成无限循环。手动重试由用户明确触发。执行补全和配置热同步本身不需要重启 Web。
保存渠道、完成官方账号登录或自动补全模型规格后,页面顶部会显示 DSH 供应商已同步(N 个模型)。此时打开 DSH 的模型选择器即可看到 Provider Hub 提供的模型,无需再手工创建模型供应商。
如果仍显示“等待可用模型”,请先确认渠道的模型列表不为空,或在 官方账号 标签点击 刷新账号。插件不会自动切换当前会话或默认模型,用户可在模型选择器中自行选择。
Provider Hub 默认在 127.0.0.1:19529 提供统一接口。服务成功启动且聚合目录至少包含一个模型后,插件会通过 DSH 官方 settings 服务自动创建或更新 llm-pi-ai.providers.provider-hub:
/v1/models 目录读取、去重;每个 Key 非空白名单之外的模型不会进入聚合目录,并尽可能保留名称、上下文窗口和最大输出长度;apiKeyEnv,使 llm-pi-ai 能在请求前解析 Relay Key。Relay 的 loopback 兼容规则仍允许受控的本机无 Origin 请求,但 DSH 正常模型调用会携带该 Key;插件只管理 provider-hub 这一条供应商,不修改其他供应商,也不会切换 agent-default-model。如果用户已经手工创建了同名条目,插件会报告冲突并保持原配置不变。旧版本所有权快照仅缺少后来加入的 Relay apiKeyEnv,且当前条目的其他字段逐项完全一致、凭据引用也精确等于当前 Relay 配置时,插件会安全迁移快照;任何其他字段或凭据引用差异仍保持冲突。Relay 停止、禁用或聚合模型为空时,插件只删除经自身确认创建的条目;模型为空时状态显示为等待,不写入 DSH 无法使用的空模型供应商。
实际 Base URL 仍会显示在页面顶部,例如:
http://127.0.0.1:19529/v1
对每次请求,Provider Hub 按以下顺序选择渠道:
modelAllowlist 过滤:空白名单允许该 Key 的全部上游支持模型;非空白名单只接受精确列出的请求模型 ID,模型别名不能绕过白名单。408、409、425、429、500、502、503、504 或连接重置时,将当前 Key 渠道暂时冷却。maxAttempts 范围内尝试后续渠道;相同 Base URL 的另一个 Key 只要是独立渠道且匹配模型,也可成为后续候选。内置官方账号渠道默认优先级为 1000,可在账号服务设置中修改。它与自定义 API 渠道使用相同排序规则。自定义渠道可标记为保底。
模型别名是“Provider Hub 对外模型 ID → 供应商真实模型 ID”的映射,例如:
{
"gpt-main": "vendor-gpt-2026-01"
}
客户端请求 gpt-main 时,该渠道会把模型名改写为 vendor-gpt-2026-01。
Provider Hub 当前固定使用:
router-for-me/CLIProxyAPIv7.2.133checksums.txt,再按精确资源名校验 SHA-256支持 Windows、macOS 和 Linux 的 x64 / arm64。文件位于 $DSH_HOME/provider-hub/sidecar:
provider-hub/sidecar/
├─ auth/ # 官方账号授权文件
├─ bin/7.2.133/ # 已校验的 sidecar 可执行文件
├─ downloads/ # 临时下载目录(成功后清理)
└─ config.yaml # 仅本机配置
安全与生命周期边界:
127.0.0.1;19629,被占用时最多向后搜索 49 个端口;关闭“未安装时自动下载”后,启动缺失的 sidecar 会显示“未安装”,不会访问网络。仍可在页面中手动点击 安装并启动。
默认配置文件是 $DSH_HOME/provider-hub.json。完整示例见 config.example.json:
{
"provider": "provider-hub",
"maxAttempts": 6,
"cooldownMs": 30000,
"sessionAffinity": true,
"listen": {
"enabled": true,
"host": "127.0.0.1",
"port": 19529,
"apiKeyEnv": "DSH_PROVIDER_HUB_CLIENT_KEY"
},
"accountService": {
"enabled": true,
"autoInstall": true,
"port": 19629,
"priority": 1000
},
"managedProvider": {
"enabled": true,
"id": "provider-hub",
"displayName": "Provider Hub"
},
"routes": [
{
"id": "shared-prod",
"displayName": "Shared API",
"keyName": "Production Key",
"baseURL": "https://relay.example/v1",
"api": "openai-completions",
"apiKeyEnv": "DSH_PROVIDER_HUB_SHARED_PROD_KEY",
"priority": 100,
"backup": false,
"models": ["gpt-main", "gpt-fast"],
"modelAllowlist": ["gpt-main"]
},
{
"id": "shared-backup",
"displayName": "Shared API",
"keyName": "Backup Key",
"baseURL": "https://relay.example/v1",
"api": "openai-completions",
"apiKeyEnv": "DSH_PROVIDER_HUB_SHARED_BACKUP_KEY",
"priority": 10,
"backup": true,
"models": ["gpt-main", "gpt-fast"],
"modelAllowlist": []
}
]
}
环境变量 DSH_PROVIDER_HUB_CONFIG 可指定其他配置路径。渠道 ID 必须唯一;Base URL 不要求唯一,因此同一地址可以配置多个使用不同凭据引用的 Key。keyName 是可进入日志的显示名称;modelAllowlist: [] 表示允许该渠道 models 中的全部模型,非空时只发布和路由其中精确列出的模型。
127.0.0.1:19529。127.0.0.1,首选 19629。Provider-Hub- 开头的客户端访问密钥;改为 0.0.0.0 时继续使用该密钥认证。统一 relay:
GET /health
GET /v1/models
POST /v1/chat/completions
POST /v1/responses
DSH Host 管理接口(供插件 Web UI 使用)。GET /logs 返回 { logs, summary }:明细按渠道尝试记录 usage、性能和计费依据;summary 按 Provider Hub 生成的 requestId 聚合客户端请求,同时分别给出请求数、渠道尝试数、故障切换数与失败尝试数。成功/失败和平均耗时按完整客户端请求计算,Token 与费用按所有实际渠道尝试累计,因为失败尝试也可能产生真实用量:
GET /api/provider-hub/state
GET /api/provider-hub/logs
DELETE /api/provider-hub/logs
PUT /api/provider-hub/service
POST /api/provider-hub/models/discover
GET /api/provider-hub/models/research
POST /api/provider-hub/models/research
POST /api/provider-hub/routes
DELETE /api/provider-hub/routes/:id
POST /api/provider-hub/routes/:id/test
GET /api/provider-hub/account-service
PUT /api/provider-hub/account-service
POST /api/provider-hub/account-service/install
POST /api/provider-hub/account-service/start
POST /api/provider-hub/account-service/stop
POST /api/provider-hub/account-service/refresh
POST /api/provider-hub/account-service/oauth/:provider/start
GET /api/provider-hub/account-service/oauth/status?state=...
PATCH /api/provider-hub/account-service/accounts/:id/status
DELETE /api/provider-hub/account-service/accounts/:id
管理响应只返回脱敏状态。sidecar client key、management key、供应商 API Key、OAuth token 和账号文件内容不会返回 Web Client。
v0.3 更名为 DSH Provider Hub,并从“桥接外部 Cockpit”迁移为独立内置账号服务。
$DSH_HOME/provider-hub.json 已存在,直接使用新文件。$DSH_HOME/cockpit-relay.json 存在,读取旧配置、按新结构规范化并写入 provider-hub.json。COCKPIT_RELAY_*)原样保留,因此不会丢失已有 DSH credential。DSH_PROVIDER_HUB_* 命名。/api/cockpit-relay 暂时作为管理 API 兼容别名保留;新 Web Client 只调用 /api/provider-hub。迁移不会修改当前 DSH 默认模型,也不会接管任何已经监听的 Cockpit 端口。Provider Hub 自 v0.4 起只会新增并管理独立的 provider-hub 模型供应商;其他 DSH Models 条目保持不变。
dsh web。provider-hub 条目。插件不会覆盖它;请先在 Models 中改名或删除该条目再刷新 Provider Hub。DSH_PROVIDER_HUB_CLIENT_KEY 凭据。首次自动生成的 Key 可在页面一次性复制,之后也可在服务设置中替换。npm test
npm pack --dry-run
测试覆盖路由优先级、每 Key 模型白名单、同 URL 多 Key、别名绕过防护、保底与冷却、流式响应、端口避让、凭据不落盘、Key 名称日志与脱敏、模型发现、官方来源模型规格补全与拒绝边界、DSH 供应商同步与冲突保护、账号管理契约、OAuth state 限制、sidecar 资源映射与 checksum 解析、打包边界和浏览器模块注册。
Provider Hub 插件代码按仓库 LICENSE(CC BY-NC-SA 4.0)发布。左侧应用入口中的 Network 图标来自 Lucide,按 ISC License 使用。内置账号服务二进制不打进 npm 包;首次使用时从 CLIProxyAPI 官方 Release 下载。CLIProxyAPI 由其作者按 MIT License 发布。使用官方账号、API Key、中转服务和多账号路由时,请遵守对应平台服务条款、账号政策和当地法律。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: oauth、openai-compatible。