From 64900b54579df93105ee9245d08b982444e4667d Mon Sep 17 00:00:00 2001 From: yangdx Date: Tue, 14 Oct 2025 10:59:21 +0800 Subject: [PATCH] Add frontend source code update warning - Add frontend freshness check logic - Warn when rebuild needed - Remove --production from install docs --- lightrag/api/README-zh.md | 2 +- lightrag/api/README.md | 2 +- lightrag/api/lightrag_server.py | 96 ++++++++++++++++++++++++++++++++- lightrag_webui/README.md | 2 +- 4 files changed, 98 insertions(+), 4 deletions(-) diff --git a/lightrag/api/README-zh.md b/lightrag/api/README-zh.md index 74d0e63e..a3fcf0d3 100644 --- a/lightrag/api/README-zh.md +++ b/lightrag/api/README-zh.md @@ -36,7 +36,7 @@ pip install -e ".[api]" # Build front-end artifacts cd lightrag_webui -bun install --frozen-lockfile --production +bun install --frozen-lockfile bun run build cd .. ``` diff --git a/lightrag/api/README.md b/lightrag/api/README.md index 90ebd4db..e1c20b99 100644 --- a/lightrag/api/README.md +++ b/lightrag/api/README.md @@ -36,7 +36,7 @@ pip install -e ".[api]" # Build front-end artifacts cd lightrag_webui -bun install --frozen-lockfile --production +bun install --frozen-lockfile bun run build cd .. ``` diff --git a/lightrag/api/lightrag_server.py b/lightrag/api/lightrag_server.py index 9c1ec9e5..e8fdb700 100644 --- a/lightrag/api/lightrag_server.py +++ b/lightrag/api/lightrag_server.py @@ -146,10 +146,11 @@ class LLMConfigCache: def check_frontend_build(): - """Check if frontend is built before starting server""" + """Check if frontend is built and optionally check if source is up-to-date""" webui_dir = Path(__file__).parent / "webui" index_html = webui_dir / "index.html" + # 1. Check if build files exist (required) if not index_html.exists(): ASCIIColors.red("\n" + "=" * 80) ASCIIColors.red("ERROR: Frontend Not Built") @@ -169,6 +170,99 @@ def check_frontend_build(): ASCIIColors.red("=" * 80 + "\n") sys.exit(1) # Exit immediately + # 2. Check if this is a development environment (source directory exists) + try: + source_dir = Path(__file__).parent.parent.parent / "lightrag_webui" + src_dir = source_dir / "src" + + # Determine if this is a development environment: source directory exists and contains src directory + if not source_dir.exists() or not src_dir.exists(): + # Production environment, skip source code check + logger.debug( + "Production environment detected, skipping source freshness check" + ) + return + + # Development environment, perform source code timestamp check + logger.debug("Development environment detected, checking source freshness") + + # Source code file extensions (files to check) + source_extensions = { + ".ts", + ".tsx", + ".js", + ".jsx", + ".mjs", + ".cjs", # TypeScript/JavaScript + ".css", + ".scss", + ".sass", + ".less", # Style files + ".json", + ".jsonc", # Configuration/data files + ".html", + ".htm", # Template files + ".md", + ".mdx", # Markdown + } + + # Key configuration files (in lightrag_webui root directory) + key_files = [ + source_dir / "package.json", + source_dir / "bun.lock", + source_dir / "vite.config.ts", + source_dir / "tsconfig.json", + source_dir / "tailwind.config.js", + source_dir / "index.html", + ] + + # Get the latest modification time of source code + latest_source_time = 0 + + # Check source code files in src directory + for file_path in src_dir.rglob("*"): + if file_path.is_file(): + # Only check source code files, ignore temporary files and logs + if file_path.suffix.lower() in source_extensions: + mtime = file_path.stat().st_mtime + latest_source_time = max(latest_source_time, mtime) + + # Check key configuration files + for key_file in key_files: + if key_file.exists(): + mtime = key_file.stat().st_mtime + latest_source_time = max(latest_source_time, mtime) + + # Get build time + build_time = index_html.stat().st_mtime + + # Compare timestamps (5 second tolerance to avoid file system time precision issues) + if latest_source_time > build_time + 5: + ASCIIColors.yellow("\n" + "=" * 80) + ASCIIColors.yellow("WARNING: Frontend Source Code Has Been Updated") + ASCIIColors.yellow("=" * 80) + ASCIIColors.yellow( + "The frontend source code is newer than the current build." + ) + ASCIIColors.yellow( + "This might happen after 'git pull' or manual code changes.\n" + ) + ASCIIColors.cyan( + "Recommended: Rebuild the frontend to use the latest changes:" + ) + ASCIIColors.cyan(" cd lightrag_webui") + ASCIIColors.cyan(" bun install --frozen-lockfile") + ASCIIColors.cyan(" bun run build") + ASCIIColors.cyan(" cd ..") + ASCIIColors.yellow("\nThe server will continue with the current build.") + ASCIIColors.yellow("=" * 80 + "\n") + else: + logger.info("Frontend build is up-to-date") + + except Exception as e: + # If check fails, log warning but don't affect startup + logger.warning(f"Failed to check frontend source freshness: {e}") + def create_app(args): # Check frontend build first diff --git a/lightrag_webui/README.md b/lightrag_webui/README.md index e9edc3c5..00e537ba 100644 --- a/lightrag_webui/README.md +++ b/lightrag_webui/README.md @@ -13,7 +13,7 @@ LightRAG WebUI is a React-based web interface for interacting with the LightRAG In the `lightrag_webui` directory, run the following command to install project dependencies: ```bash - bun install --frozen-lockfile --production + bun install --frozen-lockfile ``` 3. **Build the Project:**