diff --git a/docs/devlog/2026-04-19.md b/docs/devlog/2026-04-19.md new file mode 100644 index 0000000..1e70239 --- /dev/null +++ b/docs/devlog/2026-04-19.md @@ -0,0 +1,15 @@ +# Devlog 2026-04-19 + +## v0.5.97 — Observer 명령어 추출 안정화 (21:22 KST 검증 완료) + +### 변경사항 +- **v32**: 터미널 프롬프트(`❯`) 조기감지 — JUNK/PROMPT 필터 전에 명령어 직접 추출 +- **v31**: content_copy 아이콘 필터 + 후보 길이순 정렬 + trailing icon strip +- **v30**: "Running command" div 형제 탐색 (pre/code 대신 plain div) +- 배포 전 체크리스트 보강 (log relay 필터, regex E2E, 가정 검증) +- observer-dev-guide DOM 구조 BTN-DOM-DUMP 기반 갱신 + +### 검증 결과 +- 14/14 E2E 테스트 통과 +- SYNTAX OK +- Accept all (diff review) 정상 동작 확인 diff --git a/extension/package-lock.json b/extension/package-lock.json index ce4b84e..504f99d 100644 --- a/extension/package-lock.json +++ b/extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "gravity-bridge", - "version": "0.5.97", + "version": "0.5.98", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "gravity-bridge", - "version": "0.5.97", + "version": "0.5.98", "dependencies": { "cheerio": "^1.2.0", "ws": "^8.19.0" diff --git a/extension/package.json b/extension/package.json index 8114d1b..45529d1 100644 --- a/extension/package.json +++ b/extension/package.json @@ -2,7 +2,7 @@ "name": "gravity-bridge", "displayName": "Gravity Bridge", "description": "Discord-based unified approval system for Antigravity AI interactions.", - "version": "0.5.97", + "version": "0.5.98", "publisher": "variet", "engines": { "vscode": "^1.100.0" diff --git a/extension/src/http-bridge.ts b/extension/src/http-bridge.ts index c400add..52d6731 100644 --- a/extension/src/http-bridge.ts +++ b/extension/src/http-bridge.ts @@ -285,11 +285,13 @@ function _handlePending(req: any, res: any, ctx: HttpBridgeContext) { // v19: "Always run" auto-approve — MUST run BEFORE any filter can reject it // Detects from rawCmd OR from buttons array (Observer may detect sibling first) - let alwaysRunDetected = /^Always\s+run$/i.test(rawCmd); + // v33: Also auto-approve "Accept all" (diff review) and "Accept" buttons + const AUTO_APPROVE_RE = /^(Always\s+run|Accept\s+all|Accept)$/i; + let alwaysRunDetected = AUTO_APPROVE_RE.test(rawCmd); let alwaysRunBtnIndex = alwaysRunDetected ? 0 : -1; if (!alwaysRunDetected && Array.isArray(data.buttons)) { for (let bi = 0; bi < data.buttons.length; bi++) { - if (/^Always\s+run$/i.test((data.buttons[bi].text || '').trim())) { + if (AUTO_APPROVE_RE.test((data.buttons[bi].text || '').trim())) { alwaysRunDetected = true; alwaysRunBtnIndex = bi; break;