Skip to content

Repository files navigation

π Pi Session Viewer

把 pi coding agent 的 JSONL 会话记录变成可读的对话时间线

一个基于 Tauri + React + Rust 的原生桌面工具:扫描目录 → 解析会话 → 结构化呈现

中文 · English

Release License Tauri Rust Platform


为什么需要它?

pi 会把每次会话完整记录到 ~/.pi/agent/sessions/ 下的 JSONL 文件里 —— 消息、思考过程、工具调用、工具输出、Token 用量、模型切换、分支与压缩。信息很全,但直接打开就是一堆 JSON。

Pi Session Viewer 把这些文件解析成结构化的聊天界面:谁说了什么、调用了哪个工具、参数是什么、返回了什么、花了多少 Token —— 一目了然。

界面预览(示例数据)

全文搜索 —— 搜索所有消息正文,按角色筛选,命中高亮,点击跳转:

全文搜索


功能

📂 会话浏览

  • 递归扫描任意目录下的 .jsonl 会话文件(默认 ~/.pi/agent/sessions/)
  • 按项目目录自动分组,支持一键筛选
  • 跨会话全文内容搜索(见下)
  • 每条会话显示:消息数、工具调用数、文件大小、模型、错误标记

🔍 全文内容搜索

不只是搜标题 —— 搜索所有消息正文,并直接定位到命中的那一条。

语法 作用 示例
关键词 模糊匹配正文(大小写不敏感,支持中文) 数据库连接池
"精确短语" 必须逐字连续出现 "connection pool"
-词 排除包含该词的内容 泄漏 -日志
role:用户 按角色筛选 role:助手
role:助手+思考 多角色(或关系) role:user+thinking
-role:结果 排除某角色 pool -role:工具结果

角色名中英文皆可:user/用户、assistant/助手、thinking/思考、tool/工具调用、result/工具结果、event/事件。 (也接受简写 u a t r e。)

界面上还提供:

  • 角色筛选面板 — 点击彩色标签即可「仅显示」或「排除」
  • 命中数量统计 — 按角色分组显示各有多少条匹配
  • 命中片段高亮 — 每条结果显示上下文 + 黄色高亮命中词
  • 多次命中提示 — 显示该条内容中出现几次(如「5 处」)
  • 按会话分组 — 同一会话的命中聚在一起,显示会话名与命中数
  • 点击跳转 — 点任意结果直接跳到原消息,自动切换到所在分支并闪烁高亮
  • Ctrl/Cmd + K — 随时聚焦搜索框

搜索有 mtime 缓存:首次扫描索引全部会话,之后只重新解析被修改的文件(实测 93 个会话约 200–400ms)。

会话内查找(Ctrl/Cmd + F) —— 打开某个会话后,可只在该会话内查找:显示 当前/总数,命中处黄色高亮,上下按钮或 Enter / Shift+Enter 在命中之间跳转,F3 下一个,Esc 关闭。

会话内查找

💬 结构化对话时间线

内容 呈现方式
用户消息 绿色气泡,保留原始换行
助手回复 完整 Markdown 渲染(表格、列表、引用、链接)
代码块 语法高亮(highlight.js,自动语言识别)
思考过程 可折叠的 💭 思考块,默认折叠并显示摘要
工具调用 可展开卡片:命令 / 文件路径 / 参数一屏可见
工具输出 等宽代码块,超长自动截断并提供字符数提示
文件编辑 红绿 diff 视图,edit 的 oldText/newText 并排呈现
网页抓取 输出按 Markdown 渲染,而非原始字符串

📊 用量统计

  • 每次回复的 Token 明细:输入 / 输出 / 缓存读 / 缓存写 / 总计 / 花费
  • 会话累计统计条:用户轮次、助手回复、工具调用、思考块、总 Token、总花费

🌳 分支与事件

  • 完整解析 pi 的 id/parentId 树结构,默认跟随最新分支
  • 多分支会话提供下拉切换(叶节点选择)
  • 模型切换、思考等级、重命名、上下文压缩、分支摘要等以时间线事件呈现
  • 隐藏的扩展消息(display: false)自动跳过

🔒 隐私

  • 完全本地:所有解析在 Rust 后端内存中完成,不联网、不上传
  • 只读:绝不修改任何会话文件
  • 单文件大小 / Token 上限保护,避免超大输出拖垮界面

下载

前往 Releases 下载:

平台 文件
Windows 10/11 x64 Pi-Session-Viewer_x.y.z_x64-setup.exe(推荐)或 .msi
macOS (Apple Silicon) Pi.Session.Viewer_x.y.z_aarch64.dmg
Linux x64 .AppImage 或 .deb

Windows 用户直接运行 setup.exe 安装即可,无需任何运行时依赖(Tauri 使用系统自带 WebView2)。


使用

  1. 启动应用,自动扫描 ~/.pi/agent/sessions/
  2. 左侧点击任意会话 → 右侧显示结构化对话
  3. 点击「更改」可切换到其他目录(例如备份的会话归档)
  4. 点击工具卡片标题展开参数与输出
  5. 点击 💭 思考过程展开完整推理内容

自定义会话目录:设置环境变量 PI_SESSIONS_DIR 可覆盖默认路径。


从源码构建

依赖

开发

npm install
npm run tauri dev

构建

npm run tauri build

产物在 src-tauri/target/release/bundle/。

从 Linux 交叉编译 Windows 安装包

需要 mingw-w64 与 nsis(sudo apt-get install mingw-w64 nsis):

rustup target add x86_64-pc-windows-gnu
npm run tauri build --target x86_64-pc-windows-gnu

产物:src-tauri/target/x86_64-pc-windows-gnu/release/bundle/nsis/*-setup.exe。 Tauri 将交叉编译标记为实验性;正式发布由 release workflow 在 windows-latest 上原生构建。

测试

npm run test                                  # 前端:分支解析、渲染模型、格式化
cargo test --manifest-path src-tauri/Cargo.toml --lib   # 后端:JSONL 解析、扫描、分组

架构

pi-session-viewer/
├── src/                        # React 前端
│   ├── types.ts                # 与 Rust 结构对应的类型
│   ├── sessionModel.ts         # 分支重建 / 渲染模型 / 统计(含单元测试)
│   ├── api.ts                  # Tauri invoke 封装
│   ├── App.tsx                 # 布局、会话头、事件行
│   └── components/
│       ├── Sidebar.tsx         # 项目分组、搜索、会话列表
│       ├── MessageView.tsx     # 用户/助手/工具结果/思考块
│       ├── ToolCallView.tsx    # 工具卡片、参数、diff、输出
│       └── Markdown.tsx        # Markdown + 代码高亮
└── src-tauri/                  # Rust 后端
    ├── src/session.rs          # JSONL 解析、扫描、项目分组(含单元测试)
    └── src/lib.rs              # Tauri 命令注册

设计原则:Rust 负责快速扫描与容错解析,前端只接收结构化 JSON 并专注渲染。sessionModel.ts 中的分支重建逻辑与 Rust 解析器分别测试,互不依赖。

支持的数据格式

完整支持 pi session format v1/v2/v3:

  • 条目类型:session、message、model_change、thinking_level_change、compaction、branch_summary、custom、custom_message、session_info、label
  • 消息角色:user、assistant、toolResult、custom、branchSummary、compactionSummary
  • 内容块:text、thinking、toolCall、image

对损坏行容错:无法解析的行会被跳过并标记,不影响整个会话加载。


License

MIT


如果这个工具帮到了你,欢迎点个 ⭐

About

A Tauri desktop viewer that turns pi coding agent JSONL session files into a structured, readable conversation timeline.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages