Repository navigation
feat(chat): 支持展开思考后的手动翻译 - #7451
Liuliuuu0710 wants to merge 5 commits into
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
[Medium impact] The PR adds an opt-in path for thinking text to reach an auxiliary model service. 可以合并,但建议修复语言往返切换后翻译按钮无法重试的问题。 Findings
Fix with agent prompt### Issue 1
apps/desktop/src/renderer/components/chat/useThinkingTranslation.tsx:53-57
两端的 `useThinkingTranslation` 都会留下失效请求的加载状态。例如,在中文界面发起翻译,切到英文,等请求返回后再切回中文:返回结果因 `binding` 不同而被丢弃,但 `state` 仍保留中文对应的 `loading: true`。切回中文后,旧状态重新生效,按钮无法再次点击。
建议在请求失效时清除加载状态,或为每次绑定变化增加不会复用的代次,并补上这个往返切换用例。手机端的同名实现也需要一起修复。
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.
|
|
已下载查看本 PR 的桌面浅色/深色窄窗截图,并独立核对两端 useThinkingTranslation 的状态路径,当前先不批准:
新增内置翻译的产品范围另行确认;以上是实现与验收缺口,不代表已认可产品方向。 |
|
已核实状态问题,修复已推送:b5630d61f1。 Desktop / Mobile 现在为每次绑定变化使用独立身份,语言 A → B → A 不会复用原来的 loading,旧响应也不能覆盖切回后新发起的请求;仍然只在手动点击时翻译。两端各补了「旧响应在切回前完成」「切回并重新请求后旧响应才完成」两个回归,用例在旧实现上均失败,修复后通过。 本轮 Desktop 37 项、Mobile 65 项定向测试及两端类型检查通过。另补了新增 Hook 的设计入口台账:初次 CI 的 runner / Git integration 直接失败都指向 GENERATED 未同步,重新生成后的 52 项台账自测通过;新一轮 Desktop Git integration 与 DCO 已通过,其余 CI 仍在运行。PR 正文已补上这些记录。 第 2 点的 Mobile 原生 Light / Dark 截图和真实辅助模型端到端验收仍未补齐,目前不申请将这部分视为完成。原文切换、失败重试及旧主机提示已有定向单测,但不能代替所要求的原生实机与真实服务验收;桌面窄窗截图也不会作为手机证据。内置翻译的首版产品范围仍待维护方确认。 |
维护者确认请求(自动流程)PR #7451(head
改动概述:展开已结束的思考块后可手动点击「翻译」在原文/译文间切换,译文标注「机器翻译」,点击前展示原文发送至辅助模型服务、产生额外用量的说明;新增同账号 另注:维护者 zqchris 此前评论的两项要求(往返切换加载状态回归、Mobile 原生截图与真实验收)中,作者称状态回归已在 请维护者直接在本 PR 上 Approve 表示确认通过;如需修改请 Request Changes,作者改完后维护者再 Approve。 讨论 issue:#7473 |
Signed-off-by: ylliuuu66 <y11iu66666@gmail.com>
Signed-off-by: ylliuuu66 <y11iu66666@gmail.com>
|
@zqchris 想先请你明确 #7334 → 本 PR 的首版产品取舍,关联维护者确认单 #7473。 原需求包含实验性全局开关及双语并排;本 PR 拟先收窄为:
请确认是否接受这个收窄范围作为首版。 若不接受,烦请指出必须纳入的具体交互,或是否应先暂停宿主内置翻译;我会据此调整后续实现和验收。 实现状态已更新:语言 A→B→A 持续加载问题已修复并补两端回归,对应代码线程已解决;当前 head Mobile 原生 Light/Dark 截图、真实辅助模型翻译/原文切换/失败重试/旧主机提示的适用端到端验收仍待补齐;#7473 提到的验证脚本安全告警也需按当前代码和规则单独复核。本次只请求明确产品方向,不请求豁免上述事项或直接合并;最终仍按维护者确认门完成审阅与批准。PR 正文已把「经确认」更正为「拟提交维护者确认」,避免将作者取舍或机器人建议写成维护者批准。 |
Signed-off-by: ylliuuu66 <y11iu66666@gmail.com>
… trips Signed-off-by: ylliuuu66 <y11iu66666@gmail.com>
b7f5e47 to
43aecd8
Compare
同步 main 727afb1,解除与主干的冲突。 - 唯一冲突位于 `docs/design-rules/design-inventory.md` 的 GENERATED 区;用仓库生成器 `pnpm design:inventory` 重建 59 个 surface,`--check` 通过。 - 人工决策区(owner / 迁移状态 / protected / 目标道路 / 下一动作)逐字取自 main,包含 2026-10-29 伙伴输入框双按钮裁决;两端语言绑定 Hook 与翻译服务实现未改动,main 新增行为保留。 - 相对 main 本文件仅剩本 PR 的 6 行组件清单差异,未新增规则或修改 CI。 验证: - Desktop 6 文件 91 项、Mobile 4 文件 79 项、device-link allowlist 55 项、maker-shared thinking/contract 13 项:238 项通过。 - Desktop typecheck 通过(309s),Mobile typecheck 通过(42s)。 - design-inventory 自测 52 项、dev-docs 10 项、设计台账 --check、test-hygiene、i18n/glossary、相对 main 空白检查与 DCO 均通过。 - 本 worktree 旧依赖缺损(picomatch/vite 文件缺失)已按 frozen lockfile 独立重装后运行上述检查;未改锁文件与仓库规则。 本轮仅主干同步与冲突处理,未重做界面截图或真实翻译服务验收;产品方向确认、Mobile 原生 Light/Dark 截图与真实辅助模型端到端验收仍待完成。未合并。 Signed-off-by: ylliuuu66 <y11iu66666@gmail.com>
…translation # Conflicts: # docs/design-rules/design-inventory.md
这次改了什么
摘要
用户展开已结束的思考块后可手动点击「翻译」,在原文和译文之间切换;译文标注「机器翻译」。点击前显示原文发送至设置中辅助模型服务、产生额外用量的说明。Refs #7334。
这是拟提交维护者确认的首版范围:不增加全局自动翻译开关,不在展开或流式生成时自动请求。Desktop 与 Mobile 的独立思考块、工作过程内入口一起适配;译文只保留在组件临时状态,不改写原文、历史或引擎上下文。
变更类型
feat新功能fix缺陷修复refactor/perf重构或性能优化docs/test/chore文档、测试或工程维护UI 变化
docs/design-rules/DESIGN.md§3、§4、§5、§10、§11;沿用思考正文排版、标准 pill 按钮、语义颜色与 Light/Dark 主题。Mobile 文字遵循apps/mobile/docs/mobile-design-guide.md§3,沿用卡片按钮并预留 44pt 点击空间。怎么验证的
评审后修复(
b5630d61f1)node apps/desktop/scripts/fixtures/thinking-translation/verify.cjs <output>:THINKING_VISUAL_PASSED;Light / Dark 各 2 次手动请求,360px 窄窗无横向溢出,errors=[]。使用合成原文和固定模型回包,已回读译文与窄窗截图。pnpm ui:check --changed --theme all为 888 / 904 通过,整体未通过:4 个视频菜单场景超时,12 个 nightly-learning 场景缺少 Router 上下文;该工具将翻译组件列为 UNCOVERED,因此另跑上面的专用验证。针对两个视频菜单用例及 nightly-learning/default 执行--compare origin/main,基线与当前分支均复现相同超时 / Router 错误。本 PR 不修改这些独立场景,也不把失败记为通过。GitHub CI(
b5630d61f1)本提交的 client-ci 已全部通过:Linux / Windows 各 4 个单测分片、两端汇总、runner / database checks、Desktop Git integration 与 verify-checks。DCO 和 PR 设计依据检查也已通过。此结果不替代下方仍待补齐的 Mobile 原生与真实服务验收,也不代表产品范围获批。
自动验证
首个提交基于
origin/main(4dcc5fa699)验证,共 234 项定向测试通过:实际执行:
手工验证
在 macOS 独立 Electron 测试窗口中加载当前分支真实组件、正式主题和字体。回读 Light/Dark 原文、译文、窄窗截图;无新增遮挡、截断、横向溢出或页面异常。切换译文不重复调用,展开不自动翻译。验收脚本随 PR 提交,可复跑:
完整应用隔离启动返回
DESKTOP_DEV_VERDICT=ready,停留在登录页;没有代用户接受协议或改动账号。未执行的验证
真实翻译服务、设备互联双机、Windows、Mobile 原生 Light/Dark 实机与完整 CI 未在本地验证。Mobile 本轮为同一 PR worktree 的类型检查和定向单测,没有启动 Metro,因此没有原生 build label 或手机实机验证结论。桌面窄窗截图不作为手机原生截图。
风险
风险分类
影响与回滚
maker:translate-thinking,复用辅助模型配置与账号代次保护。严格限制输入长度、并发与请求预算;不开放给共享访客、供应商分享或插件。提交前检查
git commit -s)原工作区中其他功能的未提交改动已保留,本 PR 不包含它们。
2026-10-27:主干冲突与语言往返评审闭环
main@7be4c57d7bdbed3e115685a5fb1aba61772497c7,本轮合并提交68f05f032d19c307d7b008ae327ea9d4bea87198已签名并推送;GitHub 回读mergeable=true,工作区干净。2026-10-28:再次同步主干
2cb955395960b076ca60d0bc4e3e60474c230bbc,签名merge8d1863f3df176ed731233696ef222c3867690128已推送;GitHub回读mergeable=true。c980493cc79acc26d560b1ea5b39836b13d43dae6ea0c3a2fba392c453176d43)。两端语言绑定Hook与翻译服务实现和此前修复逐字一致,主干新增行为保留。2026-10-28:最新主干冲突处理(第二次)
2ef024d78443011b2fbf7e4b601d3c703a5b3ceb,签名合并提交b7f5e474793a74b4d39ddb002fe4d2b1d123f041已普通推送;GitHub回读mergeable=true。6bac067cede0c021da5483f6e4a37c481ff422fe与提交树一致。