Add intelligent path detection for nearby FSS-Mini-RAG indexes
- Implement find_nearby_index() to search current dir + 2 levels up - Add helpful navigation guidance when index found elsewhere - Update search command to show guidance instead of failing - Update status command to detect nearby indexes - Keep detection simple and not overly complex - Fix command parameter bug (--show-perf) Features: - Searches current directory, parent, and grandparent for .mini-rag - Shows exact navigation commands when index found nearby - Provides clear "cd path && rag-mini search" instructions - Falls back to "create index here" if not found nearby User experience improvements: - No more mysterious "not indexed" errors in subdirectories - Clear guidance on how to navigate to existing indexes - Simple 3-level search depth keeps it fast and predictable
This commit is contained in:
parent
af4db45ce9
commit
0a0efc0e6d
@ -38,6 +38,52 @@ logger = logging.getLogger(__name__)
|
|||||||
console = Console()
|
console = Console()
|
||||||
|
|
||||||
|
|
||||||
|
def find_nearby_index(start_path: Path = None) -> Optional[Path]:
|
||||||
|
"""
|
||||||
|
Find .mini-rag index in current directory or up to 2 levels up.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
start_path: Starting directory to search from (default: current directory)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Path to directory containing .mini-rag, or None if not found
|
||||||
|
"""
|
||||||
|
if start_path is None:
|
||||||
|
start_path = Path.cwd()
|
||||||
|
|
||||||
|
current = start_path.resolve()
|
||||||
|
|
||||||
|
# Search current directory and up to 2 levels up
|
||||||
|
for level in range(3): # 0, 1, 2 levels up
|
||||||
|
rag_dir = current / ".mini-rag"
|
||||||
|
if rag_dir.exists() and rag_dir.is_dir():
|
||||||
|
return current
|
||||||
|
|
||||||
|
# Move up one level
|
||||||
|
parent = current.parent
|
||||||
|
if parent == current: # Reached filesystem root
|
||||||
|
break
|
||||||
|
current = parent
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def show_index_guidance(query_path: Path, found_index_path: Path) -> None:
|
||||||
|
"""Show helpful guidance when index is found in a different location."""
|
||||||
|
relative_path = found_index_path.relative_to(Path.cwd()) if found_index_path != Path.cwd() else Path(".")
|
||||||
|
|
||||||
|
console.print(f"\n[yellow]📍 Found FSS-Mini-RAG index in:[/yellow] [blue]{found_index_path}[/blue]")
|
||||||
|
console.print(f"[dim]Current directory:[/dim] [dim]{query_path}[/dim]")
|
||||||
|
console.print()
|
||||||
|
console.print("[green]🚀 To search the index, navigate there first:[/green]")
|
||||||
|
console.print(f" [bold]cd {relative_path}[/bold]")
|
||||||
|
console.print(f" [bold]rag-mini search 'your query here'[/bold]")
|
||||||
|
console.print()
|
||||||
|
console.print("[cyan]💡 Or specify the path directly:[/cyan]")
|
||||||
|
console.print(f" [bold]rag-mini search -p {found_index_path} 'your query here'[/bold]")
|
||||||
|
console.print()
|
||||||
|
|
||||||
|
|
||||||
@click.group()
|
@click.group()
|
||||||
@click.option("--verbose", "-v", is_flag=True, help="Enable verbose logging")
|
@click.option("--verbose", "-v", is_flag=True, help="Enable verbose logging")
|
||||||
@click.option("--quiet", "-q", is_flag=True, help="Suppress output")
|
@click.option("--quiet", "-q", is_flag=True, help="Suppress output")
|
||||||
@ -153,7 +199,7 @@ def init(path: str, force: bool, reindex: bool, model: Optional[str]):
|
|||||||
)
|
)
|
||||||
@click.option("--lang", multiple=True, help="Filter by language (python, javascript, etc.)")
|
@click.option("--lang", multiple=True, help="Filter by language (python, javascript, etc.)")
|
||||||
@click.option("--show-content", "-c", is_flag=True, help="Show code content in results")
|
@click.option("--show-content", "-c", is_flag=True, help="Show code content in results")
|
||||||
@click.option("--show-per", is_flag=True, help="Show performance metrics")
|
@click.option("--show-perf", is_flag=True, help="Show performance metrics")
|
||||||
def search(
|
def search(
|
||||||
query: str,
|
query: str,
|
||||||
path: str,
|
path: str,
|
||||||
@ -166,10 +212,21 @@ def search(
|
|||||||
"""Search codebase using semantic similarity."""
|
"""Search codebase using semantic similarity."""
|
||||||
project_path = Path(path).resolve()
|
project_path = Path(path).resolve()
|
||||||
|
|
||||||
# Check if indexed
|
# Check if indexed at specified path
|
||||||
rag_dir = project_path / ".mini-rag"
|
rag_dir = project_path / ".mini-rag"
|
||||||
if not rag_dir.exists():
|
if not rag_dir.exists():
|
||||||
console.print("[red]Error:[/red] Project not indexed. Run 'rag-mini init' first.")
|
# Try to find nearby index if searching from current directory
|
||||||
|
if path == ".":
|
||||||
|
nearby_index = find_nearby_index()
|
||||||
|
if nearby_index:
|
||||||
|
show_index_guidance(project_path, nearby_index)
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
console.print(f"[red]Error:[/red] No FSS-Mini-RAG index found at [blue]{project_path}[/blue]")
|
||||||
|
console.print()
|
||||||
|
console.print("[yellow]💡 To create an index:[/yellow]")
|
||||||
|
console.print(f" [bold]rag-mini init -p {project_path}[/bold]")
|
||||||
|
console.print()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
# Get performance monitor
|
# Get performance monitor
|
||||||
@ -714,7 +771,18 @@ def status(path: str, port: int, discovery: bool):
|
|||||||
console.print(f" • Error: {e}")
|
console.print(f" • Error: {e}")
|
||||||
else:
|
else:
|
||||||
console.print(" • Status: [red]❌ Not indexed[/red]")
|
console.print(" • Status: [red]❌ Not indexed[/red]")
|
||||||
console.print(" • Run 'rag-mini init' to initialize")
|
|
||||||
|
# Try to find nearby index if checking current directory
|
||||||
|
if path == ".":
|
||||||
|
nearby_index = find_nearby_index()
|
||||||
|
if nearby_index:
|
||||||
|
console.print(f" • Found index in: [blue]{nearby_index}[/blue]")
|
||||||
|
relative_path = nearby_index.relative_to(Path.cwd()) if nearby_index != Path.cwd() else Path(".")
|
||||||
|
console.print(f" • Use: [bold]cd {relative_path} && rag-mini status[/bold]")
|
||||||
|
else:
|
||||||
|
console.print(" • Run 'rag-mini init' to initialize")
|
||||||
|
else:
|
||||||
|
console.print(" • Run 'rag-mini init' to initialize")
|
||||||
|
|
||||||
# Check server status
|
# Check server status
|
||||||
console.print("\n[bold]🚀 Server Status:[/bold]")
|
console.print("\n[bold]🚀 Server Status:[/bold]")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user