🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

智谱免费通道 MYCF711/dsh-free-glm

DeepSeek Harness
MYCF71132 天前有提交已提供中文文档扫描:含敏感能力

免密钥接入 GLM-5.3,支持对话与工具调用

30.9/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/5 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add MYCF711/dsh-free-glm
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · other
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 32 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/31) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-free-glm(未发布到 npm,仅可源码安装)
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/12 15:38:34

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 27 处,展示前 27 条)
  • 写入本地文件
    src/adapter.ts:92
    fs.appendFileSync(path.join(resolveDataBaseDir(), "dsh-role-dist.ndjson"), line);
  • 发起网络请求
    src/adapter.ts:1183
    response = await fetch(`${endpoint.baseUrl}${CHAT_COMPLETIONS_PATH}`, {
  • 发起网络请求
    src/adapter.ts:1718
    fetch(`${endpoint.baseUrl}${CHAT_COMPLETIONS_PATH}`, {
  • 发起网络请求
    src/adapter.ts:1759
    const r = await fetch(`${endpoint.baseUrl}${CHAT_COMPLETIONS_PATH}`, {
  • 读取本地文件
    src/bridge-endpoint.ts:123
    if (existsSync(join(fromEnv, BRIDGE_PORT_FILE_RELATIVE))) {
  • 读取本地文件
    src/bridge-endpoint.ts:134
    if (existsSync(join(candidate, BRIDGE_PORT_FILE_RELATIVE))) {
  • 读取本地文件
    src/bridge-endpoint.ts:159
    if (existsSync(path)) {
  • 读取本地文件
    src/bridge-endpoint.ts:185
    if (!existsSync(filePath)) {
  • 读取本地文件
    src/bridge-endpoint.ts:188
    const parsed = JSON.parse(readFileSync(filePath, "utf8")) as Partial<ZCodeBridgePortFile>;
  • 发起网络请求
    src/bridge-endpoint.ts:395
    const response = await fetch(`${endpoint.baseUrl}/health`, {
  • 发起网络请求
    src/bridge-ops.ts:149
    const response = await fetch(`${endpoint.baseUrl}${path}`, {
  • 发起网络请求
    src/bridge-rpc.ts:222
    async fetch(request: Request): Promise<Response> {
  • 读取本地文件
    src/index.ts:419
    return existsSync(join(dir, ".zcode"));
  • 读取本地文件
    src/index.ts:429
    if (existsSync(candidate)) {
  • 写入本地文件
    src/index.ts:710
    writeFileSync(
  • 执行外部命令固定命令
    src/instance-lifecycle.ts:120
    execFileSync("taskkill", ["/PID", String(pid), "/T", "/F"], {
  • 读取本地文件
    src/instance-lifecycle.ts:174
    if (!existsSync(file)) {
  • 读取本地文件
    src/instance-lifecycle.ts:177
    const parsed = JSON.parse(readFileSync(file, "utf8")) as { instanceId?: unknown };
  • 读取本地文件
    src/instance-lifecycle.ts:188
    if (!existsSync(file)) {
  • 读取本地文件
    src/instance-lifecycle.ts:191
    const parsed = JSON.parse(readFileSync(file, "utf8")) as { instancePid?: unknown };
  • 读取本地文件
    src/instance-lifecycle.ts:209
    if (!existsSync(file)) {
  • 读取本地文件
    src/instance-lifecycle.ts:212
    const parsed = JSON.parse(readFileSync(file, "utf8")) as { port?: unknown };
  • 执行外部命令固定命令
    src/instance-lifecycle.ts:223
    const out = execFileSync("tasklist", ["/FI", `PID eq ${pid}`, "/NH", "/FO", "CSV"], {
  • 执行外部命令固定命令
    src/instance-lifecycle.ts:454
    const out = execFileSync("powershell", ["-NoProfile", "-NonInteractive", "-Command", script], {
  • 执行外部命令固定命令
    src/instance-lifecycle.ts:492
    execFileSync("taskkill", ["/PID", String(pid), "/T", "/F"], {
  • 执行外部命令固定命令
    src/instance-lifecycle.ts:501
    execFileSync("powershell", ["-NoProfile", "-Command", "Start-Sleep -Seconds 3"], {
  • 写入本地文件
    src/instance-lifecycle.ts:614
    appendFileSync(
扫描于 2026/10/31(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-llm@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 免密钥接入GLM-5.3
  • 支持对话
  • 支持工具调用

在 DSH 里免费用 GLM-5.3 —— 把 ZCode 免费额度通道接进 DSH,支持对话与工具调用

README

由 DeepSeek 最新模型翻译生成
dsh-free-glm 在 DSH(DeepSeek Harness)里免费用 GLM-5.3 —— 装完即用,无需 API Key。 把 ZCode 的免费额度通道(account:bigmodel-start-plan)接进 DSH,当成普通模型 provider 使用。支持对话与工具调用。 🎉 2026-09-28 重大突破:3012 根因确定 + 登录/领取全自动化 ① 3012 的真根因:system 身份块(推翻了此前两个错误结论) 此前先后判定过「前缀是判据」和「3012 不可绕过」,都不准确。 实测对照(同账号、同 captcha 来源): | system 内容 | 结果 | | 无 system | 3012 | | 仅调用方 system(2782 字符) | 3012 | | 官方三块身份块(7599 字符) | 200 | 三种客户端(curl / Node 脚本 / 桥)带完整三块时都 200 ⇒ 判据是 system 的内容与结构。 桥现在自动注入官方身份块(zcode-official-identity.ts),调用方无需懂官方 prompt 形态。
展开完整文档(README 剩余 1 节)
dsh-free-glm

在 DSH(DeepSeek Harness)里免费用 GLM-5.3 —— 装完即用,无需 API Key。

把 ZCode 的免费额度通道(account:bigmodel-start-plan)接进 DSH,当成普通模型 provider 使用。支持对话与工具调用。

🎉 2026-09-28 重大突破:3012 根因确定 + 登录/领取全自动化

① 3012 的真根因:system 身份块(推翻了此前两个错误结论)

此前先后判定过「前缀是判据」和「3012 不可绕过」,都不准确。
实测对照(同账号、同 captcha 来源):

| system 内容 | 结果 |
| 无 system | 3012 |
| 仅调用方 system(2782 字符) | 3012 |
| 官方三块身份块(7599 字符) | 200 |

三种客户端(curl / Node 脚本 / 桥)带完整三块时都 200 ⇒ 判据是 system 的内容与结构。

桥现在自动注入官方身份块(zcode-official-identity.ts),调用方无需懂官方 prompt 形态。

② 三个斜杠命令(用户可触发)

| 命令 | 作用 |
| /zcode-login | 登录(弹出浏览器授权页) |
| /zcode-quota | 查额度(剩余 / 到期 / 一次性还是每日) |
| /zcode-claim | 立刻检索并领取派发额度 |

③ 每日额度守卫(后台自动)

每 20 分钟自动:补激活上报 → 查 preview → 领取。
含智能退避(已领取则 hold 到 ends_at;404 走正常节奏不错过开抢)。

关键机制:preview 的内容依赖客户端活跃信号 ——补 POST /api/v1/event/report(app_launch + app_daily_active)之前返回空 plans:[],之后才出现 plan。

④ 性能实测(30 次样本)

ttft: 最小 1.4s / 中位 4.5s / 最大 14.4s 短回答: 2.2s 长回答: 22-62s(∝ 输出量,约 50 delta/s)

对比会话链路 22-28s ⇒ 直发快 3.5-4.6 倍。

⚠ ttft 中位 4.5s 是免费通道的固有成本(官方 API 约 0.3-0.8s),「达到 API 速度」在免费额度上不可达。

⑤ 关于「不依赖外部应用」(重要)

用户视角已成立:插件会自己拉起并保活 ZCode 实例 ——实测杀掉所有实例后 15 秒自愈,用户装完插件无需手动启动任何东西。

但系统视角有一个结构性事实:

| 通道 | 免费额度 | captcha | 结论 |
| zcode.z.ai/api/v1/zcode-plan/anthropic | ✅ 是 | 必需 | 必须依赖壳 |
| open.bigmodel.cn/api/anthropic | ❌ 花自己的钱 | 不需要 | 不是免费 |

⇒ 「免费额度」与「完全不依赖壳」在架构上互斥。
我们选的是「依赖壳,但用户无需管理它」。

⑥ 内存

干净基线 949 MB(配置里 11 个插件已全禁用)。
其中 ~193 MB 是 captcha mint 必需的 agent 进程,无法进一步优化。

效果:

| 路径 | 单步耗时 |
| 快速路径(新,插件 0.3.2+) | 3.6 - 7.3 秒 |
| 旧会话链路 | 8 - 28 秒 |

实测(真实 DSH 会话,三次复验全部通过): tool_call glob({"pattern":"*.ps1","path":"..."}) → 真实执行 tool_result completed "run-cli.ps1\nstart-headless.ps1\n..." text 「找到 3 个 .ps1 文件:...」 → turn_end completed

插件已自动加探针前缀,调用方无需改动任何东西。

⚠ 装完/改了插件必须重启 DSH —— 插件模块在进程启动时读进内存,不重启跑的还是旧代码。
重启后跑 scripts/verify-after-restart.ps1 一键确认(含版本号、启动时间比对、真实会话验证)。

📖 想了解全貌,先读这三份

| 文件 | 内容 |
| PROJECT-MASTER-HANDOFF.md | ★ 总交接 —— 从开工到收尾全貌 |
| LATENCY-FINDINGS.md | ★ 2135 行实测报告(二十五节),含全部证据链 |
| LIMITATIONS.md | 已知限制(每条标注「实测」或「推测」) |

⚠ 先读缺点

这不是一个普通 API 插件。 它建立在上游风控的漏洞上,代价显著:

| 项 | 实测 |
| 速度 | 8-180 秒(中位 15-25 秒)—— 不可能追上原生 API |
| 内存 | 常驻 约 950 MB(Electron 实例,已做插件裁剪) |
| 稳定性 | 上游随时可能改风控堵死;captcha 坏了就整体不可用 |
| 部署 | 需克隆并构建 ZCode 开源版(10-40 分钟) |
| 首次启动 | 约 30 秒后才在模型列表出现 |

完整清单见 LIMITATIONS.md —— 每条都标了「实测」还是「推测」,并给出验证方法。装之前请读它。

如果你只需要稳定与速度,用官方 API。这个方案适合「想在 DSH 里免费用 GLM、且能接受上述代价」的场景。

一句话原理

GLM 的免费额度走 zcode-plan 通道,而这个通道有两道门:

1. 阿里云 captcha —— 每次请求都要带一个验证参数,且只能在真实 Electron renderer 里产出(需要 DOM + 阿里云 CDN 脚本)。
2. 调用路径风控 —— 上游对「这个请求是不是 ZCode 客户端发的」有判定。
裸 HTTP 调用一律返回 3012 unusual activity;只有实例内部的 session 链路能通过(实测对照:界面路径 200 / 裸调用 3012)。

⇒ 所以本插件不直连上游,而是通过一个跑在 ZCode 实例里的本机 HTTP 桥转发。captcha 与风控都由实例自己处理,插件只负责把对话与工具调用搬进搬出。

安装(三步)

⚠ 国内网络必读:github.com 直连经常超时(实测 curl 28 连接失败)。
本仓库的所有下载命令都给了镜像回退,直接用镜像那条即可。
镜像前缀:https://gh-proxy.com/ + 完整 GitHub URL。

步骤 1:部署 ZCode 开源版实例(含桥)

直连(能连通时)
git clone https://github.com/MYCF711/dsh-free-glm.git

国内推荐:走镜像
git clone https://gh-proxy.com/https://github.com/MYCF711/dsh-free-glm.git

cd dsh-free-glm
pwsh -File deploy-zcode-instance.ps1

deploy-zcode-instance.ps1 内部已自带镜像回退 —— 它会先试直连,失败自动换 gh-proxy.com,所以你不需要手动处理。

脚本做四件事:clone 上游 ZCode 开源版 → 应用桥补丁 → 装依赖(约 2.8GB) → 构建。耗时较长(视网络 10-40 分钟),但只需做一次。

自定义安装位置 / 已有源码检出

装到别的盘 pwsh -File deploy-zcode-instance.ps1 -Target E:\ZCode-official

已有源码检出,只补打补丁 pwsh -File deploy-zcode-instance.ps1 -SkipInstall -SkipBuild

若安装位置不在插件的自动探测范围内,设两个环境变量:

$t = 'E:\ZCode-official'
[Environment]::SetEnvironmentVariable('ZCODE_BRIDGE_APP_DIR', "$t\packages\desktop", 'User')
[Environment]::SetEnvironmentVariable('ZCODE_BRIDGE_ELECTRON_PATH', "$t\node_modules\electron\dist\electron.exe", 'User')

步骤 2:安装插件

当前版本 0.5.2(tgz 已随仓库提供,在 releases/ 下):

① 克隆仓库后,用仓库内的 tgz 安装(推荐,离线可用)
git clone https://github.com/MYCF711/dsh-free-glm.git
cd dsh-free-glm
dsh plugin --profile <你的profile> add "file:$PWD/releases/dsh-zcode-bridge-0.5.2.tgz"

② 国内网络(Gitee 镜像)
git clone https://gitee.com/MYCF711/dsh-free-glm.git

③ 或者从 GitHub Release 下载(若已发布对应版本)
dsh plugin --profile <你的profile> add https://github.com/MYCF711/dsh-free-glm/releases/download/v0.5.2/dsh-zcode-bridge-0.5.2.tgz

注意:
- dsh plugin add 装同一版本号的 tgz 时 pnpm 会命中缓存装回旧产物。
换了新版本先 bump 版本号。
- 不要手动拷贝到 node_modules —— 那样绕过 lockfile,下次 pnpm install 会被覆盖(实测踩过:版本莫名倒退)。
- 装完必须重启 DSH(插件模块在进程启动时读进内存)。

步骤 3:重启 DSH

插件会自动拉起 ZCode 实例(无头静默,不弹窗、不进任务栏、无托盘),桥就绪后模型设置页就会出现 ZCode Bridge (GLM free) 分组。

首次启动壳需要几秒。期间 provider 分组可能暂时为空 —— 这是正常的 (设计如此:桥不可用时隐藏整个分组,而不是留一个点不动的条目)。

使用

在 DSH 的模型选择器里选 ZCode Bridge (GLM free) 下的模型:

| 模型 | 说明 |
| GLM-5.3 | 完整版,较强,单轮约 15-30 秒 |
| GLM-5.3-Flash | 快速版,单轮约 3-15 秒 |

不需要配置任何凭据 —— 端口与 token 都从桥的发现文件自动读取。

支持的开关

| 环境变量 | 默认 | 作用 |
| ZCODE_BRIDGE_AUTOSTART | 1 | 0 = 不自动拉起壳,只保活已存在的 |
| ZCODE_BRIDGE_BASE_URL | —— | 显式指定桥地址(调试用) |
| ZCODE_BRIDGE_TOKEN | —— | 配套上面用的 token |
| ZCODE_BRIDGE_APP_DIR | 自动探测 | 壳的 app 目录 |
| ZCODE_BRIDGE_ELECTRON_PATH | 自动探测 | 壳的 electron 可执行文件 |
| ZCODE_DATA_BASE_DIR | 自动探测 | 数据根目录(其下有 .zcode) |

工具调用

支持两种模式:

模式 A:提示词桥接(默认,DSH 侧已可用)

把 DSH 的 tools[] JSON Schema 渲染成提示词,注入 system 段,与模型约定输出

优点:不依赖壳内工具,无副作用。
缺点:依赖模型遵守格式。

模式 B:结构化透传(桥侧已就绪)

请求体带 allowTools: true 时,桥放开壳内工具,模型可自由调用;桥从 task snapshot 提取结构化的工具调用透出: json { "index": 0, "id": "snapshot-0", "type": "function",
"function": { "name": "Bash", "arguments": "" },
"status": "completed",
"output": "total 30205\ndrwxr-xr-x ..."
}

优点:name 与 arguments 是上游协议自己产出的结构,不依赖模型措辞;还带 status(执行状态)与 output(真实执行结果)。

⚠ 副作用警告:allowTools: true 时壳内工具会真的执行(含写盘、执行命令)。
仅在你明确需要时使用。

⚠⚠ 不传 allowTools 会 180 秒超时(实测,2026-09-27):

| 请求 | 结果 |
| 带 tools[],不传 allowTools | 180.1 秒 → finish_reason: "timeout",空文本 |
| 带 tools[],allowTools: true | 15.0 秒 → 正常返回 |

根因:桥默认注入「不要调用工具」的前置说明 + 传 toolDenylist。
模型看到「有工具表但不要用」时,会去调壳内工具,而那些会真的执行 → 壳内长时间卡住 → 桥侧 180 秒超时。

⇒ 只要带了 tools[],就必须同时传 allowTools: true。 这是调用约定,不是 bug。

实测返回(工具面正常):

「我来查询杭州今天的天气。

架构细节(给想改代码的人)

关键文件

src/
index.ts 插件入口:provider 注册、壳的生命周期管理 adapter.ts DSH LlmAdapter 实现:stream() 合成流式块 tool-bridge.ts 工具调用的提示词渲染 / 解析 / 剥离 bridge-endpoint.ts 桥发现(读 bridge-port.json)+ 候选目录探测 instance-lifecycle.ts 壳的拉起 / 保活 / 残留清理 model-visibility.ts 模型开关(设置页的拨动开关) patches/ zcodeBridgeServer.ts 桥本体(新增文件,放进开源版 desktop 包) shell-modifications.patch 三处已跟踪文件的改动

桥的端点

| 端点 | 用途 |
| GET /health | 匿名健康检查(不需要 token) |
| GET /v1/models | 模型列表 |
| POST /v1/chat/completions | 主路径:会话链路对话,可选 allowTools |
| GET /diagnostics/auth?reveal=1 | 壳内真实鉴权材料(诊断) |
| POST /diagnostics/direct | 裸发上游(诊断用,上游会 3012) |

两个必须知道的坑

坑 1:captcha 事件面按 workspacePath 分桶

桥主动 mint captcha 材料时,必须用与 renderer 订阅的同一个 workspacePath,否则事件会被 fire 到 renderer 没监听的 Emitter 桶,表现为静默 20 秒超时 (renderer 侧连日志都不会打,极易误判为"captcha 组件没渲染")。

正确值:<dataBaseDir>/.zcode/workspace/default。

坑 2:工具调用从快照读,不要订阅事件流

onDynamicStreamEvent(taskId) 代码上完全可行(有 tool_call 事件),
但实测收不到任何事件。改用 getTaskSnapshot 的 messages[].tools[] ——数据一直持久化在那里,事后再拉必然拿得到。

为什么不能绕过「壳」直接调上游

这是本项目最重要的一条结论,已用实验钉死。

现象

把请求直接发到 https://zcode.z.ai/api/v1/zcode-plan/anthropic/v1/messages,无论带什么头,稳定返回:

{"code":3012,"msg":"request has been blocked due to unusual activity."}

注意不是 3007(那是 captcha 失败)。3012 发生在 captcha 之后的另一层。

排查过程(全部实测)

第一步:把壳内真实请求的头全部提取出来。 hook globalThis.fetch,抓会话链路的出站请求,得到完整的头集合。

第二步:把「来源标识头」逐字段复制到直发请求上。

User-Agent / HTTP-Referer / X-Title / X-ZCode-App-Version / X-Platform
X-Release-Channel / X-Client-Language / X-Client-Timezone
X-Os-Category / X-Os-Version / X-Device-Mid

(X-Device-Mid 取自 <dataBaseDir>\.zcode\v2\telemetry-state.json, 复用壳的真实身份,不生成新的)→ 仍 3012。

第三步:做头集合 diff,补齐缺口。 对比后发现会话链路还带这些桥没有的头:

x-session-id / x-query-id / x-zcode-trace-id / x-zcode-session-type / x-zcode-agent
anthropic-beta: mid-conversation-system-2026-04-07
x-api-key(与 Authorization 同值)

全部补上,头集合已与会话链路逐字段完全一致(25 个头) → 仍 3012。

第四步:排除签名假设。

官方闭源版确实有一套客户端签名机制(ClientRequestSigningV4:ed25519 + KDF + HMAC,握手端点 /api/paas/c1f3a7e2/v2/client,动作 get_sign_key),但开源版的会话链路实测不带签名头(X-Client-Sig / X-Client-Pow 均无)。
而且那套机制由服务端 feature gate 控制(resolveSigningFeatureGate,
默认 isEnabled: async () => false)。

⇒ 缺的不是签名。

结论

3012 的判据是「请求的会话注册状态」,不在 HTTP 头里。

决定性证据是一个变量交换实验:抢在桥之前用新鲜 captcha 自发(只带 3 个头)—— 3012 转移到了抢发方,桥反而拿到 3007(材料被抢先消费)。

⇒ 3012 跟随「新鲜材料」移动,不跟随发送者、不跟随头集合。
captcha param 本身解码后是 {certifyId, sceneId, isSign, securityToken}, 零个会话标识 —— 说明绑定关系在服务端按「谁先消费 + 消费时的会话态」判定,客户端无法预置。

所以:走会话链路(本插件的做法)是唯一可行且 100% 成功的方案。 桥里的 bridgeSourceHeaders() 与 sessionHeaders 保留着 —— 它们的价值是「把壳的请求特征完整复刻出来」,一旦上游放松风控即可直接使用。

常见问题

Q:模型列表是空的 / 看不到 provider 分组?

说明桥不可用。逐项检查:

1. 壳在跑吗?
Get-CimInstance Win32_Process -Filter "Name='electron.exe'" |
Where-Object { $_.CommandLine -notmatch '--type=' } | Select ProcessId, CreationDate

2. 发现文件在吗?(路径随你的 dataBaseDir 而变) Get-Content "$env:USERPROFILE\.zcode\v2\bridge-port.json" 或源码检出:<你的路径>\_oss_data\.zcode\v2\bridge-port.json

3. 桥活着吗?
$f = Get-Content "$env:USERPROFILE\.zcode\v2\bridge-port.json" -Raw | ConvertFrom-Json
Invoke-RestMethod "http://127.0.0.1:$($f.port)/health"

Q:设置了环境变量但插件读不到?

DSH 是由 dsh-launcher.exe 这个长驻进程拉起的,它持有创建时的环境块。
重启 DSH 不够 —— 得重启 launcher。插件已尽量用「文件实际在哪」的候选探测规避这个问题,不依赖环境变量。

Q:改完插件代码没生效?

file: 依赖是实体副本,改源码后必须 pnpm install --force,并重启 DSH (DSH 在启动时把模块读进内存)。

Q:会不会违反服务条款 / 封号?

本插件用的是你自己的 ZCode 账号的免费额度,只是把调用入口从 ZCode 界面换成了 DSH。额度消耗、账号行为与直接用 ZCode 完全一致。风险自负。

版本

| 版本 | 变更 |
| 0.2.1 | 修复路径硬编码(别人装了也能用) + 桥侧 preamble 修复(DSH 工具调用放行) |
| 0.2.0 | 工具调用(提示词桥接)+ 空回复明确报错 + provider 显示修复 |
| 0.1.x | 基础对话链路 |

0.2.1 修的两个「装了不能用」

① 路径硬编码 → 动态探测

早先候选路径是写死的绝对路径(作者本机的 D:\DSH-WEB\ZCode-official\...)。
别人装了 → 候选全不存在 → resolveSpawnConfig() 返回 undefined → 不报错、不提示,只是 provider 分组永远空着。

现在按已知安装位置动态枚举(多盘符 × 多种目录布局 + 官方安装版),环境变量仍为最高优先。

② 桥的 preamble 把 DSH 工具也禁掉了

桥原先注入「不要调用任何工具」,而 DSH 下发的工具表写在 system 段里—— 这句禁令在前,压过了工具表。

实测症状:模型在真实 DSH 会话里回答「按本次桥接模式的约束,我不能调用工具」,read/glob/ls 全用不了。

改为区分两类工具:自己的内置工具 → 禁止(避免真执行 + 防超时);调用方给的工具协议 → 鼓励(那正是要透传的)。

修复后实测(dsh --profile zcbtest2 --json "<任务>"):

事件流: tool_call × 2, tool_result × 2 模型回答: "dist 目录下只有 1 个文件:dsh-zcode-bridge-0.2.0.tgz"

数字来自真实工具执行,不是文档记忆。

完整开发历史(含每次修复的 diff 与根因说明)在 dev-history 分支:

e34bd55 chore: 移除误提交的提交信息临时文件 c1cf51e feat: 打通工具调用(提示词桥接)—— GLM 可在 DSH 中真正调用工具 b95ce9d fix: 空回复不再当成功、工具块降级为历史记录、清理死代码 fb0551c fix: 修复模型设置页不显示 provider,清理死代码

许可

MIT。本项目不含 ZCode 的任何源码,只包含针对它的补丁与本机桥实现。
使用前请自行确认符合 ZCode 的服务条款。
预览分享卡片长什么样 ↓MYCF711/dsh-free-glm
分享 · DeepSeek Harness Hub
MYCF711/dsh-free-glm

免密钥接入 GLM-5.3,支持对话与工具调用

回到顶部