# dsh-sidebar-image-zoom 一个给 [DeepSeek Harness(`dsh`)](https://github.com/deepseek-ai/deepseek-harness) 用的插件:让**右侧边栏文档预览里的图片可以缩放**。 dsh 内置的图片预览是**刻意做成静态的** —— 官方源码注释原话是渲染时 *"without fitting or scaling them to the pane"*,即按原始尺寸显示,只靠外层容器滚动。看图标没问题,但看大截图、架构图、流程图就很难受。本插件把这个渲染器替换成可自由缩放的。 [English README](./README.md) ## 安装 ```bash dsh plugin --profile web add github:Meowrium/dsh-sidebar-image-zoom ``` 重启 `dsh web`,然后在右侧边栏打开任意图片(新标签页 → **工作区文件** → 选一张图)。 > 需要 `dsh` 0.1.5 系列(本插件在 `0.1.5-rc.1` 上开发并实测)。 > 它扩展的「右侧边栏文档预览」在 0.1.5 之前不存在。 ## 用法 | 操作 | 效果 | | --- | --- | | **鼠标滚轮** | 缩放,**以光标为锚点** —— 指针下的那个像素保持不动 | | **拖拽** | 平移(放大到超出窗口后有效) | | **双击** | 在 适应窗口 ↔ 1:1 之间切换 | | `适应窗口` | 整图适配窗口 | | `适应宽度` | 只按宽度适配 | | `1:1` | 原始尺寸,一个图像像素对应一个屏幕像素 | | `+` / `−` | 步进缩放 | | `+` / `-` / `0` / `1` | 键盘同上(0=适应,1=原始尺寸) | 图片**默认以 1:1 打开**(保留内置手感),工具栏显示当前百分比。缩放范围 10%–1200%。图片小于窗口时自动居中;大于窗口时平移会被夹紧,不会把图拖出视野。 ## 工作原理 只使用公开扩展点 —— 不猴补丁、不碰任何私有 DOM 属性: - `ctx.documentPreviews.register({ id, extensions, priority: 'extension', loading: 'bytes-complete' })` —— 注册表官方文档写着 *"External implementations win over product implementations"*,所以 `extension` 优先级会接管这 8 种图片后缀(`png jpg jpeg gif webp bmp ico svg`)。 - `ctx.slots.register({ name: 'sidebar.right.tab.document', key: }, Body)` —— 带 key 的文档主体槽位,key 与上面的 id 一致。 组件拿到的是**完整字节**(`content.kind === 'bytes'`),转成 Blob URL(卸载时必定回收),然后自己实现缩放/平移视图。 ## 包结构 ``` package.json dsh.bundle.patch → cordis.patch.yml ;dsh.client → lib/client.js cordis.patch.yml 插入 bundle 条目 lib/index.js host 半(空实现 —— 本插件纯浏览器侧) lib/client.js 浏览器半 —— 渲染器注册 + 缩放组件 ``` ## 说明 - 只**增加**交互,不改变图片的加载方式或来源。 - 卸载后即恢复 dsh 内置行为 —— 内置实现依然注册着,本插件只是在优先级上压过它。 - 关闭标签页后所有监听、样式、观察器与 object URL 都会释放,无残留。 ## 许可 [MIT](./LICENSE)