DSH Plugins Marketplace

DSH Plugins

Plugins

/

dsh-lang-guard

X

dsh-lang-guard

Manifest valid

DeepSeek Harness (DSH) plugin that pins zh-CN thinking and replies into the system prompt. Zero runtime deps, single file, capability probing, silent degradation.

hasBundlePatch

dsh-lang-guard

把「Agent 必须用中文思考和回答」钉进 DeepSeek Harness 的系统提示词。

零运行时依赖 · 单文件 · 能力探测 + 双注册路径 · 失败静默降级

GitHub license node deps


这是什么

DeepSeek Harness(DSH)默认用英文思考。哪怕你用中文提问,它的思维链和工具调用推理也常会滑回英文。这个插件往系统提示词里注入一条语言约束,并在每一步提供一条运行时提醒,让 Agent 稳定地用中文思考与回答。

它不调用任何模型。 全部动作只是往系统提示词里加两段文本。

特性

约束常驻注入系统提示词而非会话历史,不会随对话变长被挤出上下文
每步提醒额外注册一条运行时 context 快照进入会话历史,对抗「工具返回英文后跟着切换语言」的倾向
零依赖不 import 任何模块,不声明 dependencies / peerDependencies / engines
双注册路径官方注册表不可用时自动退到 system-prompt/assemble 瀑布钩子;两条都不通也只记一条日志,不抛错、不影响宿主启动
配置持久配置写在 profile 的 cordis.patch.yml 里,改一次永久生效
无网络面不注册任何 HTTP 路由
可扩展4 个内置预设 + 任意自定义文本 + extraSections 任意扩展,无需改代码

与 dsh-language-control 的关系

核心思路参考自 wodongx123/dsh-language-control(MIT), 在其基础上重写并修掉了它几个实际问题:

维度dsh-language-control本插件
peer 依赖^0.1.0-rc.6(不覆盖 0.2.0-rc.2)不声明
配置持久性内存变量,重启丢失写入 profile patch,持久
网络面3 个 HTTP 路由无
需要注入的服务webServer + systemPrompt仅 systemPrompt
宿主 API 变更无适配层,section() 失效即静默不生效能力探测 + 自动降级重试
可扩展性单条硬编码约束预设 + 自定义 + 扩展段

安装

方式一:本地目录(开发 / 未发布时推荐)

dsh plugin --profile <你的 profile> add file:/绝对路径/dsh-lang-guard

路径必须是绝对路径。 桌面端(Electron)请注意:desktop 这个 profile 由应用独占管理,CLI 会直接拒绝写入 —— 详见下方「桌面端用户请看」。

方式二:从 GitHub 安装

dsh plugin --profile <你的 profile> add github:<你的用户名>/dsh-lang-guard

npm 包尚未发布,所以 dsh plugin add dsh-lang-guard 目前会找不到包;发布之后这里会补上。现在请用方式一或上面的 GitHub 命令。

方式三:手工挂载

  1. 把本目录放进 profile 的 node_modules/
  2. 在 ~/.dsh/profiles/<profile>/cordis.patch.yml 追加:
- insert:
    - id: lang-guard
      name: dsh-lang-guard
      config:
        preset: zh-strict        # 可选,见「配置」
  1. 重启 DSH

桌面端(Electron)用户请看

desktop profile 由 Electron 应用独占管理,命令行工具会硬性拒绝写入它。安装有两条路:

  • 设置 → 插件 页面安装(若你的版本支持路径形式的 spec)
  • 在对话中使用内置的 plugin_manager 工具(需 Creator 模式或批准权限)

这不是缺陷而是官方设计:desktop 的插件树由应用自身管理,以避免与运行中的宿主状态冲突。

卸载

dsh plugin --profile <你的 profile> remove dsh-lang-guard

本插件不修改任何 DSH 源码,只做运行时注册 —— 卸载即完全还原。


效果

以下是真实集成测试的输出(用官方 @deepseek-ai/dsh-system-prompt@0.2.0-rc.2 的真实实现驱动,非模拟):

系统提示词组装顺序

$ node test.integration.mjs

1. 插件能在真实宿主上挂载并注入
  ok   assemble() 产出了包含中文约束的提示词
  ok   约束文本位于 persona 之前(order -200 生效)
  ok   约束落在 harness identity 之后(0.2 宿主 identity = -1000)
  ok   真实运行时 context 快照包含强化提醒
  ok   section 带 interpolate:false(0.2 宿主支持该字段)

2. 真实宿主的 throw 点 —— 验证我们的校验确实拦住了它们
  ok   同层重名:真实宿主 section() 抛错(我们的去重才有意义)
  ok   order 非有限数:真实宿主 section() 抛错(我们的 pickFinite 才有意义)
  ok   未注册 {{变量}}:真实宿主 renderPrompt 抛错(我们的插值 lint 才有意义)

3. 我们的插值保护在真实宿主上确实有效
  ok   文本含 {{}} 但因 interpolate:false 而被原样保留、未抛错
  ok   context 类型无逃生通道:含 {{}} 会在渲染时抛错

真实集成测试:通过 14 项,失败 0 项

