dsh-client-masquerade:为 DSH 的 llm-pi-ai 路由增加 Claude Code / Codex 客户端伪装

前言

在 DeepSeek Harness 中通过 llm-pi-ai provider 接入中转网关时,有些网关会按请求头识别客户端,也有些网关会进一步校验请求体。DSH 侧显式配置的 user-agent 如果不被适配器原样发送,可能会被剥离并覆盖为 deepseek-harness/...

dsh-client-masquerade 是一个 DeepSeek Harness 插件:把已配置的 llm-pi-ai provider 伪装成 Claude Code、Codex 或自定义请求头客户端。它把伪装头写入 provider 配置,并在每次请求时发送;对需要请求体指纹的场景,也可以按需向 Anthropic 协议请求体注入 Claude Code 指纹。

这是什么

dsh-client-masqueradeymh0000123 维护,许可证为 MIT,Node 要求 >=18

它面向已经使用 DSH Web profile、并且已经通过 llm-pi-ai 路由配置自定义模型 provider 的场景,主要解决两类问题:

  1. 客户端身份头没有按预期发到上游网关。
  2. 仅靠请求头还不够,需要请求体指纹校验。

核心功能

  • 为任意已配置的 llm-pi-ai provider 一键应用、清除或切换 Claude Code、Codex 或自定义请求头伪装。
  • 将伪装头写入 provider 配置的 headers 字段,并由 pi-ai 适配器在每次请求中原样发送。
  • 按需向 Anthropic 协议请求体注入 Claude Code 指纹,包括 metadata.user_id、身份 system 块和哨兵工具定义。
  • 提供设置页、模型工具 mask_client 以及动态模式下的 Run 卡片面板入口。
  • 提供 User-Agent、请求体和 vision-toolkit 变体三个补丁。
  • test 动作会真实发起一次最小流式调用,并报告网关实际收到的请求头、模型回复或报错。
  • 界面支持中英双语,并跟随 Harness 语言设置切换。

安装与启用

前提

先在 DSH 中配置好自定义 provider。

Settings → Models → 配置自定义 provider(llm-pi-ai 路由)

没有可用的 llm-pi-ai provider 时,插件无法写入目标 provider 的伪装配置。

安装

执行官方安装命令:

dsh plugin --profile web add github:ymh0000123/dsh-client-masquerade

安装后需要应用补丁。否则 profile 显式配置的 user-agent 可能被剥离,并覆盖为 deepseek-harness/...

应用补丁

可以在设置页点 User-Agent 补丁 → 应用,也可以执行模型工具动作:

mask_client action=patch

也可以在 profile 目录中逐个执行补丁脚本:

node node_modules/dsh-client-masquerade/patches/apply-pi-ai-useragent-patch.mjs
node node_modules/dsh-client-masquerade/patches/apply-pi-ai-body-patch.mjs
node node_modules/dsh-client-masquerade/patches/apply-variant-retry-patch.mjs

这三个补丁都会修改第三方包文件,需要重启 dsh web 生效,并且补丁幂等:

dsh web

pnpm install 或升级被打补丁的包后,需要重新应用补丁。

动态插件方式

如果不使用持久安装,也可以使用动态插件:

code.host:粘贴 host.body.js 全文
code.client:粘贴 client.body.js 全文

动态模式没有文件系统权限,设置页只显示补丁状态,仍需手动执行补丁命令。

如果之前用动态插件方式运行过同一份代码,需要先停用或删除动态版本,避免设置页入口重复注册。

典型用法

应用伪装

设置页入口:

Settings → Client Masquerade → User-Agent 补丁 → 应用

模型工具入口:

mask_client action=patch

清除伪装头

设置页入口:

Settings → Client Masquerade → Off

模型工具入口:

mask_client action=off provider=<id>

测试请求

test 动作会真实发起一次最小流式调用,并报告网关实际收到的请求头、模型回复或报错:

mask_client action=test

还原补丁

设置页入口:

Settings → Client Masquerade → 运行时补丁 → 全部还原

模型工具入口:

mask_client action=unpatch

还原补丁后也需要重启 dsh web

dsh web

卸载插件

执行卸载命令:

dsh plugin --profile web remove dsh-client-masquerade

卸载插件不会自动还原三个补丁。已经写入 provider 的伪装 headers 也会保留,需要逐个执行 off 或手动清除。

排错与状态判断

test 动作给出的结果适合用来确认网关实际收到了什么。

遇到 429 / 503 时,不能只看状态码。它可能代表渠道池真忙,也可能代表请求体指纹校验未通过。建议按下面顺序检查:

  1. 请求体伪装是否开启。
  2. 请求体补丁是否已应用。
  3. 是否已重启 dsh web
  4. 是否重新应用过 Claude Code 预设。

按设计不伪装 x-claude-code-session-id

claude-code 预设的取值来自实测抓包。升级插件后建议重新应用 Claude Code 预设,避免继续使用旧预设。

适用场景与注意

适合这类使用方式:

  • 使用 DSH Web profile。
  • 通过 llm-pi-ai provider 接入自定义模型或中转网关。
  • 网关按 Claude Code、Codex 客户端身份识别请求。
  • 需要请求体指纹,而不只是请求头伪装。

使用前注意:

  • 插件以当前 dsh 进程权限运行。安装前应检查源码与许可证。本插件许可证为 MIT。
  • 三个补丁都会修改第三方包文件,需要重启 dsh web 生效,且补丁幂等。
  • pnpm install 或升级被打补丁的包后,需要重新应用补丁。
  • 卸载插件不会自动还原补丁,已写入 provider 的伪装 headers 也会保留。
  • engines.node 要求 >=18
  • peerDependencies 包含 @deepseek-ai/cordis@deepseek-ai/dsh-llm@deepseek-ai/dsh-settings@deepseek-ai/dsh-tools;后三者标记为 optional。

链接

GitHub 仓库:

https://github.com/ymh0000123/dsh-client-masquerade
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