# Pinned to major versions. Update periodically; avoid unpinned installs.
# Python 3.10+ recommended (langchain-core, fastapi, langgraph require it).

setuptools>=70.0,<71
fastapi>=0.100,<1.0
uvicorn>=0.12,<1.0
websockets>=12.0,<17.0
python-multipart>=0.0.6
openai>=1.0,<3.0
langchain-core>=1.0,<2.0
langchain-community>=0.3,<1.0
langgraph>=1.0,<2.0
pydantic>=2.7,<3.0
mcp>=1.20,<2.0

# PyObjC (legacy/py2app support only; Swift app runtime uses requirements-headless.txt)
pyobjc>=10.0,<11.0
pyobjc-framework-Cocoa>=10.0,<11.0
pyobjc-framework-WebKit>=10.0,<11.0
pyobjc-framework-LocalAuthentication>=10.0,<11.0
pyobjc-framework-Speech>=10.0,<11.0
pyobjc-framework-AVFoundation>=10.0,<11.0
pyobjc-framework-UserNotifications>=10.0,<11.0
pyobjc-framework-EventKit>=10.0,<11.0

# Messaging, crypto, keychain
discord.py>=2.0,<3.0
cryptography>=42.0,<47.0
keyring>=25.0,<27.0
zeroconf>=0.131,<1.0

# SQLCipher (optional: encrypted FTS5 search index; falls back to plain SQLite if missing)
sqlcipher3>=0.5.0

# sqlite-vec ANN for session/knowledge semantic search (optional; brute-force fallback if unloadable)
sqlite-vec==0.1.9

# PDF, images, HTTP, parsing, OCR
pypdf>=4.0,<5.0
pdf2image>=1.16,<3.0
numpy>=1.24,<3.0
# Charts/run_python_code (matplotlib, seaborn, pandas)
matplotlib>=3.7,<4.0
pandas>=2.0,<3.0
seaborn>=0.12,<1.0
requests>=2.28,<3.0
httpx>=0.27,<1.0
readability-lxml>=0.8,<1.0
beautifulsoup4>=4.12,<5.0
python-docx>=1.1,<2.0
openpyxl>=3.1,<4.0
python-pptx>=1.0,<2.0
ebooklib>=0.18,<1.0
striprtf>=0.0.29,<1.0
# Fast HTML parser (optional use in web_tools; fallback to BS4 if missing)
scrapling>=0.4,<1.0
opencv-python>=4.8,<5.0
pytesseract>=0.3.10
Pillow>=10.0,<11.0

# TTS (optional: Supertonic on-device; fast, high quality)
supertonic>=0.1.0
croniter>=2.0,<4.0

# Phase 2b: filesystem watcher (optional; polling fallback when missing)
watchdog>=4.0,<7.0

# Dashboard System tile (CPU/RAM/disk/network/top processes)
psutil>=5.9,<8

# Local MLX text embeddings (optional; knowledge semantic search falls back to hash vectors)
mlx-embeddings>=0.0.5,<0.2

# Testing
pytest>=7.0,<9.0
