125 lines
12 KiB
Markdown
125 lines
12 KiB
Markdown
# 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 补取,不能推断为已验证。
|