"""Public app metadata (display name + version) for the frontend brand layer, the phase-59 docs-push flag (the "Save as doc" gating), and the phase-62 UI customization strings (composer placeholder, footer line, theme file name).""" from __future__ import annotations from fastapi import APIRouter, Depends from app.config import Settings, get_settings router = APIRouter(tags=["config"]) @router.get("/config") def app_config(settings: Settings = Depends(get_settings)) -> dict[str, str | bool]: # noqa: B008 """Public app metadata for the frontend brand layer (phase 39) + the phase-59 ``docs_repo_configured`` flag + the phase-62 UI customization keys (``input_placeholder``, ``footer_text``, ``theme``) — all display strings, the SAME boot fetch (no new network surface) and the same public posture as ``app_name`` (no secrets). Values are passed through verbatim: the frontend brand layer treats an empty string as "keep the template default" (the unset => byte-identical contract).""" return { "app_name": settings.app_name, "version": settings.app_version, "docs_repo_configured": settings.docs_configured, "input_placeholder": settings.input_placeholder, "footer_text": settings.footer_text, "theme": settings.theme, }