Show bounded operation summaries for Continue, DeepSeek Harness and direct-model tools, retaining input details across incremental updates. Use one canonical workspace path for DeepSeek Host startup and ACP sessions so equivalent Windows paths reuse a working Runtime. Compare persisted subagent tool fields by value, release terminal task caches, and avoid rebuilding caches for duplicate remote events. Upgrade to schema 35 to recompact repeated schema-34 tool blocks while preserving events and provenance. Include regression coverage, validation records and temporary-resource test exclusions. Validation: 4155 tests passed, 66 skipped; typecheck and lint passed. Full desktop real-model validation covered all three tool-summary paths and both Windows path spellings. Storage validation evidence includes local and remote tool workloads and real database upgrade checks. Release note: Tool records now show paths, commands and search details across runtimes. Fix DeepSeek Windows workspace failures and repeated subagent history growth; schema 35 reclaims redundant history data while preserving execution records, and older clients cannot reopen the upgraded database.
60 KiB
工作栏实现与验证进度
2026-09-14 多 Runtime 工具操作摘要
显示与事件合并规则见工具操作摘要。Continue、 DeepSeek Harness 和直连模型已接入共享摘要函数,完成事件缺少输入时保留已有摘要。
Windows 完整 App 使用当前生产 Main、Preload、Renderer 和隔离配置,模型为
deepseek-v4-flash。从真实输入区输入并点击发送读取测试文件的请求,校验码只存于
文件中。三条成功会话都返回正确校验码,工具完成后仍显示路径;原生点击展开可查看
输入与输出,离开后重新打开会话、重新加载 Renderer 后再次打开均保留摘要和详情。
六张对话区截图已实际打开审阅。
| Runtime | 成功模式 | 提交数(含失败重跑) | 模型 HTTP dispatch | 工具执行 |
|---|---|---|---|---|
| 直连模型 | Ask | 1 | 3 | 3 |
| Continue | Execute | 2 | 4 | 3 |
| DeepSeek Harness | Execute | 3 | 3 | 2 |
| 合计 | 6 | 10 | 8 |
计数来自 Main 和真实 Utility Host 的 HTTP dispatch,未注入答案或工具事件。Continue
首轮 Ask 仅提供配置工具,未能读取文件;改用 Execute 成功。DS 前两次因 Windows
工作区路径写法与 Host realpath 比较不一致而返回 ACP -32602,均未调用模型;
同目录改写路径仍复用缓存 Runtime,改用全新规范路径目录后成功。该路径问题随后由
DS 工作区路径修复
单独处理,新增验证计数见该记录,不计入上表。驱动的包解析、
DOM 定位及卡片比较器失败已记录,修正比较器后的复验没有追加模型请求。
本机临时 runtime-summary-live/report.json 保留逐次结果和产物哈希;源码基线为
c71da4b6ae1d7228ff968d39c63db205caf61339 加本次工作树改动,Main SHA-256 为
2153d72a947ab6f5eab22eab28d7a3f2f86a47740d5223a3e1547f199fa7de84。
测试进程、隔离配置、数据库、工作区和构建均已清理,正式配置字节未改变;报告和截图
保留在本机临时目录,不作为长期可用的仓库资源。请求使用已配置 HTTPS,沿用生产
证书策略,本轮未验证严格证书校验。未测试 Main 重启或远程 Agent。
专项回归 210 项通过、1 项跳过。完整 npm test 首轮 4154 项通过、66 项跳过,另有
6 个 .agent-resources 内的本地 node:test 文件被 Vitest 误收集导致套件失败。
使用 npm test -- --exclude "**/.agent-resources/**" 完整重跑后,353 个文件通过、
9 个跳过,4154 项通过、66 项跳过、0 失败,耗时 646.04 秒。npm run typecheck、
npm run lint 和 git diff --check 通过。
2026-09-13–14 schema 35 工具重复写入补修(未发布)
- 0.13.1 的历史库回收成功,但其真实模型验收限制子代理不使用工具,遗漏了生产工具对象
的
undefined可选字段。JSON 重读省略这些键,原深比较误判未变化的工具块。正常开发 任务复现同批 928 条事件的 7,787 次重复工具块写入;仅归一化空字段的对照将负载从 10,467,622 降为 452,391 字节,逐条还原一致。该对照不是产品修复验收。 - 当前修复按共享工具 schema 的字段值比较,不序列化整份工具输出进行比较。空字符串、 输出修订、状态和错误变化仍保留。schema 35 使用同一编码器重整旧完整事件及 schema 34 已存差量,跳过 JSON 未变化的行;不会删除事件、会话、工具结果或来源字段。
- 存储缓存仍最多 16 个任务,终态及时移除缓存引用;回滚后按已提交记录重建,其他任务
不受影响。远程先按来源主键判断是否重放,重复事件不重建已经释放的写入缓存;
INSERT OR IGNORE、冲突校验及消息投影事务仍保留。 - Windows 当前源码加便携版内置 OpenCode 完成正常 CSV 项目开发,主/子代理实际读取、 改代码、补测试和执行命令;独立 59 项测试及 CLI 通过。698 条子代理事件共 368,575 字节,重复工具块为 0,与归一化对照字节数完全相同,每条事件还原一致。
- 多项目实测使用两个独立 OpenCode 实例、每项目两个会话,两轮共 8 次 Execute。 第一轮四个开发任务全部完成;第二轮复用会话,主动取消一个正在使用工具的子代理任务, 其余三个完成并通过测试。2,841 条子代理事件共 1,305,340 字节,重复工具块为 0, 全部逐条还原一致。每轮结束后缓存任务数、打开的 SSE 响应流均为 0。 隔离 Main 测试进程在显式 GC 后的堆占用为 12.94 → 12.91 MiB; 这证明本轮未持续积累,不是整个 Electron UI/Runtime 的 RSS 上限或无限负载保证。
- 共享 Linux x64 Host 使用当前桌面源码经真实 SSH、Agent、ACP 和模型 gateway 完成 Ask 与正常工具 Execute。912 条子代理事件共 405,360 字节,重复工具块为 0, 逐条还原及重复重放通过,远程 Python 项目测试通过。修复位于共享桌面层,不修改 Agent 或公开事件协议。两次早期测试驱动错误中断操作,修正瞬态事件处理后才完成上述验收; 不能将早期失败写成产品通过。
- 本轮实际提供商请求为 121 次:本地开发 26,多会话 79,远程账本 16(成功验收 14, 早期驱动中断 2 次结果未知、未交付)。本地计数器只记录 HTTP 状态,远程按测试 request/operation 的 Agent ledger 统计,不记录凭据、正文或请求头。另有先前诊断的 24 次请求,不计入这 121 次。已核对本轮本机和远程测试工作区无残留 Runtime 进程。
- 活动 schema 34 库通过 SQLite online backup 取得一致性备份,并校验独立测试副本。 正常启动升级成功,2,898,984,960 → 607,055,872 字节(2.70 GiB → 578.93 MiB, 回收 79.06%)。完整比较 424,148 条原事件的内容、ID、时间及来源一致。 隔离启动未复制模型配置,既有启动修复调整一条项目/会话 Runtime 选择及一个在途任务、 消息和活动状态,另追加一个状态事件;不是迁移删除或改写历史内容。
- 同一真实备份的另一个副本直接运行实际构建的升级 Worker,在处理 64 条后取消,
重启后完成 316,664 条子代理记录;全量事件再次还原一致。全部非事件表逐表内容一致,
包括 150 个会话、1,915 条消息、914 个任务和 136 个成果;
integrity_check=ok。 原运行库和校验备份没有被测试改写。schema 35 副本再次进入实际 Worker 时直接完成, 进度事件数为 0,不重复整理。 - 最终专项 99 项、typecheck、lint 及生产开发构建通过。首轮全量产品用例 4,154 通过、
66 跳过,但 6 个临时 Node 测试项目被 Vitest 错误发现;配置已排除
.agent-resources/, 独立项目仍单独运行自己的 Node 测试。随后显式双 worker 全量为 4,148 通过、66 跳过、App.test.tsx6 项时序失败;恢复仓库默认单 worker 后该文件 220 项全部通过, 未修改 UI 代码。最终默认配置全量为 4,151 通过、66 跳过、3 个问答 UI 测试失败, 失败项与双 worker 不同;本轮全量回归尚未全绿。随后仅调整测试等待和 mock 隔离的 尝试仍有不稳定失败,已完整撤回这些额外 UI 测试改动,不把单次重跑通过当作稳定修复。 存储专项、真实工具任务、并发内存和真实数据迁移证据均通过;UI 测试问题仍需单独处理, 本次未提交、未发布,也未替换用户正在运行的 0.13.1。
2026-09-13 Desktop 0.13.1 执行记录去重与大库升级
- 实现与兼容边界见执行记录存储与升级回收,通用开发 要求见数据库迁移指南。本机和远程写入共用 差量编码,不修改 Runtime 公共事件或 Agent 协议;消息投影与来源去重继续保持事务。
- 真实 portable 旧库先备份并校验 SHA-256,再在独立新版 portable 中启动升级: 13,094,912 → 12,595,200 字节,schema 33 → 34。659 条消息、52 条会话、133 条成果、 笔记/待办及模型用量表逐表内容一致,完整性检查通过。
- 另对真实膨胀库的核验备份副本运行同一 portable 启动入口: 97,308,667,904 → 594,182,144 字节,即 90.63 GiB → 566.66 MiB, 实际回收 90.07 GiB(99.39%),freelist 为 0。原库和原 portable 数据库未改写。
- 全量还原比较 411,981 条事件,所有内容、事件 ID、时间及远程来源字段一致;
SQLite
integrity_check返回ok。1,876 条消息、895 个任务、136 个成果及笔记、 待办、用量和活动记录等表内容一致。隔离 profile 没有复制模型配置,既有启动修复更新了 一条项目及一条会话的 Runtime 选择,项目updated_at随之更新;不是事件迁移修改。 - 真实升级中通过“退出,稍后继续”停止,再用更新后的 portable 继续并完成。初版 UI 只按内容高度展开且进度条过窄,用户指出后修复为全高画布和全宽进度条,并显示处理速度; 实包测得页面高度约 761 CSS px、viewport 761 px,进度条宽约 960 px,截图人工复核通过。
- 大库采样的读取耗时占约 65%、JSON 解析约 17%。将升级读取缓存由 8 MiB 提至 64 MiB,保留每批 32 条事务和 SQLite 自动 checkpoint,只在任务结束时截断 WAL。 相邻 2,048 条转换采样从约 12.0 秒降至 8.8 秒;样本和缓存状态不同,不作为固定加速比。 未增加同库并行写入,也未关闭事务或同步落盘。
- 当前源码通过真实本地 OpenCode Execute 和共享 Linux x64 Host 的托管 Ask/Execute。 本机与远程各观察到 65 条子任务事件,最终过程仍可显示,远程重复事件不重复投影; 测试资源均位于专用目录。共提交 3 次真实 Prompt,Runtime 上报 4 笔模型用量; 子代理内部 HTTP 调用未单独计数,不将该上报数称为服务商请求总数。
- 首轮完整
npm test为 4,114 通过、66 跳过,637.97 秒;后续 8 项新增/修正的专项 回归通过,npm run typecheck、npm run lint通过。生产构建及用户要求的 portable 实包开发验证通过。0.13.1 版本与发布说明变更后的本地最终验证被用户主动取消,按要求 不再追加本地测试,候选的最终全量测试、类型、lint 与生产构建由 main CI 判定。 - 用户批准 0.13.1 中英文说明及仅标准六平台发布;Agent 保持 0.11.24。
已发布提交
4937720和不可变标签v0.13.1,main CI 与六平台发布通过; 后续真实工具场景的遗漏及补修见本页 schema 35 记录。
2026-09-13 原生浏览器与应用浮层修复
- 用户在“添加实例”中复现原生网页盖住弹窗。原先只有终端关闭确认释放 viewport, 现在所有应用 Modal 与相交浮层共用 浏览器遮挡机制。 新增五个组件回归在修复前全部失败,修复后通过;独立检测器另有十项回归。
- Windows 当前 Main、Preload、Renderer,通过
electron-vite dev和独立 profile 启动完整 App,不是旧安装包或仅有 Renderer 的 fixture。浏览器导航到本机合成页后, 实例管理与项目设置均验证原生视图visible → hidden → visible;视图 ID 不变且未销毁。 本次不修改 Runtime、Agent、MCP 或远程生产路径。 - 实例编辑器在浅深主题、目标 1280×800、960×720、720×640、640×420 下完成八组 几何、关闭按钮命中和原生视图隐藏断言。Windows 缩放产生不足 1 CSS px 的取整差异, 记录实际尺寸而非把目标尺寸当测量值。PNG 实际审阅包括浅色 1280、720 和深色 640; 其余尺寸执行程序化检查,不将其描述为全部 PNG 人工审阅。
- 临时驱动曾出现新浏览器 target 抢占自动化目标、隐藏窗口截图阻塞及严格像素比较 误判;修正驱动后重新取证,不把这些失败改写为产品修复。最终使用 pinned renderer、 独立测试窗口和 CDP PNG;原生视图状态单独从 Main 读取,避免网页截图漏掉原生视图。
- 顺带复现已发布更新说明资源为 136,554 字节,超过原 128 KiB 读取上限。上限提高到 1 MiB,仍使用有界读取;回归直接读取实际打包资源并确认当前版本可展示、可确认。 完整 App 已显示并关闭 0.13.0 更新说明,重启后不再次显示。
- 首轮
npm test -- --maxWorkers=1:4,108 通过、66 跳过,608.30 秒;npm run typecheck、npm run lint通过。补长名称修正后的全量执行为 4,105 通过、 66 跳过、3 失败,586.51 秒;失败全部位于并行修改中的子代理进度测试。 未修改这些文件,随后定向重跑 ACP 与 OpenCode 子代理共 66 项全部通过。 全仓类型与 lint 检查期间先后遇到并行子代理/存储升级改动的缺失字段和未使用导入, 这些改动不纳入本次提交,不能把早先的通过结果当作当前并行工作区全绿。 - 两组 Harness 单测补
onTestFinished回收临时目录。最后定向四文件 73 项通过, 运行前后检查新增残留目录为 0。测试清理不改变 deployed Runtime。 - 本次修改文档的 66 个相对链接目标存在,暂存差异无空白错误;最终发布仍需对确定的、 不再变动的候选提交执行发布验证,不能将未提交的并行改动混入候选。
- 临时脚本、截图和隔离构建按用户要求在提交后清理;这里只保留脱敏结论。知识库布局、 合成服务保存验证与调用计数见知识库进度。
2026-09-13 OpenCode 事件流关闭顺序修复
候选检查中的 lifecycle 失败已稳定复现,4 路并行后 openEventBodies 为 3 而不是 0。
原因与统一修正规则见复发缺陷记录;
聊天与 Compact 共用最小迭代器包装,不修改 OpenCode SDK、重试时限或现有断言时限。
- 加强既有正常结束与消费方提前返回回归,修复前两项均失败,确认最终
signal.aborted不能证明关闭顺序正确;修复后通过。 npm test -- src/main/agent/opencode-runtime-lifecycle.test.ts src/main/agent/opencode-runtime.test.ts src/main/agent/opencode-runtime-permissions.test.ts src/main/agent/opencode-subagent.test.ts:4 个文件、99 项通过。- Windows 当前源码配合真实 OpenCode
1.18.29、真实 SDK/HTTP MCP 和 loopback 模型通过 1、4、8 路并行、取消一条而另一条正常结束,以及实际原生 Compact;各阶段打开的 SSE 响应流均归零。验证是生产 Runtime 入口,不是完整 Electron UI;真实服务商调用 0 次。 - 已核对远端
AcpRemoteRuntime的 Agent-owned transcript 轮询与AgentOwnedAcpPrompt的 ACP stdio 连接,不使用本机client.event.subscribe。本次未改 Agent、远程桥或协议,不需要远端对应修复,也未将本机测试算作远程 Host 复验。 - 最终
npm test:349 个文件通过、9 个跳过;4,089 项通过、66 项跳过、0 失败, 耗时 571.43 秒。npm run release:notes:verify、npm run typecheck、npm run lint全部通过;下节失败结果保留为修复前记录,不再是当前本地回归结论。 - 发布说明按 Desktop
v0.12.12、Agentagent-v0.11.23到最终候选的差异核对, 不按中间开发提交分别列出修正。用户明确不增加事件流条目,已批准中英文说明保持不变。 - 本轮未提交、推送或打标签,未运行本地生产构建或打包;远程问答完整生产链路的真实 服务商验证及候选 CI/原生发布验证仍沿用各自待验收状态,不由本机 SSE 修复代替。
2026-09-13 Desktop 0.13.0 / Agent 0.11.24 候选检查
本轮仅准备本地候选:更新 Desktop 与 Agent 版本、用户批准的中英文发布说明及功能清单,
远程原生问答按问题修复分类。Agent 发布说明测试允许仅有修复章节,同时检查中英文分类
一致;未修改 Runtime、Agent 问答或事件流实现。Agent 0.11.24 需要先升级 Desktop 至
0.13.0,OpenCode 保持 1.18.29。
npm run release:notes:verify、npm run typecheck、npm run lint:通过。npm test:348 个文件通过、1 个失败、9 个跳过;4,088 项通过、1 项失败、66 项跳过, 耗时 571.96 秒。唯一失败为opencode-runtime-lifecycle.test.ts:120,并行请求结束后openEventBodies期望为 0、实际为 3,轮询未在时限内满足;该现象早已有记录, 本轮没有完成根因判断,也没有放宽断言或跳过测试。- 单独复跑上述 lifecycle 文件及
agent-release-workflow.test.ts、release-notes-source.test.ts、release-notes-service.test.ts:发布相关 15 项通过, lifecycle 同一断言再次失败。该结果不能替代一次全量通过。 - 更早的一次全量运行在调整 Agent 发布说明章节断言前主动停止,未取得汇总,不计为通过。
- 候选版本一致性、历史 Desktop 发布说明未改动、48 个 Markdown 相对链接目标和
git diff --check已通过。 - 本轮真实模型验证调用 0 次,未重跑真实 Host;既有 SSH/确定性模型证据见下文, 不将其扩写为完整生产 Main/Preload 配合真实服务商的验收。
- 未提交、推送或创建标签,未运行本地生产构建、打包或 LoongArch 预览。 全量测试失败、完整远程生产链路及候选 CI/原生包验证仍未解决,候选不标记为可发布。
2026-09-13 SSH 问答 UI 复验与取消后续发
在真实 Electron 窗口中使用当前 App、入口样式和主题函数,经测试 IPC 接入生产
createManagedRemoteAcpRuntime。远端使用共享 Linux x64 Host、真实 SSH attach、当前源码
Agent、原生 OpenCode 和生产模型桥;模型响应来自远端 loopback 确定性服务。配置、项目、
队列和存储 API 复用 App 测试 fixture,因此本次证据范围为 App Renderer 到真实 SSH
Runtime,未覆盖完整生产 Main/Preload、生产数据库持久化、发布安装或重启恢复。
窗口测试发现待答期间取消后,同一对话立即发送会报
Active prompt operation identity cannot change before terminalization。Agent 取消分支
原先只写语义记录,重复终态写入失败后未留下可核对的操作终态;Desktop 也保留了旧
binding。修复复用 Agent 的异常终态记录方法,并在 Desktop 显式取消后核对终态、关闭
已终结 binding 和释放会话通道。新增两项回归验证 Agent 取消核对及同一对话续发。
已通过的 UI 场景:父子问题同时待答、重复事件不丢草稿、自由文本回答、选项回答、注入
一次回复失败后原输入重试、跳过、待答期间取消、取消后在同一对话发出新请求并正常完成。
鼠标和输入使用 Electron 原生输入 API。重复问题和回复失败由驱动注入,其余问题、工具
进展及完成事件来自真实远端 Runtime;驱动消费内部 checkpoint,并将取消映射为公开
error/status=cancelled 事件,不把内部 Runtime 事件直接送给 Renderer。
浅深主题各检查四组窗口尺寸,问题表单无横向溢出、草稿保留,提交按钮可滚动到可见位置。
短窗口需纵向滚动查看问题与输入,未宣称整张卡片同时可见。检查目标为 1280×800、
960×720、720×640、640×420,Windows 175% 缩放下实际 CSS 内容区各多 1 像素。
临时驱动、JSON 测试报告、各轮日志及 PNG 保留在批准临时目录,使用
question-ui-*、remote-question-* 和 question-validation-* 文件名前缀;驱动按
Electron UI 自动化规范的现有启动方法重建,
不是仓库通用 UI runner。SSH 测试结束后停止专属 daemon 并清理远端专属目录和上传文件。
复现时在批准临时目录执行 node question-ui-build.cjs、
node remote-question-build.cjs,随后设置 GOODBUDDY_QUESTION_UI=1 并执行
node remote-question-run.cjs。脚本依赖本机既有加密 Host 配置和 Host 上的测试 Node
依赖目录;不得将这些本机条件当作新环境已经满足。早期驱动的内部事件转发、原生输入
等待和跨轮模型结果判断错误均已修正;它们与实际取消续发缺陷分别记录,未将失败轮次
改记为通过。首轮窗口退出过早,未取得完整模型夹具计数,历史夹具请求累计数不完整;
外部模型调用为 0。
最终 SSH/UI 一轮完成 4 次输入区提交、2 次回答和 1 次跳过,收到 4 个原生问题,取消
核对结果为 terminal/cancelled/processTree=empty,随后新请求完成。该轮模型夹具请求
精确为 7 次,外部模型调用 0 次,Renderer 控制台错误 0 条,驱动退出码 0。最终定向
回归分两条命令执行:npm exec vitest run src/agent-daemon/runtime-acp-backend.test.ts src/main/agent/acp-remote-runtime.test.ts 为 96 项通过;
npm exec vitest run src/agent-daemon/remote-question-binary.test.ts src/agent-daemon/opencode-subagent-plugin.test.ts src/agent-daemon/model-bridge.test.ts src/main/remote-agent/protocol-remote-runtime-channel.test.ts src/agent-daemon/runtime-composition.test.ts src/main/ipc.test.ts 为 179 项通过、5 项跳过。
npm run typecheck、npm run lint 和 git diff --check 通过。
首轮默认并行 npm test 的打包测试超时,整轮随后被 120 秒工具时限中断;单 worker
重跑为 4,084 项通过、66 项跳过,耗时 626,816 毫秒。此结果早于本节取消修复,
不作为最终源码全量结果。
取消修复后的全量命令为 node node_modules/vitest/vitest.mjs run --maxWorkers=1 --reporter=json --outputFile=<批准临时目录>/question-validation-final.json,覆盖 358 份
测试文件,结果为 4,087 项通过、1 项失败、66 项跳过,监督进程记录耗时 617,138 毫秒、
退出码 1。唯一失败是 tests/agent-package.test.ts:372 的大清单安装用例,耗时
63,366 毫秒,超过该用例 60 秒上限。随后
npm exec vitest run tests/agent-package.test.ts -- --maxWorkers=1 单独复跑为
22 项通过、1 项跳过,整文件耗时 60.08 秒;没有修改该打包测试或放宽超时。
全量失败记录保留,不能将分次复跑结果写成单轮全绿。
最终 UI 原始日志为 question-ui-1789278503920.log,8 张待答截图为
question-ui-{light,dark}-{1280,960,720,640}.png,另有完成截图
question-ui-success.png。已逐张打开待答 PNG 审阅字体、字段、按钮、焦点和短窗口
滚动位置;未发现问题卡片遮挡或按钮不可达。尺寸切换等待 CSS 过渡结束后再截图,
窗口使用独立临时 session partition。当前证据不覆盖全键盘导航或正式 profile 的清理。
2026-09-13 托管 SSH 原生问答
- 当前源码支持前台托管 SSH OpenCode 的父、子孙会话原生问题、回答和拒答,复用已有
Renderer 队列与 Task 归属。问题来源为原生
question.asked;模型正文和普通工具活动 不生成问答表单。协议、身份与生命周期规则见 远程主机技术设计。 - 新增
remote-question-binary.test.ts,使用真实 OpenCode1.18.29ACP 进程、生产插件、 Agent Prompt owner 和 loopback 模型夹具,覆盖父问题、Task 子问题、拒答、取消、 跨 binding 回答拒绝、迟到回答拒绝,以及临时回复能力不进入语义记录。 插件测试另覆盖孙会话归属、并发重复事件、HTTP 路径认证、原生待答列表校验和端口关闭; Runtime 测试覆盖已 ACK 记录后的待答补发、回复失败重试与已回答历史去重。 - 共享 Linux x64 Host 使用既有加密凭据和固定 Host Key,经真实 SSH attach 启动当前源码
的隔离 Agent。生产
createManagedRemoteAcpRuntime入口完成 Ask、Execute 并行父子 问答、拒答和待答期间取消;两个并行问题在首次回答前均到达 Desktop Runtime,子问题 带 Task 归属,回答后原生 Task 和父轮次正常完成。拒答结束原生轮次,取消后迟到回答 明确失败。最终一轮 7 次确定性模型夹具请求,外部模型调用 0 次;测试 daemon 停止, 测试目录与上传文件已清理,未修改 Host 原有 Runtime registry。 - 最终定向回归:11 份测试文件,219 项通过、5 项平台跳过,包含 Agent、模型桥、ACP
Runtime、认证控制通道及托管入口测试。
npm run typecheck、npm run lint通过。 本轮全量npm test -- --reporter=json --outputFile=<临时报告>为 4,081 项通过、 0 项失败、66 项跳过;之后的插件身份与并发去重补充由最终定向回归和 Host 复测覆盖。 - 本节早期验证未操作 Electron 窗口、重装共享 Agent 或模拟整机重启;问答队列的界面行为由 既有 App/ChatTimeline 测试覆盖。同一存活 Prompt 的待答补发由 Runtime 回归验证, 不把它描述成 Agent 进程重启后的问题恢复。旧 Agent 和任意第三方 ACP 服务的范围见 Runtime 交互边界。
2026-09-13 并行提问顺序回答
- 修复同一前台请求的后续提问覆盖未回答问题:Renderer 按 ID 保存待答队列,逐次显示、 回答和跳过,保留失败重试输入;运行中快照刷新保留队列,终态清理全部待答项。 交互和归属限制见 Runtime 交互边界。
- 本机 SDK 使用已收到的 Task 子会话元数据传递可选
childTaskId;Task 卡片显示待答状态, 展开后可定位并聚焦队首表单。没有已知 Task 关联的问题仍能回答。 - 六份相关测试文件共 346 项通过:
App.test.tsx、ChatTimeline.test.tsx、conversation-activity.test.ts、opencode-runtime.test.ts、opencode-runtime-permissions.test.ts、opencode-runtime-lifecycle.test.ts。 覆盖并发到达、重复 ID、草稿保留、提交失败、队列推进、快照刷新及终态与回复竞态。 - 真实本机 OpenCode 二进制配合 loopback 模型服务验证两次原生提问均在首次回答前到达, 随后分别回传并完成请求;同时保留 Task 文件读取和 Ask 工具限制验证。该用例每轮 6 次 loopback 模型请求,外部模型调用 0 次。完整桌面点击路径由 App 组件测试覆盖, 本轮未手动操作 Electron 窗口。
- 首次
npm test达到工具 200 秒上限;后台重跑npm test -- --reporter=verbose完成, 348 份测试文件通过、9 份跳过,4,069 项通过、66 项跳过,耗时 572.20 秒。 随后补充已回答 ID 的去重必须先于任务状态更新,最终 18 项问答及活动相关回归通过。 - 独立评审补充同一 React 批次首次两次收到相同 ID 的回归:修复前显示两个待答项。 在消息函数式更新器内复核待答和已回答 ID,重复事件直接返回原消息,保留状态;外层 去重仍阻止重复事件改写任务状态。修复后 19 项定向回归、typecheck 和完整 lint 通过。
- 最终 App 全文件复跑为 217 项通过、1 项失败;失败项为并行开发中的外部知识绑定测试
adds a new external binding to the current selection without re-enabling an excluded library, “添加知识库”按钮未启用,定向复跑仍失败。本次未修改该测试或知识绑定逻辑。npm run typecheck与差异空白检查通过;早期完整 lint 通过,最终完整 lint 扫到并行 工作新增的.kb-app-live产物而失败。保持产物原样,使用npm run lint -- --ignore-pattern ".kb-app-live/**" --ignore-pattern ".kb-app-live*.cjs" --ignore-pattern ".kb-app-live*.ts"复跑通过。 - 远程
AcpRemoteRuntime仅接入权限请求,尚无业务问答桥;本次未修改 Agent、ACP 传输、共享子任务进度适配器或 SSE 订阅,不将本机问答验证算作远程覆盖。
2026-09-13 浏览器租用标签页关闭与显式恢复
- 更新
tests/browser-tabs-electron-e2e.ts,移除两处租用期间拒绝关闭的旧断言。 当前行为见 Agent 与 MCP 路由 和 浏览器需求。同步修改 BrowserService、IPC、Gateway 和直连模型工具。 - Windows 真实 Electron/Chromium 与 loopback HTTP/MCP 验证通过:关闭已物化的预留页和
已租用主标签页,等待原 WebContents 的
destroyed事件,确认租约结束而请求信号未取消。 同一 token 和 MCP session 仍可列出工具;旧目标快照返回关闭提示且不创建页面。 显式browser_navigate创建不同身份的专用替代页,后续 MCP 快照读取该页。 - 同 Conversation 的 sibling 仅在主标签页关闭后取得
primary标记,页面 URL、导航状态、 时间戳、工作栏身份和 Cookie 内容保持不变;另一 Conversation 的页面与可见 viewport 保持不变。撤销 capability 后完成替代页、同级页和 Context 清理。 - 已先检查 runner:esbuild 输出临时 CJS,启动真实 Electron,子进程上限 120 秒,结束后
删除临时 bundle。
node build/run-browser-tabs-electron-e2e.cjs最终退出码 0; 前三轮分别修正测试对销毁事件时序、服务旧 ID 错误文案和 sibling 主标签标记的假设。 测试文件 ESLint 与限定文件的git diff --check通过。 - 覆盖边界:本轮通过 Main BrowserService 和真实 MCP transport 操作页面,未点击完整
Renderer/Preload 关闭入口,未注入执行中的工具取消,也未运行直连模型循环或其他共享工具。
浏览器、Gateway、直连 Provider、Model Runtime 和 IPC 回归共 359 项通过、1 项跳过,
包括执行中关闭、请求继续完成和其他工具继续可用。全库 typecheck、lint 和 diff 检查通过。
全量
npm test在 Agent 离线依赖安装用例失败后达到 200 秒执行上限;无外部模型调用。 - 本轮未修改 Agent、桥接或 Runtime 产品源码,也未连接远程 Host。远程调用若进入同一桌面 Gateway,会使用上述服务端路由;远端 Runtime 到桌面的实际传输、取消传播及恢复仍需真实 Host 验证,本记录不将本机 loopback 结果算作远程覆盖。
2026-09-12 浏览器刷新与关闭后的错误清理
- 按 浏览器工具栏规则 修复空白标签页允许刷新的问题; 刷新需要 Main 的已提交 URL,地址草稿不启用刷新,首次导航仍可停止加载。
- 侧栏操作错误在切换面板、关闭当前页签或收起工作栏后清除;旧面板的异步失败不再回写。 作用域实现见 浏览器多实例技术设计。
- Sidebar 回归 38 项、App 浏览器筛选回归 5 项、BrowserService 回归 43 项通过。
node build/run-browser-tabs-electron-e2e.cjs通过,验证真实空白页、导航、页面隔离和关闭; 该脚本不覆盖 Renderer 提示显示,提示清理由组件测试验证,本轮未手动操作完整桌面 UI。 npm run typecheck和两份修改源码的 ESLint 检查通过。全量npm test在 Agent 离线依赖清单用例超时后,整轮达到 200 秒执行上限;包含完整 App 测试的补跑也达到该上限。npm run lint被工作区原有未跟踪的application-tool-navigation/navigation-demo.js中 27 项浏览器全局变量错误阻断,未修改该文件,不将整库校验记为全绿。- 本轮仅修改桌面 Renderer 控件与提示状态,未改 BrowserService、Runtime、Agent 或远程协议; 不需要单独的远程实现。无外部模型调用。
2026-09-10 提交后保留问答
- 桌面端在提交成功后保留结构化问答回顾,支持多轮回答、跳过及本地会话重新加载; 交互规则见 Runtime 交互边界。
- App 回归覆盖提交与重载、下一轮问题提前到达、终态先于提交返回、提交失败;数据库 回归覆盖完整替换、增量保存、关闭重开、多选及超过 1,000 字符的自定义答案。
npm test:3,900 项通过、66 项跳过,Agent 离线依赖清单测试在 60 秒超时; 该项独立复跑通过(58.33 秒)。npm run typecheck、npm run lint与差异空白检查通过。- 本轮未手动运行真实 OpenCode 问答会话,外部模型调用 0 次。修改仅涉及桌面端展示与 本地保存,不改变 Runtime 回传协议或 Agent 路径,不新增远程 ACP 问答能力。
2026-09-10 Git 历史测试夹具修复
- 桌面候选
877cf58的 CI 在四项工作区测试准备 Git 提交时因缺少作者身份失败。c037d7f移除测试身份后引入了机器配置依赖;本机已有身份使该问题未在本地暴露。 - 测试现在把已暂存的 tree 写入固定 Git commit 对象,并仅更新临时仓库的分支引用,
不调用
git commit,不修改或覆盖任何 Git 身份配置。历史、重命名差异、分页和脏文件 分支冲突仍由真实 Git 与生产manageWorkspace验证,不用 mock 或跳过用例替代。 - 新增夹具自检确认
git fsck --strict通过、父提交链有效、未暂存内容保持不变且仓库配置未改。 聚焦测试 11 项通过、2 项因当前文件系统大小写不敏感而跳过;无身份 Runner 的验证待新候选 CI。 - 完整
npm test为 3845 项通过、66 项跳过、1 项未修改的活动列表测试超时; 随后ActivityPanel.test.tsx的 16 项独立复跑全部通过,未放宽时限或删除断言。npm run release:notes:verify、npm run typecheck、npm run lint通过。 未将这次本地整库结果记为全绿,发布仍以新候选的 CI 校验和生产构建通过为前提。 - 本轮只改测试和验证记录,产品功能、Agent 源码及已批准的双语发布说明不变,无外部模型调用。
2026-09-10 工作区布局与分支输入样式
- 按 FR-W1、FR-W4 将视图切换和刷新合并到顶部行,
文件与 Git 工具按视图显示;移除根目录的孤立图标及空导航行,子目录保留文字路径导航。
分支搜索复用共享
field,面板限宽、分支列表限高滚动,创建按钮使用紧凑次操作。 - 新增布局、子目录返回、焦点恢复、分支搜索/切换/创建回归;工作区、设置界面、设置存储、
IPC 和 Sidebar 五个测试文件共 354 项通过。另确认安全与数据的默认
toolApproval为always,对应“Execute 自动授权已启用的工具”;已有明确保存的禁止策略仍保留。 本轮没有修改授权策略或默认值。 - 当前构建的 Windows Electron 使用独立 profile 和临时 Git 项目,实际 App → Preload → Main 路径通过分支搜索、切换、创建和子目录新建文件;磁盘与 Git 分支结果均确认。 文件/Git 切换保留浏览目录,返回根目录后导航行移除、焦点回到刷新;Escape 收起分支面板并恢复焦点。 真实安全与数据页面的默认选中项也确认为自动授权。
- 浅色与深色下,将实际工作栏布局宽度设为 300、420、650px 后均无工作区横向溢出。 输入框为共享 13px 正文、标签 11px,分支面板最大 360px;15 个分支时列表可在 240px 内滚动。 这些是布局检查,不作为分栏拖拽或原生浏览器鼠标交互的验证。
npm run build:bundle、npm run typecheck、npm run lint通过。 整库npm test为 3843 项通过、1 项失败、66 项跳过;失败项是未修改的opencode-runtime-lifecycle.test.ts事件流关闭时序断言,单独复跑通过。 未再次运行整库,不将此结果记为整库全绿。- 本轮产品改动仅为共享 Renderer 工作区布局,未改 Main/Agent 的工作区命令、 desktop-to-Agent 协议或 Runtime 执行逻辑;远程项目继续使用同一组件和既有回调, 本轮未做新的 Host 实测。无外部模型调用,所属测试应用、浏览器会话和调试监听已关闭。
2026-09-10 提交审查修复
- FR-W3、FR-W6:同一目录项可仅修改大小写,仍拒绝覆盖其他文件、 目录和硬链接目录项;提交 Diff 同时使用重命名前后路径;分支后台刷新不再使历史请求 遗留 busy;自动目录刷新包含当前浏览目录并去重。
- 浏览器请求仅预留目标身份,首次导航才创建实际资源;Main 状态携带工作栏实例身份, Renderer 直接绑定同一页面,停止或回收后清除旧绑定。跨会话显式选择不会被应用类型 同步覆盖,终端关闭确认期间释放原生浏览器 viewport。规则以 浏览器多实例技术设计 为准。
- 删除普通浏览器操作的自动截图、固定等待、重试及 JPEG 状态缓存/IPC 字段,保留显式截图。
- 整合复核补齐现有 32 页签容量处理与 Harness 代理的已发现工具复用。新增容量回归验证 满额时布局仍有效、页面保留,关闭一项后显示原页面;Harness 回归验证发现接口后续失败时 已知工具调用不再触发发现。相关三文件 66 项通过,最新 typecheck 与 lint 通过。
- 工作区聚焦测试 43 项通过、2 项需大小写敏感文件系统而跳过;IPC 与 Sidebar 聚焦回归 132 项通过。随后新增的 Ask 指令、继承 Runtime 用量持久化及计划模式 App 场景,3 项通过。
- 扩展真实 Electron/MCP E2E 在独立临时 profile 通过:四个未使用的请求预留不创建会话、 WebContents 或 UI 事件;首次 MCP 导航物化相同 Tab/工作栏身份,恢复不额外创建页面, 并验证独立页面、共享 Cookie、当时的请求租约关闭保护和清理;关闭保护已于 2026-09-13 移除。
- 当前源码的共享 Linux x64 Host 验证已通过,覆盖工作区目标保护和重命名/Git Diff, 并通过桌面托管 ACP → 隔离 Agent → OpenCode 完成 Ask/Execute 和继承 Runtime 指标持久化; 该组共 3 次真实模型调用,清理后无所属进程残留。完整记录见 远程 Host 开发验证。
- 最终整库
npm test为 341 个文件通过、9 个文件跳过,3839 项通过、66 项按平台或手动 条件跳过、0 失败;npm run typecheck、npm run lint、开发期npm run build和git diff --check通过,19 份修改 Markdown 的相对链接目标检查通过。 先前整合中的一轮为 3823 项通过、6 项失败、66 项跳过,另有被移动的测试路径加载失败, 不作为最终结果;源码稳定后完整重跑得到上述全绿结果。 - 原文档解析焦点回归改为等待 Modal 的焦点效果,保留焦点与背景隔离断言,没有改动产品逻辑。
- Windows 独立 Electron profile 的完整 App → Preload → Main UI 验证通过;最终复测使用 本轮最终开发构建。启用浏览器后普通 Execute 没有创建原生浏览器视图,工具导航只创建 一张同时显示在工作栏的页面,跨会话选择保留原页面与 viewport。
- 实际终端连通后,从浏览器关闭该终端可正常显示确认并操作按钮;原生视图可见性按
可见 → 确认时隐藏 → 取消后可见变化,终端关闭清理完成。无效地址
http://被拒绝后, 原控件可重试有效地址并关闭页面;关闭端口返回了过滤代理错误页,因此该 UI 场景不作为 ChromiumloadURL拒绝的实机证据。服务与 Renderer 释放绑定回归另有自动测试覆盖。 - 桌面使用确定性 loopback 模型服务驱动真实生产路径,共 24 次本地 completion 请求, 未发出外部模型请求;可选真实 Provider 探针没有找到已加密保存的 OpenAI 兼容文本连接, 未据此宣称桌面真实模型验收通过。Ask 与编程 Subagent 的桌面结果见 直连模型验收记录。 测试应用与具名浏览器会话已退出,所属 Electron/Node 进程及 fixture 监听端口均为 0; 临时截图和隔离 profile 保留在本机测试目录,不进入仓库。
2026-09-10 固定基础页签与浏览器多实例
- 工作栏注册表已分别声明实例策略、默认上下文、默认打开、必须存在、可关闭和排序属性。
任务中心与工作区保持默认存在且不可关闭;浏览器改为当前 Conversation 上下文的多实例。
布局加载按
required补回缺失的基础页签,并修复失效活动实例。 - 任务中心增加“当前项目”“全局任务”“全部项目”范围,默认跟随活动项目;任务和审批按 Conversation 所属项目过滤,范围模式随工作栏布局持久化。
- 浏览器服务已拆分 Conversation Context 与 Browser Tab。每个 Tab 拥有独立页面、Driver、 操作队列、状态和元素引用空间,同一 Conversation 的 Tab 共享 partition、代理和 Cookie。
- Renderer 使用工作栏实例 UUID 原子创建或恢复 Browser Tab,并以 UUID viewport token 防止 延迟 cleanup 隐藏新活动 Tab。关闭单个实例只释放对应 Tab。
- 直连模型和请求级 MCP capability 在请求开始时优先绑定可见 Tab,其次绑定 primary Tab,
并持有使用租约。当时绑定 Tab 拒绝关闭,该行为已于 2026-09-13 改为允许关闭和显式导航恢复;工具参数未增加模型可见
tabId,已有浏览器工具 schema 保持不变。 - 聚焦回归命令覆盖 Shared、BrowserService、Electron Session、IPC、Preload、MCP、Renderer
和 Workbar,13 个测试文件共 453 项通过;
npm run lint与 Web TypeScript 检查通过。 node build/run-browser-tabs-electron-e2e.cjs通过。该测试启动真实 Electron/Chromium 和本地 HTTP 页面,创建两个WebContentsView,验证页面隔离、同 Conversation Cookie 共享、真实 loopback MCP 的固定 Tab 导航与快照、当时的使用租约关闭保护,以及单 Tab 和最终 Context 清理。npm run typecheck、npm run lint、npm run build:bundle和git diff --check通过。- 本轮整库
npm test为 3686 项通过、61 项跳过、4 项失败。失败位于 portable/release 的 ASAR 元数据 fixture、Runtime 版本探测和 DeepSeek Harness 的本地 MCP fixture;定向复跑仍 失败。本次工作栏、浏览器、IPC 和 MCP 聚焦回归均通过,不将整库结果记为通过。
2026-09-09 移动目录选择与 Git 控件修正
- 本轮在已有文件管理改动上修正 FR-W3、FR-W4、FR-W6:
本机移动调用创建项目使用的
settings.selectWorkspace();远程移动调用sshHosts.browseDirectories(),按项目 Host 浏览。所选目录映射为工作区相对目标, 保留原名;取消不提交移动,外部目录在弹窗内提示限制。 - 取消、分支、Fetch、历史展开和提交行接入共享控件样式;删除菜单项左对齐。 远程目录列表限制滚动高度,保留加载、空目录、失败和截断提示。
npm test -- src/renderer/src/WorkspaceFilesPanel.test.tsx src/renderer/src/RightAssistantSidebar.resize.test.tsx src/main/workspace/workspace-management.test.ts src/main/ssh/ssh-host-directory-browser.test.ts通过 56 项,覆盖本机目录选择桥接、Windows 与 POSIX 目标映射、取消与越界选择、 远程 Host 和目录参数、取消未完成的浏览,以及 Git 控件与真实文件管理服务。npm test -- src/renderer/src/App.test.tsx -t "workspace|stale Git|opens the global assistant sidebar"通过 12 项。工作栏切换测试改为等待项目目录加载后出现刷新按钮。npm run typecheck、npm run lint和git diff --check通过。- 本轮整库
npm test完整运行 944 秒,3642 项通过、61 项跳过、6 项失败。 工作栏加载时序断言已修正并定向复测通过;其余 5 项涉及 Agent 离线依赖测试超时、 DeepSeek Harness MCP 加载、Runtime 版本探测,以及 portable/release 打包产物检查。 未再次运行整库测试,不记为整库通过。 - 隔离 Electron 窗口加载当前源码组件和 CSS,检查浅色、深色主题下 300px、420px 工作栏: 无横向溢出,分支与 Fetch 同行,提交行左对齐;移动弹窗没有路径输入框,取消为次按钮, 删除项计算样式为左对齐。截图保留于本机临时验证目录。此检查使用桥接替身,未自动操作 系统原生目录对话框,也不替代完整应用中的人工验收。
- 尝试从隔离 Electron 配置调用真实 SSH 目录浏览服务时,已有凭据在
safeStorage.decryptString解密失败,尚未建立 Host 连接。真实远程目录选择验收仍受阻; 未修改用户配置或远端文件,本轮未调用真实模型。
2026-09-09 文件管理与 Git 工作区扩展
- 已只读核对根目录规范、UI 设计系统、目录浏览组件、WorkspaceAccess 与 Agent 协议。 本轮范围定义于 PRD 工作区 FR-W1 至 FR-W6。
- 当前生产路径具备目录、属性、文本预览和工作树 Diff;Agent 的写入及 Git operation 仍是只读拒绝接口。文件管理、分支与提交历史尚未实现或验证,不能视为完成。
- 待完成源码实现、整库 test/typecheck/lint、真实桌面路径与当前源码 Linux Host 验证。 本轮开始前已有浏览器与工作区未提交改动,保留这些改动;不提交或推送。
2026-09-09 工作区页签交互
- 已核对当前工作树中的
RightAssistantSidebar.tsx和WorkspaceFilesPanel.tsx差异: 文件预览期间目录树保持挂载,接入返回位置与焦点恢复、文件与未提交更改分段视图、 目录就地重试,以及文件预览和 Diff 操作。行为定义见 PRD 工作区。 npm test -- src/renderer/src/RightAssistantSidebar.resize.test.tsx src/renderer/src/WorkspaceFilesPanel.test.tsx通过 35 项,覆盖目录展开、返回位置与焦点、视图选择、刷新失败保留内容、Markdown 源码切换,以及切换项目后丢弃未完成的文件预览。npm test -- src/renderer/src/App.test.tsx -t "workspace|stale Git"通过 11 项, 覆盖应用中的文件预览、路径复制、默认应用打开、返回和任务结束刷新。- 本轮
npm test完整运行结果为 3629 通过、61 跳过、5 失败。失败位于 Agent 离线 依赖打包超时、DeepSeek Harness MCP 加载、Runtime 版本探测,以及两个打包产物检查, 不将该结果记为整库回归通过。 npm run lint和差异空白检查通过。最新npm run typecheck被同时进行的浏览器 接口变更阻塞:测试替身缺少hide、setBounds、setViewport,部分侧栏测试仍传递 已移除的浏览器回调。该轮类型检查未通过,未改动另一项任务的接口或测试替身。- 尚未进行真实桌面视觉验收;组件测试的滚动断言不代替实际窗口中的布局和滚动检查。
- 范围仅限工作区页签,不包含项目文件搜索或其他页签改动。
2026-09-09 托管 Runtime 并行阻塞
- Windows 完整隔离测试程序通过界面发送 OpenCode 原生双子代理、直连与 Continue 文件 任务;随后三路上游请求在 917 ms 内发出并重叠,全部完成。普通并发没有复现全局排队。
- 在同一程序中,让真实模型执行一次 4,000 行、约 98 KB 文件的 CRLF → LF 转换, 同时运行另一个会话。原生进程的无凭据存活探针两次延迟 3,301 ms、3,085 ms; 原生热线程持续使用 CPU,而 Main 没有同步满载。操作不是模拟事件或直接调用 Runtime 的脚本,模型请求来自实际输入框和发送按钮。
- 托管 OpenCode 关闭未消费的自动 Git 快照后,完整程序重复相同操作和并行会话, 90 秒观察中的最大原生探针延迟为 210 ms,没有超过 500 ms 的探针,两条请求均完成。 该对照验证已复现的快照阻塞得到消除,不声称已经证明历史 90–125 秒事件的唯一原因。
- Continue 的实际 Electron 原生宿主在不排空 stdout 时被注入的 128 KiB 输出阻塞; 使用当前生产适配器后,输出在 5 ms 内完成,20 次状态读取全部成功,最大 5 ms。 这证明管道修复有效,不代表普通启动约 640 字节的输出就是历史卡顿原因。
- 修复版完整程序再次完成原生双子代理与 Continue 文件任务,实际请求重叠,三个页面 都通过计数按钮功能检查。Windows 诊断与程序验证合计 40 次成功模型调用; 另一次 UI 请求返回账户额度不足的 402,用户充值后才继续,没有把失败当成通过。
- 当前源码 Linux x64 Agent 经桌面生产管理链路完成 Ask 读取和 Execute 换行转换,
共 4 次成功模型调用;最终原生配置确认
snapshot: false且权限仍为ask/allow。 此验证覆盖实际 Agent、模型桥、工具完成和关闭,不量化 Linux 提速,也未注入取消。 - 定向回归先验证 7 项失败,再验证 124 项通过、5 项 Windows 平台跳过;
全项目类型检查和修改文件 lint 已通过。首次全量回归为 3625 通过、1 失败、61 跳过;
失败来自生命周期测试的包装流在底层 reader 关闭后仍计数为打开,已通过独立流实验
复现并改为观察
reader.closed,没有因此修改生产取消逻辑。最终候选全量回归为 3626 通过、0 失败、61 跳过,npm run typecheck、npm run lint、npm run release:notes:verify、差异空白与文档相对链接检查通过。本机和远端的 测试进程已回收,安装版和正式 Host 环境未改动;正式发布仍需候选 CI 与资产核实。 运行策略见 托管 Runtime 并行与输出。
2026-09-08 消息底部请求状态
- 已接入本机 OpenCode 父会话的原生重试等待及开始事件;直连模型把退避等待与实际发起 重试分开显示,Continue 初始文案改为中性的请求处理。显示规则和未接入边界见 消息底部请求状态。
- 消息底部按真实事件显示准备、工具、待回答及终态;有新进展时清除旧状态,结束后不 接受迟到状态覆盖。仅该处状态点改为静态,会话列表闪点、发送和停止按钮未改动。
- Windows 隔离开发桌面通过实际 UI 发送验证 OpenCode 的 503/Retry-After 等待、 原生重试开始、真实模型回复与完成;直连模型通过派发前连接拒绝、500 ms 等待、 重试、真实回复与完成。故障由本机测试代理注入,不冒充服务商实际故障。 三个隔离测试配置总计 5 次真实文本模型调用;另有一次直连重试被测试代理的调用 上限明确拒绝,界面正确显示失败,最终单次补测完成。未执行用户命令或修改安装版。
- DOM 状态记录确认底部无闪烁、完成后无旧重试文案,浅色截图可见原生重试计划与原因; 底部 WCAG 2 A/AA 定向检查无违规。最小化窗口的补充截图超时,未作为通过证据。 隔离窗口及测试代理已结束。
- 最终
npm test -- --reporter=json --outputFile=<临时报告路径>为 3618 项通过、 0 项失败、61 项按平台或手动条件跳过;首轮的压缩状态旧断言已修正,途中被用户中断 的运行不计为通过。npm run typecheck、npm run lint、npm run release:notes:verify、差异空白与相关文档相对链接检查通过。
2026-09-08 Desktop 0.12.8 安装包修复
- 真实
0.12.7安装目录确认 OpenCode 配置缺少整个node_modules。新增测试调用实际 electron-builder 资源复制器,复现相同 ENOENT;把复制源上移到.runtime-resources后,插件及传递依赖逐文件复制验证通过。 - 真实安装的 DSH bootstrap 存在
dsh-session-projection外部导入,而 Host 解包目录没有 对应依赖。将其加入 Vite bundling,配置回归从失败转为通过;最终包会拒绝同类外部导入。 - Windows x64 CI 已接入包内 OpenCode 插件导入、真实 DSH UtilityProcess 握手及 npm 探针,位于解包目录清理和发布之前。用户要求不做本地打包;CI 探针结果尚待本候选执行, 不能把当前源码回归通过当作真实发布包已通过。
- 本次不改变 Agent
0.11.21源码或包。macOS 改为 DMG-only,用户明确接受旧版客户端 手动升级影响;格式与发布规则见发布手册。
2026-09-08 Execute 目录权限等待修复
- 本机 OpenCode 的内部配置显式允许默认工具权限;每次 Ask 仍设置 deny-all 会话规则并 禁用工具,当前请求精确分配的只读能力例外。Execute 不把 Workspace 当作目录边界。
permission.asked不再忽略所有非父会话事件。Main 用 OpenCode Session 的parentID确认属于当前请求的子孙会话后按当前模式回复;其他并行会话不受影响,同一请求只回复 一次。子会话权限不伪装为父会话中的待完成工具。- 真实 OpenCode
1.18.9和候选1.18.29均已通过本地确定性模型驱动的原生 Task 工作区外读取回归;同一 Runtime 的 Ask 仍不暴露文件与命令工具。 - Continue
1.5.47的真实 CLI 已通过 Execute Shell 写入工作区外测试文件;DSH 固定 Host 已通过 Execute 工作区外写入、随后 Ask 拒绝同一写工具,未增加权限策略或人工审批。 - 真实 OpenCode
1.18.29已完成原生 Task 后的 yes/no 与自由文本问答回传;父、子会话 提问及后台任务不能交互时的失败路径均有回归测试。Continue 真实AskQuestion暴露了 QuizService 扁平数据结构与原适配器不一致的问题,现已按锁定版本修正;真实自由文本 回传、yes/no、选项及跳过均验证通过,自定义答案不再误标为选项。 - DSH 活跃 Execute 的 ACP 权限回调不再等待第二次 authorizer,Ask 继续拒绝;未添加 通用业务问答工具或从终端日志猜测确认意图。完整范围见 Runtime 交互边界。
- 当前源码 Linux x64 Agent 通过签名组包、生产安装、真实 Ask/Execute、原生子代理 工作区外写入、重连同一 daemon 和 stop/bootstrap。实机回归同时定位并修复了握手 Base64URL 响应误用 ID 校验及断流未结算等待;13 项 Unix 原生端点测试和连续 20 次 握手通过。两轮真实模型调用合计 10 次,均 completed;本轮测试 Agent 已停止。
- 最终完整回归使用
npm test -- --reporter=json --outputFile=<临时报告路径>,并通过GOODBUDDY_TEST_OPENCODE_BINARY指向已验证版本的候选 OpenCode。结果为 338 个文件、 3597 项通过、0 项失败、61 项按平台/手动条件跳过,报告success=true、退出码 0; Windows 跳过的 Unix 端点场景另在 Linux Host 运行了上述 13 项原生测试。 - 最终
npm run typecheck、npm run lint、npm run release:notes:verify和差异空白检查 通过,相关 Markdown 相对链接有效。此前失败、暂停及控制台截断的回归记录由本次完整 JSON 报告覆盖,不代表仍有测试失败。未执行系统休眠/唤醒或本地桌面生产构建、打包; 后续发布仍需对应候选的 CI 构建和跨平台验证。
2026-09-08 OpenCode 复用与原生控件恢复
OpenCodeRuntime仅在没有活动请求时探测缓存的 embedded server;活动对话或 Compact 期间直接复用服务,避免新会话的一次短探测失败关闭其他会话正在使用的进程。 空闲探测失败时仍清除旧 client 和会话映射并重建;并发调用共享检查与重建。 进程退出或服务关闭会中止绑定它的对话与 Compact,事件流重连等待也可立即取消, 请求明确报错,不自动重放已执行命令。本次修复后的真实模型验证共 6 次:正常并发、 已复现场景下的共享服务保护均正常完成;主动结束测试进程后旧请求明确失败,新请求 在替换服务上完成。此前“新会话完成、旧会话持续等待”的故障不再出现。- 请求级 MCP 注册与断开通过实例内
mutateMcp队列串行执行。仅实际发出mcp.add的名称进入清理列表;注册尚在排队时取消不追加断开。断开的 1 秒超时从出队后开始。 App按本机/远程、连接方式、项目和 Runtime 选择组成 scope 缓存原生清单,用请求 代次阻止旧 scope 结果回写;同 scope 会话刷新不清空重取,切换会话重置消息级选择, Runtime 切换状态也按 generation 隔离。清单请求失败或返回unavailable/partial时保留已有可用缓存并有界重试;没有可用缓存时保留新返回的部分数据,因此unavailable重试为可用partial后可显示 Agent 和 Command。
验证记录:首轮定向测试 273 项通过、5 项跳过;补充修复后的 Runtime 与生命周期测试 77 项通过,界面定向测试 6 项通过,类型检查通过。修复前的 lint 检查通过。 全量测试超过 120 秒被终止,期间出现一项 DS 本地 stdio MCP 测试失败,尚待定位。 这是当次历史结果。后续发布前修复与实机验证见本文上方及 远程主机技术设计;真实系统休眠恢复仍未完成验证。
2026-09-06 项目工作区
范围见 PRD 工作区。
当前源码已移除重复标题与底部完整 Diff 入口,使用彩色 Git 状态字母,点击更改项读取 单文件 Diff。已暂存与未暂存差异分开展示;本机 Git 测试覆盖无首次提交、未跟踪、 暂存后继续修改、重命名、删除及包含方括号的路径。Git 刷新驱动目录树重新读取,保留 展开状态;SSH 项目不提供本机系统打开按钮。审查后补齐了当前 Diff 随刷新重读、 旧请求结果失效,以及超过 50 项变更的继续加载入口。
验证记录:
- 最终
npm run typecheck、npm run lint、npm run build均通过。 - 工作区专项 7 个测试文件复跑:317 项通过,3 项 Linux 专用测试在 Windows 跳过。 任务完成测试同时检查目录树出现新文件。
- 最终
npm test:326 个测试文件、3552 项测试通过,9 个文件、58 项测试按既有条件 跳过。复核首轮曾有一项浏览器地址草稿测试超时,单独复跑及最终全量复跑均通过; 更早的超时/失败记录不再作为最终验收结果。 - 后续复核已通过既有凭据和固定 Host Key 经 VPN 连接共享 Linux x64 Host,使用当前
源码构建的隔离 Agent 包安装并启动。真实
RemoteWorkspaceAccess → Agent git/status与git/diff路径覆盖暂存后继续修改、删除、重命名、未跟踪和方括号路径;均通过。 Git 验证未调用模型。 - Windows 隔离桌面实例已通过真实点击验收:当前项目单文件暂存/工作树 Diff 分组与 增删颜色正确,修改测试文件后点击刷新可更新正在查看的 Diff,53 项变更经加载更多 全部可访问。截图留在本地验证目录,不纳入产品包。
目录分页、任意目录切换和 HTML 预览不在本轮改动范围内。