UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

51 lines (50 loc) 2 kB
import { a as normalizeLowercaseStringOrEmpty } from "./string-coerce-mnp54Vah.js"; import { n as isYes, t as isVerbose } from "./global-state-BAD7XgmL.js"; import "./globals-GTrXU4s9.js"; import { stdin, stdout } from "node:process"; import readline from "node:readline/promises"; //#region src/cli/prompt.ts /** Signals that an interactive prompt lost stdin before a complete answer arrived. */ var PromptInputClosedError = class extends Error { constructor() { super("Prompt input closed before an answer was received."); this.name = "PromptInputClosedError"; } }; function questionUntilClose(rl, question) { return new Promise((resolve, reject) => { let settled = false; const finish = (complete) => { if (settled) return; settled = true; rl.off("close", onClose); complete(); }; const onClose = () => finish(() => reject(new PromptInputClosedError())); rl.once("close", onClose); rl.question(question).then((answer) => finish(() => resolve(answer)), (error) => finish(() => reject(toLintErrorObject(error, "Non-Error rejection")))); }); } /** Prompts for yes/no input, honoring global `--yes` before opening stdin. */ async function promptYesNo(question, defaultYes = false) { if (isVerbose() && isYes()) return true; if (isYes()) return true; const rl = readline.createInterface({ input: stdin, output: stdout }); const answer = normalizeLowercaseStringOrEmpty(await questionUntilClose(rl, `${question}${defaultYes ? " [Y/n] " : " [y/N] "}`).finally(() => { rl.close(); })); if (!answer) return defaultYes; return answer.startsWith("y"); } function toLintErrorObject(value, fallbackMessage) { if (value instanceof Error) return value; if (typeof value === "string") return new Error(value); const error = new Error(fallbackMessage, { cause: value }); if (typeof value === "object" && value !== null || typeof value === "function") Object.assign(error, value); return error; } //#endregion export { promptYesNo as n, PromptInputClosedError as t };