滚轮以光标为锚点缩放图片,拖拽平移查看细节
29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/4 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add MYX-0211/dsh-sidebar-image-zoom该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · vision
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 32 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 光标锚点滚轮缩放
- 拖拽平移查看细节
指针锚定的滚轮缩放和拖拽平移,用于 DeepSeek Harness 右侧边栏的图片,替换内置图片视口。
README
由 DeepSeek 最新模型翻译生成English · 简体中文
dsh-sidebar-image-zoom
DSH 右侧边栏的图片查看器:滚轮以光标为锚点缩放 + 拖拽平移。
DSH 内置的图片面板只会把位图缩放到适应面板,就到此为止。它唯一的控件是一条 + / − / 适应窗口 浮条,鼠标不挪到底边根本不出现;而且缩放始终以面板中心为锚点,你正在看的地方不会跟着你走。完全没有拖拽平移。 本插件直接顶替掉这个渲染器。
适应窗口:整张图先缩放到装得下,这是打开时的状态
手势
| 手势 | 效果 |
| 滚轮 | 缩放,锚定在光标下的那个像素 |
| 拖拽 | 平移——用 pointer capture,光标可以中途移出面板 |
| 双击 | 在 适应窗口 ⇄ 1:1 之间切换 |
| F / Esc | 适应窗口 |
| 1 | 100% |
| + - = _ | 以中心为锚点步进缩放 |
| 底部控制条 | 常驻显示:适应窗口 · 1:1 · − · 百分比 · + |
百分比读数跟着实时比例走。自己滚出来的缩放归你自己:面板尺寸变化不会把它重置,只有点「适应窗口」或换一张图才会回到适应。
滚轮以光标为锚点放大到 182%:原本看不清的小字现在读得出来
安装
插件没有发布到 npm,所以 DSH 的 插件 → 添加插件 流程(它按 registry 规格解析包名)找不到它。
展开完整文档(README 剩余 1 节)
English · 简体中文
dsh-sidebar-image-zoom
DSH 右侧边栏的图片查看器:滚轮以光标为锚点缩放 + 拖拽平移。
DSH 内置的图片面板只会把位图缩放到适应面板,就到此为止。它唯一的控件是一条 + / − / 适应窗口 浮条,鼠标不挪到底边根本不出现;而且缩放始终以面板中心为锚点,你正在看的地方不会跟着你走。完全没有拖拽平移。 本插件直接顶替掉这个渲染器。
适应窗口:整张图先缩放到装得下,这是打开时的状态
手势
| 手势 | 效果 |
| 滚轮 | 缩放,锚定在光标下的那个像素 |
| 拖拽 | 平移——用 pointer capture,光标可以中途移出面板 |
| 双击 | 在 适应窗口 ⇄ 1:1 之间切换 |
| F / Esc | 适应窗口 |
| 1 | 100% |
| + - = _ | 以中心为锚点步进缩放 |
| 底部控制条 | 常驻显示:适应窗口 · 1:1 · − · 百分比 · + |
百分比读数跟着实时比例走。自己滚出来的缩放归你自己:面板尺寸变化不会把它重置,只有点「适应窗口」或换一张图才会回到适应。
滚轮以光标为锚点放大到 182%:原本看不清的小字现在读得出来
安装
插件没有发布到 npm,所以 DSH 的 插件 → 添加插件 流程(它按 registry 规格解析包名)找不到它。把仓库克隆到 profile 旁边,然后手动 stage——Windows 上可以直接用仓库自带的脚本。
git clone https://github.com/MYX-0211/dsh-sidebar-image-zoom.git
然后把包放到你的 profile 能解析到的位置(一般是 <profile>/node_modules/dsh-sidebar-image-zoom/),在 profile 的 package.json 里同时加进 dependencies 和 dsh.profile.bundles,重启 DSH。
install.ps1 / uninstall.ps1 就是替你做完这些事(针对标准 profile 路径),底层是 tools/manifest_edit.py。那个脚本逐行编辑 manifest 而不是做 JSON round-trip,所以没被碰过的部分格式原样保留;每次写盘前都会先落一个带时间戳的 package.json.bak-*。
Windows:如果执行策略拦 .ps1,用这种方式读取并执行
Invoke-Expression ([IO.File]::ReadAllText(".\install.ps1", [Text.Encoding]::UTF8))
Invoke-Expression ([IO.File]::ReadAllText(".\uninstall.ps1", [Text.Encoding]::UTF8))
两个方向都是幂等的;卸载 → 重装的往返比对过,与原始 manifest 逐字节相同。
DSH 在 boot 时加载插件,所以装完要重启一次。
接管原理
DSH 允许插件通过 ctx.documentPreviews 认领某种文件的渲染器。匹配排序是
right.rank - left.rank || right.length - left.length || left.order - right.order
其中 rank 为 priority === "builtin" ? 0 : 1。内置位图查看器用 priority: "builtin" 注册自己,所以任何别的 priority 值都排在它前面。本插件用 priority: "extension" 注册同样的后缀列表,于是直接接管图片面板——不用配置,也不给用户留开关。
正文必须注册进 keyed 子槽 sidebar.right.tab.document,且 key 与注册表 id 完全一致,因为宿主是用 entryKey: selected.id 反查的:
ctx.documentPreviews.register({ id: BODY_ID, extensions, binaryExtensions,
priority: "extension", loading: "bytes-complete" })
ctx.slots.inject("sidebar.right.tab.document", () =>
ctx.slots.register({ name: "sidebar.right.tab.document", key: BODY_ID }, Body))
两个容易写错的点:
- binaryExtensions 必须是 extensions 的子集,而且 SVG 故意不放进 binaryExtensions,这样纯文本渲染器仍然可以用来读矢量源码。
- 两处注册都由 ctx.effect 持有,正文外面套了 error boundary。渲染器抛错会把整个侧栏面板变空白,而不只是当前标签页——这个 boundary 把它变成一条提示,并保留标签页顶部的渲染器下拉菜单作为退路。
没有构建步骤。lib/client.js 是手写的,通过 window.__ModuleLoader__.load 自注册;只依赖 react,由宿主提供。
出错时降级为提示而不是空面板:字节不匹配任何已知签名、后缀承诺的格式与实际字节不符、以及标签页还没拿到内容,各自显示自己的短提示。
文件
| 路径 | 作用 |
| lib/client.js | 插件全部实现(浏览器半) |
| lib/index.js | 空的宿主半——只为满足 bundle 契约 |
| cordis.patch.yml | 挂载用。id 必须保持 sidebar-image-zoom——同一个包挂两次会让整棵插件树 boot 失败 |
| tools/manifest_edit.py | 逐行的 profile manifest 编辑器 |
| install.ps1、uninstall.ps1 | stage 包并改写 manifest |
| test/build-harness.mjs | 生成自包含的 harness 页面 |
| test/verify.mjs | 用真实浏览器驱动那个页面 |
测试
套件把 lib/client.js 原文载入一个页面,只伪造 DSH 自己那部分——window.__ModuleLoader__、require、以及一个记录型 cordis 上下文——然后挂载注册好的正文,用真实的鼠标与滚轮事件通过 Edge 或 Chrome 驱动它。测试图在运行时用 canvas 画出来,所以不提交任何二进制 fixture。
npm install
npm test
用 puppeteer-core 而不是 puppeteer,是为了让安装 devDependency 时不要再拖一个 Chromium 下来。运行器按 PUPPETEER_EXECUTABLE_PATH → Edge/Chrome 常见路径 → Linux/macOS 常见路径的顺序找一个浏览器。你的浏览器在别处就显式指过去:
PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium npm test
完整一轮是 30 条断言。最能说明问题的是这两条:
PASS zoom is anchored at the cursor — image point under cursor moved 0.00px PASS drag pans by the pointer delta — moved (-140.0, -90.0), expected (-140, -90)
它同时断言注册契约(认领的后缀、binaryExtensions ⊆ extensions、priority !== "builtin"、loading: "bytes-complete"、槽位 key === 注册表 id、两处注册都由 effect 持有)、控制条、从固定前置状态出发的双击切换、损坏文件报解码失败而不是留空面板、回退提示留在本面板内、以及 console 干净。
兼容性
针对 DSH 0.2.0-rc.2、desktop profile 构建并测试。它伸手进了 DSH 内部——槽位名、注册表结构、以及 builtin 的 rank 语义——所以 DSH 任何一次改动都可能让它失效。失效的表现是侧栏面板变空白,处理方式是禁用该 bundle 后重新加载;这个故障不会拖垮其余 UI。
许可
MIT —— 见 LICENSE。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
MYX-0211/dsh-sidebar-image-zoom
滚轮以光标为锚点缩放图片,拖拽平移查看细节
相关插件 · 视觉能力
智能体工作台Devin-AXIS/iPolloWork
企业级、本地优先的智能体工作台,面向个人和智能体团队——一个工作区,容纳多个智能体引擎;一套统一体系,管理插件和技能;支…
★ 7,364已汉化DSH
72
开源设计工作台nexu-io/open-design
OpenDesign:首个协作式 AI 设计智能体工作区
★ 105,709已汉化DSH
71.8
GPT 图像提示词库freestylefly/awesome-gpt-image-2
Prompt as Code | GPT Image 2 / 2.5 提示词与案例库,530+ 个案例、20+…
★ 34,534已汉化DSH
71.5
多智能体编码工作区spacering-net/codeg
多智能体协作的 AI 编程工作区:汇总 Claude Code、Codex、OpenCode、Pi、Grok Build 等来源的会话。支持桌面应用、自托管服务器或 Docker。
★ 4,319已汉化DSH
71.5
AI 用量桌面小部件Javis603/token-monitor
EN | 简 | 繁 | KO | JA | PT
★ 3,533已汉化DSH
71.1
架构图生成器tt-a1i/archify
把你想理解、规划或分享的事,变成可以互动的可视化作品。
★ 93,105已汉化DSH
71.1
这是你的仓库?认领条目