mirror of
https://github.com/garrytan/gstack.git
synced 2026-05-21 03:40:00 +08: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:
@@ -46,8 +46,7 @@ async function loadAuthToken() {
|
|||||||
if (data.token) authToken = data.token;
|
if (data.token) authToken = data.token;
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (!err?.message?.includes('Failed to fetch')) throw err;
|
console.error('[gstack bg] Failed to load auth token:', err.message);
|
||||||
console.debug('[gstack bg] Auth token not available (server may not be running):', err.message);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,8 +125,7 @@ async function notifyContentScripts(type) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (!err?.message?.includes('Extension context invalidated')) throw err;
|
console.error('[gstack bg] Failed to query tabs for notification:', err.message);
|
||||||
console.debug('[gstack bg] Tab notification skipped (extension context invalidated)');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -182,8 +180,7 @@ async function fetchAndRelayRefs() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (!err?.message?.includes('Failed to fetch')) throw err;
|
console.error('[gstack bg] Failed to fetch/relay refs:', err.message);
|
||||||
console.debug('[gstack bg] Refs fetch skipped (server unreachable)');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,15 +203,13 @@ async function injectInspector(tabId) {
|
|||||||
files: ['inspector.css'],
|
files: ['inspector.css'],
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} 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);
|
console.debug('[gstack bg] Inspector CSS injection failed (non-fatal):', err.message);
|
||||||
}
|
}
|
||||||
// Send startPicker to the injected inspector.js
|
// Send startPicker to the injected inspector.js
|
||||||
try {
|
try {
|
||||||
await chrome.tabs.sendMessage(tabId, { type: 'startPicker' });
|
await chrome.tabs.sendMessage(tabId, { type: 'startPicker' });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (!err?.message?.includes('Extension context invalidated') && !err?.message?.includes('Receiving end does not exist')) throw err;
|
console.warn('[gstack bg] Failed to send startPicker:', err.message);
|
||||||
console.debug('[gstack bg] startPicker skipped (tab not ready):', err.message);
|
|
||||||
}
|
}
|
||||||
inspectorMode = 'full';
|
inspectorMode = 'full';
|
||||||
return { ok: true, mode: 'full' };
|
return { ok: true, mode: 'full' };
|
||||||
@@ -237,8 +232,7 @@ async function stopInspector(tabId) {
|
|||||||
try {
|
try {
|
||||||
await chrome.tabs.sendMessage(tabId, { type: 'stopPicker' });
|
await chrome.tabs.sendMessage(tabId, { type: 'stopPicker' });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (!err?.message?.includes('Extension context invalidated') && !err?.message?.includes('Receiving end does not exist')) throw err;
|
console.debug('[gstack bg] Failed to stop picker on tab', tabId, ':', err.message);
|
||||||
console.debug('[gstack bg] stopPicker skipped (tab not ready):', err.message);
|
|
||||||
}
|
}
|
||||||
return { ok: true };
|
return { ok: true };
|
||||||
}
|
}
|
||||||
@@ -276,8 +270,7 @@ async function sendToContentScript(tabId, message) {
|
|||||||
try {
|
try {
|
||||||
const response = await chrome.tabs.sendMessage(tabId, message);
|
const response = await chrome.tabs.sendMessage(tabId, message);
|
||||||
return response || { ok: true };
|
return response || { ok: true };
|
||||||
} catch (e) {
|
} catch {
|
||||||
if (!e?.message?.includes('Extension context invalidated') && !e?.message?.includes('Receiving end does not exist')) throw e;
|
|
||||||
return { error: 'Content script not available' };
|
return { error: 'Content script not available' };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -451,8 +451,7 @@ async function pollChat() {
|
|||||||
// Show/hide stop button based on agent status
|
// Show/hide stop button based on agent status
|
||||||
updateStopButton(data.agentStatus === 'processing');
|
updateStopButton(data.agentStatus === 'processing');
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (!err?.message?.includes('Failed to fetch') && !err?.message?.includes('The operation was aborted')) throw err;
|
console.error('[gstack sidebar] Chat poll error:', err.message);
|
||||||
console.debug('[gstack sidebar] Chat poll skipped (server unreachable)');
|
|
||||||
} finally {
|
} finally {
|
||||||
pollInProgress = false;
|
pollInProgress = false;
|
||||||
}
|
}
|
||||||
@@ -530,8 +529,7 @@ async function stopAgent() {
|
|||||||
const resp = await fetch(`${serverUrl}/sidebar-agent/stop`, { method: 'POST', headers: authHeaders() });
|
const resp = await fetch(`${serverUrl}/sidebar-agent/stop`, { method: 'POST', headers: authHeaders() });
|
||||||
if (!resp.ok) console.warn(`[gstack sidebar] Stop agent failed: ${resp.status}`);
|
if (!resp.ok) console.warn(`[gstack sidebar] Stop agent failed: ${resp.status}`);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (!err?.message?.includes('Failed to fetch')) throw err;
|
console.error('[gstack sidebar] Stop agent error:', err.message);
|
||||||
console.debug('[gstack sidebar] Stop agent skipped (server unreachable)');
|
|
||||||
}
|
}
|
||||||
// Immediately clean up UI
|
// Immediately clean up UI
|
||||||
const thinking = document.getElementById('agent-thinking');
|
const thinking = document.getElementById('agent-thinking');
|
||||||
@@ -600,8 +598,7 @@ async function pollTabs() {
|
|||||||
|
|
||||||
renderTabBar(data.tabs);
|
renderTabBar(data.tabs);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (!err?.message?.includes('Failed to fetch') && !err?.message?.includes('The operation was aborted')) throw err;
|
console.error('[gstack sidebar] Tab poll error:', err.message);
|
||||||
console.debug('[gstack sidebar] Tab poll skipped (server unreachable)');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -649,8 +646,7 @@ async function switchBrowserTab(tabId) {
|
|||||||
switchChatTab(tabId);
|
switchChatTab(tabId);
|
||||||
pollTabs();
|
pollTabs();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (!err?.message?.includes('Failed to fetch')) throw err;
|
console.error('[gstack sidebar] Failed to switch browser tab:', err.message);
|
||||||
console.debug('[gstack sidebar] Tab switch skipped (server unreachable)');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -662,8 +658,7 @@ document.getElementById('clear-chat').addEventListener('click', async () => {
|
|||||||
const resp = await fetch(`${serverUrl}/sidebar-chat/clear`, { method: 'POST', headers: authHeaders() });
|
const resp = await fetch(`${serverUrl}/sidebar-chat/clear`, { method: 'POST', headers: authHeaders() });
|
||||||
if (!resp.ok) console.warn(`[gstack sidebar] Clear chat failed: ${resp.status}`);
|
if (!resp.ok) console.warn(`[gstack sidebar] Clear chat failed: ${resp.status}`);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (!err?.message?.includes('Failed to fetch')) throw err;
|
console.error('[gstack sidebar] Clear chat error:', err.message);
|
||||||
console.debug('[gstack sidebar] Clear chat skipped (server unreachable)');
|
|
||||||
}
|
}
|
||||||
// Reset local state
|
// Reset local state
|
||||||
chatLineCount = 0;
|
chatLineCount = 0;
|
||||||
@@ -695,8 +690,7 @@ document.getElementById('chat-cookies-btn').addEventListener('click', async () =
|
|||||||
body: JSON.stringify({ command: 'goto', args: [`${serverUrl}/cookie-picker`] }),
|
body: JSON.stringify({ command: 'goto', args: [`${serverUrl}/cookie-picker`] }),
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (!err?.message?.includes('Failed to fetch')) throw err;
|
console.error('[gstack sidebar] Failed to open cookie picker:', err.message);
|
||||||
console.debug('[gstack sidebar] Cookie picker skipped (server unreachable)');
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user