前言¶
在 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-masquerade 由 ymh0000123 维护,许可证为 MIT,Node 要求 >=18。
它面向已经使用 DSH Web profile、并且已经通过 llm-pi-ai 路由配置自定义模型 provider 的场景,主要解决两类问题:
- 客户端身份头没有按预期发到上游网关。
- 仅靠请求头还不够,需要请求体指纹校验。
核心功能¶
- 为任意已配置的
llm-pi-aiprovider 一键应用、清除或切换 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 时,不能只看状态码。它可能代表渠道池真忙,也可能代表请求体指纹校验未通过。建议按下面顺序检查:
- 请求体伪装是否开启。
- 请求体补丁是否已应用。
- 是否已重启
dsh web。 - 是否重新应用过 Claude Code 预设。
按设计不伪装 x-claude-code-session-id。
claude-code 预设的取值来自实测抓包。升级插件后建议重新应用 Claude Code 预设,避免继续使用旧预设。
适用场景与注意¶
适合这类使用方式:
- 使用 DSH Web profile。
- 通过
llm-pi-aiprovider 接入自定义模型或中转网关。 - 网关按 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