Companion speech bubble truncated at narrow terminal widths
Problem
At narrow terminal widths (< 100 columns), the companion speech bubble text is hard-truncated to 23 characters + … and there's no way to read the full text.
Example at 60 cols:
(°oo°) "*ears droop* `defaultWi…"
Root cause
In CompanionSprite.tsx, the narrow-terminal path (line 228 in v2.1.88 source) slices the reaction text:
const NARROW_QUIP_CAP = 24;
const quip = reaction && reaction.length > NARROW_QUIP_CAP
? reaction.slice(0, NARROW_QUIP_CAP - 1) + '…'
: reaction;
At ≥ 100 columns (MIN_COLS_FOR_FULL_SPRITE), a SpeechBubble component renders with word wrapping at 30 chars — no truncation. But below 100 cols, the full text is discarded.
The full text exists in appState.companionReaction but is sliced before rendering and never persisted anywhere (not in session JSONL, not via hooks).
Suggested fix
Instead of truncating, wrap the text or allow expanding it. For example:
- Use
wrap(reaction, availableWidth)like the wideSpeechBubbledoes - Or render the narrow bubble as a multi-line box above the face when speaking
- At minimum, increase
NARROW_QUIP_CAP— 24 chars is very short
Environment
- Claude Code v2.1.89
- Linux (Ubuntu), 60-column terminal
- Companion: Umbra (capybara)
Related: #42048 (companion reactions not accessible via hooks/API)
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