Qwen3.x / Deepseek-R1 / o1 stream model thinking via
delta.reasoning_content during SSE; the final answer arrives later via
delta.content. Previously chat.js parsed only delta.content, so any
thinking time appeared to the user as a long empty pause followed by a
sudden answer.
Both generator functions (sendMessage, sendMessageWithCustomHistory)
gain an opts.onThinking(text) callback that fires only when the server
actually streams reasoning_content. Backward compatible: existing
callers ignore the option, see no behaviour change.
handleUserInput now passes an onThinking callback that lazy-creates a
<details class="chat-thinking"> block above the answer span on the
first reasoning delta. When the first content delta arrives, the
thinking block auto-collapses into a "thinking (click to expand)"
summary so the answer is the visible focus.
If a response never thinks (thinking off, simple prompt, etc.), no
thinking DOM element is ever created — no visual artefact at all.
Existing enable_thinking:false request bodies kept for now; this change
is rendering-only and activates automatically the moment any caller
flips thinking on.
Updates marketing copy to reflect actual production state: F5-TTS replaced
Qwen3-TTS as the default engine after head-to-head benchmarking showed
faster inference and cleaner clones on the same reference clips. Engine
count goes from 5 to 6 (F5-TTS additive). Qwen3-TTS remains wired up but
marked Self-host. Updates Makefile snippets to F5 targets, and the sidebar
nav now links F5-TTS at the top of the engine list.
Adds a third demo block for the self-recorded voice 42 alongside aria
and atlas. Updates the "what's live" copy to acknowledge that 41 voices
come from LibriSpeech public-domain and 1 is the operator's own voice.
Slot 41 left intentionally empty as a Hitchhiker tribute.
Firefox (and other browsers) block window.open popups from the
translate modal. Render translated HTML in an iframe via blob URL
instead. Fix translate modal header layout by removing negative
margin hack, use proper article padding structure. Add CSS for
iframe preview and raw HTML toggle.
fitPageContent() in content.js: 6 progressive collapse stages (dedup,
nav links, references, lists, code blocks, sidebar debris) before hard
truncation. No summarization, real content structurally compressed.
Wired into both page extraction points in embed modal.
Added .working pulse and .uncloseai-spinner CSS animations for #004.
Updated tickets #001 (CSP root cause), #004 (CSS ready), #005 (fixed).
TTS disabled by default for all users (tickets #002 freeze, #003 truncation).
Embedders re-enable with window.UNCLOSEAI_ENABLE_TTS = true.
Floating button bottom 20px to 141px to avoid overlapping page buttons.
Added docs/tickets/ with 5 issues from cthegray.
Bundle extension script and biome config updates.