🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

界面微调 pridurok-goxa/dsh-tweaks

DeepSeek 客户端
pridurok-goxa26 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

用快捷键缩放界面并自定义右键菜单与语音输入

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 安装
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 26 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
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 的所有缩放级别和四种布局下运行「锚点 — 传送门」组合,单独检查面板进度条、拖动和光标下的菜单。
预览分享卡片长什么样 ↓pridurok-goxa/dsh-tweaks
分享 · DeepSeek Harness Hub
pridurok-goxa/dsh-tweaks

用快捷键缩放界面并自定义右键菜单与语音输入

这是你的仓库?认领条目

回到顶部