需求背景与痛点 (Background & Problem)
在日常使用中,当用户翻阅聊天记录、选中并复制消息文本、点击界面空白处,或者刚切回窗口时,主输入框往往处于失焦(blur)状态。
此时若用户直接敲击键盘输入内容(例如开始打字提问或敲拼音),按键会被直接忽略或丢失,用户必须中断打字并用鼠标点击输入框才能重新激活输入,打断了打字与提问心流。
主流桌面 AI 客户端(如 Codex App、Claude Desktop)均具备全局键盘捕获能力,当处于聊天界面且没有其他控件抢占焦点时,敲击键盘即可自动聚焦到输入框并完成输入。
期望功能与行为 (Proposed Behavior)
- 自动捕获并聚焦:在主会话处于非只读状态且允许输入时,用户在窗口任意位置按下可打印字符、或启动输入法(IME Composition)时,焦点自动且平滑转移至主输入框(
ChatInputBox)。
- 首字符无缝保留:
- 英文及半角字符直接敲击时,触发聚焦的第一个字符需直接输入到输入框内,不丢字;
- 中文/多语言输入法启动时,输入法候选浮层应自然挂载在输入框当前光标位置。
- 已有草稿追加:若输入框中已有未发送的草稿内容,光标直接定位至草稿末尾,新输入字符在末尾自然追加。
- 空格键处理:在聊天视口无焦点时按下空格键(Space),作为普通字符输入处理(聚焦并输入空格),不触发浏览器默认的空格向下滚屏行为。
边界与防冲突规则 (Constraints & Edge Cases)
- 已有活动输入控件时豁免:若焦点当前在其他输入控件上(如顶部聊天搜索栏
ChatSearchBar、弹窗 input/textarea、设置项输入框等),绝不抢夺焦点。
- 系统/修饰组合键豁免:按键包含修饰键(
Cmd/Ctrl + C/V/A/F/K、Alt、单纯的 Shift/Cmd/Ctrl/Alt 单键)时,保持原生快捷键逻辑,不转移焦点。
- 导航与功能键豁免:
- 滚动键(
ArrowUp/ArrowDown、PageUp/PageDown、Home/End)继续保留用于聊天列表滚动;
- 功能键(
Esc 用于关闭浮层、Tab 用于切换焦点、F1~F12 等)不转入输入框。
- 会话状态限制:会话为只读状态、或当前存在阻断式交互弹窗(如工具权限确认)时禁用。
参考与实现建议 (Implementation Notes)
- 参考实现:Codex Desktop App / Claude Desktop。
- 实现切入点:可在
useChatPageEventBridge 或全局键盘监听层捕获 keydown / compositionstart 事件,并结合 ChatInputBox 暴露的 TipTap 实例(editor)执行平滑聚焦与末尾追加。
需求背景与痛点 (Background & Problem)
在日常使用中,当用户翻阅聊天记录、选中并复制消息文本、点击界面空白处,或者刚切回窗口时,主输入框往往处于失焦(blur)状态。
此时若用户直接敲击键盘输入内容(例如开始打字提问或敲拼音),按键会被直接忽略或丢失,用户必须中断打字并用鼠标点击输入框才能重新激活输入,打断了打字与提问心流。
主流桌面 AI 客户端(如 Codex App、Claude Desktop)均具备全局键盘捕获能力,当处于聊天界面且没有其他控件抢占焦点时,敲击键盘即可自动聚焦到输入框并完成输入。
期望功能与行为 (Proposed Behavior)
ChatInputBox)。边界与防冲突规则 (Constraints & Edge Cases)
ChatSearchBar、弹窗 input/textarea、设置项输入框等),绝不抢夺焦点。Cmd/Ctrl + C/V/A/F/K、Alt、单纯的Shift/Cmd/Ctrl/Alt单键)时,保持原生快捷键逻辑,不转移焦点。ArrowUp/ArrowDown、PageUp/PageDown、Home/End)继续保留用于聊天列表滚动;Esc用于关闭浮层、Tab用于切换焦点、F1~F12等)不转入输入框。参考与实现建议 (Implementation Notes)
useChatPageEventBridge或全局键盘监听层捕获keydown/compositionstart事件,并结合ChatInputBox暴露的 TipTap 实例(editor)执行平滑聚焦与末尾追加。