Files
gravity_control/docs/devlog/entries/20260309-003.md
CD 32bf5ae416 feat(bridge): renderer v3 deep DOM traversal (iframe/webview/shadow) #task-255
- deepFindButtons(): traverse iframe contentDocument, webview.executeJavaScript, shadow DOMs
- dumpDOMStructure(): startup diagnostic dump of all iframes/webviews/buttons
- 3-phase trigger-click: deep DOM → webview execJS → iframe direct
- known-issues: webview iframe isolation confirmed, v3 solution documented
2026-03-09 18:06:01 +09:00

1.9 KiB

Renderer v3 — webview iframe 격리 확인 + deep DOM traversal

  • 시작: 15:32 KST
  • 종료: 17:59 KST
  • 상태: 🔧 미완료 (AG 재시작 후 DOM-DUMP 결과 확인 필요)

핵심 발견

webview iframe 격리 확인

  • Bridge HTTP 서버(port 34332) 정상 동작: /ping→pong, /trigger-click→{action:null}
  • Extension log 분석: Renderer DOM Observer가 감지한 버튼들은 RunAlt+? 등 외부 DOM trust-level 버튼
  • Run/Accept 버튼은 webview iframe (vscode-webview:// origin) 안에 존재
  • 외부 workbench DOM (vscode-file:// origin)에서는 cross-origin으로 접근 불가

v3 deep DOM traversal 구현

generateApprovalObserverScript() 전면 업그레이드:

  1. deepFindButtons() — 패턴 매칭 버튼을 재귀적으로 검색:

    • Main document (기존)
    • iframe contentDocument (same-origin이면 접근 가능)
    • <webview>.executeJavaScript() (Electron API — webview 내부 코드 실행)
    • Shadow DOM 재귀 탐색
  2. dumpDOMStructure() — 시작 3초 후 1회 실행:

    • 모든 iframe 목록 + 접근성 (ACCESSIBLE/BLOCKED)
    • 모든 <webview> 목록 + 접근성
    • 메인 DOM 버튼 목록 (처음 10개)
  3. 3-Phase trigger-click:

    • Phase 1: deep DOM search (main + iframes + shadow)
    • Phase 2: <webview>.executeJavaScript() (DOM 미접근 시 fallback)
    • Phase 3: iframe direct access retry

다음 단계

  1. AG 완전 재시작 → Renderer v3 스크립트 로딩 확인
  2. DevTools에서 [GB Observer] DOM-DUMP: 로그 확인
  3. iframe/webview 접근성 확인 → ACCESSIBLE이면 즉시 E2E 테스트
  4. BLOCKED이면 다음 대안 탐색

파일 변경

파일 변경
extension/src/extension.ts v3 renderer: deepFindButtons, dumpDOMStructure, 3-phase trigger-click
.agents/references/known-issues.md webview iframe 격리 확인 + v3 기록