Skip to content

fix(extension): stop creating synced task tab groups - #532

Merged
iuyo5678 merged 2 commits into
mainfrom
fix/remove-agent-tab-groups
Oct 31, 2026
Merged

iuyo5678 merged 2 commits into
mainfrom
fix/remove-agent-tab-groups

Conversation

@iuyo5678

@iuyo5678 iuyo5678 commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

Chrome 会自动保存原生标签页组,并在开启相关同步时将它们同步到同一 Google 账号的其他浏览器。BrowserSkill 为每个任务窗口创建同名分组,反复执行任务后,其他浏览器的书签栏可能累积大量 BrowserSkill 分组,持续打扰用户。

Chrome 的公开扩展 API 没有为单个分组关闭保存或同步的选项;任务结束后清理也无法阻止运行期间的同步。因此移除自动创建原生任务分组的功能,从源头停止产生这些分组,保留现有的页面内控制提示。

改动范围

  • 删除独立的 AgentWindowTabGroups 模块及其后台调用点,移除 tabGroups 权限和中英文权限说明。
  • 删除仅验证自动分组的测试,调整已有浏览器回归测试,继续验证无自动分组时的窗口路由与控制释放。
  • 在 background-overlays.test.ts 增加默认 CI 会执行的回归:真实标签页创建处理逻辑及后台回调保留控制提示,同时不调用 tabs.group、tabs.ungroup 或 tabGroups.update。
  • 在 CHANGELOG.md 的 Unreleased / Removed 中记录功能和权限移除,保留已发布的 0.4.0 历史说明。
  • 保留用户自行创建的分组,并验证整组拖出任务窗口后正确结束任务、释放控制,同时保留用户分组。
  • 不清理账号中已经保存的历史分组;已有条目仍需用户自行处理。

已有行为保障

窗口创建、焦点管理、AgentWindowRouting、弹窗归属、会话生命周期、标签页借用/归还以及后台执行的实现文件均与 main 一致。后台事件接线只移除分组调用,保留原有路由、协作和页面控制提示。

真实浏览器回归已验证:

  • Agent Window 在后台、被其他窗口遮挡和最小化时仍可点击、读取页面和截图;不抢占用户窗口焦点、不切换用户当前标签页,记录的后台焦点事件为空。
  • 误进入 Agent Window 的用户/外部标签页自动移出;原用户窗口关闭后可创建替代窗口,后台到达的标签页不会抢焦点。
  • 等待移出的用户标签页不会成为代理的默认操作目标;任务自身的弹窗和人工协助期间的页面归属正常。
  • 用户拖出受控标签页或自行创建的整组标签页时,正确释放控制;程序化归还和正常结束任务不被误判为用户拖动。

验证

  • 扩展完整测试:192 个测试文件、3373 项测试通过;39 个文件、335 项测试按环境条件跳过。
  • 另外启用真实 Chrome,运行 window-routing.browser.test.ts 和 tab-detachment.browser.test.ts:2 项全部通过。
  • TypeScript 检查、生产构建、修改文件的 Biome 检查及 git diff --check 通过。
  • 检查最终构建的 manifest,确认不再声明 tabGroups 权限。

本地浏览器验证证据

验证版本:761aed14,2026-10-31,macOS arm64、Node.js 22、Chrome for Testing 145.0.7632.6。

覆盖范围明确区分:现有 CI 会执行标签页拖出浏览器测试,以及新增的不自动分组单元回归;window-routing.browser.test.ts 仍是显式启用的本地有窗口浏览器测试。下面附实际运行命令和输出,不将本地结果计为 CI 覆盖。

将 /path/to/chrome 替换为支持加载测试扩展的 Chrome for Testing 可执行文件:

BSK_BACKGROUND_CHROME=/path/to/chrome \
BSK_TAB_DETACH_CHROME=/path/to/chrome \
BSK_BACKGROUND_REPORT=/tmp/window-routing.json \
BSK_TAB_DETACH_REPORT=/tmp/tab-detachment.json \
pnpm --filter @browser-skill/extension exec vitest run \
  src/session-manager/__tests__/window-routing.browser.test.ts \
  src/session-manager/__tests__/tab-detachment.browser.test.ts \
  --no-file-parallelism

实际测试输出:

Test Files  2 passed (2)
Tests  2 passed (2)
Start at  12:32:32
Duration  45.90s (transform 348ms, setup 468ms, import 252ms, tests 44.86s, environment 0ms)

窗口路由报告中的关键结果:

{
  "states": [
    {
      "label": "background"
    },
    {
      "label": "covered"
    },
    {
      "label": "minimized"
    }
  ],
  "backgroundFocusEvents": [],
  "nativeExternal": true,
  "closedSourcePopup": true,
  "humanAssistancePopupChain": true,
  "defaultTargetProtected": true,
  "defaultCooperation": true
}

标签页拖出报告中通过的场景:

{
  "completed": [
    "created-tab",
    "borrowed-tab",
    "observed-tab",
    "whole-group",
    "last-tab",
    "same-window-reorder",
    "unrelated-tab",
    "programmatic-return",
    "ordinary-stop"
  ]
}

新增单元回归还做了反向验证:临时恢复旧自动分组模块和后台调用后,测试在 expect(chrome.tabs.group).not.toHaveBeenCalled() 处失败,实际检测到两次分组调用;恢复当前实现后通过。旧实现只用于本地验证,未包含在提交中。

@iuyo5678
iuyo5678 force-pushed the fix/remove-agent-tab-groups branch from fc8072d to 761aed1 Compare October 31, 2026 04:33
@iuyo5678
iuyo5678 merged commit 9cfba53 into main Oct 31, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants