用途
Tabbit 用于在任务隔离的 Playwright 工作区中控制 Tabbit 浏览器。其核心约束是:不要在操作过程中切换浏览器后端。每个任务在独立的工作区内运行,工作区只管理自己创建的页面(context.pages()/pages()),并将这些标签页放入同一个分组。
主要能力
- 支持持久工作区模式:若命令工具返回可复用的进程句柄,并支持通过管道写入 stdin(Windows 上为非 PTY),可运行一次持久进程,这是首选方式。
- 支持单次命令模式:否则使用
<launcher> nodejs --task NAME立即执行,并在每条命令中复用完全相同的任务名。 - 命令帧操作:bootstrap(启动任务并执行首段代码)、run(后续执行,需带 requestId)、inspect(带 waitMs 等待)、tabs(在 bootstrap 前接管已有标签页)、finish(结束会话)。
- 任务租约机制:命令会续订五分钟租约,过期后保留标签页与分组但停止动画。
- 标签页接管:发送
{"op":"tabs"}获取现有标签页,并在 claimTabIds 中带上精确 tabId 进行接管。 - 结束策略:普通 finish 保留标签页和可恢复分组;
{"op":"finish","keep":false}仅用于显式丢弃或必要清理,且只关闭会话创建的标签页,不关闭已接管或恢复的标签页。
使用方式
- 选择启动器:macOS/POSIX 使用
"$HOME/.local/bin/tabbit-cli";Windows PowerShell 使用& "$env:LOCALAPPDATA\Tabbit\LocalAgent\bin\tabbit-cli.exe"。不要假设 tabbit-cli 已在 PATH 中。 - 优先尝试持久模式;否则改用单次命令模式,并复用同一任务名。
- 持久模式下发送换行帧并等待响应,不要分离进程或将其放入后台。单次模式在结束时运行
<launcher> finish --task NAME。 - 先发送 bootstrap,附带简洁的展示用 taskName。在代码中依次进行导航、操作、用 Playwright expect 校验,然后返回证据。示例:
{"op":"bootstrap","taskName":"Save-profile","requestId":"save-01","code":"await page.goto('https://example.test/profile',{waitUntil:'domcontentloaded'}); await page.getByRole('button',{name:'Save'}).click(); await expect(page.getByText('Saved')).toBeVisible(); return {verified: true};"} - 若 bootstrap 返回 queued,使用
{"op":"inspect","requestId":"save-01","waitMs":60000}等待,不要重复提交。 - 仅当返回状态会改变下一步决策时才拆分。后续帧需带路径安全的 requestId,例如:
{"op":"run","requestId":"save-02","code":"return await page.title();"} - 在 bootstrap 前发送
{"op":"tabs"}以接管已有标签页,并在 claimTabIds 中包含其精确 tabId。 - 完成前恰好执行一次结束:持久模式发送
{"op":"finish"},单次模式运行 finish 命令。
适用场景
适用于需要在 Tabbit 浏览器中执行隔离的浏览器自动化任务,例如页面导航、点击、表单操作、结果校验与证据采集,以及接管已有标签页继续工作。支持弹窗、iframe、上传下载、canvas、重复操作等 Playwright 常见场景,以及结果提取和失败后的运行时恢复。
限制与注意事项
- 不得切换浏览器后端。
- 不得假设 tabbit-cli 位于 PATH。
- 列表(inventory)不创建任务、页面、标签页或分组;后续帧省略任务标识。
- 不要预加载平台调用、交互辅助、Playwright 配方、信息提取与运行时恢复等参考文档,仅按需阅读。
- 在失败、中断的接收或传输/finish 失败后应查阅运行时恢复,不要盲目重试可能产生变更的操作。
- 具体收费、平台覆盖范围与安装方式暂未提供。