fix(observer): v36 Accept all 감지 — span.cursor-pointer 선택자 추가 (v0.5.101)

근본 원인: AG Native에서 Accept all 버튼이 <button>이 아닌 <span> 태그.
Observer의 allBtns 선택자가 button만 스캔하여 Accept all 미감지.
ACCEPT-SCAN 로그에서 tag=SPAN cls=cursor-pointer 확인.
span.cursor-pointer 추가로 diff review 버튼 감지 복구.
This commit is contained in:
Variet Worker
2026-04-20 04:26:58 +09:00
parent 2bf1eb41d1
commit e95e7791f9
5 changed files with 27 additions and 5 deletions

View File

@@ -12,4 +12,4 @@
### 검증 결과
- 14/14 E2E 테스트 통과
- SYNTAX OK
- Accept all (diff review) 자동 승인 테스트 — v0.5.99 04:01 KST
- Accept all (diff review) 자동 승인 테스트 — v0.5.100 04:13 KST

View File

@@ -1,12 +1,12 @@
{
"name": "gravity-bridge",
"version": "0.5.100",
"version": "0.5.101",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "gravity-bridge",
"version": "0.5.100",
"version": "0.5.101",
"dependencies": {
"cheerio": "^1.2.0",
"ws": "^8.19.0"

View File

@@ -2,7 +2,7 @@
"name": "gravity-bridge",
"displayName": "Gravity Bridge",
"description": "Discord-based unified approval system for Antigravity AI interactions.",
"version": "0.5.100",
"version": "0.5.101",
"publisher": "variet",
"engines": {
"vscode": "^1.100.0"

View File

@@ -0,0 +1,22 @@
// Test: call agentAcceptAllInFile via extension's HTTP bridge trigger-click
// This simulates what the approval handler does
const http = require('http');
const PORT = 34332; // from observer setup log
// Write a trigger-click file to make Observer click "Accept all"
const fs = require('fs');
const path = require('path');
const bridgePath = path.join(process.env.USERPROFILE, '.gemini', 'antigravity', 'bridge');
// Check if there's a trigger_click.json
const triggerFile = path.join(bridgePath, 'trigger_click.json');
console.log('Writing trigger_click.json for accept...');
fs.writeFileSync(triggerFile, JSON.stringify({ action: 'approve', type: 'diff_review', ts: Date.now() }), 'utf-8');
console.log('Done. Check if Accept all was clicked.');
// Also check extension log for recent entries
const logFile = path.join(bridgePath, 'extension.log');
const lines = fs.readFileSync(logFile, 'utf-8').split('\n');
const recent = lines.slice(-5);
recent.forEach(l => console.log(l.substring(0, 200)));

View File

@@ -1080,7 +1080,7 @@ export function generateApprovalObserverScript(_port: number): string {
if(!_ready)return;
scanChatBodies();
var now=Date.now();
var allBtns=document.querySelectorAll('button, [role="button"], a.monaco-button, .monaco-text-button, vscode-button');
var allBtns=document.querySelectorAll('button, [role="button"], a.monaco-button, .monaco-text-button, vscode-button, span.cursor-pointer');
if(!allBtns.length)return;
// v25: One-shot debug ??find Accept/Reject elements in ANY tag (run once per 30s)