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 —— 蓝色代表输入/上下文,紫色代表输出/菜单,青色代表缓存,琥珀色代表成本/工作状态,红色代表危险状态。 ## 演示 [![Pi Atelier 演示,展示了完整的实时活动侧边栏和状态栏页脚](https://static.pigsec.cn/wp-content/uploads/repos/cas/77/775a9feeff28370a81330a57bf4e55016d59bbc5a773cf45e2b3c38805378d20.png)](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 包的体积。 ### 界面细节
Status Rail and Atelier menu access Live Activity Sidebar
Pi Atelier status rail and menu shortcut Pi Atelier live activity sidebar
### 固定的暗色 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
标签:Agent监控, MITM代理, UI/UX组件, Web界面, 侧边栏, 状态栏, 终端UI, 自动化攻击