机器人浏览器伙伴(BBB)
一个隐私优先、人工智能驱动的浏览器扩展,将多提供商LLM聊天、MCP协议集成和智能DOM自动化结合到一个跨浏览器工具中。
+--------------------+ +-------------------+ +-----------------+
| Side Panel UI || Background Worker || Content Script |
| (Vue 3 + Tailwind) | port| (Message Hub) | msg | (DOM Engine) |
+--------------------+ +-------------------+ +-----------------+
| |
+------------+ +----------+
v v
+----------------+ +------------------+
| LLM Providers | | MCP Servers |
| Ollama (local) | | Local (42069) |
| Claude | | Remote (OIDC) |
| ChatGPT | | 3rd-party (key) |
| Gemini | +------------------+
| Grok |
+----------------+特性
- 多提供商LLM聊天 --Ollama(本地,默认)、Claude、ChatGPT、Gemini和Grok,支持实时流媒体
- DOM自动化 --通过自然语言浏览网站、单击元素、填写表单、滚动到部分
- MCP客户端 -使用每个服务器身份验证(无/API密钥/OIDC)连接到本地、专用和第三方MCP服务器
- 情境感知辅助 --基于网站类别(购物、维基、新闻、博客、学术等)的主动建议
- 多标签研究 --打开背景选项卡,提取内容,将调查结果与来源归因合并
- 导出模式 --生成带有返回精确页面位置的深度链接的摘要
- 会话分支 --在任何消息中分叉聊天,探索替代方案,合并发现
- 离线优先 --脱机时具有本地Ollama+缓存页面的完整功能
- 隐私第一 --本地存储在IndexedDB中的所有数据。没有遥测。没有第三方数据共享。
- 跨浏览器 --通过WXT支持Chrome(Manifest V3)和Firefox
快速开始
先决条件
安装
cd bot-browser-buddy
pnpm install发展
# Chrome (opens browser with extension loaded)
pnpm dev
# Firefox
pnpm dev:firefox生产建设
# Both browsers
./scripts/build.sh
# Or individually
pnpm build # Chrome → .output/chrome-mv3/
pnpm build:firefox # Firefox → .output/firefox-mv3/加载扩展
铬:导航到 chrome://extensions/,启用“开发人员模式”,单击“加载解包”,选择 .output/chrome-mv3/.
火狐:导航到 about:debugging#/runtime/this-firefox,单击“加载临时加载项”,选择中的任何文件 .output/firefox-mv3/.
用法
键盘快捷键
| 快捷方式 | 操作 |
|---|---|
Ctrl+Shift+B | 切换侧面板 |
Ctrl+Shift+P | 打开命令面板 |
聊天模式
打开侧面板,选择LLM提供者和模型,然后询问有关当前页面的问题:
- “这篇文章是关于什么的?”
- “导航到光盘部分”
- “在此网站上查找希捷硬盘”
- “总结要点”
辅助模式
在设置中启用“主动建议”。访问支持的站点时,浮动芯片会显示上下文感知操作:
| 站点类型 | 示例建议 |
|---|---|
| 购物 | 比较价格,查找优惠券,查看评论 |
| Wiki/Docs | 总结文章,查找相关主题 |
| 新闻 | 事实核查,寻找其他视角 |
| 博客 | 总结要点,检查引用的来源 |
| 学术 | 用通俗易懂的语言解释,查找引用论文 |
导出模式
将来自多个来源的研究整合到一个具有深度链接的摘要中:
- 在侧面板中切换到“导出”模式
- 提出一个研究问题(例如,“比较希捷与WD 4TB硬盘”)
- 代理打开背景选项卡,提取内容并显示结果
- 导出为Markdown或JSON,并注明来源
自动导航
切换设置。当 开,代理直接导航。当 关闭 (默认),每次导航操作前都会看到一张确认卡。
LLM提供程序配置
在扩展选项页面中配置提供程序(right-click extension icon → Options).
| 提供者 | 配置 | 默认模型 |
|---|---|---|
| 奥拉玛 (默认) | URL(默认: http://localhost:11434) | qwen2.5-coder:7b |
| 克劳德 | API密钥来自 console.anthropic.com | claude-sonnet-4-20250514 |
| ChatGPT | API密钥来自 platform.openai.com | gpt-4o |
| 双子座 | API密钥来自 aistudio.google.com | gemini-2.0-flash |
| 格罗克 | API密钥来自 console.x.ai | grok-3-mini |
API密钥存储在 browser.storage.local (浏览器在静止时加密)。
MCP服务器设置
本地MCP服务器(Docker)
FastMCP 2.0服务器用于本地开发:
cd docker
cp .env.template .env
# Edit .env if needed (defaults work for local dev)
docker compose up -d服务器在端口上启动 42069 默认情况下没有身份验证。在扩展的MCP设置中配置它。
每服务器身份验证
每个MCP服务器都独立配置了三种身份验证方法之一:
| 认证方法 | 用例 | 配置 |
|---|---|---|
| 无 | 本地/受信任的服务器 | 无需额外配置 |
| API密钥 | 私有/共享服务器 | 密钥+可选自定义标头 |
| OIDC | 第三方服务 | 发卡机构URL、客户端ID、范围 |
OIDC使用 browser.identity.launchWebAuthFlow() 使用PKC。每个服务器都维护自己的令牌对,并自动刷新。
建筑
消息流
User input → Side Panel → (port) → Background Worker → Content Script
|
LLM Provider
|
Stream chunks
|
(port) → Side Panel → Render数据存储
所有数据都通过Dexie.js本地存储在IndexedDB中:
| 表 | 目的 |
|---|---|
sessions | 聊天会话元数据 |
messages | 与分行支持人员聊天 |
bookmarks | 保存的带有标签的页面位置 |
actions | 导航/点击/键入审核日志 |
branches | 对话叉树 |
pageCache | 离线页面快照(LRU,100MB预算) |
mcpServers | MCP服务器配置 |
隐私
- 所有数据都存储在本地,永远不会离开浏览器
- 无遥测或分析
- 隐身模式:无任何内容持续
- 可配置的数据保留(7/30/90天/永久)
- 一键清除所有数据
- 离线模式:所有内容都保留在设备上(本地Ollama+缓存页面)
项目结构
bot-browser-buddy/
├── src/
│ ├── entrypoints/
│ │ ├── background.ts # Service worker: LLM routing, message hub
│ │ ├── content.ts # DOM automation + page extraction
│ │ ├── sidepanel/App.vue # Main chat UI
│ │ ├── popup/App.vue # Quick-action popup
│ │ └── options/App.vue # Settings page
│ ├── lib/
│ │ ├── providers/ # LLM adapters (ollama, anthropic, openai, google, xai)
│ │ ├── mcp/ # MCP client, connection manager, OIDC
│ │ ├── automation/ # DOM engine, site detector, tab orchestrator
│ │ ├── storage/ # Dexie.js database, CRUD modules
│ │ ├── monetization/ # Feature gate stubs (all unlocked)
│ │ └── messages.ts # Typed message definitions
│ └── utils/ # Markdown rendering, deep links
├── docker/ # Local MCP server (FastMCP 2.0, port 42069)
├── scripts/ # Build, version, sign, release scripts
├── wiki-pages/ # GitHub wiki content (8 pages)
├── .github/workflows/ # CI + release pipelines
├── wxt.config.ts
├── tailwind.config.ts
└── package.json脚本
| 脚本 | 目的 | ||
|---|---|---|---|
scripts/build.sh | 为Chrome+Firefox构建,包压缩 | ||
| `scripts/version.sh [major\ | minor\ | patch]` | Bump semver,git commit+tag |
scripts/sign-chrome.sh | 上传到Chrome网上商店 | ||
scripts/sign-firefox.sh | 通过以下方式签名 web-ext 对于AMO | ||
| `scripts/release.sh [major\ | minor\ | patch]` | 完整管道:版本+构建+签名+推送 |
发展
添加新的LLM提供程序
- 创建
src/lib/providers/.ts实施LLMProvider接口 - 将提供者ID添加到
ProviderId输入types.ts - 注册于
src/lib/providers/index.ts工厂 - 将默认模型添加到
getDefaultModel()在background.ts - 添加 `
向提供商选择sidepanel/App.vue`
添加新的MCP工具
对于本地Docker MCP服务器:
- 在中创建新文件
docker/mcp-server/src/bbb_mcp/tools/ - 在中注册该工具
main.py使用@mcp.tool()装饰器 - 重建:
cd docker && docker compose up --build
类型检查
pnpm typecheck测试
pnpm test # Single run
pnpm test:watch # Watch mode版本控制
使用语义版本控制。唯一的真理来源是 package.json → version.WXT会自动读取清单。
./scripts/version.sh patch # 0.1.0 → 0.1.1
./scripts/version.sh minor # 0.1.0 → 0.2.0
./scripts/version.sh major # 0.1.0 → 1.0.0许可证
麻省理工学院
