diff --git a/app/api/admin_routes.py b/app/api/admin_routes.py index a585d37..4c4fe36 100644 --- a/app/api/admin_routes.py +++ b/app/api/admin_routes.py @@ -50,6 +50,7 @@ TypeIn, TypeOut, ) +from app.i18n_server import DEFAULT_LOCALE as DEFAULT_SERVER_LOCALE from app.i18n_server import locale_from_request, localize_settings from app.settings_registry import EDITABLE, is_secret, validate as validate_setting from app.settings_store import default_of, get_setting_row, set_setting @@ -725,18 +726,16 @@ # --- Настройки (оверрайды .env; секреты write-only, docs/06) --- -@router.get("/settings", response_model=list[SettingOut]) -def list_settings( - request: Request, - user: AuthenticatedUser = Depends(require_admin), db: Session = Depends(get_db) -): +def settings_registry(db: Session, locale: str = DEFAULT_SERVER_LOCALE) -> list[SettingOut]: """Реестр редактируемых настроек: оверрайд из БД, дефолт из .env, маска секретов. - label/help — по Accept-Language (i18n.md); ru-текст — исходник реестра. + Единый источник для HTTP-роута и MCP-тула settings_get (mcp.md: тулы не + дублируют логику). locale — язык label/help: HTTP отдаёт его из + Accept-Language, у MCP запроса языка нет — остаётся ru-исходник реестра. """ out: list[SettingOut] = [] env_settings = get_settings() - for defn in localize_settings(EDITABLE.values(), locale_from_request(request)): + for defn in localize_settings(EDITABLE.values(), locale): raw = get_setting_row(db, defn.key) default = getattr(env_settings, defn.key, None) out.append( @@ -757,6 +756,15 @@ return out +@router.get("/settings", response_model=list[SettingOut]) +def list_settings( + request: Request, + user: AuthenticatedUser = Depends(require_admin), db: Session = Depends(get_db) +): + """Реестр настроек; label/help — по Accept-Language (i18n.md).""" + return settings_registry(db, locale_from_request(request)) + + @router.put("/settings") def put_settings( body: SettingsPut, diff --git a/app/mcp/tools.py b/app/mcp/tools.py index 212af48..b58a37a 100644 --- a/app/mcp/tools.py +++ b/app/mcp/tools.py @@ -475,9 +475,10 @@ @mcp.tool() def settings_get() -> list[dict]: """Реестр настроек Synapse: дефолт .env + оверрайды админки. - Секреты write-only — value всегда null, факт наличия в set.""" + Секреты write-only — value всегда null, факт наличия в set. + label/help — ru-исходник реестра (у MCP-запроса нет Accept-Language).""" def fn(db): - rows = admin_routes.list_settings(user=current_mcp_user(), db=db) + rows = admin_routes.settings_registry(db) return [r.model_dump(mode="json") for r in rows] return _admin_run(fn)