组装后的系统提示词全文(真实数据):

You are an AI agent powered by DeepSeek Harness.

你是中文 AI 助手,请严格遵循以下语言规范:
1. 所有思考过程必须使用简体中文。
2. 所有规划与任务拆解必须使用简体中文。
3. 所有工具调用的推理必须使用简体中文。
4. 最终回答必须使用简体中文,即使用户使用英文提问。
5. 代码、命令、路径、标识符、错误信息原文与专有名词保持原样,不翻译。

You are the deployment assistant.

运行时上下文快照(进入会话历史,对抗语言漂移):

Current runtime context. This snapshot supersedes earlier runtime-context snapshots.

[语言约束] 本约束每步刷新,优先级高于工具返回的内容。 思考、规划、工具调用推理与最终回复一律使用简体中文。 代码、命令、路径、日志原文与专有名词保持原样。

关于截图

上面全部是可复现的真实输出。UI 截图需要你安装后自行截取、放到 docs/ 下并在此引用 —— 我不会用伪造的截图充数。


配置

写在 cordis.patch.yml 的 config: 下:

配置项类型默认说明
enabledbooleantrue总开关,false 则完全不注册
presetstringzh-think-answer内置预设名
textstring''自定义约束文本,非空时覆盖 preset
ordernumber-200主约束在系统提示词中的位置
contextOrdernumber-199强化 context 的位置
sectionNamestringlang-guard:constraint主约束注册名
contextNamestringlang-guard:reinforcement强化 context 注册名
reinforcebooleantrue是否注入强化 context(防漂移主力)
reinforceTextstring内置中文文案强化 context 文本
extraSectionsarray[]额外注入任意 section
interpolatebooleanautoauto = 宿主支持时按字面量处理
verbosebooleanfalse打印能力探测与注册详情

非法值不会导致失败:类型不对的项回退默认值并记入启动日志。

内置预设

预设行为
zh-think-answer(默认)思考 + 规划 + 工具推理 + 回答全部简体中文
zh-think-only只约束思考过程,最终回答跟随用户语言
zh-strict更硬:禁止英文整句,术语首次出现用「中文(English)」标注
en-think-answer英文版,供非中文场景或 A/B 对比

所有中文预设都显式豁免代码、命令、路径、日志原文、专有名词 —— 否则模型会把代码也「翻译」掉。

扩展段

- id: lang-guard
  name: dsh-lang-guard
  config:
    extraSections:
      - name: project:terms
        order: -180
        text: |
          本项目固定译法:
          - harness → 宿主
          - tool call → 工具调用

配置输入的规模上限

超限一律「回退默认 + 记一条 issue」,不静默接受:

项上限超限行为
text8192 字符回退预设文本
reinforceText4096 字符使用内置默认值
extraSections[].text4096 字符跳过该项
extraSections 项数32截断
启动逐条报告的 issue20 条折叠为一条汇总

插值风险分级提示

