@someok/pi-session-history0.1.0
通过独立 /history 命令选择并恢复 pi 会话
Untested on omp
This is a pi package. No one has reported whether it works on omp yet. If you try it, add your result below.
Reports 0
No reports yet.
Readme
pi-session-history
/history 帮你更方便地找回 pi 的历史会话。列表里直接看到每条会话聊了多少、最后是哪个模型回复的,还能就地预览最后一条提问。
选中后按 Enter 恢复会话,不想切换就按 Esc 返回。
功能其实是参考的原生的 /resume ,只是再 resume 功能的基础上做了一些增强,主要是通过查看最后一条用户消息来方便用户了解会话。
功能
- 每条会话两行:第一行沿用原生标题、活动时间和路径,第二行显示消息数(
msgs)与最后回复模型(provider/model)。 - 就地预览:按
→展开最后一条提问,最多 6 行;正文太长时可在预览窗口内翻页。 - 全文阅读:按
Ctrl+O打开不受行数限制的只读视图,Esc返回后列表状态原样保留。 - 原生操作习惯不变:搜索语法、范围切换、排序、命名筛选、路径显示和快捷键重绑定都沿用原生设计。
- 随看随读:列表先显示可用内容,消息数与模型在后台补齐,打开后即可搜索、选择和恢复。
- 只在本地处理:不调用模型,不上传、不修改,也不另存会话内容。
安装
pi install npm:@someok/pi-session-history
快速开始
- 输入
/history打开会话列表。 - 用
↑↓选择,→展开最后一条提问(←收起)。 - 按
Enter恢复选中的会话;按Esc取消,回到编辑器。
界面示意
History (Current Folder) Sort: Threaded
tab scope · re:<pattern> regex · "phrase" exact
› 重构登录流程 2h ago
18 msgs · anthropic/claude-sonnet-4
│ 帮我把登录流程改成 …
│ … 1-6/12 · Ctrl+O full message
修复时区问题 3d ago
7 msgs · openai/gpt-4.1
第一行沿用 pi 原生的标题、活动时间和路径,第二行是本扩展补充的信息。界面文案与原生选择器一样使用英文。
快捷键
| 按键 | 作用 | 可重绑定为 |
|---|---|---|
↑ ↓ |
上下移动选择 | tui.select.up / tui.select.down |
Enter |
恢复选中的会话 | tui.select.confirm |
Esc Ctrl+C |
取消,回到原编辑器 | tui.select.cancel |
Tab |
切换「当前目录 / 全部会话」 | tui.input.tab |
Ctrl+S |
切换排序:线程 → 最近 → 相关性 | app.session.toggleSort |
Ctrl+N |
只看已命名的会话 | app.session.toggleNamedFilter |
Ctrl+P |
显示 / 隐藏会话路径 | app.session.togglePath |
→ ← |
展开 / 收起最后一条提问;在全文视图里翻页 | 固定按键 |
Ctrl+O |
打开选中会话的只读全文视图 | 固定按键 |
PageUp PageDown |
预览溢出时在窗口内翻页;到边界后翻列表;全文视图翻页 | tui.select.pageUp / tui.select.pageDown |
标为「固定按键」的两个键在搜索框里也能用:即使正在搜索,→ ← 和 Ctrl+O 也会正常展开预览或打开全文,搜索词仍可用 Ctrl+B / Ctrl+F 等原生按键编辑。其余按键沿用 pi 的原生 action,可在快捷键配置中重新绑定;设为空即可停用。
每个会话显示什么
| 位置 | 内容 |
|---|---|
| 第一行 | 标题、活动时间、路径 / 工作目录(原生口径,不再显示原生消息总数) |
| 第二行 | msgs 消息数、provider/model 最后回复模型 |
标题
有名称时显示名称;未命名会话沿用 pi 的原生回退,取第一条可读的用户消息;完全没有消息时显示 (no messages)。
消息数
只统计用户消息和助手消息,包含会话的所有分支以及压缩(compaction)前的记录。工具结果、系统消息、直接执行的 bash、扩展自定义消息都不计入;助手只要发起了工具调用,这条助手消息本身仍算一条。
最后回复模型
显示整个会话中最后一条助手消息实际使用的 provider/model:
| 情况 | 显示 |
|---|---|
| 最后一条助手消息正常 | 它记录的 provider/model |
| 已切换模型但还没得到回复 | 仍是上一次实际回复的模型 |
| 使用虚拟模型或路由器 | 实际处理该条回复的 provider/model |
| 最后一条回复出错或被中止 | 仍显示它的模型,不会退回更早的成功回复 |
| 还没有助手消息 | No assistant message |
| 记录中缺少 provider 或 model | 缺失的字段显示 unknown |
活动时间与排序
活动时间和相对时间格式与原生一致(now、m、h、d、w、mo、y 分别表示现在、分钟、小时、天、周、月、年)。Ctrl+S 在三种排序间循环:
- 线程(默认):无搜索时按会话的父子关系分组,按各子树的最新活动时间排列;搜索时按匹配程度排列。
- 最近:按活动时间排列。
- 相关性:按匹配程度排列,匹配程度相同时按活动时间从近到远排列。
右侧附加信息
每条会话右侧按原生顺序显示相对时间、路径(Ctrl+P 开启)以及「全部」范围下的工作目录。空间不足时会先截断这些附加信息,不会挤掉标题。
列表外观与原生 /resume 一致,使用当前主题渲染;中文、emoji 和窄终端下不会越界。列表显示在会话内容下方,不会遮住上面的内容;按终端高度滚动,选中项始终完整可见。终端太矮时会省略装饰行,优先保留搜索框和列表。
搜索与范围
搜索沿用原生规则,匹配范围包括会话 id、名称、全部用户/助手正文和工作目录:
| 输入 | 匹配方式 |
|---|---|
login flow |
空格分词,模糊匹配 |
"login flow" |
精确短语 |
re:^fix\( |
正则 |
不区分大小写,不支持按 model/provider 搜索。
Tab 在「当前目录」与「全部会话」之间切换:默认情况下「全部」扫描 pi 的 sessions 根目录;如果使用了自定义 session 目录,则只扫描该目录,与原生含义一致。Ctrl+N 只看已命名的会话,没有结果时会提示如何切回。
消息预览
按 → 展开选中会话的最后一条提问,按 ← 收起:
- 取整个会话中记录顺序最后一条用户消息,不受准备恢复的分支影响。
- 保留正文与换行,按终端宽度折行;左侧的
│竖线标记消息体。 - 最多显示 6 个终端行,超出时显示
… 1-6/40 · Ctrl+O full message。 - 正文超出窗口时,按
PageUp/PageDown在窗口内翻页;翻到顶部或底部后,同一个键继续翻列表。这些键只滚动预览,不会改变选中项,也不会触发恢复。 - 已识别的技能注入内容简化为
[skill] <name>,你写的内容原样保留;无法识别的疑似技能块不会被动。只有技能时显示技能名,技能加附件时两者都显示。 - 图片显示为
[1 image]/[N images],不渲染图片本身;最后一条只有图片时仍指向这条消息,不会退回更早的文字。技能、附件和正文都为空时显示(empty message)。 - 可以同时展开多条。移动、排序、筛选、切换范围后,展开状态跟着会话走;关闭选择器后重置。
- 会话没有用户消息时显示
No user message;读取失败显示Could not load message preview.,按Esc可退出。
全文视图
按 Ctrl+O 打开选中会话最后一条提问的只读全文,不受 6 行限制:
- 不要求先展开预览,也不要求信息读取完成;尚未完成时会先显示
Loading message preview...。 ↑/↓逐行滚动,←/→或PageUp/PageDown翻页,底部显示(n/total)。Esc返回列表,搜索、范围、排序、筛选、选中项、展开状态和滚动位置都会保留;之后按Enter仍可恢复会话。- 视图只读:字符键和
Enter等列表操作在这里无效,不会误恢复会话或改动内容。 - 正文口径与预览一致(最后用户消息、技能名称、图片提示),只是不再截断,并且可以滚动。
加载与失败
打开列表后即可搜索、选择和恢复,不需要等所有信息读完:
- 消息数与模型在后台逐条补齐;未就绪时显示
Loading details...或Loading message preview...,不会先显示0 msgs、unknown之类的假结果。 - 后台补齐不会移走你的选择;空列表和读取中都有明确提示。
- 单条会话读取失败只会标记这一条(
Could not load session details.),其他会话不受影响。 - 关闭列表会停止后台读取;重新打开时会回到收起状态,并重新读取保存内容,不使用过期缓存。
已知限制
- fullscreen 模式下无法在预览内翻页:pi 1.1.0 的 fullscreen 会用
PageUp/PageDown滚动原生会话视口,/history收不到这两个键。可以按Ctrl+O进入全文,用←/→翻页;普通 TUI 模式不受影响。 - 非交互模式没有界面:RPC、JSON、print 模式下
/history不启动终端界面,RPC 只会收到英文提示。 - 不含会话管理:列表内不能重命名或删除会话,需要这些操作时请使用原生
/resume。
隐私
/history 只在本地读取会话文件:不调用模型、不发起额外网络请求、不上传会话内容、不修改或另存会话记录,也不持久化预览与全文(图片数据在读取后即被丢弃)。浏览历史不会产生新的数据副本。
开发
构建、加载源码、测试与真实 CLI 冒烟见 docs/development.md。
许可
MIT 许可。原生行为参考与第三方许可说明见 THIRD_PARTY_NOTICES.md。