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 阅读体验。

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