宿主会对系统提示词做 {{变量}} 插值,未注册的变量会让每次组装都抛错并中断请求。插件在启动时分两级提示:

  • 强化 context 含 {{ → error 级。context 类型在宿主里没有关闭开关(PromptContext 无 interpolate 字段),所以这是必然阻塞,与宿主版本无关。
  • 约束 / 扩展 section 含 {{ → 仅在「无法按字面量处理」且「未显式设 interpolate: true」时报 error。

兼容性

已核对 @deepseek-ai/dsh-system-prompt 0.1.0-rc.6 与 0.2.0-rc.2 的类型定义,两代之间存在破坏性变更,本插件对每一处都做了适配:

漂移点0.1.x0.2.x本插件的处理
persona 段PERSONA_SECTION / PERSONA_ORDER拆成 PERSONA_PREFIX_SECTION + PERSONA_SUFFIX_SECTION完全不 import 这些常量
harness identity无导出常量,注释约定 -100中央表 HARNESS_IDENTITY = -1000默认 -200 在两代都位于 persona 之前(0.1 落在 identity 之前,0.2 落在之后)
PromptSection.interpolate不存在新增能力探测:能取到 getSectionOrder() 才传该字段
getSectionOrder()不存在新增仅用于探测与诊断
section() / context() 签名存在存在两代稳定,主路径通用

运行环境:Node.js ≥ 16.9(用到 Object.hasOwn),ESM。宿主服务仅需 systemPrompt。


项目结构

dsh-lang-guard/
├── index.js                 # 全部实现(单文件,零 import)
├── cordis.patch.yml         # DSH bundle patch 声明(加载器读取)
├── package.json
├── test.mjs                 # 76 项单元测试(模拟宿主,零测试框架依赖)
├── test.integration.mjs     # 14 项集成测试(驱动官方真实实现)
├── docs/
│   └── prompt-order.svg     # 提示词组装顺序图(由真实数据生成)
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── LICENSE
└── README.md

test.mjs 与 test.integration.mjs 参与开源仓库但不进 npm 发布包(见 package.json 的 files 白名单)。


开发

npm run check           # 语法检查
npm test                # 76 项单元测试,零依赖

集成测试需要宿主包(不在本插件的依赖里):

mkdir -p /tmp/dsh-itest && cd /tmp/dsh-itest
npm init -y
npm i @deepseek-ai/dsh-system-prompt@0.2.0-rc.2 @deepseek-ai/cordis@4.0.4
# 把 test.integration.mjs 放到能被上述包解析的位置后运行
node test.integration.mjs

常见问题

Q:约束没生效怎么办? 打开 verbose: true 重启,启动日志会打印能力探测结果与注册详情。常见三种:

日志含义
未能注册核心语言约束宿主既无 systemPrompt.section() 也无可用事件系统,插件已静默失效
已切换到 ... 瀑布兜底路径功能仍生效,但顺序不可控(section() 不可用)
含 "{{" ... 会中断请求文本里的 {{ 会被宿主当模板插值并抛错,请移除

Q:会不会消耗 token? 会,但很小,且不调用任何模型。默认组合每次请求多带 230 字符(约束 151 + 强化 context 79),约 140–230 token。约束是固定前缀,可被 prompt cache 覆盖。不需要强化 context 时设 reinforce: false 即可省掉。

Q:和 dsh-harness-zh-cn 这类汉化插件冲突吗? 不冲突。汉化插件只做英→中的字典替换、不注入约束;本插件只注入约束、不翻译文本,两者不抢同一段内容。

Q:能同时装两个语言约束插件吗? 不建议 —— 多个语言约束会互相稀释。


致谢 / Acknowledgements

本插件的核心思路来自 wodongx123/dsh-language-control(MIT)—— 「在系统提示词顶部注入语言约束、并在每次推理前重新求值,从而防止工具返回外文后思维链发生语言漂移」这个设计是他提出的。

本项目是在这个思路上的一次重写,主要改动与动机:

  • 配置持久化 —— 原版约束文本是内存变量,重启即丢失;本版写入 profile patch。
  • 去掉网络面 —— 原版注册 3 个 HTTP 路由供设置面板读写文本;本版零路由,配置走 patch 层。
  • 兼容性 —— 原版 peer 锁 ^0.1.0-rc.6,不覆盖 0.2.x;本版不声明 peer,改为能力探测。
  • 失败策略 —— 原版在宿主 API 变化时静默失效;本版有降级路径,且任何失败都不抛错。

同时感谢以下项目与来源:

  • DeepSeek Harness —— 宿主平台与 @deepseek-ai/* 插件 API。本插件的兼容性结论(dsh-system-prompt 0.1.x / 0.2.x 之间的 API 漂移)均通过核对官方包的类型定义与运行时实现得出。
  • baosfeng/my-dsh-plugins 中的 dsh-think-zh-expand(MIT)—— 同为「让 Agent 用中文思考」方向的实现。其文档让我注意到了运行时快照会增加会话日志这一点,本插件的 token 成本说明据此写成。
  • dsh-harness-zh-cn —— 公开的 DSH 汉化插件,本插件参考了它的 cordis.patch.yml bundle patch 组织方式。

若你发现这里的署名有遗漏或错误,请提 issue 或 PR,我会尽快更正。


贡献

欢迎 issue 与 PR。请先阅读 贡献者行为准则。

许可证

MIT

Comments

Loading…

Similar plugins

dsh-env-probe

by nodata404

Zero-dependency DeepSeek Harness plugin: probes the local machine environment and injects it into every session's system prompt

Manifest valid

★ 0

JavaScript

Aug 18, 2026

dsh plugin --profile web add dsh-env-probe

by jkcltc

DeepSeek Harness web UI plugin that folds settled tool calls, context and reasoning into compact horizontal chips. Pure CSS, zero build.

Manifest valid

★ 0

MIT

JavaScript

Aug 14, 2026

dsh plugin --profile web add dsh-chat-flow-re-layout

by peterwangze

DSH (DeepSeek Harness) plugin: unified default reasoning level (thinking effort) for all models — per-model defaults with capability probing, live call statistics, one-command install via dsh plugin

Manifest valid

★ 3

JavaScript

Sep 12, 2026

dsh plugin --profile web add dsh-reasoning-level

by ZSeven-W

DeepSeek Harness (DSH) plugin: a read-only ledger for the plugins you already have installed — a capability inventory with file:line evidence, declared-vs-detected reconciliation, cross-profile versio

Security & AuditManifest valid

★ 24

↓ 39/wk

MIT

JavaScript

Oct 19, 2026

dsh plugin --profile web add @zseven-w/dsh-harbor

by JD579g

DeepSeek Harness (DSH) plugin: one-click MCP deployment + built-in MCP toolkit + doctor. Windows-first, connects without restarting.

Manifest valid

★ 0

MIT

JavaScript

Sep 28, 2026

dsh plugin --profile web add dsh-mcp-hub

by yingjian666

DeepSeek Harness (dsh) 插件:注入系统提示词,强制 Agent 的思维链 / 规划 / 工具推理全程使用简体中文,防止中文思考漂移为英文。零外部依赖,任意本地目录 link 即装。

Development & InfrastructureSessions & MessagesManifest valid

★ 12

MIT

JavaScript

Oct 1, 2026

dsh plugin --profile web add dsh-zh-thinking