前言¶
DeepSeek Harness(DSH)把模型调用、工具描述和系统提示一起序列化后发给上游网关。若请求里带有可被规则匹配的固定文本或标识,网关可能直接拒绝,返回 400 与 code 11-128(Illegal API invocation from an unapproved channel),这与选用的模型无关,而是对请求体中某段连续文本的匹配结果。
社区插件 dsh-fingerprint-remover(维护者 LhyCloud,分类 admin-security)在 DSH 的出站请求边界改写序列化后的 body 与部分 HTTP 头,去除已知客户端特征,降低因此被网关拦下的概率。下面介绍它的定位、能力与安装用法;事实以 GitHub 仓库 README 为准。
这是什么¶
dsh-fingerprint-remover 是一款 DSH 插件,不更换 provider、模型、路由、凭证、工具名或 DSH 本体,只改写即将发出的 JSON 请求与相关头字段。
README 说明:网关拒绝的不是模型,而是请求里可被匹配的「连续文本」。例如,DSH 请求曾以两句固定的 path 说明开头;单独任一句可得到 200,两句紧挨则触发 11-128;改写第一句即可打破匹配。除该句对外,请求还可能携带 harness 身份句、GUI 段落、checkout 行、本地 Web GUI URL、.dsh / dsh 路径、dsh-* 包名、HOST_* 环境变量、reasoning 块、工具结果以及归因 User-Agent 等,插件按表面对这些项做清洗或替换。
核心功能¶
网关侧已知触发点(参考)¶
README 在同上游、同 system slot 下做过对比:两句 reference-rules 连续出现会 400 / 11-128;改写第一句或两句都改写则恢复 200。插件会改写两句,避免相邻配对再次形成指纹。
处理范围¶
| 表面 | 处理方式(摘自 README) |
|---|---|
| Reference-rules 句对 | 第一句 paraphrase;第二句同义改写 |
| Harness identity 句 | 删除 |
| GUI 段落 | 将含 Web GUI URL 的表述改写 |
| Runtime context | 去掉 checkout 行与本地 Web GUI URL;工作区路径替换为 <workspace> |
| 重放历史 | system / developer / assistant / runtime-context / user / tool |
| Reasoning 块 | 与可见文本相同规则 |
tool_calls 参数 |
JSON 字符串清洗 |
| 工具与参数描述 | 清洗 dsh、HOST_*、包名等 |
| User-Agent | 将 dsh token 替换为 WorkBuddy 桌面 UA |
| 归因头 | 移除 x-dsh-* |
默认会清洗普通 user 消息;若需保持用户消息字节不变,可在配置中设置 sanitizeUserMessages: false。
实现边界¶
插件在 globalThis.fetch 处拦截:解析 JSON body → 改写 messages、system、tools → 再序列化发送,并改写 User-Agent、去掉 x-dsh-*。同时保留 system-prompt/assemble 钩子,使会话日志里存的 prompt 已是清洗后的版本。adapter 的 options 被冻结,llm/stream waterfall 无法替换该对象。
安装与启用¶
官方 README 给出三种安装方式,任选其一:
dsh plugin add dsh-fingerprint-remover
从 GitHub 仓库安装:
dsh plugin add github:LhyCloud/dsh-fingerprint-remover
从本地目录(示例为 desktop profile):
dsh plugin --profile desktop add file:/path/to/dsh-fingerprint-remover
安装后需重启 DSH 一次。启动日志中可出现类似:
[dsh-fingerprint-remover] active … prompt sanitizer on, UA -> WorkBuddy/5.8.4 workbuddy-ai/5.8.4 CLI/2.161.0
package.json 标明插件要求 dsh 引擎 >=0.2.0-rc.1,Node >=20;当前包版本为 1.0.0,许可证 MIT。
配置项¶
在 DSH 配置中插入插件块(字段含义以 README 为准):
- insert:
- id: dsh-fingerprint-remover
name: 'dsh-fingerprint-remover'
config:
enabled: true
providers: [] # [] = all providers
sanitizePrompt: true
sanitizeToolResults: true
sanitizeUserMessages: true
sanitizeUserAgent: true
stripAttributionHeaders: true
userAgent: 'WorkBuddy/5.8.4 workbuddy-ai/5.8.4 CLI/2.161.0'
referenceRulesReplacement: 'An @ prefix marks a path the user named explicitly.'
hostRuleReplacement: 'Relative paths are resolved against the workspace root, while absolute paths refer to files or directories on the machine.'
dumpPath: '' # optional: write the last sanitized request
verbose: false
dumpPath 非空时会把最后一次清洗后的请求写成机器本地 JSON,便于自查,默认关闭且不会外传。
典型用法¶
会话内命令¶
| 命令 | 作用 |
|---|---|
/fingerprint 或 /fingerprint status |
状态、计数、最近一次 payload 扫描 |
/fingerprint scan |
最近出站请求:provider/model,清洗前后指纹数量 |
/fingerprint on / off |
当前进程内开关(重启后恢复配置文件) |
/fingerprint why |
根因说明 |
只读 JSON 状态(仅 loopback):
GET /dsh-fingerprint-remover
健康检查时,/fingerprint scan 对真实最近一次请求的「剩余指纹」期望为 0。README 回放示例:308 条消息 + 40 个工具,清洗前 4768 个指纹项 → 清洗后 0。
本地测试¶
仓库内无网络测试:
npm test # README 写明 17 tests
适用场景与注意¶
适合谁: 需要通过 WorkBuddy 等网关出站、且因 DSH 固定 prompt 片段或客户端标识触发 11-128 的开发者;属于 admin-security 类能力,使用前应理解改写范围。
权限与信任: 插件以当前 DSH 进程权限运行,能读写出站请求与头;安装前应阅读 源码与 LICENSE,在可恢复的 profile 上验证。README 建议保留插件包管理器生成的备份文件。
范围与限制(README):
- 规则基于已知指纹锚点;上游新增规则时需插件侧补充对应规则。
- 不伪造
machineId/sessionId等 proto 级身份字段。 - 历史 tool results 被改写后,模型可能看到占位符而非真实路径,这是为降低可检测性做的取舍。
DSH 生态强调「一切皆插件」;社区目录 skillhub.cn 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系。
链接¶
- 目录页:https://www.skillhub.cn/plugins/LhyCloud/dsh-fingerprint-remover
- GitHub:https://github.com/LhyCloud/dsh-fingerprint-remover