@2008muyu/pi-ui-prompt-dialog
A customizable TUI prompt dialog for pi extensions: inline menu + text input in a single overlay
Package details
Install @2008muyu/pi-ui-prompt-dialog from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@2008muyu/pi-ui-prompt-dialog- Package
@2008muyu/pi-ui-prompt-dialog- Version
0.1.2- Published
- Jun 4, 2026
- Downloads
- 70/mo · 4/wk
- Author
- 2008
- License
- MIT
- Types
- extension, prompt
- Size
- 34 KB
- Dependencies
- 0 dependencies · 2 peers
Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-ui-prompt-dialog
A customizable TUI prompt dialog for pi coding agent extensions.
Inline menu + text input in a single overlay — no more two-step "select then input" dialogs.
Quick Start
pi install npm:@2008muyu/pi-ui-prompt-dialog
import { showPromptDialog } from "@2008muyu/pi-ui-prompt-dialog";
const result = await showPromptDialog(ctx, {
title: "Plan 模式拦截了此操作",
description: "agent 想跑:npm install lodash",
actions: [
{ id: "exit", label: "退出并执行", default: true },
{ id: "cancel", label: "取消" },
],
input: { label: "补充指令", placeholder: "想让我怎么做?" },
});
if (!result) {
// Esc pressed
} else if (result.type === "action") {
// result.action === "exit" | "cancel"
} else {
// result.type === "input", result.value is the user's text
}
Usage Patterns
Actions only (no input)
const result = await showPromptDialog(ctx, {
title: "选择操作",
actions: [
{ id: "open", label: "打开文件", default: true },
{ id: "search", label: "搜索内容" },
{ id: "cancel", label: "取消" },
],
});
Pure input (single submit button)
const result = await showPromptDialog(ctx, {
title: "输入项目名",
description: "请输入一个 kebab-case 名称",
actions: [{ id: "submit", label: "提交", default: true }],
input: { label: "名称", placeholder: "my-project" },
});
API
showPromptDialog<TAction>(ctx, options) => Promise<PromptDialogResult<TAction>>
| Parameter | Type | Description |
|---|---|---|
ctx |
ExtensionContext |
Pi extension context |
options.title |
string |
Dialog title |
options.description |
string (optional) |
Context text (shown in muted style) |
options.actions |
PromptAction[] |
1–10 action items |
options.actions[].id |
TAction |
Unique identifier |
options.actions[].label |
string |
Display label |
options.actions[].default |
boolean |
Default (Enter key) action — max 1 |
options.input |
PromptInput (optional) |
Inline input field configuration |
options.input.label |
string |
Label shown before input |
options.input.placeholder |
string (optional) |
Placeholder when empty |
Return value
type PromptDialogResult<TAction extends string> =
| { type: "action"; action: TAction } // User selected an action
| { type: "input"; value: string } // User typed text
| undefined; // Esc / cancelled
Exported types
import {
showPromptDialog,
type PromptAction,
type PromptInput,
type PromptDialogOptions,
type PromptDialogResult,
} from "@2008muyu/pi-ui-prompt-dialog";
Keyboard Controls
| Key | Action |
|---|---|
↑ ↓ |
Navigate actions / input row |
Tab / → on input row |
Enter input mode |
← → (in input) |
Move cursor |
Backspace (in input) |
Delete character |
↑ / Esc (in input) |
Exit input mode |
Enter |
Submit (action or input) |
Esc |
Cancel dialog |
Limits
- Max 10 actions
- Single-line input only (no multi-line)
- No scrolling (if terminal is too narrow, content is clipped)
- No custom theming (uses pi's built-in theme colors)
License
MIT