#!/bin/bash # BlackRoad RAG — unified entry point # Usage: # rag search "how does auth work" # rag status # rag index # rag api # rag cite "gateway routing" --style academic # rag progress set -e RAG_DIR="$HOME/.blackroad-rag" PINK='\033[38;5;205m' GREEN='\033[38;5;82m' CYAN='\033[38;5;69m' AMBER='\033[38;5;214m' RESET='\033[0m' case "${1:-help}" in search) shift python3 "$RAG_DIR/rag-engine.py" search "$@" ;; status) python3 "$RAG_DIR/rag-engine.py" status ;; index) echo -e "${PINK}Starting background indexer...${RESET}" nohup python3 "$RAG_DIR/index-background.py" >> /tmp/rag-index.log 2>&1 & echo -e "${GREEN}PID: $!${RESET}" echo -e "${CYAN}Progress: tail -f $RAG_DIR/index-progress.txt${RESET}" ;; reindex) echo -e "${AMBER}Dropping and rebuilding index...${RESET}" python3 "$RAG_DIR/rag-engine.py" reindex ;; api) shift python3 "$RAG_DIR/rag-api.py" "$@" ;; progress) if [[ -f "$RAG_DIR/index-progress.txt" ]]; then tail -20 "$RAG_DIR/index-progress.txt" else echo "No indexing in progress." fi ;; cite) shift # Quick citation mode via the API python3 -c " import importlib.util, sys, json from pathlib import Path spec = importlib.util.spec_from_file_location('rag_engine', Path('$RAG_DIR/rag-engine.py')) rag = importlib.util.module_from_spec(spec) spec.loader.exec_module(rag) spec2 = importlib.util.spec_from_file_location('academic_sources', Path('$RAG_DIR/academic-sources.py')) acad = importlib.util.module_from_spec(spec2) spec2.loader.exec_module(acad) query = ' '.join(sys.argv[1:]).replace('--style','').replace('academic','').replace('inline','').replace('markdown','').strip() style = 'academic' for a in sys.argv: if a in ('inline','academic','markdown'): style = a results = rag.search(query, top_k=10) print(acad.format_citations(results, query, style=style)) " "$@" ;; scan) shift echo -e "${PINK}Scanning repos and generating chunks...${RESET}" bash "$RAG_DIR/index-repos.sh" "$@" ;; help|*) echo -e "${PINK}BlackRoad RAG${RESET} — Semantic Code Search" echo "" echo " rag search Search code semantically" echo " rag status Show index stats" echo " rag index Start background indexing" echo " rag reindex Drop and rebuild index" echo " rag progress Check indexing progress" echo " rag cite Get academic-style citations" echo " rag scan Rescan repos into chunks" echo " rag api [--port N] Start RAG API server" echo "" echo -e " ${CYAN}We remember the Road. We pave tomorrow.${RESET}" ;; esac