- ComposeBox takes ReplyContext {id, username, content} instead of string
- Reply chip shows "^ benji message preview..." with truncation
- App passes full reply context from messagesById
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>