mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-21 02:06:43 +00:00
The talk.speak synthesis path passed raw agent text to providers, so talk mode could read fenced code, links, and tables aloud. Speech normalization now happens once at the shared synthesis boundary (speech-mode stripMarkdown: label-only links, decorative bullet/glyph cleanup, punctuation collapsing). Code-heavy replies (>=50% fenced content, CommonMark-aware scanner incl. blockquote/list containers and unclosed fences) get routed by surface: talk.speak speaks a short on-screen fallback line, channel auto-TTS skips the voice note since the visible text already carries the content, and explicit conversions (tts.convert, tagged hidden TTS, chat Listen) always speak stripped best-effort content.