From cbfd137dcb98aeebc8b041a3777ace16182a72ca Mon Sep 17 00:00:00 2001 From: Variet Worker Date: Sun, 19 Apr 2026 15:03:09 +0900 Subject: [PATCH] =?UTF-8?q?fix(observer):=20v30=20Running=20command=20?= =?UTF-8?q?=EC=B6=94=EC=B6=9C=20=E2=80=94=20includes=20=EB=A7=A4=EC=B9=AD?= =?UTF-8?q?=20+=20raw=20fallback=20+=20=EB=94=94=EB=B2=84=EA=B7=B8=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=20(v0.5.94)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extension/package-lock.json | 4 ++-- extension/package.json | 2 +- extension/src/observer-script.ts | 25 ++++++++++++++++++++----- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/extension/package-lock.json b/extension/package-lock.json index 1eb0812..af4fd3c 100644 --- a/extension/package-lock.json +++ b/extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "gravity-bridge", - "version": "0.5.93", + "version": "0.5.94", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "gravity-bridge", - "version": "0.5.93", + "version": "0.5.94", "dependencies": { "cheerio": "^1.2.0", "ws": "^8.19.0" diff --git a/extension/package.json b/extension/package.json index c70f99c..f6ae740 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.93", + "version": "0.5.94", "publisher": "variet", "engines": { "vscode": "^1.100.0" diff --git a/extension/src/observer-script.ts b/extension/src/observer-script.ts index db66616..0c07190 100644 --- a/extension/src/observer-script.ts +++ b/extension/src/observer-script.ts @@ -192,20 +192,35 @@ export function generateApprovalObserverScript(_port: number): string { // v30: Command text is in plain divs near "Running command" header, not pre/code var rcDivs = node.querySelectorAll('div'); for (var rci = 0; rci < rcDivs.length; rci++) { - var rcTxt = (rcDivs[rci].textContent || '').trim(); - if (rcTxt === 'Running command' && rcDivs[rci].parentElement) { - var rcP = rcDivs[rci].parentElement; + var rcEl = rcDivs[rci]; + var rcChildCount = rcEl.children ? rcEl.children.length : 0; + var rcTxt = (rcEl.textContent || '').trim(); + // Match leaf div with exact or near-exact "Running command" text + if ((rcTxt === 'Running command' || (rcChildCount === 0 && rcTxt.indexOf('Running command') !== -1 && rcTxt.length < 30)) && rcEl.parentElement) { + var rcP = rcEl.parentElement; + log('CONTEXT-v30 found RC header at d'+depth+' siblings='+rcP.children.length); for (var rcsi = 0; rcsi < rcP.children.length; rcsi++) { - if (rcP.children[rcsi] === rcDivs[rci]) continue; + if (rcP.children[rcsi] === rcEl) continue; var sibT = (rcP.children[rcsi].textContent || '').trim(); + if (sibT.length < 5) continue; + // Skip button-bar text + if (/^(Always|Run|Allow|Cancel|Deny|keyboard_arrow)/i.test(sibT)) continue; + if (sibT.indexOf('Always run') !== -1 && sibT.indexOf('Cancel') !== -1) continue; + // Try prompt marker extraction var pM = sibT.match(/[\\u003e\\u00bb\\u276f]\\s+(.+)/); if (pM && pM[1].trim().length > 3) { var cmdV = pM[1].trim().substring(0, 300); if (/^(Always|Run|Allow|Cancel|Deny)/i.test(cmdV)) continue; - log('CONTEXT-OK d='+depth+' src=running-cmd trail='+_debugTrail.join(' ')); + log('CONTEXT-OK d='+depth+' src=running-cmd cmdV='+cmdV.substring(0,60)); _lastContextDebug = _debugTrail.join(' '); return 'Running command: ' + cmdV; } + // Fallback: use raw sibling text if it looks like a terminal line + if (sibT.length > 10 && /[\\u276f\\u003e]/.test(sibT)) { + log('CONTEXT-OK d='+depth+' src=running-cmd-raw sibT='+sibT.substring(0,60)); + _lastContextDebug = _debugTrail.join(' '); + return sibT.substring(0, 300); + } } } }