Repository navigation
Releases
v0.2.9
- todo-reminder 加收尾检查:模型给出最终答复、准备结束这一轮时(DSH 的
agent/turn-stopping钩子),清单还有未完成项,就让模型再走一步、只调一次todo_write把清单对齐,写完直接结束本轮。每轮最多一次,只管顶层会话;closingCheck默认auto,chat-answer-fix 生效时才开。 - chat-answer-fix:已结束的一轮最后一步只是
todo_write时,取前面最近一段正文当回答,总结不被收进折叠里。 - stream-stall:修复误报。DSH 读到
message_stop就取消读取,插件没撤计时器,stallSeconds后会对已经结束的请求记一次"卡住"(只多一条日志,不影响会话)。现在读到message_stop或读取被取消时停止计时。
v0.2.8
v0.2.7
- 调优预设改为默认关闭。用某个预设开始的对话会一直绑在这个预设上,预设没了或加载失败(比如 0.2.6 修的那次 DSH 升级),这些对话就打不开;而它省不省时还没有同任务的耗时数据,不该默认带上。用过调优预设的请在自己的
cordis.patch.yml里加- id: runtime-tuning-preset-tuned和disabled: false,否则升级后那些对话会显示「会话不可用」。 打开方法和注意事项见 docs/configuration.md。 - 新增测试:把调优预设和本机 DSH 的 standard 逐项比较,除了有意去掉和加上的几项,有差异就报出来,DSH 升级后先跑测试再手动更新预设。
安装 / 升级:dsh plugin --profile web add github:herenfor/dsh-runtime-tuning#v0.2.7,然后重启 DSH。
v0.2.6
- 适配 DSH 0.2.2-rc.1,要求的 DSH 版本改为
>=0.2.2-rc.1;还在 0.2.1 上请继续用 0.2.5。 - 修复调优预设:0.2.2 去掉了
dsh-tool-subagent-control/list-agents子路径(并进了dsh-tool-subagent-control),旧预设引用它,用调优预设的会话打不开(显示「会话不可用」),新建也不行。预设按 0.2.2 的 standard 更新:去掉这个子路径,tool-subagent的modelSelectionSettings换成modelSelection/modelDiscovery,tool-fs加applyPatch: false,加上插件管理工具,委派组加workflowEngine隔离。 - chat-answer-fix:显示设置的字段按当前官方 Config 读(0.2.2 加了
foldedReplies);DSH 刚启动时加载器还在重载事务里,搬设置报HMR transactions cannot be nested,现在过一会儿重试。新版加载器(cordis-plugin-loader 1.1)给的条目是迭代器,原来在同一个迭代器上找两次,找不到我们这一行,每次启动都把设置重写一遍(还多写一行disabled: false);现在先转成数组。
安装 / 升级:dsh plugin --profile web add github:herenfor/dsh-runtime-tuning#v0.2.6,然后重启 DSH。
v0.2.5
- 新增 stream-stall:模型回答开始输出后只剩心跳、连续
stallSeconds(默认 180)秒没有新内容时,断开这次请求,DSH 按传输失败自动重试。官方的流空闲超时被心跳重置,服务端降级时会一直停在"思考"。不限制思考时长和输出长度;第一个内容出来之前默认不管。 - 文档里的 dsh-task-notify 改成它的后继 dsh-sentinel。
安装 / 升级:dsh plugin --profile web add github:herenfor/dsh-runtime-tuning#v0.2.5,然后重启 DSH。
v0.2.4:对话显示设置重启后不再丢失
修复
- chat-answer-fix:工具步骤的展示方式等显示设置,每次重启 DSH 都会回到「详细」。0.2.2 起受影响。原因是浏览器端读写的是官方
ui-chat这一行,而实际运行的是替身runtime-tuning-ui-chat。现在改为读写替身这一行;以前存在ui-chat上的设置,启动时会搬过来一次,替身这一行已有的设置不会被覆盖。 - chat-answer-fix:查找官方聊天界面时,先按 Node 的模块解析从 dsh 入口找。以前 DSH 不是用 pnpm 装的(比如 npm 全局安装、或者打包进应用),会找不到聊天界面,整个界面出不来。
升级后重启 DSH 即可。DSH 主程序之外的功能(任务通知、托盘、崩溃防护、插件健康检查)在 dsh-sentinel。
v0.2.3 · 修复聊天界面加载失败,新增凭据遮挡、fs-view、调优预设
用 0.2.2 的请尽快升级。 0.2.2 的聊天界面替身有个 bug:如果在设置里改过对话显示方式,聊天界面会加载不出来,只剩工作区文件夹。数据没丢,升级后重启即可。
修复
- chat-answer-fix:profile 里官方
ui-chat带着用户设置时,替身把已经解析过的配置又过了一遍 schema,导致加载失败。现在只解析一次,失败时退回加载器给的配置。
新增
- secret-files:凭据文件在沙箱里看不见,文件工具也读不到。
- 默认遮住 DSH 的 API key、云服务凭据(AWS / gcloud / Azure / kube / docker)、包仓库发布凭据;WSL 下连 Windows 那一份一起遮。
- 遮挡是挂载层面的:软链接、
cp、tar、python、子进程读到的都是一份说明,不是真实内容。 - git 组(SSH 私钥、git 凭据、gh 登录)会影响推送,默认不开。
- 已知缺口见 docs/configuration.md。
- fs-view
- edit 前文件没用 read 读过、或读后被 shell 改过时,照常按原文精确替换,不再报错让模型读一遍再重试。write 仍要求先读。
- read_image 按文件头认图片格式,JPEG 存成
.png也能读。
- session-tmp:文件工具里的
/tmp和 bash 看到的是同一个,curl -o /tmp/x.png之后 read_image 能直接读到。只在确认换过 bwrap 的/tmp时生效。 - 调优预设(tuned):模式里多一个"调优"。去掉日常编码用不到的工具,加一段用好工具的规则(能一起拿的一起拿、能一步改完的一步改完)。不限制思考,标准模式不受影响。
验证
在 DSH 0.2.1-rc.5 web profile 中实测,87 项自动测试全部通过。
edit 未读即改只做了自动测试,真实会话里还没触发过。
v0.2.2 · 答复不再被折叠
答复不再被收进折叠里。 DSH 的聊天界面只把"不带工具调用的最后一步"当作回答显示。如果一轮是带着工具调用结束的(比如模型在同一条回复里写了答复、又调用了 task_status),答复就会被收进"已完成,用时……"的折叠里,必须点开才能看到。
官方仓库不接受 issue 和 PR,所以这次的修复以插件的形式提供,名为 chat-answer-fix:
- 插件包会停用 DSH 自带的聊天界面那一行,换成一个替身。替身沿用官方的包名,所以其他依赖聊天界面的界面插件不受影响;你原来写在
ui-chat上的配置也会照常生效。 - 替身的浏览器端代码,每次启动时都从当前版本的官方文件重新生成,只改了一个判定。如果 DSH 以后改了实现、找不到这一行,就原样使用官方文件,效果和没装这个插件一样。
- wait-guard 的
concludeTurn默认改为'auto':替身确实在用时,答复和task_status写在同一条回复里,会直接结束这一轮,省掉一次模型请求;如果你关掉了替身,就退回到"答复单独一步"的做法。
已在 DSH 0.2.1-rc.5 上实测,67 项自动测试全部通过。升级后需要重启一次 DSH。不想要这个替换的话,在 docs/configuration.md 里有关闭方法。
v0.2.1 · 提问重新不阻塞、长命令提前转后台、网络失败日志
- ask-nonblocking 重新生效。 DSH 升级以后,pnpm 仓库里会同时留着新旧两份
dsh-tool-ask-user,插件原来要求只能有一份,所以从升级到0.2.1-rc.5起,每次提问都退回了阻塞版。现在改为直接用正在运行的 dsh 自己链接的那一份,以后升级也不会再出这个问题。 - 命令自带
timeout N时提前转后台。 模型在命令里写了timeout 290,说明它知道这条命令要跑很久,却还是放在前台,DSH 要等 60 秒才会转后台。现在这种命令到 30 秒就转后台。有一次真实任务里,命令转到后台后模型没意识到它还在跑,又启动了一遍,这次改动也减少了这种情况。 - 新增 net-log。 连不上 DeepSeek 时,DSH 的日志里只有一句
transport failed。最近 60 个会话里出现了 172 次,其中 106 次都是恰好卡 5 秒后才报错。现在会记下底层原因、请求走到了哪一步、耗时多久,不记录请求头和请求内容。 - 封顶自带保护。 如果关掉了 bash 的
promoteOnTimeout,命令到点会被直接杀掉,而不是转到后台。插件检测到这种情况时,会停用封顶。
已在 DSH 0.2.1-rc.5 上实测,60 项自动测试全部通过。升级后需要重启一次 DSH,新的 net-log 插件才会加载。
v0.2.0 · 收尾清点、任务事实、session-tmp
这一版针对的是遗留的后台任务:一次真实任务里,模型在命令沙箱里用 ps 看不到自己启动的后台扫描,以为它已经退出,留下一个空转近 40 分钟的进程。原因和做法见 README 的“发现六”。
- 收尾清点(wait-guard,
turnEndAudit):一轮结束时还有没认领的后台任务,1 秒后唤醒一次,列出任务 id、已运行时间和命令,要求逐个选择:在等、是服务,还是job_kill。 - 任务事实(wait-guard,
jobNotes):查进程、重复启动同一个脚本、没有新输出还在查、子代理还在跑时,在结果后面附上 DSH 任务表里的事实。 - session-tmp(新插件,Linux):同一个对话(包括子代理)的命令共用一个
/tmp,别的对话和宿主的/tmp仍然隔离。日常使用的 90 个会话里,有 25 个出现过/tmp文件消失导致的报错,共 54 次。 - 静默封顶(wait-guard,
silentClamp):前台命令超过 30 秒的timeoutMs直接改成 30 秒(到点转入后台),超过 15 秒的阻塞式job_output改为非阻塞,不再“拒绝后重试”。
在 DSH 0.2.1-rc.5 web profile 中实测,51 项自动测试。已知限制:命令里的 ps 仍然看不到后台任务,要改需要改 DSH 核心。
升级后需要重启一次 DSH,新的 session-tmp 插件才会加载。