可拖动的后台任务浮动卡片:从 wget/curl/apt/pip 等输出解析进度条与百分比,显示耗时、剩余时间(有则显示)和最新一行输出。
安装
# Release 预构建包
dsh plugin --profile web add "https://github.com/yezitotempeace/dsh-job-progress/releases/latest/download/dsh-job-progress.tgz"
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:yezitotempeace/dsh-job-progress
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
后台任务(下载、构建、渲染……)一跑起来,会话右下角就出现一张浮动卡片: 每个任务一行,带进度条、百分比、耗时和最新输出;全部结束后自动消失。
显示什么
| 部分 | 说明 |
|---|---|
| 标签 | 任务标签,通常是启动它的命令 |
| 状态 | 圆点:绿=运行中、黄=停止中、红=失败、灰=已结束 |
| 进度条 | 优先用任务自带的 progress;没有就从输出尾部解析 45%、curl 表格行、1.2 GB / 3.4 GB;都认不出就显示不确定进度条 |
| 百分比 | 有数字时显示在右侧 |
| 耗时 | 运行中实时走秒,结束后定格 |
| 最新输出 | 最后一行(去 ANSI、压缩空白、截断 180 字符),有 ETA 时附「剩余 3m 20s」 |
最多显示 4 行,多出来的显示「还有 N 个」。
交互
- 点标题栏收起成右下角小胶囊:
后台任务 2 个+ 总进度条 + 平均百分比;再点展开。 - 整张卡片可以拖动:按住标题栏拖到屏幕任意位置,位置记在浏览器(
localStorage的dsh-job-progress/position),刷新后还在;收起后的胶囊也能拖。拖出屏幕会被拉回可视区。 - 任务结束后保留 8 秒显示最终状态,然后卡片消失(没有任务时完全不渲染)。
- 只观察当前会话的任务;输出流按需订阅,卡片卸载或任务结束即释放。
能认出哪些进度
wget、curl(默认表格和 -# 进度条)、apt、pip、npm,以及任何往标准输出打 NN% 的程序。
识别是启发式的:
- 优先用 DSH 任务自身的
progress字段(有的任务会自己上报); - 否则扫输出尾部 40 行找百分比,兼容
\r刷新的进度; - 再不行就显示不确定进度条 + 最新输出,至少能看到它在动。
实现要点
| 部分 | 做法 |
|---|---|
| 数据 | ctx.jobs.state(roster)+ ctx.jobs.watchRows(sessionId) + ctx.jobs.observe(sessionId, id) |
| 挂载 | conversation.session.header.actions(只取 sessionId),内容用 createPortal 渲染到 document.body |
| 进度解析 | 纯函数 parseProgress(text):去 ANSI → 按 \r\n 切 → 从尾部找 % / curl 表格 → 速度、ETA、字节比 |
| 渲染 | 固定定位,z-index: 60,默认右下角(bottom 含安全区偏移),主题 token 取色 |
| 拖动 | pointer 事件 + setPointerCapture;移动超过 4px 才算拖,否则算点击;位置钳制在视口内并写 localStorage |
不读会话内容,不发额外网络请求(只订阅任务输出流)。
测试
node test/smoke.mjs
# [job-progress] PASS (19 项)
覆盖:bundle 注册与 inject、parseProgress 的 wget/apt/curl 表格/curl 进度条/pip/ANSI/
\r 刷新/字节比/ETA、普通日志不误判、空输出、拖动位置的边界钳制。
安装
dsh plugin --profile web add github:yezitotempeace/dsh-job-progress
然后把 dsh-job-progress 加进 profile package.json 的 dsh.profile.bundles,重启 Web。
(plugin add 只装依赖,bundle 不会自动挂载。)
本机开发:仓库放进 /root/dsh-job-progress,dependencies 写
"dsh-job-progress": "link:/root/dsh-job-progress",dsh.profile.bundles 加 dsh-job-progress,
建 node_modules/dsh-job-progress 链接,重启 Web。
限制
- 任务必须往标准输出打进度才能解析出百分比;写进文件的进度看不到。
- 卡片固定右下角,窄屏上位于输入框上方,可收起成胶囊。
- 输出流由 DSH 的
job.follow提供,卡片关闭后不再保留输出。
许可
MIT
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-task-board★ 9262
侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
zhu1090093659/dsh-web#packages/dsh-web-all★ 9262
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 5677
右下角常驻的小鲸鱼挂件:余额、今日已用与每轮对话消耗(含峰谷价),余额预警与今日预算的泡泡内容都可编辑;泡泡点击序列模块化自定义,支持并列加权 A/B、随机台词与随机图片;内置 30+ 厂商模板(OpenAI / OpenRouter / Kimi / 硅基流动 / 方舟 / 智谱 / MiniMax 等),按模型查余额与订阅额度;另有任务结束音效、导入音频、自定义角色与资源管理。数据全在本机,无遥测。
ccch1mneyyy/dsh-TUI★ 5125
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。
omdsh-dev/DSH-better-sidebar★ 4413
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
Devin-AXIS/deepseek-design#deepseek-idesign★ 1491
可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。