dsh-runtime-tuning: Tuning DSH Runtime with Real Session Data

前言

DeepSeek Harness(DSH)在系统提示里已经写了不要轮询、不要长时间阻塞等待,后台任务结束也会通知模型。实际长会话里,模型仍可能用 job_output wait: true 占住整轮对话,或在沙箱里用 ps 误判后台任务已退出。凭据一旦被问进对话,会反复出现在命令和上下文里。这些问题多半不是缺机制,而是缺在运行时侧的一致约束与补救。

下面介绍维护者 herenfor 发布的 dsh-runtime-tuning:一组装在 DSH 主程序内部的调优插件,覆盖工具执行、文件工具、沙箱与凭据保护、聊天界面修复;每项改动都对照导出的真实会话统计验证。任务提醒、托盘启动和崩溃防护在 sibling 项目 dsh-sentinel。插件在 SkillHub 目录分类为「工作流」,仓库 herenfor/dsh-runtime-tuning 当前版本 0.2.5,MIT 许可证,Node.js ^22.19.0 || >=24.0.0,声明支持 DSH >=0.2.1-rc.4 <0.3.0-0。

这是什么

dsh-runtime-tuning 不是单一功能点,而是一个插件包:通过 cordis.patch.yml 一次性注册多个子插件(wait-guard、secret-guard、session-tmp 等)和可选的调优预设 tuned。作者从一份 9.7 小时、119 轮、2347 次工具调用的日常发行会话出发,按事件统计时间去向,再对照 DSH 源码逐项落地拦截、兜底唤醒和界面修补。文档里也记录了仍依赖 DSH 核心、插件做不到的行为(例如审批占满整个 step、插话无法打断正在运行的工具)。

核心功能

子插件按职责划分,安装后默认一并启用(可在 profile 的 cordis.patch.yml 里按 id 覆盖配置或 disabled: true 关闭单项)。

wait-guard:不占住对话

拦截前台过长 sleep 和顶层 agent 的长时间阻塞式 job_output;对超长前台 timeoutMs 可在 tools/execute 阶段静默封顶(默认 30 秒)后转入后台。一轮结束时若仍有本次请求启动的后台任务,runtime 按事实判断「在等」,不依赖模型是否调用 task_status:未声明 waiting 时启用硬保底(默认 30 分钟)唤醒;收尾清点会在 1 秒后列出未认领任务,要求模型选择在等、标为服务或 job_kill。在命令结果后附加任务表事实(沙箱内 ps 看不到的后台任务等)。可选工具 task_status 用于长任务或标记 services。

作者在同一发行流程上的对比(README 表格):装插件后「对话被占住」约从 19–22 分钟降到 4.6 分钟,阻塞等待约从 13–15 分钟降到 0.2 分钟;收益主要是编译期间用户仍可插话,而不是任务本身更快结束。

ask-nonblocking:提问不阻塞整轮

在每个顶层 agent 创建时注册 DSH 官方的 timed 版 ask_user_question,遮蔽 preset 内默认阻塞版;默认约 1 秒后返回 pending,用户迟到的回答作为插话进入。依赖 DSH 内部接口,失效时写日志并退回阻塞版。

secret-guard 与 secret-files:凭据不进上下文、沙箱读不到文件

secret-guard 拒绝向用户索要令牌/密码/API key 的提问(引导用已登录的 gh 等),拒绝参数中含完整令牌的工具调用及 gh auth token,并在工具结果交给模型前将识别出的 GitHub 令牌、sk- 开头 key 等替换为 [REDACTED:…]。用户直接在聊天框粘贴的内容不在工具结果路径上,管不到。

secret-files 在 Linux bwrap / macOS Seatbelt 层把凭据路径挂载成说明文件或空目录,文件工具的 read/write/edit/grep 对相应路径拒绝;默认开启 dsh、cloud、registry 组,git 组默认关闭以免沙箱内 git push/gh 失败。

session-tmp 与 fs-view:沙箱与文件工具行为

session-tmp(仅 Linux):同一对话(含子代理)共用会话级 /tmp,避免 DSH 每条命令 --tmpfs /tmp 导致上一条写入下一条丢失;可选把文件工具参数中的 /tmp 映射到同一会话目录。

fs-view:在 edit 前将期望文件版本同步为当前版本,减少「未 read 过」或 shell 改过后必须先读再 edit 的多余一步;read_image 可按文件头识别 PNG/JPEG 等,扩展名不对时临时副本读取。

