dsh-blob-download:在 DSH 瀏覽器裏用 blob 方案下載,繞過迅雷等擴展劫持

前言

在 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。

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

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

小夜