Skip to content

feat(vom): make canvas-rendered content observable | 支持在 observe 中发现并截图 canvas 视觉区域 - #138

Draft
Ljy-0827 wants to merge 4 commits into
mainfrom
fix/vom-canvas-observation
Draft

feat(vom): make canvas-rendered content observable | 支持在 observe 中发现并截图 canvas 视觉区域#138
Ljy-0827 wants to merge 4 commits into
mainfrom
fix/vom-canvas-observation

Conversation

@Ljy-0827

Copy link
Copy Markdown
Collaborator

问题

当前 VOM 对于 Canvas 渲染的表格、白板、图表等内容,页面虽然视觉上存在大块有效信息,但语义树中通常没有对应内容。

这会导致:

  • observe 只能看到 Canvas 周围的工具栏和控件,看不到核心视觉区域。
  • 模型不知道页面存在一块未被语义化的内容,也不知道下一步应该如何观察。
  • 多层 Canvas 共同渲染一个界面时,简单暴露 DOM 节点还会产生重复、噪声。
  • 如果直接把 Canvas 当普通元素引用,又可能误导模型对其执行 click、fill 等不可靠操作。
  • 典型表现是 iWiki 内嵌智能表格:VOM 能读取工具栏,但无法感知表格主体。

解决方案

在 observe 的现有语义观察结果上,补充一层通用的 Canvas visual surface discovery:

  • 从已捕获的页面和 iframe 文档中发现可见、实际渲染且具有一定视觉重要性的 Canvas。
  • 过滤隐藏、不可见以及已有可靠原生语义映射的 Canvas,减少误报。
  • 将高度重叠、共同组成一个视觉界面的多层 Canvas 合并成一个 surface,避免重复输出。
  • 将发现的区域挂载到 VOM 中最接近的语义父节点,并输出明确的 visual-only surface 标记。
  • 为 surface 分配仅支持截图的 ref,引导模型通过 screenshot --ref 查看其当前可见内容。
  • 对 surface ref 的 click、fill、hover、select 等交互进行能力拒绝,避免将视觉区域误认为普通 DOM 控件。
  • 对局部截图设置可见区域和像素预算,支持跨域 iframe,同时控制图片尺寸和成本。
  • 保持 snapshot 和录制路径不变,避免扩大现有静态语义观察的行为范围。

这个 PR 解决的是 Canvas 区域“不可感知、无观察入口”的问题;Canvas 内部的结构化理解、OCR 和交互能力不在本 PR 范围内。

@Ljy-0827 Ljy-0827 self-assigned this Aug 25, 2026
@Ljy-0827
Ljy-0827 force-pushed the fix/vom-canvas-observation branch from eeba301 to e141f27 Compare August 26, 2026 07:28
Base automatically changed from feat/vom-functional-refactor to main August 28, 2026 03:24
@iuyo5678
iuyo5678 force-pushed the fix/vom-canvas-observation branch from e141f27 to 73ad0ac Compare August 28, 2026 03:24
@Ljy-0827
Ljy-0827 force-pushed the fix/vom-canvas-observation branch 2 times, most recently from 1511bac to d62002c Compare August 28, 2026 06:05
@Ljy-0827
Ljy-0827 force-pushed the fix/vom-canvas-observation branch from d62002c to f33e1a7 Compare August 28, 2026 07:10
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.

1 participant