🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

伪装阅读器 Tonited/dsh-stealth-reader

DeepSeek 客户端
Tonited39 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

把小说藏进日志流,鼠标一动就切回工作界面

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/Tonited/dsh-stealth-reader.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 39 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 3 处,展示前 3 条)
  • 写入本地文件
    deploy.mjs:28
    await mkdir(join(TARGET, 'lib'), { recursive: true })
  • 写入本地文件
    deploy.mjs:33
    await copyFile(from, to)
  • 读取本地文件
    deploy.mjs:34
    const info = await stat(to)
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 导入txt/epub小说
  • 伪装成日志流
  • 鼠标一动切回工作界面

在 DeepSeek Harness 会话界面里伪装成日志流读小说:导入 txt/epub,只覆盖右侧消息区,鼠标一动即回到工作界面。

README

由 DeepSeek 最新模型翻译生成
dsh-stealth-reader CI License: MIT 在 DeepSeek Harness 的会话界面里看小说。屏幕上永远是「一个正在跑的长任务」。 伪装阅读态 上图的右侧会话区里,小说正文和工作痕迹行交错出现,正一个字一个字长出来 ——顶部的标题栏与 Tab、底部的输入框、左侧的栏,全都是真实的界面,插件只占据中间那段消息区。 它是什么 一个 DSH 客户端插件(纯前端,宿主侧不做任何事)。导入 .txt / .epub,按一下快捷键,右侧会话区就变成一股正在流式输出的日志流: Read 第一章 山雨 [1/3] 沈砚背着书箱走到半山腰时,雨已经落下来了。 起初只是几点,落在青石板上洇开小小的圆。 "前面有座亭子。"走在后面的老仆喘着气说。 check why the deploy script is slow 沈砚抬头。雾气正从谷底涌上来,把山路吞掉了一半。 他加快了脚步。 小说段落以 DSH 自己的两种身份出现:AI 回复正文,或者带左侧细竖线的子内容(约七成是后者,视觉上就是"工具输出")。章节标题伪装成一次 Read 工具调用 —— DSH 的消息流里没有"章节标题"这种东西。 三个不显然的设计 工作痕迹行是真的。 日志流里那些工具调用、命令摘要、用户提问,来自你当前会话的真实历史,不是编出来的假日志。
展开完整文档(README 剩余 1 节)
dsh-stealth-reader

CI
License: MIT

在 DeepSeek Harness 的会话界面里看小说。屏幕上永远是「一个正在跑的长任务」。

伪装阅读态

上图的右侧会话区里,小说正文和工作痕迹行交错出现,正一个字一个字长出来 ——顶部的标题栏与 Tab、底部的输入框、左侧的栏,全都是真实的界面,插件只占据中间那段消息区。

它是什么

一个 DSH 客户端插件(纯前端,宿主侧不做任何事)。导入 .txt / .epub,按一下快捷键,右侧会话区就变成一股正在流式输出的日志流:

Read 第一章 山雨 [1/3]

沈砚背着书箱走到半山腰时,雨已经落下来了。

起初只是几点,落在青石板上洇开小小的圆。

"前面有座亭子。"走在后面的老仆喘着气说。

check why the deploy script is slow

沈砚抬头。雾气正从谷底涌上来,把山路吞掉了一半。

他加快了脚步。

小说段落以 DSH 自己的两种身份出现:AI 回复正文,或者带左侧细竖线的子内容(约七成是后者,视觉上就是"工具输出")。章节标题伪装成一次 Read 工具调用 —— DSH 的消息流里没有"章节标题"这种东西。

三个不显然的设计

工作痕迹行是真的。 日志流里那些工具调用、命令摘要、用户提问,来自你当前会话的真实历史,不是编出来的假日志。"这看起来就是我的会话"这件事因此是真的 —— 编出来的日志经不起多看两眼。

退出只认鼠标。 鼠标移动 1px 或点一下,立刻回到 DSH 真实界面。键盘不会退出 ——否则读到一半会被自己按没(翻页、跳章都要用键盘)。唯一例外是书单:它要靠鼠标点,所以在书单里鼠标不触发退出,出口是快捷键(见 ADR-0007)。

