引言
在使用 Cursor 进行 AI 编程时,你是否遇到过这样的困扰:想回顾之前的对话却找不到入口?想搜索某个技术问题的解决方案却无从下手?或者想导出聊天记录分享给团队却不知道如何操作?
Cursor Chat Browser 正是为了解决这些问题而生的 Web 应用。它允许你浏览、搜索并导出 Cursor 编辑器的 AI 聊天历史,支持 Markdown、HTML、PDF 等多种格式,让你轻松管理和回顾与 AI 的对话。
核心特性
这款工具不仅是一个简单的查看器,更是一个完整的管理方案:
- 浏览与搜索:支持查看所有工作区的聊天历史,并提供全文搜索功能,能快速定位特定对话。
- 多存储支持:兼容旧版的工作区特定存储和新版的全局存储,确保不同版本的 Cursor 都能正常使用。
- 双重日志:同时支持 AI 聊天日志和 Composer 日志,并能区分显示。
- 组织与管理:按工作区组织聊天记录,方便查找。
- 响应式设计:支持深色/浅色模式,移动端也能友好访问。
- 多格式导出:支持将对话导出为 Markdown、带语法高亮的 HTML 以及 PDF 文档。
- 可收藏链接:支持生成书签化的聊天 URL,便于分享。
快速开始
安装过程非常简单,只需几步即可运行:
# 克隆仓库
git clone https://github.com/thomas-pedersen/cursor-chat-browser.git
cd cursor-chat-browser
# 安装依赖
npm install
# 启动开发服务器
npm run dev
启动后,在浏览器访问 http://localhost:3000 即可。
应用会自动检测 Cursor 工作区存储路径,无需手动配置:
- Windows:
%APPDATA%\Cursor\User\workspaceStorage - WSL2:
/mnt/c/Users/<USERNAME>/AppData/Roaming/Cursor/User/workspaceStorage - macOS:
~/Library/Application Support/Cursor/User/workspaceStorage - Linux:
~/.config/Cursor/User/workspaceStorage
如果自动检测失败,可以在配置页面(⚙️)手动设置路径。值得注意的是,新版本的 Cursor 已将聊天数据存储从工作区特定位置移动到全局存储,此应用已更新以支持两种存储方法,确保兼容性。
技术架构剖析
架构设计
项目采用 Next.js 14 App Router 架构,使用 TypeScript 开发,核心逻辑在于通过 SQLite 读取 Cursor 的聊天数据库。
整体结构清晰:
- Next.js 14:处理页面路由、服务端组件和客户端组件。
- SQLite 数据库读取:负责读取
state.vscdb文件,解析聊天记录和 Composer 日志。 - UI 组件:基于 shadcn/ui 构建导航栏、搜索栏和聊天列表。
- 样式系统:使用 Tailwind CSS 实现响应式设计和深色/浅色模式。
存储机制与路径检测
Cursor 编辑器将聊天历史存储在 SQLite 数据库中(state.vscdb 文件)。新版本(v44.9+)使用了全局存储,而旧版本则是每个工作区独立存储。
为了兼容这两种情况,应用内置了智能检测逻辑。以下是伪代码示例,展示了如何根据操作系统判断路径:
// 伪代码示例
function detectCursorPath(): string {
const platform = process.platform;
switch (platform) {
case 'win32':
return path.join(process.env.APPDATA, 'Cursor/User/workspaceStorage');
case 'darwin':
return path.join(os.homedir(), 'Library/Application Support/Cursor/User/workspaceStorage');
case 'linux':
// 检查是否是 WSL2
if (isWSL2()) {
return `/mnt/c/Users/${username}/AppData/Roaming/Cursor/User/workspaceStorage`;
}
return path.join(os.homedir(), '.config/Cursor/User/workspaceStorage');
default:
throw new Error('Unsupported platform');
}
}
数据库结构相对简单,主要包含一个 ItemTable,其中 value 字段存储 JSON 格式的聊天数据:
CREATE TABLE ItemTable (
key TEXT PRIMARY KEY,
value TEXT -- JSON 格式的聊天数据
);
搜索与导出实现
搜索功能支持全文搜索和类型过滤。当用户输入关键词时,系统会扫描所有工作区的 state.vscdb 文件,解析日志后进行匹配,并按 Chat 或 Composer 类型过滤结果。搜索结果会展示类型徽章、匹配片段、工作区位置、标题和时间戳。
导出功能则提供了三种格式选择:
- Markdown:纯文本格式,保留代码块结构。
- HTML:带样式的文档,代码块支持语法高亮。
- PDF:适合分享的格式化文档。
导出逻辑大致如下:
async function exportChat(chatId: string, format: 'md' | 'html' | 'pdf') {
const chat = await loadChat(chatId);
switch (format) {
case 'md':
return exportAsMarkdown(chat);
case 'html':
return exportAsHTML(chat);
case 'pdf':
return exportAsPDF(chat);
}
}
总结
Cursor Chat Browser 填补了 Cursor 编辑器在历史记录管理上的空白。相比编辑器内置功能,它在浏览便捷性、搜索能力和导出灵活性上都有显著优势。对于需要整理知识库、备份重要对话或团队协作分享 AI 编程经验的开发者来说,这是一个非常实用的工具。
项目地址:GitHub Repository


