- push_utils.py: subscription storage + send helper (auto-prunes 410 endpoints) - routers/push.py: GET /api/push/vapid-key (public), POST/DELETE /api/push/subscribe - sw.js: push event listener shows notification; notificationclick focuses/opens tab - app.js: subscribe/unsubscribe flow + "Enable notifications" toggle in settings dropdown - tools/notify.py: web_push orchestrator tool (user-level, no admin required) - VAPID keys in .env; pywebpush added to requirements.txt Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
30 lines
788 B
Plaintext
30 lines
788 B
Plaintext
fastapi>=0.115.0
|
|
apscheduler>=3.10
|
|
uvicorn[standard]>=0.30.0
|
|
pydantic-settings>=2.0.0
|
|
python-dotenv>=1.0.0
|
|
|
|
# Orchestrator — Gemini API (native tool calling) + web search
|
|
google-genai>=1.0.0
|
|
ddgs>=0.1.0
|
|
|
|
# Google Chat webhook — JWT Bearer token verification
|
|
google-auth>=2.0.0
|
|
|
|
# Session auth — password hashing + JWT cookies
|
|
bcrypt>=4.0.0
|
|
PyJWT>=2.8.0
|
|
python-multipart>=0.0.9 # required by FastAPI for Form() data
|
|
|
|
# Async HTTP client — used for local OpenAI-compatible backend (Open WebUI / Ollama)
|
|
httpx>=0.27.0
|
|
|
|
# OpenAI-compatible client — tool calling for OpenRouter / LiteLLM / any OAI-compat host
|
|
openai>=1.0.0
|
|
|
|
# Web Push / VAPID — browser push notifications
|
|
pywebpush>=2.0.0
|
|
|
|
# anthropic SDK not needed — using claude CLI subprocess for auth
|
|
# anthropic>=0.40.0
|