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
This commit is contained in:
2026-03-09 18:06:01 +09:00
parent 5e64860c3f
commit 32bf5ae416
6 changed files with 438 additions and 67 deletions

View File

@@ -0,0 +1,46 @@
# 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 기록 |