alps-pi
Personal Pi 0.84.4+ TUI beautification extension with message frames, input styling, animations, and theme support.
Package details
Install alps-pi from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:alps-pi- Package
alps-pi- Version
0.3.0- Published
- Sep 4, 2026
- Downloads
- 176/mo · 18/wk
- Author
- alpsckr
- License
- MIT
- Types
- extension, theme
- Size
- 334.8 KB
- Dependencies
- 1 dependency · 2 peers
Pi manifest JSON
{
"themes": [
"./themes"
],
"extensions": [
"./index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
alps-pi
安装
pi install npm:alps-pi
也可以直接从 GitHub 安装:
pi install git:https://github.com/MrCKR/alps-pi
安装后在 pi 内执行:
/reload
更新时最简单的方式:
pi update npm:alps-pi
如果使用 GitHub 安装:
pi remove git:https://github.com/MrCKR/alps-pi
pi install git:https://github.com/MrCKR/alps-pi
然后:
/reload
这是什么
alps-pi 是面向 Pi 0.84.4+ 的 TUI 美化扩展。它会给 Pi 内置主要消息块加统一外框,让对话、工具调用和执行结果更容易区分,并提供输入框线框美化、内置 Animations 和 alps 主题。固定底部输入框由 Pi 原生 fullscreen TUI 提供。
扩展特点:
- 消息线框默认启用,无需每次手动打开。
- Pi
/settings中选择TUI mode: fullscreen后,使用 Pi 原生固定 editor/status/widget/footer dock。 - 美化输入框默认开启,会显示完整输入框线框,并把模型、thinking、上下文进度和可配置的会话指标嵌入边框。
- 内置 Animations 默认开启,会完整替代外部
pi-animations的底部 Working/Thinking/Tool 动画,并兼容替换 Pi hidden thinking 的Thinking...。 /alps-pi设置持久化到独立的~/.pi/agent/alps-pi/settings.json,/reload或新会话后按上次设置恢复。首次升级按“独立主文件 → Pi settings 的alps-pinamespace →~/.pi/agent/alps-pi.json→ 默认值”读取,并保留原 namespace 供回滚。/alps-pi提供设置界面。- 内置
alpstheme,基于 Synthwave '84 配色整理进本包。 - 消息组件 monkey patch 可回滚;输入美化只使用 Pi 公开 UI API。
- 普通空消息不会渲染成空白框。
- 消息正文不铺大面积背景色,只渲染边框、标题和正文颜色。
- 可关闭 assistant 正文线框,方便复制回复内容。
命令
/alps-pi 打开设置界面
/alps-pi preview 预览美化线框样式
/alps-pi 设置界面包含六个直接开关、Input Metrics、Animations 和快捷键配置项:
Master Switch 统一启用或关闭消息线框、输入框美化、Footer 与动画,默认 ON
Assistant Frame 控制 assistant 正文回复是否包线框,默认 ON
Compact Tools Off / Compact / Collapsed 三态,默认 Compact
Compact Edit Compact 模式下允许 edit 也极简展示,默认 OFF;Collapsed 时隐藏但保留偏好
Beautified Input 控制输入框线框与嵌入边框状态,默认 ON
Input Metrics 分别控制输入、输出、缓存命中率、Token 速度和耗时,默认全部 ON
Footer 控制 Alps Pi 是否接管底部状态栏,默认 ON
Animations 配置底部 Working/Thinking/Tool 与 hidden thinking 内置动画,默认 ON
Shortcuts 管理暂存、复制、剪切和 editor 光标快捷键
操作方式:
↑/↓ 选择
Enter/Space 切换
Esc/q 关闭
Compact Tools 持久化为 "off" | "compact" | "collapsed"。旧 Boolean 配置自动迁移:true -> "compact",false -> "off"。Off 保留完整工具内容,Compact 保留原有逐工具首条有效文本摘要;Collapsed 把相邻的 Tool、Bash、Skill、Resource/Custom、Compaction、Branch、Working 等非对话 frame 合并为一个 Tools frame。只有可见且非空的 User、Assistant 或 Thinking 会切组,只有 tool call 的 Assistant 不切组。
Collapsed 第一行显示 ×N,存在失败时追加 · N failed;第二行显示最新活动项的 TOOL <toolName> <status> : <Compact summary>。Edit 始终只显示路径,不读取 Compact Edit 偏好。组运行时耗时实时增长,遇边界后冻结,并作为下一可见 frame 的起点。顶部方向指标中,↑ 表示上传、本地或 tool 侧新保留上下文,↓ 表示模型侧新保留上下文;每项只计一次。普通 frame 的单一 [...] 指标同样只表示本 frame 新保留到后续模型上下文的内容,不是会话累计用量,也不随 UI 截断、图片隐藏或完整 prompt 重传变化。
覆盖范围
扩展会包装这些 Pi TUI 组件:
UserMessageComponentAssistantMessageComponentCustomMessageComponentSkillInvocationMessageComponentCompactionSummaryMessageComponentBranchSummaryMessageComponentToolExecutionComponentBashExecutionComponent
默认不会包装:
- 基础
Loader - editor
- footer
- header
- overlay
alps-pi 0.2.0 不再接管 terminal viewport。需要固定输入框时,请在 Pi /settings 中将 TUI mode 设为 fullscreen;滚动、选区、鼠标、粘贴和 dock 布局全部由 Pi 原生 TUI 管理。regular 模式仍保留消息线框、Beautified Input、状态、Animations 和输入框快捷键,但不会模拟固定 dock。旧 fixedBottomEditor.enabled 以及 transcript 滚动/跳转快捷键字段仅原样保留,供回滚到 0.1.5,现代 runtime 不读取或执行。
开启 Beautified Input 后,扩展会把 editor 包装成完整线框:顶部左侧显示模型与 thinking,顶部右侧以图标、10 字符进度条和百分比/窗口显示上下文;底部右侧依次显示本会话累计输入、累计输出、最近一次请求的缓存命中率、最近一次有效响应的 Token 输出速度和会话耗时。Input Metrics 子页可分别关闭这五项,设置独立持久化;指标使用 [图标] [数据] 紧凑格式,并以 · 分隔。输入、输出、速度和耗时使用固定语义色,缓存命中率按 >= 90%、>= 60%、< 60% 分别显示为绿、金、红。窄终端会按缓存、输出、输入、速度的顺序整项隐藏,优先保留耗时。开启 Footer 后,extension statuses 与上一个问题保持在线框下方显示;关闭时 Alps Pi 会释放自己持有的 Footer,并保留后续扩展接管的 Footer。Beautified Input、Input Metrics 偏好与 Footer 可独立配置,Master Switch 仅统一控制是否生效,不覆盖子项偏好。缺失的数据不会显示占位。Alt+S 对齐原版行为:有输入时暂存并清空输入框,输入框为空时恢复暂存内容。
开启 Animations 后,扩展会接管 Pi 底部 Working... loader:普通 agent 输出期显示 Working 动画,thinking 流式阶段切换为 Thinking 动画,tool 执行阶段切换为 Tool 动画;多行动画会整体写入底部 working 区域,避免和 Todo/widget 混排。hidden thinking 会在思考中播放动画,思考完成后停为 Thinking complete,并沿用 Pi thinking 文案配色。该功能用于替代外部 pi-animations,请禁用/卸载外部 pi-animations,否则可能出现重复动画或 monkey patch 冲突。
主题
本包内置 alps 主题,随 pi install git:https://github.com/MrCKR/alps-pi 一起加载。安装并 /reload 后,可在 /settings 里选择 alps,或写入 Pi 设置:
{
"theme": "alps"
}
alps 主题位于:
themes/alps.json
该主题基于 pi-theme-synthwave-84 的 MIT 授权配色整理并改名,授权文本保留在 themes/LICENSE.synthwave-84。
颜色控制
线框颜色通过扩展内的 token 映射控制,实际颜色来自当前 pi theme。
默认映射位于:
src/features/chrome-frame/styles.ts
常见映射:
user.border borderAccent
assistant.border borderMuted
toolSuccess.border success
toolError.border error
如果只想改本扩展的线框分配,改 src/features/chrome-frame/styles.ts。
如果想改所有使用同一 token 的地方,改当前 theme 中对应 token 的颜色。
安全策略
- 扩展默认启用消息线框 patch、美化输入框、Footer 和内置 Animations。
- 设置界面里的线框美化开关会恢复原始 render 方法;如果 render 已被后续扩展接管,alps-pi 会跳过恢复,避免覆盖其它 wrapper。
- patch 是幂等的,重复启用不会重复包裹。
- 核心组件 patch 失败时会自动回滚。
- 用户 prompt、extension status、消息正文进入 terminal 展示前会剥离 OSC/DCS/APC/PM 与非 SGR CSI;主题层生成的 SGR 颜色仍保留。
- Beautified Input 与 Footer 分别通过 Pi 公开的 editor/input API 和 footer API 安装;能力缺失时只关闭对应运行时功能,不回滚用户偏好。
- Alps 不覆盖
terminal.write、terminal.rows、tui.render或tui.doRender,也不发送 alternate-screen/mouse-reporting 控制序列。 - image escape 行会回退或跳过包装,避免破坏终端图片协议。
- assistant / user / custom / skill / compaction / branch 空内容不会渲染空框。
- tool / bash / working 即使正文为空也保留外框,因为标题和状态本身有信息价值。
兼容性
正式运行基线为 Pi >=0.84.4。Pi 核心包按官方 package 规则声明为 wildcard peer,开发与发布验证使用 0.84.4。
Master Switch 下的消息线框仍依赖 Pi 导出的消息组件与 render(width);Beautified Input 依赖 ctx.ui.setEditorComponent、ctx.ui.getEditorComponent 和可选的 ctx.ui.onTerminalInput,Footer 只依赖 ctx.ui.setFooter。运行时集中检测组件、Animations 和 TUI mode 能力,缺失时按功能 fail closed 并输出诊断,不修改持久化用户偏好。旧 Pi 用户可回滚到 alps-pi 0.1.5。
开发
安装依赖:
npm install
运行测试:
npm test
在 Windows nvm 环境里也可以直接指定 npm:
C:/Users/Administrator/AppData/Local/nvm/v22.22.3/npm.cmd test
注意
本扩展依赖 Pi 当前的内置 TUI 组件导出。升级 Pi 后如果组件名称、构造方式或 render(width) 行为变化,集中 capability gate 会按功能 fail closed;发布前仍必须重新运行真实组件、stable proxy、lifecycle、图片与 Windows Terminal 门禁。