Root cause: ai_provider.py assumed a single JSON blob in an 'encrypted_value' column, but IntegrationConfig stores each credential as a separate row with config_key + config_value columns. Fixes: - Query groups rows by provider, decrypts each config_value separately - Correct decrypt_value(secret_key, ciphertext) argument order - Filter by user_id so providers are per-user - Callers (ai_chat.py, chat()) now pass user_id through |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| ai_provider.py | ||
| crawl_scheduler.py | ||
| crypto.py | ||
| device_sync_base.py | ||
| food_lookup.py | ||
| points_engine.py | ||
| polar_sync.py | ||
| program_research.py | ||
| provider_registry.py | ||
| resource_matcher.py | ||
| strava_sync.py | ||
| usda_lookup.py | ||