Navegador

navegador / hooks / bootstrap.sh
Source Blame History 116 lines
4be3595… lmata 1 #!/usr/bin/env bash
4be3595… lmata 2 # navegador bootstrap — install, initialise, and ingest a project
4be3595… lmata 3 #
4be3595… lmata 4 # Usage:
4be3595… lmata 5 # curl -fsSL https://raw.githubusercontent.com/ConflictHQ/navegador/main/hooks/bootstrap.sh | bash
4be3595… lmata 6 # # or locally:
4be3595… lmata 7 # bash hooks/bootstrap.sh [--repo owner/repo] [--wiki] [--agent claude|gemini|openai]
4be3595… lmata 8
4be3595… lmata 9 set -euo pipefail
4be3595… lmata 10
4be3595… lmata 11 NAV_DB="${NAVEGADOR_DB:-.navegador/graph.db}"
4be3595… lmata 12 REPO_PATH="${REPO_PATH:-.}"
4be3595… lmata 13 GITHUB_REPO="${GITHUB_REPO:-}"
4be3595… lmata 14 INSTALL_AGENT="${INSTALL_AGENT:-}"
4be3595… lmata 15 INGEST_WIKI=false
4be3595… lmata 16
4be3595… lmata 17 # ── Parse args ────────────────────────────────────────────────────────────────
4be3595… lmata 18 while [[ $# -gt 0 ]]; do
4be3595… lmata 19 case $1 in
4be3595… lmata 20 --repo) GITHUB_REPO="$2"; shift 2 ;;
4be3595… lmata 21 --wiki) INGEST_WIKI=true; shift ;;
4be3595… lmata 22 --agent) INSTALL_AGENT="$2"; shift 2 ;;
4be3595… lmata 23 --db) NAV_DB="$2"; shift 2 ;;
4be3595… lmata 24 *) echo "Unknown option: $1"; exit 1 ;;
4be3595… lmata 25 esac
4be3595… lmata 26 done
4be3595… lmata 27
4be3595… lmata 28 echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
4be3595… lmata 29 echo " Navegador bootstrap"
4be3595… lmata 30 echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
4be3595… lmata 31
4be3595… lmata 32 # ── Install ───────────────────────────────────────────────────────────────────
4be3595… lmata 33 if ! command -v navegador &>/dev/null; then
4be3595… lmata 34 echo "→ Installing navegador..."
4be3595… lmata 35 pip install "navegador[sqlite]" --quiet
4be3595… lmata 36 else
4be3595… lmata 37 echo "→ navegador $(navegador --version 2>&1 | head -1) already installed"
4be3595… lmata 38 fi
4be3595… lmata 39
4be3595… lmata 40 # ── Initialise DB directory ───────────────────────────────────────────────────
4be3595… lmata 41 mkdir -p "$(dirname "$NAV_DB")"
4be3595… lmata 42 echo "→ Graph DB: $NAV_DB"
4be3595… lmata 43
4be3595… lmata 44 # ── Ingest code ───────────────────────────────────────────────────────────────
4be3595… lmata 45 echo "→ Ingesting code from $REPO_PATH ..."
4be3595… lmata 46 navegador --db "$NAV_DB" ingest "$REPO_PATH" --json | \
4be3595… lmata 47 python3 -c "import json,sys; d=json.load(sys.stdin); print(f\" files={d['files']} functions={d['functions']} classes={d['classes']} edges={d['edges']}\")"
4be3595… lmata 48
4be3595… lmata 49 # ── Ingest wiki ───────────────────────────────────────────────────────────────
4be3595… lmata 50 if [[ "$INGEST_WIKI" == "true" && -n "$GITHUB_REPO" ]]; then
4be3595… lmata 51 echo "→ Ingesting GitHub wiki for $GITHUB_REPO ..."
4be3595… lmata 52 navegador --db "$NAV_DB" wiki ingest --repo "$GITHUB_REPO" ${GITHUB_TOKEN:+--token "$GITHUB_TOKEN"} || true
4be3595… lmata 53 fi
4be3595… lmata 54
4be3595… lmata 55 # ── Install agent hook ────────────────────────────────────────────────────────
4be3595… lmata 56 HOOK_SRC_BASE="https://raw.githubusercontent.com/ConflictHQ/navegador/main/hooks"
4be3595… lmata 57
4be3595… lmata 58 install_claude_hook() {
4be3595… lmata 59 mkdir -p .claude/hooks
4be3595… lmata 60 curl -fsSL "$HOOK_SRC_BASE/claude-hook.py" -o .claude/hooks/navegador.py
4be3595… lmata 61 chmod +x .claude/hooks/navegador.py
4be3595… lmata 62
4be3595… lmata 63 SETTINGS=".claude/settings.json"
4be3595… lmata 64 if [[ ! -f "$SETTINGS" ]]; then
4be3595… lmata 65 cat > "$SETTINGS" <<'JSON'
4be3595… lmata 66 {
4be3595… lmata 67 "hooks": {
4be3595… lmata 68 "PostToolUse": [
4be3595… lmata 69 {
4be3595… lmata 70 "matcher": "Edit|Write",
4be3595… lmata 71 "hooks": [{ "type": "command", "command": "python3 .claude/hooks/navegador.py" }]
4be3595… lmata 72 }
4be3595… lmata 73 ]
4be3595… lmata 74 }
4be3595… lmata 75 }
4be3595… lmata 76 JSON
4be3595… lmata 77 echo " Created $SETTINGS"
4be3595… lmata 78 else
4be3595… lmata 79 echo " $SETTINGS exists — add the hook manually (see .claude/hooks/navegador.py)"
4be3595… lmata 80 fi
4be3595… lmata 81 }
4be3595… lmata 82
4be3595… lmata 83 install_gemini_hook() {
4be3595… lmata 84 mkdir -p .gemini/hooks
4be3595… lmata 85 curl -fsSL "$HOOK_SRC_BASE/gemini-hook.py" -o .gemini/hooks/navegador.py
4be3595… lmata 86 chmod +x .gemini/hooks/navegador.py
4be3595… lmata 87 echo " Add to GEMINI.md: python3 .gemini/hooks/navegador.py <tool> <file>"
4be3595… lmata 88 }
4be3595… lmata 89
4be3595… lmata 90 install_openai_hook() {
4be3595… lmata 91 curl -fsSL "$HOOK_SRC_BASE/openai-hook.py" -o navegador-openai.py
4be3595… lmata 92 chmod +x navegador-openai.py
4be3595… lmata 93 echo " Register tool schemas from hooks/openai-tools.json with your assistant"
4be3595… lmata 94 }
4be3595… lmata 95
4be3595… lmata 96 case "$INSTALL_AGENT" in
4be3595… lmata 97 claude) echo "→ Installing Claude Code hook..."; install_claude_hook ;;
4be3595… lmata 98 gemini) echo "→ Installing Gemini CLI hook..."; install_gemini_hook ;;
4be3595… lmata 99 openai) echo "→ Installing OpenAI hook..."; install_openai_hook ;;
4be3595… lmata 100 "") ;;
4be3595… lmata 101 *) echo "Unknown agent: $INSTALL_AGENT (use claude|gemini|openai)" ;;
4be3595… lmata 102 esac
4be3595… lmata 103
4be3595… lmata 104 # ── Stats ─────────────────────────────────────────────────────────────────────
4be3595… lmata 105 echo ""
4be3595… lmata 106 echo "→ Graph stats:"
4be3595… lmata 107 navegador --db "$NAV_DB" stats 2>/dev/null || true
4be3595… lmata 108
4be3595… lmata 109 echo ""
4be3595… lmata 110 echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
4be3595… lmata 111 echo " Done. Quick start:"
4be3595… lmata 112 echo " navegador search \"your query\""
4be3595… lmata 113 echo " navegador explain MyClass"
4be3595… lmata 114 echo " navegador stats"
4be3595… lmata 115 echo " navegador add concept \"Payment\" --domain billing"
4be3595… lmata 116 echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button