前言¶
在 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 等字段。
行为要点¶
- 续传:进度写在
<outFile>.dlstate.json(URL、总长、块大小、已完成块位图)。同一 URL、同一块大小再次调用dl_start会跳过已完成块;成功后自动删除状态文件。 - 并行:默认 8 条连接、16 MiB 一块;单块失败最多重试 6 次(指数退避)。
- 代理:例如
proxy: "http://127.0.0.1:3128";对 HTTPS 走 HTTPCONNECT隧道。 - 校验:传入
sha256则在完成后整文件校验,不一致判为failed。 - 无 Range 的服务器(返回 200):退化为单连接顺序下载,此类源不支持续传。
- 超时:连接 / CONNECT 15s、等响应头 45s、响应体静默 60s;可用环境变量
DSH_DL_CONNECT_TIMEOUT_MS、DSH_DL_HEADERS_TIMEOUT_MS、DSH_DL_IDLE_TIMEOUT_MS覆盖。 - 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。