dsh-menu-hidden: Collapse duplicate entries and complete the application menu

前言

在 DeepSeek Harness(DSH)里做日常开发时,模型选择框和设置页往往会同时出现「DeepSeek 账号」与官方 API 等多套入口;右下角账号菜单里还有意见反馈等项。若你主要走自建 provider 或中转站,这些重复 UI 会占视线。打包版 DSH 的应用菜单里,官方预留的「刷新页面」「重启应用与 Host」又因 development 门在发行包里恒为关闭而不可见。社区插件 dsh-menu-hidden(维护者 Biu-Bong)用客户端 DOM 隐藏与可选的主进程补丁,把上述项收成开关控制,并支持写入 profile 的默认推理等级。下面介绍它的定位、能力与用法。

这是什么

dsh-menu-hidden 是 DSH 的客户端类插件:在 设置 → 菜单隐藏 里用开关控制界面元素的显示,多数改动立刻生效;应用菜单两项需对宿主 lib/main.js 写入补丁并在重启应用后出现。插件还可在 cordis.patch.yml 中为各 LLM provider 配置 reasoning 字段,便于中转站在请求里带上推理等级。

核心功能

模型选择与设置 · 模型

  1. 模型选择框:可分别隐藏标题为「DeepSeek 账号 / DeepSeek Account」与「DeepSeek」(官方 API)的分组;实现方式为匹配 section[data-menu-group] 并按分组标题整组设置 display:none。
  2. 设置 · 模型:可隐藏账号相关整行(通过 [class*="_accountStatus"] 识别)以及官方 API 对应 <li> 行。

账号菜单与侧边栏

账号菜单可单独隐藏「意见反馈 / Feedback」「退出登录」等项(按 [role="menuitem"] 文字匹配;找不到则跳过)。较新版本 README 还提到侧边栏分组(插件 / 定时任务 / 更多)、「隐藏新会话」等开关,均存于 localStorage 键 dsh-menu-hidden:v1,切换后立刻重扫 DOM。

隐藏只改 style="display:none!important" 并在节点上打 data-dshmh-hidden 保存原 style,关开关可还原,不删 React 节点。

应用菜单:刷新与重启

官方在 lib/main.js 的 applicationItems() 里已有 reload / relaunch 项,但打包版 development = !app.isPackaged 为 false 时整段被去掉。插件通过宿主侧补丁将条件改为 (development || true),并在设置页提供「写入补丁 / 还原」(备份 .menuhidden.bak)。改完后需重启一次应用,原生菜单才会重建。写入走本机路由并带平台浏览器鉴权,无会话 cookie 的进程会被 401 拒绝。

DSH 大版本更新会整份替换 resources/app/lib/main.js,补丁会丢失;设置页会显示外壳状态,可再次点「写入补丁」,无需重装插件。

推理等级(自 0.2.0 起)

各家中转站后台常依赖请求里的推理等级字段;DSH 仅在 provider 配置了 reasoning: <level> 时才会携带。插件提供:

  • 全局默认:未单独设置的供应商共用一档。
  • 按供应商覆盖:跟随全局 / 不设置 / 具体档位(off, minimal, low, medium, high, xhigh, max)。

写入正式 profile 下 cordis.patch.yml 中 - id: llm-pi-ai → config.providers.<id>.reasoning,行级编辑、幂等、写前备份 cordis.patch.yml.menuhidden.bak,状态存 $DSH_HOME/dsh-menu-hidden.reasoning.json。llm-pi-ai 热读配置,改完不必重启,下一条消息即生效。

安装与启用

安装命令(来自 README 原文):

dsh plugin --profile desktop add github:Biu-Bong/dsh-menu-hidden

也可在 SkillHub 等社区插件市场页面点安装。卸载:

dsh plugin --profile desktop remove dsh-menu-hidden

卸载插件不会自动还原 main.js 补丁;需先在设置页点「还原」,或执行:

node <项目目录>/shell/patch-shell-menu.mjs --revert

启用后打开 设置 → 菜单隐藏,按分组打开需要的开关。若只需应用菜单两项,在底部「应用菜单」一行写入补丁并重启 DSH。

本地开发覆盖安装可用仓库内 tools/install-local.mjs(安装前校验 package.json 名、client.js loader id、cordis.patch.yml id 一致),例如:

node tools/install-local.mjs
node tools/install-local.mjs --dry-run

典型用法

  1. 日常只用第三方 API:在「模型选择框」「设置 · 模型」打开隐藏 DeepSeek 账号与官方 API 的四个开关,界面立刻收起重复分组与选项卡。
  2. 调试需要 reload:在「应用菜单」写入补丁 → 重启 → 从应用菜单或设置页底部「现在刷新一次界面」刷新;需要完全重启 Host 时用「重启应用与 Host」。
  3. 中转站显示不出推理强度:在「推理等级」设全局默认,或对单个 provider 覆盖;面板重新获得焦点时会重读,也可点「重新读取」。

设置页说明:「推理等级」与前三组标题同屏展示;其余说明可放在标题旁 ⓘ 悬浮提示。界面语言随应用 locale;插件对 zh / zh-CN / zh-Hans / en 分别注册字典,避免仅注册 zh 导致 zh-CN 查表 miss 整页变英文。

适用场景与注意

适合:长期用自建 provider、希望界面更干净;需要在 Windows 等环境下从原生应用菜单刷新或重启 Host;希望集中管理各 provider 的 reasoning 而不手改多处 YAML。

注意:

  • 插件以当前 DSH 进程权限运行,安装前应查看 MIT 许可 与源码,确认可接受对本机 profile 与安装目录文件的修改。
  • 隐藏依赖官方 DOM 结构与文案(如分组标题、_rowName / _accountStatus 类名后缀、菜单项文字);官方改版后对应项可能静默失效,其它开关不受影响。
  • 若自定义 provider 的 displayName 恰好为 DeepSeek,会与「隐藏官方 API」一并被藏。
  • 推理等级与外壳补丁写在 $DSH_HOME 与安装目录,换机或换用户需重新配置。
  • 手工拷包导致 Failed to load plugins 时,常见原因是 loader id 与包名不一致或 client.js 使用 module.exports;可用 node tools/install-local.mjs --check <安装目录> 排查。

结尾

dsh-menu-hidden 把重复的 DeepSeek 账号与官方 API 入口、账号菜单项收成可逆开关,并补上发行版缺失的应用菜单刷新与重启;推理等级写入 profile 后可热更新。需要安装或 issue 时见 SkillHub 目录页 与 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye