Feat/AGC对话渲染markdown #281

Merged
kdletters merged 31 commits from feat/agc-markdown-render into master 2026-09-08 22:03:37 +08:00
Member

before:
image.png

after:
shotmd-1788500615.jpg
shotmd-1788500598.jpg

考虑到在AGC场景下不是很有理由, 暂不实现链接, 图片, 内嵌html

before: ![image.png](/attachments/ca6f46f7-dcbd-4132-bad2-cf5c83c49096) after: ![shotmd-1788500615.jpg](/attachments/719539a1-9dfb-412a-a9b9-298547b1791c) ![shotmd-1788500598.jpg](/attachments/4656815f-caca-4325-bca3-b29fe5742b6e) 考虑到在AGC场景下不是很有理由, 暂不实现链接, 图片, 内嵌html
k88936 self-assigned this 2026-09-04 13:55:21 +08:00
k88936 added this to the 陶泥儿gameAgent project 2026-09-04 13:55:21 +08:00
k88936 added 15 commits 2026-09-04 13:55:21 +08:00
记录三套项目聊天视图共享消息结构

明确 accumulatedText 流式正文与安全渲染边界

约定 Tailwind 内联样式和后续外链 TODO
为 assistant 消息提供 GFM 与流式 Markdown 渲染

限制 HTML、链接和图片为纯文本展示

使用 Tailwind 内联样式并提供单条消息降级
统一三个项目聊天视图的 assistant 消息展示

让 Direct Codex 流式回复复用 Markdown 组件

移除纯聊天视图的无条件滚动到底部行为
覆盖 GFM、代码块和表格展示

覆盖用户纯文本与流式中间态

覆盖 HTML、链接和图片安全边界
让链接和图片渲染为直接文本节点

避免既有消息文本查询被 Markdown 节点拆分

补充后续安全外链 TODO
为 Direct Codex 流式正文恢复可访问标签

将 HTML 标签转义为可见纯文本

保留 Markdown 内容安全渲染边界
调整消息断言以适配 Markdown 段落和列表结构
补充预览快捷键消息气泡查找工具
完善流式 Markdown 样式并同步组件测试
从 react-markdown code 组件属性中剔除 node 元数据。

新增回归测试,确保渲染后的代码节点不输出 node 属性。
将包含换行的无语言围栏内容识别为代码块。

新增回归测试,确保其使用块级代码样式而非内联样式。
为 Markdown 无序列表按嵌套层级增加内边距
补充多层无序列表渲染回归测试
区分有序与无序列表标记,避免有序项显示短横线
让列表项段落与文本保持同行
补充有序列表嵌套渲染回归测试
避免消息保留空白规则把列表项内容推到下一行
补充有序列表同行显示断言
使用 Tailwind 重要性修饰覆盖全局标题样式
恢复 H1 到 H3 的清晰字号层级
验证 H4 到 H6 的字号与字重样式
修复流式 Markdown 错误边界恢复
Project CI / Repository checks (pull_request) Failing after 12s
Project CI / Backend tests (pull_request) Failing after 11s
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
fd474724cb
累计文本变化时清除错误边界状态并重新尝试 Markdown 渲染。

新增首次渲染失败后随文本更新恢复的回归测试。
k88936 added 1 commit 2026-09-04 13:55:34 +08:00
Merge branch 'master' into feat/agc-markdown-render
Project CI / Repository checks (pull_request) Successful in 6m57s
Project CI / Frontend tests (pull_request) Successful in 7m9s
Project CI / Backend tests (pull_request) Successful in 14m52s
Project CI / Native shell tests (pull_request) Successful in 41m31s
60a87a4303
Author
Member

close #280

close #280
k88936 changed title from Feat/agc markdown render to Feat/AGC对话渲染markdown 2026-09-04 14:04:34 +08:00
kdletters requested changes 2026-09-04 14:14:58 +08:00
Dismissed
kdletters left a comment
Member

本次审查 head sha: 60a87a43037e4805ba6411a0c5449cc827fc50ba

发现 1 个明确问题,已提交 request changes。

本次审查 head sha: `60a87a43037e4805ba6411a0c5449cc827fc50ba` 发现 1 个明确问题,已提交 request changes。
Member

这里移除了原有的 useLayoutEffect 自动滚动逻辑,但 standalone supervisorChatOnly 路径仍然把 transientReply 持续追加到同一个消息列表(App.tsx 通过 messagesRef={supervisorChatMessagesRef} 传入)。因此在流式回复期间,列表不会再跟随新内容滚动到底部,用户会停留在旧位置,看不到最新 token,直到手动滚动。请保留/迁移自动滚动(同时继续尊重用户手动向上滚动的行为)。风险:该 PR 引入 Markdown 后消息高度变化更频繁,这条路径的流式回复可用性回归。

