项目文件夹

文件
2025-12-31 17:56:15 +08:00

51 KiB

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)

┌──────────────┐      ┌──────────────┐      ┌───────────┐
│ 用户输入关键词│ ───▶ │ 遍历缓存匹配  │ ───▶ │ 返回结果  │
└──────────────┘      └──────────────┘      └───────────┘

存储结构

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。

技术实现

// 流程
1. 用户触发 "API Detective" 命令
2. 调用 chrome_network_debugger_start 开始抓包
3. 用户在页面上执行操作
4. 用户按快捷键结束抓包
5. 过滤出 XHR/Fetch 请求,展示列表
6. 用户选择请求  生成代码/重放

生成代码示例

# curl
curl 'https://api.example.com/data' \
  -H 'Authorization: Bearer xxx' \
  -H 'Content-Type: application/json' \
  --data-raw '{"page":1}'
// 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 分析给出建议

输出示例

## 性能分析报告

### 关键指标

- 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 可在浏览器内复现边界条件。

技术实现

// 规则配置
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 消息类型定义

// 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 (主控制器)

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 (搜索引擎)

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 (命令注册表)

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 差异化版本 IDebug Bundle + API Detective + Performance Assistant + Workflow Runner
M5 Phase 13-14 差异化版本 IIWeb-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 - 脚本注入