fix(extension): restore AI Response Content capture by patching DOM extraction, CSP connect-src, and TS regex literal serialization

This commit is contained in:
Variet Worker
2026-04-10 21:10:33 +09:00
parent 58887f6933
commit a99c283656
22 changed files with 744 additions and 592 deletions

66
test_dom.js Normal file
View File

@@ -0,0 +1,66 @@
const fs = require('fs');
const { JSDOM } = require("jsdom");
try {
const observerModule = require("./extension/out/observer-script.js");
const dumpRaw = fs.readFileSync('C:\\Users\\Variet-Worker\\.gemini\\antigravity\\bridge\\dump_html.json', 'utf8');
const parseData = JSON.parse(dumpRaw);
let htmlStr = parseData.html;
// Inject fake port discovery node so it passes discoverPort()
htmlStr += `<div aria-label="Gravity Bridge Control port:1234"></div>`;
const dom = new JSDOM(htmlStr, { url: "http://localhost/", runScripts: "dangerously" });
const window = dom.window;
const document = window.document;
let testResults = [];
// Mock fetch for the observer
window.fetch = async (url, options) => {
if (url.includes('/ping')) {
return { text: async () => 'pong' };
}
if (url.includes('/pending') && options?.method === 'POST') {
const body = JSON.parse(options.body);
testResults.push("✅ POST /pending intercepted! Payload:");
testResults.push(JSON.stringify(body, null, 2));
return { json: async () => ({ok: true, request_id: body.request_id}) };
}
return { json: async () => ({}) };
};
// Fallback overrides
window.console.log = (m) => testResults.push(`[Script Log] ${m}`);
window.MutationObserver = window.MutationObserver || class { observe(){} };
window.AbortSignal = { timeout: () => ({}) };
let scriptStr = observerModule.generateApprovalObserverScript(1234);
// Brutally bypass discoverPort block and force initialization
scriptStr = scriptStr.replace(/discoverPort\(function\(port\)\{[\s\S]*?\}\);/, "BASE='http://127.0.0.1:1234';_ready=true;startObserver();");
scriptStr = scriptStr.replace("function scan(){", "function scan(){ log('scan() STAGE 1'); log('buttons in DOM: ' + document.querySelectorAll('button').length);");
scriptStr = scriptStr.replace("_obs=true;", "_obs=true; log('Forcing scan'); scan();");
// Run script inside JSDOM
const scriptEl = document.createElement("script");
scriptEl.textContent = scriptStr;
document.body.appendChild(scriptEl);
// Wait 3 seconds for discoverPort -> ping -> startObserver -> scheduleScan to execute
setTimeout(() => {
console.log("=== TEST RESULTS ===");
console.log(testResults.join("\n"));
if (!testResults.some(l => l.includes('POST /pending intercepted'))) {
console.error("❌ FAILED: No POST to /pending was made. The DOM scan failed to find the dummy button or extract context.");
process.exit(1);
} else {
console.log("✅ SUCCESS: The DOM extraction is functioning properly.");
process.exit(0);
}
}, 3000);
} catch (e) {
console.error("Test Harness Error:", e);
process.exit(1);
}