dsh-status-turbo:把「现在卡在哪」收成 composer 底栏一行状态

前言

用 DeepSeek Harness(DSH)跑长任务时,常见情况是:工具命令已经跑了两三分钟,页面没有新日志,也不确定进程是还在跑还是已经挂住。DSH 自带的 composer 底栏会给出轮次、步数、tok/s、总 token、缓存命中等会话级指标,但不会单独标出「当前这一步在干什么、这一步已经多久、这一步用了多少 token、多久没有新输出」。

dsh-status-turbo 是社区维护的 DSH 客户端插件,由 dgy970516 发布在 SkillHub 目录 与 GitHub。它把宿主会话日志投影成一条极窄状态展示,并进 DSH 自带的 composer 底部状态行右侧,不额外占一行,也不通过轮询宿主或注入 DOM 来更新;本阶段耗时用客户端本地时钟每秒刷新,日志静止时数字仍会跳。

这是什么

一句话:dsh-status-turbo 在对话输入区域底部的原生状态行上,补全「阶段、本阶段耗时、本步 token、无进展告警」等逐步信息,并支持点开详情面板查看活动流与用量摘要。

实现方式上,宿主把状态投影成名为 turbo 的 wire 视图(当前文档约定版本 v: 13、共 37 键)。客户端将 EXPECTED_V 固定在 13;若宿主与客户端版本不一致,状态条位置会显示红字「投影版本错配(宿主 vN ≠ 客户端 vM)」,而不是静默消失。

插件当前版本为 0.21.2(见仓库 package.json),许可证 MIT,运行环境要求 Node ^22.19.0 || >=24.0.0。

状态条显示什么

状态条示例形态如下(摘自 README):

● 执行工具(bash)   2:14   3.1K tok

各字段含义如下。

字段 含义
阶段 如 组装提示词、请求模型、接收流、执行工具(<名字>)、等待批准、压缩上下文
本阶段已耗时 每秒刷新,不依赖推送
本步 token 当前 step 累计输入+输出(0.19.2 起条上只显示数量,完整说明在 title)
无进展 超过 noProgressMs(默认 90000 ms)没有任何新产出时,该格变黄并标注卡了多久(0.19.2 起条上保留四字摘要,判据全文在 title)

刻意不重复原生底栏已有的:会话轮/步、tok/s、总 token、会话级缓存命中、上下文占比。每步缓存命中率仍在投影数据 hitRate 中,但不再单独占一格。

0.19.2 起,推理档位(B1 实际发出的档位,取自会话日志 request/header)不再占状态条,因原生推理档选择器已显示同一值;档位信息留在详情面板。

空闲时状态格不会消失,会保留「上回合摘要」,例如 ● 请求模型 · 上回合 42.3s,数据来自宿主下发的 idleLine / lastTurnMs。

详情面板与活动流

点击状态条对应区域,会在输入框下方展开详情面板(槽位 conversation.input.dock,id dsh-status-turbo.detail);再点一次收起。收起状态或第一份快照未到之前,面板不渲染。

面板常驻分区包括:现在、活动流、本回合 / 上回合 / 缓存与用量 / 前缀 / 最慢的工具(maxMs 前 5)、等待占用 / 会话轮换 / 工具增强 / 交接文档;最近瘦身(lastSpill)与最近的故障(hookFaults)仅在确有内容时出现。

活动流只保存在内存环缓冲中,不落盘、不新增依赖、不改发出去的请求。它会根据日志记录:assistant/message 的思考摘要(截断到 reasoningChars)、tool/call 的工具名与脱敏参数、tool/result 的结果或报错前几行、turn/end 的结束原因。工具参数里命中 redactKeys(大小写不敏感、子串匹配)的键值会替换为 ***,循环引用记为 [Circular]。

宿主侧能力(与状态条同一插件包)

除客户端投影外,同一包还在宿主侧提供若干与长会话、成本相关的逻辑(README 中与状态条并列说明)。

按步降推理档(B1)

在连续若干步只调用只读工具且无报错时,可将当前步推理档降一档;一旦出现写入类工具或任何报错,立即回到原档。插件只降不升,不改默认模型或提供方。相关配置包括 downgrade(默认 true)、downgradeFloor(默认 low)、minQuietSteps(默认 2)及 readOnlyTools 白名单。判据不确定时按原档执行,不因插件导致请求失败。

超大工具结果瘦身(B3)

