输入区组合态与发送锁
状态:已实现 类型:局部产品交互差异 主要 Owner:web/src/utils/sendLock.js
需求与失败场景
输入法组合过程中按回车会误触发送;用户在整理长输入或附件时需要显式锁定发送,避免键盘操作意外提交。发送锁的展示位置需要与当前输入状态保持一致。
必须保留的业务语义
- 输入法组合态回车不触发发送。
- 手动发送锁开启时,键盘和按钮提交都不能绕过锁定条件。
- 解锁后恢复原有发送能力,不改变后端请求协议。
- 交互状态在当前输入组件内拥有,不成为持久业务状态。
与 Yuxi 的边界
Yuxi 继续拥有消息发送、排队与 Run 创建。元垒只改变前端触发条件和控件布局,不改变 API、消息内容或后端授权。
稳定集成点
| 集成角色 | 当前 Owner | Yuanlei 语义 |
|---|---|---|
| 锁定状态转换 | web/src/utils/sendLock.js | 统一判断能否提交 |
| 键盘与组合态 | AgentInputArea.vue、MessageInputComponent.vue | composition event 优先于 Enter 发送 |
| 页面装配 | Agent chat 输入区域 | 展示锁定状态并接续发送入口 |
上游依赖
该交互依赖输入组件的 composition event、发送按钮和统一 submit 入口。上游重写输入组件时应通过真实事件测试重建行为,不保留旧组件结构。
合并判断
- 上游提供等价组合态保护:采用上游逻辑并删除重复判断。
- 上游增加自己的发送锁:比较按钮、快捷键和程序化提交是否共享同一判定后合并状态。
- 上游只调整布局:迁移控件位置,保留行为测试。
替换或删除条件
上游完整覆盖组合态保护和发送锁后可以删除元垒实现。产品取消手动锁定需求时可以删除发送锁,但组合态保护作为独立输入正确性要求继续评价。
决策与证据
- 输入法组合期发送锁
web/src/utils/sendLock.js与两个输入组件的接入是当前可定位证据;独立输入法事件序列测试仍缺失,保持 Decision 中的Not run。