stt-cli 0.2.1

Speech to text Cli using Groq API and OpenAI API
# Scratchpad

## Current Task: Fixing Hotkey Service Shutdown Issues

**Goal:** Ensure proper shutdown handling in the hotkey service, including clean thread termination and resource cleanup.

### Plan
- [X] Implement termination flag using AtomicBool
- [X] Update blocking thread to check termination flag
- [X] Fix type mismatches for RecvTimeoutError
- [X] Implement proper timeout handling for thread joining
- [X] Fix unreachable pattern warning
- [ ] Test shutdown functionality thoroughly
- [ ] Add unit tests for HotkeyService and shutdown handler

### Progress
Successfully implemented:
- Thread termination using AtomicBool
- Clean shutdown signal handling
- Proper timeout mechanisms
- Fixed type mismatches and pattern warnings

Next steps:
- Thorough testing of shutdown functionality
- Unit test implementation

---

## Lessons

* When using blocking channels with Tokio async code, use `tokio::task::spawn_blocking` to avoid blocking the async runtime
* Always implement timeouts for task completion during shutdown to prevent hanging
* Use `AtomicBool` for thread termination flags to ensure thread-safe state management
* When implementing shutdown handlers, components should handle their own cleanup
* Properly handle edge cases in pattern matching to avoid unreachable patterns
* Use crossbeam channels for timeout-based operations in blocking contexts
* Remember to release locks before await points to prevent deadlocks