github-release-accelerator
在 Windows PowerShell 5.1 上下载 GitHub Release 大资产的技能:先只读自检宿主环境(在监听的本地代理端口、系统代理与环境变量、已安装的 Clash Verge 内核及其配置、curl 版本),四条路线(现有代理 / 无头拉起内核 / 公共镜像 / 直连)并行实测 KB/s,在胜出路线上做限时并发阶梯,再用 curl 多段 range 并发下载,并按 release 的 digest 校验字节数与 SHA256。资产小于 100 MB 或单连接已到 3 MB/s 时直接跳过阶梯——并发只在「单连接被限速」时才有收益:实测限速节点 6.3×(1,234 → 7
安装
dsh plugin --profile web add github-release-accelerator
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
GitHub Release 下载加速(github-release-download-acceleration)
一个零依赖的 Windows PowerShell 技能:用户只说「这个包下太慢了」,它自己探清机器家底、实测选出最快路线、单流或分段并发下载,最后用 release 自带的 digest 做 SHA256 闭环校验。
1. 项目解决什么问题
GitHub Release 的大资产(几十到几百 MB 的安装包、便携包)在国内网络下经常出现三种情况:
- 直连被限速:
release-assets.githubusercontent.com前几秒还快,随后掉到几百 KB/s,一个 200MB 的包要等好几分钟。 - 公共镜像不可靠:
ghfast.top、ghproxy.net、github.moeyy.xyz这类镜像随时可能 TLS 握手超时、返回错误页,或者比直连还慢。 - 本机其实有代理能力:很多人装了 Clash Verge,但内核没在跑、系统代理没开,命令行下载完全用不上它。
手工排这些可能性很费时间,而且「装个 aria2 / 7z 再研究参数」对环境要求太高。本技能把这件事变成一条命令:不装东西、不改系统代理、不问用户参数,自己把上面这些路线实测一遍再决定怎么下。
2. 主要功能
能力 · 具体行为
环境自检 · 查 curl.exe、环境变量代理、系统代理、常见代理端口是否在监听;ProxyServer 残留值不算数,只有端口真的 Listen 才算
四类路线并行实测 · A 现有代理 / B 无头拉起本机 Clash Verge 内核(127.0.0.1:7897)/ C 六个公共镜像 / D 直连,各跑一次 1MB range GET,按「先看是否真拿到 ≥512KB 数据,再看 KB/s」排序
资产名校验闸门 · 测速前先用 release API 校验资产名;名字对不上就报 ASSET_NOT_FOUND,列出全部真实候选(名字 + MB)和最接近的一条,停下等用户确认,绝不静默换名继续下
并发阶梯(先判值不值得测) · 只有「资产 ≥100 MB 且 单连接探针 <3 MB/s」才测——探针就是第 5 步那个 8 MB 单连接 GET 的 $singleKB,不额外花流量。测的时候 1/16 两档 × 三遍、限同一时间窗(4 秒)比聚合吞吐,取中位数并报 min–max;胜出档还要满足「完成数 n/n、三次波动 ≤2×」,两档中位数差 10% 以内选低并发,多段比单段快不到 1.25 倍就用单流。小包或单连接已经够快时跳过整个阶梯(省下约 24 秒与上百 MB 采样流量),$ForceLadder = $true 可强制测
单流 / 分段两条下载路径 · $winN=1 或 <100MB 走单流一次拿完;大资产按 $winN 段并发,每段独立日志、带 --retry,--retry-all-errors 仅在 curl ≥7.71 时启用
下载中自愈 · 45 秒看一次增长,20–30 秒还是 0 字节就只杀自己的 curl、清空分片、降并发(16→8→4)或切第二路线重开
digest 闭环校验 · 拼装前核对分片总字节,拼完比对 size 与 SHA256;无 digest 的老 release 只报「字节数一致」,绝不冒充校验通过
收尾还原 · 只停自己起的进程、只删自己建的目录,确认 7897 不再监听、ProxyEnable 与开始时一致
它明确不做的事:不装 aria2/7z/winget,不写注册表代理项,不开 Clash GUI,不把 allow-lan 打开,不杀用户的其它下载进程。
3. 安装方法
技能就是一个目录,放进宿主的技能发现根即可。
github-release-download-acceleration/ ├── SKILL.md # 技能正文(索引):决策表 + 错误路径 + 步骤说明 + 参数 + Pitfalls ├── references/ │ ├── runner-steps.md # 0–10 步 powershell 真源(build-runner 用它生成 ghdl.ps1) │ └── fetch-raw-via-api.md # raw 文件改走 contents API 的具体命令 ├── README.md # 本文件 ├── LICENSE # MIT 许可证 ├── package.json # 插件清单:声明 dsh.bundle.patch(市场只收带 dsh.bundle 的包) ├── cordis.patch.yml # bundle patch:把本插件插进 profile 的 loader 树 ├── index.js # 技能 provider:把包里的 SKILL.md 挂进 ctx.skills(零依赖) ├── agents/ │ └── openai.yaml # Codex/OpenAI 宿主的展示元数据(DSH 不读这个文件) ├── scripts/ │ ├── build-runner.ps1 # 生成器:references/runner-steps.md -> ghdl.ps1 │ ├── ghdl.ps1 # Windows runner(生成物,勿手改) │ ├── ghdl.sh # macOS/Linux runner │ ├── ghdl-min.sh # 单文件最小版(正文内联同一份) │ └── validate.ps1 # 自检脚本:结构 / frontmatter / 5.1 兼容性 / 代码块语法 ├── assets/ # 市场卡片图标与实测截图 └── screenshots.json # 声明 1-8 张截图(市场详情页读取,放 package.json 旁边)
DeepSeek Harness(DSH)
1. 项目级:放到 <项目根>/.dsh/skills/github-release-download-acceleration/(<项目根> = 最近含 .git 的祖先目录)。
2. 用户级:放到 %USERPROFILE%\.dsh\skills\github-release-download-acceleration/(即 C:\Users\<用户名>\.dsh\skills\)。
3. 若技能目录本身不在任何含 .git 的项目里(比如它自己就是项目根,而你没有 init git),DSH 会把 projectRoot 退化成当前会话目录,此时用目录联接把它挂进用户级技能根即可:
$src = '<技能所在目录>\github-release-download-acceleration'
$dst = "$env:USERPROFILE\.dsh\skills\github-release-download-acceleration"
if (-not (Test-Path $dst)) { cmd /c mklink /J "$dst" "$src" }
挂好后用宿主的 skill 工具真正加载一次验证;只看目录存在不算数(DSH 会对技能目录热加载)。
4. 插件方式(推荐,和插件市场一致):
dsh plugin add github:chenjrastro-tech/github-release-download-acceleration
包装层就是 package.json + cordis.patch.yml + index.js 三个文件:DSH 装上后由 index.js 把包内的 SKILL.md 注册成技能(source: bundled、rank 600)。因此它同时是「能手动放的技能目录」和「能用 dsh plugin add 装的插件包」,两条路读的是同一份 SKILL.md,不会出现两份正文漂移。
5. 也发布到了 npm,但包名不叫 github-release-download-acceleration,而是 github-release-accelerator:
npm i github-release-accelerator
原因:npm registry 拒绝包名里出现 download 这个词(400 That word is not allowed),所以发布名去掉了它;仓库名与技能名保持不变(仍为 github-release-download-acceleration)。npm 包与 dsh plugin add 装的是同一份代码,在 DSH 里建议用上面第 4 条。
其它基于 SKILL.md 的宿主(Codex 等):把整个目录放进其技能目录,agents/openai.yaml 提供 display_name / short_description / default_prompt 展示信息。
环境要求:Windows 10/11 + Windows PowerShell 5.1 + 系统自带 curl.exe(Win10 1803+ 自带)。没有任何第三方依赖。
4. 使用方法
直接用自然语言说,不需要报端口、代理地址、并发数或仓库名。
给了 release 直链
帮我把 https://github.com/obsproject/obs-studio/releases/download/33.0.0/OBS-Studio-33.0.0-Windows-x64.zip 下下来,太慢了
只给 tag 页(技能会自己挑最大的资产,并说明选择理由)
github.com/neovim/neovim/releases/tag/v0.11.0 这个包下不动,你看着办
文件名可能记错(技能会先校验,对不上就停下等你确认)
https://github.com/junegunn/fzf/releases/download/v0.65.2/fzf-0.65.2-windows-x64.zip 帮我下这个
可选地给一个目标目录(例如 下到 D:\Downloads\_dl)。不给目标目录时由宿主任选一个不含空格的落地目录(第 7 步会拒绝含空格的路径——5.1 的 Start-Process 会把 -o 参数拆坏),并在报告里给出绝对路径。
内部执行顺序固定为:解析 URL → 环境自检 → 定位内核与配置 → API 校验资产名 → 并行探测路线 →(必要时)无头起内核 → 按需阶梯(<100MB 或单连接已够快则跳过)→ 下载 → 监控/降档 → 拼装 → digest 校验 → 收尾。
一次性 runner(宿主只能执行一条命令时)
有些宿主只肯跑一次本地命令,没有「逐块读文档再执行」的能力。这种场景用 runner,一条命令走完全流程:
# Windows:PowerShell 5.1 与系统 curl 都自带,不需要装任何东西 powershell -NoProfile -File scripts\ghdl.ps1 -Url '<release 直链>' powershell -NoProfile -File scripts\ghdl.ps1 -Url '<release 直链>' -OutDir 'D:\Downloads' powershell -NoProfile -File scripts\ghdl.ps1 -Url '<release 直链>' -ForceLadder # 强制单流 vs 多段对照 powershell -NoProfile -File scripts\ghdl.ps1 -Url '<release 直链>' -Parts 16 # 手动指定并发段数 powershell -NoProfile -File scripts\ghdl.ps1 -Url '<release 直链>' -ForceClean # 删旧分片/旧输出,强制重下 powershell -NoProfile -File scripts\ghdl.ps1 -Url '<release 直链>' -KeepParts # 校验通过也保留分片(排查用) powershell -NoProfile -File scripts\ghdl.ps1 -Url '<release 直链>' -Sha256 '<sha256>' # API 限流/手工下载时指定期望值,仍做闭环校验 # 任意直链也能用(自建 CDN / GitLab / 内网制品库),只做字节数校验 powershell -NoProfile -File scripts\ghdl.ps1 -Url 'https://example.com/big.bin'
行为约定(agent 可以直接依赖):
- 幂等:目标文件已存在且字节数(有 digest 时再加 SHA256)都对 →
ALREADY_DONE直接跳过,不重下。 - 可续传:分段方案写在
<asset>.parts/manifest.json;中断后
…(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:7,最后更新 2026-10-30