diff --git a/navi/api/routes/synapse.py b/navi/api/routes/synapse.py index 90b978a..cc07a9a 100644 --- a/navi/api/routes/synapse.py +++ b/navi/api/routes/synapse.py @@ -22,6 +22,7 @@ from navi.api.deps import require_user from navi.auth import User +from navi.synapse.outbound import synapse_source_ready from navi.synapse.settings_store import ( CompletionNotify, PushTarget, @@ -189,7 +190,10 @@ ) -> dict: store = SynapseSettingsStore(await _pool()) settings_row = await store.get(user.id) - return settings_row.model_dump(mode="json", exclude={"user_id"}) + data = settings_row.model_dump(mode="json", exclude={"user_id"}) + # Not persisted — tells the UI whether Synapse-linked options are usable. + data["source_ready"] = synapse_source_ready() + return data @settings_router.put("") @@ -208,7 +212,9 @@ ) current.instructions = payload.instructions await store.save(current) - return current.model_dump(mode="json", exclude={"user_id"}) + data = current.model_dump(mode="json", exclude={"user_id"}) + data["source_ready"] = synapse_source_ready() + return data @settings_router.get("/versions") diff --git a/tests/unit/api/test_synapse.py b/tests/unit/api/test_synapse.py index 9673f83..20b7a6b 100644 --- a/tests/unit/api/test_synapse.py +++ b/tests/unit/api/test_synapse.py @@ -220,6 +220,8 @@ assert body["push_target"] == "app" assert body["completion_notify"] == "important" assert body["instructions"] == "" + # tells the UI whether Synapse-linked options are usable (no keys in tests) + assert body["source_ready"] is False def test_synapse_settings_put_records_user_edit(synapse_client, monkeypatch):