hangwin--mcp-chrome
1352 行
51 KiB
Markdown
1352 行
51 KiB
Markdown
# Quick Panel - 产品需求文档 (PRD)
|
||
|
||
> Chrome 快速启动面板 - 类 Raycast 的浏览器命令面板
|
||
|
||
## 一、产品概述
|
||
|
||
### 1.1 产品定位
|
||
|
||
Quick Panel 是一个 Chrome 扩展的快速启动面板,提供类似 Raycast/Alfred 的命令面板体验。用户可以通过全局快捷键唤起面板,快速搜索标签页、书签、历史记录,执行各种命令操作,实现浏览器能力的"命令化",要有商业级产品的应用体验。
|
||
|
||
### 1.2 核心价值主张
|
||
|
||
- **一处入口**:统一的入口覆盖导航、调试、自动化、内容分析
|
||
- **键盘优先**:全程键盘可用,减少鼠标切换,提升效率
|
||
- **本地优先**:数据本地处理,隐私安全可控
|
||
- **超越普通插件**:深度集成 CDP/Native Host/MCP,实现 Raycast 做不到的能力
|
||
|
||
### 1.3 目标用户
|
||
|
||
| 用户类型 | 核心需求 | 功能侧重 |
|
||
| --------------- | ------------------------------ | ------------------------------------ |
|
||
| 通用效率用户 | 标签页管理、快速导航、常用操作 | 搜索、书签、历史、截图、复制链接 |
|
||
| 开发者/技术用户 | 调试工具、网络分析、脚本注入 | DevTools、Cookie、LocalStorage、注入 |
|
||
|
||
### 1.4 入口形态
|
||
|
||
**页面覆盖层 (Overlay)** - 在任意网页上弹出悬浮面板,体验流畅。
|
||
|
||
- 通过 Content Script 注入到页面
|
||
- 使用 Shadow DOM 隔离样式和事件
|
||
- 全局快捷键唤起/关闭
|
||
|
||
---
|
||
|
||
## 二、功能规划
|
||
|
||
### 2.1 功能分类总览
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────┐
|
||
│ Quick Panel 功能架构 │
|
||
├─────────────────────────────────────────────────────────────────────┤
|
||
│ P0 核心功能 (MVP) │ P1 增值功能 │ P2 差异化功能 │
|
||
│ ───────────────── │ ─────────── │ ───────────── │
|
||
│ • 全局快捷键唤起 │ • 标签页高级管理 │ • 语义搜索 │
|
||
│ • 标签页搜索切换 │ • 页面工具 │ • 工作流运行 │
|
||
│ • 书签搜索 │ • 开发者工具 │ • AI 增强 │
|
||
│ • 历史记录搜索 │ • 小工具 │ │
|
||
│ • 基础命令系统 │ • 扩展管理 │ │
|
||
│ • 最近使用 │ │ │
|
||
└─────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 2.2 P0 核心功能 (MVP)
|
||
|
||
#### 2.2.1 面板基础
|
||
|
||
| 功能 | 描述 | 快捷键 |
|
||
| ------------- | -------------------- | ------------------------------ |
|
||
| 唤起/关闭面板 | 全局快捷键唤起面板 | `Ctrl+Shift+K` / `Cmd+Shift+K` |
|
||
| 关闭面板 | ESC 关闭 | `Esc` |
|
||
| 列表导航 | 上下键导航列表 | `↑` / `↓` |
|
||
| 执行默认动作 | 执行选中项的默认动作 | `Enter` |
|
||
| 新标签页打开 | 在新标签页打开 | `Cmd+Enter` |
|
||
| 动作面板 | 打开选中项的动作列表 | `Tab` / `→` |
|
||
| 返回上级 | 返回上一级 | `Backspace` / `←` |
|
||
|
||
#### 2.2.2 搜索 Providers
|
||
|
||
| Provider | 图标 | 描述 | Scope 前缀 |
|
||
| -------- | ---- | ------------------------------ | ---------- |
|
||
| 标签页 | 🗂️ | 搜索所有打开的标签页(跨窗口) | `t ` |
|
||
| 书签 | ⭐ | 搜索所有书签 | `b ` |
|
||
| 历史记录 | 🕐 | 搜索浏览历史 | `h ` |
|
||
| 内容搜索 | 📄 | 搜索标签页网页内容(正文) | `c ` |
|
||
| 命令 | ⌘ | 搜索可执行命令 | `>` |
|
||
|
||
#### 2.2.3 标签页搜索
|
||
|
||
**搜索字段**:标题、URL、域名
|
||
|
||
**默认动作**:切换到该标签页
|
||
|
||
**二级动作**:
|
||
|
||
- 切换到标签页
|
||
- 关闭标签页
|
||
- 复制 URL
|
||
- 复制为 Markdown
|
||
- 固定/取消固定
|
||
- 静音/取消静音
|
||
|
||
#### 2.2.4 书签搜索
|
||
|
||
**搜索字段**:标题、URL
|
||
|
||
**默认动作**:在当前标签页打开
|
||
|
||
**二级动作**:
|
||
|
||
- 在当前标签页打开
|
||
- 在新标签页打开
|
||
- 复制 URL
|
||
- 编辑书签
|
||
- 删除书签
|
||
|
||
#### 2.2.5 历史记录搜索
|
||
|
||
**搜索字段**:标题、URL
|
||
|
||
**默认动作**:在当前标签页打开
|
||
|
||
**二级动作**:
|
||
|
||
- 在当前标签页打开
|
||
- 在新标签页打开
|
||
- 复制 URL
|
||
- 从历史中删除
|
||
|
||
#### 2.2.6 内容搜索(标签页正文搜索)
|
||
|
||
**功能描述**:搜索所有已打开标签页的网页正文内容,快速定位包含特定关键词的页面。
|
||
|
||
**搜索方式**:关键词精确匹配(不依赖语义引擎)
|
||
|
||
**搜索范围**:所有窗口的所有标签页
|
||
|
||
**技术实现**:
|
||
|
||
```
|
||
┌──────────────┐ ┌──────────────┐ ┌───────────┐
|
||
│ 页面加载完成 │ ───▶ │ 抽取正文文本 │ ───▶ │ 存储到缓存 │
|
||
└──────────────┘ └──────────────┘ └───────────┘
|
||
↓ (复用现有 web-fetcher-helper.js + Readability)
|
||
|
||
┌──────────────┐ ┌──────────────┐ ┌───────────┐
|
||
│ 用户输入关键词│ ───▶ │ 遍历缓存匹配 │ ───▶ │ 返回结果 │
|
||
└──────────────┘ └──────────────┘ └───────────┘
|
||
```
|
||
|
||
**存储结构**:
|
||
|
||
```typescript
|
||
interface ContentCache {
|
||
[tabId: number]: {
|
||
url: string;
|
||
title: string;
|
||
content: string; // 正文文本,截断到 50KB
|
||
timestamp: number;
|
||
};
|
||
}
|
||
```
|
||
|
||
**索引更新时机**:
|
||
|
||
- `tabs.onUpdated` (status === 'complete')
|
||
- `webNavigation.onHistoryStateUpdated` (SPA 路由变化)
|
||
- `tabs.onRemoved` (清理缓存)
|
||
|
||
**默认动作**:切换到该标签页
|
||
|
||
**二级动作**:
|
||
|
||
- 切换到标签页
|
||
- 高亮显示匹配内容(可选,需要 Content Script 配合)
|
||
- 复制 URL
|
||
- 关闭标签页
|
||
|
||
**限制说明**:
|
||
|
||
- 受限页面(chrome://、Web Store 等)无法抓取内容
|
||
- 跨域 iframe 内容不包含在搜索范围内
|
||
- 新打开的标签页需等待内容抓取完成才能被搜索到
|
||
|
||
#### 2.2.7 基础命令
|
||
|
||
| 命令 | 描述 | 图标 |
|
||
| --------------- | -------------------------- | ---- |
|
||
| 复制当前链接 | 复制当前页面 URL | 📋 |
|
||
| 复制为 Markdown | 复制为 `[Title](URL)` 格式 | 📝 |
|
||
| 生成二维码 | 生成当前页面二维码 | 📱 |
|
||
| 截取屏幕 | 截取可视区域 | 📸 |
|
||
| 新建标签页 | 打开新标签页 | ➕ |
|
||
| 新建窗口 | 打开新窗口 | 🪟 |
|
||
| 新建隐身窗口 | 打开隐身窗口 | 🕶️ |
|
||
|
||
#### 2.2.7 最近使用
|
||
|
||
- 记录用户使用的命令/搜索结果
|
||
- 按使用频次和时间排序
|
||
- 面板打开时优先显示最近使用
|
||
|
||
---
|
||
|
||
### 2.3 P1 增值功能
|
||
|
||
#### 2.3.1 标签页高级管理
|
||
|
||
| 功能 | 描述 |
|
||
| ------------ | ------------------------------------------ |
|
||
| 关闭右侧标签 | 关闭当前标签右侧所有标签 |
|
||
| 关闭其他标签 | 关闭除当前标签外的所有标签 |
|
||
| 按域名分组 | 自动按域名创建标签组 |
|
||
| 合并窗口 | 将所有窗口标签合并到当前窗口 |
|
||
| 保存会话 | 保存当前所有标签为可恢复会话 |
|
||
| 恢复会话 | 恢复之前保存的会话 |
|
||
| 标签休眠 | 释放不活跃标签内存 (`chrome.tabs.discard`) |
|
||
|
||
#### 2.3.2 页面工具
|
||
|
||
| 功能 | 描述 | 实现方式 |
|
||
| --------- | ----------------------- | ----------------------- |
|
||
| 截图-全页 | 截取整个页面 | Content Script 滚动拼接 |
|
||
| 截图-选区 | 框选区域截图 | Content Script |
|
||
| 阅读模式 | 提取正文,沉浸式阅读 | Content Script |
|
||
| 网页大纲 | 提取 H1-H6 标签形成目录 | Content Script |
|
||
| 画中画 | 让视频进入画中画模式 | Content Script |
|
||
| 强制暗色 | 给网站加暗色滤镜 | Content Script 注入 CSS |
|
||
| 禅模式 | 隐藏非正文元素 | Content Script 注入 CSS |
|
||
| RSS 嗅探 | 检测并复制 RSS 源 | Content Script |
|
||
|
||
#### 2.3.3 开发者工具
|
||
|
||
| 功能 | 描述 | 实现方式 |
|
||
| ----------------- | -------------------------- | ------------------- |
|
||
| 查看 Cookie | 列出当前域名所有 Cookie | chrome.cookies API |
|
||
| 查看 LocalStorage | 查看/编辑本地存储 | Content Script |
|
||
| 清除站点数据 | 清除当前域名缓存和 Cookie | chrome.browsingData |
|
||
| Design Mode | 开启 `document.designMode` | Content Script |
|
||
| 注入 CSS | 快速注入自定义 CSS | chrome.scripting |
|
||
| 注入 JS | 快速注入自定义脚本 | chrome.scripting |
|
||
| Base64 编解码 | 对选中文本进行编解码 | Content Script |
|
||
| JSON 格式化 | 美化 JSON 数据 | Content Script |
|
||
|
||
#### 2.3.4 小工具
|
||
|
||
| 功能 | 描述 |
|
||
| ---------- | ------------------------------------------------------------- |
|
||
| 多引擎搜索 | `g ` Google / `gh ` GitHub / `npm ` NPM / `so ` StackOverflow |
|
||
| 计算器 | 输入算式直接计算,支持单位换算 |
|
||
| 快速笔记 | 临时记录想法,自动保存到本地 |
|
||
| 番茄钟 | 25分钟专注计时 |
|
||
|
||
#### 2.3.5 扩展管理
|
||
|
||
| 功能 | 描述 |
|
||
| ------------ | ------------------ |
|
||
| 搜索扩展 | 快速找到已安装扩展 |
|
||
| 启用/禁用 | 一键切换扩展状态 |
|
||
| 打开扩展选项 | 打开扩展的设置页面 |
|
||
|
||
#### 2.3.6 Chrome 设置快捷入口
|
||
|
||
| 功能 | 目标 URL |
|
||
| ---------- | ------------------- |
|
||
| 设置 | chrome://settings |
|
||
| 扩展程序 | chrome://extensions |
|
||
| 下载内容 | chrome://downloads |
|
||
| 历史记录 | chrome://history |
|
||
| 书签管理器 | chrome://bookmarks |
|
||
|
||
---
|
||
|
||
### 2.4 P2 差异化功能(项目独特能力)
|
||
|
||
> 以下功能充分利用项目现有的 CDP、Native Host、MCP、Record & Replay 等能力,是 Raycast/Alfred 等桌面启动器无法实现的浏览器内独特功能。
|
||
|
||
#### 2.4.1 Debug Bundle - 一键生成 Bug 报告
|
||
|
||
**功能描述**:一次命令自动采集截图、Console 日志、Network 请求(含 response body)、Performance trace,输出结构化报告包。
|
||
|
||
**用户价值**:把"复现+截图+抓包+性能+整理"从 10 分钟降到 30 秒,远程协作必备。
|
||
|
||
**技术实现**:
|
||
|
||
```
|
||
编排现有 Tools:
|
||
├── chrome_screenshot → 截图
|
||
├── chrome_console → Console 日志
|
||
├── chrome_network_debugger → 网络请求 (含 body)
|
||
├── performance_trace → 性能数据
|
||
└── trace-analyzer (native) → AI 分析摘要
|
||
```
|
||
|
||
**输出格式**:
|
||
|
||
```
|
||
bug-report-2024xxxx/
|
||
├── screenshot.png
|
||
├── console.json
|
||
├── network.har
|
||
├── performance-summary.md
|
||
└── README.md (自动生成的报告)
|
||
```
|
||
|
||
**复用现有能力**:
|
||
|
||
- `network-capture-debugger.ts` - CDP 抓包含 response body
|
||
- `performance.ts` - Trace 采集
|
||
- `trace-analyzer.ts` (native) - Trace 分析
|
||
|
||
---
|
||
|
||
#### 2.4.2 API Detective - 抓包反推 API
|
||
|
||
**功能描述**:Quick Panel 开始抓包 → 用户执行一次操作 → 面板列出关键 XHR/Fetch → 选中后生成 `curl`/TypeScript fetch/请求重放。
|
||
|
||
**用户价值**:前后端联调、爬虫开发、逆向 Web API 都能快很多,不用 Charles/Postman。
|
||
|
||
**技术实现**:
|
||
|
||
```typescript
|
||
// 流程
|
||
1. 用户触发 "API Detective" 命令
|
||
2. 调用 chrome_network_debugger_start 开始抓包
|
||
3. 用户在页面上执行操作
|
||
4. 用户按快捷键结束抓包
|
||
5. 过滤出 XHR/Fetch 请求,展示列表
|
||
6. 用户选择请求 → 生成代码/重放
|
||
```
|
||
|
||
**生成代码示例**:
|
||
|
||
```bash
|
||
# curl
|
||
curl 'https://api.example.com/data' \
|
||
-H 'Authorization: Bearer xxx' \
|
||
-H 'Content-Type: application/json' \
|
||
--data-raw '{"page":1}'
|
||
```
|
||
|
||
```typescript
|
||
// TypeScript fetch
|
||
const response = await fetch('https://api.example.com/data', {
|
||
method: 'POST',
|
||
headers: {
|
||
Authorization: 'Bearer xxx',
|
||
'Content-Type': 'application/json',
|
||
},
|
||
body: JSON.stringify({ page: 1 }),
|
||
});
|
||
```
|
||
|
||
**复用现有能力**:
|
||
|
||
- `network-capture-debugger.ts` - CDP 抓包
|
||
- `chrome_network_request` - 请求重放
|
||
|
||
---
|
||
|
||
#### 2.4.3 Performance Assistant - 一键性能分析
|
||
|
||
**功能描述**:对当前页一键录制 Performance Trace(可选 reload),自动给出"摘要 + 指定 insight"。
|
||
|
||
**用户价值**:把性能分析从"会用 DevTools 的少数人"变成"所有开发者都能用"。
|
||
|
||
**技术实现**:
|
||
|
||
```
|
||
1. performance_start_trace → 开始录制
|
||
2. (可选) 刷新页面
|
||
3. performance_stop_trace → 停止并保存 trace
|
||
4. analyze_insight (native) → AI 分析给出建议
|
||
```
|
||
|
||
**输出示例**:
|
||
|
||
```markdown
|
||
## 性能分析报告
|
||
|
||
### 关键指标
|
||
|
||
- LCP: 2.3s (需优化)
|
||
- FID: 50ms (良好)
|
||
- CLS: 0.05 (良好)
|
||
|
||
### 主要问题
|
||
|
||
1. 首屏有 800ms 的 JavaScript 执行阻塞
|
||
2. 图片资源未使用懒加载
|
||
3. 第三方脚本占用 30% 加载时间
|
||
|
||
### 优化建议
|
||
|
||
1. 考虑代码拆分,延迟非关键 JS
|
||
2. 对 below-the-fold 图片添加 loading="lazy"
|
||
...
|
||
```
|
||
|
||
**复用现有能力**:
|
||
|
||
- `performance.ts` - Trace 采集
|
||
- `trace-analyzer.ts` (native) - 分析引擎
|
||
|
||
---
|
||
|
||
#### 2.4.4 Workflow Runner - 运行录制的浏览器技能
|
||
|
||
**功能描述**:在 Quick Panel 搜索并运行已录制的工作流,支持参数输入,显示运行状态和日志。
|
||
|
||
**用户价值**:把重复网页操作变成"命令",适合运营/测试/BD/开发。
|
||
|
||
**技术实现**:
|
||
|
||
```
|
||
Quick Panel 搜索 "flow:"
|
||
↓
|
||
显示已保存的工作流列表
|
||
↓
|
||
选择工作流 → 如有变量则弹出输入框
|
||
↓
|
||
调用 runFlow 引擎执行
|
||
↓
|
||
实时显示执行状态/失败截图
|
||
```
|
||
|
||
**复用现有能力**:
|
||
|
||
- `record-replay/` - 完整的工作流引擎
|
||
- `scheduler.ts` - 变量收集弹层
|
||
- 已有触发器、定时、日志能力
|
||
|
||
---
|
||
|
||
#### 2.4.5 Flow → MCP Tool - 把工作流发布为 AI 工具
|
||
|
||
**功能描述**:一键发布工作流(slug),使其成为 MCP 客户端可调用的工具 `flow.<slug>`。
|
||
|
||
**用户价值**:团队沉淀"浏览器能力 API";让 AI 代理复用你验证过的流程。
|
||
|
||
**技术实现**:
|
||
|
||
```
|
||
Quick Panel 执行 "发布工作流" 命令
|
||
↓
|
||
选择要发布的 flow
|
||
↓
|
||
设置 slug 和描述
|
||
↓
|
||
native-server 动态注册为 MCP tool
|
||
↓
|
||
任意 MCP 客户端可调用 flow.<slug>
|
||
```
|
||
|
||
**复用现有能力**:
|
||
|
||
- `register-tools.ts` (native) - 动态工具注册
|
||
- `native-host.ts` - 列出已发布 flows
|
||
|
||
---
|
||
|
||
#### 2.4.6 Web-to-Code - 点击元素改本地代码
|
||
|
||
**功能描述**:在本地开发环境,Quick Panel 触发"修改这个元素",选中页面元素后,Agent 自动修改本地代码。
|
||
|
||
**用户价值**:设计/产品提改、前端调样式从"截图描述"变"点一下就改代码"。
|
||
|
||
**技术实现**:
|
||
|
||
```
|
||
1. Quick Panel 触发 Web-to-Code 模式
|
||
2. 进入元素选择(复用 Web Editor 的选择器)
|
||
3. 用户点击目标元素
|
||
4. 弹出修改意图输入框(如"改成红色")
|
||
5. 调用 WEB_EDITOR_APPLY → 本地 Agent
|
||
6. SSE 订阅状态,显示修改进度
|
||
```
|
||
|
||
**复用现有能力**:
|
||
|
||
- `web-editor/` - 元素选择、fingerprint
|
||
- `WEB_EDITOR_APPLY` - Agent 调用
|
||
- native-server Agent 路由
|
||
|
||
---
|
||
|
||
#### 2.4.7 Response Override - 命令面板里的 Mock
|
||
|
||
**功能描述**:Quick Panel 维护一组"临时网络规则":匹配 URL → 返回自定义响应,用于联调/灰度/验证修复。
|
||
|
||
**用户价值**:前端联调不再依赖后端;QA 可在浏览器内复现边界条件。
|
||
|
||
**技术实现**:
|
||
|
||
```typescript
|
||
// 规则配置
|
||
interface MockRule {
|
||
urlPattern: string; // 匹配规则
|
||
response: {
|
||
status?: number;
|
||
headers?: Record<string, string>;
|
||
body?: string | object;
|
||
};
|
||
enabled: boolean;
|
||
}
|
||
|
||
// 使用 CDP Fetch.enable + Fetch.requestPaused
|
||
```
|
||
|
||
**复用现有能力**:
|
||
|
||
- `cdpSessionManager` - CDP 命令发送
|
||
- 已有 `declarativeNetRequest` 权限
|
||
|
||
---
|
||
|
||
#### 2.4.8 Userscript Studio - 脚本即命令
|
||
|
||
**功能描述**:Quick Panel 管理用户脚本:创建/启用/禁用/导出,并支持对脚本下发命令(脚本可响应命令执行特定动作)。
|
||
|
||
**用户价值**:把"临时修样式/改交互/加快捷键"变成可沉淀能力,且可被 Quick Panel 调度。
|
||
|
||
**技术实现**:
|
||
|
||
```
|
||
Quick Panel 执行 "> userscript"
|
||
↓
|
||
显示已安装脚本列表
|
||
↓
|
||
选择脚本 → 二级动作:
|
||
- 启用/禁用
|
||
- 发送命令(如果脚本支持)
|
||
- 编辑
|
||
- 删除
|
||
```
|
||
|
||
**复用现有能力**:
|
||
|
||
- `userscript.ts` - 完整的 userscript 管理
|
||
- 已支持 MAIN/ISOLATED world、命令下发
|
||
|
||
---
|
||
|
||
#### 2.4.9 No-API Integrations - 用登录态集成外部服务
|
||
|
||
**功能描述**:无需 API Token,通过录制/回放把"当前页面摘要→发到 Notion/Slack/建 GitHub issue"变成一条命令。
|
||
|
||
**用户价值**:绕过 OAuth/权限申请成本;对企业内网/无 API 的系统尤其有价值。
|
||
|
||
**技术示例**:
|
||
|
||
```
|
||
命令: "保存到 Notion"
|
||
流程:
|
||
1. 抓取当前页面内容(标题、正文、URL)
|
||
2. 切换到 Notion 标签页(或新开)
|
||
3. 执行已录制的"新建页面"工作流
|
||
4. 填入抓取的内容
|
||
5. 返回原标签页
|
||
```
|
||
|
||
**复用现有能力**:
|
||
|
||
- Record & Replay - UI 自动化
|
||
- `chrome_get_web_content` - 内容抓取
|
||
- 同一浏览器态 = 已登录状态
|
||
|
||
---
|
||
|
||
#### 2.4.10 语义搜索(可选)
|
||
|
||
- 基于项目现有的 `@xenova/transformers` 能力
|
||
- 跨标签页内容语义搜索
|
||
- 根据语义相关性排序搜索结果
|
||
|
||
**注意**:需要下载模型,首次使用有等待时间
|
||
|
||
---
|
||
|
||
#### 2.4.11 AI 增强(需要 Native Server + LLM)
|
||
|
||
| 功能 | 描述 | 依赖 |
|
||
| -------- | ----------------------------------- | ------------ |
|
||
| 总结页面 | AI 总结当前页面要点 | Native Agent |
|
||
| 解释选中 | 解释选中的专业术语 | Native Agent |
|
||
| 翻译选中 | 智能翻译选中文字 | Native Agent |
|
||
| 智能命令 | 自然语言描述意图,AI 选择并执行命令 | Native Agent |
|
||
|
||
---
|
||
|
||
## 三、用户体验设计
|
||
|
||
### 3.1 交互流程
|
||
|
||
```
|
||
┌──────────────────────────────────────────────────────────────────┐
|
||
│ Quick Panel 交互流程 │
|
||
├──────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌─────────┐ ┌──────────────┐ ┌─────────────┐ │
|
||
│ │ Cmd+K │───▶│ 显示面板 │───▶│ 显示快捷入口 │ │
|
||
│ └─────────┘ └──────────────┘ │ + 最近使用 │ │
|
||
│ └───────┬─────┘ │
|
||
│ │ │
|
||
│ ┌────────────────────────┼────────────────┐ │
|
||
│ ▼ ▼ ▼ │
|
||
│ ┌─────────────┐ ┌─────────────┐ ┌──────────┐│
|
||
│ │ 点击快捷入口 │ │ 输入搜索词 │ │ 输入命令 ││
|
||
│ │ (标签/书签/ │ └──────┬──────┘ │ (> xxx) ││
|
||
│ │ 历史/命令) │ │ └────┬─────┘│
|
||
│ └──────┬──────┘ │ │ │
|
||
│ │ │ │ │
|
||
│ ▼ ▼ ▼ │
|
||
│ ┌─────────────┐ ┌─────────────┐ ┌──────────┐│
|
||
│ │ 进入 Scope │ │ 模糊搜索 │ │ 搜索命令 ││
|
||
│ │ 显示对应结果 │ │ 显示结果 │ │ 显示结果 ││
|
||
│ └──────┬──────┘ └──────┬──────┘ └────┬─────┘│
|
||
│ │ │ │ │
|
||
│ └────────────────────────┼───────────────┘ │
|
||
│ ▼ │
|
||
│ ┌─────────────┐ │
|
||
│ │ 选中结果 │ │
|
||
│ └──────┬──────┘ │
|
||
│ ┌──────────────┼──────────────┐ │
|
||
│ ▼ ▼ ▼ │
|
||
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
||
│ │ Enter │ │ Tab │ │ Cmd+X │ │
|
||
│ │ 默认动作 │ │ 动作面板 │ │ 关闭 │ │
|
||
│ └──────────┘ └──────────┘ └──────────┘ │
|
||
│ │
|
||
└───────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 3.2 搜索策略
|
||
|
||
#### 模糊匹配算法
|
||
|
||
1. **精确匹配** > **前缀匹配** > **包含匹配** > **模糊匹配**
|
||
2. 多字段加权:标题权重 > URL 权重 > 域名权重
|
||
3. 支持拼音首字母搜索(中文场景)
|
||
|
||
#### 排序策略
|
||
|
||
1. 匹配度分数
|
||
2. 最近使用时间
|
||
3. 使用频次
|
||
4. 默认顺序
|
||
|
||
#### 性能优化
|
||
|
||
- 书签/历史调用原生 `chrome.bookmarks.search()` / `chrome.history.search()` 获取候选集
|
||
- 前端做二次 fuzzy 匹配 + 排序
|
||
- 防抖处理,避免频繁搜索
|
||
- 虚拟列表渲染大量结果
|
||
|
||
### 3.3 快捷键设计
|
||
|
||
| 操作 | 快捷键 | 说明 |
|
||
| ---------------- | --------------------- | -------------------------------------------------- |
|
||
| 唤起面板 | `Cmd/Ctrl+Shift+K` | 可配置,引导用户去 `chrome://extensions/shortcuts` |
|
||
| 关闭面板 | `Esc` | |
|
||
| 上移 | `↑` / `Cmd+P` | |
|
||
| 下移 | `↓` / `Cmd+N` | |
|
||
| 执行默认动作 | `Enter` | |
|
||
| 新标签页打开 | `Cmd+Enter` | |
|
||
| 后台打开 | `Alt+Enter` | |
|
||
| 打开动作面板 | `Tab` / `→` / `Cmd+K` | |
|
||
| 返回 | `Backspace` / `←` | 输入框为空时生效 |
|
||
| 切换到标签页搜索 | `Cmd+T` | |
|
||
| 切换到书签搜索 | `Cmd+B` | |
|
||
| 切换到历史搜索 | `Cmd+H` | |
|
||
|
||
### 3.4 UI 设计
|
||
|
||
采用 **液态玻璃风格 (Liquid Glass)** 设计(参考 UI 设计稿 Version 6)
|
||
|
||
**设计特点**:
|
||
|
||
- 毛玻璃背景 + backdrop-filter
|
||
- 圆角卡片 (border-radius: 24px)
|
||
- 微妙的边框 (border: 1px solid rgba(255,255,255,0.4))
|
||
- 柔和的阴影
|
||
- 支持亮色/暗色主题
|
||
|
||
**布局结构**:
|
||
|
||
```
|
||
┌─────────────────────────────────────┐
|
||
│ 🔍 搜索输入框 [⌘K] │ ← 顶部搜索栏
|
||
├─────────────────────────────────────┤
|
||
│ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │
|
||
│ │标签页│ │书签 │ │历史 │ │命令 │ │ ← 快捷入口 (4宫格)
|
||
│ └─────┘ └─────┘ └─────┘ └─────┘ │
|
||
├─────────────────────────────────────┤
|
||
│ 最近使用 │
|
||
│ ┌─────────────────────────────┐ │
|
||
│ │ 📸 截取屏幕 ▶ │ │ ← 最近使用列表
|
||
│ │ 📋 复制链接 ▶ │ │
|
||
│ └─────────────────────────────┘ │
|
||
├─────────────────────────────────────┤
|
||
│ ↑↓ 导航 ↵ 选择 esc 关闭 │ ← 底部提示栏
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 四、技术实现架构
|
||
|
||
### 4.1 整体架构
|
||
|
||
```
|
||
┌────────────────────────────────────────────────────────────────────────┐
|
||
│ Quick Panel 架构 │
|
||
├────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
||
│ │ Content Script (Inject) │ │
|
||
│ │ ┌─────────────────────────────────────────────────────────────┐│ │
|
||
│ │ │ Shadow DOM Host ││ │
|
||
│ │ │ ┌─────────────────────────────────────────────────────┐ ││ │
|
||
│ │ │ │ UI Layer │ ││ │
|
||
│ │ │ │ • PanelController (主面板协调器) │ ││ │
|
||
│ │ │ │ • SearchInput (搜索输入框) │ ││ │
|
||
│ │ │ │ • ResultList (结果列表 - 虚拟滚动) │ ││ │
|
||
│ │ │ │ • ActionPanel (动作面板) │ ││ │
|
||
│ │ │ │ • QuickEntries (快捷入口) │ ││ │
|
||
│ │ │ └─────────────────────────────────────────────────────┘ ││ │
|
||
│ │ │ ┌─────────────────────────────────────────────────────┐ ││ │
|
||
│ │ │ │ Core Layer │ ││ │
|
||
│ │ │ │ • CommandRegistry (命令注册表) │ ││ │
|
||
│ │ │ │ • SearchEngine (搜索引擎) │ ││ │
|
||
│ │ │ │ • HistoryTracker (使用历史追踪) │ ││ │
|
||
│ │ │ │ • KeyboardController (键盘事件) │ ││ │
|
||
│ │ │ │ • MessageBridge (消息桥接) │ ││ │
|
||
│ │ │ └─────────────────────────────────────────────────────┘ ││ │
|
||
│ │ └─────────────────────────────────────────────────────────────┘│ │
|
||
│ └─────────────────────────────────────────────────────────────────┘ │
|
||
│ │ │
|
||
│ chrome.runtime.sendMessage │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌─────────────────────────────────────────────────────────────────┐ │
|
||
│ │ Background Script │ │
|
||
│ │ ┌─────────────────────────────────────────────────────────────┐│ │
|
||
│ │ │ Quick Panel Handler ││ │
|
||
│ │ │ • 标签页操作 (chrome.tabs.*) ││ │
|
||
│ │ │ • 书签操作 (chrome.bookmarks.*) ││ │
|
||
│ │ │ • 历史操作 (chrome.history.*) ││ │
|
||
│ │ │ • 扩展管理 (chrome.management.*) ││ │
|
||
│ │ │ • 截图 (chrome.tabs.captureVisibleTab) ││ │
|
||
│ │ │ • 数据存储 (chrome.storage.*) ││ │
|
||
│ │ └─────────────────────────────────────────────────────────────┘│ │
|
||
│ └─────────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
└────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 4.2 目录结构
|
||
|
||
```
|
||
app/chrome-extension/entrypoints/
|
||
├── quick-panel.ts # 入口文件 (Content Script)
|
||
├── quick-panel/
|
||
│ ├── index.ts # 模块导出
|
||
│ ├── constants.ts # 常量定义 (样式、配置)
|
||
│ │
|
||
│ ├── core/
|
||
│ │ ├── panel-controller.ts # 主面板控制器
|
||
│ │ ├── command-registry.ts # 命令注册表
|
||
│ │ ├── search-engine.ts # 搜索引擎 (fuzzy match)
|
||
│ │ ├── history-tracker.ts # 使用历史追踪
|
||
│ │ ├── keyboard-controller.ts # 键盘事件处理
|
||
│ │ └── message-bridge.ts # Background 消息通信
|
||
│ │
|
||
│ ├── providers/
|
||
│ │ ├── base-provider.ts # Provider 基类
|
||
│ │ ├── tabs-provider.ts # 标签页 Provider
|
||
│ │ ├── bookmarks-provider.ts # 书签 Provider
|
||
│ │ ├── history-provider.ts # 历史记录 Provider
|
||
│ │ ├── commands-provider.ts # 命令 Provider
|
||
│ │ └── search-engine-provider.ts # 搜索引擎 Provider
|
||
│ │
|
||
│ ├── commands/
|
||
│ │ ├── page-commands.ts # 页面操作命令
|
||
│ │ ├── tab-commands.ts # 标签页命令
|
||
│ │ ├── dev-commands.ts # 开发者命令
|
||
│ │ └── utility-commands.ts # 工具命令
|
||
│ │
|
||
│ ├── ui/
|
||
│ │ ├── shadow-host.ts # Shadow DOM 宿主
|
||
│ │ ├── panel.ts # 主面板 UI
|
||
│ │ ├── search-input.ts # 搜索输入框
|
||
│ │ ├── result-list.ts # 结果列表 (虚拟滚动)
|
||
│ │ ├── result-item.ts # 结果项
|
||
│ │ ├── action-panel.ts # 动作面板
|
||
│ │ ├── quick-entries.ts # 快捷入口
|
||
│ │ └── footer.ts # 底部提示栏
|
||
│ │
|
||
│ └── utils/
|
||
│ ├── fuzzy-match.ts # 模糊匹配算法
|
||
│ ├── pinyin.ts # 拼音搜索支持
|
||
│ └── disposables.ts # 资源清理
|
||
│
|
||
├── background/
|
||
│ └── quick-panel/
|
||
│ ├── index.ts # 消息处理入口
|
||
│ ├── tabs-handler.ts # 标签页操作处理
|
||
│ ├── bookmarks-handler.ts # 书签操作处理
|
||
│ ├── history-handler.ts # 历史记录处理
|
||
│ └── screenshot-handler.ts # 截图处理
|
||
```
|
||
|
||
### 4.3 消息类型定义
|
||
|
||
```typescript
|
||
// common/message-types.ts 新增
|
||
|
||
export const QUICK_PANEL_ACTIONS = {
|
||
// 面板控制
|
||
TOGGLE: 'quick_panel_toggle',
|
||
PING: 'quick_panel_ping',
|
||
|
||
// 数据查询
|
||
SEARCH_TABS: 'quick_panel_search_tabs',
|
||
SEARCH_BOOKMARKS: 'quick_panel_search_bookmarks',
|
||
SEARCH_HISTORY: 'quick_panel_search_history',
|
||
|
||
// 标签页操作
|
||
SWITCH_TAB: 'quick_panel_switch_tab',
|
||
CLOSE_TAB: 'quick_panel_close_tab',
|
||
CLOSE_OTHER_TABS: 'quick_panel_close_other_tabs',
|
||
GROUP_TABS_BY_DOMAIN: 'quick_panel_group_tabs',
|
||
|
||
// 页面操作
|
||
CAPTURE_SCREENSHOT: 'quick_panel_screenshot',
|
||
COPY_URL: 'quick_panel_copy_url',
|
||
|
||
// 扩展管理
|
||
GET_EXTENSIONS: 'quick_panel_get_extensions',
|
||
TOGGLE_EXTENSION: 'quick_panel_toggle_extension',
|
||
|
||
// 历史记录
|
||
GET_RECENT_COMMANDS: 'quick_panel_get_recent',
|
||
SAVE_COMMAND_USAGE: 'quick_panel_save_usage',
|
||
} as const;
|
||
```
|
||
|
||
### 4.4 核心类设计
|
||
|
||
#### PanelController (主控制器)
|
||
|
||
```typescript
|
||
interface PanelController {
|
||
// 生命周期
|
||
show(): void;
|
||
hide(): void;
|
||
toggle(): boolean;
|
||
dispose(): void;
|
||
|
||
// 状态
|
||
isVisible(): boolean;
|
||
getCurrentScope(): Scope | null;
|
||
|
||
// 搜索
|
||
setQuery(query: string): void;
|
||
setScope(scope: Scope): void;
|
||
|
||
// 导航
|
||
selectNext(): void;
|
||
selectPrev(): void;
|
||
executeSelected(): void;
|
||
showActions(): void;
|
||
}
|
||
```
|
||
|
||
#### SearchEngine (搜索引擎)
|
||
|
||
```typescript
|
||
interface SearchEngine {
|
||
// 注册 Provider
|
||
registerProvider(provider: SearchProvider): void;
|
||
|
||
// 搜索
|
||
search(query: string, scope?: Scope): Promise<SearchResult[]>;
|
||
|
||
// 配置
|
||
setMaxResults(count: number): void;
|
||
}
|
||
|
||
interface SearchProvider {
|
||
id: string;
|
||
name: string;
|
||
icon: string;
|
||
scope: Scope;
|
||
|
||
search(query: string): Promise<SearchResult[]>;
|
||
getActions(item: SearchResult): Action[];
|
||
}
|
||
|
||
interface SearchResult {
|
||
id: string;
|
||
provider: string;
|
||
title: string;
|
||
subtitle?: string;
|
||
icon?: string | HTMLElement;
|
||
data: unknown;
|
||
score: number;
|
||
}
|
||
```
|
||
|
||
#### CommandRegistry (命令注册表)
|
||
|
||
```typescript
|
||
interface Command {
|
||
id: string;
|
||
title: string;
|
||
subtitle?: string;
|
||
icon: string;
|
||
keywords?: string[]; // 用于搜索的关键词
|
||
category: CommandCategory;
|
||
|
||
execute(): void | Promise<void>;
|
||
isAvailable?(): boolean; // 动态判断命令是否可用
|
||
}
|
||
|
||
interface CommandRegistry {
|
||
register(command: Command): void;
|
||
unregister(id: string): void;
|
||
getAll(): Command[];
|
||
search(query: string): Command[];
|
||
execute(id: string): Promise<void>;
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 五、详细任务拆解
|
||
|
||
### Phase 1: 基础框架搭建 (P0)
|
||
|
||
#### 1.1 Content Script 入口与 Shadow DOM
|
||
|
||
- [ ] 创建 `quick-panel.ts` 入口文件
|
||
- [ ] 实现 `shadow-host.ts` - Shadow DOM 宿主
|
||
- 创建 Shadow DOM 容器
|
||
- 注入样式
|
||
- 事件隔离(阻止冒泡到页面)
|
||
- [ ] 定义 `constants.ts` - 样式常量、配置常量
|
||
- [ ] 实现 `disposables.ts` - 资源清理工具类
|
||
|
||
#### 1.2 主面板 UI
|
||
|
||
- [ ] 实现 `panel.ts` - 主面板容器
|
||
- 液态玻璃风格样式
|
||
- 显示/隐藏动画 (fade + scale)
|
||
- 点击外部区域关闭
|
||
- [ ] 实现 `search-input.ts` - 搜索输入框组件
|
||
- 输入框 + scope 标签显示
|
||
- 清空按钮
|
||
- 防抖输入处理
|
||
- [ ] 实现 `quick-entries.ts` - 四宫格快捷入口
|
||
- 标签页/书签/历史/命令 四个入口
|
||
- hover 效果
|
||
- 点击进入对应 scope
|
||
|
||
#### 1.3 结果列表
|
||
|
||
- [ ] 实现 `result-list.ts` - 结果列表容器
|
||
- 虚拟滚动(处理大量结果)
|
||
- 分组标题显示
|
||
- 空状态提示
|
||
- [ ] 实现 `result-item.ts` - 结果项组件
|
||
- 图标/标题/副标题/右侧操作
|
||
- 选中态样式
|
||
- hover 效果
|
||
- [ ] 实现 `footer.ts` - 底部提示栏
|
||
- 快捷键提示
|
||
- 状态指示器
|
||
|
||
#### 1.4 核心控制器
|
||
|
||
- [ ] 实现 `panel-controller.ts` - 主控制器
|
||
- 协调各组件
|
||
- 管理面板状态
|
||
- 处理显示/隐藏逻辑
|
||
- [ ] 实现 `keyboard-controller.ts` - 键盘事件处理
|
||
- 全局快捷键监听
|
||
- 面板内导航快捷键
|
||
- 快捷键冲突处理
|
||
|
||
#### 1.5 消息通信
|
||
|
||
- [ ] 扩展 `message-types.ts` - 新增 Quick Panel 消息类型
|
||
- [ ] 实现 `message-bridge.ts` - Content Script 侧消息发送
|
||
- [ ] 实现 `background/quick-panel/index.ts` - Background 消息处理入口
|
||
|
||
### Phase 2: 搜索 Provider 实现 (P0)
|
||
|
||
#### 2.1 搜索引擎核心
|
||
|
||
- [ ] 实现 `search-engine.ts` - 搜索引擎
|
||
- Provider 注册机制
|
||
- 并行搜索多个 Provider
|
||
- 结果合并与排序
|
||
- [ ] 实现 `fuzzy-match.ts` - 模糊匹配算法
|
||
- 字符串模糊匹配
|
||
- 匹配高亮
|
||
- 分数计算
|
||
- [ ] 实现 `pinyin.ts` - 拼音搜索支持(可选,使用成熟库)
|
||
|
||
#### 2.2 标签页 Provider
|
||
|
||
- [ ] 实现 `tabs-provider.ts`
|
||
- 获取所有标签页(跨窗口)
|
||
- 标签页搜索(标题、URL、域名)
|
||
- 标签页图标获取
|
||
- [ ] 实现 `background/quick-panel/tabs-handler.ts`
|
||
- `chrome.tabs.query` 获取标签页
|
||
- `chrome.tabs.update` 切换标签页
|
||
- `chrome.tabs.remove` 关闭标签页
|
||
|
||
#### 2.3 书签 Provider
|
||
|
||
- [ ] 实现 `bookmarks-provider.ts`
|
||
- 书签搜索
|
||
- 书签树遍历
|
||
- [ ] 实现 `background/quick-panel/bookmarks-handler.ts`
|
||
- `chrome.bookmarks.search` 搜索书签
|
||
- `chrome.bookmarks.create/update/remove` 书签操作
|
||
|
||
#### 2.4 历史记录 Provider
|
||
|
||
- [ ] 实现 `history-provider.ts`
|
||
- 历史记录搜索
|
||
- 时间范围过滤
|
||
- [ ] 实现 `background/quick-panel/history-handler.ts`
|
||
- `chrome.history.search` 搜索历史
|
||
- `chrome.history.deleteUrl` 删除历史
|
||
|
||
#### 2.5 命令 Provider
|
||
|
||
- [ ] 实现 `commands-provider.ts`
|
||
- 命令搜索
|
||
- 命令分类展示
|
||
- [ ] 实现 `command-registry.ts` - 命令注册表
|
||
- 命令注册/注销
|
||
- 命令执行
|
||
|
||
### Phase 3: 基础命令实现 (P0)
|
||
|
||
#### 3.1 页面操作命令
|
||
|
||
- [ ] 实现 `page-commands.ts`
|
||
- 复制当前链接 (URL)
|
||
- 复制为 Markdown
|
||
- 生成二维码
|
||
- 截取屏幕(可视区域)
|
||
|
||
#### 3.2 标签页命令
|
||
|
||
- [ ] 实现 `tab-commands.ts`
|
||
- 新建标签页
|
||
- 新建窗口
|
||
- 新建隐身窗口
|
||
|
||
#### 3.3 截图功能
|
||
|
||
- [ ] 实现 `background/quick-panel/screenshot-handler.ts`
|
||
- `chrome.tabs.captureVisibleTab` 截取可视区域
|
||
- 图片处理与下载
|
||
|
||
### Phase 4: 动作面板与使用历史 (P0)
|
||
|
||
#### 4.1 动作面板
|
||
|
||
- [ ] 实现 `action-panel.ts`
|
||
- 动作列表展示
|
||
- 键盘导航
|
||
- 执行动作后关闭
|
||
- [ ] 为每个 Provider 定义二级动作
|
||
- 标签页:切换、关闭、复制、固定、静音
|
||
- 书签:打开、新标签打开、复制、编辑、删除
|
||
- 历史:打开、新标签打开、复制、删除
|
||
|
||
#### 4.2 使用历史追踪
|
||
|
||
- [ ] 实现 `history-tracker.ts`
|
||
- 记录命令使用
|
||
- 使用频次统计
|
||
- 最近使用排序
|
||
- [ ] 存储方案
|
||
- 使用 `chrome.storage.local` 存储
|
||
- 定期清理旧数据
|
||
|
||
### Phase 5: 增值功能 - 标签页管理 (P1)
|
||
|
||
#### 5.1 高级标签页操作
|
||
|
||
- [ ] 关闭右侧标签页
|
||
- [ ] 关闭其他标签页
|
||
- [ ] 按域名自动分组
|
||
- [ ] 合并所有窗口
|
||
- [ ] 标签休眠 (`chrome.tabs.discard`)
|
||
|
||
#### 5.2 会话管理
|
||
|
||
- [ ] 保存当前会话
|
||
- [ ] 恢复历史会话
|
||
- [ ] 会话列表管理
|
||
|
||
### Phase 6: 增值功能 - 页面工具 (P1)
|
||
|
||
#### 6.1 截图增强
|
||
|
||
- [ ] 全页截图(滚动拼接)
|
||
- [ ] 选区截图
|
||
|
||
#### 6.2 阅读模式
|
||
|
||
- [ ] 正文提取
|
||
- [ ] 沉浸式阅读 UI
|
||
- [ ] 字体/背景设置
|
||
|
||
#### 6.3 其他页面工具
|
||
|
||
- [ ] 网页大纲(提取 H1-H6)
|
||
- [ ] 画中画
|
||
- [ ] 强制暗色模式
|
||
- [ ] 禅模式
|
||
|
||
### Phase 7: 增值功能 - 开发者工具 (P1)
|
||
|
||
#### 7.1 数据查看
|
||
|
||
- [ ] Cookie 查看器
|
||
- [ ] LocalStorage 查看器
|
||
|
||
#### 7.2 注入工具
|
||
|
||
- [ ] Design Mode 切换
|
||
- [ ] CSS 注入
|
||
- [ ] JS 注入
|
||
|
||
#### 7.3 编解码工具
|
||
|
||
- [ ] Base64 编解码
|
||
- [ ] JSON 格式化
|
||
|
||
### Phase 8: 增值功能 - 小工具 (P1)
|
||
|
||
#### 8.1 多引擎搜索
|
||
|
||
- [ ] Google / Bing / GitHub / NPM / StackOverflow
|
||
- [ ] 自定义搜索引擎
|
||
|
||
#### 8.2 计算器
|
||
|
||
- [ ] 基础算术
|
||
- [ ] 单位换算
|
||
|
||
#### 8.3 其他
|
||
|
||
- [ ] 快速笔记
|
||
- [ ] 番茄钟
|
||
|
||
### Phase 9: 增值功能 - 扩展管理 (P1)
|
||
|
||
- [ ] 扩展列表展示
|
||
- [ ] 启用/禁用扩展
|
||
- [ ] 打开扩展选项页
|
||
|
||
### Phase 10: 内容搜索 Provider (P1)
|
||
|
||
#### 10.1 内容索引系统
|
||
|
||
- [ ] 实现 `content-indexer.ts` - 内容索引管理器
|
||
- 监听 `tabs.onUpdated` 触发索引
|
||
- 监听 `webNavigation.onHistoryStateUpdated` 处理 SPA
|
||
- 监听 `tabs.onRemoved` 清理缓存
|
||
- [ ] 复用 `web-fetcher-helper.js` 抽取正文
|
||
- 调用 Readability 提取正文
|
||
- 内容截断到 50KB
|
||
- [ ] 内容存储方案
|
||
- 使用 `chrome.storage.session` 或 Background 内存 Map
|
||
- 定期清理过期数据
|
||
|
||
#### 10.2 内容搜索 Provider
|
||
|
||
- [ ] 实现 `content-provider.ts`
|
||
- 关键词精确匹配搜索
|
||
- 提取匹配上下文作为 snippet
|
||
- 高亮匹配关键词
|
||
- [ ] 实现 `background/quick-panel/content-handler.ts`
|
||
- 内容索引 CRUD
|
||
- 搜索接口
|
||
|
||
### Phase 11: 差异化功能 - 开发者诊断 (P2)
|
||
|
||
#### 11.1 Debug Bundle - 一键 Bug 报告
|
||
|
||
- [ ] 实现 `debug-bundle-command.ts`
|
||
- 编排多个 Tools 采集数据
|
||
- 生成结构化报告
|
||
- 支持导出/分享
|
||
- [ ] 集成现有能力
|
||
- `chrome_screenshot` 截图
|
||
- `chrome_console` 日志
|
||
- `network-capture-debugger` 抓包
|
||
- `performance` Trace
|
||
|
||
#### 11.2 API Detective - 抓包反推 API
|
||
|
||
- [ ] 实现 `api-detective-command.ts`
|
||
- 开始/结束抓包流程
|
||
- 过滤 XHR/Fetch 请求
|
||
- 生成 curl/fetch 代码
|
||
- [ ] 请求重放功能
|
||
- 复用 `chrome_network_request`
|
||
|
||
#### 11.3 Performance Assistant - 性能分析
|
||
|
||
- [ ] 实现 `performance-assistant-command.ts`
|
||
- 一键 Trace 录制
|
||
- 调用 native trace-analyzer 分析
|
||
- 展示分析报告
|
||
|
||
### Phase 12: 差异化功能 - 工作流集成 (P2)
|
||
|
||
#### 12.1 Workflow Runner
|
||
|
||
- [ ] 实现 `workflow-provider.ts`
|
||
- 搜索已保存的工作流
|
||
- 显示工作流列表
|
||
- [ ] 实现 `workflow-runner-command.ts`
|
||
- 变量输入弹窗
|
||
- 调用 runFlow 引擎
|
||
- 实时状态展示
|
||
|
||
#### 12.2 Flow → MCP Tool
|
||
|
||
- [ ] 实现 `publish-flow-command.ts`
|
||
- 发布工作流为 MCP tool
|
||
- 设置 slug 和描述
|
||
- [ ] 与 native-server 通信
|
||
- 调用 register-tools 注册
|
||
|
||
### Phase 13: 差异化功能 - 高级开发工具 (P2)
|
||
|
||
#### 13.1 Web-to-Code
|
||
|
||
- [ ] 实现 `web-to-code-command.ts`
|
||
- 进入元素选择模式(复用 Web Editor)
|
||
- 意图输入弹窗
|
||
- 调用 WEB_EDITOR_APPLY
|
||
- SSE 状态订阅
|
||
|
||
#### 13.2 Response Override
|
||
|
||
- [ ] 实现 `mock-rules-command.ts`
|
||
- Mock 规则管理 UI
|
||
- 规则 CRUD
|
||
- [ ] 实现 CDP 拦截
|
||
- 使用 Fetch.enable + Fetch.requestPaused
|
||
|
||
#### 13.3 Userscript Studio
|
||
|
||
- [ ] 实现 `userscript-provider.ts`
|
||
- 脚本列表搜索
|
||
- 启用/禁用操作
|
||
- 命令下发
|
||
|
||
### Phase 14: 差异化功能 - AI 增强 (P2/P3)
|
||
|
||
#### 14.1 语义搜索(可选)
|
||
|
||
- [ ] 集成 `@xenova/transformers`
|
||
- [ ] 跨标签页内容向量索引
|
||
- [ ] 语义相关性排序
|
||
|
||
#### 14.2 AI 命令(需要 Native Server)
|
||
|
||
- [ ] 页面总结
|
||
- [ ] 选中文本解释/翻译
|
||
- [ ] 智能命令匹配
|
||
|
||
---
|
||
|
||
## 六、技术风险与应对
|
||
|
||
### 6.1 技术限制
|
||
|
||
| 限制 | 影响 | 应对方案 |
|
||
| ---------------- | -------------------------------------------- | ------------------------------ |
|
||
| 特殊页面无法注入 | `chrome://`、Chrome Web Store 等页面无法使用 | 提供 Popup 作为 fallback |
|
||
| 唤起快捷键冲突 | `Cmd+K` 可能被 Chrome 或网站占用 | 提供可配置快捷键,引导用户设置 |
|
||
| 剪贴板权限 | 读取剪贴板需要用户授权 | 仅在用户操作时请求 |
|
||
|
||
### 6.2 性能考虑
|
||
|
||
| 场景 | 风险 | 优化方案 |
|
||
| ------------- | ---------- | -------------------------- |
|
||
| 大量标签页 | 搜索响应慢 | 虚拟列表 + 防抖 + 分页加载 |
|
||
| 大量书签/历史 | 内存占用高 | 原生 API 搜索 + 按需加载 |
|
||
| 频繁唤起面板 | 性能开销 | 组件复用,不销毁重建 |
|
||
|
||
---
|
||
|
||
## 七、里程碑计划
|
||
|
||
| 里程碑 | 范围 | 交付物 |
|
||
| ------ | ------------- | ------------------------------------------------------------------------------------ |
|
||
| M1 | Phase 1-4 | MVP 版本:基础面板 + 五大 Provider(含内容搜索)+ 基础命令 + 动作面板 |
|
||
| M2 | Phase 5-6, 10 | 增值版本:高级标签页管理 + 页面工具 + 内容搜索 |
|
||
| M3 | Phase 7-9 | 完整版本:开发者工具 + 小工具 + 扩展管理 |
|
||
| M4 | Phase 11-12 | 差异化版本 I:Debug Bundle + API Detective + Performance Assistant + Workflow Runner |
|
||
| M5 | Phase 13-14 | 差异化版本 II:Web-to-Code + Response Override + Userscript Studio + AI 增强 |
|
||
|
||
### 功能依赖说明
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────┐
|
||
│ 功能依赖关系图 │
|
||
├─────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ 纯扩展能力(无额外依赖) 需要 Native Server 需要 CDP │
|
||
│ ───────────────────── ──────────────── ───────── │
|
||
│ • 标签页/书签/历史搜索 • Performance 分析 • Debug Bundle │
|
||
│ • 基础命令 • Web-to-Code • API Detective│
|
||
│ • 标签页管理 • Flow → MCP Tool • Response Mock│
|
||
│ • 页面工具 • AI 增强功能 • 网络抓包 │
|
||
│ • 扩展管理 │
|
||
│ • 内容搜索 │
|
||
│ • Workflow Runner │
|
||
│ • Userscript Studio │
|
||
│ │
|
||
│ ⚠️ CDP 相关功能注意事项: │
|
||
│ - 如果 DevTools 已打开,debugger 会冲突 │
|
||
│ - 需要做降级提示 │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 附录
|
||
|
||
### A. 参考资源
|
||
|
||
- UI 设计稿:`quick-panel-ui.html` (Version 6 液态玻璃风格)
|
||
- 现有架构参考:`web-editor-v2/` (Shadow DOM、事件隔离、消息通信)
|
||
- 消息类型定义:`common/message-types.ts`
|
||
|
||
### B. 相关 Chrome API
|
||
|
||
- `chrome.tabs` - 标签页管理
|
||
- `chrome.bookmarks` - 书签管理
|
||
- `chrome.history` - 历史记录
|
||
- `chrome.management` - 扩展管理
|
||
- `chrome.commands` - 快捷键
|
||
- `chrome.storage` - 数据存储
|
||
- `chrome.scripting` - 脚本注入
|