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:
@@ -4,3 +4,4 @@
|
||||
|---|------|----------|------|------|
|
||||
| 001 | 08:00~09:17 | 승인 실행 메커니즘 연구 + step-type별 VS Code 명령 분기 구현 | included in 002 | 🔧 |
|
||||
| 002 | 09:21~15:07 | SDK 승인 명령 미등록 확정 + Renderer DOM Click 구현 | `4497e96` | 🔧 |
|
||||
| 003 | 15:32~17:59 | Renderer v3 deep DOM traversal (iframe/webview/shadow 관통) | pending | 🔧 |
|
||||
|
||||
46
docs/devlog/entries/20260309-003.md
Normal file
46
docs/devlog/entries/20260309-003.md
Normal 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 기록 |
|
||||
Reference in New Issue
Block a user