mirror of
https://github.com/Tencent/BrowserSkill.git
synced 2026-09-10 13:01:23 +08:00
fix(extension): release the pending agent-tab slot when tab creation fails
tool.tab_create increments pendingAgentTabCount *before* chrome.tabs.create so the onCreated listener can tell an agent tab from a user-opened tab. When the create failed, no onCreated event arrived and the counter leaked, so the next tab the user opened was misclassified as agent-created — the exact confusion the counter exists to prevent, a variant of issue #57. handleTabCreate now releases the slot on failure via SessionManager.releaseAgentTabPending. An abort (cancelled) is excluded: the tab did open (and was cleaned up), so its onCreated still consumes the slot. Added a regression test asserting that after a failed tab_create, a user-opened tab is still classified as 'user' (not 'agent').
This commit is contained in:
@@ -263,6 +263,18 @@ export class SessionManager {
|
||||
ctx.pendingAgentTabCount += 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Release a pending `tool.tab_create` slot when the create itself failed
|
||||
* and no `chrome.tabs.onCreated` event will arrive to consume it. Without
|
||||
* this the counter leaks and the *next* tab the user opens is misclassified
|
||||
* as agent-created — the exact confusion this counter exists to prevent.
|
||||
*/
|
||||
releaseAgentTabPending(windowId: number): void {
|
||||
const ctx = this.findByWindowId(windowId);
|
||||
if (!ctx || ctx.pendingAgentTabCount === 0) return;
|
||||
ctx.pendingAgentTabCount -= 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the `onCreated` listener for each new tab in an Agent Window.
|
||||
* Returns `"agent"` when the tab corresponds to a pending `tool.tab_create`
|
||||
|
||||
Reference in New Issue
Block a user