这里移除了原有的 `useLayoutEffect` 自动滚动逻辑,但 standalone `supervisorChatOnly` 路径仍然把 `transientReply` 持续追加到同一个消息列表(`App.tsx` 通过 `messagesRef={supervisorChatMessagesRef}` 传入)。因此在流式回复期间,列表不会再跟随新内容滚动到底部,用户会停留在旧位置,看不到最新 token,直到手动滚动。请保留/迁移自动滚动(同时继续尊重用户手动向上滚动的行为)。风险:该 PR 引入 Markdown 后消息高度变化更频繁,这条路径的流式回复可用性回归。
k88936 marked this conversation as resolved
k88936 added 6 commits 2026-09-04 16:30:16 +08:00
恢复 standalone supervisor 聊天的流式消息自动跟随
保留用户上移后的滚动位置
统一使用底部阈值判断是否继续跟随
新增统一的项目总控对话文本解析助手

迁移三个工作区视图复用该助手
在错误边界捕获时记录脱敏错误类型

保留消息正文回退且不输出敏感内容
将 Trace 标题匹配限定在段落元素内

兼容 Markdown 多行段落并避免重复文本命中
统一 Agent 对话与私有记忆消息的气泡查找

移除重复的空值断言并保留明确错误信息
修正 Markdown 代码块 HTML 转义
Project CI / Repository checks (pull_request) Failing after 2m46s
Project CI / Frontend tests (pull_request) Failing after 2m53s
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Failing after 5m30s
dee5753543
移除整段 Markdown 的 HTML 预转义并继续使用 skipHtml

补充行内与围栏代码 HTML 字面量回归测试

同步项目开发工作台安全 Markdown 渲染约定
k88936 added 1 commit 2026-09-04 16:38:40 +08:00
Merge branch 'master' into feat/agc-markdown-render
Project CI / Backend tests (pull_request) Successful in 6m48s
Project CI / Repository checks (pull_request) Failing after 3m0s
Project CI / Frontend tests (pull_request) Failing after 3m8s
Project CI / Native shell tests (pull_request) Failing after 5m13s
1d983c06cb
k88936 added 1 commit 2026-09-04 16:59:16 +08:00
以代码块回显项目文件正文
Project CI / Frontend tests (pull_request) Successful in 4m36s
Project CI / Repository checks (pull_request) Successful in 4m1s
Project CI / Backend tests (pull_request) Successful in 7m53s
Project CI / Native shell tests (pull_request) Successful in 19m30s
95b7b6e99a
将聊天侧 /read 文件内容包装为安全 pre/code

补充反引号围栏处理并更新项目文件读取断言

同步工作台 PRD 与 AGC 实施计划的安全渲染约定
kdletters approved these changes 2026-09-04 17:05:11 +08:00
Dismissed
kdletters left a comment
Member

本次审查 head sha: 95b7b6e99a20e1ad43694833def4fe0356fc84c9

结论:未发现明确问题。已核对 base f9e1e5d2a74b21e1e92cfdf93c07c9a8fcff51a1 到当前 head 的完整 diff;ChatMarkdownMessage 相关新增测试 13 项通过,AI 游戏创作壳测试集 55 个文件、974 项测试通过,前端 typecheck 通过。

本次审查 head sha: `95b7b6e99a20e1ad43694833def4fe0356fc84c9` 结论:未发现明确问题。已核对 base `f9e1e5d2a74b21e1e92cfdf93c07c9a8fcff51a1` 到当前 head 的完整 diff;ChatMarkdownMessage 相关新增测试 13 项通过,AI 游戏创作壳测试集 55 个文件、974 项测试通过,前端 typecheck 通过。
kdletters approved these changes 2026-09-04 17:06:36 +08:00
Dismissed
kdletters left a comment
Member

提交本次审查结论:未发现明确问题。head sha: 95b7b6e99a20e1ad43694833def4fe0356fc84c9

提交本次审查结论:未发现明确问题。head sha: `95b7b6e99a20e1ad43694833def4fe0356fc84c9`
kdletters requested changes 2026-09-06 19:39:37 +08:00
Dismissed
kdletters left a comment
Member

审查结论:request changes。发现两个可复现的 Markdown 展示问题:1) apps/ai-game-creator-shell/src/components/ChatMarkdownMessage/index.tsx:83-93 的 MarkdownOrderedList 没有转发 react-markdown 的 start 属性;输入“3. third\n4. fourth”会从 1 开始编号,助手回复的有序列表序号错误。2) :96-104 的 MarkdownParagraph 在 ListItemContext 内始终渲染 inline,:107-116 又让列表项的所有段落都继承该上下文;输入“- first\n\n second”会把两个段落视觉拼成“firstsecond”,丢失段落间隔。请保留 start 并区分列表项首段/后续段落,补对应回归测试。当前 PR 还与 master 存在冲突,请先 rebase/resolve。

