michaelmjhhhh/pi-atelier
GitHub: michaelmjhhhh/pi-atelier
为 Pi Agent 设计的终端状态栏与实时活动侧边栏扩展,用信息密集的暗色界面替代默认页脚,帮助开发者实时监控 token 用量、成本和工具活动。
Stars: 20 | Forks: 1
# Pi Atelier
一个为 [Pi](https://pi.dev) 设计的响应式状态栏和实时活动侧边栏。
Pi Atelier 用一个安静的状态栏(Status Rail)替换了 Pi 默认的页脚,并添加了一个可选的停靠侧边栏,用于显示实时的 agent、对话轮次(turn)、工具、上下文、会话和项目信息。
在宽终端中使用了两个稳定的区域:agent 状态和工作区标识保持在左侧,而易读的遥测数据则右对齐。无论选择了哪种 Pi 主题,该扩展始终使用其固定的暗色 Midnight Spectrum —— 蓝色代表输入/上下文,紫色代表输出/菜单,青色代表缓存,琥珀色代表成本/工作状态,红色代表危险状态。
## 演示
[](https://github.com/michaelmjhhhh/pi-atelier/releases/download/v0.3.0/demo.mp4)
[观看 74 秒的高清完整演示](https://github.com/michaelmjhhhh/pi-atelier/releases/download/v0.3.0/demo.mp4) —— 该大体积视频作为 GitHub Release 资产托管,因此不会增加 Git 克隆或 npm 包的体积。
### 界面细节
### 固定的暗色 Midnight Spectrum
Pi Atelier 只有一种视觉调色板。选择明亮、暗色或自定义的 Pi 主题不会改变页脚的颜色:标签、工作区文本、指标值、状态锚点、警告和错误全都保留相同的暗色风格处理。启用 `NO_COLOR` 后,页脚将不输出自定义 RGB 颜色,而是使用主题原生的中性色和语义角色。
## 功能
- 保留累计的输入、输出、缓存读取、缓存写入、缓存命中、成本、订阅、上下文和压缩信息
- 永不换行的响应式单行布局
- 模型和思考级别控制
- 可搜索的工具控制
- 标准(editorial)、极简和经典显示预设
- 会话详情、重命名和安全压缩控制
- 会话级别的非捕获式停靠信息栏,包含实时的运行、对话轮次和工具活动
- 当对话轮次稳定或 Pi 明确请求用户输入时的完成通知
- 无论选择何种主题,均采用固定的暗色 Midnight Spectrum,并提供 `NO_COLOR` 回退
- 用户和受信任项目的配置
- 无遥测或外部网络请求
## 环境要求
- Pi `0.80.7` 或更新版本
- Node.js `22.19.0` 或更新版本
- 交互式 TUI 模式
## 安装
```
pi install npm:pi-atelier
```
尝试检出而不进行永久安装:
```
pi -e ./pi-atelier
```
Pi 包会以您完整的系统权限执行。在安装前请检查第三方源代码。
## 本地开发
```
git clone https://github.com/michaelmjhhhh/pi-atelier.git
cd pi-atelier
npm install
npm run check
pi -e .
```
## 页脚结构
- `in` 累计输入 token
- `out` 累计输出 token
- `cache` 标准预设中最近的缓存命中率
- `read`、`write` 和 `hit` 经典预设中详细的缓存遥测数据
- `$` 累计估算成本
- `(sub)` 基于 OAuth 订阅的访问
- `ctx` 上下文利用率
- `(auto)` 自动上下文压缩
- `*` 已跟踪的工作区树更改
空闲时 `READY` 保持固定。在每个工作周期期间,工作标签会从一组有趣的内置短语集中选择一次——例如 `KNEADING`、`MOONWALKING` 或 `PONDERING`——并保持稳定直到周期结束。当完整的活动标签适合显示时,其省略号每 400 毫秒从 `...` 缩短为 `..` 再到 `.`。省略号保留了其最大宽度,因此模型和后面的工作区文本保持固定。较窄的终端使用紧凑的静态 `WORKING` 标签。
## 菜单
使用以下方式打开 Pi Atelier:
```
/atelier
```
默认快捷键是 `alt+a`。菜单包含:
- **Model** — 选择已认证的模型或思考级别
- **Tools** — 搜索并切换激活的 Pi 工具
- **Display** — 切换预设并保存用户默认设置
- **Session** — 检查、重命名或压缩当前会话
- **Sidebar** — 显示或隐藏停靠信息栏,并展开或折叠工具名称详情
- **Completion notifications** — 在 macOS 和 Windows 上启用或禁用原生系统通知
附加命令:
```
/atelier disable
/atelier enable
```
## 侧边栏
在每个会话中,侧边栏初始为隐藏状态。请使用这些命令对其进行显式控制:
```
/atelier sidebar # toggle between shown and hidden
/atelier sidebar on # show it; safe to repeat
/atelier sidebar off # hide it; safe to repeat
/atelier sidebar tools # toggle active tool-name details
/atelier sidebar tools on|off
```
您也可以按 `alt+a` 从菜单中访问独立的侧边栏可见性和工具详情控件。启用后,这个会话级别的信息栏会附加到右上角,填满终端高度,并在不抢占编辑器焦点的情况下保持可见。
优先扫描的层级以 agent 状态和模型开始,随后是紧凑的分段上下文计量器和合并的工作区摘要。在侧边栏列数低于 40 时,统一的紧凑模式会将 Agent 和 Workspace 的元数据堆叠起来,使用内联的 Usage 配对,并折叠工具详情,以便重要数值保持完整而不被截断。在更宽的尺寸下,成对的指标和工具列使用内在内容测量值,而不是在可用宽度内拉伸间距。Usage 仅在存在 token 或成本数据时出现。访问类型与 agent 元数据一起保持可见。激活的工具名称默认折叠在工具计数后面,可以通过命令或菜单展开;该偏好将保存到用户配置中。展开的名称在侧边栏列数低于 40 时会自动折叠,并在宽度增加时重新出现。常规的健康扩展状态保持隐藏,而警告和错误会作为明确的警报显示。
## 完成通知
完成通知默认启用,并且是基于事件而非基于时间的。当 Pi 达到 `agent_settled` 状态时,Atelier 会发送通知,这意味着没有剩余的自动重试、压缩重试或排队的续接。当安装了 `@juicesharp/rpiv-ask-user-question` 时,Atelier 还会监听其稳定的阻塞状态事件,并仅在其问卷实际等待答案时发送通知。通知仅包含项目、会和操作状态;绝不包含提示词和助手回复内容。
macOS 和 Windows 会通过 `osascript` 或 PowerShell 尽力接收原生系统通知。其他平台不接收完成通知。原生通知进程是分离的、受时间限制的,并在不可用时静默失败;Atelier 不会添加终端通知或回退方案。
在 macOS 上,`osascript` 通知归属于脚本编辑器(Script Editor)。它们遵循用户的脚本编辑器通知设置和激活的专注模式(Focus mode),因此用户可能需要允许脚本编辑器通知,或将其添加到激活的专注模式的允许应用列表中。
使用 `/atelier` 或 `alt+a` 来禁用或重新启用完成通知。此偏好将保存到用户配置中。
在 agent 运行期间,侧边栏会添加紧凑页脚特意省略的信息:当前基于 1 的对话轮次、运行流逝时间、激活的并行工具调用、最近的三次工具结果、每个工具的持续时间以及完成的/失败的工具总数。页脚始终保持稳定的单行状态栏,从不重复工具名称或工具历史记录。
侧边栏采用非重叠的分割呈现方式:Pi 的工作区会重新排布到信息栏左侧的列中,而不是在下方渲染。它从 44 列开始,可以在 28 到 72 列之间调整大小,始终为 Pi 保留至少 64 列,并在终端列数低于 92 时自动隐藏。
按 `Ctrl+Shift+R` 进入临时的调整大小模式(Resize mode)。Pi 工作区和侧边栏会连续地同步调整大小。从分隔线或任一相邻列拖动并释放以接受更改;在其他地方点击会使调整大小模式保持激活状态。使用左/右方向键进行单列调整,Shift+左/Shift+右进行四列调整,Enter 接受更改,或 Escape 恢复之前的宽度。鼠标报告仅在调整大小模式期间激活,因此在其他所有时间,普通的终端文本选择保持不变。
这种分割完全是在 Pi Atelier 内部实现的,通过在运行时包装活动的 TUI 渲染器;没有修改任何 Pi 文件。这是一个对版本敏感的集成,依赖于 Pi 当前的 TUI 结构,当 Pi 更改其渲染器内部实现时,可能需要更新兼容性。终端字符分隔线无法显示 Ghostty 原生的悬停调整大小光标。
## 配置
用户配置:
```
~/.pi/agent/pi-atelier.json
```
受信任的项目配置:
```
/.pi/pi-atelier.json
```
只有在 Pi 信任该项目之后,项目设置才会覆盖用户设置。大多数菜单更改仅应用于当前会话;**Save as user default**(另存为用户默认值)会以原子方式写入显示配置。侧边栏工具详情和完成通知会立即保存,以便这些偏好能在未来的会话中保留。完成通知是全局用户偏好,因此项目和会话配置无法覆盖该设置。Pi Atelier 绝不会从菜单中修改项目配置。
完整示例:
```
{
"preset": "editorial",
"shortcut": "alt+a",
"segments": [
"brand",
"activity",
"metrics",
"context",
"model",
"git",
"statuses",
"menu"
],
"density": "comfortable",
"ornament": "none",
"contextWarning": 70,
"contextDanger": 90,
"currencyDecimals": 3,
"showExtensionStatuses": true,
"showSessionActions": true,
"showSidebarToolNames": false,
"completionNotifications": true
}
```
未知或无效的值将被忽略并发出一次警告。如果省略,必需的 `metrics` 和 `context` 段将被恢复。标准预设始终隐藏品牌装饰;对于包含 `brand` 段的非标准配置,`restrained` 仅显示 `ATELIER`。
## 预设
- **editorial** — 默认状态栏,包含活动、工作区标识、缓存命中摘要和遥测数据
- **minimal** — 紧凑的活动、指标、上下文、模型和菜单
- **classic** — 详细的缓存遥测、上下文、模型、Git 和扩展状态
## 响应式行为
随着终端变窄,状态栏会按优先级移除可选信息,而不是切换到固定的布局。品牌和扩展状态首先被移除,接着是 Git 和思考级别、成本、模型、输入和输出总量、缓存,最后是菜单快捷键。活动和上下文会保留最长时间,当空间极其有限时,结果会被安全地截断而不是换行。
## 隐私和安全
Pi Atelier:
- 不执行任何遥测、分析或外部网络调用
- 不存储提示词、响应、凭证或会话内容
- 从不在完成通知中包含提示词或助手响应内容
- 读取 Pi 内部已有的结构化使用元数据
- 在相关事件后执行本地 `git status --short --branch --untracked-files=no` 以显示已跟踪的脏状态
- 在启用了尽力而为的系统通知时,在 macOS 上调用 `osascript` 或在 Windows 上调用 PowerShell
- 仅当 Pi 报告该项目受信任时才读取项目配置
## 页脚冲突
Pi 一次仅支持一个自定义页脚。如果多个扩展调用 `setFooter`,则扩展的加载顺序将决定哪个页脚可见。Pi Atelier 不包装未公开的页脚内部结构。请使用 `/atelier disable` 将其禁用,以恢复 Pi 的内置页脚。
## 故障排除
### 菜单快捷键打不开
某些终端或个人按键映射会拦截 `alt+a`。请使用 `/atelier`,然后在 `pi-atelier.json` 中选择另一个快捷键并运行 `/reload`。
### 指标与当前上下文百分比不同
Token 和成本指标是整个会话的累计值。上下文百分比仅描述压缩后当前模型的上下文。
### 页脚丢失
Pi Atelier 特意不在打印、JSON 或 RPC 模式下安装终端 UI。在 TUI 模式下,请检查是否有其他扩展在加载顺序中稍后替换了页脚。
## 发布
发布验证必须包括:
```
npm run check
npm pack --dry-run
npm pack
```
在运行 `npm publish` 之前检查 tarball。
## 许可证
MIT
| Status Rail and Atelier menu access | Live Activity Sidebar |
|---|---|
![]() |
![]() |
标签:Agent监控, MITM代理, UI/UX组件, Web界面, 侧边栏, 状态栏, 终端UI, 自动化攻击

