feat(chat): arrow-key send history in MessageInput#7
feat(chat): arrow-key send history in MessageInput#7Jasion-han wants to merge 6 commits intoxintaofei:mainfrom
Conversation
9df2127 to
3edcb79
Compare
|
佬可以先从一个小点试试啊,感谢佬提的pr |
3edcb79 to
c1f52b2
Compare
|
PR Review: Send History Navigation 这个 PR 为消息输入框添加了类似终端的发送历史导航功能(Up/Down 箭头键回溯已发送消息)。整体实现思路清晰,但有几个问题需要关注: 需要修复的问题
message-input.tsx:1116-1122 — 原代码对 Process / keyCode 229(IME 合成状态)一律 early return。新代码在 IME 状态下放行了箭头键。但某些输入法(如日文、中文候选框)使用上下箭头在候选列表中导航,拦截这些键会导致输入法功能异常。 typescript // 当前代码:IME 状态下放行箭头键 — 可能破坏 IME 候选导航
message-input.tsx:1181-1201 — 当 sendHistoryIndex !== null 且 value === current 时,Up/Down 直接切换历史条目。如果回溯到一条多行消息,用户无法用 Up 键在文本内移动光标,而是会跳到上一条历史记录。应该检查光标是否在第一行/最后一行,只有到达边界时才触发历史导航。
用户正在输入文本 → 按 Up 进入历史 → 按 Down 返回 → 文本变为空字符串。用户的草稿丢了。应该在首次进入历史导航时保存当前草稿,Down 到底部时恢复。 typescript // line 1192-1194: 到达末尾时应恢复草稿而非设为空 message-input.tsx:1183 — 如果用户回溯到一条历史消息后编辑了内容,value === current 为 false,后续 Up/Down 不再生效。用户被困在一个既不能导航历史、又不认为是新输入的状态。 代码风格问题
总结 核心功能逻辑是对的,localStorage 持久化、会话历史 seed、去重都处理得不错。但问题 1(IME) 在 CJK 用户群中会造成实际的输入问题,问题 2-3 会影响多行消息场景的用户体验。建议修复 1-3 后再合并。 |
Support navigating previously sent user messages with ArrowUp/ArrowDown in the message input, Codex-style (edit breaks navigation). History is scoped by draft key and seeded from existing conversation turns.