dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
DeepSeek Harness desktop plugin: dispatch GLM Coding Plan tasks through the official ZCode CLI (1.5x plan credits, native agent tools, quota-aware auto-routing)
中文 · English · Release notes
买了 GLM Coding Plan,却只在别的客户端里用? 这个 DSH 桌面端插件让那份已付费的套餐额度, 在 DeepSeek Harness 会话里真正发挥作用——把编码重活派给官方 ZCode 通道,享受 **1.5 倍(150%)**额度, 外加原生 Agent 能力(文件 / Bash / MCP)与多轮会话。
合规驱动官方 ZCode 客户端,不修改客户端、不伪造请求、不绕过任何限制。
注册两个工具:
| 工具 | 作用 |
|---|---|
zcode_call | 派一个真实 agent 任务给套餐通道,支持 --resume 多轮续接 |
zcode_quota | 查套餐余量;配合内置闸门做到「余量够才自动派活」 |
先看对比,再决定要不要装 ↓
同一个 GLM Coding Plan 套餐 Key,两种花法,结果差很远。
| 维度 | 直连 API Key(自己调 open.bigmodel.cn/api/anthropic) | 本插件(经 ZCode 官方 CLI) |
|---|---|---|
| 计费口径 | 扣账户余额(按量付费,与套餐无关) | 扣套餐积分(你已付费的订阅额度) |
| ZCode 渠道倍率 | 不适用——非官方指定工具,无倍率概念 | **1.5 倍(150%)**套餐额度消耗 |
| 前置条件 | 任意智谱 API Key 即可 | 需装 ZCode 客户端 + 有 GLM Coding Plan 订阅 |
| Agent 能力 | 纯 LLM 调用,只有模型本身的读写/执行能力 | 原生文件 / Bash / MCP / Hooks,是完整 agent |
| 多轮续接 | 自己实现会话状态,自己管重试与上下文裁剪 | 原生 --resume <sessionId>,客户端负责 |
| 上下文缓存 | 无 | 支持(实测 cacheReadTokens 命中约 13K–68K) |
| 凭证管理 | 你自己在代码里塞 Key | Key 交给官方客户端,本插件只做路由 |
| 可审计性 | 无内建记录 | ZCode 本地 db.sqlite 逐条记录 provider/model/token |
| 故障面 | 自己维护 | 依赖 ZCode 客户端版本(升级可能改 schema) |
更详细的计费与能力矩阵见 docs/comparison.md。
三个都是「是」再往下看安装。
安装 ZCode 官方客户端:https://zcode.z.ai/cn/docs/install
在智谱平台开通 GLM Coding Plan,拿到套餐 API Key。
把 Key 放进 DSH 凭据文件 ~/.dsh/.credentials.yaml 的 refs: 段(插件不附带任何 Key,也没有 Key 就无法工作):
refs:
BIGMODEL_CODING_PLAN_API_KEY: 你的套餐Key
把仓库放到你机器上的任意目录,例如 C:/tools/dsh-zcode-coding-plan。
A) 注册到 DSH profile —— 编辑 ~/.dsh/profiles/desktop/cordis.patch.yml,在顶层列表追加:
- id: zcode-coding-plan
name: dsh-zcode-coding-plan
config:
# 下面三行可以整个省略 —— 插件会自动探测 ZCode 安装位置
# zcodeExe: 'D:/Program Files/ZCode/ZCode.exe'
# zcodeCjs: 'D:/Program Files/ZCode/resources/glm/zcode.cjs'
# builtinProviderConfig: 'D:/Program Files/ZCode/resources/config/provider/zcode-builtin.json'
providerOverride: 'C:/Users/你的用户名/.dsh/zcode-provider-override.json'
defaultMode: yolo
defaultTimeoutMs: 900000
# 余量闸门可选:填脚本路径才有闸门;留空则直接派活(fail-open)
quotaScript: ''
编辑前先备份(
cordis.patch.yml.bak-<用途>-<时间戳>)——运行中的 DSH 可能改写它。
B) 加依赖 —— 在 DSH 应用目录的 package.json 的 dependencies 里追加:
"dsh-zcode-coding-plan": "link:C:/tools/dsh-zcode-coding-plan"
C) 建 junction —— 在 DSH 应用目录执行:
node -e "require('fs').symlinkSync('C:/tools/dsh-zcode-coding-plan', require('path').join(process.cwd(),'node_modules','dsh-zcode-coding-plan'), 'junction')"
用
link:+ junction,不要用cp复制——复制后插件改动不会生效。
cd C:/tools/dsh-zcode-coding-plan
node scripts/generate-override.mjs # 读 ~/.dsh/.credentials.yaml,写 ~/.dsh/zcode-provider-override.json
node scripts/setup-check.mjs # 环境自检,退出码 0 = 就绪
或者用 node scripts/install.mjs 一步打印上面所有片段(含本机探测到的真实路径)。
最后重启 DSH 桌面端。日志里应出现:
[dsh-zcode-coding-plan] tools zcode_call + zcode_quota registered; zcode=… cjs=… override=… probe=windows-paths
跟 agent 这么说就会走本插件:
agent 会先 zcode_quota 查余量,再决定是否 zcode_call 派活。
zcode_call 参数| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
prompt | string | ✅ | 派给 GLM 的任务提示词,写清目标与验收标准 |
cwd | string | 任务工作目录;绝对路径或相对会话目录;省略 = 会话工作目录 | |
resume | string | 上次返回的 sessionId,续接多轮会话 | |
mode | string | build/edit/plan/yolo,默认 yolo(全自动);仅咨询用 plan | |
timeout_ms | number | 子进程超时,默认 900000(15 分钟),钳制到 [30000, 3600000] | |
force | boolean | true 跳过余量闸门强行执行(默认 false,余量不足返回 quota_insufficient) |
返回
{
"sessionId": "sess_…",
"traceId": "…",
"response": "…",
"usage": { "inputTokens": 67512, "outputTokens": 4, "totalTokens": 67516 },
"projection": { "contextWindow": 200000, "contextUsed": 67516 },
"exitCode": 0
}
失败时返回 { error, hint?, timedOut?, timeoutMs?, exitCode?, stderrTail? }。
zcode_quota 参数无参数。返回套餐余量与路由判定:
{
"available": true,
"sufficient": true,
"plan": "pro",
"windowPct": 4.3, "routeWindowPct": 60,
"weekPct": 16.0, "routeWeekPct": 80
}
available:false 表示没配置余量脚本(正常状态,闸门会 fail-open 直接放行)。
1. zcode_call({ "prompt": "在 src/ 下新增一个 Express 服务并写好 README", "cwd": "D:/work/myproj" })
→ response: …, sessionId: "sess_124bfb13-fc98-42c4-8056-f0b3aa584bed"
2. zcode_call({ "prompt": "接着把测试补齐,跑到全绿", "cwd": "D:/work/myproj",
"resume": "sess_124bfb13-fc98-42c4-8056-f0b3aa584bed" })
3. zcode_call({ "prompt": "评估要不要上 gRPC", "cwd": "D:/work/myproj",
"resume": "sess_124bfb13-…", "mode": "plan" }) // 只讨论,不动文件
闸门在派活前跑一次本地余量估算脚本,5h 窗口 < 60% 且本周 < 80% 才放行,否则快速返回 quota_insufficient(不消耗任何额度、不启动子进程)。
默认不启用——发布版不预设任何人的监控脚本路径。配置 quotaScript 才生效;缺失/异常/超时一律 fail-open 放行。
脚本契约(任何满足此约定的程序都可以):
<python> <quotaScript> --json --plan <plan>
→ stdout: {"plan":"pro","window_weighted":5,"window_cap":400,
"week_weighted":308,"weekly_cap":2000}
结果缓存 60 秒,避免一个会话里反复起 python。强制执行用 force: true。
ZCode 把每次调用记在本地 ~/.zcode/cli/db/db.sqlite(约 440MB,务必只读打开):
python -c "
import sqlite3
con = sqlite3.connect('file:' + r'C:\Users\你的用户名\.zcode\cli\db\db.sqlite?mode=ro', uri=True)
for r in con.execute('select session_id, provider_id, model_id, status, input_tokens from model_usage order by rowid desc limit 3'):
print(r)
"
期望 provider_id == 'dsh-glm-coding-plan'、model_id == 'GLM-5.3-Flash'。
如果是别的 provider id,说明覆盖配置没生效(多见于 providerOrder[0] 不是我们)。
本仓库的真实调用记录:
('sess_124bfb13-fc98-42c4-8056-f0b3aa584bed', 'dsh-glm-coding-plan', 'GLM-5.3-Flash', 'completed', 67512)
cordis.patch.yml 的 config: 段,全部可选:
| 键 | 默认 | 说明 |
|---|---|---|
zcodeRoot | 探测 | ZCode 安装根目录 |
zcodeExe / zcodeCjs / builtinProviderConfig | 探测 | 显式指定可跳过探测 |
providerOverride | ~/.dsh/zcode-provider-override.json | 覆盖配置路径(可用 DSH_ZCODE_OVERRIDE 覆盖) |
providerId | dsh-glm-coding-plan | 注入的 provider id |
baseUrl | https://open.bigmodel.cn/api/anthropic | 端点 |
modelIds | ["GLM-5.3-Flash","GLM-5.3"] | 套餐内可用模型 |
contextWindow | 200000 | 写入覆盖配置的上下文窗口 |
defaultMode / defaultTimeoutMs / minTimeoutMs / maxTimeoutMs | yolo / 900000 / 30000 / 3600000 | 调用参数 |
maxStdoutBytes / maxStderrBytes | 16MB / 16KB | 输出上限 |
pythonExe / quotaScript / quotaPlan | python / ``(空) / pro | 余量闸门 |
quotaRouteWindowPct / quotaRouteWeekPct / quotaCacheTtlMs | 60 / 80 / 60000 | 余量闸门阈值与缓存 |
路径解析优先级:插件 config > ZCODE_HOME 环境变量 > 平台探测。
本插件驱动官方 ZCode 客户端,用它已有的 provider 机制把套餐 Key 排在首位,从而让 DSH 的请求走官方的 Coding Plan 渠道。
…/provider_config.json);~/.zcode/v2/credentials.json;官方文档:https://zcode.z.ai/cn/docs
lib/schema.js 会读取其内置 provider 配置,自动检测 personal schema 是否仍兼容,并在生成日志 / node scripts/setup-check.mjs 输出告警——但不会自动适配未知键(那需要重新实测)。看到告警或 Model creation failed 时,按 docs/troubleshooting.md 第 2 节处理。zcodeExe/zcodeCjs。zcode_call 标记为非并发安全,多派活会串行排队——这是刻意为之,避免双倍计费和机器被压垮。npm test # 三套测试,114 断言,零计费(推荐)
npm run check # 环境自检(需要装了 ZCode)
npm run test:smoke -- "回复两个字:就绪" # 真实调用(消耗套餐额度!)
仓库包含一份 CI 配置(Ubuntu + Windows × Node 18/20/22)。测试全部使用 mock spawn,
在 CI 上不会调用 ZCode、不消耗任何额度;真实调用只存在于 npm run test:smoke,刻意不进 CI。
MIT — 见 LICENSE。