DSH Plugins Marketplace

DSH Plugins

Plugins

/

dsh-zcode-plan-bridge

t

dsh-zcode-plan-bridge

Manifest valid

DSH plugin: reverse-proxies model requests through the ZCode client app-server to the Start Plan quota (GLM series, true streaming). A fork of kyle123740/dsh-zcode-cli-proxy, with GLM-5.3 added to the default list.

hasBundlePatchMachine translated

dsh-zcode cli反代(dsh-zcode-cli-proxy)

把 DeepSeek Harness(DSH) 的模型请求转交给 ZCode 客户端自带的 agent 执行的本地插件: provider zcode-cli 走 GUI 同款的常驻 app-server 会话,插件把 ZCode Start Plan 账户注入 agent 并在每次请求前提供 OAuth 鉴权 —— 直接烧 ZCode Start Plan / Coding Plan 的额度, 无需任何 API Key,也不需要自建网关。

本仓库:https://github.com/tangyixiao/dsh-zcode-cli-proxy · 上游原版:https://github.com/kyle123740/dsh-zcode-cli-proxy(AGPL-3.0)

本仓库与上游的差异(v0.3.2):默认模型清单补上 GLM-5.3(上游 0.3.1 只有 GLM-5.3-Flash)。 上游 START_PLAN_MODELS 与 DEFAULT_CLI_MODELS 都照抄了 Start Plan 的静态 builtinModelIds,而那份静态声明漏了 GLM-5.3 —— 但 Start Plan 权益快照 (ent_2_0817_glm_5p3,3000000 tokens/日)服务端确实下发它,ZCode GUI 自己就在 account:zai-start-plan 上跑 GLM-5.3。除这一项外代码与上游一致,通道逻辑、 回合锁自愈、协议逆向结论均来自上游,版权归上游作者。 详见下文「GLM-5.3 为什么不在默认清单里」。

原 zcode2api 网关已移除(2026-09-30):本插件最初是 liu5269/zcode2api(ZCode 额度 → Anthropic Messages API 网关 + 账号池)的 DSH 集成。网关、账号池工具与一次性 CLI 通道已从本插件删除; 需要那些功能的请直接使用原版 zcode2api。

DSH Agent ──► provider "zcode-cli" ──► ZcodeAppServerAdapter
                                            │  spawn zcode.cjs app-server --stdio(常驻)
                                            ├─ provider/updateAccountConfig   注入 Start Plan 账户
                                            ├─ session/setModel               切到 Start Plan
                                            ├─ session/send                   发回合(真流式)
                                            └─ interaction/requestProviderRuntimeHeaders  回 OAuth 鉴权
                                                  └──► zcode.z.ai/api/v1/zcode-plan/anthropic

用法

