DeepSeek Harness 插件

fire-disposal/dsh-mojibake-interceptor

Star 数 ★ 1 分类 工具与能力 收录于 2026-08-15

DSH 乱码拦截器 bundle:写入前特征值/编码回环检测乱码并复查放行(原样重试即通过),pwsh 写入编码执行前审计(ANSI/GBK/UTF-16/默认编码),Windows 与中文场景优先。

安装

# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)

dsh plugin --profile web add github:fire-disposal/dsh-mojibake-interceptor

装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。

README

给 DeepSeek Harness 装的乱码拦截插件:AI 把乱码写进文件之前先拦一次,让它复查;当前版本 0.3.0,对齐 DSH 0.2.2-alpha.2 插件协议。

状态:可用;要求:Node >=24.9.0、DSH >=0.2.2-alpha.2 <0.3.0;仓库:fire-disposal/dsh-mojibake-interceptor

本质

在写入前拦截乱码、靠字符统计与编码回环判断的 DeepSeek Harness 插件。

选型

基于 Cordis 的 DeepSeek Harness 插件,纯 JS ESM,运行依赖 iconv-lite,测试 Node runner。

  • 插件框架
    • DeepSeek Harness
      • Cordis 4
      • @deepseek-ai/dsh-tools
      • @deepseek-ai/schemastery
  • 核心
    • 原生 JS
    • iconv-lite
  • 测试
    • node:test
  • 分发
    • npm
    • cordis.patch.yml

功能

  • tools/pre-execute:扫 write / edit / str_replace_editor / apply_patch 的待写入文本,以及 pwsh / bash / terminal_send 的命令文本,命中就 deny 并附上特征与还原结果;补丁只扫新增行,不拦修复乱码时保留的旧行
  • tools/post-execute:扫 pwsh / bash / terminal_open / terminal_send / terminal_read / job_output / read 的捕获结果,输出乱码时注入通知
  • pwsh 写入编码审计:危险编码(-Encoding Default/ANSI/OEM/Unicode、GetEncoding(936)、chcp 非 65001)严重拦截;含非 ASCII 却没声明 -Encoding utf8 的按中等拦截
  • 16 类检测特征,覆盖 UTF-8↔CP1252/GBK/Big5 双向误读、UTF-16 残留、替换符、ANSI 转义、BOM 异常、字面转义与 HTML 实体
  • 三档模式 warn / block / ask,SHA-256 指纹键是「工具 + 路径 + 待写入文本」,LRU 表封顶 4096 条,不长期保留原始写入内容
  • 性能:门控正则先挡掉纯 ASCII(1 MB 约 2 ms),候选段按 maxRunChars 2048 / maxRuns 64 / maxFindings 8 止损
  • 测试 88 项全过(含 1 MB ASCII、200 KB 中文性能冒烟与最新工具协议行为)

启动流程

# 从 GitHub 安装;bundle 安装后重启 dsh web
dsh plugin --profile web add "github:fire-disposal/dsh-mojibake-interceptor#main"

# 本地开发(替换为实际绝对路径)
dsh plugin --profile web add link:/absolute/path/to/dsh-mojibake-interceptor

# 检查 bundle 已进入组合树
dsh --profile web --dump-config

dsh plugin --profile web remove dsh-mojibake-interceptor

npm install
npm test

package.json 用 engines.dsh 声明运行时装载兼容范围,dsh.bundle.patch 指向 cordis.patch.yml。用户可在 profile 的 cordis.patch.yml 覆盖 mojibake-interceptor 行;注意 config 是整行替换,不是深合并。

配置项:mode、tools、resultWatchTools、pwshEncodingGuard、minSeverity、excludePaths、maxFindings、maxRunChars、maxRuns、maxPreviewChars。

边界与已知问题

  • 拦截只在有结构化文本载荷的工具上生效;run_code、ctx.fs 这类入口拿不到待写入的纯文本,tools 列表也扩不过去。
  • 缺 iconv-lite 时运行时会自动降级(CP1252 与统计特征照常,GBK/Big5 方向失效),但测试不降级:不装依赖跑,regression-normal 里 5 项会失败。
  • GBK 扩展区、生僻字构成的乱码,回环到常用区之外可能漏报(gbk-as-cp1252 为压误报刻意收紧)。
  • 状态表在内存里,会话恢复后清空,「拦一次再放行」的记忆也随之丢失。

内容来自项目 README(GitHub)↗

链接

同类插件

查看整个分类 →

社区评论

评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。