Files
ycode/docs/WorkBuddy对话与输入交互统一对齐方案-2026-10-21.md
T

12 KiB
Raw Blame History

WorkBuddy 对话与输入交互统一对齐方案

一、目标与证据基线

统一覆盖十项:会话加载、模型选择、权限保存与首发生效、模式输入栏、过程分组、运行状态、问答展示、完成收起/展开、工具授权、归档/删除确认。

  • 以 WorkBuddy 5.8.3 截图及已核验代码、样式为目标;历史源码明确版本范围,当前文件哈希相同的部分可以复用。
  • 所有原版调查通过 REA。区分静态代码确认、运行行为验证和像素验收,不将编译通过视为完整对齐。
  • 保留处理时间及其他任务已有修改,实施前重新审阅差异,增量补齐,不重做已有修复。
  • 不更换内核、不重建数据管理页面,不伪造模型、费用、进度、审批原因或超时状态。

二、会话加载、模型与权限一致性

会话加载

  • 接入现有 loading 状态,区分新任务首页、已有空会话、加载中和加载失败;不再因加载时消息为空而显示首页。
  • 无缓存时恢复原版两组消息骨架:用户气泡、助手头像/名称和三行正文占位,使用主题 token、1.5 秒扫光及约 300ms 淡出。
  • 目标会话有非空缓存时先显示其消息,不显示骨架;重复点击已就绪的当前会话不清空、不闪烁。
  • 保留页面框架和输入区;标题未知时显示顶栏占位。保留草稿,但禁止向尚未就绪的会话发送。
  • 保留 session/version 防串、活动回合快照和缓冲事件归并;失败撤除骨架并提供错误与重试,旧请求不得覆盖新会话。
  • 使切换反馈先于异步结果呈现;另测大历史的解析和渲染阻塞,仅优化实测热点,不以骨架动画替代性能修复。

模型选择

  • 输入栏与发送路径共用有效模型解析;没有模型时显示“配置自定义模型”,点击进入配置并阻止发送。
  • 移除旧配置名称回退,不能因选择为空或失效而显示不存在的 deepseek-chat。
  • 新增成功后自动选中新模型,同步全局默认和当前任务下一次请求;编辑已有模型不无故改变选择。
  • 删除后清理会话、草稿中的失效引用:有剩余模型则使用有效默认选择,否则清空。
  • 进行中的请求及历史消息保留真实模型快照,不因模型删除或新增而改写。
  • 检查旧配置迁移,保留真实用户配置,不从程序内置默认值凭空创建模型。

权限保存与首发生效

  • 补齐草稿权限 → 会话创建 → 持久化 → 请求参数 → 内核策略,修复创建会话遗漏 permissionMode 的路径。
  • 已有会话以保存权限为准,全局偏好只作为新任务默认值;首发直接读取权威选择,不依赖 effect 尚未同步的副本。
  • 请求更新权限后同步前端会话元数据;重启、重入、活动回合恢复后,标签、存储、请求和内核策略一致。
  • 验证 craft 完全访问从首条请求生效,无需停止重选;保留明确安全例外及 plan/ask 限制。
  • 复用另一任务已有的权限保存和策略更新,不新增第二套权限状态。

三、输入栏、过程、问答与完成态

模式输入栏

  • 恢复 StatusChips/ModeChip:craft 不显示,plan 为剪贴板图标+“计划”,ask 为气泡图标+“仅问答”。
  • 使用原版 SVG 和样式:32px 高、8px 水平内边距、4px 间距、16px 图标、13px/20px/500 文字,恢复主题及焦点规则。
  • Chip 本体不打开下拉;hover/focus 显示清除按钮,点击回 craft;模式变更禁用时不显示清除按钮。
  • 恢复加号 → 分支 → 权限 → 模式及其他状态的插槽,右侧保留模型、麦克风和发送。
  • plan/ask 真正禁用权限控件,并关闭、卸载已打开的权限浮层,保留原因提示。
  • plan 使用默认权限并保留进入前的值用于退出恢复;ask 保留此前权限显示但禁用修改。补核当前版本宿主差异,不覆盖用户保存的原始偏好。
  • 加号菜单与 Chip 共用会话/草稿模式状态,切换失败回滚、保留草稿;不增加模式专属 placeholder。

