前言¶
在 DSH(DeepSeek Harness)的 Web GUI 里,模型输出的 markdown 表格经常很长或很宽:行数多的表格要在对话流里上下滚动才能看全,超宽的表格要左右拖动才能看到右侧列。dsh 从 0.1.1-rc.2 起为 4 列以上的宽表加了 md-table-wide 分支,把表格扩展到内容列两侧留白,但默认 overflow-x:hidden、只在 hover 时出现滚动条,阅读体验仍然受限。
dsh-plugin-table-zoom 针对的就是这个问题:在长表格旁自动注入一个「⛶ 浮窗查看」按钮,点击后弹出独立可滚动的浮窗完整展示表格,并支持一键复制为 Markdown。DSH 的理念是「一切皆插件」,这类 Web GUI 增强正是通过 bundle 机制挂进 profile 实现的。下面介绍它的功能、安装方式和工作原理。
这是什么¶
dsh-plugin-table-zoom 是 DeepSeek Harness (dsh) Web GUI 的聊天表格浮窗插件,由 Pasumao 维护,MIT 协议,当前版本 0.3.4。定位是纯前端 DOM 增强:不改核心包、不注册工具、无服务端逻辑、零运行时依赖。
它解决的问题很具体:聊天里行数多的长表和横向溢出的宽表在对话流里一次看不完。插件把这些表格变成可以独立滚动、缩放、移动、复制的浮窗,聊天本身不受影响。
核心功能¶
浮窗查看与复制¶
- 长表判定:≥ 9 行(含表头),或横向溢出超过 2px 的表格,下方自动出现右对齐的「⛶ 浮窗查看」按钮;短表不打扰。
- 点击按钮弹出浮窗:标题显示「表格 · N 行 × M 列」,正文横竖均可滚动;关闭按钮、Esc、点击遮罩均可关闭,打开期间锁定聊天页滚动。
- 浮窗头部的「复制为 Markdown」按钮一键复制整表,单元格内联换行折叠、管道符转义。
- 浮窗里展示的是原表格的克隆,聊天里的表格保持不变,也不会被重复增强。
尺寸、位置与缩放¶
- 右下角手柄拖拽改尺寸,最小 320×200,最大到视口留白。
- 每次打开自适应:宽度按表格内容决定(窄表不撑满、超级大表铺满视口可用宽度,下限 320),位置居中,缩放 100%。插件不记忆任何布局,关掉再开即回到自适应状态。
- 按住标题栏可把浮窗拖到任意位置,自动限制在页面内;位置只影响当次打开。
- Ctrl+滚轮缩放表格字体,范围 60%–250%,步进 10%,标题栏实时显示百分比;缩放不记忆,每次打开回到 100%。
阅读与选择¶
- 普通左键在表格(含放大后)里拖动即可框选文字,不会被平移劫持。
- 表格超宽/超高时,按住空格再拖动正文可左右/上下平移;grab 光标只在按住空格时出现,触屏走原生滚动。
- 滚动条加深加粗,浅色主题下也能看清。
- 列宽上限与聊天内一致(
min(30vw, 320px)),超宽列自动换行收缩。
兼容性处理¶
- 针对 dsh
0.1.1-rc.2起的md-table-wide宽表分支,插件注入一条覆盖规则,把宽表拉回内容列宽度并常驻横向滚动条,恢复旧版「超宽在会话列内滚动查看」的体验;旧版 dsh 没有该类名,规则不命中,行为不变。 - 只认
tableScroll容器内的表格,跳过浮窗自身与 image-tools lightbox 内的表格,不影响其他插件。 - 依赖浏览器的
MutationObserver/requestAnimationFrame,无 DOM 环境自动禁用。
安装与启用¶
本插件是纯客户端插件,需作为 bundle 挂载进 dsh 的 Web profile(与 dsh-notify / dsh-plugin-image-tools 同款机制)。
1、在 profile 目录(例如 ~/.dsh/profiles/web)安装依赖:
npm install dsh-plugin-table-zoom
# 或从 GitHub 直装
npm install github:Pasumao/dsh-plugin-table-zoom
2、在 profile 的 package.json 的 dsh.profile.bundles 里加入该插件:
"dsh": {
"profile": {
"bundles": [
/* ...已有的 bundle... */,
"dsh-plugin-table-zoom"
]
}
}
3、在 profile 目录执行 pnpm install(或 npm install);
4、重启 dsh web(launcher 重新拉起),新插件才会进入浏览器 bundle。
无需配置¶
安装即用,没有配置项:
- 不读取环境变量,不需要 API Key / token,不写配置文件;
- 长表判定阈值(≥ 9 行 / 横向溢出 2px)为内置默认值;
- 样式跟随 DSH 主题 CSS 变量自适应,不引入独立主题配置。
依赖方面,package.json 声明 peerDependencies 为 @deepseek-ai/cordis ^4.0.1,engines 要求 node >=18。
本地开发与调试¶
源码安装:
git clone https://github.com/Pasumao/dsh-plugin-table-zoom.git
cd dsh-plugin-table-zoom
npm install
若以本地目录调试,可用 link: 依赖替换安装步骤的第 1 步:
"dsh-plugin-table-zoom": "link:D:/path/to/dsh-plugin-table-zoom"
开发命令:
npm run selfcheck # 纯函数离线测试(识别/长表判定/Markdown 序列化)
npm run smoke # selfcheck + 假 DOM 端到端冒烟(按钮注入/浮窗开合/复制)
npm run pack # 打包
工作原理¶
- 服务端半边(
lib/index.js)是空实现。插件以「自带 bundle patch」方式挂载进 profile,客户端半边由dsh.client声明经/plugins/dsh-plugin-table-zoom/client.js送达浏览器。 - 客户端半边(
lib/client.js)用 MutationObserver 观察document.body,rAF 合帧扫描 markdown 表格(核心渲染器把表格包在类名含tableScroll的容器里),对长表在容器后注入按钮行。 - 浮窗复用 image-tools 的 lightbox 模式:纯 DOM 单节点变更,不插入/移除 React 管理的结构,重渲染时安全。
适用场景与注意¶
- 适合经常在 dsh web 里让模型输出对比表、参数表、长清单的用户;偶尔才出现短表的会话基本感知不到插件存在。
- 插件以当前 dsh 进程的权限运行,安装前建议先检查源码与许可证(MIT)。
- 安装后需重启
dsh web才生效。 - 按仓库声明,代码与文档由 AI 辅助生成(DeepSeek Harness),均经人工审查与实机验证(
npm run smoke)。 - 同系列已发布插件可搭配使用:dsh-notify、dsh-plugin-choice-refresh、dsh-plugin-dev-kb、dsh-plugin-image-tools、dsh-plugin-workbench、dsh-plugin-windows-guard。
结尾¶
dsh-plugin-table-zoom 用一个按钮解决了聊天表格「看不完、复制难」的问题:长表弹出浮窗独立滚动,横竖都能看全,还能缩放、平移、一键复制为 Markdown,且不改核心包、无需配置。如果你常在 DSH Web GUI 里读表格,值得装一个试试。
- GitHub 仓库:https://github.com/Pasumao/dsh-plugin-table-zoom
- 社区插件目录页:https://www.skillhub.cn/plugins/Pasumao/dsh-plugin-table-zoom (目录为独立社区站点,与 DeepSeek / 幻方无官方从属关系;该地址来自插件收录线索,仓库资料中未出现,供参考)