Pull Request已成功合入, 合并人@openJiuwen-bot
(感谢 hugoxk 的贡献)变更摘要
本 PR 修复 Issue #98,清理中文界面残留的硬编码英文与内部技术术语,属于纯文案与错误格式化层面的国际化清理。核心改动集中在三方面:将 Skill 库选择器与库卡片中的内部流水线名称("M1 Skill 召回")和 git 术语("Head {hash}")替换为面向用户的表述;把 formatRunFailure 从输出 [rate-limited] 429 Too Many Requests 式内部 token 改为按 6 个 RunFailureCode 渲染本地化白话原因加恢复动作、原始报错保留在 · 之后;并将 IdeaTreeExplorer / IdeaTreeCanvas / IdeaTreeView 等组件中约 40 处硬编码英文字符串迁入 apps/web/src/i18n/messages.ts 的 en / zh-CN 目录。同时新增 ideaTreeStatusLabel 使裸状态枚举渲染为本地化词,并为 setError 的 useCallback 补上 t 依赖。
主要改动
- 内部术语清除:
settings.skillLibrariesPickerHint去掉 "M1 skill recall / M1 Skill 召回",settings.skillLibraryHead与skillLibrary.head由 "Head {hash}" 改为 "最新版本 {id}" / "Latest version {id}",settings.skillLibraryLimit由 "召回上限" 改为 "Skill 数量上限"。 - 运行失败白话化:
run-failure.ts新增FAILURE_MESSAGE_KEYS映射 6 个RunFailureCode到runFailure.*键,formatRunFailure改为输出本地化原因与恢复动作、再以·拼接原始报错,无分类时回退为原文。 - Idea Tree 文案迁入目录:
IdeaTreeExplorer、IdeaTreeCanvas、IdeaTreeView中的空态提示、13 个字段标签、Hypothesis/Insight/Result/Prune reason 标题、画布提示、加载/保存错误与统计行等改用ideaTree.*目录键,IdeaTreeCanvas的 Depth/Score 改为带参数的ideaTree.canvas.depth/depthScore。 - 状态枚举本地化: 新增
ideaTreeStatusLabel(IdeaResearchLabels.ts)映射pending/running/done/needs_retry/failed到ideaTree.status.*,替代此前直接渲染裸枚举或status.replace("_", " ")的做法。 - 零散硬编码与依赖修正:
App.tsx、RunTimeline、ScientificArtifacts、UsagePage、api/artifacts、ReviewerPanel的硬编码英文改为目录键,且App.tsx的setError依赖数组补入t,使切换语言后 Toast 标题不再回放旧语言。


✅ 自动合并完成(由 @wang_cheng_zhao 的 /merge 评论触发)。
PR !149 已以 rebase 方式合并到 main:3cb3570..73015b2(1 个提交)
GitCode 的审批规则尚未满足(审批人:hong-ye-zhou,wang_cheng_zhao,yi-zhang95),已按 CODEOWNERS 授权强制合入。


✅ 流水线 36ea961e21414051955efcc2da6539fb 执行成功。
可在 https://gitcode.com/openJiuwen/sciencediscovery/pull/149/check 查看完整构建日志。
在 PR 评论中发送 rerun 可重新触发 CI 流水线。
| 任务名称 | 子任务 | 状态 | 详情 |
|---|---|---|---|
| 代码检查 | SCA(开源合规) | PASSED | 点此跳转 |
| Anti-poison(防投毒) | PASSED | 点此跳转 | |
| CodeCheck(静态检查) | PASSED | 点此跳转 | |
| Blacklist(禁用词) | PASSED | 点此跳转 | |
| UT | host tier | PASSED | 公开日志 |
| guest tier (QEMU TCG sandbox) | PASSED | 公开日志 | |
| ST | - | PASSED | 公开日志 |
| Binary | x86_64 debug package | PASSED | binary · SHA256SUMS |
| aarch64 debug package | PASSED | binary · SHA256SUMS |


