AIChat (elements/ai/AIChat) is a complete LLM chat UI built on new hooks:
- useAIChat: streaming conversation state (send, stop, regenerate,
edit, feedback); `send` may return a string, async iterable,
ReadableStream or fetch Response
- useAIChatHistory: saved conversations with optional localStorage
persistence and generated titles, shown in AIChatSidebar
- useAIChatSpeech: read aloud via browser speech synthesis or a
custom `speak` returning audio
- useAIChatDictation: voice input via browser recognition or a
custom `transcribe`
Also adds a model picker, message editing, thumbs up/down, markdown
export, scoped markdown styles in base.css, the twuiReadTextStream,
twuiStripMarkdown and twuiGroupByRecency utils (with tests), and a
playground page. AIPromptBlock is kept and marked deprecated.
Co-Authored-By: Claude Opus 5.5 <[email protected]>