合并受阻
变更摘要
本 PR 为前端报错表面增加一键诊断与提 Bug 能力:新增纯前端诊断模块 apps/web/src/diagnostics.ts,提供 buildErrorDiagnostic 组装含产品名、平台、语言、时间戳、错误标题与正文的诊断快照,并通过 redactSecrets 对 Bearer、api_key、token、secret、password、authorization/set-cookie 等敏感信息做 [REDACTED] 脱敏;同时提供 buildIssueUrl 生成预填标题与正文的 GitCode 新建 Issue 链接。错误 Toast(Toasts.tsx)、内联警示(InlineErrorAlert.tsx)和面板 Error Boundary(ErrorBoundary.tsx)三处均接入「复制诊断信息」(复用 CopyButton)与「提交 Issue」(打开 ExternalIcon 外链)两个操作入口,并同步补齐 EN/ZH i18n key 与样式。
主要改动
- 新增诊断工具模块:
apps/web/src/diagnostics.ts导出buildErrorDiagnostic与buildIssueUrl,诊断正文包含产品、平台、语言、时间与错误详情,且对常见密钥模式做脱敏后拼接为 Markdown 文本。 - 三处报错表面接入操作入口:
ErrorBoundary.tsx、InlineErrorAlert.tsx、Toasts.tsx分别在错误区域渲染CopyButton复制诊断信息与.error-issue-link外链跳转 GitCode 新建 Issue,Toast 仅在tone === "error"时显示。 - i18n 文案补齐:
apps/web/src/i18n/messages.ts新增error.diagnostics.copy与error.diagnostics.submitIssue两个 key,中英文分别为「复制诊断信息 / 提交 Issue」。 - 新增诊断样式:
apps/web/src/styles/feedback.css增加.inline-error-actions、.toast-error-actions、.error-issue-link等布局与配色规则,适配内联警示与 Toast 两种错误表面。 - 新增单元测试:
apps/web/tests/diagnostics.test.tsx覆盖诊断字段生成、密钥脱敏与buildIssueUrl的标题/正文编码。


The pipeline(pipeline number:142) is running. Please wait a moment...


AI 自动检视,仅供参考,问题都需要人工评估分析.
变更摘要
相对 origin/main 1 个 commit、6 个文件:新增 diagnostics.ts,在错误 Toast、InlineErrorAlert、面板 ErrorBoundary 上加「复制诊断信息 / 提交 Issue」。快照只拼产品名、平台/UA、语言、时间、错误标题与正文,并附脱敏提醒;Issue 链接用 URLSearchParams 拼到 GitCode 新建页,无自动上报。EN/ZH 文案键已补。
做法是否合理
方向对:共享模块避免三处各写一份,CopyButton 的 getText 延迟求值也合适。敏感面控制得住——没有把 token / API key / prompt / tool payload 写进快照;buildIssueUrl 走 query 编码,不会把正文直接拼进 href 造成注入。Toast / Inline 两处已接 i18n。
问题
-
ErrorBoundary 文案未走 i18n。 Toast / InlineErrorAlert 用了
t("error.diagnostics.copy|submitIssue"),但ErrorBoundary仍写死英文"Copy diagnostics"/"Submit issue"(链接可见文字 + title)。类组件不能useLocale,但仓里已有translateActive(locale.ts注释就是给非 hook 场景用的)。中文界面下面板挂掉时这两颗按钮会露英文,和另外两处错误面不一致,建议改掉再合。 -
diagnostics.ts缺单测。buildErrorDiagnostic/buildIssueUrl是纯函数,适合锁住「字段集合不含密钥类信息」和 query 编码行为;现有Toasts.test.tsx/InlineErrorAlert.test.tsx也未断言新动作是否出现。PR 描述里的「786 通过」更像是存量全绿,不是本模块增量覆盖。建议补一组轻量node:test。
次要(不挡合入,提一下即可):InlineErrorAlert 建 Issue 标题用 title ?? "Settings"(写死英文),诊断正文却用 t("error.settingsTitle"),两处默认值不一致;GitCode 新建页是否真吃 title/body query 建议手动点一次确认(复制诊断路径不受影响)。
结论:条件合(先修 ErrorBoundary i18n;单测建议同 PR 带上)。


✅ 流水线 32427a2e5369412581dc12e0d16e8e68 执行成功。
可在 https://gitcode.com/openJiuwen/sciencediscovery/pull/142/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 |


The pipeline(pipeline number:142) is running. Please wait a moment...


AI 自动检视,仅供参考,问题都需要人工评估分析.
本轮相对上一轮 HEAD 8536e0a → e517d12(仍是相对 origin/main 的 1 个 commit,force-update),主要补上了上一轮条件合里点到的两处:
- ErrorBoundary i18n:
Copy diagnostics/Submit issue改为translateActive("error.diagnostics.copy|submitIssue"),和 Toast / Inline 对齐。 - 单测:新增
apps/web/tests/diagnostics.test.tsx,覆盖快照字段、buildIssueUrl的 query 编码,以及 detail 里 Bearer / api_key / password 等脱敏。 - 顺带修了 Inline 默认 Issue 标题
title ?? "Settings"与t("error.settingsTitle")不一致的问题;diagnostics.ts增加redactSecrets,在拼进 Detail 前做一层正则脱敏,比只靠文案提醒更稳妥。
上一轮两个 unresolved 都已落地,这轮没有新的阻塞点。Toast / Inline 组件测仍未断言新按钮是否出现,属于锦上添花,不挡合入。
结论:可合


✅ 流水线 3752e13e086f484db44a42cc753f8c0c 执行成功。
可在 https://gitcode.com/openJiuwen/sciencediscovery/pull/142/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 |


The pipeline(pipeline number:142) is running. Please wait a moment...


AI 自动检视,仅供参考,问题都需要人工评估分析
本轮相对上一轮(e517d127)主要是 rebase 到最新 main,以及补上了 Toast / InlineErrorAlert 对「复制诊断 / 提交 Issue」按钮的组件级断言。核心实现(ErrorBoundary、diagnostics 模块、redactSecrets、i18n/translateActive)与 Round-2 一致,三向 diff 相对 origin/main 仍是那 9 个 web 文件,没有无关改动混入。
上一轮已确认的修复(ErrorBoundary 走 i18n、diagnostics 单测、Inline 默认标题对齐、密钥脱敏)仍然在;原先非阻塞的 Toast/Inline 动作按钮缺测也补上了。整体方案仍合理,可合。


✅ 流水线 3ddb8b9905974582943cdc5bcf86df10 执行成功。
可在 https://gitcode.com/openJiuwen/sciencediscovery/pull/142/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 feature
What does this PR do / why do we need it:
为报错表面(错误 Toast、内联警示、面板 Error Boundary)增加「复制关键日志」和「提交 Issue」两个操作入口,让用户能一键收集诊断信息并向仓库提 Bug,无需手动翻数据目录日志。
apps/web/src/diagnostics.ts:新诊断工具模块,组装纯前端快照(产品名、平台、语言、时间戳、错误标题与正文)。不含 token / API Key / 用户提示词 / 工具载荷。Which issue(s) this PR fixes:
Fixes #101
Test Plan and Test result(测试场景、验证结果(功能、性能、可靠性等)):
验证提交:8536e0a(6 files, +99/-4)
tsc --noEmit通过,0 错误Self-checklist:(请自检,在[ ]内打上x,我们将检视你的完成情况,否则会导致pr无法合入)