What type of PR is this?
/kind bug
What does this PR do / why do we need it:
修复 Issue #98:中文界面残留硬编码英文与内部技术术语(Unauthorized 提示、M1 Skill 召回、Git Head 等)。
问题分析(基于最新 upstream/main fcd9690 逐项核实):
Issue 报告的四类问题中,两类已在 main 上被 5be7934(streamline local access token onboarding)修复——401 Unauthorized Toast 已路由到「连接设置」弹窗(
setError对isAuthFailure提前返回)、令牌说明段落已重写为双语;cgroupDelegated/noNewPrivileges仅存在于 runner/health响应 JSON,API 只透传state/version,从不出现在 Web UI。本 PR 修复其余三类真实残留问题:1. 内部术语(M1 Skill 召回 / Git Head):
packages/skill/src/web.tsx(scoped 设置的 Skill 库选择器)与apps/web/src/SkillManager.tsx:874(库卡片)。settings.skillLibrariesPickerHint:删除 "M1 skill recall / M1 Skill 召回" 内部流水线名称 → "选择此范围可使用的 Skill 库"。settings.skillLibraryHead/skillLibrary.head:git "Head {hash}" 徽章 → "最新版本 {id}"(en+zh 双语)。settings.skillLibraryLimit"召回上限" → "Skill 数量上限"(en "Limit" → "Skill limit")。2. 运行错误白话化:
run-failure.ts原输出[rate-limited] 429 Too Many Requests式内部 token + 底层原文。RunFailureCode(rate-limited / semantic-error / server-error / timeout / transport-error / unauthorized)各渲染一条本地化白话原因 + 可行恢复动作(en+zh 新增runFailure.*键),原始报错保留在·分隔符之后供诊断;无分类的失败保持原文(旧记录兼容)。3. 硬编码英文("部分字符串未进入翻译目录而是硬编码在组件中"):
ideaTree.*键);needs_retry等裸状态枚举经共享ideaTreeStatusLabel(IdeaResearchLabels.ts,沿用既有 ideaResearch 状态模式)渲染为本地化词;node.searchStatus(active/pruned)同样经ideaTreeSearchStatusLabel+ideaTree.search.*键本地化,避免「搜索」标签旁出现裸英文 token。Run ${status}回退)、ScientificArtifacts(标注保存错误,以及预览兜底 ×3——"Loading JSON content…" 新增artifact.loadingJson;两处 "Binary artifact: use the version content endpoint to inspect it." 复用既有artifact.binaryNote文案,顺带消除内部 endpoint 术语)、UsagePage(Run 标签 / 独立调用)、api/artifacts(WebPage 内容 404/加载错误,走translateActive)、ReviewerPanel(来源核验 aria-label)——均改为目录键。setError:useCallback依赖补上t,修复运行时切换语言后 Toast 标题仍回放旧语言的问题(issue 截图中 "Request error" 出现在中文界面的成因之一)。回归测试(8 个新增用例):
I18n.test.tsx(术语清除断言 + 触及键 zh-CN 完整性 + 状态词本地化)、RunFailure.test.tsx(新格式 + 无分类回退 + zh-CN 全覆盖)、IdeaTreeCanvas.test.tsx(旧版浏览器面板跟随读者语言);SkillManager.test.tsx的/Head version/断言同步更新。Which issue(s) this PR fixes:
Fixes #98
Test Plan and Test result:What scenarios were tested, and what were the verification results(Function, performance, reliability, etc.):
验证提交:356c5e4(16 files, +387/-76,单 commit,基于最新 upstream/main fcd9690;review 意见的 searchStatus / ArtifactModal 兜底文案修复已 amend 进同一提交)
packages/skill/src/web.tsx无需代码改动)pnpm architecture:check:通过(275 个包源文件边界检查)pnpm ci:catalog:check:通过(UT host=9 / guest=1 目录完整)pnpm ci:ut层在 CodeArts(Linux runner)上将随 MR 正常执行 ut:host + st。e2e-auth.spec.ts/journey-local-token-onboarding.spec.ts断言的 Unauthorized 缺席行为不变;gateway-token-recovery.spec.ts属 legacy 隔离区不在 mocked 子集内)。Self-checklist:(请自检,在[ ]内打上x,我们将检视你的完成情况,否则会导致pr无法合入)