DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Text Guard — DeepSeek Harness 插件(DSH Plugin)
← Plugins
T

dsh-text-guard

Text Guard

DeepSeek Harness 插件:在会话日志记录工具结果和传入消息之前,将配置的码点序列进行中和处理。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:7771sd/dsh-text-guard#f68b836ee7a1cef57386c3808de827f2af08fbe5
README兼容性版本

兼容性与来源证明

Text Guard 以 dsh-text-guard 发布,当前版本为 1.0.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
any
发布来源
github
Registry 更新时间
2026/10/5

版本

1.0.0stable
2026/10/5

相关插件

正在加载相关插件…

最新版
1.0.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
any
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/10/5
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录

相关插件

继续浏览 security-access 分类下经过校验的插件。

Experimental Auto Review@deepseek-ai/dsh-experimental-auto-review针对每个工具的 LLM 授权审查,适用于 DeepSeek Harness Auto 权限预设Cc Safety Netcc-safety-net编码代理 CLI 钩子——阻止破坏性命令和访问机密文件Doctor@linxin666/dsh-doctorDSH 配置档案的事务性救援模式,配备受监督的启动器、隔离的恢复容器、确定性修复、健康监控以及本地 Web 恢复控制台Mobiledsh-mobileDeepSeek Harness 移动端适配与安全访问插件,支持局域网、远程连接、Android App 和手机浏览器。

README

dsh-text-guard

A DeepSeek Harness plugin that neutralizes configured code-point sequences in tool results and in the messages entering a step, before the session log records them.

中文说明

The problem it solves

The official DeepSeek API rejects a whole request with 400 INVALID_REQUEST (Content Exists Risk) when it carries certain text. For the sequence observed in practice — the regional-indicator pair U+1F1F9 followed by U+1F1FC, which composes one flag emoji — character-level bisection showed the pair rejects the request while either character alone, the reversed pair, and other combinations are accepted.

Because every turn resends the stored history, a sequence that reaches the session log rejects every following turn of that session. The session becomes unusable: retrying does not help, restarting the app does not help, and the only way out is a new session. The usual way such a sequence arrives is not the user typing it, but fetched pages, file contents, or command output passing through a tool result.

What it does

It rewrites the configured sequences where content enters the log:

HookContent covered
tools/post-executean accepted tool result — web fetches, file reads, command output, subagent and workflow results
tools/ptc-dispatch-logthe durable log copy of one run_code sub-dispatch outcome
agent/pre-stepthe messages entering the step, including text a user pasted

Content without a match passes through untouched and keeps its original object identity, so an unaffected dispatch costs one regular-expression probe. The rewrite happens before the append, which is what keeps Session replay, fork, and every later request consistent — and it never puts the sequence back, because the replacement is pure ASCII.

Install

With the Harness CLI:

dsh plugin --profile <profile> add github:7771sd/dsh-text-guard

Or through the Plugin Manager's install field, using the same spec. The plugin has no dependencies and no build step.

Configuration

The shipped bundle patch mounts it with the wide mode. Every field can be overridden in your profile's cordis.patch.yml:

- id: text-guard
  config:
    mode: exact
    sequences: [[0x1F1F9, 0x1F1FC]]
    replacement: '[flag U+{codepoints}]'
    toolResults: true
    userMessages: true
    log: true
FieldDefaultMeaning
moderegional-pairsregional-pairs matches any two consecutive regional indicators (U+1F1E6–U+1F1FF); exact matches the configured sequences only.
sequences[[0x1F1F9, 0x1F1FC]]Code-point sequences mode: exact neutralizes; each entry is matched consecutively.
replacement[flag U+{codepoints}]Replacement template; every {codepoints} becomes the matched code points, for example U+1F1F9 U+1F1FC.
toolResultstrueNeutralize accepted tool results and run_code dispatch logs.
userMessagestrueNeutralize the messages entering a step.
logtrueLog one summary line per affected dispatch, naming the count and never the matched text.

Configuration changes are not hot: re-mount the bundle (disable and enable it) after editing the patch.

Why it hooks the log entry points

dsh-agent-loop deep-freezes request messages and documents that agent/request listeners cannot change request messages; the Harness rule is that everything the model sees must be reconstructable from the session log. A rewrite after the append would break that reconstruction, so the neutralizer runs where content enters the log instead of at the wire.

Verified

  • node test/text-guard.test.mjs — nine offline checks: content and value-form rewriting, block decisions passing through, a clean result returning the identical reference, message rewriting that preserves identity and startsRequestSeries, no mutation of inputs, both surfaces disabling cleanly, pair matching, and lone indicators passing through.
  • End to end in a live profile: with the plugin configured to neutralize an ASCII probe, a command whose output contained the probe reached the model already rewritten.

Not verified: the plugin has never been sent a real flag emoji by its author, because the experiment that proves the filter rejects one also destroys the session it runs in.

Limitations

  • Text that reaches a request through a system-prompt section — a skill file or an instruction file that itself contains a sequence — does not pass these entry points.
  • A rewritten user message is logged in its neutralized form while the chat client keeps displaying the text you sent, so the two views disagree about that message.
  • The rewrite is lossy by design. Do not mount it when the original text matters verbatim to the task.

License

MIT