Compare commits
2 Commits
64800d3c20
...
a99a1e3f54
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a99a1e3f54 | ||
|
|
ad4ed623bd |
@@ -38,10 +38,14 @@ npm.cmd run compile; node -e "const {generateApprovalObserverScript}=require('./
|
||||
4. [ ] **변경 범위 최소화**: 불필요한 코드 포함 여부 확인
|
||||
5. [ ] **재시작 사유 명시**: 사용자에게 (a) 무엇을 수정했고 (b) 왜 재시작이 필요한지 1~2줄로 설명
|
||||
6. [ ] **재시작 횟수 명시**: Observer 변경 = 2회, Extension host만 변경 = 1회
|
||||
7. [ ] **log() relay 필터 확인**: 새 로그 키워드 추가 시 log() 함수의 키워드 필터에도 추가했는지 확인 (섹션 3.5 참조)
|
||||
8. [ ] **regex E2E 테스트**: Observer에서 사용하는 새 regex는 생성된 코드에서 직접 실행하여 매칭 검증
|
||||
9. [ ] **구현 전 가정 검증**: 새 접근을 코딩하기 전에, 핵심 가정이 성립하는지 로그 1줄로 먼저 확인 (예: "Step Probe가 WAITING을 볼 수 있는가?" → `STEP-PROBE.*WAITING` 로그 검색)
|
||||
|
||||
**정당한 사유 없이 재시작을 요구하지 않는다.**
|
||||
**DOM 구조를 먼저 파악하고 설계한 후 코드를 작성한다.**
|
||||
**시행착오식(trial-and-error) 접근을 하지 않는다.**
|
||||
**추측으로 코딩하지 않는다. 로그/데이터로 확인한 사실에 기반하여 코딩한다.**
|
||||
|
||||
---
|
||||
|
||||
@@ -85,21 +89,38 @@ Select-String -Path "$env:LOCALAPPDATA\Programs\Antigravity\resources\app\out\vs
|
||||
- 사용자 메시지 블록: `.select-text.rounded-lg` (v0.5.74+)
|
||||
- Thinking 블록: 조상에 `max-h-[200px]` 클래스 있음 → 필터링
|
||||
|
||||
### 3.2 승인 버튼 (Observer가 접근 가능)
|
||||
- "Always run" 버튼: `<button>` 태그, chat panel 내
|
||||
- 명령어 텍스트: `footer`의 **형제(sibling)** 요소의 `pre.font-mono` (조상 아님!)
|
||||
- 조상 탐색 trail: `d0:button → d1:div → d2:footer` (footer.parentElement === null)
|
||||
- "Retry" 버튼: `<button>` 태그, chat panel 내
|
||||
### 3.2 승인 버튼 — "Always run" (v0.5.93 BTN-DOM-DUMP 확인)
|
||||
|
||||
### 3.3 Diff Review (Accept all / Reject all) — Observer 접근 **불가**
|
||||
- "Accept all" / "Reject all" 버튼은 **에디터 webview**에 렌더링
|
||||
- Observer의 `document`에서 `querySelectorAll('button')` 등으로 찾을 수 없음
|
||||
- ACCEPT-SCAN 디버그 로그로 확인: `button, a, div, span, [role="button"]` 전체 스캔해도 미발견
|
||||
- **해결 경로**: Extension host에서 `antigravity.acceptAgentStep` 명령 실행 (CMD-DISCOVERY에서 발견됨)
|
||||
실제 DOM 구조 (v0.5.92 로그로 확인):
|
||||
- d0: button.flex.cursor-pointer (Always run 버튼)
|
||||
- d1: div.min-w-0
|
||||
- d2: div.flex.items-center.justify-between.rounded-b.border-t (버튼 바)
|
||||
- d3: div (이름 없는 컨테이너)
|
||||
- div.mb-1 = "Running command" (헤더)
|
||||
- div.flex = "❯ gravity_control > ..." (실제 명령어, plain div!)
|
||||
- div.flex = "Always run Cancel" (버튼들)
|
||||
|
||||
> 명령어는 pre.font-mono나 code가 아닌 plain div.flex에 있음.
|
||||
> v30: "Running command" div의 형제를 탐색하여 프롬프트 마커 뒤의 명령어 추출.
|
||||
|
||||
- "Retry" 버튼: button 태그, chat panel 내
|
||||
|
||||
### 3.3 Diff Review (Accept all / Reject all) — Observer 접근 불가
|
||||
- 에디터 webview에 렌더링, Observer document에서 접근 불가
|
||||
- 해결: Extension host에서 antigravity.acceptAgentStep 명령 실행
|
||||
|
||||
### 3.4 DOM 렌더링 타이밍
|
||||
- "Always run" 버튼이 DOM에 나타난 후, `pre.font-mono` (명령어 텍스트)는 **100~300ms 후** 렌더링
|
||||
- 해결: DEFERRED 컨텍스트 — 500ms 딜레이 후 재추출 (v0.5.84+)
|
||||
- "Always run" 버튼이 DOM에 나타날 때 명령어 div도 함께 렌더링됨
|
||||
- v30의 "Running command" div 탐색은 즉시 성공
|
||||
|
||||
### 3.5 log() relay 필터 규칙
|
||||
Observer의 log() 함수는 키워드 필터로 일부 로그만 extension.log에 relay.
|
||||
새 로그 키워드 추가 시 반드시 필터도 함께 수정해야 함.
|
||||
|
||||
현재 필터 키워드 (v0.5.92+):
|
||||
CV-CLASSES, CV-CHILDREN, child[, CV found, Conversation view,
|
||||
BEACON, ERROR, chat relay, user-cls,
|
||||
CONTEXT, BTN-DOM, DEFERRED, DETECTED
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user