mirror of
https://github.com/garrytan/gstack.git
synced 2026-05-02 11:45:20 +02:00
revert: remove brittle string-matching catches in extension files
Revert error-swallowing fixes in background.js and sidepanel.js that
matched error messages via includes('Failed to fetch'), includes(
'Extension context invalidated'), etc. In Chrome extensions, uncaught
errors crash the entire extension. The original catch-and-log pattern
is the correct choice for extension code where any error is non-fatal.
content.js and inspector.js changes kept — their TypeError/DOMException
catches are typed, not string-based.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
+6
-13
@@ -46,8 +46,7 @@ async function loadAuthToken() {
|
||||
if (data.token) authToken = data.token;
|
||||
}
|
||||
} catch (err) {
|
||||
if (!err?.message?.includes('Failed to fetch')) throw err;
|
||||
console.debug('[gstack bg] Auth token not available (server may not be running):', err.message);
|
||||
console.error('[gstack bg] Failed to load auth token:', err.message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,8 +125,7 @@ async function notifyContentScripts(type) {
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
if (!err?.message?.includes('Extension context invalidated')) throw err;
|
||||
console.debug('[gstack bg] Tab notification skipped (extension context invalidated)');
|
||||
console.error('[gstack bg] Failed to query tabs for notification:', err.message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -182,8 +180,7 @@ async function fetchAndRelayRefs() {
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
if (!err?.message?.includes('Failed to fetch')) throw err;
|
||||
console.debug('[gstack bg] Refs fetch skipped (server unreachable)');
|
||||
console.error('[gstack bg] Failed to fetch/relay refs:', err.message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -206,15 +203,13 @@ async function injectInspector(tabId) {
|
||||
files: ['inspector.css'],
|
||||
});
|
||||
} catch (err) {
|
||||
if (!err?.message?.includes('Extension context invalidated') && !err?.message?.includes('Cannot access')) throw err;
|
||||
console.debug('[gstack bg] Inspector CSS injection failed (non-fatal):', err.message);
|
||||
}
|
||||
// Send startPicker to the injected inspector.js
|
||||
try {
|
||||
await chrome.tabs.sendMessage(tabId, { type: 'startPicker' });
|
||||
} catch (err) {
|
||||
if (!err?.message?.includes('Extension context invalidated') && !err?.message?.includes('Receiving end does not exist')) throw err;
|
||||
console.debug('[gstack bg] startPicker skipped (tab not ready):', err.message);
|
||||
console.warn('[gstack bg] Failed to send startPicker:', err.message);
|
||||
}
|
||||
inspectorMode = 'full';
|
||||
return { ok: true, mode: 'full' };
|
||||
@@ -237,8 +232,7 @@ async function stopInspector(tabId) {
|
||||
try {
|
||||
await chrome.tabs.sendMessage(tabId, { type: 'stopPicker' });
|
||||
} catch (err) {
|
||||
if (!err?.message?.includes('Extension context invalidated') && !err?.message?.includes('Receiving end does not exist')) throw err;
|
||||
console.debug('[gstack bg] stopPicker skipped (tab not ready):', err.message);
|
||||
console.debug('[gstack bg] Failed to stop picker on tab', tabId, ':', err.message);
|
||||
}
|
||||
return { ok: true };
|
||||
}
|
||||
@@ -276,8 +270,7 @@ async function sendToContentScript(tabId, message) {
|
||||
try {
|
||||
const response = await chrome.tabs.sendMessage(tabId, message);
|
||||
return response || { ok: true };
|
||||
} catch (e) {
|
||||
if (!e?.message?.includes('Extension context invalidated') && !e?.message?.includes('Receiving end does not exist')) throw e;
|
||||
} catch {
|
||||
return { error: 'Content script not available' };
|
||||
}
|
||||
}
|
||||
|
||||
+6
-12
@@ -451,8 +451,7 @@ async function pollChat() {
|
||||
// Show/hide stop button based on agent status
|
||||
updateStopButton(data.agentStatus === 'processing');
|
||||
} catch (err) {
|
||||
if (!err?.message?.includes('Failed to fetch') && !err?.message?.includes('The operation was aborted')) throw err;
|
||||
console.debug('[gstack sidebar] Chat poll skipped (server unreachable)');
|
||||
console.error('[gstack sidebar] Chat poll error:', err.message);
|
||||
} finally {
|
||||
pollInProgress = false;
|
||||
}
|
||||
@@ -530,8 +529,7 @@ async function stopAgent() {
|
||||
const resp = await fetch(`${serverUrl}/sidebar-agent/stop`, { method: 'POST', headers: authHeaders() });
|
||||
if (!resp.ok) console.warn(`[gstack sidebar] Stop agent failed: ${resp.status}`);
|
||||
} catch (err) {
|
||||
if (!err?.message?.includes('Failed to fetch')) throw err;
|
||||
console.debug('[gstack sidebar] Stop agent skipped (server unreachable)');
|
||||
console.error('[gstack sidebar] Stop agent error:', err.message);
|
||||
}
|
||||
// Immediately clean up UI
|
||||
const thinking = document.getElementById('agent-thinking');
|
||||
@@ -600,8 +598,7 @@ async function pollTabs() {
|
||||
|
||||
renderTabBar(data.tabs);
|
||||
} catch (err) {
|
||||
if (!err?.message?.includes('Failed to fetch') && !err?.message?.includes('The operation was aborted')) throw err;
|
||||
console.debug('[gstack sidebar] Tab poll skipped (server unreachable)');
|
||||
console.error('[gstack sidebar] Tab poll error:', err.message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -649,8 +646,7 @@ async function switchBrowserTab(tabId) {
|
||||
switchChatTab(tabId);
|
||||
pollTabs();
|
||||
} catch (err) {
|
||||
if (!err?.message?.includes('Failed to fetch')) throw err;
|
||||
console.debug('[gstack sidebar] Tab switch skipped (server unreachable)');
|
||||
console.error('[gstack sidebar] Failed to switch browser tab:', err.message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -662,8 +658,7 @@ document.getElementById('clear-chat').addEventListener('click', async () => {
|
||||
const resp = await fetch(`${serverUrl}/sidebar-chat/clear`, { method: 'POST', headers: authHeaders() });
|
||||
if (!resp.ok) console.warn(`[gstack sidebar] Clear chat failed: ${resp.status}`);
|
||||
} catch (err) {
|
||||
if (!err?.message?.includes('Failed to fetch')) throw err;
|
||||
console.debug('[gstack sidebar] Clear chat skipped (server unreachable)');
|
||||
console.error('[gstack sidebar] Clear chat error:', err.message);
|
||||
}
|
||||
// Reset local state
|
||||
chatLineCount = 0;
|
||||
@@ -695,8 +690,7 @@ document.getElementById('chat-cookies-btn').addEventListener('click', async () =
|
||||
body: JSON.stringify({ command: 'goto', args: [`${serverUrl}/cookie-picker`] }),
|
||||
});
|
||||
} catch (err) {
|
||||
if (!err?.message?.includes('Failed to fetch')) throw err;
|
||||
console.debug('[gstack sidebar] Cookie picker skipped (server unreachable)');
|
||||
console.error('[gstack sidebar] Failed to open cookie picker:', err.message);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user