🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI
广告☁️ 云服务器特惠阿里云首购 8 折 · 腾讯云合作特惠
DeepSeek Harness Hub
← 返回列表

akvi0921/dsh-build-progress

DeepSeek Harnessspec-screened扫描:低风险在 GitHub 查看 ↗
未验证

DSH 构建进度条推送插件:构建 APK 时在会话流折叠工具条标题处原地刷新显示 Gradle 进度条

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/18 · 已提供中文文档
综合分
29.2
GitHub 分
29.2
用户评分
—
★ Stars
0
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add akvi0921/dsh-build-progress
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
信任档位:已验证本站已于 0 天前真实安装成功
是什么
dsh 原生插件 · other
装得上吗
本站已真实安装成功(非静态推断)
安全吗
本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
还在维护吗
活跃:最近一次提交在 8 天前

档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →

🟢实装验证通过· 2026/9/25
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/25(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

由 DeepSeek 最新模型翻译生成
dsh-build-progress —— 构建进度条推送插件

唯一用途:构建 APK(或任何 Gradle 构建)时,让前端在会话流的折叠工具条标题处原地刷新看到构建进度条,
形如  73% EXECUTING [1m 32s]。除此之外什么都不做。

- 🎯 只认 gradle / gradlew 命令
- 📉 只抽进度那一行(剥掉 ANSI 后取最后一次匹配),变化才推
- 🔌 自建 WebSocket /api/build-progress(官方 registerUpgrade)
- 🧠 自动注入一条运行时要求,让助手用能看到进度条的方式跑构建(见下)
- 🚫 不落日志、不留历史、不推 stdout/stderr 正文、不推命令原文
- 🪶 单文件、零依赖(宿主侧复用 DSH 自带的 ws)

配套的 Android 前端(dsh-aui 2.0.3)把它渲染到会话流里那条构建工具行的标题位置,原地刷新;
构建结束后不撤下,而是换成收尾行(✅ BUILD SUCCESSFUL in 2m 23s / ❌ BUILD FAILED in 1m 3s)留在原处。

安装

1) 放插件文件
mkdir -p ~/.dsh/profiles/web/plugins/build-progress
curl -fsSL https://raw.githubusercontent.com/akvi0921/dsh-build-progress/main/index.js \
-o ~/.dsh/profiles/web/plugins/build-progress/index.js
国内网络可用镜像:https://ghfast.top/https://raw.githubusercontent.com/...

2) 追加组合行(保存即热生效;~/.dsh/profiles/web/cordis.patch.yml)
cat >> ~/.dsh/profiles/web/cordis.patch.yml {console.log(String(m).slice(0,120));process.exit(0)});
ws.on('error',e=>{console.log('✗',e.message);process.exit(1)});"

它自动注入的运行时要求(关键)

--console=plain 下 Gradle 根本不画进度条;而一旦输出被 > log.txt、| tail 接走,插件也就采不到。
这两件事都发生在"助手决定怎么跑命令"的那一刻,所以插件在挂载时通过官方 systemPrompt.context()
注册一条每轮都会并入上下文的片段(GUI 的「上下文注入」块里能看到):

- 构建必须这样跑:TERM=xterm-256color script -q -f -c "gradle assembleDebug --console=rich" /dev/null
- 不要重定向/接管道;要看尾部结果就等构建结束再单独 tail/cat

也就是说:装了这个插件,助手自己就会用能看到进度条的方式跑构建,不需要你每次叮嘱。

帧协议(WS /api/build-progress,版本 1)

| 帧 | 字段 | 说明 |
| --- | --- | --- |
| hello | builds:[{callId,sessionId,text,percent,phase,elapsed}] | 连上即发,只反映此刻在跑的构建(不是历史) |
| build-progress | callId,sessionId,text,percent,phase,elapsed | 进度行变化时推;text 如  73% EXECUTING [1m 32s] |
| build-done | callId,sessionId,exitCode,ok,text,percent,elapsed | 构建结束;text 是收尾行(优先取 Gradle 自己的 BUILD SUCCESSFUL/FAILED in …),前端把它留在该行 |

callId 是官方 tool/call 事件的调用 id,前端靠它把进度画到对应的那一行工具上。

实现要点(踩过的坑)

- 热插入的条目 Cordis 不调 apply(父 include 事务不 settle),所以插件在 import 时自举挂载:
钩住 Context.prototype.extend/isolate/intercept 取 root ctx,轮询到 webServer + subprocess 就位再挂。
- 声明式 inject = ['webServer','subprocess'] 是启动路径的正确姿势(否则 apply 早于服务注册)。
- 进度行要剥 ANSI 后取最后一次匹配:rich 控制台把  拆成多段并夹带光标移动/擦除序列,
只处理 \r 会把重绘串成一行垃圾。
- 改插件内容想在本进程内立即生效:组合行的 name 加个查询串换 URL(如 index.js?v=3)—— ESM 按 URL 缓存。

边界

1. 只对 Gradle 类构建生效(其它工具的花式 spinner 不推)。
2. 后端基址必须是本机回环(127.0.0.1/localhost):通道只信任回环请求。
3. 进度只在构建进行中显示,结束后换成一行收尾结论留在原处(前端内存里,应用重启/会话重载即清),不落盘、不进会话日志。

License

MIT

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

同作者(akvi0921)的其他插件

💬 加入社群

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

DPharness QQ 群二维码,QQ 扫码进群
QQ 扫码进群
DPharness 飞书群二维码,飞书扫码进群
飞书扫码进群