没有"书页模式"。 衬线字体 + 居中 + 大留白的排版一眼就是小说阅读器,那本身就是最大的暴露面。
所以只有一种形态:伪装成日志流的正文。

兼容性:DSH 0.1.7 适配(0.2.0)

0.1.7 改了客户端插件与基线原语的几处契约,本插件按实际安装产物逐条对齐(不是按文档 —— 有一处官方 .d.ts 注释至今还写着与运行时代码矛盾的说法)。
改动与物证都写在源码注释和 CHANGELOG 里,这里只列最容易踩的四个:

| 契约 | 0.1.7 的实际形态 | 不改会怎样 |
| MarkdownText / DisclosureRow | 是 React.memo(...) 的产物,typeof 为 'object'($$typeof = Symbol(react.memo)) | 用 typeof x === 'function' 判存在性会把它们判成"基线没有这个原语",整条渲染路径静默降级 |
| MarkdownText.labels | 可选 → 必填,且渲染器无保护解引用 | 正文里一旦出现代码块或脚注就 TypeError,那一段阅读流整条消失(只在特定章节复现) |
| 当前会话 id | SessionListState 没有 current 字段;sessions.binding(id) 只对已 retain 的会话有效 | 拿不到真实会话事件流,伪装内容会退化成硬编码模板(违反 ADR-0002) |
| 图标名 | Icon…Outline14 / Outline16 → Icon…OutlineRegular / Medium | 旧名在 0.1.7 里一个都不存在,图标全部消失 |

插件对旧版 DSH 仍然可用:图标走「新名 → 旧名」降级链,labels 兜底只在缺失时生效。

安装

需要 DeepSeek Harness 的 dsh CLI,以及一个启用了 Web 客户端的 profile(下面以 web 为例)。

从 GitHub 安装(推荐) —— 固定到一个具体 commit,装到的内容永远可复现:

dsh plugin --profile web add 'github:Tonited/dsh-stealth-reader#'

从 npm 安装:

dsh plugin --profile web add dsh-stealth-reader

从本地目录安装(改源码时):

dsh plugin --profile web add 'file:/path/to/dsh-stealth-reader'

三种方式都不需要手工登记:dsh plugin add 会把任何声明了 dsh.bundle 的依赖自动加进 profile 的 dsh.profile.bundles 层列表,卸载时也会自动移出。

装完重启 dsh web(新增插件行需要重启;之后的改动都是热替换,刷新页面即可)。

权限与风险

