Remove Ask/Execute modes and general product tool approvals so requests use the selected runtime, enabled capabilities, and execution account permissions. Migrate retired application metadata while preserving user content. Retire the Results page while retaining conversation images and stored artifacts. Add local and remote workspace file imports, timestamps and sorting, improve image discovery and saving, and refine workspace navigation and supervision responsiveness. Include the accompanying web-search changes, tests, probes, and product documentation. Remote imports require an updated Agent. Existing artifacts are not automatically copied into project directories. Validation evidence and outstanding failures remain documented in feature progress files; no full test suite or real-model calls were rerun for this commit. Release note: Run requests without switching work modes, import files into a selected local or remote workspace folder, sort workspace files by date, and keep using conversation images after removal of the Results page.
11 KiB
技术设计
状态:主要源码改造已落地,完整验证待完成。规则见PRD与执行规则,调研基线见源码调研,字段级转换见数据迁移,实际证据见进度。
结构调整
正常调用保留现有 Renderer → IPC → Runtime → 工具执行链路,删除各层携带的产品工作模式。无需新增权限服务、策略框架或持久化状态。
flowchart LR
A[对话、队列、日程、通道] --> B[Runtime、模型、执行空间与上下文]
C[已启用能力与 Runtime 分配] --> D[实际工具目录]
B --> E[Runtime 执行]
D --> E
E --> F[原生工具、MCP、图片与子代理]
G[专用内部文本调用] --> H[无工具模型实例]
图中表示当前源码结构。模型和 Runtime 的真实能力限制、能力启用与分配、工具业务校验仍在原有实现中处理;产品 toolApproval 策略与一般工具审批等待已移除。
合同与调用边界
删除 WorkMode、InteractiveWorkMode、生产使用的 LegacyWorkMode、normalizeInteractiveWorkMode 及请求/结果中的模式字段。迁移模块可以识别历史键和值,但不得让兼容类型继续进入新执行请求。
同步修改 assistant-contracts、contracts、runtime、image-generation-contracts、channel-contracts、remote-project-candidate-contracts、remote-runtime-launch-contracts 和 remote-agent-contracts。原生清单的 ask/execute 属性以及能力说明中的 availableIn 模式数组一并删除。
IPC、preload 类型、Renderer 事件、任务投影、队列输入、子代理活动和恢复入口必须使用同一无模式形状。不能依赖 Zod 自动剥离字段代替实际持久化清理;严格 schema 的切换顺序须配合升级。
按 L-5 和 US-17 删除 toolApproval 的共享合同、默认值、设置读写、IPC 更新字段和各来源拒绝分支。移除一般工具审批的 Broker 等待、事件、回应入口与界面引用;保留原生权限协议的合法回应、结构化提问、取消和超时。不得把旧策略改成常驻的自动允许字段。
stripWorkModeInstruction 已删除,新请求不注入模式提示词。历史回放保留用户正文,不以任意正文以 Work mode: 开头为依据删除内容;既有不可信历史信封仍按完整格式解析。
Runtime 实施清单
| 模块 | 必做调整 | 需保留的机制 |
|---|---|---|
| Controller / Model | 删除 Ask deny authorizer、工具循环模式条件、目录和调用双重检查;删除 rg 的 Ask 参数解析 |
纯文本实例、工具注册身份、输出分页、取消、进程清理、工作区 API 语义 |
| OpenCode | 删除模式权限模板、Ask tool override、MCP/图片注册模式条件和 Ask 回应分支 | 运行时会话隔离、临时 MCP 生命周期、问题与权限协议的合法回应 |
| Continue | 删除产品模式参数、只读名单、模式选择 argv 和 MCP 拒绝分支;核对原生配置合并 | 与固定上游版本有关的其他补丁、Windows 处理、结构化问题、工具配置 |
| Harness | 删除 host 的 trusted Ask 定义、控制面的 Ask 工具钩子、prepare 模式及 ACP 模式宣告 | 工具实际注册、插件、请求归属、工具事件与输出回传 |
| 原生客户端 | 删除模式参与的启动身份、Continue 注入限制、OpenCode/DS Web 模式插件 | 用户历史目录、资源回收、独立上游配置和必要启动适配 |
| 内置 MCP / 图片 | 调整权限发放入口;移除图片服务及绑定的模式字段、回调、拒绝和描述隐藏 | 启用和分配、资源范围、模型配置、计划有效性、图片引用与保存语义 |
| 子代理与内部任务 | 删除继承及 Ask-only 智能路由条件;内部分析使用无工具实例 | 已有路由开关、能力上下文、专家/团队、摘要和监督者无工具性质 |
| 调度 / 通道 / 委派 | 删除模式、toolApproval 策略、一般工具审批等待及委派固定拒绝,不再识别模式前缀 |
时间计划、来源身份、队列顺序、业务许可和结果投递 |
原生工具没有通用逐工具开关,不能把新增设置系统作为移除前提。Continue chat/agent、OpenCode 原生 agent 类型、上游权限 ask 和文件权限 mode 按各自含义保留;仅删除它们与 GoodBuddy 工作模式的耦合。
远程协议与升级
Agent wire 保持 2.0,runtime/acp capability 已从 5 升至 6;prepare、acceptance 和 launch 不再含 workMode,使用既有精确版本协商拒绝旧端。本地 Harness 控制扩展由 1 升至 2,Utility 启动控制协议仍为 3,两者不混用。
Desktop、Agent、CLI、runtime profile、model bridge 路由、Continue helper、OpenCode 子会话插件必须同批更新。删除 --work-mode、模式相关进程冲突与路由字段,并重建受影响的受管包。当前源码版本与包锁版本不可混用作为验收证据。
旧 Agent 必须在提交新任务前被识别并提示更新,不能失败后补 execute 再投递。对于旧版已接受任务,保持 operation ID、prepare/start digest、事件序号和 ACK;使用已有状态查询、恢复与升级流程,不自动重发请求。若新合同不能恢复某种旧会话,必须报告明确状态,并在发布前给出已验证的处理路径。
远程 semantic-prompt 存储没有完整 preparation 对象,无法根据删字段后的请求重建旧摘要。字段迁移与摘要比较的关系见数据迁移。当前通用远程 MCP 转发缺口独立记录,不将模式删除描述为新增远程支持。
外部 /goodbuddy/tasks/next 委派入口接受无模式形状,也接受并丢弃旧 ask/plan/execute 字段;向内部只传无模式对象。新输出不发送模式,外部服务兼容性仍需验收。这个兼容入口不决定工具权限。
历史升级执行顺序
- 先修改新写入形状与读取投影,建立旧字段转换测试。
- 在现有启动 Worker 中执行版本升级;业务连接、恢复、队列和日程不得先读取未转换记录。
- 保留已发布迁移链,schema 60 追加字段移除迁移。Runtime 设置 22 定向删除顶层
toolApproval,两类升级各自执行。 - 清理 localStorage 导入、旧队列解析和远程事件归一化,避免升级后写回旧字段。
- 新库和真实旧库副本走同一产品启动路径验收;不默认执行全库
VACUUM。
迁移不能通过重新序列化为窄 schema 丢弃其他元数据;不新增迁移日志框架或持久化恢复凭证。
实施阶段
| 阶段 | 内容 | 进入下一阶段的证据 |
|---|---|---|
| P1 | 合同、状态、数据库与 Runtime 设置迁移 | 新写入无模式及 toolApproval,旧数据转换可重复,字段外内容与身份不变 |
| P2 | Controller、各本地 Runtime、工具与内部任务 | 生产调用链不依赖模式;正常工具任务与内部无工具任务均通过 |
| P3 | 原生客户端、子代理、队列、日程、通道和委派 | 启动配置及各来源实际可用,取消/恢复不回退旧逻辑 |
| P4 | Desktop-Agent 协议、辅助程序与受管包 | 兼容性协商及真实 Host 的当前源码路径通过 |
| P5 | UI、文案、当前规范及发布说明 | 无模式和安全分类,通用设置可确认或取消清除数据,中英文界面与迁移验收完成 |
阶段可在开发中交叉推进,最终必须一起交付;不能发布仅删除界面而后端仍依赖模式的中间状态。
验证矩阵
| 层次 | 验证内容 | 证据形式 |
|---|---|---|
| 静态清点 | 字段、模式分支、默认值、CLI、生成插件、提示词与 i18n | 对每个剩余搜索命中说明其为历史迁移或无关语义 |
| 存储 | 新库、schema 59、较早已发布库、重复启动、失败与恢复、远程重放 | 产品 Worker 升级、内容比较、完整性检查与计时 |
| 设置 | Runtime 设置 21 及更早支持版本、全部旧策略值、保存与重启 | 新版本落盘无 toolApproval,其他设置及加密凭据字节保留;历史必填字段不新增缺省策略 |
| 工具 | 原生各工具组、启用/关闭 MCP、图片生成保存、业务错误 | 真实入口调用结果;关闭服务不能被伪造调用绕过 |
| Runtime | Model、OC、CN、DSH、各原生客户端及其子任务 | 聚焦测试加生产路径验证,包含动态插件工具 |
| 请求来源 | 对话、恢复队列、定时、通道、委派、内部分析 | 无旧策略拒绝或一般审批等待,任务身份与结果一致,内部分析没有工具 |
| 远程 | 兼容/不兼容版本、OpenCode/Continue、断开恢复、停止与重启 | 共享 Linux x64 Host 上的当前源码或开发包验证 |
| UI | 各删除面、键盘、窄窗口、浅深主题和中英文 | 真实 Electron 验收及组件回归 |
完成代码改造后运行 npm test、npm run typecheck、npm run lint。构建、真实模型和 Agent 验证遵循仓库开发规则;记录实际请求数,不把已有单测或配置检查写成端到端通过。图片提供商调用与纯文本模型验证分开记录。
文档同步清单
根运行时约定及下列 Markdown 现行规范已按无模式源码更新。日期明确的历史记录保留原状;尚未实现的功能仍标为规划,完整测试与发布包验证不因文档同步而视为通过。站点 HTML 不属于本次文档修改范围,其中旧模式文案仍需源码维护方同步。
| 文档范围 | 更新内容 |
|---|---|
根 AGENTS.md、UI-DESIGN.md |
删除 Ask 只读、Execute 授权与选择器规范;删除安全分类,将清除数据放入通用设置;保留 OS、生命周期和发布规则 |
根 README、FEATURES 中英文、BUILD.md、站点 |
能力介绍、启动与升级说明 |
| assistant-workbar、direct-model-agent、deepseek-harness、remote-host | 执行、原生客户端、合同、权限协议和真实验证 |
| task-and-job、wechat-channel、telegram-channel | 任务字段、日程继承、旧命令和未来通道需求 |
| conversation-media-generation、computer-control、obsidian、magic-notes、conversation-supervision | 模式依赖、业务范围与内部无工具任务 |
| device-sharing 与跨功能架构 | 已有委派合同;不扩大设备共享的当前实现范围 |
| local-tool-environment、application-tool-navigation、知识与文档类功能 | 引用旧模式的设置说明与功能条件 |
| desktop-pet、office-document-editing、full-duplex-voice、路线图 | 尚未实施方案中的旧模式依赖 |
| 开发验证脚本与发布手册 | 模式参数、旧验收场景和 Agent 兼容步骤 |
旧发布说明、日期明确的测试记录和审查报告保留当时事实,通过新版说明建立替代关系,不伪造过去的验证结果。