Repository navigation
refactor(workspace): unify sending controls in the message composer - #7344
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…ation-composer Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent · gpt-6.1-sol · OpenAI · runtime_reported · reasoning_effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机
在 Goal 或工作区对话中发送消息、调整执行器与模型的用户。 发送前,执行器与模型在页顶,附件与发送在页底;调整后可在同一输入框旁确认配置,菜单关闭后草稿和焦点仍保留。 打包页面已验证控件集中、窄屏菜单不遮挡输入,以及配置拒绝后保留草稿且不启动 Turn。 不改变权限、托管管家配置或模型提供方,也不声称已完成原 Session 内切换模型、原生输入法或 Lark 全流程。 原 Session 内切换模型、已安装 App 验收与整个研究工作台的后续改进仍留在现有工作中。
原先用户在发送消息前需要在页首与页尾之间确认本次配置,配置被执行器拒绝时还会丢掉刚写的内容。这使后续工作多一次定位和重写;本次改善是可直接使用的发送交互与明确未提交时的草稿恢复,没有以控件出现、测试数量或合并数量替代完整研究目标的验收。
改动思路
这版只重排既有控件,并复用现有准备阶段与投递边界;不增设配置、Session 或权限的第二个所有者。 当前 PR 的可交付边界是统一输入区、菜单与草稿保留,原会话模型重配和完整研究工作流继续由既有任务处理。
不改动比本次重排更小,但会保留已经复现的输入丢失;另建配置框架则扩大权限和维护成本。这里把既有 ChatModelMenu、WorkspaceSelect、附件、快捷操作及 LoopX 消息方式放回 PersonalWorkspacePage 的同一输入框。当前配置与后续选择仍有区别,托管管家设置和原始会话身份保留各自所有者。新组件只负责投影与回调,没有新存储或第二个决策入口。
| 触发 | 旧行为 | 本次行为 |
|---|---|---|
| 发送前调整配置 | 页首选择,页底发送 | 输入框下沿确认与发送 |
| 打开并关闭菜单 | 分散入口 | 一个附件入口;关闭保留草稿和焦点 |
| Session 准备返回 424 | 错误显示但草稿丢失 | 保留草稿,Turn 数不增加 |
| 已发出而回执不明 | 原有恢复边界 | 继续交由原 Turn 恢复,不自动重发 |
表格是依据 35a54e9ed5117c5696da879fe769a09244239639 源码的行为说明;执行证据分别来自原生测试协议、真实 HTTP/store 及打包浏览器回归。没有验证的原生模型和安装端路径不由表格补成通过。
具体改动
规范依据为 docs/development/design.md,固定在 ce58c9141b4b805d4189f89959ade1be1d41ef40,使用改动前已经接受的规则。逐项映射:Explanations On Demand——快捷键说明收进 ContextHelp,投递错误与实际正文保留;Accessibility——语义名称、Escape、焦点返回与不开启发送的操作通过;Responsive Behavior——390px 下完整模型菜单与发送仍可操作;Populated Page Review——使用长模型、中英正文及失败/未知混合状态检查整页默认和展开画面。新增 Forms 段落记录获准的布局,不拿修改后的规范反向证明自身。
关键代码讲解
ComposerRuntimeControls(composer-controls.tsx:10)复用原选择器和菜单:普通对话调用原配置回调;original/managed 只呈现不可改写的执行器身份,status-only 不触发模型发现。模型仍按现有“新对话配置”生效,当前实际值以 Session 回读为准。ComposerActions(同文件:34)把图片与现有可选操作放在一个原生 details 中。监听实际 open 状态处理快速 Escape,外点关闭不会发送,选中动作后关闭入口。浏览器断言覆盖草稿、焦点、无 Session 写入和面板在整个输入框上方。PersonalWorkspacePage.sendMessage(personal-workspace-page.tsx:2330)继续拥有输入、图片、Enter/Shift+Enter、已有排队/纠偏路径。布局改动没有把错误收进帮助;独立投递回执保持可见。阅读页仍使用折叠入口。sendManagerQuestion(dashboard-page.tsx:2596)比较当前 preparation controller 的精确身份。该控制器在 Turn dispatch 前被移除,因此准备失败可把错误抛回已有 restoreFailedSubmission;移除后的不明投递不会被这条分支误报为未发送。原生 424 对照在主干丢失草稿,在此 head 保留草稿和旧模型,并明确断言没有新增 turn/start。
其余差异为删除 ChannelHeader 旧编辑属性、统一发送按钮样式与两种主题、调整既有例子的入口断言,以及双语设计说明和十张公开合成截图。六个变动脚本的语法与断言差异已检查;activity 旧失败后的下段断言只完成源码复核,不声称整段执行通过。没有删除工作列表、可选事项、未知状态或权限测试来制造通过;动作菜单关闭后的窄屏测试明确重新打开入口。
对主干的风险
最大风险是把已发送但未确认的消息误认成未提交,从而诱导重复执行。这里沿用原有阶段边界,精确身份判断只覆盖 Session 准备期间;已有 delivery_state/turn_replay_safe 分支保持原意。真实 HTTP/SQLite/store 与隔离原生 provider 证明拒绝前后没有多发 Turn,撤权后阻止新消息且历史仍可读,恢复授权后原路径可以继续。
整合主干原始会话读取修复后,113 个模型/推理深度/队列/steering 测试、12 个键盘/主题测试、bound-conversation 真实 HTTP/Core/SQLite 检查,以及打包的模型选择、消息输入和 LoopX 模式均通过。风险前置检查在此精确 head 上的四项直接检查和十六条选中命令通过;PNG 的十项人工检查保留为 manual review,不能表述为全部自动绿。按当前 Goal 配置未查询或等待 CI。
四个扩展失败仍然存在:离开再返回后的 steering 回执、旧托盘耗时定位、刷新失败恢复、部分列表计数。独立的 ce58c9141b4b805d4189f89959ade1be1d41ef40 与 35a54e9ed5117c5696da879fe769a09244239639 使用同一命令、夹具和环境,完整失败对象一致,包括实际值、预期正则及失败重数;只去掉 ANSI 样式,原始诊断保留。这些是未变更路径的失败,独立的本次正反例通过;它们没有被改成通过、删断言或放宽必需检查。CQR cqr_d50645d708efd0b33c30 保留 failed/risk 与精确范围归因。
没有新 public schema、CLI、权限、调度或能力激活。状态分类使用既有类型与 controller 身份,不读取文案猜测状态。默认布局变化已在设计规范、PR 描述和现有 smokes 中披露;关闭 LoopX、只读与原始来源路径保持原有授权。回滚可整体撤销此布局与本地准备阶段修复,不涉及数据迁移。
我的整体评价
这是 justified_increment:长程工作上的可证明收益是失败后保留待发送内容和恢复入口;没有声称提升 benchmark 分数或净效率。用户体验在本次发送任务上 improved,原始消息、失败和未知仍可读,没有增加确认轮次。视觉复核覆盖长模型名、中英混合长正文、失败与待检查结论、草稿和图片;发送配置集中在输入框内,展开菜单保留可见草稿与发送键,详细配置及快捷键按需打开。 已安装 App、原生输入法、Lark 跨端与原 Session 内模型切换尚未验收。
这版只重排既有控件,并复用现有准备阶段与投递边界;不增设配置、Session 或权限的第二个所有者。 当前 PR 的可交付边界是统一输入区、菜单与草稿保留,原会话模型重配和完整研究工作流继续由既有任务处理。 新增组件有直接生产调用,删除了头部重复属性,现有模型、Session 与投递所有者得到复用;不引入共享语义词表或兼容版本分支。对照、负例、整页图和人工图片检查支持这一个可逆边界的 APPROVE;整体研究任务及上述旧问题仍未结束。精确评审 head 为 35a54e9ed5117c5696da879fe769a09244239639,合并资格另行读取,不由本评论授予。
English verdict: APPROVE — 35a54e9. Existing send controls are unified without new authority; a confirmed pre-dispatch configuration failure now retains the draft and starts no Turn. Local packaged/native-protocol checks pass; four identical pre-existing expanded failures remain disclosed. Installed App/IME, Lark and same-Session reconfiguration remain unqualified; merge readiness is separate.
消息输入区原先把执行器和模型放在页面顶部,把附件、快捷操作、队列方式和发送分散在底部;窄屏下难以看清本次发送会使用什么配置。本改动将它们收进一个输入框:上方写消息,下方左侧为附件与快捷操作,右侧为执行器、模型、推理深度和发送。说明移入按需帮助,错误与投递回执仍直接显示。
同时修复一个可复现的数据保留问题:执行器拒绝创建 Session 或应用模型配置时,请求尚未进入 Turn,输入框也会丢失草稿。现在只在已确认未提交的准备阶段恢复草稿与图片;发送后结果不明的请求仍保留原有恢复边界。
复用 ChatModelMenu、WorkspaceSelect、原有配置、Session、队列和消息入口。权限和全局默认项仍在 Settings。当前配置所有者切换模型时仍新建 Session,菜单明确标示“新对话配置”;本 PR 不实现原 Session 内切换模型。只读原始会话、阅读页折叠输入区和托管管家的配置入口保持原边界。
验证与范围
视觉证据
捕获版本:菜单修复
2c79ded40;最终集成与回归版本35a54e9ed(同步主干原始会话读取修复)。示例包含长模型名、中英混合正文、失败结论、待检查结论、草稿和图片。阅读检查:首屏保留需要决定的事项和完整正文;执行器与发送集中在同一输入区,展开菜单不盖住草稿。完整模型值在菜单内可读。设计规范同时记录这一布局与草稿、焦点和投递边界。窄屏截图是浏览器视口,不能代替原生 App 的最小窗口尺寸或真实输入法检查。