# Wivexx — Python dependencies
# Run:  pip install -r requirements.txt

# NOTE: tested on Python 3.10–3.12 (3.12 recommended). A few of these have no
# prebuilt wheels for the very newest Python (3.13+) yet, so use 3.12 to be safe.
anthropic          # Claude API client
faster-whisper     # Local speech-to-text (Whisper AI, offline)
sounddevice        # Microphone input
numpy<2            # Audio processing (Wivexx's ML stack needs numpy 1.x, not 2.x)
scipy              # Anti-aliased resampling for Whisper/VAD
mss                # Multi-monitor screen capture
pillow             # Image processing
pyttsx3            # Fallback TTS (Windows voices, works offline)
edge-tts           # High-quality Microsoft neural TTS (needs internet)
pygame==2.6.1      # Audio playback for edge-tts (pinned: known-good wheels)
pystray            # System tray icon
pywebview          # v1.20: web (Edge WebView2) UI engine for the control room
duckduckgo-search  # Web search — no API key required
requests           # HTTP fallback for web search
pynput             # Legacy hotkey fallback (main engine is hook-free ctypes polling)
keyboard           # Legacy hotkey fallback (main engine is hook-free ctypes polling)
webrtcvad-wheels==2.0.14  # Voice activity detection (pinned: known-good wheels)
psutil             # CPU/RAM monitoring (performance guard) + battery status
pycaw              # Windows volume control
comtypes           # COM support for pycaw
python-dotenv      # Loads the API key from .env
pvporcupine        # Optional dedicated wake-word engine (needs a free Picovoice key + custom "Wivexx" keyword)

# Optional extras (Wivexx runs without them):
#   pynvml         # GPU usage for the performance guard (NVIDIA)
#   spacy          # NLP intent gatekeeper  (+ python -m spacy download en_core_web_sm)
#   instaloader    # reliable Instagram tracking (login once: instaloader --login you)
#   opencv-python  # Caption Studio: lets WIVEXX watch video frames + video thumbnails
#   openwakeword   # BEST-IN-CLASS acoustic wake-word detector (v1.57 Tier 3). Fully
#                  #   optional + guarded in code (wivexx_wakeword.py): with it installed,
#                  #   Wivexx hears the wake word with a dedicated on-device DNN (near-zero
#                  #   false activations) instead of transcribe-then-match. The pretrained
#                  #   "hey_jarvis" model (Wivexx's alias) works out of the box; the coined
#                  #   "hey wivexx" needs a custom model — see docs/wake_word_training.md.
#                  #   Install:  pip install openwakeword   (pulls onnxruntime + scikit-learn;
#                  #   the heavy torch/tensorflow are ONLY needed to TRAIN, not to run.)
#
# Client photo delivery (📦 Deliver — v1.14):
#   rawpy                       # develop Sony .ARW (and other RAW) → JPG (ships Windows libraw wheels)
#   piexif                      # optional: copy capture date / camera EXIF into developed JPGs
#   google-api-python-client    # Google Drive upload + sharing
#   google-auth-oauthlib        # one-time Drive sign-in (see DRIVE_SETUP.md)
#   google-auth-httplib2        # Drive auth transport
#   Install all at once:
#     pip install rawpy piexif google-api-python-client google-auth-oauthlib google-auth-httplib2
#
# Google Calendar (v1.16): no extra pip — reuses the google-* libraries above
#   (enable the Google Calendar API in the same Cloud project).
# Semantic memory (v1.16): no extra pip (numpy is already required) — uses your
#   local Ollama for embeddings.  One-time:  ollama pull nomic-embed-text
#
# Batch D (v1.17) — all OPTIONAL; each feature is inert without its library:
#   uiautomation                # screen-click overlay ("number the screen" / "click 3"). Light, pure-Python.
#   resemblyzer                 # voice biometrics. Pulls PyTorch (~2GB). Install notes:
#     - it pins `webrtcvad` (needs a C compiler); WIVEXX already ships
#       `webrtcvad-wheels` which provides the same import, so install with:
#           pip install resemblyzer --no-deps
#           pip install torch librosa
#     - if you hit "coverage.types has no attribute 'Tracer'" on first use,
#       run:  pip install -U coverage   (numba↔coverage version skew)
#   speexdsp                    # OPTIONAL true-AEC. No prebuilt Windows wheel (needs a
#                               # C build); leave it out — echo-aware gating (AEC_GATING)
#                               # already prevents self-triggering with no dependency.
#
# Wivexx rebrand + online relay (v1.18): NO new pip dependency.
#   • The wivexx.com online relay (wivexx_relay.py) uses `requests` (already above).
#     Switch it on per RELAY_SETUP.md: run site/supabase/setup.sql, put SUPABASE_URL +
#     SUPABASE_SERVICE_KEY in .env, set RELAY_ENABLED=True.
#   • The desktop app uses the brand fonts (Space Grotesk / Inter / Space Mono) if they
#     are installed on Windows, else falls back to Segoe UI / Consolas. Installing the
#     free Google Fonts .ttf is OPTIONAL (pixel-exact match) — nothing breaks without
#     them. The phone page + website load them from Google Fonts directly.