审查结论:request changes。发现两个可复现的 Markdown 展示问题:1) apps/ai-game-creator-shell/src/components/ChatMarkdownMessage/index.tsx:83-93 的 MarkdownOrderedList 没有转发 react-markdown 的 start 属性;输入“3. third\\n4. fourth”会从 1 开始编号,助手回复的有序列表序号错误。2) :96-104 的 MarkdownParagraph 在 ListItemContext 内始终渲染 inline,:107-116 又让列表项的所有段落都继承该上下文;输入“- first\\n\\n second”会把两个段落视觉拼成“firstsecond”,丢失段落间隔。请保留 start 并区分列表项首段/后续段落,补对应回归测试。当前 PR 还与 master 存在冲突,请先 rebase/resolve。
k88936 added 2 commits 2026-09-07 12:49:00 +08:00
# Conflicts:
#	apps/ai-game-creator-shell/src/features/project-workspace/ProjectSupervisorView.tsx
#	apps/ai-game-creator-shell/tests/appSurface/project-preview/preview-shortcuts/assert-project-and-design-shortcuts.ts
#	docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md
修复聊天 Markdown 列表渲染
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
6fb2f56faf
保留有序列表的起始编号属性

区分列表项首段与后续段落样式

补充列表编号和多段落回归测试
k88936 added 1 commit 2026-09-07 15:44:06 +08:00
Merge branch 'master' into feat/agc-markdown-render
Project CI / Native shell tests (pull_request) Failing after 5m31s
Project CI / Backend tests (pull_request) Successful in 7m0s
Project CI / Repository checks (pull_request) Failing after 2m14s
Project CI / Frontend tests (pull_request) Failing after 1m58s
e6b2c5eb46
k88936 added 1 commit 2026-09-07 17:26:36 +08:00
Merge branch 'master' into feat/agc-markdown-render
Project CI / Native shell tests (pull_request) Failing after 4m55s
Project CI / Backend tests (pull_request) Successful in 6m26s
Project CI / Repository checks (pull_request) Failing after 2m13s
Project CI / Frontend tests (pull_request) Failing after 1m57s
7f5f63401e
kdletters approved these changes 2026-09-07 18:06:46 +08:00
Dismissed
kdletters left a comment
Member

This was generated by AI during triage.

审查结论:通过当前代码审查。当前提交已转发有序列表 start 属性,并区分列表项首段与后续段落,上一轮两个 Markdown 展示问题都有对应回归覆盖。当前四项 CI 仍在运行,合并前请等待 CI 结果。

> *This was generated by AI during triage.* 审查结论:通过当前代码审查。当前提交已转发有序列表 start 属性,并区分列表项首段与后续段落,上一轮两个 Markdown 展示问题都有对应回归覆盖。当前四项 CI 仍在运行,合并前请等待 CI 结果。
k88936 added 1 commit 2026-09-08 10:28:39 +08:00
修复 Direct 实时回复重复渲染
Project CI / Repository checks (pull_request) Successful in 3m27s
Project CI / Frontend tests (pull_request) Successful in 3m59s
Project CI / Backend tests (pull_request) Successful in 15m18s
Project CI / Native shell tests (pull_request) Successful in 20m28s
bb3f8afe2a
避免 Direct 模式在执行卡与独立消息区重复显示实时回复

保留非 Direct 模式的独立实时消息展示
k88936 dismissed kdletters's review 2026-09-08 10:28:39 +08:00
Reason:

New commits pushed, approval review dismissed automatically according to repository settings

k88936 added 1 commit 2026-09-08 15:08:53 +08:00
Merge branch 'master' into feat/agc-markdown-render
Project CI / Repository checks (pull_request) Successful in 2m19s
Project CI / Frontend tests (pull_request) Successful in 3m16s
Project CI / Backend tests (pull_request) Successful in 7m55s
Project CI / Native shell tests (pull_request) Successful in 20m17s
12ae0ef79a
k88936 requested review from kdletters 2026-09-08 15:57:14 +08:00
kdletters added 1 commit 2026-09-08 22:03:19 +08:00
Merge branch 'master' into feat/agc-markdown-render
Project CI / Repository checks (pull_request) Successful in 4m26s
Project CI / Native shell tests (pull_request) Failing after 5m11s
Project CI / Frontend tests (pull_request) Successful in 5m46s
Project CI / Backend tests (pull_request) Successful in 9m3s
42be1ef484
kdletters merged commit 01e057d047 into master 2026-09-08 22:03:37 +08:00
kdletters deleted branch feat/agc-markdown-render 2026-09-08 22:03:37 +08:00
Sign in to join this conversation.