import { DynamicBorder, type ExtensionCommandContext, keyHint, } from "@earendil-works/pi-coding-agent"; import { Container, Input, Text } from "@earendil-works/pi-tui"; // Pi 0.82's ui.input second argument is an ignored placeholder, not an initial // value. Use Pi's native Input component so the promised prefill really exists. export function promptMinimum( ctx: ExtensionCommandContext, initial: number, ): Promise { return ctx.ui.custom((tui, theme, keybindings, done) => { const input = new Input(); input.setValue(String(initial)); const box = new Container(); const heading = new Text("", 1, 0); const help = new Text("", 1, 0); box.addChild(new DynamicBorder((text: string) => theme.fg("accent", text))); box.addChild(heading); box.addChild(input); box.addChild(help); box.addChild(new DynamicBorder((text: string) => theme.fg("accent", text))); return { get focused() { return input.focused; }, set focused(value: boolean) { input.focused = value; }, render(width: number) { heading.setText( theme.fg("accent", "Minimum context tokens (constant count; no calls below it)"), ); help.setText( theme.fg( "dim", `${keyHint("tui.select.confirm", "save")} ${keyHint("tui.select.cancel", "cancel")}`, ), ); return box.render(width); }, invalidate() { box.invalidate(); }, handleInput(data: string) { if (keybindings.matches(data, "tui.select.confirm") || data === "\n") done(input.getValue()); else if (keybindings.matches(data, "tui.select.cancel")) done(undefined); else { input.handleInput(data); tui.requestRender(); } }, }; }); }