import { AssistantTr } from './i18n'; /** * Is this EXACTLY loading copy an older build stored — and nothing else? * * ★ Exact whole-string match, trimmed. "I am thinking..." and "Thinking about * your irrigation schedule" are answers. Empty is NOT filler here: an empty * bubble is a question for the display projection, which knows whether a turn * is live. * * ★★ Compared against the CURRENT translation and the English fallback. That * covers copy written in English and read in any locale (the fallback), and * copy written and read in the same locale, including a key that is published * but not ACTIVE and so resolved to its fallback — which is how ~9,000 * assistant keys behaved in prod. It does NOT cover copy written translated and * read after switching to another locale, English included: that stored text * matches neither. The write-time locale is not recorded, so this is a false * negative — the filler is shown as it was stored — which is the direction this * is meant to err in. Reach is small: loading copy was only translated from * 2026-09-10. */ export declare function isLegacyFiller(tr: AssistantTr, content: string | null | undefined): boolean; /** * Is this EXACTLY the "Stopped" a BOFF-7229 build wrote into content? * * ★ Those builds (2026-09-10 to BOFF-7277) replaced the filler of a turn the * user cut off with the word itself. The display projection shows a turn that * ended with nothing as a muted "Stopped" with no Copy or Listen; recognising * the stored word lets those older turns look — and behave — the same. * * Deliberately a separate predicate from `isLegacyFiller`: "Stopped" is a * settled outcome, not loading copy, and the projection only treats it as one * when the message carries no completion evidence. A reply that says "Stopped * the pump at 4pm." never matches, and a completed reply that is exactly * "Stopped" carries evidence. */ export declare function isLegacyStopped(tr: AssistantTr, content: string | null | undefined): boolean; /** * The older predicate: empty OR exactly legacy filler. * * @deprecated Kept for the public API only. It answered "is this bubble still * loading?" by reading content, which is the question BOFF-7277 moved to live * processing state. Use `getAssistantDisplayContent` to decide what to show. */ export declare function isStageCopy(tr: AssistantTr, content: string | null | undefined): boolean; /** * Strip the "Thinking..." an older build left IN FRONT OF its own timeout note. * * ★★ The shape, exactly: the progress sentinel, a blank line, then one of the * incomplete-turn notices (translated or English) and whatever followed it. A * turn whose stream budget elapsed before any output passed the sentinel into * `withIncompleteTurnNotice`, which keeps any non-blank body — so the stored * reply read "Thinking...\n\n_This turn stopped before an answer arrived..._". * That is a genuine settled outcome with our filler glued to it; the note is * kept and the filler is not. * * Returns the text without the prefix, or `null` when the content is anything * other than that shape — a model reply is never touched. */ export declare function stripLegacyFillerPrefix(tr: AssistantTr, content: string): string | null; //# sourceMappingURL=legacyFiller.d.ts.map