前言¶
在 DeepSeek Harness(DSH)里打开截图、架构图或日志里的位图时,右侧边栏会走内置图片面板:位图先被缩放到适应面板,之后交互空间有限。内置控件是一条 + / − / 适应窗口 浮条,鼠标不挪到底边往往看不到;缩放以面板中心为锚点,你正在看的区域不会跟着光标走,也没有拖拽平移。对需要读小字、对照局部细节的场景,这个体验容易成为日常摩擦。
下面介绍社区维护的客户端插件 dsh-sidebar-image-zoom(维护者 MYX-0211):它通过 DSH 的文档预览扩展机制,直接顶替内置位图渲染器,提供以光标为锚点的滚轮缩放和 pointer capture 拖拽平移。插件未发布到 npm,需按仓库说明手动 stage 到 profile;DSH 在 boot 时加载插件,装完后需重启一次。
这是什么¶
dsh-sidebar-image-zoom 是 DSH 的客户端插件(分类:客户端),当前版本 0.1.0,许可证 MIT。一句话定位:在 DSH 右侧边栏为图片提供 Pointer-anchored wheel zoom(滚轮以光标下像素为锚点缩放)和 drag-to-pan(拖拽平移),并替换内置图片视口(built-in image viewport)。
DeepSeek Harness 的生态理念是「一切皆插件」;SkillHub 等社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系。本文安装与用法均以仓库 README 为准。
与内置查看器的差异¶
内置面板会把位图缩放到适应窗口后基本止步;本插件打开时同样可以从「适应窗口」状态开始,但之后的行为由下面手势与底部常驻控制条驱动。自己滚轮调出来的缩放比例不会因面板尺寸变化而被重置,只有点「适应窗口」或换一张图才会回到适应。
核心功能¶
手势与快捷键¶
| 手势 / 按键 | 效果 |
|---|---|
| 滚轮 | 缩放,锚定在光标下的像素 |
| 拖拽 | 平移(pointer capture,光标可移出面板) |
| 双击 | 在「适应窗口」与 1:1 之间切换 |
F / Esc |
适应窗口 |
1 |
100% |
+ - = _ |
以面板中心为锚点步进缩放 |
底部控制条常驻显示:适应窗口 · 1:1 · − · 百分比 · +。百分比读数随当前比例实时更新。
接管方式(无需额外配置)¶
插件通过 ctx.documentPreviews 认领与内置相同的图片后缀,并以 priority: "extension" 注册。DSH 的匹配排序里,非 builtin 的 priority 会排在内置位图查看器(priority: "builtin")前面,因此不用配置、也没有用户开关,扩展会直接接管右侧图片面板。正文注册在 keyed 子槽 sidebar.right.tab.document,key 与注册表 id 一致。
实现上:binaryExtensions 必须是 extensions 的子集;SVG 故意不放进 binaryExtensions,纯文本渲染器仍可用于读矢量源码。渲染器外层有 error boundary,避免单张图抛错导致整个侧栏空白。
降级与提示¶
字节不匹配已知签名、后缀与真实格式不符、或标签页尚未拿到内容时,会显示对应短提示,而不是留空面板。
安装与启用¶
插件没有发布到 npm,DSH 的「插件 → 添加插件」按 registry 解析包名的流程找不到它。官方做法是:克隆仓库,把包放到 profile 能解析的位置(一般为 <profile>/node_modules/dsh-sidebar-image-zoom/),并在 profile 的 package.json 里同时写入 dependencies 与 dsh.profile.bundles,然后重启 DSH。
git clone https://github.com/MYX-0211/dsh-sidebar-image-zoom.git
完成 clone 后,将包目录放到上述 node_modules 路径,并手动编辑 profile 的 package.json(dependencies + dsh.profile.bundles)。
在 Windows 上,仓库提供 install.ps1 / uninstall.ps1,针对标准 profile 路径自动 stage 并改写 manifest;底层使用 tools/manifest_edit.py 逐行编辑 manifest(非 JSON round-trip),写盘前会生成带时间戳的 package.json.bak-*。若执行策略拦截 .ps1,可按 README 用 UTF-8 读取后执行:
Invoke-Expression ([IO.File]::ReadAllText(".\install.ps1", [Text.Encoding]::UTF8))
Invoke-Expression ([IO.File]::ReadAllText(".\uninstall.ps1", [Text.Encoding]::UTF8))
卸载与重装脚本设计为幂等;README 说明卸载后再安装的往返可与原始 manifest 逐字节相同。
兼容性(仓库声明):针对 DSH 0.2.0-rc.2、desktop profile 构建并测试;package.json 中 dsh.compatibility.dsh 为 >=0.2.0-rc.2,profiles 含 web 与 desktop。插件依赖 DSH 内部槽位名与注册表语义,DSH 升级后若失效,表现可能是侧栏面板空白;处理方式为禁用该 bundle 后重新加载,通常不会拖垮其余 UI。
安装前请自行阅读源码与 MIT 许可证;插件在当前 DSH 进程权限下运行,与任何第三方扩展一样,信任边界取决于你安装的 bundle。
典型用法¶
- 按上一节完成安装并重启 DSH。
- 在 DSH 右侧边栏打开任意受支持的位图(插件认领的后缀与内置位图预览一致;矢量 SVG 仍可由文本类渲染器查看源码)。
- 需要看局部细节时:滚轮在目标区域上放大(锚点跟随光标);拖拽平移画面;双击在适应窗口与 1:1 间切换;或用底部条与
F/1/+-等快捷键。 - 调整窗口或大小时,若未点「适应窗口」或未换图,当前缩放比例会保留。
仓库测试用例中,滚轮缩放断言「光标下图像点移动 0.00px」;拖拽平移断言位移与指针 delta 一致(例如 (-140, -90)),可作为行为预期的参考。
开发与自测(可选)¶
若你 fork 后改 lib/client.js,可在仓库根目录运行:
npm install
npm test
测试用 puppeteer-core 驱动本机 Edge/Chrome(不 bundled Chromium),浏览器路径可通过 PUPPETEER_EXECUTABLE_PATH 指定,例如:
PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium npm test
package.json 要求 Node >= 20。完整测试约 30 条断言,覆盖注册契约、控制条、双击切换、损坏文件提示等。
结尾¶
dsh-sidebar-image-zoom 解决的是 DSH 右侧边栏读图时的缩放锚点与平移缺口:用扩展优先级替换内置视口,把滚轮缩放绑在光标下、把拖拽平移做成默认可用,并保留适应窗口与 1:1 等快捷方式。适合经常在 Harness 里对照截图、界面稿或带小字图片的开发者;安装路径以手动 stage 为主,装完记得重启 DSH。