统计、herdr 投影。features.stats 控制 /tokens 与 /quota,其余功能各自独立。
各文件的职责见头注释,头注释之外:
stats.ts:统计入口;/tokens扫会话 jsonl 统计 token 与成本(源自 pi-token-stats, MIT)。按 1MB 块读文件、按字节切行,只解码带"usage"的行:内存只占一块加当前一行,每块让出事件循环,数百 MB 的会话文件也不超过 Node 的字符串上限、不冻界面;读不了的文件与目录计数并写进报告,不静默漏掉。扫描语义不随优化改变(跟随目录软链接,无时间戳的记录计入任意窗口),不按文件修改时间跳过文件。参数只认纯数字天数,其余提示用法
/quota 查询已在 Pi 中 OAuth 登录的 Codex、Claude 订阅剩余额度,并展示接口提供的 Fable 周额度。
结果带查询时间,不打断当前工作、不发送给模型;未登录或查询失败会明确显示。查询没有后台刷新或磁盘缓存,
结果是供应商返回的快照,不保证供应商零延迟。
只复用 Pi 的 OAuth 登录,由模型注册表解析凭据;不读取其他 CLI 的登录文件。每次命令并行请求两家供应商, 同一会话只允许一个在途查询;一家失败不隐藏另一家的结果,会话退出取消请求并丢弃迟到通知。
Claude 只解析当前接口的 limits[],session、weekly_all 与 Fable 的 weekly_scoped 分别展示。
is_active 为 false 的窗口仍可能有有效额度,不能据此过滤。Fable 与总体周额度共享约束,不是额外额度;接口未提供时
明确说明。接口结构异常报错,不猜数字或回退旧字段。供应商接口是非公开契约,变更需以真实响应重新核实。
投影内容、状态来源、上报机制与为什么必须卸载 herdr 官方 Pi 集成,都在 herdr-projection.ts 头注释。头注释之外:
- 卸载命令是
herdr integration uninstall pi;不要在 herdr 设置面板里点 install,会装回来。 - 头注释里的丢弃规则与状态标签(
state_labels.working)都是 herdr 的行为,升级 herdr 后需重新核实。FireCode 的 source 是firecode(自定义 source 不能以herdr:开头)。 tokens.session把会话名供给侧边栏行布局:herdr 侧边栏只消费自定义 token,用户在 herdr 配置里的 pi 行布局引用$session。- workspace、pane label 与 tab label 都归 herdr、用户或 Master 管;FireCode 不写这些持久名称——tab 是多 pane 共享状态,而 herdr 没有条件 rename/CAS 与清除自定义名的接口,先检查再 rename 无法消除 split/move 竞态。
- 只听宿主的
session_info_changed(命令、改名键、自动命名已在宿主收口),另听 model/thinking 选择。同一内容不重发,只有确认送达才记为已发布,请求串行避免乱序覆盖。只有quit清空身份并 release,reload/new/resume/fork 由新会话的session_start覆盖(重载时回合已在跑的情形由busy.ts在session_start读ctx.isIdle()补上,herdr 不另算)。