过程与完成折叠

  • 移除全局最新组过滤和全回合过程聚合;各段独立计算摘要、管理明细和展开状态。
  • 连续至少两项可折叠过程形成候选段;后方出现非空正文或回合结束时才局部收起,当前尾段保留独立思考和工具项。
  • 保留正文锚点、提问、widget 等特殊分类,新过程不覆盖旧组。
  • 回合结束、允许折叠且存在正文锚点时,生成默认收起的完成/取消耗时块;展开后按原顺序显示。
  • 外层完成折叠、局部摘要、思考和工具分别管理状态,不用一个布尔值控制全部层级。
  • 完成操作区对齐顺序、间距、模型和时间规则;使用真实终态时间,不冒用创建时间,不将时间显隐绑定到折叠状态。

提问与已回答记录

  • 对齐 QuestionFloating 的分页、选项、自定义补充、关闭、提交、键盘、焦点及提交中/失败状态,恢复原版 24px 圆角和排版。
  • 已答记录恢复 QuestionView/ToolExpandable:问题与答案均为 14px、行高 1.75、不额外加粗;问题 tertiary,答案 primary。
  • 恢复灰底、16px 圆角、12px 16px 内边距、条目间距和滚动限制。
  • 统一 interaction 与工具 metadata 投影,按工具关联去重并放回提问位置,移除最终正文后的重复追加。
  • 内联问答不参与普通工具摘要,但允许进入外层完成折叠;历史缺失节点保留兼容路径,不丢记录、不伪造顺序。

四、运行状态与授权交互

底部运行状态

  • 增加共享运行进度类型和 ChatEvent 进度事件,由当前 Claude SDK、准备流程及交互代理提供真实阶段和工具信息。
  • 贯通序列控制、事件归并和活动回合恢复,按 session/run 隔离,终态清理。
  • 恢复文案顺序:有效准备阶段 → 云启动阶段 → agent phase → “思考中”;文案、工具 detail 和覆盖条件按 REA 恢复。
  • 恢复 reasoning-only 显隐、网络恢复专用展示、真实收尾分支及准备/bootstrap 的 tips 控制。
  • tips 保留原版延迟、轮换、悬停/焦点暂停和关闭回调;不补造云状态、credit、网络原因或静默超时提示。

工具授权卡

  • 按真实请求类型选择原版对应组件。截图中的规则拦截使用 InterceptCard/SandboxInterceptCard 结构,不再统一套用高额度审批或居中权限模态。
  • 恢复输入区宽卡、24px 圆角、16px/500/25px 标题、命令或目标说明、编号选项、选中背景及箭头;普通选项行采用原版 40px 高和12px 圆角。
  • 补齐审批数据契约中的真实工具名、命令/目标、原因、规则信息及允许范围,避免把 toolCallId 当作工具名称,不把所有请求描述成“命中询问规则”。
  • “查看拦截规则”放在右上 headerAction,展示实际命中信息;缺少规则身份或详情时使用明确的不可用说明,不捏造规则页面。
  • 恢复允许一次、会话允许、拒绝及键盘、提交中、失败重试状态;只根据真实能力提供会话允许选项。
  • 保留 run/id 绑定和重复提交保护,提交失败不能显示已授权,取消或终态不得执行滞后的审批响应。

“本次会话内始终允许”生效链路

  • 先建立真实 SDK 回归,检查整组 suggestions 是否正确返回、SDK 是否应用,以及后续请求是否匹配同一授权范围;不得仅凭按钮提交成功认定修复完成。
  • 会话允许仅授予用户确认的建议规则,不改为完全访问,不按工具名做无条件放行,不自行扩大命令、路径或操作范围。
  • 区分 YCode 对话、单次 run 和内核实例。会话授权以 YCode session 为隔离边界,不能因正常切换会话、跨回合或内核重建而无故丢失。
  • 若 SDK 的会话规则不能随内核恢复,在主进程维护最小必要的、类型化的会话授权记录,并通过 SDK 支持的权限接口重放;不得用字符串模糊匹配绕过安全检查。
  • 会话授权不写入用户级/项目级永久权限设置。客户端重启后的行为需通过原版 REA 证据补核;在证实前不承诺跨启动持久化。
  • 显式拒绝、不可覆盖的安全规则和 plan/ask 限制继续有效;规则恢复失败时保留审批要求并报告失败,不能默默扩大权限。

