Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions extension/dist/background.js
Original file line number Diff line number Diff line change
Expand Up @@ -322,8 +322,18 @@ async function resolveTabId(tabId, workspace) {
const reuseTab = tabs.find((t) => t.id);
if (reuseTab?.id) {
await chrome.tabs.update(reuseTab.id, { url: "about:blank" });
await new Promise((resolve) => setTimeout(resolve, 200));
return reuseTab.id;
await new Promise((resolve) => setTimeout(resolve, 300));
try {
const updated = await chrome.tabs.get(reuseTab.id);
if (isDebuggableUrl(updated.url)) return reuseTab.id;
console.warn(`[opencli] about:blank was intercepted (${updated.url}), trying data: URI`);
await chrome.tabs.update(reuseTab.id, { url: "data:text/html,<html></html>" });
await new Promise((resolve) => setTimeout(resolve, 300));
const updated2 = await chrome.tabs.get(reuseTab.id);
if (isDebuggableUrl(updated2.url)) return reuseTab.id;
console.warn(`[opencli] data: URI also intercepted, creating fresh tab`);
} catch {
}
}
const newTab = await chrome.tabs.create({ windowId, url: "about:blank", active: true });
if (!newTab.id) throw new Error("Failed to create tab in automation window");
Expand Down
22 changes: 18 additions & 4 deletions extension/src/background.ts
Original file line number Diff line number Diff line change
Expand Up @@ -268,12 +268,26 @@ async function resolveTabId(tabId: number | undefined, workspace: string): Promi
const reuseTab = tabs.find(t => t.id);
if (reuseTab?.id) {
await chrome.tabs.update(reuseTab.id, { url: 'about:blank' });
// Wait briefly for the navigation to take effect
await new Promise(resolve => setTimeout(resolve, 200));
return reuseTab.id;
// Wait for the navigation to take effect
await new Promise(resolve => setTimeout(resolve, 300));
// Verify the URL is actually debuggable (New Tab Override may have intercepted)
try {
const updated = await chrome.tabs.get(reuseTab.id);
if (isDebuggableUrl(updated.url)) return reuseTab.id;
// New Tab Override intercepted about:blank — try data: URI instead
console.warn(`[opencli] about:blank was intercepted (${updated.url}), trying data: URI`);
await chrome.tabs.update(reuseTab.id, { url: 'data:text/html,<html></html>' });
await new Promise(resolve => setTimeout(resolve, 300));
const updated2 = await chrome.tabs.get(reuseTab.id);
if (isDebuggableUrl(updated2.url)) return reuseTab.id;
// data: URI also intercepted — create a brand new tab
console.warn(`[opencli] data: URI also intercepted, creating fresh tab`);
} catch {
// Tab was closed during navigation
}
}

// Window has no tabs at all — create one
// Window has no debuggable tabs — create one
const newTab = await chrome.tabs.create({ windowId, url: 'about:blank', active: true });
if (!newTab.id) throw new Error('Failed to create tab in automation window');
return newTab.id;
Expand Down
Loading