dsh-blob-download: Download via Blob scheme in DSH Browser to bypass hijacking by extensions like Thunder

前言

在 DeepSeek Harness(DSH)里让 agent 通过浏览器拉文件时,若本机装了迅雷「下载支持」一类扩展,常见现象是:任务本该走浏览器下载,却被扩展监听 chrome.downloads 后 cancel,再弹出迅雷的「新建下载任务」窗口。DSH 自带的 dsh_browser_download 走 provider 原生下载通道,桌面端(desktop shell)还会直接报 browser: download is only available on the self-hosted browser。下面介绍社区插件 dsh-blob-download(维护者 adcgesdad,分类:联网工具),它在页面内用 fetch → Blob → createObjectURL → <a download>.click(),让文件走浏览器自身管线,扩展通常对 blob: / data: 协议不介入。

这是什么

dsh-blob-download 是给 DSH 用的下载工具插件:在 DSH 浏览器里用 blob: 方案下载 http/https 文件,避免迅雷等下载扩展劫持。仓库:https://github.com/adcgesdad/dsh-blob-download;社区目录页:https://www.skillhub.cn/plugins/adcgesdad/dsh-blob-download。当前 package 版本为 0.1.0,许可证 MIT。

迅雷 v4.1.5 的决策逻辑里,对 blob:、data: 等协议会直接 return false,因此页面内 blob 下载不会触发同一套劫持路径。

核心功能

插件向 agent 暴露工具 blob_download,主要参数如下:

参数 必填 说明
url 是 要下载的 URL(http/https)
fileName 否 保存文件名,不传则从 URL 末段推断
saveDir 否 保存目录(绝对路径),不传用配置或系统下载目录
waitSeconds 否 等待落盘秒数,默认 30,上限 300

返回结构包含 ok、message,以及可选的 path、bytes、fileName、verified。verified: true 表示宿主在目标目录里看到了大小相符的新文件,而不只是触发了一次点击。

行为上值得提前知道的几点:

  1. 串行排队:浏览器对并发多文件下载会弹确认框,插件内部一次只处理一个任务。
  2. 先导航到 origin 根路径再 fetch:保证同站资源不受 CORS 限制;不能直接 openUrl 目标文件 URL,否则会先触发真浏览器下载。
  3. 文件名消毒:去掉 Windows 非法字符与路径穿越;重名自动加 (1) 后缀。
  4. 只读目录:不会删空目录、不移动已有文件。

安装与启用

要求 DSH 0.2.1-rc.5 或更高(engines.dsh: >=0.2.1-rc.5 <0.3.0),且 profile 中已安装 dsh-builtin-browser(提供 browser 服务)。未装浏览器插件时,工具会直接报错。

方式一:插件页安装(推荐)

Web 侧边栏 → 插件 → 安装,填写 git 地址:

git+https://github.com/adcgesdad/dsh-blob-download.git

需要固定版本可在后面加 #<commit>。装完重启 DSH。

方式二:本地 link

git clone https://github.com/adcgesdad/dsh-blob-download.git ~/.dsh/plugin-src/dsh-blob-download
cd ~/.dsh/profiles/desktop
pnpm add link:~/.dsh/plugin-src/dsh-blob-download

在同一 package.json 的 bundle 列表里追加包名,例如:

{
  "dependencies": { "dsh-blob-download": "link:..." },
  "dsh": { "profile": { "bundles": ["dsh-builtin-browser", "dsh-blob-download"] } }
}

重启 DSH 生效。

方式三:npm

README 写明 npm i dsh-blob-download 需等包发布到 npm 后使用,目前请用方式一或方式二。

可选配置写在 cordis.patch.yml(也可经 patch 合并进 profile):

- insert:
    - id: blob-download
      name: 'dsh-blob-download'
      config:
        downloadDir: ''      # 默认目标目录,留空用系统下载目录
        timeoutMs: 120000    # 单次等待上限(毫秒)

典型用法

在已启用浏览器工具与会话的前提下,让 agent 调用 blob_download,传入要拉的 http/https 地址即可。需要指定落盘位置时传 saveDir(绝对路径)或先在配置里设 downloadDir;大文件或慢链可调 waitSeconds(不超过 300)。

示例意图(参数名以工具 schema 为准):

  • url: https://example.com/path/to/file.zip
  • 可选 fileName: archive.zip
  • 可选 saveDir: 本机绝对路径

成功时关注返回里的 path、bytes 与 verified。

适用场景与注意

适合:DSH 桌面端或自托管浏览器场景下,agent 需要稳定把远程文件落到本机,且本机迅雷等扩展会抢 chrome.downloads 的情况。

限制(来自 README):

  • 仅支持 http/https;file:、data: 等会被拒绝。
  • 依赖页面上下文能 fetch 到目标 URL;反爬、特殊 header、或跨源且无 CORS 时可能失败。
  • 必须存在 browser 服务(dsh-builtin-browser)。

DSH 生态是「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。插件以当前 DSH 进程权限运行,安装前建议阅读仓库源码与 MIT 许可证,自行评估 URL 与保存路径带来的风险。

结尾

dsh-blob-download 用页面内 blob 下载补齐桌面端无法用 dsh_browser_download 的空档,并针对迅雷类扩展的协议过滤做了对症路径。需要安装或 issue 时见 GitHub:https://github.com/adcgesdad/dsh-blob-download;目录介绍见 https://www.skillhub.cn/plugins/adcgesdad/dsh-blob-download。

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

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

Xiaoye