本文基于
deepseek-harness仓库0.1.0-rc.7版本源码编写,聚焦 rc.5 → rc.7 两个版本窗口内的整体演进。文中路径均为仓库内相对路径(如packages/llm/llm-deepseek)。
一、这个窗口的宏观图景
dsh 的架构在 rc.5 时已经定型——Cordis 插件框架、Profile/Bundle 组装、Capability Seams 能力接缝、会话事件日志,这些在早期分析中已经讲透。rc.5 到 rc.7 这两个版本,不再堆功能,而是在做产品化:把架构里明显"有损"的地方补齐,把真实使用才会踩到的边界磨平。
整条窗口里的几百处改动,可以被收拢成两个主题,外加一条贯穿始终的侧线:
- 补全(Complete):把架构里"有损"的地方——尤其是图片多模态——补成闭环;
- 稳固(Solid):把长会话、跨浏览器、跨平台这些"真实使用才会踩到"的边界磨平;
- 深水区适配:作为 DeepSeek 自家的 agent 运行时,dsh 对自家模型的适配钻得更深。
后面两章分别展开两个主题,再单独开一章讲 DeepSeek 的适配。
二、补全:多模态从"有损"到闭环
dsh 早先把"非文本内容渲染有损"列为已知限制:MCP 工具返回的图片,到了模型上下文里只剩一个占位符;通过 ACP 发给模型的图片 prompt、以及模型回回来的图片回复,也都在这条链路上丢失。对一个要接真实工具链的 agent 运行时来说,这是架构里一个明显的洞——工具把图递进来,模型却看不见。
rc.7 把整个洞补上了,而且补的是整条链路,不是某一端:
- MCP 工具返回的图片,按顺序持久化成可靠附件(PNG/JPEG/WebP/GIF),再投影进模型上下文——工具那边不再"白跑一趟";
- ACP 一侧不仅图片 prompt 能发出去,模型的图片回复也能收回来;
- code mode 下的嵌套图片结果会被正确地继续转发;
- 新增的附件入口做"先全量校验、再统一落盘"的有序接纳,杜绝只写进去一半的坏图片。
这里的实质变化,是把图片从"路过的数据"升级成"贯穿模型上下文的一等公民"。图片保存下来的位置、进入上下文的时机、批量写入的完整性,都被认真设计过,而不是临时拼一条通路。
"图能在工具和模型之间闭环",是大量真实工作流的前提——截图进上下文、UI 走 ACP 自动化、MCP 返回视觉结果——dsh 在一个版本窗口里把这扇门彻底打开。要用上它的条件也很明确:挂载附件存储,并在模型路线上显式声明支持图片输入。
三、稳固:从"能跑"到"处处能跑"
第二个主题没有新玩法,却同样关键。这一档的共性在于:它们都是用户真刀真枪用起来之后才会撞上的边界——而这恰恰证明 dsh 已经脱离了"展示品"阶段,进入了"公开发布 → 真实反馈 → 打磨"的产品循环。
长会话是重灾区,bundle 了好几处结结实实的问题:
- 会话命中 max-tokens 且带着一个工具调用时,下一条请求会在历史重建中卡死,用户拿到的是一条永久卡死的会话——这不是体验问题,是数据问题;
- 一条收官消息可能引用几十万条历史事件,原来的分页写法在超长流式会话里会直接把服务搞出 500;
- 持久 shell 的提示符在每轮被覆盖,bash 会话退化成每次都要等三秒的静默档;
- 还有会话持久化文件损坏时的错误分类,此前会被当成别的错误误吞。
跨浏览器、跨终端的那一面也在被一点点磨平:Safari 里文本输入框在回删跨行时布局错位、Windows 下 pwsh 终端浮层重复加载、侧栏面板的暗色与关闭交互对齐到统一约定。
同样属于"稳固"的,还有分发方式的推进:node-pty 升级到自带预编译二进制的新线,Linux 下的单文件打包不再缺原生模块;Python SDK 的构建脚本补上了 native-pty 变体。分发是"让用户真的拿到东西"的最后一公里,这一窗口把它走完了。
而 Python SDK 这边做了一个很有象征意义的承诺:在 CI 里把"模型可见面"钉成快照——Python SDK 和 TS SDK 对同一个 agent 循环的投影,被断言为行为一致。两个语言的 SDK 是同一套运行的两种投影,这条原则从口号变成了可验证的契约。
四、DeepSeek 的适配深水区
dsh 是 DeepSeek 自家的 agent 运行时,这个窗口明显朝"对自家模型的原生适配"钻得更深了,方向有两个:成本档位与行为一致性。
成本这边,DeepSeek 的推理思考档位首次完整透传进运行时——此前想用一个比 high 更省的档会被 API 拒绝,现在 off / low / high / max 四个档全部直通。在推理成本敏感的今天,多一个"便宜够用"的档,等于给用户多了一把可以随时拧小的旋钮。
行为一致性这边,修掉的正是自家模型最容易触发的一类 bug:max-token 触发时回放状态与真实内容错位,导致会话永久卡死。一个运行时对自己家的模型越了解,用这个模型的人就越省心——这个窗口里 dsh 对 DeepSeek 的适配,已经明显是"亲儿子"级别的。
五、总结:两个主题一条侧线
把 rc.5 → rc.7 放进更长的时间线里看,dsh 走的是许多开发者工具共同的成熟路径:先把架构立起来,再把缺失的能力补上,然后让它在真实使用里变稳。这个窗口恰好是中间的两步——补全与稳固——同时完成了。
对读者来说,结论是直接的:
- 普通用户:多模态与可靠性这两条硬短板被补上了,dsh 值得认真当工具用起来,而不是源码围观;
- 把它当依赖的人:Python/TS 双 SDK 对同一 agent 循环的行为契约被钉进 CI,这是"可以被人依赖"的信号。
dsh 还处在 developer preview、官方明说会有破坏性变更的阶段,版本节奏依然很快。但一个产品一旦完成了能力补全与可靠性打磨,它接下来的每一版,都在为已经选择它的人累积价值。