fix(extension): delete the dead chat-queue client surface

The sidebar-command handler in background.js POSTed to a server endpoint that
no longer exists (deleted with the chat queue) — ~35 lines of fully-wired dead
code including error handling for the permanent 404, plus its allowlist entry.
No sender in the extension ever emitted the message type.

chatEnabled leaves the /health contract (server hardcoded false, background.js
re-derived it, nothing consumed it — the chat input element it guarded is gone
from sidepanel.html). BROWSE_SIDEBAR_CHAT env flag had zero readers.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Garry Tan
2026-08-14 21:00:17 -07:00
co-authored by Claude Fable 5
parent ef03646e07
commit 44d58aa6ee
4 changed files with 5 additions and 45 deletions
+2 -38
View File
@@ -81,8 +81,7 @@ async function checkHealth() {
// already flips to disconnected on a 403.
const gotToken = await loadAuthToken();
if (!gotToken && !authToken) return;
// Forward chatEnabled so sidepanel can show/hide chat tab
setConnected({ ...data, chatEnabled: !!data.chatEnabled });
setConnected(data);
} else {
setDisconnected();
}
@@ -297,7 +296,7 @@ chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
const ALLOWED_TYPES = new Set([
'getPort', 'setPort', 'getServerUrl', 'getToken', 'fetchRefs',
'openSidePanel', 'sidebarOpened', 'command', 'sidebar-command',
'openSidePanel', 'sidebarOpened', 'command',
'getTabState',
// Inspector message types
'startInspector', 'stopInspector', 'elementPicked', 'pickerCancelled',
@@ -447,41 +446,6 @@ chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
return true;
}
// Sidebar → Claude Code (file-based message queue)
if (msg.type === 'sidebar-command') {
const base = getBaseUrl();
if (!base || !authToken) {
sendResponse({ error: 'Not connected' });
return true;
}
// Capture the active tab's URL so the sidebar agent knows what page
// the user is actually looking at (Playwright's page.url() can be stale
// if the user navigated manually in headed mode).
chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
const activeTabUrl = tabs?.[0]?.url || null;
fetch(`${base}/sidebar-command`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${authToken}`,
},
body: JSON.stringify({ message: msg.message, activeTabUrl }),
})
.then(r => {
if (!r.ok) {
console.error(`[gstack bg] sidebar-command failed: ${r.status} ${r.statusText}`);
return r.json().catch(() => ({ error: `Server returned ${r.status}` }));
}
return r.json();
})
.then(data => sendResponse(data))
.catch(err => {
console.error('[gstack bg] sidebar-command error:', err.message);
sendResponse({ error: err.message });
});
});
return true;
}
});
// ─── Side Panel ─────────────────────────────────────────────────