dsh-downloader:DSH 中的多連接斷點續傳下載工具

前言

在 DeepSeek Harness(DSH)裏,智能體經常需要拉取大體積的 HTTP(S) 資源——模型權重、數據集歸檔、遠程產物。單靠 curl 或一次性腳本,回合結束任務就停;多線程、斷點、代理和校驗往往要另外拼一層。dsh-downloader 由社區維護者 Morethaninformation 發佈,歸類爲「聯網工具」,把多連接分塊下載、斷點續傳、代理與 SHA-256 校驗封裝成三個 agent 工具,任務在宿主進程後臺繼續跑,回合結束後仍可用 dl_status 查進度。

下面介紹插件定位、能力與安裝用法;事實以 GitHub 倉庫 README 爲準。DSH 插件目錄由 SkillHub 等站點獨立維護,與 DeepSeek / 幻方無官方從屬關係。

這是什麼

dsh-downloader(包名 dsh-downloader,當前 README 對應版本 0.1.0)是純 Node 內置模塊實現(fs / net / tls / http / https / crypto),零 npm 依賴,不要求 Python。實現多連接 HTTP(S) 下載,並通過 dl_start、dl_status、dl_cancel 暴露給智能體;作業在 DSH 宿主進程內後臺執行,回合結束後下載仍可進行。

運行環境:node >= 22;插件元數據要求 DSH >= 0.2.2-rc.1。許可證 MIT。

核心功能

三個工具

工具 作用 關鍵參數
dl_start 開始或續傳下載,立即返回 jobId url、outFile(必填);totalBytes、sha256、threads(默認 8,上限 32)、chunkMb(默認 16)、proxy、headers
dl_status 查進度:傳 jobId 查單個,不傳則列出全部 jobId
dl_cancel 停止任務 jobId;deletePartial(默認 false,保留半成品與續傳狀態)

dl_status 與 dl_cancel 統一返回 { count, jobs: [...] }。每個 job 含 state(pending / running / done / failed / cancelled)、bytesDone、percent、speedBps、etaSeconds、doneChunks / totalChunks、error 等字段。

行爲要點

  1. 續傳:進度寫在 <outFile>.dlstate.json(URL、總長、塊大小、已完成塊位圖)。同一 URL、同一塊大小再次調用 dl_start 會跳過已完成塊;成功後自動刪除狀態文件。
  2. 並行:默認 8 條連接、16 MiB 一塊;單塊失敗最多重試 6 次(指數退避)。
  3. 代理:例如 proxy: "http://127.0.0.1:3128";對 HTTPS 走 HTTP CONNECT 隧道。
  4. 校驗:傳入 sha256 則在完成後整文件校驗,不一致判爲 failed。
  5. 無 Range 的服務器(返回 200):退化爲單連接順序下載,此類源不支持續傳。
  6. 超時:連接 / CONNECT 15s、等響應頭 45s、響應體靜默 60s;可用環境變量 DSH_DL_CONNECT_TIMEOUT_MS、DSH_DL_HEADERS_TIMEOUT_MS、DSH_DL_IDLE_TIMEOUT_MS 覆蓋。
  7. Windows:不預先 truncate 到最終大小,分塊按偏移寫入,結束時再校正文件長度。

安裝與啓用

本包自帶 bundle patch(cordis.patch.yml),註冊 id: downloader / name: dsh-downloader。

從 GitHub 直接安裝:

dsh plugin --profile desktop add github:morethaninformation/dsh-downloader

或使用 Release 預構建 tarball(無需從源碼構建,也無需 pnpm 拉依賴):

dsh plugin --profile desktop add https://github.com/morethaninformation/dsh-downloader/releases/latest/download/dsh-downloader.tgz

安裝後重啓一次 DSH,dl_start / dl_status / dl_cancel 會出現在工具列表。卸載:

dsh plugin --profile desktop remove dsh-downloader

典型用法

先啓動任務,再用 dl_status 輪詢;需要時 dl_cancel 停止。

dl_start({ url: "https://example.com/model.gguf", outFile: "D:\\models\\model.gguf",
           totalBytes: 47039860096, sha256: "219e…", threads: 8, chunkMb: 16,
           proxy: "http://127.0.0.1:3128" })
→ { jobId: "dl-1", state: "pending", ... }

dl_status({ jobId: "dl-1" })
→ { count: 1, jobs: [{ percent: 3.1, speedBps: 4200000, etaSeconds: 10800, ... }] }

大文件場景下可顯式傳 totalBytes 與 sha256,便於進度估算與落盤校驗。

適用場景與注意

適合:需要在 agent 回合內發起下載、又希望後臺持續跑完的場景;走企業 HTTP 代理的 HTTPS 拉取;需要可恢復的大文件 HTTP(S) 下載(源支持 Range 時)。

限制(README 原文):

  • 僅支持 HTTP / HTTPS(含 http:// 代理的 CONNECT);不支持 SOCKS 與 FTP。
  • 續傳依賴服務器 Range;不支持時中斷後需從頭再來。
  • 任務表在內存中:DSH 重啓後任務消失,但 .dlstate.json 仍在;對同一 URL 與塊大小重新 dl_start 可接着下。
  • 續傳要求塊大小一致;改變 chunkMb 會作廢舊進度。

插件以當前 DSH 進程權限訪問網絡與寫本地文件,安裝前宜查看源碼與 MIT 許可證,確認目標 URL 與輸出路徑符合本機安全策略。

結尾

dsh-downloader 把「多連接 + 斷點 + 代理 + 校驗」收成 DSH 三個工具,減少智能體工作流裏單獨維護下載腳本的負擔。目錄頁:SkillHub - dsh-downloader;源碼與詳細說明:GitHub - Morethaninformation/dsh-downloader。

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

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

小夜