Skip to content

fix(personal-agent): render GFM Markdown safely - #92

Merged
AnnaSuSu merged 1 commit into
AnnaSuSu:mainfrom
KimQ1:fix/personal-agent-markdown-gfm-20261018t123610
Oct 19, 2026
Merged

AnnaSuSu merged 1 commit into
AnnaSuSu:mainfrom
KimQ1:fix/personal-agent-markdown-gfm-20261018t123610

Conversation

@KimQ1

@KimQ1 KimQ1 commented Oct 18, 2026

Copy link
Copy Markdown
Contributor

问题与修复

“继续聊”已使用 react-markdown,但未启用 GFM,模型返回的管道表格无法按表格渲染。

  • 添加 remark-gfm,使历史消息和新回复支持表格、任务列表和删除线。
  • 为表格增加可聚焦的水平滚动容器、表头和单元格边框;窄屏下保持页面宽度,表格在局部滚动。
  • 隔离不同消息的脚注标识、回链和无障碍描述,避免多条消息的脚注跳转串线。
  • 新增 5 项真实 PersonalAgent 组件回归,覆盖历史表格、普通 Markdown、多消息脚注、安全链接/原始 HTML 和新回复。
  • 依赖锁仅增加 remark-gfm 及其 17 个传递条目,未修改或升级既有包条目。

范围与安全

本 PR 独立基于上游 main,不依赖推理强度设置 PR。不包含 Docker 配置、本地部署文件、Windows 安装包或其他业务改动。

保留 react-markdown 默认安全处理,不启用原始 HTML,不放行 javascript: 或 data: 链接。

实际验证

  • bun test --no-env-file --cwd frontend ./tests/personal-agent-markdown.test.tsx:5 项通过。
  • bun --no-env-file run check --publish never:最终退出码 0;后端 540 项、前端 Node 22 项及 Bun 27 项测试通过;类型、架构边界、ESLint、API/Web/Electron 构建和 Windows 未安装目录打包通过。
  • 浏览器使用本分支真实组件与合成 API:历史消息和 Enter 发送后的新回复均渲染 7 行、3 列表格,任务列表/删除线正确,输入框发送后清空。
  • 390px 窄屏:页面宽度 390px,表格容器 242px、内容 384px,可局部横向滚动(实测 scrollLeft=80),页面无横向溢出。
  • 浏览器验证两条各含重复脚注引用的新回复:标识无重复,脚注、回链及 aria-describedby 均指向各自消息。
  • git diff --check 通过。

验证未调用真实模型或访问真实用户资料;既有非阻塞 ESLint 警告和 Vite 分块体积警告不在本 PR 范围。

界面截图

截图使用合成对话数据。

继续聊的 Markdown 表格

@AnnaSuSu
AnnaSuSu merged commit f66eb0e into AnnaSuSu:main Oct 19, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants