Remove raw header from tmux JSONL and add defensive validation
Tmux captures have no source media file, so the raw field pointing to
the JSONL itself was semantically incorrect. Now tmux JSONL files contain
only frame entries with no header line.
- Remove header from write_captures_jsonl() in observe/tmux/capture.py
- Add AUDIO_EXTENSIONS constant alongside VIDEO_EXTENSIONS
- Validate raw field extensions before building media URLs in apps
- Add missing MIME types (.ogg, .m4a, .mp4, .mov) to get_raw_file()
- Update docstrings to reflect the changes
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>