dsh-blob-download
给 DeepSeek Harness 用的下载工具插件:在 DSH 浏览器里用 blob: 方案下载文件,绕过迅雷等下载扩展的劫持。
Download files inside the DSH browser through a blob: URL, so download-hijacking extensions (Thunder/迅雷 等) never see a chrome.downloads event.
解决什么问题
迅雷「下载支持」扩展(popomkonnjgcdagdhgcpcekbdeoibglc)会监听
chrome.downloads,把浏览器的下载 cancel 掉,再经 nativeMessaging 交给
迅雷客户端建任务——于是你在 DSH 里让 agent 下个文件,弹出来的却是迅雷的
「新建下载任务」窗口。
但这类扩展在决策函数里通常明确排除了 blob: / data: 协议,因为 blob 无法
可靠地交给外部下载器重下。迅雷 v4.1.5 的 bd() 第一条就是:
if (vd.has(new URL(url).protocol)) return false;
// vd = Set(["blob:", "data:", "chrome-extension:", "file:"])
所以在页面内走一遍 fetch → Blob → createObjectURL → <a download>.click()
就能让文件老老实实走浏览器自己的下载管线,不触发扩展。
为什么不用 dsh_browser_download
DSH 自带的 dsh_browser_download 走 provider 的原生下载通道,而桌面端
(desktop shell)不支持它:
browser: download is only available on the self-hosted browser
本插件改走页面内 blob 方案,桌面端同样可用。
安装
插件要求 DSH 0.2.1-rc.5 或更高,并且 profile 里装了
dsh-builtin-browser(浏览器工具
dsh_browser_* 的来源,插件要用它的 browser 服务)。
方式一:插件页安装(推荐)
Web 侧边栏 → 插件 → 安装,填本仓库的 git 地址:
git+https://github.com/adcgesdad/dsh-blob-download.git
需要固定版本就在后面加 #<commit>。装完重启 DSH。
方式二:本地源码
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(暂未发布)
npm i dsh-blob-download 这条要等包发到 npm 之后才能用,目前请走上面两种。
工具:blob_download
| 参数 | 必填 | 说明 |
|---|---|---|
url |
是 | 要下载的 URL(http/https) |
fileName |
否 | 保存的文件名,不传就从 URL 末段推断 |
saveDir |
否 | 保存目录(绝对路径),不传用配置或系统下载目录 |
waitSeconds |
否 | 等待落盘的秒数,默认 30,上限 300 |
返回:
{ ok: boolean, message: string, path?: string, bytes?: number, fileName?: string, verified?: boolean }
verified: true 表示宿主真的在目标目录里看到了大小相符的新文件,不只是
「点了一下下载链接」。
行为细节
- 一次只下一个:浏览器对并发触发多个下载会弹「允许下载多个文件」确认框, 未确认前后续下载被挂起,看起来就像失败。插件内部串行排队,一个下完(无论 成败)才轮到下一个。
- 先落目录再下:下载前会把会话导航到目标 URL 的 origin 根路径,让页面内
fetch是同源请求(同站资源不受 CORS 限制)。注意不能直接openUrl目标 文件——那会先触发一次真正的浏览器下载,正好喂给迅雷。 - 文件名消毒:去掉 Windows 不允许的字符和路径穿越段;重名自动加
(1)后缀。 - 会删空目录:不会。插件只读目录,不清理也不移动文件。
配置
cordis.patch.yml 里可改:
- insert:
- id: blob-download
name: 'dsh-blob-download'
config:
downloadDir: '' # 默认目标目录,留空用系统下载目录
timeoutMs: 120000 # 单次等待上限(毫秒)
已知限制
- 只支持 http/https。
file:、data:等协议会被拒绝。 - 依赖页面能
fetch到目标 URL。有反爬或需要特殊 header 的站点可能取不到字节。 - 目标站点若禁止跨源读取(没给 CORS 头)且文件不在同站,
fetch会失败。 - 需要
browser服务在场:没装dsh-builtin-browser时工具会直接报错。
No comments yet. Be the first to write one.