# Chrome Qwen Bridge 架构设计文档 ## 1. 项目概述 ### 1.1 背景与需求 基于与 Kimi 的技术讨论,我们需要实现一个 Chrome 插件,能够: - 将浏览器中的数据(DOM、网络请求、Console日志等)透传给 Qwen CLI - 让 Qwen CLI 能够利用 AI 能力分析网页内容 - 支持 MCP(Model Context Protocol)服务器集成 - 实现浏览器与本地 CLI 的双向通信 ### 1.2 技术约束 根据浏览器安全模型的限制: - **浏览器无法直接启动本地进程**:Chrome 插件运行在沙箱环境中 - **无法直接调用 Node.js API**:插件无法访问文件系统或执行系统命令 - **跨域限制**:需要遵守 CORS 策略 ### 1.3 解决方案选择 经过评估,我们选择了 **Native Messaging** 方案: | 方案 | 优点 | 缺点 | 选择理由 | |------|------|------|----------| | Native Messaging | - Chrome 官方推荐
- 无需开放端口
- 安全性高
- 可自动启动进程 | - 需要首次手动安装
- 平台相关配置 | ✅ 官方标准,安全可靠 | | HTTP Server | - 安装简单
- 跨平台统一 | - 需要占用端口
- 无法自动启动
- CORS 问题 | ❌ 用户体验较差 | | 文件轮询 | - 实现简单 | - 性能差
- 实时性差
- 不适合生产 | ❌ 仅适合调试 | ## 2. 系统架构 ### 2.1 整体架构图 ``` ┌─────────────────────────────────────────────────────────────┐ │ Chrome Browser │ │ │ │ ┌────────────────────────────────────────────────────────┐ │ │ │ Chrome Extension │ │ │ │ │ │ │ │ ┌─────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ │ │Content Script│ │Service Worker│ │ Popup UI │ │ │ │ │ │ │◄─►│ │◄─►│ │ │ │ │ │ │ - DOM提取 │ │ - 消息路由 │ │ - 用户交互 │ │ │ │ │ │ - 事件监听 │ │ - 连接管理 │ │ - 状态显示 │ │ │ │ │ │ - JS执行 │ │ - 请求处理 │ │ - 配置管理 │ │ │ │ │ └─────────────┘ └──────┬───────┘ └──────────────┘ │ │ │ │ │ │ │ │ └───────────────────────────┼────────────────────────────┘ │ │ │ │ └──────────────────────────────┼───────────────────────────────┘ │ Native Messaging API │ ▼ ┌───────────────────────────────────────────────────────────────┐ │ Native Host (Node.js) │ │ │ │ ┌──────────────────┐ ┌──────────────┐ ┌────────────────┐ │ │ │ Message Handler │ │Process Manager│ │ HTTP Client │ │ │ │ │◄─►│ │◄─►│ │ │ │ │ - JSON-RPC │ │ - spawn() │ │ - REST API │ │ │ │ - 协议转换 │ │ - 生命周期 │ │ - WebSocket │ │ │ │ - 错误处理 │ │ - 日志管理 │ │ - 状态同步 │ │ │ └──────────────────┘ └──────┬───────┘ └────────┬───────┘ │ │ │ │ │ └────────────────────────────────┼────────────────────┼─────────┘ │ │ ▼ ▼ ┌───────────────────────────────────────────────────────────────┐ │ Qwen CLI │ │ │ │ ┌──────────────────┐ ┌──────────────┐ ┌────────────────┐ │ │ │ CLI Process │ │ MCP Manager │ │ AI Engine │ │ │ │ │◄─►│ │◄─►│ │ │ │ │ - 命令解析 │ │ - 服务注册 │ │ - 内容分析 │ │ │ │ - HTTP Server │ │ - 协议适配 │ │ - 智能处理 │ │ │ │ - WebSocket │ │ - 工具调用 │ │ - 结果返回 │ │ │ └──────────────────┘ └──────────────┘ └────────────────┘ │ │ │ │ MCP Servers │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ chrome-devtools-mcp │ playwright-mcp │ custom-mcp ... │ │ │ └─────────────────────────────────────────────────────────┘ │ └───────────────────────────────────────────────────────────────┘ ``` ### 2.2 组件职责 #### 2.2.1 Chrome Extension 层 **Content Script (`content-script.js`)** - 注入到每个网页中运行 - 提取 DOM 结构、文本内容 - 监听 Console 日志 - 执行页面内 JavaScript - 捕获用户选择的文本 **Service Worker (`service-worker.js`)** - 管理 Native Messaging 连接 - 路由消息between组件 - 管理扩展生命周期 - 处理网络请求监控(通过 Debugger API) **Popup UI (`popup.html/js/css`)** - 提供用户界面 - 显示连接状态 - 触发各种操作 - 管理配置选项 #### 2.2.2 Native Host 层 **Message Handler** - 实现 Native Messaging 协议 - 4字节长度前缀 + JSON 消息 - 双向消息队列管理 - 错误处理与重试机制 **Process Manager** - 使用 `child_process.spawn()` 启动 Qwen CLI - 管理进程生命周期 - 监控进程输出 - 优雅关闭处理 **HTTP Client** - 与 Qwen CLI HTTP 服务通信 - 支持 REST API 调用 - WebSocket 连接管理(预留) #### 2.2.3 Qwen CLI 层 - 接收并处理来自插件的请求 - 管理 MCP 服务器 - 调用 AI 模型分析内容 - 返回处理结果 ## 3. 数据流设计 ### 3.1 消息流向 ``` 用户操作 → Popup UI → Service Worker → Native Host → Qwen CLI → AI/MCP ↓ 用户界面 ← Popup UI ← Service Worker ← Native Host ← 响应结果 ``` ### 3.2 消息格式 #### Chrome Extension ↔ Native Host ```typescript interface Message { id: number; // 请求ID,用于匹配响应 type: string; // 消息类型 action?: string; // 具体动作 data?: any; // 携带数据 error?: string; // 错误信息 } ``` 示例消息: ```json { "id": 1, "type": "qwen_request", "action": "analyze_page", "data": { "url": "https://example.com", "content": "...", "metadata": {} } } ``` #### Native Host ↔ Qwen CLI 使用 HTTP POST 请求: ```json { "action": "analyze", "data": { "type": "webpage", "content": "...", "prompt": "分析这个网页的主要内容" } } ``` ### 3.3 状态管理 ```typescript enum ConnectionState { DISCONNECTED = 'disconnected', CONNECTING = 'connecting', CONNECTED = 'connected', RUNNING = 'running', ERROR = 'error' } ``` ## 4. 安全设计 ### 4.1 权限控制 **Chrome Extension 权限**: ```json { "permissions": [ "nativeMessaging", // Native Host 通信 "activeTab", // 当前标签页访问 "storage", // 配置存储 "debugger" // 网络请求监控 ], "host_permissions": [ "" // 所有网站(可根据需要限制) ] } ``` ### 4.2 安全措施 1. **Native Messaging 安全** - 只允许特定扩展 ID 访问 - Manifest 文件明确指定路径 - 系统级权限保护 2. **数据安全** - 所有通信都在本地进行 - 不存储敏感信息 - 内容大小限制(防止内存溢出) 3. **进程安全** - 子进程权限继承用户权限 - 无法执行系统级操作 - 自动清理僵尸进程 ## 5. 性能优化 ### 5.1 数据传输优化 - **内容截断**:限制提取内容大小(50KB文本,30KB Markdown) - **懒加载**:只在需要时提取数据 - **缓存机制**:缓存 Console 日志(最多100条) ### 5.2 进程管理优化 - **连接池**:复用 Native Messaging 连接 - **超时控制**:30秒请求超时 - **批量处理**:合并多个小请求 ## 6. 错误处理 ### 6.1 错误类型 | 错误类型 | 处理策略 | 用户提示 | |---------|---------|---------| | Native Host 未安装 | 引导安装 | "请先安装 Native Host" | | Qwen CLI 未安装 | 继续运行,功能受限 | "Qwen CLI 未安装,部分功能不可用" | | 连接断开 | 自动重连(3次) | "连接断开,正在重连..." | | 请求超时 | 返回超时错误 | "请求超时,请重试" | | 进程崩溃 | 清理并重启 | "Qwen CLI 异常退出" | ### 6.2 日志记录 - **Chrome Extension**:使用 `console.log`,可在扩展背景页查看 - **Native Host**:写入文件 - macOS/Linux: `/tmp/qwen-bridge-host.log` - Windows: `%TEMP%\qwen-bridge-host.log` ## 7. 扩展性设计 ### 7.1 MCP 服务器扩展 支持动态添加 MCP 服务器: ```javascript // 配置新的 MCP 服务器 const mcpServers = [ 'chrome-devtools-mcp', 'playwright-mcp', 'custom-mcp' // 自定义服务器 ]; ``` ### 7.2 动作扩展 易于添加新的处理动作: ```javascript const actions = { 'analyze_page': analyzePageHandler, 'process_text': processTextHandler, 'custom_action': customHandler // 自定义动作 }; ``` ### 7.3 通信协议扩展 预留 WebSocket 支持: ```javascript // 未来可以升级为 WebSocket if (config.useWebSocket) { return new WebSocketConnection(url); } else { return new HTTPConnection(url); } ``` ## 8. 部署架构 ### 8.1 开发环境 ``` 开发者机器 ├── Chrome (Developer Mode) ├── Node.js 环境 ├── Qwen CLI (本地安装) └── MCP 服务器(可选) ``` ### 8.2 用户环境 ``` 用户机器 ├── Chrome 浏览器 ├── Chrome Extension (从商店或本地加载) ├── Native Host (一次性安装) ├── Node.js 运行时 └── Qwen CLI (用户安装) ``` ## 9. 技术栈 - **前端**:原生 JavaScript (ES6+) - **UI**:HTML5 + CSS3 (渐变设计) - **后端**:Node.js (Native Host) - **通信**:Native Messaging + HTTP - **进程管理**:child_process - **协议**:JSON-RPC 风格 ## 10. 未来展望 ### 10.1 短期优化 - 添加 TypeScript 支持 - 实现 WebSocket 实时通信 - 优化 UI/UX 设计 - 添加单元测试 ### 10.2 长期规划 - 支持更多浏览器(Firefox、Edge) - 开发配套的 VS Code 插件 - 实现云端同步功能 - 支持批量网页处理 ## 附录:关键决策记录 | 决策点 | 选择 | 理由 | |--------|------|------| | 通信方式 | Native Messaging | Chrome 官方推荐,安全可靠 | | 进程管理 | child_process.spawn | 灵活控制,支持流式输出 | | UI 框架 | 原生 JavaScript | 减少依赖,快速加载 | | 消息格式 | JSON | 通用性好,易于调试 | | MCP 集成 | HTTP Transport | 简单可靠,易于实现 |