Skip to content

Releases

v0.2.9

Choose a tag to compare

@herenfor herenfor released this 08 Nov 11:33
  • 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

Choose a tag to compare

@herenfor herenfor released this 05 Nov 10:08
  • 新增 todo-reminder:任务清单还有没做完的项、又 15 步没更新时,在工具结果后附一条提醒和清单当前内容,让模型对一下进度(参考 Claude Code),并请它和下一个工具调用放在同一步更新,不单独占一步。官方 todo_write 只记录不提醒,长任务里清单常常写一次就停在第一项。没写过清单或已全部完成时不提醒;阈值可配。

v0.2.7

Choose a tag to compare

@herenfor herenfor released this 04 Nov 11:35
  • 调优预设改为默认关闭。用某个预设开始的对话会一直绑在这个预设上,预设没了或加载失败(比如 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

Choose a tag to compare

@herenfor herenfor released this 04 Nov 11:23
  • 适配 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

Choose a tag to compare

@herenfor herenfor released this 03 Nov 09:54
  • 新增 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:对话显示设置重启后不再丢失

Choose a tag to compare

@herenfor herenfor released this 02 Nov 07:07

修复

  • 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、调优预设

Choose a tag to compare

@herenfor herenfor released this 01 Nov 09:56

用 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 · 答复不再被折叠

Choose a tag to compare

@herenfor herenfor released this 01 Nov 06:44

答复不再被收进折叠里。 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 · 提问重新不阻塞、长命令提前转后台、网络失败日志

Choose a tag to compare

@herenfor herenfor released this 31 Oct 05:59
  • 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

Choose a tag to compare

@herenfor herenfor released this 30 Oct 17:13

这一版针对的是遗留的后台任务:一次真实任务里,模型在命令沙箱里用 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 插件才会加载。