已开启
[Feature]: 报错时支持复制关键日志并提交 Issue #101
wang_cheng_zhao创建于  12 天前
wang_cheng_zhao成员
12 天前 创建

关联 Issue:https://github.com/openJiuwen-ai/sciencediscovery/issues/58

🚀 背景描述

ScienceDiscovery 在连接失败、请求 401/5xx、设置保存失败、面板渲染崩溃、Run/工具执行失败等路径上,已经会把错误展示给用户(右上角 Toast、设置区警示条、面板 Error Boundary、Run 摘要里的错误文本)。这些界面目前只有「关闭 / 重试」,没有「复制这段报错对应的关键日志」或「据此提交 Issue」的入口。

用户想反馈问题时,实际路径通常是:

  1. 在界面上只能看到一句短错误(例如 Request error: Unauthorized、面板 render failed);
  2. 关键证据在数据目录的滚动日志里(默认 .sciencediscovery-data/logs/ 下的 api.log / runner.log / run.log),用户往往不知道去哪找、该截哪一段;
  3. 离开产品,自己去 GitCode 或 GitHub 填模板;还要手工脱敏 token、API Key、会话内容。

结果是:真实故障很难变成可处理的 Issue,维护者拿到的是「报了个错」而没有版本、错误码、Run/请求标识和相邻日志。

本需求要补的是面向用户的问题反馈机制,不是再给开发者加一份后台日志。与已有的框架诊断日志需求(GitCode #74,GitHub 镜像 #8)互补:#74 明确不提供日志查看 / 搜索 / 下载 UI,本 Issue 补的是报错现场的「复制关键日志 + 提交 Issue」。

设计思路

建议在各类用户可见报错上提供两个动作(文案可再斟酌):

  1. 复制关键日志:把一份已经脱敏、有体积上限的诊断包写入剪贴板。至少包括:
    • 产品版本 / 构建标识;
    • 操作系统与界面语言;
    • 当前错误标题与正文;
    • 已有的请求 / Run / Session 标识(没有则省略);
    • 与这次失败相关的最近若干行服务日志(优先复用 #74 那套脱敏与长度上限,而不是整文件拷贝)。
  2. 提交 Issue:用这份诊断包预填标题与正文,打开仓库的新建 Issue 页。GitCode(openJiuwen/sciencediscovery)是主跟踪入口;GitHub(openJiuwen-ai/sciencediscovery)是公开镜像,可同时给出链接或按界面语言提供选项。用户仍须自己点创建,产品不代替用户发 Issue,也不把日志自动上传到第三方。

优先覆盖的报错表面(实现时可按同一组件逐步铺开,不必一次改完所有页面):

  • 右上角错误 Toast(apps/web/src/Toasts.tsx,目前仅关闭);
  • 设置区 / 对话框内联警示(apps/web/src/InlineErrorAlert.tsx,目前仅关闭);
  • 面板 Error Boundary(apps/web/src/ErrorBoundary.tsx,目前只显示 label + message);
  • Run / 工具失败的用户可见错误文本;
  • CLI 对用户可见的失败输出(若该次失败没有等价的 Web 表面)。

不考虑或仅作备选的方案:

  • 只复制、不给提交入口:用户仍要自己找仓库和模板,反馈成本降得不够。
  • 应用内反馈表单发到自建后端:需要额外部署与鉴权,超出「复制日志并提 Issue」。
  • 把完整日志文件或未脱敏的会话 / 工具载荷打进剪贴板:有泄露 token、API Key 和用户研究内容的风险。
  • 静默崩溃上报 / 遥测:本需求不包含。

未拍板(实现前需确认):

  • 「提交 Issue」默认打开 GitCode 还是按界面语言在 GitCode / GitHub 之间选择;
  • 诊断包是纯前端从已展示错误 + 版本信息拼装,还是增加一个返回脱敏快照的本机 API(不得把未脱敏日志文件直接暴露到 HTTP)。

涉及到的对外API

  • 用户可观察行为:报错控件上新增复制 / 提交动作;不要求改变现有错误文案的含义。
  • HTTP:若纯前端拿不到相邻日志,可增加本机、需登录的只读诊断快照接口,返回上述脱敏字段。不把 .sciencediscovery-data/logs/ 整文件对外暴露,不新增公开匿名日志下载。
  • Issue 托管:只打开 GitCode / GitHub 的公开「新建 Issue」页面并预填内容,不调用其写入 API,也不在产品里内嵌完整 Issue 编辑器。

与其他模块的相关性描述

  • Web 错误展示:Toast、内联警示、Error Boundary、Run 摘要;
  • packages/operational-logging 与 GitCode #74:复用已有脱敏、滚动与长度上限,不另起一套日志格式;
  • CLI:与 Web 同一类失败应对用户给出可复制的诊断文本;
  • 不替代 #74 的框架内部事件补齐,也不把用户会话、模型输入输出、工具参数/结果写入诊断包。

测试设计与测试计划

功能

安全

工程 / 用户旅程

其他信息

当前相关代码(仓库相对路径,便于实现时定位,不是本需求的验收范围):

  • apps/web/src/Toasts.tsx
  • apps/web/src/InlineErrorAlert.tsx
  • apps/web/src/ErrorBoundary.tsx
  • apps/web/src/App.tsx(请求错误走右上角 Toast)
  • 数据目录日志:.sciencediscovery-data/logs/(api.log / runner.log / run.log)
likedislike
Wwang_cheng_zhao成员
12 天前 添加了label:feature
openJiuwen-bot成员
12 天前 评论:

欢迎来到 openJiuwen 社区

Hey @wang_cheng_zhao , 感谢你对社区的贡献.

机器人使用手册

有关指令的使用,可以点击 此处 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。

likedislike
Wwang_cheng_zhao成员
12 天前 修改了issue 的描述
Hhugoxk
10 天前 关联了pull request:feat(web): copy error diagnostics and submit issue from error surfaces