From a60c5c6697446588d8d75987aeddbe265334a71d Mon Sep 17 00:00:00 2001
From: yiliang114 <1204183885@qq.com>
Date: Sat, 20 Dec 2025 00:58:41 +0800
Subject: [PATCH] feat(chrome-qwen-bridge): :fire: init chrome qwen code bridge
---
packages/chrome-qwen-bridge/.extension-id | 1 +
packages/chrome-qwen-bridge/.gitignore | 23 +
.../chrome-qwen-bridge/CONNECTION_STATUS.md | 62 ++
packages/chrome-qwen-bridge/INSTALL.md | 121 ++++
packages/chrome-qwen-bridge/QUICK_START.md | 64 ++
packages/chrome-qwen-bridge/README.md | 204 ++++++
packages/chrome-qwen-bridge/build.sh | 26 +
packages/chrome-qwen-bridge/debug-chrome.sh | 52 ++
.../chrome-qwen-bridge/debug-console.html | 178 +++++
packages/chrome-qwen-bridge/debug.sh | 376 ++++++++++
packages/chrome-qwen-bridge/dev.js | 511 ++++++++++++++
packages/chrome-qwen-bridge/diagnose.sh | 139 ++++
packages/chrome-qwen-bridge/docs/README.md | 119 ++++
.../chrome-qwen-bridge/docs/api-reference.md | 646 ++++++++++++++++++
.../chrome-qwen-bridge/docs/architecture.md | 361 ++++++++++
packages/chrome-qwen-bridge/docs/debugging.md | 295 ++++++++
.../docs/implementation-plan.md | 280 ++++++++
.../docs/technical-details.md | 534 +++++++++++++++
.../extension/background/service-worker.js | 366 ++++++++++
.../extension/content/content-script.js | 466 +++++++++++++
.../extension/icons/icon-128.png | 10 +
.../extension/icons/icon-16.png | 10 +
.../extension/icons/icon-48.png | 10 +
.../extension/icons/icon.svg | 10 +
.../extension/manifest.json | 58 ++
.../extension/options/options.html | 217 ++++++
.../extension/options/options.js | 80 +++
.../extension/popup/popup.css | 385 +++++++++++
.../extension/popup/popup.html | 140 ++++
.../extension/popup/popup.js | 477 +++++++++++++
.../extension/sidepanel/sidepanel.css | 402 +++++++++++
.../extension/sidepanel/sidepanel.html | 140 ++++
.../extension/sidepanel/sidepanel.js | 480 +++++++++++++
packages/chrome-qwen-bridge/first-install.sh | 120 ++++
.../native-host/com.qwen.bridge.json.template | 9 +
.../chrome-qwen-bridge/native-host/host.bat | 2 +
.../chrome-qwen-bridge/native-host/host.js | 421 ++++++++++++
.../native-host/install.bat | 98 +++
.../chrome-qwen-bridge/native-host/install.sh | 96 +++
.../native-host/manifest.json | 9 +
.../native-host/package.json | 23 +
.../chrome-qwen-bridge/native-host/run.sh | 17 +
.../native-host/smart-install.sh | 306 +++++++++
.../chrome-qwen-bridge/native-host/start.sh | 18 +
packages/chrome-qwen-bridge/package.json | 43 ++
packages/chrome-qwen-bridge/reload.sh | 61 ++
.../chrome-qwen-bridge/set-extension-id.sh | 24 +
packages/chrome-qwen-bridge/start.sh | 300 ++++++++
.../chrome-qwen-bridge/test-connection.sh | 166 +++++
packages/chrome-qwen-bridge/test-handshake.sh | 44 ++
.../chrome-qwen-bridge/test-native-host.sh | 41 ++
packages/chrome-qwen-bridge/test.sh | 44 ++
packages/chrome-qwen-bridge/test_fix.py | 90 +++
.../chrome-qwen-bridge/test_native_host.py | 69 ++
packages/chrome-qwen-bridge/tsconfig.json | 16 +
.../chrome-qwen-bridge/update-host-config.sh | 26 +
packages/chrome-qwen-bridge/verify.sh | 203 ++++++
57 files changed, 9489 insertions(+)
create mode 100644 packages/chrome-qwen-bridge/.extension-id
create mode 100644 packages/chrome-qwen-bridge/.gitignore
create mode 100644 packages/chrome-qwen-bridge/CONNECTION_STATUS.md
create mode 100644 packages/chrome-qwen-bridge/INSTALL.md
create mode 100644 packages/chrome-qwen-bridge/QUICK_START.md
create mode 100644 packages/chrome-qwen-bridge/README.md
create mode 100755 packages/chrome-qwen-bridge/build.sh
create mode 100755 packages/chrome-qwen-bridge/debug-chrome.sh
create mode 100644 packages/chrome-qwen-bridge/debug-console.html
create mode 100755 packages/chrome-qwen-bridge/debug.sh
create mode 100644 packages/chrome-qwen-bridge/dev.js
create mode 100755 packages/chrome-qwen-bridge/diagnose.sh
create mode 100644 packages/chrome-qwen-bridge/docs/README.md
create mode 100644 packages/chrome-qwen-bridge/docs/api-reference.md
create mode 100644 packages/chrome-qwen-bridge/docs/architecture.md
create mode 100644 packages/chrome-qwen-bridge/docs/debugging.md
create mode 100644 packages/chrome-qwen-bridge/docs/implementation-plan.md
create mode 100644 packages/chrome-qwen-bridge/docs/technical-details.md
create mode 100644 packages/chrome-qwen-bridge/extension/background/service-worker.js
create mode 100644 packages/chrome-qwen-bridge/extension/content/content-script.js
create mode 100644 packages/chrome-qwen-bridge/extension/icons/icon-128.png
create mode 100644 packages/chrome-qwen-bridge/extension/icons/icon-16.png
create mode 100644 packages/chrome-qwen-bridge/extension/icons/icon-48.png
create mode 100644 packages/chrome-qwen-bridge/extension/icons/icon.svg
create mode 100644 packages/chrome-qwen-bridge/extension/manifest.json
create mode 100644 packages/chrome-qwen-bridge/extension/options/options.html
create mode 100644 packages/chrome-qwen-bridge/extension/options/options.js
create mode 100644 packages/chrome-qwen-bridge/extension/popup/popup.css
create mode 100644 packages/chrome-qwen-bridge/extension/popup/popup.html
create mode 100644 packages/chrome-qwen-bridge/extension/popup/popup.js
create mode 100644 packages/chrome-qwen-bridge/extension/sidepanel/sidepanel.css
create mode 100644 packages/chrome-qwen-bridge/extension/sidepanel/sidepanel.html
create mode 100644 packages/chrome-qwen-bridge/extension/sidepanel/sidepanel.js
create mode 100755 packages/chrome-qwen-bridge/first-install.sh
create mode 100644 packages/chrome-qwen-bridge/native-host/com.qwen.bridge.json.template
create mode 100644 packages/chrome-qwen-bridge/native-host/host.bat
create mode 100755 packages/chrome-qwen-bridge/native-host/host.js
create mode 100644 packages/chrome-qwen-bridge/native-host/install.bat
create mode 100755 packages/chrome-qwen-bridge/native-host/install.sh
create mode 100644 packages/chrome-qwen-bridge/native-host/manifest.json
create mode 100644 packages/chrome-qwen-bridge/native-host/package.json
create mode 100755 packages/chrome-qwen-bridge/native-host/run.sh
create mode 100755 packages/chrome-qwen-bridge/native-host/smart-install.sh
create mode 100755 packages/chrome-qwen-bridge/native-host/start.sh
create mode 100644 packages/chrome-qwen-bridge/package.json
create mode 100755 packages/chrome-qwen-bridge/reload.sh
create mode 100755 packages/chrome-qwen-bridge/set-extension-id.sh
create mode 100755 packages/chrome-qwen-bridge/start.sh
create mode 100755 packages/chrome-qwen-bridge/test-connection.sh
create mode 100755 packages/chrome-qwen-bridge/test-handshake.sh
create mode 100755 packages/chrome-qwen-bridge/test-native-host.sh
create mode 100755 packages/chrome-qwen-bridge/test.sh
create mode 100755 packages/chrome-qwen-bridge/test_fix.py
create mode 100755 packages/chrome-qwen-bridge/test_native_host.py
create mode 100644 packages/chrome-qwen-bridge/tsconfig.json
create mode 100755 packages/chrome-qwen-bridge/update-host-config.sh
create mode 100755 packages/chrome-qwen-bridge/verify.sh
diff --git a/packages/chrome-qwen-bridge/.extension-id b/packages/chrome-qwen-bridge/.extension-id
new file mode 100644
index 00000000..73039ed9
--- /dev/null
+++ b/packages/chrome-qwen-bridge/.extension-id
@@ -0,0 +1 @@
+cimaabkejokbhjkdnajgfniiolfjgbhd
diff --git a/packages/chrome-qwen-bridge/.gitignore b/packages/chrome-qwen-bridge/.gitignore
new file mode 100644
index 00000000..ed26baf9
--- /dev/null
+++ b/packages/chrome-qwen-bridge/.gitignore
@@ -0,0 +1,23 @@
+# Dependencies
+node_modules/
+
+# Build outputs
+dist/
+*.zip
+
+# Logs
+*.log
+
+# OS files
+.DS_Store
+Thumbs.db
+
+# IDE files
+.idea/
+.vscode/
+*.swp
+*.swo
+
+# Temporary files
+*.tmp
+.temp/
\ No newline at end of file
diff --git a/packages/chrome-qwen-bridge/CONNECTION_STATUS.md b/packages/chrome-qwen-bridge/CONNECTION_STATUS.md
new file mode 100644
index 00000000..b6ab8331
--- /dev/null
+++ b/packages/chrome-qwen-bridge/CONNECTION_STATUS.md
@@ -0,0 +1,62 @@
+#!/bin/bash
+
+echo "🎯 Chrome Extension 连接状态总结"
+echo "================================"
+echo ""
+
+GREEN='\033[0;32m'
+YELLOW='\033[1;33m'
+NC='\033[0m'
+
+echo -e "${GREEN}✅ Native Host 已正确配置${NC}"
+echo " - 配置文件位置正确"
+echo " - 使用 shell 包装脚本确保 Node.js 环境"
+echo " - 扩展 ID 已配置: cimaabkejokbhjkdnajgfniiolfjgbhd"
+echo ""
+
+echo -e "${GREEN}✅ Native Host 测试响应正常${NC}"
+echo " - 握手协议工作正常"
+echo " - 消息传递机制正确"
+echo ""
+
+echo -e "${GREEN}✅ Service Worker 已增强${NC}"
+echo " - 添加了详细的错误日志"
+echo " - 实现了握手超时机制"
+echo " - 改进了断开连接处理"
+echo ""
+
+echo -e "${YELLOW}📝 现在请进行以下操作:${NC}"
+echo ""
+echo "1. 重新加载 Chrome 扩展:"
+echo " open 'chrome://extensions/'"
+echo " 找到 'Qwen CLI Bridge' 并点击 🔄"
+echo ""
+echo "2. 点击扩展图标测试:"
+echo " - 点击 'Connect to Qwen CLI'"
+echo " - 连接应该会成功"
+echo ""
+echo "3. 如果仍有问题:"
+echo " a) 查看 Service Worker 控制台:"
+echo " open 'chrome://extensions/?id=cimaabkejokbhjkdnajgfniiolfjgbhd'"
+echo " 点击 'Service Worker' 查看日志"
+echo ""
+echo " b) 查看 Native Host 日志:"
+echo " tail -f /tmp/qwen-bridge-host.log"
+echo ""
+echo " c) 运行调试控制台:"
+echo " open file://$PWD/debug-console.html"
+echo ""
+
+echo "================================"
+echo ""
+echo "🔍 常见问题排查:"
+echo ""
+echo "如果看到 'Native host has exited' 错误:"
+echo "- 确保 Node.js 已安装: node --version"
+echo "- 检查路径是否正确: ls -la native-host/run.sh"
+echo ""
+echo "如果看到 'Specified native messaging host not found':"
+echo "- 重新运行: ./set-extension-id.sh"
+echo "- 确认扩展 ID 正确"
+echo ""
+echo "连接现在应该能正常工作了!🎉"
\ No newline at end of file
diff --git a/packages/chrome-qwen-bridge/INSTALL.md b/packages/chrome-qwen-bridge/INSTALL.md
new file mode 100644
index 00000000..0a817d1c
--- /dev/null
+++ b/packages/chrome-qwen-bridge/INSTALL.md
@@ -0,0 +1,121 @@
+# 📦 Chrome Qwen Bridge - 安装指南
+
+## 🚀 快速安装(推荐)
+
+### 一键安装(首次用户)
+
+```bash
+# 进入项目目录
+cd packages/chrome-qwen-bridge
+
+# 运行安装向导
+npm run install:all
+```
+
+这个命令会:
+1. ✅ 引导你安装 Chrome 扩展
+2. ✅ 自动配置 Native Host
+3. ✅ 保存扩展 ID 供后续使用
+4. ✅ 启动调试环境
+
+## 📝 安装方式说明
+
+### 场景 1:从 Chrome Web Store 安装(未来)
+
+当扩展发布到 Chrome Web Store 后:
+1. 从商店安装扩展
+2. 运行 `npm run install:host`(会自动检测已安装的扩展)
+3. 完成!
+
+### 场景 2:开发者模式安装(当前)
+
+```bash
+# 步骤 1:安装扩展和 Native Host
+npm run install:all
+
+# 步骤 2:启动调试
+npm run dev
+```
+
+### 场景 3:分步安装
+
+```bash
+# 1. 仅安装 Chrome 扩展
+npm run install:extension
+
+# 2. 仅配置 Native Host
+npm run install:host
+
+# 3. 启动开发环境
+npm run dev
+```
+
+## 🔧 Native Host 说明
+
+### 什么是 Native Host?
+
+Native Host 是一个本地程序,允许 Chrome 扩展与本地应用(如 Qwen CLI)通信。出于安全考虑,Chrome 要求必须手动安装。
+
+### 智能安装器特性
+
+我们的 `smart-install.sh` 脚本会:
+
+1. **自动检测** - 尝试自动找到已安装的扩展
+2. **保存配置** - 记住扩展 ID,下次无需输入
+3. **通用模式** - 即使没有扩展 ID 也能配置
+4. **连接测试** - 可选的连接验证
+
+### 安装位置
+
+Native Host 配置文件位置:
+- **macOS**: `~/Library/Application Support/Google/Chrome/NativeMessagingHosts/`
+- **Linux**: `~/.config/google-chrome/NativeMessagingHosts/`
+
+## ❓ 常见问题
+
+### Q: 必须手动安装 Native Host 吗?
+
+A: 是的,这是 Chrome 的安全要求。但我们的智能安装器让这个过程非常简单。
+
+### Q: 如何找到扩展 ID?
+
+A:
+1. 打开 `chrome://extensions/`
+2. 找到 "Qwen CLI Bridge"
+3. ID 显示在扩展卡片上(类似 `abcdefghijklmnop...`)
+
+### Q: 重装扩展后需要重新配置吗?
+
+A: 如果扩展 ID 改变了,需要重新运行 `npm run install:host`。脚本会自动检测新的 ID。
+
+### Q: 如何验证安装成功?
+
+A: 运行 `npm run dev`,如果能看到插件图标并能点击连接,说明安装成功。
+
+## 📋 命令参考
+
+| 命令 | 说明 |
+|------|------|
+| `npm run install:all` | 完整安装向导 |
+| `npm run install:extension` | 仅安装扩展 |
+| `npm run install:host` | 仅配置 Native Host |
+| `npm run dev` | 启动调试环境 |
+| `npm run clean` | 清理所有配置和日志 |
+
+## 🔄 更新和重装
+
+如果需要重新安装:
+
+```bash
+# 清理旧配置
+npm run clean
+
+# 重新安装
+npm run install:all
+```
+
+## 📚 更多信息
+
+- [调试指南](./docs/debugging.md)
+- [API 文档](./docs/api-reference.md)
+- [架构设计](./docs/architecture.md)
\ No newline at end of file
diff --git a/packages/chrome-qwen-bridge/QUICK_START.md b/packages/chrome-qwen-bridge/QUICK_START.md
new file mode 100644
index 00000000..1b6e43b4
--- /dev/null
+++ b/packages/chrome-qwen-bridge/QUICK_START.md
@@ -0,0 +1,64 @@
+# 🚀 快速开始
+
+## 首次使用
+
+如果是第一次使用,请运行:
+
+```bash
+npm run dev
+```
+
+系统会自动检测并引导你完成:
+1. 📦 手动安装 Chrome 插件
+2. 🔧 配置 Native Host
+3. 🎯 启动调试环境
+
+## 安装步骤说明
+
+### 第一次运行时需要:
+
+1. **手动加载插件到 Chrome**
+ - 打开 `chrome://extensions/`
+ - 开启「开发者模式」(右上角)
+ - 点击「加载已解压的扩展程序」
+ - 选择 `extension` 目录
+ - **记下扩展 ID**(很重要!)
+
+2. **输入扩展 ID**
+ - 脚本会提示你输入
+ - 这样 Native Host 才能识别插件
+
+3. **完成后**
+ - 以后运行 `npm run dev` 就会自动加载所有内容
+
+## 常见问题
+
+### Q: 为什么需要手动加载插件?
+A: Chrome 安全机制要求开发者模式的插件必须手动加载一次。
+
+### Q: 插件图标在哪里?
+A: 点击 Chrome 工具栏的拼图图标,找到 "Qwen CLI Bridge" 并点击固定。
+
+### Q: 如何知道插件是否加载成功?
+A:
+- 在 `chrome://extensions/` 能看到插件
+- 工具栏有插件图标
+- 点击图标能看到弹出窗口
+
+## 调试命令
+
+```bash
+npm run dev # 启动调试环境(首次会引导安装)
+npm run logs # 查看 Native Host 日志
+npm run logs:qwen # 查看 Qwen 服务器日志
+npm run clean # 清理所有临时文件
+```
+
+## 文件说明
+
+```
+├── first-install.sh # 首次安装向导
+├── debug.sh # 调试启动脚本
+├── .extension-id # 保存的扩展 ID(自动生成)
+└── extension/ # Chrome 插件源码
+```
\ No newline at end of file
diff --git a/packages/chrome-qwen-bridge/README.md b/packages/chrome-qwen-bridge/README.md
new file mode 100644
index 00000000..1ccaf4ea
--- /dev/null
+++ b/packages/chrome-qwen-bridge/README.md
@@ -0,0 +1,204 @@
+# Qwen CLI Bridge - Chrome Extension
+
+A Chrome extension that bridges your browser with Qwen CLI, enabling AI-powered analysis and interaction with web content.
+
+> This package is part of the [Qwen Code](https://github.com/QwenLM/qwen-code) mono repository.
+
+## Features
+
+- **Page Data Extraction**: Extract structured data from any webpage including text, links, images, and metadata
+- **Screenshot Capture**: Capture and analyze screenshots with AI
+- **Console & Network Monitoring**: Monitor console logs and network requests
+- **Selected Text Processing**: Send selected text to Qwen CLI for processing
+- **AI Analysis**: Leverage Qwen's AI capabilities to analyze web content
+- **MCP Server Integration**: Support for multiple MCP (Model Context Protocol) servers
+
+## Architecture
+
+```
+┌─────────────────────┐
+│ Chrome Extension │
+│ - Content Script │
+│ - Background Worker│
+│ - Popup UI │
+└──────────┬──────────┘
+ │
+ Native Messaging
+ │
+ ┌──────▼──────────┐
+ │ Native Host │
+ │ (Node.js) │
+ └──────┬──────────┘
+ │
+ ┌──────▼──────────┐
+ │ Qwen CLI │
+ │ + MCP Servers │
+ └─────────────────┘
+```
+
+## Installation
+
+### Prerequisites
+
+1. **Node.js**: Install from [nodejs.org](https://nodejs.org/)
+2. **Qwen CLI**: Install the Qwen CLI tool (required for full functionality)
+3. **Chrome Browser**: Version 88 or higher
+
+### Step 1: Install the Chrome Extension
+
+1. Open Chrome and navigate to `chrome://extensions/`
+2. Enable "Developer mode" (toggle in top right)
+3. Click "Load unpacked"
+4. Select the `chrome-qwen-bridge/extension` folder
+5. Note the Extension ID that appears (you'll need this for the next step)
+
+### Step 2: Install the Native Messaging Host
+
+The Native Messaging Host allows the Chrome extension to communicate with Qwen CLI.
+
+#### macOS/Linux
+
+```bash
+cd chrome-qwen-bridge/native-host
+./install.sh
+```
+
+When prompted, enter your Chrome Extension ID.
+
+#### Windows
+
+1. Run Command Prompt as Administrator
+2. Navigate to the `native-host` directory:
+ ```cmd
+ cd chrome-qwen-bridge\native-host
+ ```
+3. Run the installation script:
+ ```cmd
+ install.bat
+ ```
+4. Enter your Chrome Extension ID when prompted
+
+### Step 3: Configure Qwen CLI (Optional)
+
+If you want to use MCP servers with the extension:
+
+```bash
+# Add chrome-devtools MCP server
+qwen mcp add chrome-devtools
+
+# Add other MCP servers as needed
+qwen mcp add playwright-mcp
+```
+
+## Usage
+
+### Basic Usage
+
+1. Click the Qwen CLI Bridge extension icon in Chrome
+2. Click "Connect to Qwen CLI" to establish connection
+3. Click "Start Qwen CLI" to launch the CLI process
+4. Use the action buttons to:
+ - Extract and analyze page data
+ - Capture screenshots
+ - Send selected text to Qwen
+ - Monitor console and network logs
+
+### Advanced Settings
+
+In the popup's "Advanced Settings" section, you can configure:
+
+- **MCP Servers**: Comma-separated list of MCP servers to load
+- **HTTP Port**: Port for Qwen CLI HTTP server (default: 8080)
+- **Auto-connect**: Automatically connect when opening the popup
+
+### API Actions
+
+The extension supports the following actions that can be sent to Qwen CLI:
+
+- `analyze_page`: Analyze extracted page data
+- `analyze_screenshot`: Analyze captured screenshot
+- `ai_analyze`: Perform AI analysis on content
+- `process_text`: Process selected text
+- Custom actions based on your MCP server configurations
+
+## Development
+
+### Project Structure
+
+```
+chrome-qwen-bridge/
+├── extension/ # Chrome extension source
+│ ├── manifest.json # Extension manifest
+│ ├── background/ # Service worker
+│ ├── content/ # Content scripts
+│ ├── popup/ # Popup UI
+│ └── icons/ # Extension icons
+├── native-host/ # Native messaging host
+│ ├── host.js # Node.js host script
+│ ├── manifest.json # Native host manifest
+│ └── install scripts # Platform-specific installers
+└── docs/ # Documentation
+```
+
+### Building from Source
+
+1. Clone the repository
+2. No build step required - the extension uses vanilla JavaScript
+3. Load the extension as unpacked in Chrome for development
+
+### Testing
+
+1. Enable Chrome Developer Tools
+2. Check the extension's background page console for logs
+3. Native host logs are written to:
+ - macOS/Linux: `/tmp/qwen-bridge-host.log`
+ - Windows: `%TEMP%\qwen-bridge-host.log`
+
+## Troubleshooting
+
+### Extension not connecting to Native Host
+
+1. Verify Node.js is installed: `node --version`
+2. Check that the Native Host is properly installed
+3. Ensure the Extension ID in the manifest matches your actual extension
+4. Check logs for errors
+
+### Qwen CLI not starting
+
+1. Verify Qwen CLI is installed: `qwen --version`
+2. Check that Qwen CLI can run normally from terminal
+3. Review Native Host logs for error messages
+
+### No response from Qwen CLI
+
+1. Ensure Qwen CLI server is running
+2. Check the configured HTTP port is not in use
+3. Verify MCP servers are properly configured
+
+## Security Considerations
+
+- The extension requires broad permissions to function properly
+- Native Messaging Host runs with user privileges
+- All communication between components uses structured JSON messages
+- No sensitive data is stored; all processing is ephemeral
+
+## Contributing
+
+Contributions are welcome! Please:
+
+1. Fork the repository
+2. Create a feature branch
+3. Make your changes
+4. Test thoroughly
+5. Submit a pull request
+
+## License
+
+MIT License - See LICENSE file for details
+
+## Support
+
+For issues, questions, or feature requests:
+- Open an issue on GitHub
+- Check the logs for debugging information
+- Ensure all prerequisites are properly installed
\ No newline at end of file
diff --git a/packages/chrome-qwen-bridge/build.sh b/packages/chrome-qwen-bridge/build.sh
new file mode 100755
index 00000000..8e2633a0
--- /dev/null
+++ b/packages/chrome-qwen-bridge/build.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+# Build script for Chrome extension package
+
+echo "Building Chrome Qwen Bridge..."
+
+# Ensure we're in the right directory
+SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+cd "$SCRIPT_DIR"
+
+# Create dist directory
+mkdir -p dist
+
+# Copy extension files to dist
+echo "Copying extension files..."
+cp -r extension dist/
+
+# Create a zip file for Chrome Web Store
+echo "Creating extension package..."
+cd dist
+zip -r ../chrome-qwen-bridge.zip extension/
+cd ..
+
+echo "✅ Build complete!"
+echo " Extension package: chrome-qwen-bridge.zip"
+echo " Extension files: dist/extension/"
\ No newline at end of file
diff --git a/packages/chrome-qwen-bridge/debug-chrome.sh b/packages/chrome-qwen-bridge/debug-chrome.sh
new file mode 100755
index 00000000..58d0246b
--- /dev/null
+++ b/packages/chrome-qwen-bridge/debug-chrome.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+
+echo "🔍 Chrome Extension 调试启动器"
+echo "================================"
+echo ""
+
+# 检查 Chrome 是否已经运行
+if pgrep -x "Google Chrome" > /dev/null; then
+ echo "⚠️ Chrome 已在运行,请先关闭 Chrome 再运行此脚本"
+ echo " 或者在新的 Chrome 窗口中手动操作"
+ echo ""
+fi
+
+# 获取扩展路径
+EXTENSION_PATH="$PWD/extension"
+echo "📂 扩展路径: $EXTENSION_PATH"
+
+# 读取保存的扩展 ID
+if [ -f ".extension-id" ]; then
+ EXTENSION_ID=$(cat .extension-id)
+ echo "🆔 扩展 ID: $EXTENSION_ID"
+else
+ echo "⚠️ 未找到扩展 ID,首次加载后会自动保存"
+fi
+
+echo ""
+echo "正在启动 Chrome 调试模式..."
+echo ""
+
+# 启动 Chrome with debugging
+open -na "Google Chrome" --args \
+ --load-extension="$EXTENSION_PATH" \
+ --auto-open-devtools-for-tabs \
+ --enable-logging \
+ --v=1 \
+ "file://$PWD/debug-console.html"
+
+echo "✅ Chrome 已启动"
+echo ""
+echo "📝 调试步骤:"
+echo "1. Chrome 会自动加载扩展并打开调试控制台"
+echo "2. 点击 'Test Connection' 测试连接"
+echo "3. 如果连接失败,点击 'View Background Logs' 查看详细日志"
+echo ""
+echo "💡 提示:"
+echo "- 按 F12 打开开发者工具查看控制台输出"
+echo "- 在 chrome://extensions/ 页面点击 'Service Worker' 查看后台日志"
+echo "- 日志文件: /tmp/qwen-bridge-host.log"
+echo ""
+echo "📋 监控日志 (Ctrl+C 退出):"
+echo "----------------------------"
+tail -f /tmp/qwen-bridge-host.log 2>/dev/null || echo "等待日志生成..."
\ No newline at end of file
diff --git a/packages/chrome-qwen-bridge/debug-console.html b/packages/chrome-qwen-bridge/debug-console.html
new file mode 100644
index 00000000..ba02fb17
--- /dev/null
+++ b/packages/chrome-qwen-bridge/debug-console.html
@@ -0,0 +1,178 @@
+
+
+
+ Chrome Extension Debug Console
+
+
+
+ 🔧 Chrome Extension Debug Console
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/chrome-qwen-bridge/debug.sh b/packages/chrome-qwen-bridge/debug.sh
new file mode 100755
index 00000000..bf890107
--- /dev/null
+++ b/packages/chrome-qwen-bridge/debug.sh
@@ -0,0 +1,376 @@
+#!/bin/bash
+
+# Qwen CLI Bridge - macOS 一键调试脚本
+
+# 颜色定义
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[1;33m'
+BLUE='\033[0;34m'
+CYAN='\033[0;36m'
+NC='\033[0m' # No Color
+
+# 获取脚本目录
+SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+# 检查是否首次安装
+if [[ ! -f "$SCRIPT_DIR/.extension-id" ]]; then
+ echo -e "${YELLOW}╔════════════════════════════════════════════════════════════════╗${NC}"
+ echo -e "${YELLOW}║ ║${NC}"
+ echo -e "${YELLOW}║ ⚠️ 检测到首次运行,需要先安装插件 ║${NC}"
+ echo -e "${YELLOW}║ ║${NC}"
+ echo -e "${YELLOW}╚════════════════════════════════════════════════════════════════╝${NC}"
+ echo ""
+ echo -e "${CYAN}即将启动首次安装向导...${NC}"
+ sleep 2
+ exec "$SCRIPT_DIR/first-install.sh"
+ exit 0
+fi
+
+# 清屏显示标题
+clear
+echo -e "${CYAN}╔════════════════════════════════════════════════════════════════╗${NC}"
+echo -e "${CYAN}║ ║${NC}"
+echo -e "${CYAN}║ 🚀 Qwen CLI Bridge - macOS 调试环境 ║${NC}"
+echo -e "${CYAN}║ ║${NC}"
+echo -e "${CYAN}╚════════════════════════════════════════════════════════════════╝${NC}"
+echo ""
+
+# 第一步:检查环境
+echo -e "${BLUE}[1/5]${NC} 检查开发环境..."
+
+# 检查 Node.js
+if ! command -v node &> /dev/null; then
+ echo -e "${RED}✗${NC} Node.js 未安装,请先安装 Node.js"
+ echo " 访问 https://nodejs.org 下载安装"
+ exit 1
+fi
+echo -e "${GREEN}✓${NC} Node.js $(node --version)"
+
+# 检查 Chrome
+CHROME_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
+if [[ ! -f "$CHROME_PATH" ]]; then
+ echo -e "${RED}✗${NC} Chrome 未找到"
+ exit 1
+fi
+echo -e "${GREEN}✓${NC} Chrome 已安装"
+
+# 第二步:配置 Native Host
+echo -e "\n${BLUE}[2/5]${NC} 配置 Native Host..."
+
+MANIFEST_DIR="$HOME/Library/Application Support/Google/Chrome/NativeMessagingHosts"
+mkdir -p "$MANIFEST_DIR"
+
+cat > "$MANIFEST_DIR/com.qwen.cli.bridge.json" << EOF
+{
+ "name": "com.qwen.cli.bridge",
+ "description": "Native messaging host for Qwen CLI Bridge",
+ "path": "$SCRIPT_DIR/native-host/host.js",
+ "type": "stdio",
+ "allowed_origins": ["chrome-extension://*/"]
+}
+EOF
+
+echo -e "${GREEN}✓${NC} Native Host 已配置"
+
+# 第三步:检查 Qwen CLI(可选)
+echo -e "\n${BLUE}[3/5]${NC} 检查 Qwen CLI..."
+
+QWEN_AVAILABLE=false
+if command -v qwen &> /dev/null; then
+ QWEN_AVAILABLE=true
+ echo -e "${GREEN}✓${NC} Qwen CLI $(qwen --version 2>/dev/null || echo "已安装")"
+
+ # 尝试启动 Qwen server
+ if ! lsof -i:8080 &> /dev/null; then
+ echo -e "${CYAN}→${NC} 启动 Qwen server (端口 8080)..."
+ qwen server --port 8080 > /tmp/qwen-server.log 2>&1 &
+ QWEN_PID=$!
+ sleep 2
+
+ if kill -0 $QWEN_PID 2>/dev/null; then
+ echo -e "${GREEN}✓${NC} Qwen server 已启动 (PID: $QWEN_PID)"
+ else
+ echo -e "${YELLOW}!${NC} Qwen server 启动失败,继续运行..."
+ QWEN_AVAILABLE=false
+ fi
+ else
+ echo -e "${YELLOW}!${NC} 端口 8080 已被占用"
+ fi
+else
+ echo -e "${YELLOW}!${NC} Qwen CLI 未安装(插件基础功能仍可使用)"
+fi
+
+# 第四步:启动测试页面
+echo -e "\n${BLUE}[4/5]${NC} 启动测试服务器..."
+
+# 创建测试页面
+cat > /tmp/qwen-test.html << 'HTML'
+
+
+
+
+ Qwen CLI Bridge 测试页面
+
+
+
+
+
+
+
+
+
📝 测试功能
+
+
+
+
+
+
+
+
+
📄 示例内容
+
这是一段可以被插件提取的示例文本。你可以选择这段文字,然后使用插件的"Send Selected Text"功能。
+
+ - 列表项 1:Lorem ipsum dolor sit amet
+ - 列表项 2:Consectetur adipiscing elit
+ - 列表项 3:Sed do eiusmod tempor incididunt
+
+
+ "这是一个引用块,可以测试 Markdown 转换功能。"
+
+
+
+
+
🎯 使用说明
+
+ - 点击 Chrome 工具栏中的插件图标
+ - 点击 "Connect to Qwen CLI" 建立连接
+ - 如果安装了 Qwen CLI,点击 "Start Qwen CLI"
+ - 使用各种功能按钮测试插件功能
+ - 按 F12 打开 DevTools 查看详细日志
+
+
+
+
+
+
+
+
+HTML
+
+# 启动 Python HTTP 服务器
+cd /tmp
+python3 -m http.server 3000 > /tmp/test-server.log 2>&1 &
+TEST_PID=$!
+sleep 1
+
+echo -e "${GREEN}✓${NC} 测试服务器已启动 (http://localhost:3000)"
+
+# 第五步:启动 Chrome
+echo -e "\n${BLUE}[5/5]${NC} 启动 Chrome 并加载插件..."
+
+"$CHROME_PATH" \
+ --load-extension="$SCRIPT_DIR/extension" \
+ --auto-open-devtools-for-tabs \
+ --no-first-run \
+ --no-default-browser-check \
+ "http://localhost:3000/qwen-test.html" &
+
+CHROME_PID=$!
+
+echo -e "${GREEN}✓${NC} Chrome 已启动"
+
+# 显示最终状态
+echo ""
+echo -e "${GREEN}╔════════════════════════════════════════════════════════════════╗${NC}"
+echo -e "${GREEN}║ ║${NC}"
+echo -e "${GREEN}║ ✅ 调试环境启动成功! ║${NC}"
+echo -e "${GREEN}║ ║${NC}"
+echo -e "${GREEN}╚════════════════════════════════════════════════════════════════╝${NC}"
+echo ""
+echo -e "${CYAN}📍 服务状态:${NC}"
+echo -e " • Chrome: 运行中"
+echo -e " • 测试页面: ${BLUE}http://localhost:3000/qwen-test.html${NC}"
+echo -e " • 插件: 已加载到工具栏"
+
+if [ "$QWEN_AVAILABLE" = true ]; then
+ echo -e " • Qwen Server: ${BLUE}http://localhost:8080${NC}"
+fi
+
+echo ""
+echo -e "${CYAN}🔍 调试位置:${NC}"
+echo -e " • 插件日志: Chrome DevTools Console"
+echo -e " • 后台脚本: chrome://extensions → Service Worker"
+echo -e " • Native Host: /tmp/qwen-bridge-host.log"
+
+if [ "$QWEN_AVAILABLE" = true ]; then
+ echo -e " • Qwen 日志: /tmp/qwen-server.log"
+fi
+
+echo ""
+echo -e "${YELLOW}按 Ctrl+C 停止所有服务${NC}"
+echo ""
+
+# 清理函数
+cleanup() {
+ echo -e "\n${YELLOW}正在停止服务...${NC}"
+
+ # 停止进程
+ [ ! -z "$TEST_PID" ] && kill $TEST_PID 2>/dev/null
+ [ ! -z "$QWEN_PID" ] && kill $QWEN_PID 2>/dev/null
+
+ echo -e "${GREEN}✓${NC} 已停止所有服务"
+ exit 0
+}
+
+# 捕获中断信号
+trap cleanup INT TERM
+
+# 保持运行
+while true; do
+ sleep 1
+done
\ No newline at end of file
diff --git a/packages/chrome-qwen-bridge/dev.js b/packages/chrome-qwen-bridge/dev.js
new file mode 100644
index 00000000..fdfcc9d9
--- /dev/null
+++ b/packages/chrome-qwen-bridge/dev.js
@@ -0,0 +1,511 @@
+#!/usr/bin/env node
+
+/**
+ * 开发环境一键启动脚本
+ * 自动完成所有配置和启动步骤
+ */
+
+const { spawn, exec } = require('child_process');
+const fs = require('fs');
+const path = require('path');
+const os = require('os');
+const readline = require('readline');
+
+// 颜色输出
+const colors = {
+ reset: '\x1b[0m',
+ bright: '\x1b[1m',
+ green: '\x1b[32m',
+ yellow: '\x1b[33m',
+ blue: '\x1b[34m',
+ red: '\x1b[31m',
+ cyan: '\x1b[36m'
+};
+
+function log(message, color = '') {
+ console.log(`${color}${message}${colors.reset}`);
+}
+
+function logStep(step, message) {
+ log(`\n[${step}] ${message}`, colors.bright + colors.blue);
+}
+
+function logSuccess(message) {
+ log(`✅ ${message}`, colors.green);
+}
+
+function logWarning(message) {
+ log(`⚠️ ${message}`, colors.yellow);
+}
+
+function logError(message) {
+ log(`❌ ${message}`, colors.red);
+}
+
+function logInfo(message) {
+ log(`ℹ️ ${message}`, colors.cyan);
+}
+
+// 检查命令是否存在
+function commandExists(command) {
+ return new Promise((resolve) => {
+ exec(`command -v ${command}`, (error) => {
+ resolve(!error);
+ });
+ });
+}
+
+// 获取 Chrome 路径
+function getChromePath() {
+ const platform = process.platform;
+
+ const chromePaths = {
+ darwin: [
+ '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
+ '/Applications/Chromium.app/Contents/MacOS/Chromium'
+ ],
+ win32: [
+ 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
+ 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
+ process.env.LOCALAPPDATA + '\\Google\\Chrome\\Application\\chrome.exe'
+ ],
+ linux: [
+ '/usr/bin/google-chrome',
+ '/usr/bin/chromium-browser',
+ '/usr/bin/chromium'
+ ]
+ };
+
+ const paths = chromePaths[platform] || [];
+
+ for (const chromePath of paths) {
+ if (fs.existsSync(chromePath)) {
+ return chromePath;
+ }
+ }
+
+ return null;
+}
+
+// 获取扩展 ID
+function getExtensionId(extensionPath) {
+ // 这是一个简化的方法,实际的 Extension ID 是通过 Chrome 生成的
+ // 开发时可以固定使用一个 ID
+ return 'development-extension-id';
+}
+
+// 安装 Native Host
+async function installNativeHost(extensionPath) {
+ logStep(2, 'Installing Native Host...');
+
+ const hostPath = path.join(extensionPath, 'native-host');
+ const scriptPath = path.join(hostPath, 'host.js');
+
+ if (!fs.existsSync(scriptPath)) {
+ logError('Native host script not found!');
+ return false;
+ }
+
+ const platform = process.platform;
+ const hostName = 'com.qwen.cli.bridge';
+
+ let manifestDir;
+ if (platform === 'darwin') {
+ manifestDir = path.join(os.homedir(), 'Library/Application Support/Google/Chrome/NativeMessagingHosts');
+ } else if (platform === 'linux') {
+ manifestDir = path.join(os.homedir(), '.config/google-chrome/NativeMessagingHosts');
+ } else if (platform === 'win32') {
+ // Windows 需要写注册表
+ logWarning('Windows requires registry modification. Please run install.bat manually.');
+ return true;
+ } else {
+ logError('Unsupported platform');
+ return false;
+ }
+
+ // 创建目录
+ if (!fs.existsSync(manifestDir)) {
+ fs.mkdirSync(manifestDir, { recursive: true });
+ }
+
+ // 创建 manifest 文件
+ const manifest = {
+ name: hostName,
+ description: 'Native messaging host for Qwen CLI Bridge',
+ path: scriptPath,
+ type: 'stdio',
+ allowed_origins: [
+ 'chrome-extension://jniepomhbdkeifkadbfolbcihcmfpfjo/', // 开发用 ID
+ 'chrome-extension://*/' // 允许任何扩展(仅开发环境)
+ ]
+ };
+
+ const manifestPath = path.join(manifestDir, `${hostName}.json`);
+ fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));
+
+ logSuccess(`Native Host installed at: ${manifestPath}`);
+ return true;
+}
+
+// 检查 Qwen CLI
+async function checkQwenCli() {
+ logStep(3, 'Checking Qwen CLI...');
+
+ const qwenExists = await commandExists('qwen');
+
+ if (qwenExists) {
+ logSuccess('Qwen CLI is installed');
+
+ // 获取版本
+ return new Promise((resolve) => {
+ exec('qwen --version', (error, stdout) => {
+ if (!error && stdout) {
+ logInfo(`Version: ${stdout.trim()}`);
+ }
+ resolve(true);
+ });
+ });
+ } else {
+ logWarning('Qwen CLI is not installed');
+ logInfo('You can still use the extension, but some features will be limited');
+ return false;
+ }
+}
+
+// 启动 Qwen CLI 服务器
+function startQwenServer(port = 8080) {
+ logStep(4, 'Starting Qwen CLI Server...');
+
+ return new Promise((resolve) => {
+ // 检查端口是否被占用
+ exec(`lsof -i:${port} || netstat -an | grep ${port}`, (error, stdout) => {
+ if (stdout && stdout.length > 0) {
+ logWarning(`Port ${port} is already in use`);
+ logInfo('Qwen server might already be running');
+ resolve(null);
+ return;
+ }
+
+ // 启动服务器
+ const qwenProcess = spawn('qwen', ['server', '--port', String(port)], {
+ detached: false,
+ stdio: ['ignore', 'pipe', 'pipe']
+ });
+
+ qwenProcess.stdout.on('data', (data) => {
+ const output = data.toString();
+ if (output.includes('Server started') || output.includes('listening')) {
+ logSuccess(`Qwen server started on port ${port}`);
+ resolve(qwenProcess);
+ }
+ });
+
+ qwenProcess.stderr.on('data', (data) => {
+ logError(`Qwen server error: ${data}`);
+ });
+
+ qwenProcess.on('error', (error) => {
+ logError(`Failed to start Qwen server: ${error.message}`);
+ resolve(null);
+ });
+
+ // 超时处理
+ setTimeout(() => {
+ logWarning('Qwen server start timeout, continuing anyway...');
+ resolve(qwenProcess);
+ }, 5000);
+ });
+ });
+}
+
+// 启动 Chrome 开发模式
+function startChrome(extensionPath, chromePath) {
+ logStep(5, 'Starting Chrome with extension...');
+
+ const args = [
+ `--load-extension=${extensionPath}`,
+ '--auto-open-devtools-for-tabs', // 自动打开 DevTools
+ '--disable-extensions-except=' + extensionPath,
+ '--no-first-run',
+ '--no-default-browser-check',
+ '--disable-default-apps',
+ '--disable-popup-blocking',
+ '--disable-translate',
+ '--disable-sync',
+ '--no-pings',
+ '--disable-background-timer-throttling',
+ '--disable-renderer-backgrounding',
+ '--disable-device-discovery-notifications'
+ ];
+
+ // 开发模式特定参数
+ if (process.env.DEBUG === 'true') {
+ args.push('--enable-logging=stderr');
+ args.push('--v=1');
+ }
+
+ // 添加测试页面
+ args.push('http://localhost:3000'); // 或其他测试页面
+
+ const chromeProcess = spawn(chromePath, args, {
+ detached: false,
+ stdio: 'inherit'
+ });
+
+ chromeProcess.on('error', (error) => {
+ logError(`Failed to start Chrome: ${error.message}`);
+ });
+
+ logSuccess('Chrome started with extension loaded');
+ logInfo('Extension should be visible in the toolbar');
+
+ return chromeProcess;
+}
+
+// 创建测试服务器
+function createTestServer(port = 3000) {
+ logStep(6, 'Starting test server...');
+
+ const http = require('http');
+ const testHtml = `
+
+
+
+ Qwen CLI Bridge Test Page
+
+
+
+
+
🚀 Qwen CLI Bridge Test Page
+
+
+
Test Content
+
This is a test page for the Qwen CLI Bridge Chrome Extension.
+
Click the extension icon in your toolbar to start testing!
+
+
Sample Data
+
+ - Item 1: Lorem ipsum dolor sit amet
+ - Item 2: Consectetur adipiscing elit
+ - Item 3: Sed do eiusmod tempor incididunt
+
+
+
Test Actions
+
+
+
+
+
Console Output
+
+
+
+
+
Test Form
+
+
+
+
+
Images
+

+
+
+
+
+
+
+ `;
+
+ const server = http.createServer((req, res) => {
+ res.writeHead(200, { 'Content-Type': 'text/html' });
+ res.end(testHtml);
+ });
+
+ server.listen(port, () => {
+ logSuccess(`Test server running at http://localhost:${port}`);
+ });
+
+ return server;
+}
+
+// 主函数
+async function main() {
+ console.clear();
+ log(`
+╔════════════════════════════════════════════════════════════════╗
+║ ║
+║ 🚀 Qwen CLI Bridge - Development Environment Setup ║
+║ ║
+╚════════════════════════════════════════════════════════════════╝
+`, colors.bright + colors.cyan);
+
+ const extensionPath = path.join(__dirname, 'extension');
+
+ // Step 1: 检查 Chrome
+ logStep(1, 'Checking Chrome installation...');
+ const chromePath = getChromePath();
+
+ if (!chromePath) {
+ logError('Chrome not found! Please install Google Chrome.');
+ process.exit(1);
+ }
+
+ logSuccess(`Chrome found at: ${chromePath}`);
+
+ // Step 2: 安装 Native Host
+ const nativeHostInstalled = await installNativeHost(__dirname);
+ if (!nativeHostInstalled && process.platform === 'win32') {
+ logWarning('Please run install.bat as Administrator to complete Native Host setup');
+ }
+
+ // Step 3: 检查 Qwen CLI
+ const qwenInstalled = await checkQwenCli();
+
+ // Step 4: 启动 Qwen 服务器(如果已安装)
+ let qwenProcess = null;
+ if (qwenInstalled) {
+ qwenProcess = await startQwenServer(8080);
+ }
+
+ // Step 5: 启动测试服务器
+ const testServer = createTestServer(3000);
+
+ // Step 6: 启动 Chrome
+ await new Promise(resolve => setTimeout(resolve, 1000)); // 等待服务器启动
+ const chromeProcess = startChrome(extensionPath, chromePath);
+
+ // 设置清理处理
+ const cleanup = () => {
+ log('\n\nShutting down...', colors.yellow);
+
+ if (qwenProcess) {
+ qwenProcess.kill();
+ logInfo('Qwen server stopped');
+ }
+
+ if (testServer) {
+ testServer.close();
+ logInfo('Test server stopped');
+ }
+
+ if (chromeProcess) {
+ chromeProcess.kill();
+ logInfo('Chrome stopped');
+ }
+
+ process.exit(0);
+ };
+
+ process.on('SIGINT', cleanup);
+ process.on('SIGTERM', cleanup);
+
+ // 显示使用说明
+ log(`
+╔════════════════════════════════════════════════════════════════╗
+║ ✅ Setup Complete! ║
+╠════════════════════════════════════════════════════════════════╣
+║ ║
+║ 📍 Chrome is running with the extension loaded ║
+║ 📍 Test page: http://localhost:3000 ║
+║ ${qwenInstalled ? '📍 Qwen server: http://localhost:8080 ' : '📍 Qwen CLI not installed (limited functionality) '}║
+║ ║
+║ 📝 How to debug: ║
+║ 1. Click the extension icon in Chrome toolbar ║
+║ 2. Open Chrome DevTools (F12) to see console logs ║
+║ 3. Check background page: chrome://extensions → Details ║
+║ 4. Native Host logs: /tmp/qwen-bridge-host.log ║
+║ ║
+║ 🛑 Press Ctrl+C to stop all services ║
+║ ║
+╚════════════════════════════════════════════════════════════════╝
+`, colors.bright + colors.green);
+
+ // 保持进程运行
+ await new Promise(() => {});
+}
+
+// 运行
+main().catch((error) => {
+ logError(`Fatal error: ${error.message}`);
+ process.exit(1);
+});
\ No newline at end of file
diff --git a/packages/chrome-qwen-bridge/diagnose.sh b/packages/chrome-qwen-bridge/diagnose.sh
new file mode 100755
index 00000000..852fff8d
--- /dev/null
+++ b/packages/chrome-qwen-bridge/diagnose.sh
@@ -0,0 +1,139 @@
+#!/bin/bash
+
+echo "🔍 Chrome Qwen Bridge 连接诊断"
+echo "==============================="
+echo ""
+
+# 颜色定义
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[1;33m'
+BLUE='\033[0;34m'
+NC='\033[0m'
+
+# 1. 检查 Native Host 配置
+echo -e "${BLUE}1. 检查 Native Host 配置${NC}"
+NATIVE_HOST_CONFIG="$HOME/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.qwen.cli.bridge.json"
+
+if [ -f "$NATIVE_HOST_CONFIG" ]; then
+ echo -e "${GREEN}✓${NC} Native Host 配置存在"
+ echo " 内容:"
+ cat "$NATIVE_HOST_CONFIG" | sed 's/^/ /'
+
+ # 检查路径是否正确
+ HOST_PATH=$(cat "$NATIVE_HOST_CONFIG" | grep '"path"' | sed 's/.*"path".*:.*"\(.*\)".*/\1/')
+ if [ -f "$HOST_PATH" ]; then
+ echo -e "${GREEN}✓${NC} Host 文件存在: $HOST_PATH"
+ # 检查是否可执行
+ if [ -x "$HOST_PATH" ]; then
+ echo -e "${GREEN}✓${NC} Host 文件可执行"
+ else
+ echo -e "${RED}✗${NC} Host 文件不可执行"
+ echo " 修复: chmod +x '$HOST_PATH'"
+ fi
+ else
+ echo -e "${RED}✗${NC} Host 文件不存在: $HOST_PATH"
+ fi
+else
+ echo -e "${RED}✗${NC} Native Host 配置不存在"
+ echo " 请运行: npm run install:host"
+fi
+echo ""
+
+# 2. 检查扩展 ID
+echo -e "${BLUE}2. 检查扩展 ID${NC}"
+if [ -f ".extension-id" ]; then
+ SAVED_ID=$(cat .extension-id)
+ echo -e "${GREEN}✓${NC} 保存的扩展 ID: $SAVED_ID"
+
+ # 检查配置中的 ID
+ if grep -q "$SAVED_ID" "$NATIVE_HOST_CONFIG" 2>/dev/null; then
+ echo -e "${GREEN}✓${NC} Native Host 配置包含此 ID"
+ else
+ if grep -q 'chrome-extension://\*/' "$NATIVE_HOST_CONFIG" 2>/dev/null; then
+ echo -e "${YELLOW}⚠${NC} Native Host 使用通配符 (接受所有扩展)"
+ else
+ echo -e "${RED}✗${NC} Native Host 配置不包含此 ID"
+ fi
+ fi
+else
+ echo -e "${YELLOW}⚠${NC} 未保存扩展 ID"
+fi
+echo ""
+
+# 3. 测试 Native Host
+echo -e "${BLUE}3. 测试 Native Host 直接连接${NC}"
+if [ -f "$HOST_PATH" ]; then
+ # 发送测试消息
+ TEST_RESPONSE=$(echo '{"type":"handshake","version":"1.0.0"}' | \
+ python3 -c "
+import sys, json, struct
+msg = sys.stdin.read().strip()
+encoded = msg.encode('utf-8')
+sys.stdout.buffer.write(struct.pack('/dev/null | \
+ python3 -c "
+import sys, struct, json
+try:
+ length_bytes = sys.stdin.buffer.read(4)
+ if length_bytes:
+ length = struct.unpack('/dev/null)
+
+ if [ -n "$TEST_RESPONSE" ]; then
+ echo -e "${GREEN}✓${NC} Native Host 响应: $TEST_RESPONSE"
+ else
+ echo -e "${RED}✗${NC} Native Host 无响应"
+ fi
+else
+ echo -e "${YELLOW}⚠${NC} 跳过测试 (Host 文件不存在)"
+fi
+echo ""
+
+# 4. 检查日志
+echo -e "${BLUE}4. 检查最近的错误日志${NC}"
+LOG_FILE="/tmp/qwen-bridge-host.log"
+if [ -f "$LOG_FILE" ]; then
+ RECENT_ERRORS=$(tail -20 "$LOG_FILE" | grep -i error | tail -3)
+ if [ -n "$RECENT_ERRORS" ]; then
+ echo -e "${YELLOW}⚠${NC} 最近的错误:"
+ echo "$RECENT_ERRORS" | sed 's/^/ /'
+ else
+ echo -e "${GREEN}✓${NC} 日志中无最近错误"
+ fi
+else
+ echo " 日志文件不存在"
+fi
+echo ""
+
+# 5. 建议
+echo -e "${BLUE}5. 下一步操作建议${NC}"
+echo ""
+echo "请按以下步骤操作:"
+echo ""
+echo "1. 重新加载扩展:"
+echo " - 打开 chrome://extensions/"
+echo " - 找到 'Qwen CLI Bridge' 扩展"
+echo " - 点击重新加载按钮 (🔄)"
+echo ""
+echo "2. 查看 Service Worker 日志:"
+echo " - 在扩展卡片上点击 'Service Worker'"
+echo " - 在打开的控制台中查看错误信息"
+echo ""
+echo "3. 测试连接:"
+echo " - 点击扩展图标"
+echo " - 点击 'Connect to Qwen CLI'"
+echo " - 观察控制台输出"
+echo ""
+echo "4. 如果仍有问题:"
+echo " - 运行: ./debug-chrome.sh"
+echo " - 这会打开调试控制台帮助诊断"
+echo ""
+
+echo "==============================="
+echo "诊断完成"
\ No newline at end of file
diff --git a/packages/chrome-qwen-bridge/docs/README.md b/packages/chrome-qwen-bridge/docs/README.md
new file mode 100644
index 00000000..3804e6db
--- /dev/null
+++ b/packages/chrome-qwen-bridge/docs/README.md
@@ -0,0 +1,119 @@
+# Chrome Qwen Bridge 文档
+
+欢迎查阅 Chrome Qwen Bridge 的技术文档。本项目是一个 Chrome 扩展,用于连接浏览器与 Qwen CLI,实现 AI 增强的网页交互。
+
+## 📚 文档目录
+
+### 核心文档
+
+1. **[架构设计文档](./architecture.md)**
+ - 系统架构概览
+ - 组件职责划分
+ - 数据流设计
+ - 安全设计
+ - 性能优化策略
+
+2. **[实施计划文档](./implementation-plan.md)**
+ - 项目背景与需求
+ - 分阶段实施计划
+ - 技术栈选择
+ - 测试与部署计划
+ - 风险评估
+
+3. **[技术细节文档](./technical-details.md)**
+ - Native Messaging 协议详解
+ - Chrome Extension API 使用
+ - 数据提取算法
+ - 进程管理
+ - 调试技巧
+
+4. **[API 参考文档](./api-reference.md)**
+ - Chrome Extension APIs
+ - Native Host APIs
+ - Qwen CLI 集成
+ - 错误代码
+ - 使用示例
+
+### 快速链接
+
+- [主 README](../README.md) - 安装和使用指南
+- [GitHub 仓库](https://github.com/QwenLM/qwen-code) - 源代码
+- [问题反馈](https://github.com/QwenLM/qwen-code/issues) - 提交 Issue
+
+## 🎯 项目特性
+
+- ✅ **Native Messaging** - Chrome 官方推荐的安全通信方式
+- ✅ **MCP 服务器支持** - 集成多个 Model Context Protocol 服务器
+- ✅ **丰富的数据提取** - DOM、Console、网络请求等全方位数据
+- ✅ **AI 分析能力** - 利用 Qwen 的 AI 能力分析网页内容
+- ✅ **跨平台支持** - Windows、macOS、Linux 全平台
+
+## 🚀 快速开始
+
+1. **安装扩展**
+ ```bash
+ # 在 Chrome 中加载未打包的扩展
+ chrome://extensions/ → 开发者模式 → 加载已解压的扩展程序
+ 选择: packages/chrome-qwen-bridge/extension
+ ```
+
+2. **安装 Native Host**
+ ```bash
+ cd packages/chrome-qwen-bridge/native-host
+ ./install.sh # macOS/Linux
+ # 或
+ install.bat # Windows
+ ```
+
+3. **连接使用**
+ - 点击扩展图标
+ - 连接到 Qwen CLI
+ - 开始分析网页!
+
+## 📖 文档说明
+
+### 架构设计文档
+详细描述了系统的整体架构,包括 Chrome Extension、Native Host 和 Qwen CLI 三层架构的设计理念、组件职责、数据流向等核心概念。
+
+### 实施计划文档
+记录了项目从概念到实现的完整过程,包括各个开发阶段的任务分解、技术选型依据、测试计划和未来优化方向。
+
+### 技术细节文档
+深入探讨了关键技术的实现细节,如 Native Messaging 协议的具体实现、数据提取算法、进程管理策略等。
+
+### API 参考文档
+提供了所有 API 的完整参考,包括消息格式、参数说明、返回值、错误代码等,是开发和调试的重要参考。
+
+## 🛠 技术架构
+
+```
+Chrome Browser
+ ↓
+Chrome Extension (Content Script + Service Worker + Popup)
+ ↓
+Native Messaging API
+ ↓
+Native Host (Node.js)
+ ↓
+Qwen CLI + MCP Servers
+```
+
+## 📝 版本历史
+
+- **v1.0.0** (2024-12) - 初始版本
+ - 实现基础架构
+ - Native Messaging 通信
+ - 页面数据提取
+ - Qwen CLI 集成
+
+## 🤝 贡献指南
+
+欢迎贡献代码和文档!请查看主仓库的贡献指南。
+
+## 📄 许可证
+
+Apache-2.0 License
+
+---
+
+*本文档集是 Chrome Qwen Bridge 项目的技术参考,持续更新中。*
\ No newline at end of file
diff --git a/packages/chrome-qwen-bridge/docs/api-reference.md b/packages/chrome-qwen-bridge/docs/api-reference.md
new file mode 100644
index 00000000..1c2a7813
--- /dev/null
+++ b/packages/chrome-qwen-bridge/docs/api-reference.md
@@ -0,0 +1,646 @@
+# Chrome Qwen Bridge API 参考文档
+
+## Chrome Extension APIs
+
+### Background Service Worker
+
+#### 消息类型
+
+##### 连接管理
+
+**CONNECT**
+```javascript
+// 请求
+{
+ type: 'CONNECT'
+}
+
+// 响应
+{
+ success: boolean,
+ status?: string, // 'connected' | 'running' | 'stopped'
+ error?: string
+}
+```
+
+**GET_STATUS**
+```javascript
+// 请求
+{
+ type: 'GET_STATUS'
+}
+
+// 响应
+{
+ connected: boolean,
+ status: string // 'disconnected' | 'connecting' | 'connected' | 'running'
+}
+```
+
+##### Qwen CLI 控制
+
+**START_QWEN_CLI**
+```javascript
+// 请求
+{
+ type: 'START_QWEN_CLI',
+ config?: {
+ mcpServers?: string[], // MCP 服务器列表
+ httpPort?: number // HTTP 端口,默认 8080
+ }
+}
+
+// 响应
+{
+ success: boolean,
+ data?: {
+ status: string,
+ pid: number,
+ port: number
+ },
+ error?: string
+}
+```
+
+**STOP_QWEN_CLI**
+```javascript
+// 请求
+{
+ type: 'STOP_QWEN_CLI'
+}
+
+// 响应
+{
+ success: boolean,
+ data?: string,
+ error?: string
+}
+```
+
+##### 数据操作
+
+**EXTRACT_PAGE_DATA**
+```javascript
+// 请求
+{
+ type: 'EXTRACT_PAGE_DATA'
+}
+
+// 响应
+{
+ success: boolean,
+ data?: {
+ url: string,
+ title: string,
+ domain: string,
+ path: string,
+ timestamp: string,
+ meta: object,
+ content: {
+ text: string,
+ html: string,
+ markdown: string
+ },
+ links: Array<{
+ text: string,
+ href: string,
+ target: string,
+ isExternal: boolean
+ }>,
+ images: Array<{
+ src: string,
+ alt: string,
+ title: string,
+ width: number,
+ height: number
+ }>,
+ forms: Array<{
+ action: string,
+ method: string,
+ fields: Array