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。

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

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

小夜