单条工具结果过大时,先经宿主 toolResultPruner.pruneContent,仍达到 spillThresholdBytes(默认 32768)时由宿主 spill 后端落盘,正文中附带绝对路径提示,可用 read(offset/limit)或 grep 继续查看。

缓存前缀失效(B4)

前缀作废时在状态条显示 前缀已失效 胶囊(最近 5 分钟内)。触发源包括 compaction 事件,以及单条 tool/result 载荷达到 bulkInjectionBytes(默认 32768)的 bulk-injection。

工具返回内提示(C1 / C2 / C3)

在不增加往返的前提下,向当前工具返回追加简短校正:无证据行(evidenceWhitelist 三条正则)、read 截断未读完、乱码或噪声输出等情形,README 中有具体文案与阈值(如 mojibakeMinRuns)。

交接文档自动导出

默认开启(handoffExport: true)。当本步输入 token 达到 handoffExportTokens(默认 240000)且距上次导出又增长 handoffExportMinDeltaTokens(默认 60000)时,通过 bili export 将会话导出为工作区下 handoffExportDir(默认 handoff)中的 Markdown。找不到 bili 时面板显示灰色「未找到 bili」,不记入故障列表。

安装与启用

推荐通过 DSH 插件管理器安装,或将包放入 profile 的 node_modules 后,在 profile 的 cordis.patch.yml 中 insert。README 中的说明如下:

# 装进 profile(推荐)
# 用 DSH 的插件管理器安装,或在 profile 的 cordis.patch.yml 里 insert 本包

手工拼装示例(节选常用 12 键,完整 46 键默认值以 lib/state.js · DEFAULT_CONFIG 及根目录 cordis.patch.yml 为准):

- insert:
    - id: dsh-status-turbo
      name: 'dsh-status-turbo'
      config:
        statusBar: true
        noProgressMs: 90000
        downgrade: true
        downgradeFloor: low
        minQuietSteps: 2
        spillThresholdBytes: 32768
        bulkInjectionBytes: 32768
        evidenceWhitelist:
          - '/exit code:?\s*0\b/mi'
          - '/(^|\n)\s*(#\s*(pass|tests|suites)\s+\d+|\d+\s+passing|Tests:\s+\d+\s+passed|Test Suites:\s+\d+\s+passed|ok\s+\d+\s+-)/m'
          - '/(^|\n)\s*(Successfully compiled|Compiled successfully|Found 0 errors|\d+\s+files?\s+checked,?\s*0\s+errors|Build succeeded|Done in \d)/mi'
        stuckAction: warn
        stuckRounds: 3
        stuckRepeats: 3
        mojibakeMinRuns: 2

注意:不要把同一包同时列进 dsh.profile.bundles 和 profile 的 cordis.patch.yml,否则会被加载两次。

典型用法

1、安装并启用插件后,打开 DSH Web 客户端,在 composer 底栏原生状态行右侧观察阶段与耗时是否在工具执行、等模型流式输出时更新。

2、长命令无日志时,看本阶段耗时是否继续增加,以及是否出现无进展告警(默认 90 s 无新产出)。

3、需要看最近工具调用与思考摘要时,点击状态条展开详情面板,在活动流中查看最新条目。

4、若需关闭按步降档或调整无进展阈值,在 cordis.patch.yml 的 config 中设置 downgrade: false 或修改 noProgressMs 等键(各键均可省略,省略则用默认值)。

适用场景与注意

适合经常在 DSH 里跑多步工具链、需要一眼判断「当前阶段与是否卡住」的开发者。客户端分类插件,依赖 @deepseek-ai/dsh-client-modules 与 @deepseek-ai/dsh-client-ui-settings 注入(见 package.json 的 dsh.client 段)。

DSH 生态采用「一切皆插件」思路;SkillHub 为社区目录,与 DeepSeek / 幻方无官方从属关系。插件在 DSH 进程权限下运行,安装前请自行审阅 源码与许可证,并按组织策略评估 B1 降档、工具结果 spill、交接导出等宿主侧行为是否符合预期。

结尾

dsh-status-turbo 用纯日志投影在 composer 底栏补全逐步状态与无进展提示,并可选展开详情面板,减轻长任务时「不知道卡在哪」的不确定性。进一步了解可访问目录页 https://www.skillhub.cn/plugins/dgy970516/dsh-status-turbo 与仓库 https://github.com/dgy970516/dsh-status-turbo 。

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

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

Xiaoye