@glassesneo/pi-decision-ui
Accessible adaptive decision flows and a Pi question extension
Package details
Install @glassesneo/pi-decision-ui from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@glassesneo/pi-decision-ui- Package
@glassesneo/pi-decision-ui- Version
0.1.1- Published
- Aug 31, 2026
- Downloads
- 273/mo · 13/wk
- Author
- glassesneo
- License
- MIT
- Types
- extension
- Size
- 191.7 KB
- Dependencies
- 0 dependencies · 4 peers
Pi manifest JSON
{
"extensions": [
"./dist/question.js"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
@glassesneo/pi-decision-ui
An accessible keyboard-first decision flow for Pi, including a compatible question tool and a small library API.
Security: Pi extensions run with the installing user's full process permissions. Review this package before installing it.
Installation
Install with:
pi install npm:@glassesneo/pi-decision-ui@0.1.1
Pi loads the included question extension. The package supports Pi 0.84.4 and Node 22.19.0 or later.
Question tool
The extension registers one sequential question tool. Questions are single, multi, or text; single and multi options have value, label, optional description, and optional noteRequired.
{
"questions": [{
"id": "approach",
"prompt": "Which approach?",
"kind": "single",
"options": [{ "value": "safe", "label": "Safe" }, { "value": "fast", "label": "Fast" }]
}]
}
Results are JSON in both tool content and details:
{"status":"submitted","responses":{"approach":{"kind":"single","value":"safe"}}}
Write-ins are answers. Absent response IDs are skipped. Cancellation preserves completed responses and includes currentQuestionId only while an active question is cancelled. TUI mode uses one keyboard-operated custom component; RPC uses Pi dialogs; print/JSON and unavailable UI return {"status":"unavailable","responses":{}}.
Library API
import { runDecisionFlow, type DecisionItem } from "@glassesneo/pi-decision-ui";
const items: DecisionItem[] = [{ id: "approve", prompt: "Approve?", kind: "single", options: [
{ value: "yes", label: "Yes" }, { value: "no", label: "No" },
]}];
const result = await runDecisionFlow(ctx, items, {
policy: { allowWriteIn: false, autoSubmitSingle: true },
});
Optional keybindings
No configuration is required. To override an action, create pi-decision-ui.json in the Pi agent directory (normally ~/.pi/agent):
{
"schemaVersion": 1,
"keybindings": {
"common.next-question": ["ctrl+f"],
"choice.move-down": ["ctrl+n"]
}
}
Listed actions replace lower-precedence bindings; [] explicitly unbinds. Unknown fields, schema versions, actions, invalid keys, collisions, and missing required effective actions fail with an actionable configuration error.
Development
corepack pnpm install --frozen-lockfile
corepack pnpm check
corepack pnpm pack:check
These commands run type checking, linting, tests, the build, and packed-artifact verification.