中文EN

github-release-accelerator

skill已测通过npmMIT

在 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

下载量 / Downloads
1,352
依赖体积 / node_modules
0.56 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

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

链接

GitHub · Homepage · npm

同类插件