UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

66 lines (65 loc) 2.31 kB
import { o as normalizeLowercaseStringOrEmpty } from "./string-coerce-CIXf7egm.js"; import { n as replaceOutsideCodeRegions } from "./directive-tags-Wp1S72ap.js"; //#region src/tts/directive-facts.ts /** Extract final-text TTS syntax into persisted facts, leaving markdown code spans unchanged. */ function extractTtsDirectiveFacts(text) { if (!/\[\[\s*\/?\s*tts(?:\s*:|\s*\]\])/iu.test(text)) return { cleanedText: text }; let cleanedText = text; let facts; const markTagged = () => { facts ??= { tagged: true }; return facts; }; cleanedText = replaceOutsideCodeRegions(cleanedText, /\[\[\s*tts\s*:\s*text\s*\]\]([\s\S]*?)\[\[\s*\/\s*tts\s*:\s*text\s*\]\]/gi, (_match, [inner]) => { const next = markTagged(); if (next.text == null) next.text = String(inner).trim(); return ""; }); cleanedText = replaceOutsideCodeRegions(cleanedText, /\[\[\s*tts\s*\]\]([\s\S]*?)\[\[\s*\/\s*tts\s*\]\]/gi, (_match, [inner]) => { const next = markTagged(); const visible = String(inner).trim(); if (next.text == null) next.text = visible; return visible; }); cleanedText = replaceOutsideCodeRegions(cleanedText, /\[\[\s*tts\s*:\s*([^\]]+)\]\]/gi, (_match, [body]) => { const next = markTagged(); const tokens = String(body).split(/\s+/).filter(Boolean); let provider; const values = {}; for (const token of tokens) { const eqIndex = token.indexOf("="); if (eqIndex === -1) continue; const rawKey = token.slice(0, eqIndex).trim(); const rawValue = token.slice(eqIndex + 1).trim(); if (!rawKey || !rawValue) continue; const key = normalizeLowercaseStringOrEmpty(rawKey); if (key === "provider") { provider = normalizeLowercaseStringOrEmpty(rawValue) || void 0; continue; } values[key] = rawValue; } if (provider || Object.keys(values).length > 0) { next.directives ??= []; next.directives.push({ ...provider ? { provider } : {}, values }); } return ""; }); cleanedText = replaceOutsideCodeRegions(cleanedText, /\[\[\s*tts\s*\]\]/gi, () => { markTagged(); return ""; }); cleanedText = replaceOutsideCodeRegions(cleanedText, /\[\[\s*\/\s*tts(?:\s*:\s*[^\]]*)?\]\]/gi, () => { markTagged(); return ""; }); return { cleanedText, ...facts ? { facts } : {} }; } //#endregion export { extractTtsDirectiveFacts as t };