五、任务确认、实施与验收

归档/删除确认

  • 两种确认改为任务行右侧 240px Popconfirm,恢复箭头、排版、按钮、确认自动聚焦、Escape 和外部点击关闭。
  • 共享 Popover 增加可选锚点、箭头、点击吞掉、宿主类及无障碍属性,默认不影响其他调用。
  • 无遮暗模态遮罩,外部点击不误选底层任务;边缘避让,锚点失效时关闭并合理恢复焦点。
  • 异步确认防重复,成功关闭,失败保留浮层和可见错误。
  • 按此前选择恢复原版归档说明,记录其指向当前不存在入口的差异;保留全权限确认仍使用的模态样式。

实施与验证

  • 主上下文先统一进度事件、审批数据与授权作用域、问答投影和输入栏/Popover 接口,再委派边界明确的子任务;主上下文负责集成、审查和最终验证。
  • 加载测试覆盖无缓存、有缓存、重复点击、延迟 IPC、失败重试、A→B→C 乱序返回、活动回合恢复和大历史;等待期间侧栏仍可切换。
  • 模型与权限测试覆盖删空后新增首发、失效草稿、重启、模型快照、新任务完全访问首发、会话保存及模式进出恢复,核对界面/存储/请求/内核一致。
  • 授权测试覆盖允许一次后再次询问、会话允许后匹配请求不再询问、不匹配请求及另一会话仍询问、跨回合与内核重建、拒绝、取消、并发请求和应用失败。
  • 用同一轨迹验收提问中、完成收起、完成展开;逐事件验证“正文 A→思考→工具→正文 B→新工具”,覆盖去重、长文本、多选、跳过、失败和历史兼容。
  • 回归其他 Popover、全权限模态、归档与删除;运行相关对话、摘要、聊天、内核、审批、权限、模型、字体及持久化测试,以及 token 检查、typecheck 和 build。
  • 在相同视口、DPR、缩放、主题和字体下检查实际窗口,交付加载、模式栏、对话三态及授权卡截图、测试结果、REA 版本/Evidence 和剩余差异。
  • 分别报告结构、交互、授权语义、性能、样式及像素验收状态;未查明的原版授权生命周期明确保留,不以推测或界面成功替代验证。

六、方案来源与精简交接材料

  • 本文前五节恢复自 Codex 对话“检查正在思考状态逻辑”(01a158f8-0ddd-7710-8466-f5717cbd6cc8)中用户要求“融合到方案里面”后的最新十项完整计划;此前仅存在于对话,并未保存到文件。本次仅保存和交接,不代表实施完成。
  • 精简材料按该对话及授权卡取证子任务的引用筛选,保留原有相对路径,复制到交接项目的 .tmp/;清单为 .tmp/workbuddy-interaction-handoff-manifest.json,逐文件记录大小及 SHA-256。材料不提交 Git,需单独随项目交接。
  • 主要入口:.tmp/rea-runtime-scripts.json(历史运行时脚本)、.tmp/rea-css-recovered/manifest.json(恢复 CSS 的来源清单)、.tmp/rea-css-evidence/(本方案引用的选定证据)、.tmp/rea-context-source-candidates-20261017/src-0FGg1seX.js、.tmp/task-menu-runtime-source.js、.tmp/rea-visual-tool-expanded/ 及完成态、归档确认对照截图。
  • JS Evidence ev_717fa5e846e64d67ac19c8925d121bff632c0d3aefb3603b10858559cabb2dcb 对应 WorkBuddy 5.8.2;CSS Evidence ev_176b4a0369c4836f9498bd4a9c7c9dff10022defcbddaad6dd0080442de78ee9 对应 5.8.3。不得将历史 JS 统一标注为 5.8.3,或把前端映射当成后台授权生命周期已验证。
  • 不复制 .tmp/rea-current-evidence.json 整包(约 511 MiB)、无关资料库模块导出、REA 工具运行时及依赖、测试编译产物。本交接是选定材料集,不是完整 REA 会话备份;没有覆盖的记录及后台行为仍须经 REA 补取,不能推断为已验证。