#!/bin/bash # Hook PostToolUse: reindexa no RAG só o arquivo que acabou de ser editado. # # Sem isso o índice envelhece em silêncio e passa a apontar para código que # já mudou — o que anula o ganho da busca. Reindexar um arquivo custa alguns # embeddings (~1s), então dá para fazer a cada edição. # # Lê o JSON do hook em stdin e roteia por extensão/diretório para o banco # certo (Swift novo -> rag_tigre, Python legado -> rag_doza). Nunca falha o # hook: erro de RAG não pode travar edição. RAG_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_ROOT="$(dirname "$RAG_DIR")" FILE=$(python3 -c ' import json, sys try: d = json.load(sys.stdin) except Exception: sys.exit(0) print(d.get("tool_input", {}).get("file_path", "")) ' 2>/dev/null) || exit 0 REL="${FILE#$PROJECT_ROOT/}" case "$REL" in code/node_modules/*|code/dist/*) exit 0 ;; code/*.ts|code/*.tsx|code/*.js|code/*.jsx|code/*.json|code/*.py|code/*.md|code/*.sql|code/*.sh) ENV_FILE="jhonny.env" ;; *) exit 0 ;; esac # Só reindexa se o túnel já estiver de pé: não vale abrir conexão SSH no # meio de uma edição. nc -z 127.0.0.1 55435 2>/dev/null || exit 0 PY="${RAG_DIR}/.venv/bin/python3" [ -x "$PY" ] || PY="$(command -v python3)" RAG_ENV_FILE="$RAG_DIR/$ENV_FILE" "$PY" "$RAG_DIR/index_code.py" \ --file "$REL" >/dev/null 2>&1 & exit 0