DSH 设置 → 模型(Models)→ 提供方 ZCode Start Plan(客户端反代) → 模型 GLM-5.3-Flash (ZCode CLI) 或 GLM-5.3 (ZCode CLI)。 选中后 DSH 的模型请求会交给常驻的 ZCode app-server 执行,烧的是你 ZCode 账号的 Start Plan 额度 (执行渠道实测为 account:zai-start-plan/GLM-5.3-Flash @ https://zcode.z.ai/api/v1/zcode-plan/anthropic; GLM-5.3 走同一个 provider,modelId 换成 GLM-5.3)。

  • 真流式(text/reasoning delta 直接转发)、工具调用、图片输入(图片以本地文件随消息附上,agent 用 Read 读图)
  • 多轮会话按 DSH 的 sessionId 复用 app-server 会话
  • 会话标题这类辅助调用在本地生成,不消耗额度
  • 前置条件:本机装着 ZCode 客户端(自动探测 %LOCALAPPDATA%\Programs\ZCode\resources\glm\zcode.cjs), 且客户端已登录拥有 Start Plan 额度的账号

安全须知(装之前必读)

这个「模型提供方」的真身是一个以你当前用户权限运行、且带全套工具执行能力的 agent:

  • 插件建会话时把权限模式切到 yolo,并对 agent 的每一次 interaction/requestPermission 自动回 allow —— agent 执行 Bash、读写文件、联网等操作不会弹任何确认。
  • agent 的输入是 DSH 拍平后的整段对话(含网页抓取、工具结果等外部内容)。这些内容里若被 塞入注入指令,agent 可能据此执行命令 —— 请只在可信场景使用,不要把不可信网页内容喂进 挂着本插件的会话。
  • 子进程环境变量按白名单透传(系统基础变量、ZCODE_*、NODE_EXTRA_CA_CERTS),不继承 DSH 宿主的全部 env;确有需要可用配置项 childEnvAllow 追加变量名。
  • 鉴权 token(zcodejwttoken)只经本机 stdio JSON-RPC 交给 agent 进程,不发往任何第三方。

通道原理(2026-09-30 逆向打通,全部实测)

  1. spawn zcode app-server 时按 GUI 同款设置 ZCODE_APP_VERSION / ZCODE_BUILTIN_PROVIDER_CONFIG_FILE / ZCODE_PERSONAL_PROVIDER_CONFIG_FILE / ZCODE_BASE_URL(否则 CLI 落在 0.0.0-dev 目录,注入对不上);
  2. provider/updateAccountConfig 注入 account:zai-start-plan(entitled)。关键坑: basedOnZCodeBuiltinRevision 必须逐字符等于 configSource 的 zcode-builtin:<revision>:<sha256(activeFilePath)>,否则 registry 合并循环静默跳过(不报错);
  3. session/setModel(0.16.9 起要求对象式 {providerId, modelId, options:{reasoningLevel}},level 必填,GUI 用 max);
  4. agent 发模型请求前回调 interaction/requestProviderRuntimeHeaders 要鉴权 —— 回共享凭证里的 zcodejwttoken(oauth:zai:access_token 已过期,回它上游 401)。agent 自己算 coding-plan 请求签名,能过 WAF;
  5. session/event 的事件类型在 params.type 顶层(不是 payload.type),turn.failed 也要处理, replayState 里不能有 undefined 字段(lossless JSON 校验会炸)。

HTTP 直连计划端点会被阿里云无痕验证拦(3007/3012)——只有 agent 二进制自己发的签名请求能过, 所以「反代」的形态是托管 agent 进程而不是自建 HTTP 网关。

回合锁与自愈

app-server 一个会话同时只允许一个在途回合。上一轮被中止 / 超时 / 静默丢弃时它不会自己释放, 下一轮 session/send 就被拒成 A prompt is already running for this session(DSH 里显示成 「本轮运行失败 · PROVIDER」,因为文案是逐字透传上游的 JSON-RPC 错误)。通道层做六件事兜底:

  1. 补发 session/stop:本轮只要没正常结束(超时 / 被中止 / 发送失败 / turn.failed), 生成器 finally 一定补一刀,不把锁留给下一轮;
  2. 撞锁自愈:send 被回「already running」→ 补 stop → 等 1.5s → 原会话重试一次; 被回「session … not found」(会话被回收 / 进程重启)→ 丢弃缓存条目、新建会话, firstTurn 语义自动重放整段对话,历史不丢;
  3. 回合串行化:同一 DSH 会话的两轮排队跑(最多等 60s,超时放行交给 2 处理), 并发请求不再直接撞错;
  4. 进程退出即作废 + 快败:app-server 子进程退出(含 spawn 失败)时清空会话映射, 避免下一轮拿悬空 sessionId 去发;在途的流会立刻收到一个回合失败收尾, 不用干等回合超时(默认 15 分钟);spawn 的 error 事件也接住了,不会打挂宿主。
  5. 会话分叉检测:每轮 send 都记录当时的消息列表指纹;下一轮续接前先比对前缀, DSH 侧编辑 / 回退过历史就重建会话、按首轮语义重放新分支,避免模型看着旧历史答新问题。
  6. 模型映射:DSH 选中的模型 id 经 cliModels[].startPlanModelId 映射到真实的 Start Plan 执行模型;同一会话中途换模型时在原会话上重发 session/setModel。 回归验证(不需要真 ZCode 客户端与额度,跑的是假 app-server):
node test\turn-lock.mjs        # 撞锁自愈 / 串行化 / 中止补刀 / 重启作废 / 会话失效重放 / 退出快败 / 分叉重建

配置(设置 → 插件)

字段默认说明
enabledtrue总开关
zcodeCliPath自动探测ZCode 客户端自带的 zcode.cjs 路径
zcodeCliNodenode运行 zcode.cjs 的 node 可执行文件
cliModelsglm-5.3-flash + glm-5.3provider zcode-cli 暴露给 DSH 的模型清单;startPlanModelId 字段把条目映射到真实的 Start Plan 执行模型(缺省 GLM-5.3-Flash)。只想保留 Flash 一条就把这个数组覆盖成单条目
cliCwd空app-server 会话的工作目录;留空 = 用户主目录
injectStartPlanAccounttrue把 Start Plan 账户注入 agent(GUI 同款)
zcodeDataBaseDir空ZCode 共享凭证目录(读 zcodejwttoken);留空 = 用户主目录
childEnvAllow[]额外透传给 app-server 子进程的环境变量名(默认只透传系统基础变量、ZCODE_* 与 NODE_EXTRA_CA_CERTS)
appServerTimeoutMs120000app-server 单次请求超时(毫秒)
zcodeCliTimeoutMs900000app-server 单回合超时(毫秒)

开发:改了代码怎么生效

桌面版(C:\Users\zy\.dsh\profiles\desktop,bundle 以 link: 挂载): 没有热重载,改完 lib\*.js 后重启 DeepSeek Harness 即生效。

网页版 / file:// 装配:DSH 的 loader 只在行 name 变化时重新 import 插件模块, 而 Node ESM 以完整 URL(含查询串)为缓存键。仓库里的 cordis.patch.yml 写的是包名 dsh-zcode-cli-proxy(npm / link: 装配的正确形态);本地目录式开发装配时把它换成 file:// URL 加 ?v=N:

# cordis.patch.yml(仅本地开发,勿提交)
- insert:
    - id: dsh-zcode-cli-proxy
      name: 'file:///E:/ai/dsh/plugins/dsh-zcode-cli-proxy/lib/index.js?v=N'

改完 lib\*.js 后:把 ?v=N 递增,然后在插件管理里对 bundle 禁用 → 启用(或重启 DSH),新代码即生效。 (重启 DSH 永远有效;忘记 bump 版本号则只会重跑旧代码。)

目录结构

lib/index.js        插件装配:Config schema、provider 注册
lib/app-server.js   app-server 通道:JSON-RPC 客户端 + LlmAdapter(Start Plan 注入/鉴权/事件流)
lib/messages.js     共用消息工具:图片落盘、对话拍平
lib/credentials.js  解密 ~/.zcode/v2/credentials.json,取 Start Plan token
scripts/            Start Plan 通道的逆向探测脚本(probe-*.cjs)
test/               app-server 通道与凭证解密的验证脚本
                    turn-lock.mjs + fake-app-server.cjs:回合锁自愈的回归测试

GLM-5.3 为什么不在上游默认清单里

上游 0.3.1 只暴露 GLM-5.3-Flash,因为 Start Plan 的模型清单在两处都是照抄 ZCode 自带的静态声明:

  • lib/app-server.js 的 START_PLAN_MODELS(注入 builtinModelIds 用)
  • lib/index.js 的 DEFAULT_CLI_MODELS(DSH 模型列表用)

而 ~/.zcode/v2/runtime/provider/…/zcode-builtin.json 里 account:zai-start-plan 的 静态 builtinModelIds 只有 ["GLM-5.3-Flash","GLM-5.2","GLM-5-Turbo"] —— GLM-5.3 缺席。 GLM-5.3 在静态声明里只属于 coding-plan 渠道。

但那是静态声明,不是服务端权益。ZCode 客户端日志里的 Start Plan 权益快照显示:

plan          zcode-v3-start-plan-0817「ZCode Start Plan」 status=active
entitlements  ent_2_0817_glm_5p3  show_name=GLM-5.3
              capabilities=["model:glm-5.3"]  grant_units=3000000  period=daily
              ent_2_0817_glm_5p3f GLM-5.3-Flash 5000000/日

也就是说 Start Plan 账号每天有 3000000 tokens 的 GLM-5.3 额度,且 ZCode GUI 自己就在 account:zai-start-plan 上跑 GLM-5.3(日志 provider/model 就绪 … {"modelId":"GLM-5.3", "providerId":"account:zai-start-plan"})。实测确认:

  • setModel {providerId:"account:zai-start-plan", modelId:"GLM-5.3"} 返回 ok,回合正常完成;
  • ZCode CLI 的 rollout 日志 model-io-*.jsonl 记录 modelId: GLM-5.3, providerId: account:zai-start-plan;
  • 权益账本里 ent_2_0817_glm_5p3 的 used_units 从 0 涨到 28355,正是那次探针的 token 数。

所以本仓库把 START_PLAN_MODELS 与 DEFAULT_CLI_MODELS 都补上 GLM-5.3。 injections builtinModelIds 比静态声明多这一项不会破坏 registry 合并(合并是叠加,不是替换), 反而让 setModel GLM-5.3 不再被降级。

你的账号若确实没有 GLM-5.3 权益(例如 Start Plan 已过期),setModel 会失败并降级到 会话默认模型,插件记 warn;把 cliModels 覆盖成只有 glm-5.3-flash 一条即可。

许可

AGPL-3.0。本仓库是 kyle123740/dsh-zcode-cli-proxy 的衍生版,仅默认模型清单补了 GLM-5.3;app-server 通道实现独立于上游,仅将 liu5269/zcode2api 作为历史来源致谢; 上游代码已不再随本仓库分发,其本身遵循 AGPL-3.0,仅限学习、研究、个人实验用途。

Comments

Loading…

Similar plugins

dsh-zcode-cli-proxy

dsh-zcode cli反代 —— 把 ZCode CLI(客户端 agent)接入 DeepSeek Harness:app-server 常驻通道、Start Plan 额度直连、真流式、图片输入、工具委派

Models & ProvidersManifest valid

★ 0

AGPL-3.0

JavaScript

dsh plugin --profile web add dsh-zcode2api

by sxy-kumako

DSH 插件:模型列表跟随 provider API 实时更新 + 各 provider 用量徽标 (GLM/MiniMax coding plan, DeepSeek/OpenRouter/Kimi balance)

Development & InfrastructureManifest valid

★ 0

MIT

JavaScript

Sep 4, 2026

dsh plugin --profile web add dsh-better-model-select

by Ztyss

全量接管模型服务,并提供直观的配置方式与额度显示

Development & InfrastructureModels & ProvidersManifest valid

★ 1

MIT

JavaScript

Oct 12, 2026

dsh plugin --profile web add @ztyss/dsh-llm-provider

by AnLifeX

DeepSeek Harness(dsh web)额度插件:跟随当前模型显示官方余额或 OpenCode Go 订阅用量,支持本会话估算、跨会话累计消耗与可视化设置。

Terminal & ClientsManifest valid

★ 3

↓ 534/wk

MIT

JavaScript

Oct 10, 2026

dsh plugin --profile web add dsh-credits

by EDDY597

DeepSeek Harness (DSH) 插件:把本机 opencode 生态接入 DSH 模型菜单——OpenCode Go 订阅(经 opencode-api-plugin 网关)+ Zen 免费档(内嵌 opencode2api,无需网关运行)

Terminal & ClientsManifest valid

★ 0

JavaScript

Oct 17, 2026

dsh plugin --profile web add dsh-opencode-gateway

by Ayle5678

一款DSH (DeepSeek Harness) 插件:类似 Claude Code 中 Auto Mode 的一种命令通过机制,给 dsh中的full access 加一层 LLM 安全网的自动审批插件。

Manifest valid

★ 0

MIT

TypeScript

Aug 26, 2026

dsh plugin --profile web add dsh-auto-guard