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.
8.5 KiB
8.5 KiB
Runtime 交互边界
本文定义当前原生交互的适配范围,不增加工作模式或第二层 Execute 审批。
| Runtime | 权限确认 | 业务问答 |
|---|---|---|
| 本机 GoodBuddy 管理的 OpenCode | 内部默认配置允许权限;每个 Ask 请求仍使用 deny-all 与显式只读能力。Execute 自动回复属于当前请求的父、子孙会话权限事件,不处理其他并行请求 | 通过 question.asked 转交父、子孙会话问题,支持原生单选、多选、yes/no、自由文本及跳过;使用公开 ID 回传 question.reply/reject |
| 托管 SSH OpenCode | Agent 按已接受 Prompt 的 Ask/Execute 模式处理 ACP 权限,规则见远程主机技术设计 | 当前 Agent 插件转交原生父、子孙会话 question.asked;前台使用同一问答队列,回答和跳过经认证 Agent 控制通道回传,已知 Task 关联显示子任务归属 |
| Continue | Execute 启动传入 --auto,剩余原生权限请求按当前模式自动答复 |
对接 1.5.47 QuizService 的扁平 pendingQuestion,其中 question 是字符串。选项回答与自定义文本分别回传正确的 isCustomAnswer;跳过发送拒绝回答的文本 |
| DeepSeek Harness | 固定 Host 的 Execute 文件与命令工具不询问目录权限;若收到 ACP 权限请求,活跃 Execute 直接选一次性允许,缺少该选项时使用 Runtime 提供的允许选项,Ask 拒绝,不等待额外 authorizer | 固定 Host 当前未提供通用原生业务问答服务,不把普通模型正文误识别成待答协议。模型以普通回复提问时,用户通过下一条消息回答 |
托管 SSH OpenCode 的权限、原生问题事件与回复链路由
远程主机技术设计定义。本次候选的远端业务问答需要
Desktop 0.13.0、Agent 0.11.24 和新启动的托管 Runtime;请先升级 Desktop,再更新
Host 环境。任意第三方 ACP 服务及旧 Agent 不因此获得通用问答接口,候选不表示已经发布。
运行与失败
- 结构化 yes/no 是普通选项,不从日志、自然语言或 Shell 输出猜测用户意图。
- 前台同一请求的待答问题按公开
questionId去重,按到达顺序保存在消息的pendingQuestions中。每次显示队首表单;有多个待答请求时显示数量。后续提问和重复 事件不替换当前表单或清空输入,回答或跳过成功后只移除对应 ID,再显示下一张表单。 提交失败保留队列、输入和重试入口,队列未清空时继续显示“等待你的回答”。 - 本机与托管 SSH OpenCode 在提问到达前已收到原生 Task 的
metadata.sessionId时,将精确匹配的 子会话关联为可选childTaskId。问答卡片显示该任务名称;对应 Task 卡片显示 “等待你的回答”,展开后可点击“前往问答表单”滚动并聚焦当前队首表单,仍按顺序回答。 没有已知关联的子孙会话问题照常排队,不猜测子任务归属,也不从工具名或进度文本构造表单。 - 回答或跳过成功后,会话保留只读的“问题与回答”,显示原问题及对应的选项答案、 自定义文本或“已跳过”。同一任务的多轮问答逐次保留,随本地会话保存,重新打开后仍可查看。 提交失败时保留输入与重试入口,不生成已回答记录;取消未回答的问题不记为主动跳过。
- 提交响应晚于任务结束时仍保存已提交的问答,但不覆盖完成或失败状态;晚于下一轮提问时 不清除新的待答卡片。旧版会话未保存的问题与答案无法从“已提交”状态文案恢复。
- 待答队列仅保存在当前桌面会话内存中,不写入会话快照。刷新仍在运行的消息时保留整个 本地队列;完成、失败、取消事件或持久化终态快照清除整个队列。迟到的提交结果可以保存 已回答记录,但不会恢复表单或覆盖终态。本机 Runtime 不恢复重启前未提交的问题;托管 SSH 重新附加同一存活 Agent Prompt 时,由 Agent 当前待答列表补发问题,已回答的历史事件不补发。
- 后台任务收到结构化提问时,通过现有 Main 路径明确失败并提示改为前台对话,不永久等待。
- 请求结束或取消后清除对应待答映射;过期回答明确报错,不转交给后来的请求。
- 任意终端程序的密码、OAuth 登录、许可证确认或 stdin 提示不自动回复
yes。这类程序应 使用其非交互参数,或由用户在终端完成;不能把权限确认和业务决策混为一谈。Shell 工具保留其现有取消与超时,不新增日志解析或通用交互代理。
托管 Runtime 的并行与输出
子任务完整过程的显示与数据库差量存储相互独立,本机和托管 SSH 共用桌面存储层; 旧库升级与空间回收规则见执行记录存储与升级回收。
- 本机和 Agent 管理的 OpenCode 启动配置都显式设置
snapshot: false。GoodBuddy 不消费 原生自动 Git 快照、快照差异摘要或快照撤销;关闭这条内部路径,避免大行级差异的同步 计算阻塞同一原生进程中的其他会话。 - 文件工具、Shell、原生子代理、工作区 Git 状态和单文件差异保持可用;不新增全局会话 队列、请求重放或总执行截止时间。外部 OpenCode Server 的配置不由 GoodBuddy 改写, 已运行的旧原生进程也不会热更新配置。
- Continue 使用 HTTP 传递响应和状态;Electron UtilityProcess 启动后持续排空不用展示的 stdout,避免控制台输出填满管道后阻塞宿主。stderr 的有界错误处理、请求取消与进程 回收保持不变,不把诊断输出复制进聊天或持久日志。
- 远端最终启动配置由远程主机技术设计定义, 模型桥生成最终配置时同样保留上述快照策略。
工具操作摘要
工具记录沿用 UI 设计系统的折叠布局。Continue、DeepSeek Harness
和直连模型共用 toolOperationSummary:优先使用有效原生标题,否则从参数提取命令、
文件路径、搜索条件或 URL,合并空白后最多显示 240 字符。无法识别时保留原有工具名
回退规则;文件正文、整份参数 JSON 不进入标题,参数详情仍可展开查看。
Continue 在宿主截断输入前提取摘要,流式完成与失败事件使用合并后的输入和摘要。 DeepSeek Harness 按调用 ID 保留名称、输入和摘要,结束事件省略输入时仍能显示操作内容。 直连模型从原始参数生成一次摘要,在待执行、执行中和完成时复用;审批失败、拒绝和 执行失败、刷新重试仍保留已有提示。
本机 OpenCode 沿用原生操作标题。远端 ACP 独立使用原生标题作为记录名称,不经过上述 本地转换,本次没有修改 Agent、远程桥或协议。
消息底部请求状态
- 状态属于当前请求,不与顶部 Runtime 的连接中、就绪、不可用混为一谈。提交后先显示 “正在准备请求”;没有更具体的活动事件时显示“等待后续进展”,不声称模型正在思考。
- 本机 OpenCode 只把当前父会话的
session.status.retry映射为等待重试,显示原生attempt、计划重试时间和有界脱敏原因;后续busy才显示已开始重试。其他会话的 状态不串入当前消息,不猜测总重试次数,不把 SDK 事件流重连当作模型重试。 - 显示优先级为待回答、待确认、进行中的上下文压缩、明确的请求状态、待执行或执行中的 工具、未完成的子任务、等待后续进展。压缩沿用已有活动块,不重复增加底部提示。 正文、推理或工具进展会清除旧状态;子任务更新不覆盖父请求的重试提示。
- 完成、失败、取消后保留真实终态,迟到的状态事件不能把请求恢复成处理中。底部状态点 为静态,不凭请求尚未结束暗示仍有进展;会话列表闪点和发送、停止按钮保持原有行为。
- Continue、DeepSeek Harness 和远端 ACP 保留其已接入的处理与工具事件,不伪造未接入 的原生重试状态。直连模型的重试等待与请求开始文案见 直连模型 UI 设计;本次不改变任何 Runtime 的重试上限、请求重放或取消策略。
实现与真实 Runtime 验证证据见进度记录。