概览
dsh-language-guard
README / ZH
插件文档
目录摘要
dsh.pub 核对固定版本的组合包契约、运行时事实与分发语义;完整 README 请查看源仓库。
在 GitHub 阅读完整 READMELIMITATIONS
已知限制
- **约束文案本身是写死的简体中文。** 只替换语言名与语言代码,所以 `targetLanguage: "en"` 时注入文本读作「…一律使用English(语言代码 en)」。模型能正常处理,但行文没有本地化。模板本地化留待后续版本。 - **周期提醒在会话界面上可见**,折叠成一行「上下文注入 · language-guard · 语言自检」。英文标识符 `language-guard` **无法隐藏**——客户端把 `source.kind` 原样当作注入标签渲染,官方 `agent-instructions`、`skill-invocation` 同样如此。要本地化它得为上下文节点写一个自定义 `conversation.chat.node` 渲染器,首版不做。 - **Client 半拿不到轮次计数**,所以面板无法显示「下一次注入会落在第几轮」。 - **快速切换菜单只列五个预设加一条「当前自定义」。** 自定义 BCP-47 标签必须在设置页文本框里填;手动模式且当前值不在预设内时,菜单会多出一条「当前自定义:<语言名>」并处于勾选态,避免六项全无勾选看起来像「没设过语言」。菜单无法枚举任意标签,切换其它自定义值仍要回设置页。 - **绝对锁定,不给单轮开口子。** 有意的设计取舍:本插件是「设定一次、全程有效」,所以「这次先用英文回答」这类当轮指令**不会**让它临时切走——想换语言就改设置或用 `/language`。这与「按轮灵活切换」是相反的取向,需要按轮切换的用户不适合用本插件。 - **检测不到是否装了 `dsh-context`**,所以提示是常驻的(见上)。 - **周期档不会唤醒空闲会话。** `agent/pre-step` 只在轮次运行中触发,不发消息就没有提醒——语言守卫不应该自己产生对话。 - **`mid` 的位置可能被未来的插件挤压。** 如果有插件在 order `5000` 到 `9000` 之间插段,「工具说明之后」的语义会被稀释。届时的修法是把 `mid` 提到 `8900`(仍在交付物引用 `9000` 之前);再不行就回退到基础档,它不依赖 `mid`。 - **无法自动区分简体与繁体。** DSH 内置界面语言只有 `zh` 与 `en`(`dsh-client-locale/lib/index.js:11` `LOCALE_IDS = ["zh","en"]`),`zh` 不区分简繁;而 Host 侧拿不到系统语言。因此界面语言为「中文」时,自动模式一律解析为 `zh-CN`。需要繁体输出的用户请把语言模式切到「手动」并选 `zh-TW`。日本語 / 한국어 同理:标准安装下自动模式只能解析出 `zh-CN` 或 `en`,需要这两种语言请切到「手动」自行选择——若你装了对应的外部语言包,它的语言标签会原样透传。 - **不覆盖 API 的 `tools` 参数本身。** 真正传给模型的工具 schema 在请求的 `tools` 参数里,不在 system prompt 内;本插件只在提示词侧要求模型用目标语言书写 `description` 参数,无法改写 schema 里的英文措辞。模型若不遵从,工具卡片标题仍会是英文——这是提示词级约束的固有边界,不是配置问题。 - **不自动跟随操作系统语言。** 插件读取的是你在 DSH 设置里选择的界面语言,不是操作系统语言。DSH 的 Host 进程以 `ELECTRON_RUN_AS_NODE=1` 运行,拿不到 Electron 的 `app.getLocale()`;Node 的 `Intl` 在该进程里恒为 `en-US`,用它会把中文用户误判成英文,所以我们选择不用它。 - **自动模式跟的是界面语言,不是你输入的语言。** 界面是简体中文、你用英文提问,约束仍然是简体中文(这是设计意图:插件声明默认语言,不猜单轮输入)。想按输入语言变,只能手动切。 - **切档会改变 system prompt**,因此 DSH 会追加一个新的 system 节点(in-history 替换)。这是一次性的 token 开销,属于预期行为。
