diff --git a/extension/package-lock.json b/extension/package-lock.json index 7dc275c..d5e8804 100644 --- a/extension/package-lock.json +++ b/extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "gravity-bridge", - "version": "0.5.84", + "version": "0.5.85", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "gravity-bridge", - "version": "0.5.84", + "version": "0.5.85", "dependencies": { "cheerio": "^1.2.0", "ws": "^8.19.0" diff --git a/extension/package.json b/extension/package.json index ecbd161..6d16503 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.84", + "version": "0.5.85", "publisher": "variet", "engines": { "vscode": "^1.100.0" diff --git a/extension/src/approval-handler.ts b/extension/src/approval-handler.ts index 4ab84e0..52c43ac 100644 --- a/extension/src/approval-handler.ts +++ b/extension/src/approval-handler.ts @@ -212,6 +212,14 @@ async function processResponseFile(filePath: string) { // Without this skip, the watcher deletes the file before Observer can poll it // (since no pending file exists for the isDomObserver check). if (resp._from_ws) { + // v26: TTL — delete stale _from_ws files after 60s to prevent infinite SKIP spam + const wsRidTs = parseInt((resp.request_id || '').split('_')[0], 10); + const wsAge = isNaN(wsRidTs) ? 999999 : Date.now() - wsRidTs; + if (wsAge > 60_000) { + ctx.logToFile(`[RESPONSE] CLEANUP stale _from_ws file: ${resp.request_id} age=${Math.round(wsAge / 1000)}s`); + try { fs.unlinkSync(filePath); } catch { } + return; + } ctx.logToFile(`[RESPONSE] SKIP _from_ws file (for Observer pollResponseGroup): ${resp.request_id}`); return; }