feat(cleanup): default idle-shutdown + keep — stop leaving scratch tabs/groups behind
Release binaries / Build macOS ARM64 (push) Has been cancelled
Release binaries / Build macOS x64 (push) Has been cancelled
Release binaries / Build Linux ARM64 (push) Has been cancelled
Release binaries / Build Linux musl ARM64 (push) Has been cancelled
Release binaries / Build Linux musl x64 (push) Has been cancelled
Release binaries / Build Linux x64 (push) Has been cancelled
Release binaries / Build Windows x64 (push) Has been cancelled
Release binaries / Attach binaries to GitHub Release (push) Has been cancelled
Release binaries / Build macOS ARM64 (push) Has been cancelled
Release binaries / Build macOS x64 (push) Has been cancelled
Release binaries / Build Linux ARM64 (push) Has been cancelled
Release binaries / Build Linux musl ARM64 (push) Has been cancelled
Release binaries / Build Linux musl x64 (push) Has been cancelled
Release binaries / Build Linux x64 (push) Has been cancelled
Release binaries / Build Windows x64 (push) Has been cancelled
Release binaries / Attach binaries to GitHub Release (push) Has been cancelled
Agents finish a task and just stop (never calling `close`), so daemons used to run forever, leaving their per-session scratch tabs + tab group in the user's Chrome. Two cases now handled: - Default idle timeout (10 min; AGENT_BROWSER_IDLE_TIMEOUT_MS overrides, 0 disables). On idle the daemon close()s the tabs IT created → the empty tab group is auto-removed by Chrome. Timer resets on every command, so active sessions are untouched. Adopted user tabs are never owned, so never closed. - `keep` — leave the ACTIVE tab for the user: unown it (exempt from close/idle) + ask the extension to ungroup it (ABExt.ungroupTab → 0.4.12) so it becomes a normal tab. Scratch gets cleaned, deliverable tabs stay. Also fix two clippy violations in the concurrently-landed #47 viewport code (manual char comparison + iter().any→contains) that were failing main's CI. ext 0.4.12: handle ABExt.ungroupTab (chrome.tabs.ungroup). 870 tests pass.
This commit is contained in:
@@ -288,6 +288,19 @@ async function handleForwardCdpCommand(msg) {
|
||||
const params = msg?.params?.params || undefined
|
||||
const sessionId = typeof msg?.params?.sessionId === 'string' ? msg.params.sessionId : undefined
|
||||
|
||||
// Non-CDP extension commands (ABExt.*) the daemon sends. `ungroupTab` removes a
|
||||
// tab from its per-session tab group so a `keep`-marked tab is left for the user
|
||||
// as a normal, ungrouped tab (the group can then be cleaned up). Best-effort.
|
||||
if (method === 'ABExt.ungroupTab') {
|
||||
const tabId = tabIdFromSession(sessionId) ?? tabForSession(sessionId)
|
||||
if (tabId != null && chrome.tabs.ungroup) {
|
||||
try {
|
||||
await chrome.tabs.ungroup(tabId)
|
||||
} catch {}
|
||||
}
|
||||
return { ungrouped: tabId ?? null }
|
||||
}
|
||||
|
||||
// Browser-level Target methods that map onto chrome.tabs.
|
||||
if (method === 'Target.createTarget') {
|
||||
const url = typeof params?.url === 'string' && params.url ? params.url : 'about:blank'
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"manifest_version": 3,
|
||||
"name": "chrome-use",
|
||||
"version": "0.4.11",
|
||||
"description": "Let chrome-use drive your logged-in Chrome \u2014 install once, no token, no per-use confirmation.",
|
||||
"version": "0.4.12",
|
||||
"description": "Let chrome-use drive your logged-in Chrome — install once, no token, no per-use confirmation.",
|
||||
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6vQIyscGIPYPZdSpPwPL0+0gxUROyRgCpmvCSDoc8XUm4qm97VbKnD9Ijc1lV22lNWZtE78gaRjt6BeSfuMgnBymnhLKjN1gU6AI5QUU0mrJyeHdWKvrKQR5FmsM2A7Xr1ykE2SiiS8zNUS3Y/6O5l+Nva7wrVy6E4a2dkBVQkOsu+DV+nEZvhIyuDY5D5SPXqNwUTWTaglwj5mjvHz36xSwCWlPmrtJ+ED0AUyrb2z4GIOmvk4kqtBVrh/UD058klLo4CkYOnIybB5aV6WYuwarfPY4bF/dLggPem+ewLNTUNBuwrxj/A4nUv0LJTuRO8rR7f8WR9qnRCY0Ic5saQIDAQAB",
|
||||
"icons": {
|
||||
"16": "icons/icon16.png",
|
||||
|
||||
Reference in New Issue
Block a user