feat: Add Unicode width calculation and terminal capability detection
Unicode width (src/unicode.zig):
- charWidth(): Returns display width of Unicode codepoints (0, 1, or 2)
- stringWidth(): Calculates display width of UTF-8 strings
- truncateToWidth(): Truncates strings to fit display columns
- stringWidthBounded(): Width calculation with byte tracking
- Handles CJK (double-width), combining marks (zero-width),
control characters, and emoji
Terminal capabilities (src/termcap.zig):
- detect(): Auto-detects terminal features from environment
- ColorSupport: none, basic(8), extended(16), 256, true_color
- Detects: hyperlinks, images, clipboard, mouse, unicode
- Known terminals: kitty, WezTerm, iTerm, VSCode, Alacritty, etc.
- Respects NO_COLOR and FORCE_COLOR env vars
- rgbTo256(): Converts RGB to 256-color palette
- rgbToBasic(): Converts RGB to 8/16 ANSI colors
- adaptColor(): Downgrades colors based on terminal support
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>