/** Coerce arbitrary text into a 3-8 word kebab-case name, or '' if nothing * usable survives. Lowercases, keeps [a-z0-9], collapses everything else to a * single hyphen, and clamps to the first 8 words. */ export declare function sanitizeSessionName(raw: string): string; /** Local fallback: derive a name straight from the prompt (no pi call). Drops * stop-words, takes the first few content words. */ export declare function slugFromPrompt(prompt: string): string; /** Ask pi headlessly for a kebab-case name for `body`, async. Resolves to the * sanitized name, or '' on any failure (non-zero exit, timeout, empty/garbled * output) so the caller can fall back to a local slug. Owns the subprocess * mechanics — crucially it hands pi an immediate stdin EOF: `pi -p` reads * stdin, and execFile's default stdin is an OPEN pipe that never closes, so * without this pi blocks waiting for EOF and the call exits non-zero (the * regression that silently lost every LLM name to the slug fallback). * * Exported (not just for tests): the canvas-coupled persistence wrapper * generateAndPersistName lives in naming-persist.ts to keep this module * canvas-free, and imports this pure helper. */ export declare function headlessName(body: string): Promise; /** A filesystem-safe slug for the `.todos/.md` fallback path: lowercase, * [a-z0-9] kept, everything else → single hyphen, clamped to 8 words. */ export declare function titleSlug(title: string): string; /** Ask pi headlessly for a one-line issue title for `note`. Resolves to the * generated title, or a local first-line fallback on any failure (non-zero * exit, timeout, empty output). Async; never throws. */ export declare function generateIssueTitle(note: string): Promise;