DeepSeek Harness 插件:dsh-deepsleep-progress

前言

DeepSeek Harness(DSH)的对话流里,当调用 wait_agent、job_output、bash 这类会阻塞等待的工具时,对话框会长时间保持空白,用户无法知道当前在做什么。这种「黑盒等待」容易让使用者产生焦虑,也缺少对超时风险的直观感知。

dsh-deepsleep-progress 是 DSH Web 插件,在阻塞工具卡正下方挂一条 elapsed / budget 进度条,随时间推进更新进度,并在预算用尽或返回结果时自动收起。进度条仅反映本地等待时长与超时预算的比值,不是真实完成度,但能让等待过程变得可见、可控。

这是什么

dsh-deepsleep-progress 是一个客户端插件,由维护者 xyzYaeMiko 开发,分类为「客户端」。它为 DSH Web 中会阻塞的工具调用提供可视化的进度条,并附带一个图形化的设置页面,允许用户自定义样式、预算、末端图片与时钟格式。

核心价值是:在 DSH 对话流中为长时间等待的操作提供「可见的等待」,让开发者与使用者都能更清晰地掌握当前任务进度与超时风险。

核心功能

进度条显示

插件在对话流中,为符合条件的工具调用(wait_agent、job_output、bash、ask_user_question)在工具卡正下方插入一行进度条。该行在 tool/result 事件到达前一直显示,返回后自动隐藏。

进度条内容为 {elapsed} / {budget},其中 elapsed 来自会话日志中 tool/call 事件的 time(epoch ms),时间基准是工具调用开始时刻,不是插件加载时刻。

预算来源

预算(budget)有四个优先级,按顺序判断:

  1. 命令字面量:命令中包含 sleep N(bash)或 Start-Sleep …(pwsh)的时长,多个累加。echo "sleep 5" 这种不作为命中。
  2. 调用参数:参数中的 timeout_ms、timeoutMs 或 timeout(毫秒)。如果参数值小于预算,则作为封顶。
  3. 配置项:config.tools[工具名] 里配置的预算(毫秒)。
  4. 都不存在 → 预算未知,不画进度条,只保留左侧图片与文字 elapsed / —。

默认预算(白名单):

工具 默认预算 说明
wait_agent 30000 工具默认 timeout_ms: 30000
job_output 60000 估算值;显式传 timeout_ms 时以参数为准
bash null 命令字面 sleep N 时按 N 走满;否则只有显式传 timeoutMs 才显示确定进度
ask_user_question null 隐式无限等待

不在白名单里的工具永远不显示进度条。

三态显示

进度条根据预算与 elapsed 的关系呈现三种状态:

  • 进行中:蓝色填充,随 elapsed/预算前进。
  • 超额:填充到 100% 转为橙色。
  • 预算未知:不画进度条,只保留左侧图片与文字(如 8.0s / —)。

末端图片

进度条填充的最前沿会挂一个图片,随进度一起移动(类似浮标/小人骑在进度头上)。

  • 默认:内置一张透明背景的「睡觉鲸鱼 + zzz」图(96px),data URI 嵌入 client.js,无需联网。
  • 自定义:通过配置 headImage 指定 http(s) URL 或 data URI。GIF / APNG / WebP 会自动播放动画。
  • 位置:图片中心对准填充前沿,并在轨道内 clamp,半张图不会溢出轨道两端。
  • 未知预算:不画进度条,图片和文字停在左侧,只走时钟。
  • 关闭:headImage: '',行高回落到 14px。

建议图片大小 ≤ 200KB、边长 ≤ 128px,避免影响存储与解码性能。

图形化设置页

DSH 设置 → 等待进度条(英文界面:Settings → Wait progress)是本插件贡献的独立设置页。页面改动立即生效,当前显示的进度条会同步更新。

设置页能力包括:

  • 通用:总开关、前置文案(默认 deepsleeping)、时钟格式({elapsed} {budget} {remaining} {ratio})、工具白名单与预算。
  • 末端图片:开关、内置图、恢复默认图、从本机选择图片(PNG/GIF/WebP)、URL 或 data URI、大小、未知预算时的显示。
  • 尺寸与间距:轨道高度、圆角、左缩进、上下间距、文字大小。
  • 颜色与背景:填充色、超额填充色、轨道底色、文案颜色、时钟颜色。每个颜色有系统取色器 + RGB / 十六进制输入框。
  • 时序:出现延迟(默认 350ms)、走字间隔(默认 100ms)。
  • 清空本机覆盖:一键回到插件 Config 的默认值。

持久化约定:页面改动存在当前浏览器的 localStorage(键 wait-progress:settings:v1),作为插件 Config 的本机覆盖。cordis.patch.yml 里的 Config 仍是默认值,两者叠加时本机覆盖优先。因此设置不会跨浏览器/跨设备同步;换机器或清浏览器数据后会回到 Config 默认值。

安装与启用

npm 安装(市场收录后可用)

plugin_manager({ action: 'install_bundle', target: 'dsh-deepsleep-progress@0.1.0' })

本地开发安装

plugin_manager({
  action: 'install_bundle',
  target: '/absolute/path/to/this/repo',
})

安装后查看返回的 application:applied 即已生效(HMR),restart-required 才需要重启。

首次安装后插件立即生效(HMR);之后修改 Config 需要刷新页面才能读到新值。

典型用法

在 profile 的 cordis.patch.yml 中配置插件,覆盖默认预算与样式:

- id: deepsleep-progress
  config:
    # 白名单 + 预算(毫秒;null = 预算未知)
    tools:
      wait_agent: 120000
      job_output: 90000
      bash: 600000
      pwsh: 600000
      ask_user_question: null
    # 外观
    accent: 'rgb(77, 107, 254)'
    overrunAccent: 'rgb(240, 169, 58)'
    track: 'rgba(148, 158, 190, 0.22)'
    height: 4
    radius: 2
    inset: 22
    gapTop: 2
    gapBottom: 6
    fontSize: 11
    label: deepsleeping
    # 末端图片
    headSize: 18
    clockFormat: '{elapsed} / {budget}'
    unknownBudgetText: '—'
    # 行为
    enabled: true
    inferSleepBudget: true
    showDelayMs: 350
    tickMs: 100

在 DSH 设置 → 等待进度条里,通过图形化界面调整上述配置,或从本机选择图片作为末端浮标。

适用场景与注意

适合需要调用长时间运行工具(如等待外部服务响应、执行耗时 bash 命令、轮询 job_output)的场景。进度条能帮助用户感知等待时长与超时风险,减少对「卡死」的误判。

注意事项:

  • 进度条表示的是「本地等待时长 ÷ 超时预算」,不是真实任务完成度。预算未知时不会画进度条。
  • job_output 的默认 60s 上限是估算值,前端不可见;显式传 timeout_ms 时以参数为准。
  • 首次安装后,如果页面已打开,Config 的 global 要等刷新才注入;插件本身仍会以内置默认值立即渲染。
  • 设置页的改动仅保存在当前浏览器的 localStorage,不跨设备同步;图片用 data URI 存在本地,单张限制 2MB。
  • 容器与文字默认使用主题 token(--dsw-alias-*),颜色字面值属于插件 artwork 范畴。

插件以当前 DSH 进程权限运行,安装前应检查源码与许可证(MIT)。

短结尾

dsh-deepsleep-progress 为 DSH 对话流中的等待操作提供可视化的 elapsed / budget 进度条与图形化设置页,适合需要处理长时间工具调用的场景。更多细节与源码可访问插件目录页与 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