前言¶
DeepSeek Harness(下称 DSH)的 Web 界面布局是固定的:顶栏、状态栏、任务条、输入栏各占一处。想在录屏、投屏或者专注阅读时让对话区更干净,通常只有改源码这一条路,改完还得跟着上游更新维护。
dsh-layout-control 提供了另一种做法:以插件形式往页面里注入一枚可拖动的「布局」浮层,隐藏会话装饰、把输入栏停靠到四角、按类型过滤对话内容,全程不改 DSH 源码。下面介绍它的功能、安装方法和使用细节。
这是什么¶
dsh-layout-control 是面向 DSH Web 端的独立布局插件,作者 LzqSuShi,代码以 MIT 许可证发布。它只使用 DSH 的公开服务(ctx.layout、ctx.slots)和稳定 DOM 属性([data-slot]、[data-composer-seat]、[data-chat-flow-kind] 等),不碰 CSS Module 哈希类名,因此不依赖对 DSH 内部实现的猜测。
它能解决三类问题:
- 隐藏界面装饰(顶栏、状态栏、任务条、其它浮层);
- 把输入栏停靠到屏幕四角,腾出中间的对话区;
- 按类型过滤对话内容(比如只看回复正文、隐藏思考过程)。
核心功能¶
- 入口:右下角圆形按钮打开「布局」面板,可拖动;拖到屏幕边缘会贴边收进一半,鼠标移上去再展开。
- 布局快照:默认 / 专注 / 沉浸三档。
- 侧边栏:展开 / 图标栏 / 隐藏,通过
ctx.layout控制。 - 输入栏:完整 / 紧凑 / 不显示三档;停靠位置是四个角——左上 / 右上 / 左下 / 右下。
- 详情栏:开关;「清空内容」会派发
dsh-details-clear事件。 - 会话装饰:可分别隐藏顶栏、状态栏、任务条、其它浮层。
- 对话内容过滤:全部 AI 输出、用户消息、思考、工具调用、任务清单、回复正文,可按需隐藏。
- 宽度调节:停靠后内侧有 8px 拖动手柄,宽度可在 280–560px 之间调整。
四个角停靠后,对话仍在中间纵向滚动,输入卡片连同待办一起贴在选中的角上;同侧空出来的位置放可折叠的会话摘要卡,点卡片标题即可折叠 / 展开。
圆形入口的位置记在本次标签页的 sessionStorage,刷新标签页前不会跑回右下角。
安装与启用¶
先装插件,再重启 dsh web,最后在浏览器里按 Ctrl+F5 强刷页面。
GitHub 安装(推荐):
dsh plugin --profile web add github:LzqSuShi/dsh-layout-control
本地开发安装:
dsh plugin --profile web add "link:C:\liZhiQi\dsh-layout-control"
npm 发布之后,也可以直接按包名安装:
dsh plugin --profile web add dsh-layout-control
本包已提交预构建的 lib/,git 安装不需要 prepare 构建许可。包内的 package.json 声明了 dsh.bundle.patch(可被 dsh plugin add 安装)和 dsh.client(Web 端注入 layout),所以上面一条命令就能完成安装。
卸载时执行:
dsh plugin --profile web remove dsh-layout-control
重启 dsh web 生效。
典型用法¶
经过上面的步骤,页面右下角会出现圆形按钮。日常操作如下:
- 打开面板:单击圆形入口;再次单击或按 ESC 关闭。
- 切换快照:在「布局」面板里选默认 / 专注 / 沉浸,一键切到不同布局档位。
- 停靠输入栏:选「输入栏」的左上 / 右上 / 左下 / 右下,把输入单元停到对应角;拖内侧 8px 手柄改宽度(280–560px)。
- 清理画面:勾选隐藏顶栏、状态栏、任务条;在「对话内容」里按需隐藏思考、工具调用、任务清单等节点,只留回复正文。
- 收起摘要:停靠后同侧的会话摘要卡,点标题可折叠。
实现方式¶
插件客户端模块通过 window.__ModuleLoader__.load() 注册,导出 { isPlugin, inject: ["layout", "slots"], apply }。apply(ctx) 向 shell.overlay 注册一枚 React 浮层(id:dsh-layout-control),根节点带 data-layout-control 属性,所以「隐藏装饰层」不会把本按钮一起藏掉。
隐藏、停靠、过滤全部落在 document.documentElement 的属性加一张样式表上,选择器只打公开锚点。左右停靠时 [data-conversation-scroll] 仍是纵向滚动容器,对话列 height: max-content,输入座 position: sticky 且高度等于滚动口可视高度。拖动手柄用 CSS ::before 绘制,宽度调整走 window 指针事件,不往 React 树里插节点。
适用场景与注意¶
适合需要录屏、投屏演示、截图归档,或者想在海量对话里按类型筛选内容的 DSH 使用者。装好即用,不污染 DSH 源码,卸载干净。
使用前有几点需要知道:
- 隐藏只是
display: none,对应的 React 树仍挂在页面上,并不省运行时开销。 - 「清空详情内容」有前提:依赖页面里已有的清空控件,或监听
dsh-details-clear的 DSH 版本;原版可能清不掉 Inspect 选中项。 - 停靠后模型选择不变:Model / Effort 仍在输入卡片工具条里,插件不改 DSH 就无法把它移到卡片上方。
- 状态大多不持久化:除圆形入口位置记在
sessionStorage外,其它查看状态刷新后回到默认快照;其它浮层仍可能与停靠后的输入栏重叠。
另外提醒一点:插件以当前 dsh 进程的权限运行,安装任何第三方插件前,建议先查看源码和许可证再决定。本插件代码为 MIT 许可证,与 DeepSeek 无官方关联。
结尾¶
dsh-layout-control 把「调布局」从改源码变成点几次面板:隐藏装饰、停靠输入栏、过滤对话节点,装上就能用,卸载也不留痕迹。项目地址与社区目录页如下:
- GitHub:https://github.com/LzqSuShi/dsh-layout-control
- 社区目录页:https://www.skillhub.cn/plugins/LzqSuShi/dsh-layout-control