chat-answer-fix、stream-stall、net-log 与其余

chat-answer-fix 替换 profile 中的 ui-chat 行为:带工具调用结束的一轮,最后一步仍显示为回答(配合 wait-guard 的 concludeTurn: 'auto')。

stream-stall 在模型开始输出后若仅心跳、无新内容连续达到 stallSeconds(默认 180),断开 POST …/messages 的 SSE 请求,让 DSH 按传输失败自动重试。

net-log 记录连不上模型服务时 undici 侧的主机、路径、阶段与错误码(默认关注 deepseek.com)。

调优预设 tuned 在界面与 standard 并列可选:去掉部分日常编码用不到的工具,增加并行调用、合并只读检查等 tool-use-prompt,思考强度与验证不减。

安装与启用

声明支持 DSH 0.2.x(>=0.2.1-rc.4 <0.3.0-0);作者实测环境为 DSH 0.2.1-rc.4 的 web profile,Windows 11 + WSL2,Node.js 22.23.4。headless、sdk 等 profile 文档标明暂不支持(wait-guard 依赖「结束一轮等通知」的交互场景)。

在 WSL 终端执行官方安装命令:

dsh plugin --profile web add github:herenfor/dsh-runtime-tuning

也可用本地路径链接安装(作者本机常用 link: 方式):

dsh plugin --profile web add link:/path/to/dsh-runtime-tuning

安装后等当前任务结束,重启 DSH 并刷新浏览器。卸载:

dsh plugin --profile web remove dsh-runtime-tuning

卸载后重启;若在 cordis.patch.yml 里写过子插件 config 覆盖,需一并删除。

典型用法

1、安装并重启后,子插件默认生效;诊断日志在 $DSH_HOME/logs/dsh-runtime-tuning/(默认 ~/.dsh/logs/dsh-runtime-tuning/),各子插件一个 JSON lines 文件,不记录命令全文或对话内容。

2、按需改 profile 的 cordis.patch.yml,按插件 id 整块替换 config。例如调整 wait-guard 兜底倍数、或非阻塞提问超时:

- id: runtime-tuning-wait-guard
  config:
    backstopFactor: 3
- id: runtime-tuning-ask-nonblocking
  config:
    timeout: 30

用下面命令核对合并后的配置:

dsh --profile web --dump-config

3、若希望减少工具数量并统一工具使用提示,在 DSH 界面选择预设 调优(tuned) 而非 standard;不需要时在补丁里禁用 - id: runtime-tuning-preset-tuned。

4、与 dsh-sentinel 配合时,两者独立安装即可:sentinel 按后台任务与 task_status 的 waiting/services 控制「本轮完成」类通知时机;runtime-tuning 负责不占对话、凭据与沙箱侧行为。

5、不需要聊天界面替换时,可在补丁中恢复官方 ui-chat 并禁用 runtime-tuning-ui-chat(见 docs/configuration.md 示例)。

适用场景与注意

适合长期在 web profile 下用 DSH 做编码、发行、多轮工具调用,且关心对话是否被阻塞等待占住、后台任务是否在沙箱里被误判、凭据是否进入模型上下文的开发者。

安装前建议阅读仓库源码与 MIT 许可证;插件以当前 DSH 进程权限运行,secret-files 等会改变沙箱内可见文件范围,开启 git 组等选项前需理解对 gh/推送的影响。DSH 升到 0.3 前需等插件更新 engines 声明;ask-nonblocking 等对内部 API 的依赖可能在 DSH 小版本升级后失效(文档说明会退回阻塞提问,不阻断任务)。

社区目录页 skillhub.cn/plugins/herenfor/dsh-runtime-tuning 与 GitHub 无 DeepSeek / 幻方官方从属关系,属 DSH「一切皆插件」生态中的第三方条目。

结尾

dsh-runtime-tuning 把长会话里测到的时间浪费和机制缺口,落成一组可安装的 runtime 插件:强制非阻塞等待策略、凭据与沙箱隔离、会话级 /tmp 与文件 edit 便利、流卡住与网络失败可观测,并用真实数据说明「不占住对话」与「更快完成」的区别。完整配置项、日志字段与 chat-answer-fix 冲突说明见仓库 docs/configuration.md。

  • 目录页:https://www.skillhub.cn/plugins/herenfor/dsh-runtime-tuning
  • GitHub:https://github.com/herenfor/dsh-runtime-tuning
羽毛球分组比赛记分
小程序二维码

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

Xiaoye