@kassing/pi-menu
Interactive menus & input for pi — proactive multi-question tabs, option search filter, single/multi select, typed input (text/secret/number/date/path), minimal emoji-free UI
Package details
Install @kassing/pi-menu from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@kassing/pi-menu- Package
@kassing/pi-menu- Version
0.2.4- Published
- Aug 4, 2026
- Downloads
- 270/mo · 270/wk
- Author
- kassing
- License
- MIT
- Types
- extension
- Size
- 47.6 KB
- Dependencies
- 0 dependencies · 4 peers
Pi manifest JSON
{
"extensions": [
"./extensions"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-menu
交互式菜单插件 —— 让 AI 主动向你提问,而不是瞎猜。
当任务存在歧义、需要你做决定、或信息不完整时,AI 会弹出交互式菜单让你选择、输入或跳过。
安装
pi install npm:@kassing/pi-menu
或临时试用(不写入配置):
pi -e npm:@kassing/pi-menu
安装后执行 /reload(或重启 pi)即可生效,无需任何配置。
提供的能力
AI 注册了两个工具,会自动主动调用:
| 工具 | 功能 |
|---|---|
pi_menu |
交互式菜单:单选 / 多选 / 自定义输入 / 跳过 / 多问题 Tab 切换 |
pi_menu_input |
自由文本输入(支持 secret: true 密文掩码,用于密码、API Key) |
每轮对话都会向系统提示词注入「用户交互协议」,要求模型在遇到选择、偏好、歧义、需求不明确时先问你,而不是自行猜测。只有当你明确说"直接做 / 你决定 / 不用问"时才会跳过询问。
交互体验
- 打字过滤:选项多时直接打字即过滤(不区分大小写,匹配标签和描述),Backspace 修改、Esc 清除
- ↑↓ / 数字键 1-9 快速选择
- Space 多选勾选,Enter 确认,Esc 取消
- Tab / ← → 多问题 Tab 切换,提交页统一确认
- 选中「输入自己的答案…」后直接打字即开始输入(无需先按 Enter)
- 非必需问题自动提供「跳过」选项
- 多问题支持每个问题独立设置:多选 / 自定义 / 是否必需 / 选择上限
界面风格
界面不使用任何 emoji,只采用纯文本符号(▸ 光标、[x] / [ ] 多选框、✓ 已完成),全部为普通文本字符,随终端字体正常显示、大小一致——避免 emoji 在部分终端(如 Windows Terminal)以彩色字形渲染导致显示大小不一、影响选择观感的问题。
模型调用示例
// 单问题菜单
pi_menu({
question: "用哪种方式实现?",
options: [
{ value: "cli", label: "CLI 工具", description: "独立命令行程序" },
{ value: "api", label: "REST API" },
{ value: "both", label: "两者都要" }
]
})
// 多问题 Tab(一次问多项)
pi_menu({
questions: [
{ id: "lang", label: "语言", question: "用哪种语言?", options: [...] },
{ id: "scope", label: "范围", question: "改动范围?", options: [...], multiSelect: true },
{ id: "note", label: "备注", question: "还有其他要求吗?", required: false }
]
})
// 自由文本 / 密文输入
pi_menu_input({ prompt: "你的名字?", placeholder: "例如:张三" })
pi_menu_input({ prompt: "API Key?", secret: true })
// 更多输入类型(带校验,输错会提示重输)
pi_menu_input({ prompt: "年龄?", type: "number" })
pi_menu_input({ prompt: "截止日期?", type: "date" }) // YYYY-MM-DD
pi_menu_input({ prompt: "输出目录?", type: "path" })
环境兼容
| 模式 | 行为 |
|---|---|
| TUI 交互模式 | 完整交互界面(菜单、Tab、密文、直接输入) |
| RPC 模式 | 回退为 select / input 对话框 |
| print / json 模式 | 返回错误提示,模型自行决策 |
开发
# 本地安装测试
pi install ./pi-menu
# 构建发布(scoped 包需要 --access=public)
npm pack # 检查产物
npm publish --access=public
License
MIT