@2008muyu/pi-ui-prompt-dialog
v0.1.2
Published
A customizable TUI prompt dialog for pi extensions: inline menu + text input in a single overlay
Maintainers
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-dialogimport { 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 / cancelledExported 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
