Ensures consistent Windows path normalization across all path hashing.
Previously Storage used its own getFilePathHash() which didn't apply
Windows lowercase normalization, causing test failures on Windows CI.
Implement debug logfile foundation for routing internal diagnostics
to a per-session log file instead of polluting the terminal.
Core changes:
- Add DebugLogger interface and createDebugLogger() in debugLogger.ts
- Add Storage.getGlobalDebugDir() and getDebugLogPath() for log paths
- Add Config.getDebugLogger() method with session-scoped logger
- Track write failures via isDebugLoggingDegraded()
CLI changes:
- Add DebugModeNotification component for interactive startup notice
- Add non-interactive debug notice to stderr in gemini.tsx
Log files are written to ~/.qwen/debug/<sessionId>.txt with format:
2026-01-24T10:30:00.000Z [LEVEL] [TAG] message
Debug logging is always-on; debug mode only controls the startup notice.