dsh-open-folder-visible:修复 Windows 下「在资源管理器中打开工作区」窗口不可见

前言

在 DeepSeek Harness(DSH)里,Session 页眉的「Open In…」分裂按钮默认会在本机文件管理器中打开当前会话的工作区目录,快捷键为 Ctrl+Alt+O(对应 workspace.openLocal)。在 Windows 上,点击后 Host 侧会报告成功,但资源管理器窗口往往不会出现,看起来像按钮没反应。

根因在上游 @deepseek-ai/dsh-host-open-in-app 对 explorer 的 shell-open 实现:通过 @deepseek-ai/dsh-native-command 启动 explorer.exe 时使用了 windowsHide: true。该选项本意是避免 CLI 子进程闪一下控制台,用在 Explorer 上却会让新窗口在 IsWindowVisible() 意义下不可见;而上游仅依据退出码判断,Explorer 的 exit 1 仍被当作委托 handoff 成功,于是界面显示 { ok: true } 却没有可见窗口。

社区插件 dsh-open-folder-visible(维护者 King20260919)在不替换页眉按钮、不改动快捷键的前提下,为「打开工作区目录」这一条路径单独修正启动参数。下文介绍其定位、实现要点、安装与限制。

这是什么

dsh-open-folder-visible 是面向 web profile 的 DSH 插件,仅解决 Session 页眉「在文件管理器中打开工作区」在 Windows 上窗口不可见的问题。它不改造分裂按钮本身,也不覆盖「在资源管理器中显示文件」(explorer.exe /select,<file>)等其它路径。

插件在 GitHub 开源(King20260919/dsh-open-folder-visible),许可证为 MIT;社区目录页见 SkillHub(独立社区站点,与 DeepSeek / 幻方无官方从属关系)。

问题与上游行为(简要)

页眉默认动作用 @deepseek-ai/dsh-host-open-in-app 里 catalog 的 explorer 条目,在 Windows 上等价于:

execFile('explorer.exe', ['<file:// URI>'], { encoding: 'utf8', signal, windowsHide: true })

README 中在同一 Host、同一调用形态下对比过:windowsHide: true 时新窗口 IsWindowVisible() 为 false;改为 windowsHide: false 则为 true。这是本插件修正的直接依据。

核心功能

插件分 Host 与浏览器两侧协作,且刻意缩小影响面。

Host:可见窗口启动路由

Host 侧新增路由 POST /open-folder-visible/open,用与上游相同的 argv 数组(不用 shell 字符串)启动 explorer.exe,但将 windowsHide 设为 false。其余语义与官方 opener 对齐:接受 Explorer 的 exit 1 作为委托 handoff,并用 watch 窗口判断「启动器仍在运行」视为已启动而非误杀。

浏览器:仅重定向文件管理器打开请求

客户端通过包装 globalThis.fetch,只把「打开文件管理器 / 工作区目录」那一次 launch 重定向到上述路由;页面上其它应用、其它请求原样透传。

刻意不做的部分

  • 不替换 Session 页眉分裂按钮、应用菜单、图标、手势反馈和 Ctrl+Alt+O 快捷键。
  • 不修改「Reveal in File Explorer」、revealNativePath 等另一条代码路径(交付文件卡片、变更文件审查里的「显示文件位置」仍可能受上游 windowsHide 影响,本插件不覆盖)。

安装与启用

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

dsh plugin --profile web add github:King20260919/dsh-open-folder-visible

说明:

  1. 安装任意插件都会在与你相同的权限下执行第三方代码;若需固定版本,可在引用后追加 commit:github:King20260919/dsh-open-folder-visible#<sha>。
  2. 安装后需重启 DSH:Host 侧在加载时注册 /open-folder-visible/open 路由。

配置

字段 默认值 含义
launchWatchMs 1500 对 explorer.exe handoff 的早期失败观察窗口(毫秒)。成功与否与进程是否立即退出解耦,因为 Explorer 在把窗口交给已有 shell 后会很快退出。

典型用法

无需额外 API 调用:安装并重启后,继续使用 Session 页眉「Open In…」的默认动作,或按 Ctrl+Alt+O,行为与官方一致,只是在 Windows 上应出现可见的资源管理器窗口。

非 Windows 平台:该路由返回 501,其余行为不变,可照常安装但无修复效果。

适用场景与注意

适合谁

  • 在 Windows 上使用 DSH web profile,且经常通过页眉或 Ctrl+Alt+O 打开本地工作区目录的开发者。

务必知晓

  • 仅 Windows 有效;Linux / macOS 上路由为 501。
  • 只修复「打开工作区目录」,不修复 /select Reveal 路径。
  • 重定向依赖对官方 launch 路由与请求体的匹配;若未来 DSH 变更路由或 body 形状,重定向可能不再命中,会静默回退为官方行为,wrapper 不会破坏原请求。
  • 插件以当前 dsh 进程权限运行;安装前请自行审阅 源码 与 MIT 许可证。

结尾

若你在 Windows 上遇到「打开工作区成功提示却无 Explorer 窗口」,dsh-open-folder-visible 用最小补丁(Host 一条路由 + 浏览器侧定向 fetch 重定向)对齐上游语义并修正 windowsHide,同时保留官方按钮与快捷键。更多信息见社区目录 dsh-open-folder-visible 与 GitHub 仓库 King20260919/dsh-open-folder-visible。

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

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

Xiaoye