Skip to content

[Copilot UI] Harden incremental Markdown rendering for streamed answers #28

Description

@helsome

Background

README 已有 Markdown / streaming 基础能力,但“最终字符串能渲染 Markdown”不等于“流式生成过程中 Markdown 始终可用”。

真实 Copilot 会不断追加不完整的 Markdown:半个表格、未闭合 code fence、列表、引用、链接、公式或 citation marker。简单地每个 token 全量重新 parse/render,容易产生闪烁、布局跳动、表格损坏、滚动位置抖动以及长回答性能退化。

需要把 Markdown renderer 做成可验证的 production streaming surface。

Requirements

Rendering

至少稳定支持:

  • headings / paragraphs;
  • ordered/unordered lists;
  • blockquotes;
  • emphasis;
  • fenced code blocks;
  • Markdown tables / GFM table;
  • links;
  • inline citation/evidence markers;
  • long financial reports containing many sections/tables。

Incremental behavior

  • 不完整 block 在 stream 中不能导致整个消息树崩溃;
  • 新 delta 到达后只进行必要更新,避免每 token 全页重建造成明显 flicker;
  • stream 完成后的最终 DOM/内容与一次性静态渲染语义一致;
  • 用户主动滚动离开底部后,stream 不应持续抢回 scroll position;
  • code/table 等复杂块完成时允许平滑升级,不丢失前文。

Security

Performance

建立至少一个长回答 benchmark/fixture,避免 O(n²) 式随着 token 增长越来越卡。

Related: #27 #13

Acceptance Criteria

  • streaming 中未闭合 table/code/list 等不会导致渲染崩溃或前文消失。
  • 最终 streamed render 与相同完整 Markdown 的 static render 语义一致。
  • table/code/link/citation 可与真实 Copilot stream 一起工作。
  • 外部链接有安全打开策略,恶意 Markdown/HTML 有 XSS regression tests。
  • 用户离开底部时不会被强制 auto-scroll 拉回。
  • 长回答持续 streaming 时无明显逐 token 全页面重建问题,并有可重复性能测试。
  • PR 附一次真实模型生成的长 Markdown 回答录屏/截图,至少包含表格、列表、代码/引用之一和 evidence links,并给出恶意 Markdown 安全测试结果。

Non-goals

  • 不是重新做一套富文本编辑器。
  • 不要求支持任意 HTML;优先保证安全、稳定的 Markdown/GFM 阅读体验。

No activity

Activity on this issue will appear here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

claimedClaimed by a contributor and currently in progress

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions