omp packages

@someok/pi-session-history0.1.0

通过独立 /history 命令选择并恢复 pi 会话

someokpub Published 10 days ago MIT ~201 downloads/mo

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.

Did it work for you?

Result

One report per person. A new report replaces your old one.

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

快速开始

  1. 输入 /history 打开会话列表。
  2. 用 ↑ ↓ 选择,→ 展开最后一条提问(← 收起)。
  3. 按 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。