DeepSeek Harness:强制所有网页跳转使用 Chrome

前言

在 DeepSeek Harness(DSH)中,模型执行“打开网页”等操作时,通常使用系统默认浏览器。当默认浏览器是 Edge、Firefox 或 360 时,DSH 的跳转行为就与预期不一致。这个 bundle 把这件事钉死:强制 DSH 内所有浏览器跳转只走 Google Chrome。

它是什么

seekafterseek/dsh-chrome-only 是一个 DSH 插件包,由维护者 SeekAfterSeek 提供。它的核心价值是:无论系统默认浏览器如何设置,DSH 自己打开网页时永远使用 Chrome;只有用户明确点名时才允许例外。

它通过五层机制实现这一目标:

层 机制 效果
提示层 ctx.systemPrompt.section() 每轮请求注入硬规则 + Chrome 缺失时的授权流程 + 唯一例外条款
工具层 chrome_open 直接启动 chrome.exe --new-window <url>,永不回退系统默认浏览器
工具层 chrome_status 检测 Chrome 是否安装、实际可执行文件路径、宿主补丁真实状态
工具层 chrome_install 必须先拿到用户授权(authorized: true)才下载安装 Chrome
拦截层 ctx.tools.guard() 拒绝 Start-Process <url>、start <url>、Invoke-Item、explorer <url>、rundll32 url.dll、xdg-open、open,以及 msedge / firefox / brave / vivaldi / chromium / 360 / QQ / Sogou / maxthon 等非 Chrome 启动
启动层 web-runtime 配置覆盖 + Chrome 交接 dsh web 不再调用系统默认浏览器:openBrowser 固定为 false,改由插件在服务器就绪后用 Chrome 打开同一个带 token 的地址;--no-open 仍然有效
宿主层 Electron shell.openExternal 重定向 Electron 主进程里可用时把外链交给 Chrome;桌面应用的 Host 是 Electron Node 子进程,那里 require('electron') 不可用,此层自动降级并如实上报

安装与启用

仓库根目录就是 bundle 包(package.json 里声明了 dsh.bundle.patch)。使用前请先克隆仓库。

git clone https://github.com/SeekAfterSeek/dsh-chrome-only.git

桌面 profile(desktop)

用 Plugin Manager 安装本地 bundle,或调用 plugin_manager 的 install_bundle,target 指向仓库绝对路径。

web profile(dsh web 用的那个)

powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\Install-WebProfile.ps1

该脚本执行与 Plugin Manager 相同的三步:dependencies 加 link: → dsh.profile.bundles 追加 → 用 DSH 自带的 pnpm 安装。重复执行安全。写回 package.json 必须无 BOM,否则 DSH 启动时报 Unexpected token ''。

注意:两个 profile 里记的是 link:<仓库路径>。仓库被移动或删除后,启动时会解析不到 bundle——建议把仓库放在固定位置。

配置

- id: chrome-only
  name: '@local/dsh-chrome-only'
  config:
    chromePath: ''                 # 显式指定 chrome.exe;留空自动探测(注册表 + 常见安装路径)
    newWindow: true                # 每次打开新窗口
    guardShellTools: true          # 拦截 shell 工具里的非 Chrome 浏览器启动
    patchElectronShell: true       # Electron 主进程可用时重定向 shell.openExternal
    openWebUiInChrome: true        # dsh web 就绪后由本插件用 Chrome 打开 GUI
    extraForbiddenBrowsers: []

Chrome 探测顺序:chromePath → CHROME_ONLY_CHROME_PATH → %ProgramFiles% / %ProgramFiles(x86)% / %LOCALAPPDATA% → 注册表 App Paths\chrome.exe。

典型用法

模型侧

  • 打开网页只用 chrome_open。
  • 查状态用 chrome_status。
  • 装 Chrome 前必须先 ask_user_question 拿到授权,再 chrome_install { authorized: true }。

脚本侧

powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\Open-DshChrome.ps1 -Url https://example.com -NewWindow

退出码:0 已在 Chrome 中打开;2 网址非法;3 本机没有 Chrome(此时必须先申请安装授权,禁止换浏览器)。

或者直接用 Chrome 本体:

& "$env:ProgramFiles\Google\Chrome\Application\chrome.exe" "https://example.com"

验证

node test\matcher.test.mjs      # 17 条拦截 + 17 条放行 + URL 规范化
node test\handoff.test.mjs      # dsh web 交接:正常→打开 / --no-open→不打开 / 关配置→不接手
powershell -File .\scripts\Open-DshChrome.ps1 -Url about:blank

适用场景与注意

  • 适合希望 DSH 内所有网页跳转统一使用 Chrome 的开发者与用户。
  • 插件以当前 dsh 进程权限运行,安装前建议检查源码与许可证。
  • 桌面应用是“Electron 主进程 + Electron Node 子进程(Cordis Host)”两段结构。点外链、下载地址、登录页这几处 shell.openExternal 在主进程里,插件在子进程,够不到;chrome_status 会显示 electronShellPatch.patched: false 及原因。把系统默认浏览器设为 Chrome 即可顺带覆盖这几处。
  • .html 这类文件扩展名关联是独立于默认浏览器的设置,插件不碰;chrome_open 对本地文件始终用 Chrome。
  • web_fetch / web_search 是服务端取文本,不启动浏览器,不受规则影响。
  • guard 只审命令行文本,审不到脚本文件内部(pwsh -File deploy.ps1 里写 Start-Process msedge)。
  • dsh web --no-open 是用户明确表态“不要打开”,不打开任何浏览器。

诊断工具

不解包整个 app.asar 就能按关键字定位、列目录、导出单个文件:

node tools\asar-scan.mjs "...\resources\app.asar" openExternal
node tools\asar-list.mjs "...\resources\app.asar" "dsh/node_modules/@deepseek-ai/dsh-web-app/lib"
node tools\asar-extract.mjs "...\resources\app.asar" "path/inside/asar.js" .\out.js

(read 能读 asar 内部路径,rg 不能——所以这三个脚本绕过解包。)

卸载

  • 临时关闭:在 Plugin Manager 里关闭 chrome-only 行。
  • 彻底移除:移除 bundle,并从两个 profile 的 package.json 去掉依赖与 bundles 条目,再跑一次 pnpm install。

结语

这个 bundle 通过提示层、工具层、拦截层、启动层、宿主层等多层机制,把 DSH 内所有浏览器跳转锁定为 Chrome,并拦截其他浏览器的启动。如果你需要统一的浏览器行为,可以参考这个插件。

  • 目录页:https://www.skillhub.cn/plugins/SeekAfterSeek/dsh-chrome-only
  • GitHub:https://github.com/SeekAfterSeek/dsh-chrome-only
羽毛球分组比赛记分
小程序二维码

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

Xiaoye