Skip to content

fix(desktop): 选完模型后把焦点送回输入框 - #3313

Merged
MagicLizi merged 2 commits into
mainfrom
dash/keep-new-task-input-focus
Aug 24, 2026
Merged

fix(desktop): 选完模型后把焦点送回输入框#3313
MagicLizi merged 2 commits into
mainfrom
dash/keep-new-task-input-focus

Conversation

@dashhuang

Copy link
Copy Markdown
Member

这次改了什么

摘要

新建任务页选完模型后,输入框会丢掉焦点,必须再点一次才能接着打字。现在选完模型、按 Esc 或点空白关掉选择器后,焦点会回到输入框;点模型 pill 也不会先把光标抢走。设置页的模型选择器行为不变。

变更类型

  • fix 缺陷修复
  • feat 新功能
  • refactor / perf 重构或性能优化
  • docs / test / chore 文档、测试或工程维护
  • 其他:

范围

  • 关联 Issue / 需求:无
  • 本 PR 包含:
    • composer 模型选择器关闭后把焦点送回输入框
    • 模型 pill 的 mousedown 不再抢输入框焦点
    • MorphPopover 增加可选 restoreFocusTarget
  • 明确不包含:
    • 选择器打开期间搜索框仍会暂时获得焦点(保留键盘筛选)
    • 设置页 / CreateWorker 等非 composer 入口
  • 用户可见变化:选完模型后可直接继续输入
  • 是否存在 breaking change:无

UI 变化

无新视觉元素。交互上,composer 工具条的模型选择器关闭后焦点回到输入框。

  • 引用的设计规范:DESIGN.md §14.2 Focus Management(弹层关闭后归还焦点);composer 工具条把归还目标从 trigger 改成输入框,避免选完模型后焦点掉到 body。§14.4 红线 d:形态变化不改变焦点 / Esc / 点外部关闭的可达性语义。其它控件已接走焦点时仍不抢。

怎么验证的

自动验证

pnpm --dir /Users/dash/Code/Cindy/cindy-keep-new-task-input-focus test:unit:related
结果:PASS apps/desktop unit(related 5 个文件)

pnpm --dir /Users/dash/Code/Cindy/cindy-keep-new-task-input-focus --filter desktop run typecheck
结果:通过

pnpm --dir /Users/dash/Code/Cindy/cindy-keep-new-task-input-focus --filter desktop exec vitest run \
  src/renderer/__tests__/morphPopover.test.tsx \
  src/renderer/__tests__/composerMorphScope.test.ts \
  src/renderer/__tests__/agentSelect.test.tsx \
  src/renderer/__tests__/permissionSelectorMorph.test.tsx \
  src/renderer/__tests__/modelSelectorTriggerVariant.test.ts
结果:147 tests passed

手工验证

未在本机启动 Desktop 实机点选。请在新建任务页:先点输入框,再打开模型选择器选一个模型,选完应能直接接着打字。Light / Dark 都只改焦点,没有新样式。

未执行的验证

  • Desktop 实机目检(选择器开合与选模型后的输入)
  • 全量 pnpm test:unit:预跑时 ghostInstallReceipt.test.ts 有 2 个失败,与本 diff 无关(cindy-brain 收据校验),交 CI 兜底

风险

风险分类

  • 无已知风险
  • SQLite / migration
  • system prompt
  • 协议兼容
  • 权限 / 安全 / 用户数据
  • 存量插件兼容(批准状态 / 指纹 / manifest 校验 / 安装布局 / 包格式)
  • 原生层 / fingerprint / OTA
  • 跨平台差异
  • 其他:

影响与回滚

  • 影响范围:Desktop composer 工具条的模型选择器关闭后的焦点
  • 回滚 / 降级方式:revert 本 PR

提交前检查

  • 已 review 完整 diff
  • 每个 commit 都带 DCO 签名(git commit -s,见 DCO
  • UI 改动已在「UI 变化」注明引用的设计规范章节(不涉及 UI 则跳过)
  • 未提交凭证、令牌或授权文件
  • 已补充必要文档
  • 已确认测试结果或说明未执行原因

新建任务页选完模型后,选择器卸掉会把焦点掉到 body,必须再点一次才能接着打字。composer 工具条现在在选择器关闭后把焦点送回输入框,并阻止 pill mousedown 抢焦。

Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
@dashhuang
dashhuang requested a review from a team as a code owner August 24, 2026 00:17

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9bc20cf894

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/desktop/src/renderer/components/ui/morph-popover.tsx Outdated
Comment thread apps/desktop/src/renderer/components/new-chat/ChatInput.tsx
@greptile-apps

greptile-apps Bot commented Aug 24, 2026

Copy link
Copy Markdown

Greptile Summary

此 PR 调整 Desktop composer 模型选择器的焦点管理,使指针关闭选择器后立即回到仍有效的输入编辑器,同时保留 Esc 回到 trigger 和外部控件主动接管焦点的行为。

  • MorphPopover 增加可选的指针关闭回焦目标及焦点接管判断
  • 将 composer 编辑器 DOM 作为模型选择器的回焦目标,并避开已销毁的编辑器
  • 防止模型 pill 的鼠标按下动作抢走输入焦点
  • 增加模型选择、关闭动画、Esc 和焦点交接场景的单元测试

Confidence Score: 5/5

当前变更看起来可以安全合并。

未发现仍然存在的阻塞性失败。

Important Files Changed

Filename Overview
apps/desktop/src/renderer/components/ui/morph-popover.tsx 新增可选回焦目标,并区分指针关闭、键盘关闭及外部控件已接管焦点的场景。
apps/desktop/src/renderer/components/new-chat/ChatInput.tsx 将仍有效的 composer 编辑器 DOM 暴露为模型选择器关闭后的回焦目标。
apps/desktop/src/renderer/components/new-chat/ModelSelector.tsx 传递回焦目标,并阻止 morph trigger 的 mousedown 抢走输入焦点。
apps/desktop/src/renderer/tests/morphPopover.test.tsx 覆盖指针选择、收合动画、Esc 关闭和焦点交接等新增契约。
apps/desktop/src/renderer/tests/composerMorphScope.test.ts 验证新回焦行为仅接入 composer 模型选择器,不改变设置页等入口。

Reviews (2): Last reviewed commit: "fix(desktop): 选完模型立刻回焦,Esc 仍回 pill" | Re-trigger Greptile

指针关闭(选模型 / 点空白)在 inert 后马上把焦点送回输入框,避免收合动画那 240ms 里打的字被丢掉。Esc 等键盘关闭仍归还 trigger,遵守 DESIGN.md §14.2。

Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>

@MagicLizi MagicLizi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

按维护者指示批准;合并仍需通过 review-pr 的代码审查与其余安全门。

@MagicLizi MagicLizi added the touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) label Aug 24, 2026
@MagicLizi

Copy link
Copy Markdown
Contributor

命中 UI 路径(ChatInput / ModelSelector / morph-popover)但 description 未附界面效果证据——建议补充改动后效果:截图/录屏,或改动后界面的 HTML 页面,便于确认界面符合 DESIGN.md 设计规范。本条不阻断合并。

@MagicLizi
MagicLizi merged commit 93721f7 into main Aug 24, 2026
19 checks passed
@MagicLizi
MagicLizi deleted the dash/keep-new-task-input-focus branch August 24, 2026 12:24
@MagicLizi

Copy link
Copy Markdown
Contributor

选完模型后焦点回到输入框,少点一次鼠标,对话能接着打。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants