DSH Chat Privacy Blur · 对话隐私遮罩
A display-layer privacy guard for the DeepSeek Harness (DSH) Web GUI: every question and every answer in the conversation is drawn blurred, and only the row under the pointer shows its original text. Made for an open-plan office, a shared screen, or a screen recording.
DSH Web 对话的显示层隐私遮挡:提问与回答一律画成模糊,鼠标停在哪一条,才显示那一条的原文。给工位旁边有人、共享屏幕、或者正在录屏的时候用。
Features / 功能
- Blurs the question and answer rows by default; hovering (or keyboard focus) reveals that one row and re-blurs it when the pointer leaves.
- 默认全部模糊,鼠标停在哪一条显示哪一条;键盘 Tab 聚焦进某条同样显示,移开立即恢复模糊。
- Leaving the window (Alt+Tab, another app, a hidden tab) withdraws the reveal at once: the mask becomes
Always blurreduntil the window is focused again, so a row you left the pointer on is never readable behind your back. - 离开窗口(Alt+Tab、切到别的应用、标签页被隐藏)立刻收回显示:遮罩临时变成「始终模糊」,回到窗口才恢复你选的模式——指针停在某条上也不会留在那里露着。
- One control below the composer cycles three modes —
Off/Hover to reveal/Always blurred— and the choice is remembered per browser. - 输入框下方一个按钮循环切换三档:
关闭/悬停显示/始终模糊,选择按浏览器记住,换会话、重开窗口都保持。 - Only drawn pixels change: message text, copy actions,
/commands and the model input keep their original characters, and the stylesheet is added and removed with the control. - 只改画出来的像素:正文、复制、模型输入都保持原样;样式表跟着控件挂载与卸载,不留全局残留。
- Follows the host theme (
--dsw-alias-*tokens), light and dark, and both interface languages. - 跟随宿主主题令牌与界面语言,浅色/深色都对。
Modes / 三种模式
| Mode / 模式 | Behaviour / 行为 |
|---|---|
| 关闭 · Off | Nothing is masked; identical to a host without the plugin. |
| 悬停显示 · Hover to reveal (default) | All rows blurred; the hovered or focused row shows its text, withheld while the window is unfocused. |
| 始终模糊 · Always blurred | All rows stay blurred, even under the pointer. |
The mode is stored in localStorage under dsh-chat-privacy-blur:mode. Clearing it falls back to hover.
模式存在 localStorage 的 dsh-chat-privacy-blur:mode,删掉就回到默认的「悬停显示」。
Focus lock / 失焦上锁
A hover or keyboard reveal is a pointer/focus state, and that state outlives the window losing focus: the row you left the cursor on — or one whose copy button still holds focus — would stay readable while you look at something else. So while the window is unfocused or the page is hidden, the mask is drawn as Always blurred, the control reports the lock in its tooltip, and the chosen mode returns with the focus. Off stays off: a mask you turned off is never forced back on.
悬停和键盘聚焦都是「指针/焦点状态」,而这两种状态在窗口失去焦点后依然成立:你指针停留的那条、或某个刚被点过的按钮所在的那条,会一直露着。所以窗口失焦或页面被隐藏时,遮罩改画成「始终模糊」,控件在提示里说明已上锁,回到窗口再恢复你选的模式。关闭 就是关闭:被关掉的遮罩不会被强行打开。
What is blurred / 模糊范围
Masked rows are selected by the conversation row attributes the host already publishes for its own layout:
| Row attribute / 行属性 | Content / 内容 |
|---|---|
data-chat-flow-kind="user" |
your question / 你发的问题 |
data-chat-flow-kind="assistant-step" |
the assistant reply, including the compacted answer row / 助手回答,含折叠成小卡的最终回答 |
data-chat-flow-kind="steering" |
input injected mid-turn / 回合进行中插入的补充输入 |
Not masked: tool-call cards, the reasoning wrapper, the sidebar session list, the composer, /goal bar and the turn previews.
不遮挡:工具调用卡片、思考过程外层、侧边栏会话列表、输入框、/goal 输入条与轮次预览。
If a future host renames those row attributes, nothing gets blurred — the plugin degrades to doing nothing rather than breaking the page. 如果宿主以后改了这些行属性名,插件会退化成"什么都不糊",不会弄坏页面。
Install / 安装
In DSH, ask your agent / 在 DSH 中对 AI 说:
安装插件 https://github.com/outmanwt/dsh-chat-privacy-blur/releases/latest/download/dsh-chat-privacy-blur.tgz
Or use the plugin-manager tool with these arguments / 也可调用插件管理工具,参数:
{
"action": "install_bundle",
"target": "https://github.com/outmanwt/dsh-chat-privacy-blur/releases/latest/download/dsh-chat-privacy-blur.tgz"
}
For CLI-managed profiles / 对于自行管理的 CLI profile:
dsh plugin --profile YOUR_PROFILE add https://github.com/outmanwt/dsh-chat-privacy-blur/releases/latest/download/dsh-chat-privacy-blur.tgz
Desktop users should install through their running app's plugin manager, not an unrelated web profile. Follow the installation result for refresh/restart instructions.
桌面版请通过正在使用的应用安装到当前 profile;不要另建 web profile。安装后按宿主提示刷新或重启,输入框下方才会出现「悬停显示 / 关闭 / 始终模糊」按钮。
Local development / 本地开发
git clone https://github.com/outmanwt/dsh-chat-privacy-blur.git
cd dsh-chat-privacy-blur
npm test
npm pack --dry-run --ignore-scripts
Install the absolute directory through plugin_manager with action: install_bundle. There is no build step: the checked-in client file is the browser artifact.
用绝对路径通过 plugin_manager 的 install_bundle 安装本地目录。没有构建步骤:仓库里的 client 文件就是浏览器产物。
Tuning / 调整模糊强度
The radius defaults to 6px and reads the --dsh-chat-blur custom property, so a theme layer can change it without touching the plugin:
:root { --dsh-chat-blur: 10px; }
Compatibility / 兼容说明
Developed against DSH 0.2.1-rc.4 (desktop, Web GUI). Uses the client module loader, one conversation.composer.dock entry, the locale dictionary registry, and the host's own conversation row attributes. Older or newer hosts are unverified; the mask is a stylesheet only, so a host change costs the blur, not the page.
在 DSH 0.2.1-rc.4(桌面版 Web GUI)上开发。依赖客户端模块加载器、conversation.composer.dock 一个槽位、locale 词条注册,以及宿主自己的对话行属性。其他版本未验证;遮罩只是样式表,宿主改版最坏情况是"不再模糊",不会影响页面。
Privacy / 数据
No network requests, no analytics, no credential access, no host state. The mode lives in the page's localStorage; the plugin reads nothing from the session. Masking is visual: text stays in the DOM and can still be selected, copied, or read by assistive technology, so it is not an access control.
不联网、不埋点、不碰凭据、不写宿主状态;模式只存在页面 localStorage,插件不读取会话内容。遮挡只是视觉层:文字仍在 DOM 里,仍可选中、复制、被辅助技术读到,所以它不是访问控制。
Verification / 验证
npm test runs scripts/check.mjs: manifest and patch, exported display resources, client syntax, then the real client.js loaded through window.__ModuleLoader__ with the mode control mounted in a small re-rendering hook runtime — slot registration, dictionary parity, the exact mask stylesheet of all three modes, the click cycle and its persistence, and the focus lock driven through real blur, focus and visibilitychange events. Painted pixels are checked by eye on the running page, not by the gate.
npm test 跑 scripts/check.mjs:清单与 patch、导出资源、语法,然后用 window.__ModuleLoader__ 真实加载 client.js,把模式控件挂在一个会重渲染的小 hooks 运行时里,检查槽位注册、词条对齐、三档模式的样式表内容、点击循环与持久化,以及通过真实 blur / focus / visibilitychange 事件驱动的失焦上锁。画出来的像素靠人眼在页面上看,不靠这个门禁。
Releases / 持续发布
See RELEASING.md. Tags matching the package version trigger GitHub Actions to check the bundle and attach a fixed-name dsh-chat-privacy-blur.tgz plus SHA-256 checksums to a GitHub Release. The package is distributed through GitHub; it is not published to npm.
The @local/dsh-chat-privacy-blur name is retained to preserve the installed identifier. It is a package identifier, not a claim of npm availability.
Community market / 市场收录
The market application reads the Awesome DSH Plugin catalog. Listing requires a separate catalog PR and maintainer acceptance; a public repository alone does not make the plugin searchable there. See marketplace/outmanwt__dsh-chat-privacy-blur.yml for the proposed entry.
Credits / 致谢
Uses the DSH/Cordis extension APIs. The masked row attributes are the ones the MIT-licensed DeepSeek Harness built-in chat and conversation UI packages publish for their own layout. See NOTICE.
License
MIT © 2026 outmanwt.
No comments yet. Be the first to write one.