用快捷键缩放界面并自定义右键菜单与语音输入
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/9 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/pridurok-goxa/dsh-tweaks.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 26 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件
查看扫描证据(共 11 处,展示前 11 条)
- 读取本地文件tweaks/whisper-host.js:87
this.prepared = existsSync(join(this.modelDir, 'model.bin')) && existsSync(this.venvPython); - 读取本地文件tweaks/whisper-host.js:168
if (existsSync(join(this.modelDir, 'model.bin'))) { - 读取本地文件tweaks/whisper-host.js:191
if (existsSync(this.venvPython)) { - 写入本地文件tweaks/whisper-host.js:199
await mkdir(this.dataRoot, { recursive: true }); - 执行外部命令来自配置/变量tweaks/whisper-host.js:230
const child = spawn(command, args, { stdio: ['ignore', 'pipe', 'pipe'] }); - 读取本地文件tweaks/whisper-host.js:259
this.prepared = existsSync(join(this.modelDir, 'model.bin')) && existsSync(this.venvPython); - 写入本地文件tweaks/whisper-host.js:268
await mkdir(this.tempDir, { recursive: true }); - 执行外部命令来自配置/变量tweaks/whisper-host.js:269
const child = spawn(this.venvPython, [WORKER_PATH], { - 写入本地文件tweaks/whisper-host.js:426
await mkdir(this.tempDir, { recursive: true }); - 写入本地文件tweaks/whisper-host.js:428
await writeFile(file, audio); - 删除本地文件tweaks/whisper-host.js:446
await rm(file, { force: true });
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 快捷键缩放界面
- 自定义右键菜单
- 语音输入
DeepSeek Harness 调整合集:界面缩放,之后还有翻译和其他功能。每个调整单独开关。
README
由 DeepSeek 最新模型翻译生成dsh-tweaks
DeepSeek Harness 的调整项,打包成一个插件。每一项都在插件页面(Settings → Plugins → dsh-tweaks)用自己的勾选框开启,也在同一处关闭——无需重启。
| 调整项 | 作用 |
| zoom | 缩放整个界面:几个按键就能改变界面大小,而不只是聊天字体 |
| contextMenu | 自定义右键菜单:Electron 的系统菜单不会随界面一起缩放 |
| whisper | 用本地 Whisper 模型识别俄语语音(tweaks/whisper-host.js,Python 工作进程):默认关闭 |
按键(zoom 调整项)
| 操作 | 主键盘区 | 小键盘 | 鼠标 |
| 放大 | Ctrl + = | Ctrl + + | Ctrl + 滚轮向上 |
| 缩小 | Ctrl + - | Ctrl + − | Ctrl + 滚轮向下 |
| 重置为 100% | Ctrl + 0 | Ctrl + 0 | — |
不需要按 Shift:按键按位置识别,所以 Ctrl + Shift + = 也能用,键盘布局也不影响。步进为 5%,范围为 50…200%。大小会以浮层显示在右下角 1.2 秒,并保存在 localStorage(键为 dsh.ui-zoom.v1)。
展开完整文档(README 剩余 1 节)
dsh-tweaks
DeepSeek Harness 的调整项,打包成一个插件。每一项都在插件页面(Settings → Plugins → dsh-tweaks)用自己的勾选框开启,也在同一处关闭——无需重启。
| 调整项 | 作用 |
| zoom | 缩放整个界面:几个按键就能改变界面大小,而不只是聊天字体 |
| contextMenu | 自定义右键菜单:Electron 的系统菜单不会随界面一起缩放 |
| whisper | 用本地 Whisper 模型识别俄语语音(tweaks/whisper-host.js,Python 工作进程):默认关闭 |
按键(zoom 调整项)
| 操作 | 主键盘区 | 小键盘 | 鼠标 |
| 放大 | Ctrl + = | Ctrl + + | Ctrl + 滚轮向上 |
| 缩小 | Ctrl + - | Ctrl + − | Ctrl + 滚轮向下 |
| 重置为 100% | Ctrl + 0 | Ctrl + 0 | — |
不需要按 Shift:按键按位置识别,所以 Ctrl + Shift + = 也能用,键盘布局也不影响。步进为 5%,范围为 50…200%。大小会以浮层显示在右下角 1.2 秒,并保存在 localStorage(键为 dsh.ui-zoom.v1)。
在浏览器里,Ctrl + = / - / 0 会被页面截走,所以那里同样的操作改用 Alt。要重新绑定任意组合:Settings → 「Горячие клавиши」。
安装
plugin_manager action=install_bundle target=<插件文件夹路径>
手动安装:把 "dsh-tweaks": "link:<路径>" 加进配置档的依赖,把 dsh-tweaks 写进 dsh.profile.bundles,然后在配置档文件夹里执行 pnpm install。
实现方式
* client.js —— 浏览器那一半:TWEAKS 注册表、读取标志、表单、调整项代码。
* index.js —— 宿主那一半:带调整项标志的 Config 模式,以及宿主部分的接入(tweaks/whisper-host.js)。
* cordis.patch.yml —— 一条插件记录(id: zoom);Plugins 页面上的那一行会整体关闭插件,所以各个调整项靠标志存在,而不是靠记录。
* locale/en.json、locale/ru.json —— 插件卡片的标题(meta.title、meta.description);cordis.patch.yml 里的 meta: 块 Plugins 页面不读取。
开启和关闭调整项
调整项的标志是 index.js 里 Config 模式中标记了 .volatile() 的字段:只有这类字段 DSH 才会在设置里显示并接受写入,而且它们的变更会传到活动记录,无需重启。字段名 = client.js 里 TWEAKS 注册表中调整项的 id。
DSH 不画表单——表单由插件画。勾选框位于 plugins.bundle.config 槽位,键为 dsh-tweaks,也就是插件自己的页面上。点击勾选框会立刻把值(带读取到的修订号的 set)写入客户端服务 configForms——插件正是从那里读取标志:表单的 namespace 是 cordis.patch.yml 中记录的 id,也就是 zoom。
client.js 每个插件只维护一套调整项:apply(ctx) 读取标志,开启已开启的,关闭已关闭的,并订阅变更。调整项的资源通过 api.own 注册,关闭时移除,所以重复启用后不会留下重复的处理器。配置还没就绪时(configForms 不存在或 status !== 'ready'),走注册表默认值:zoom 和 contextMenu 开启,whisper 关闭。在就绪的快照里,字段缺失同样算注册表默认值:缺失的字段不会开启默认关闭的调整项。
关闭 zoom 会把界面恢复到 100%(localStorage 里的值保留,重新开启会恢复原来的缩放);弹出层也会回到原始坐标。关闭 contextMenu 会恢复系统菜单。
新增调整项:在 Config(index.js)里加字段,在 TWEAKS(client.js)里加记录,如果调整项有代码,还要在 client.js 里给它单独开一个区域 —— /* #region tweak-<id> /。不会影响相邻的调整项。
调整项的主机部分
调整项的主机部分(如果需要)是单独的文件 tweaks/<id>-host.js,由 index.js 按标志引入。客户端部分每个包只有一个,不存在按调整项拆分的独立模块;客户端部分也可以完全没有 —— whisper 就没有,勾选框只开启主机部分。
插件通过 loader/volatile-update 事件读取标志:只改 volatile 字段不会重启插件,DSH 会把新值编译进已经发出的配置,并通知记录的持有者。volatile 字段的值以 Volatile 引用(.get())传入,因此主机部分拿到的是展开后的配置副本,都是普通值。whisper 调整项的生命周期:标志开启 —— activate(ctx, config);关闭 —— deactivate();已开启状态下 whisperModel 变了 —— 先 deactivate(),紧接着用新值 activate()(模型大小由服务商在注册时读取一次)。切换按队列执行,插件卸载会等待 deactivate() —— Python 工作进程不会跨调整项存活。
调整项模块动态导入,并放在 try/catch 里:文件可能不存在(另一个分支、交付不完整),这时原因写进日志,Config 模式和其余调整项继续工作。package.json 里的 files 字段包含 tweaks/,因此 Python 工作进程(tweaks/worker.py)会进入交付包。
首次开启「语音」调整项时,主机部分会设置一次识别设置:activate 成功后(服务商 whisper-local 已注册),调用 ctx.speechToText.configure({ providerId: 'whisper-local', language: 'ru' }),然后在自己的服务 volatile 字段 whisperSelectionApplied 里写入「已设置」标记。这个字段没有勾选框:表单由注册表 TWEAKS 构建,而不是由模式构建。之后选择不会被覆盖 —— 用户手动改了服务商或语言,configure 就不再调用。出错时(没有识别服务、语言不支持、设置服务不可用)写进日志,调整项不会崩溃;标记也不会写入,因此下次开启会重试。
缩放
zoom 设在应用根节点(#root)上。根节点的尺寸不会被替换:引擎自己给内容返回逻辑宽度「宽度 / 缩放」,界面填满窗口。
transform: scale 不合适——用它之后,光标命中元素的位置会对不上。
Settings 里的「Font size」设置插件不碰:它只改聊天文字。
弹出层
菜单和提示由应用通过 portal 挂到 body,绕过了根节点。统一的 zoom 够不到它们,所以每一层各自拿一份缩放,坐标则由插件套进公式:
/ 应用写入 --dsh-ui-zoom-src-left: 270px / left: calc(var(--dsh-ui-zoom-src-left) / var(--dsh-ui-zoom));
做除法的是浏览器,不是 JS。--dsh-ui-zoom 挂在文档根节点上,所以改一次缩放,所有弹出层一起重算。用 JS 做除法会漂移:缩放不是整数时,商是循环小数,浏览器会舍入 inline 长度,菜单就会跑到屏幕上不同的位置。
弹出层的 offsetWidth 和 offsetHeight,插件按视口像素交给应用:应用靠它们把菜单对齐到按钮,并让它适配屏幕。缩放一变,插件就发 resize——锚点挪位置了。
右键菜单
系统菜单由 Electron 绘制,zoom 够不到它。插件拦截右键,显示自己的菜单:输入框里是 Undo、Redo、Cut、Copy、Paste、Select All,在输入框外选中内容时只有 Copy。粘贴走 Clipboard API。
自己的菜单就是 body 里的普通图层,所以缩放由 zoom 这个调整项通过桥接交给它(调整项关着的时候桥接不出声:没东西可缩放)。背景和文字用主题 token。菜单项文字走 translate() 取:词典还没加载好时,自带翻译器会把 key 原样返回,菜单里就会冒出 menu.copy。
拖拽改宽度的把手
应用给面板宽度加上 e.clientX - origin 这个位移,而宽度是逻辑像素。光标是视觉像素,所以插件把把手上事件的 clientX 换成逻辑值:不然在 150% 下,面板会跟着光标多走一半。
把手的位置按 left: viewport - rightbar 算。在 zoom 下这套算法和网格对不上——125% 时把手停在 1078 px,面板边界却在 1202 px。所以插件按列的边界来放把手:offsetLeft 和 offsetWidth。
界面外框
AppFrame 用 getBoundingClientRect() 量自己,再拿这个宽度算列数。在 zoom 下引擎给的是视觉宽度,所以插件把逻辑宽度还回去。低于 1024 逻辑像素就不往下压了:应用按这个阈值收起侧边栏(SIDEBAR_AUTO_COLLAPSE)。替换挂在包这一层,而且是幂等的,所以再次打开调整项不会把测量除两次。
限制
Application 和 Edit 菜单由 Windows 绘制——插件够不到。
* 缩放越大,侧边栏越早收起:zoom 会缩小逻辑宽度,而应用的阈值是 1024 逻辑像素。窗口 1180 px 时,面板大约从 120% 起就收起。
* 右侧面板的宽度按像素存储,所以缩放变大后它占窗口的比例也变大。拖动把手可以改。
* 自己菜单里的粘贴依赖能否访问剪贴板。
* 长菜单按 vh 限制高度,而 vh 不随缩放变化。
* 在非 loopback 环境下,配置服务不可用(status: 'unavailable'):此时勾选框被禁用,开关按默认值运行。在 Desktop 和 loopback 下一切正常。
* @deepseek-ai/schemastery 声明在 peerDependencies 中:包从 DSH 安装中获取,无需单独安装。修改 index.js 后需重启应用才会生效——HMR 默认只监听配置档文件(root: [])。
检查
node --check client.js
node --check index.js
node test\check-client.cjs
node test\check-whisper.cjs
node test\check-host.cjs
test/check-client.cjs 在沙箱中运行真实的 client.js,用桩替代 DOM、React、ctx 和 configForms:56 项检查——开关能启用和停用各开关项,没有客户端代码的开关项(whisper)能通过勾选框启用和停用,重复启用不会累积处理器,无配置服务时的默认值,表单写入值(set 操作 + 修订号),缩放步长与边界,存储,命令及其绑定,提示条,Ctrl + 滚轮,弹窗(坐标拦截、calc()、resize 信号、无漂移),进度条,边框和右键菜单。
test/check-host.cjs 在不安装 DSH 的情况下检查宿主部分:index.js 加载时用桩替代 @deepseek-ai/schemastery,开关会拉起真实的 tweaks/whisper-host.js,切换模型会重启它,卸载会移除它,而宿主部分文件丢失不会让插件崩溃。这里还有识别功能的一次性设置:首次启用时只调用一次 configure,并把标记保存到自己的 schema 字段中,带着已有标记再次启动不会改动选择,configure 失败和识别服务缺失都不会让开关项崩溃。test/check-whisper.cjs 检查宿主部分本身的契约。
test/zoom-stand.html 在 headless Edge 中实时运行:--dump-dom 会在页面异步工作结束后返回页面,而 --virtual-time-budget 会打乱 ResizeObserver 的顺序,在拖动进度条时产生误报。测试台在 0.5…2.0 的所有缩放级别和四种布局下运行「锚点 — 传送门」组合,单独检查面板进度条、拖动和光标下的菜单。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
pridurok-goxa/dsh-tweaks
用快捷键缩放界面并自定义右键菜单与语音输入
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这是你的仓库?认领条目