Name the browser and service controls explicitly for DSH. Keep confirmation and cancellation together in the composer action row, retain the interruption warning as a tooltip and accessible description, and show stopping progress on the confirmation button. Validation: 20 focused tests passed; typecheck and lint passed. Release note: 明确 DSH 网页和服务按钮名称,停止确认与取消按钮同行显示,避免确认区单独撑开聊天输入区。
9.7 KiB
DeepSeek Harness 实现进度
2026-09-26 真实模型与官方 Web 验证
本轮验证 0.1.7-rc.2 后台对话/工具路径与同版本官方 Web 的本地接入可行性,关联
原生客户端方案的 FR-2、3、5,
US-2 和 P1/P2。快捷按钮与完整客户端集成本轮未实现。
环境:Windows x64,标准 Node 24.19.0,Edge 154.0.4258.37,官方
@deepseek-ai/dsh@0.1.7-rc.2,仓库 HEAD 51166136157a646530e1ad9f6a0242c1c6390e95
加当前未提交修改。源码哈希记录在本机临时报告 dsh-017-verify/source.json。
供应商实际模型为当前 DS 配置中的 deepseek-flash,协议为 openai-chat-completions。
| 场景 | 实测结果 | HTTP dispatch |
|---|---|---|
| 后台 Ask | read 返回未出现在 prompt 中的随机校验码 |
2 |
| 同会话切 Execute | write 创建文件,实际内容为 DSH_EXECUTE_OK |
2 |
| Execute Shell | pwsh 执行 Get-Content execute-marker.txt,返回正确内容 |
2 |
| 官方 Web 页面提交 | 当前模型读工作区文件并返回另一随机校验码;刷新仍保留回答 | 3 |
| 本轮合计 | 9 次均请求 deepseek-flash,9 次均返回 HTTP 200 |
9 |
计数在 AgentModelGateway 向供应商执行 fetch 时记录,包含 Web 的 1 次无工具请求;
4 次用户提交实际产生 9 次供应商请求。后台 3 轮均收到 done、工具 completed
和每轮 2 个用量事件。调用经过现有 createManagedModelBridge、AgentModelGateway
和 ModelBridgeLoopbackProxy,由隔离 Electron profile 中的 safeStorage 解密配置副本。
供应商凭据未写入 Web 配置或报告;正式 runtime-settings.json 测前测后逐字节一致。
环境继承 NODE_TLS_REJECT_UNAUTHORIZED=0,本轮不证明严格 TLS 证书校验可用。
官方 Web 以标准 Node、独立 DSH_HOME 和回环随机端口启动。通过官方 patch 配置 provider
和默认模型,再调用 workspace/create;首次创建和已有目录复用均通过。根页面自动选中
测试工作区和当前模型,无需手动填供应商密钥。保留并通过官方“内测声明”的“继续”按钮,
真实页面输入、发送、回答、刷新及截图检查通过。配置/API 细节统一维护在方案第 6.3 节。
本轮驱动曾因缺少 skillPackages 默认值和临时目录动态模块解析失败退出,均为 0 次请求;
修正驱动后后台成功。首次 Web fill 后发送按钮未启用,没有发出 Web 模型请求;改为键盘
输入并仅重跑 Web 后成功,未重复后台调用。本轮 9 次 dispatch 逐次记录于同一 calls.json。
补查发现此前 dsh-017-live/calls.json 已有 7 次 HTTP 200 记录,其中后台 4 次、Web 3 次;
对应历史报告记录模型 deepseek-flash、工作区与模型选中、文件结果及配置未改。本轮保留
这些文件,未覆盖或重算为新增调用。该历史批次与本轮合计可核查 16 次,下面依赖升级阶段
“0 次”仅指升级回归本身。
定向命令使用标准 Node 执行 node_modules/vitest/vitest.mjs run,目标为
src/main/agent/deepseek-harness-acp-e2e.test.ts、
src/main/agent/goodbuddy-harness-control-plane.test.ts 和
src/main/agent/deepseek-harness-runtime.test.ts:3 个文件、52 项通过、3 项跳过,11.12 秒。
3 个环境开关 live case 未在 Vitest 中启用;上表为独立真实模型驱动结果,不把跳过项算通过。
确定性回归包含 Ask 写入拒绝和 Execute 工作区外写入,无需为验证重复调用真实模型。
本机证据位于临时 dsh-017-verify/:calls.json、backend-result.json、result.json、
main-result.json、source.json 和 web-conversation.png。报告保留首次 Web 驱动失败,
最终 Web 结果另见 result.json。桥接、worker、Web 和浏览器已关闭,进程检查未发现本轮
目录所属的残留进程;临时 profile、测试工作区和 DS home 清理后仅保留脚本及脱敏证据。
这些本机临时文件不作为仓库长期资源。
证据范围:后台运行真实 ACP/Host/控制面和供应商模型,Host 在测试进程内组合;Web 为 官方 CLI 子进程与真实浏览器页面。未重新验收 GoodBuddy Composer/Utility Process, 也未实现 Web 的 GoodBuddy Ask/Execute 适配。官方 Plan 只控制规划状态,默认 “工作区内修改”也不等同于 Execute;后续复用现有工具命令名判断,不增加权限层级、 目录限制或逐工具二次授权。Skills/MCP 承接、取消、产品生命周期及交付资源仍待验证。 未改远程源码;DS 仍不支持 SSH execution space,本轮没有远程模型调用或 Linux Host 验证。
2026-09-26 依赖升级至 0.1.7-rc.2
23 个直接引用的 @deepseek-ai/dsh-* 包统一锁定为 0.1.7-rc.2,Cordis
升级为上游要求的 4.0.4,同步更新依赖锁文件、Runtime 版本及打包测试夹具。
版本取自 npm 发布列表与 next 标签;查询时 latest 仍指向 0.1.0-rc.6。
控制面改为监听 agent/assistant-stream 的 chunk 帧,以转发文本、推理和用量;
工具结果从 message 层读取 toolCallId 和 isError。测试同步适配新版本的
Agent 配置、Shell 执行和系统消息接口。
- DS 定向回归:152 项通过、5 项跳过。
- 最终复跑 DS、Runtime discovery 和发布打包夹具:12 个文件通过、2 个跳过, 170 项通过、5 项跳过,耗时 19 秒。
- 扩大至打包夹具和设置面板:196 项通过、5 项跳过;设置面板套件因并行
Obsidian 修改缺少
obsidian-tools模块而未能加载。 npm run smoke:deepseek-harness:开发构建通过,真实 Electron Utility Host 返回ready。- 升级后的首次类型检查与 lint 通过;后续类型检查受到并行 Obsidian 修改中的 模块缺失、项目文件列表和类型错误阻塞,不能将当前整个工作区标为检查通过。
- 全量测试两次运行分别在 200 秒、600 秒超时,期间出现 App、SupervisorActivity 和 Electron UI 测试失败;未取得全量通过结果,未修改这些并行工作的文件。
本次依赖升级回归的真实供应商模型调用为 0 次;后续真实模型及 Web 实测见上节。上述升级验证不包含官方 Web 应用,
“打开DSH Web”入口仍按原生客户端方案实施。
远程启动契约和资源打包仅支持 Continue、OpenCode,create-runtime.ts 拒绝 SSH
执行空间使用 DS,因此本次升级未改变远程 Runtime 路径,也未进行 Linux Host 验证。
2026-09-14 Windows 工作区路径修复
本机 Runtime 的 Host 启动与 newSession.cwd 已共用初始化时解析的 realpath,
规则见技术设计。修复此前
C:/...\workspace 写法触发 ACP -32602,以及随后换成同目录规范写法仍复用
错误 Runtime 的问题。Host 严格比较与 execution-space 缓存规则保持原样。
新增 Windows 真目录回归,连接真实 ACP、Host 和控制面,分别用混合分隔符及规范 路径创建会话,断言共用同一 Runtime、只启动一次 Host、两次均完成。该自动化回归 使用内存模型;外部真实模型验证单独由完整 App 完成。
Windows 完整 App 使用当前源码构建的 Main、Preload、Renderer 和新建隔离配置。
正式配置只读,模型凭据由隔离配置中的 safeStorage 解密;真实 composer 输入请求,
由 deepseek-v4-flash 在 Ask 模式读取 summary-probe.txt,校验码未放入 prompt。
| 目录写法 | Composer 提交 | 真实模型 HTTP dispatch | 文件读取 | 结果 |
|---|---|---|---|---|
| Windows 混合分隔符 | 1 | 2 | 1 | 仅返回文件中校验码,任务完成 |
| 同目录规范路径 | 1 | 2 | 1 | 仅返回文件中校验码,任务完成 |
| 合计 | 2 | 4 | 2 | 两条会话均通过 |
两轮 dispatch 来自同一 DS Utility Host 进程,切换目录写法未新增 Host;ACP 会话 ID 不同。两条工具卡片均显示路径摘要,原生点击展开后可查看输入与输出;重载 Renderer 并重新选择项目后,已保存会话的摘要、详情和完成状态仍通过检查。四张 局部截图已逐张打开审阅。驱动曾返回不可克隆的监听器函数,以及在重载后默认项目 等待工具卡片超时;修正定位后通过,这两次驱动错误没有增加模型请求。
本机临时 ds-windows-path-live/report.json、dispatch.jsonl 与 source.json
记录结果、逐请求计数和构建哈希,原 runtime-summary-live 报告未覆盖。
本次 App 正常退出,退出前记录的 5 个所属进程均已停止;隔离 profile、数据库、
工作区、临时构建和私有日志已清理。正式模型配置与启动前逐字节一致,报告和截图
保留在本机临时目录,不作为长期可用的仓库资源。
测试沿用生产 HTTPS 与证书处理,未单独验证严格证书校验或 Main 重启。
专项 7 个测试文件通过,91 项通过、3 项跳过。npm run typecheck 与
npm run lint 通过。最初两个假时钟测试因异步目录解析尚未结束就推进启动时钟而
超时;调整为等待 launcher 启动后,DS Runtime 的 34 项测试全部通过。
最终全量 vitest run(npm test 的脚本入口)为 353 个文件通过、9 个跳过,
4155 项通过、66 项跳过、0 失败,耗时 602.00 秒。git diff --check 通过。
远端核查:Main 的 SSH 分支创建托管远程 Runtime,最终使用 AcpRemoteRuntime;
create-runtime.ts 的本机 DS 入口拒绝 SSH execution space。本次未改远端代码,
未调用远端模型,也未进行 Linux Host 实测。