中文EN

dsh-zcode-startplan

model已测通过npmGPL-3.0-or-later

把 ZCode 赠送的免费 plan 接进模型选择器:多账号池轮换、按账号的限流与额度展示、bigmodel/zai 双渠道设备登录。

下载量 / Downloads
1,157
依赖体积 / node_modules
6.01 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-zcode-startplan

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

dsh-zcode-startplan

让 DSH(DeepSeek Harness) 用上 ZCode 赠送的免费 plan

(account:bigmodel-start-plan → https://zcode.z.ai/api/v1/zcode-plan/anthropic)。

  • 多账号池:多账号轮换,面板内一键「使用」切换,账号级限流标记与余额可视化
  • 每账号一个模型栏位(workbuddy 模式):模型选择器里一栏一个账号

(ZCode Start Plan · 主号),栏内模型固定消耗该账号额度(不自动换号),

多会话各吃各的;「统一选号」栏位可在面板一键隐藏/恢复

  • 双渠道登录:bigmodel(智谱开放平台)/ zai(Z.AI),插件详情页内直接发起设备授权
  • 额度可视到到期时间:剩余 / 计划名 / 到期(绝对时间 + 相对时长);

未生效的领取包用条纹条显示「X 起可用 · Y 到期」

  • 面板内领取赠送额度:可领列表 + 一键领取(captcha 一次性、1003 幂等);

captcha 不可用时给「以调试模式重启」按钮,不用手抄 param

  • Web UI 管理面板:挂在官方插件详情页的 plugins.bundle.config 座位,零依赖手写组件
  • 零运行时依赖:协议层移植自 bonus-plan-4-open-zcode,

但形态不同——它做的是 ZCode 插件(本地代理),这里直接实现 ctx.llm 适配器,

选号、captcha、切号、重试全在 DSH 进程内完成

![dsh.so risk](https://www.dsh.so/artifact/dsh-zcode-startplan/)

![npm](https://www.npmjs.com/package/dsh-zcode-startplan)

![license](./LICENSE)

![release](https://github.com/Venshell/dsh-zcode-startplan/releases)

DSH agent-loop
   │ ctx.llm.stream({ provider: 'zcode-start-plan', model: 'GLM-5.3', … })
   ▼
本插件 NativeZcodeStartPlanAdapter
   ├─ 选号:手动顺序,跳过「该模型」当日限流中的账号
   ├─ captcha:默认不带;被 3007 拒了才产出("要了才取"),2 分钟内记住
   ├─ 组 body:官方身份块 + 日期块 + tools 缓存断点(3012 准入的三道闸门)
   ├─ 发车闸门:全局串行 + GLM-5.3 间隔 350ms
   └─ 读首帧:200 但零内容 → 标记该账号×模型 → 换号重试(客户端零 chunk)
   ▼
zcode.z.ai/api/v1/zcode-plan/anthropic/v1/messages(直连)

安装

方式一:插件页直接装(最简单)

DSH Web UI 的插件页支持直接按 npm 包名安装:打开插件管理页 → 安装/添加插件 →

输入 dsh-zcode-startplan → 确认。宿主会自己从 npm 拉取并登记,无需任何命令行。

方式二:npm CLI 安装

包发布在 npm:dsh-zcode-startplan。

# 全局安装后得到 zcode-start-plan 命令(CLI 可独立于 DSH 使用:login / list / status)
npm install -g dsh-zcode-startplan

把它装进 DSH profile:在 DSH 会话里调用官方安装器,target 传 npm 全局包的

实际目录(npm root -g 拼上包名):

$pkgDir = "$(npm root -g)\dsh-zcode-startplan"
# 在 DSH 会话里:plugin_manager install_bundle,target = $pkgDir

方式三:从源码目录

git clone https://github.com/Venshell/dsh-zcode-startplan.git
cd dsh-zcode-startplan

# 1. 放到 plugins 目录
$dst = "$env:USERPROFILE\.dsh\plugins\dsh-zcode-startplan"
robocopy . $dst /E /XD node_modules .git

# 2. 用官方安装器登记 —— 在 DSH 会话里调用 plugin_manager install_bundle,
#    target 传 $dst 的绝对路径

装完后 profile 的 package.json 会自动出现:

{
  "dependencies": { "dsh-zcode-startplan": "link:C:/Users/<you>/.dsh/plugins/dsh-zcode-startplan" },
  "dsh": { "profile": { "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-zcode-startplan"] } }
}
⚠ link: 安装下重启宿主才会加载新的 JS 模块代际(热重载只重建 entry,
不重新 import 已缓存的模块)。另外本插件安装目录若为实体拷贝,改完源码记得
robocopy 同步过去,否则宿主看到的永远是旧代码。

登录账号

方式一(推荐):Web UI 面板。重启宿主后打开 DSH 设置 → 插件 →

ZCode Start Plan 详情页,顶部「添加账号」:渠道下拉选 bigmodel 或 zai →

发起登录 → 浏览器完成授权 → 自动入池。

方式二:CLI(无需 DSH 在跑):

cd <插件目录>
node bin/cli.mjs login                    # 默认渠道 bigmodel(智谱 bigmodel.cn)
node bin/cli.mjs login --channel zai      # zai(Z.AI · z.ai)
node bin/cli.mjs list                     # 账号列表(脱敏,含来源渠道)
node bin/cli.mjs status                   # 账号 + 余额 + 上游模型目录 + captcha 配置

两条渠道协议完全相同(同一个 /api/v1/oauth/cli/init 与 poll/{id}),

只在 provider(bigmodel / zai)与授权站点上不同。

已有 JWT 时可导入:

node bin/cli.mjs import .\zcode-jwt.txt --name <备注>
账号库在 %USERPROFILE%\.dsh\zcode-start-plan\accounts.db(SQLite,600)。
目录不可写时降级为内存库并在日志里明确告警。

Web UI 管理面板

插件详情页的「账号池管理」块(plugins.bundle.config 座位,按包名 key 派发):

  • 账号列表:状态点、昵称(点击原位改名)、渠道(bigmodel / zai)、限流 chips、余额条
  • 使用:把该账号置顶 —— 池子的约定是手动顺序即选号优先级,置顶即

「下一次请求用它」;使用中的账号显示「使用中」并高亮

  • 删除:二次确认后删除
  • 显示在模型列表:每栏最右的开关控制该账号(及「统一选号」栏)是否出现在

模型选择器里。三颗开关(各账号栏 + 统一选号行)在视觉上对齐同一条竖线

(卡片栏距卡片边框 26px,统一行补 13px 内边距拉齐);tooltip 由动态文案改为

固定 aria-label「在模型列表中显示这一栏」,读屏/键盘行为一致

  • 刷新:一个按钮搞定(列表+余额一次并行拉全)
  • 额度条:已生效与未生效同形状,一句话同时给出剩余、计划名与到期时间

(绝对时间 + 相对时长,如 剩余 4298278/8000000 · GLM-5.3 · 23:59 到期(1 小时 20 分后));

未生效的领取包用条纹 + 半透明并写 23:00 起可用 · 10/27 09:00 到期,

不会被误看成「现在就能用的满格」

  • 赠送额度领取:底部「赠送额度」区,按需展开(点「查看可领取」才打上游,

避免常驻轮询)。每账号一行可领取列表 + 「领取」按钮;captcha 不可用时

就地给出「以调试模式重启」

  • 安全:面板与宿主之间走同源 fetch + loopback 路由,凭据永不出网关;

登录授权的 flowSecret 只留在宿主内存

赠送额度(领取)

GET /api/zcode-start-plan/claimable?id= → 先补活跃上报(不补则 preview 恒空),

再查可领列表;POST /api/zcode-start-plan/claim {id, planId?} → 逐 plan 领取。

三条来自上游实测的硬约束:

约束 · 违反后果 · 实现

captcha 一次性 · 复用同一个 param 必得 3007 · 每个 plan 循环内重新 mint

1003 = 已领过 · 报红让用户以为失败 · 视为幂等成功(标 alreadyClaimed)

mint 失败不能重试 · 连环重试烧设备信誉(有冷却惩罚) · 立刻停,且根本不发 claim 请求

⚠ captcha 复用 ZcodePlanClient.mintCaptcha(同一份串行队列)而不是另起一个 minter:

产出是设备级的,面板点击与推理链路同时要会互相踩 CDP 页面。

未生效的额度在 billing/balance 的 plans[].entitlements[] 里(带 effective_at),

不在 balances[] —— 只看后者会把「23 点才生效的包」显示成 0/0,看起来像领取失败。

在 DSH 里使用

1. 模型选择器里每个启用账号都是独立一栏:**「ZCode Start Plan · 主号」→

GLM-5.3 / GLM-5.3-Flash** —— 栏内模型固定消耗该账号的额度(额度尽明确报错,

不自动换号),多会话可各选各的账号栏

  • 「ZCode Start Plan」统一栏位按置顶顺序自动选号;不需要时可在插件面板

「隐藏统一选号栏位」,随时可恢复

2. 会话里说「看一下 zcode start plan 的状态」→ 触发 zcode_start_plan_status

(返回路由、模型、账号数、每账号的限流标记、captcha 可达性、诊断字段

adapterRegistered / error)

captcha 需要宿主 Electron 的调试端口

先澄清一个高频误解:这个调试端口日常调用模型不需要。
captcha 在推理链路里是按需触发的 —— 只有被上游 3007 拒过、且在该
账号×模型的 2 分钟记忆窗口内,才会去产出一次。实测 captcha.reachable=false
且 captchaRequiredAccounts=0 时,对话完全正常。
只有「领取赠送额度」是硬性要求(claim 接口强制带 captcha 头,每个 plan 一个)。

captcha 是阿里云网页 SDK,必须在真实 https origin 里跑。插件通过 CDP 在宿主

renderer 里挂一个离屏隐藏 iframe(opacity:0、pointer-events:none、只增删自己的

元素、用完即移除),不碰界面。

打包态默认不开调试端口。三种开启方式,任选其一:

1. 面板按钮(最省事):插件详情页的「赠送额度」区,captcha 不可用时会直接出现

「以调试模式重启」,点一下 → 宿主带参数自动重开;脚本带

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:4,最后更新 2026-10-26

链接

GitHub · Homepage · npm

同类插件