| 项目 | 情况 |
| 网络 | 不发起任何网络请求,无遥测、无外部服务 |
| 文件 | 只读你主动拖进窗口的书文件;不写工作区目录,不改 profile 文件 |
| 存储 | 书与进度只存在浏览器 IndexedDB(库名 dsh-stealth-reader),清除浏览器数据即消失 |
| 会话数据 | 会只读当前会话的消息历史(用来取真实工作痕迹行),仅在本地渲染,不外发 |
| DSH 本体 | 只挂 shell.overlay 与 conversation.input.dock 两个槽位;不修改、不替换任何 @deepseek-ai/* 官方包 |
| 依赖 | 零运行时依赖(epub 解压库在构建期打进 lib/client.js) |
| 生命周期脚本 | 无 preinstall / install / postinstall / prepare |

已知风险,请务必理解:

- 这是“紧急遮屏”,不是访问控制。 它只覆盖 DSH 的会话区。任务栏、窗口标题、浏览器标签页、历史记录、以及 DSH 之外的任何东西,它都管不了。不要把它当成对付技术审计的手段。
- 快捷键没有仲裁。 DSH 客户端插件没有键位绑定 API,插件只能自己挂 window 的 keydown 监听。
如果别的插件也用了 Ctrl+Shift+Alt+Z,按下时两边都会响应。要改键位见下方「手感旋钮」。
- stream 态下鼠标一动就退出,包括你只是想挪一下鼠标。这是刻意的:被撞见时没有时间判断状态。
书单是例外 —— 在书单里鼠标不触发退出(否则点不到书),此时要靠快捷键收场;而且书单里的书名是明文的,别让它长时间挂在屏幕上。
- 屏幕上会出现你真实在做的事。 工作痕迹行取自真实会话历史(路径会被脱敏),但它终究是你的会话内容 —— 在共享屏幕时请自行判断。

用法

| 你想做的事 | 操作 |
| 开始看书 / 藏起来 | Ctrl+Shift+Alt+Z(同一个键来回切) |
| 回到工作界面 | 动一下鼠标或点一下(书单里除外,那儿只能用快捷键) |
| 翻页 | 滚轮 / 空格 / PageDown |
| 上下微调 | ↑ ↓(一次滚十行正文) |
| 看得比它写得快 | 按住 Shift + ↓ / → 快进,松开回到正常速度 |
| 跳章 | ← →(也可用 [ ]),一次一章 |
| 快速跳章 | 按 L 打开书架,点书行右侧的 ≡ 展开步骤清单,滚动点选 |
| 换书 / 导入 | 按 L 打开任务列表;把文件拖进窗口即可添加 |

任务列表伪装成一份「最近的任务」,进度就是百分比:

任务列表

阅读进度

进度记的是你读到哪儿(已输出字符占全章的比例),不是滚到哪儿。

关掉再打开,会精确停在上次离开的地方,视口自动跟过去,从那儿继续长出来。
读到章末关掉就停在章末,想继续按 → 翻下一章。

导入

- .txt:自动识别 UTF-8 / GBK。
- .epub:插图会保留(渲染成占位图),DRM 加密的书会明确报错且不入库。
- 书只存在本机浏览器的 IndexedDB 里,不上传、不进入工作区目录。

手感旋钮

节奏、键位、占比都是源码常量,各自只有一处:

| 想调什么 | 去哪 |
| 逐字输出的节奏(速度 / 每行最短最长) | src/client/typing.ts → DEFAULT_TEMPO |
| 快捷键 | src/client/keys.ts → DEFAULT_SHORTCUT |
| ↑ ↓ 一次滚几行 | src/client/scroll.ts → LINES_PER_ARROW |
| 工作痕迹的占比 | src/client/stream.ts → DEFAULT_TOOL_OUTPUT_RATIO |

改完跑 pnpm run check && pnpm run deploy。

一个必须知道的取舍

伪装阅读牺牲了阅读舒适度:等宽字体、行间插着工作痕迹行,比在阅读器里读书累。
这是刻意的取舍 —— 目标是“屏幕任何时候看起来都像在工作”,而不是“读得舒服”。

开发

pnpm install
pnpm run check # 类型检查 + 构建 + 测试(171 个)
pnpm run build # 只构建
pnpm run deploy # 构建并拷进已装好的 DSH profile
pnpm run watch # 构建并监听

契约与设计理由在 SPEC.md、CONTEXT.md 与 docs/adr/; DSH 界面的实测数据(选择器、样式、事件形状)在 docs/dsh-conversation-ui.md。

为什么 lib/ 进版本库

构建产物 lib/ 是提交进仓库的,而不是发布时才生成。

从 git 安装第三方 DSH 插件时不应该执行构建脚本 —— 仓库里的 prepare 脚本是典型的供应链攻击面,
pnpm 默认就拒绝执行(ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED)。所以安装时直接消费仓库里
已经构建好的 lib/,全程没有任何生命周期脚本。

代价是产物可能与源码脱节,所以 CI 里有一条检查:源码改了但 lib/ 没重新构建会直接失败。
改完源码请务必提交重新构建后的 lib/。

许可

MIT。

截图与文档中的书籍《云中记》是为演示虚构的文本,不是真实出版物。
预览分享卡片长什么样 ↓Tonited/dsh-stealth-reader
分享 · DeepSeek Harness Hub
Tonited/dsh-stealth-reader

把小说藏进日志流,鼠标一动就切回工作界面

这是你的仓库?认领条目

回到顶部