implementado graphify.sh
This commit is contained in:
parent
65a7aeb275
commit
cb90e4d858
11 changed files with 261 additions and 26 deletions
156
scripts/graphify.sh
Executable file
156
scripts/graphify.sh
Executable file
|
|
@ -0,0 +1,156 @@
|
|||
#!/usr/bin/env bash
|
||||
# ==============================================================================
|
||||
# Utilitário Canônico do Graphify (.agent/scripts/graphify.sh)
|
||||
# Gerencia instalação automática via Bun, atualização idempotente do .gitignore,
|
||||
# geração sob demanda (ensure) e consultas ao Grafo de Conhecimento para /plano.
|
||||
# ==============================================================================
|
||||
|
||||
set -e
|
||||
|
||||
export PATH="$HOME/.bun/bin:$PATH"
|
||||
export ENGRAM_QUIET_DEPRECATION=1
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
|
||||
# Resolver diretório raiz do projeto hospedeiro
|
||||
resolver_raiz_projeto() {
|
||||
local super_dir
|
||||
super_dir=$(git -C "$SCRIPT_DIR" rev-parse --show-superproject-working-tree 2>/dev/null || true)
|
||||
if [ -n "$super_dir" ]; then
|
||||
echo "$super_dir"
|
||||
return
|
||||
fi
|
||||
|
||||
local candidato
|
||||
candidato="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
if [ -d "$candidato/.agent" ] || [ -f "$candidato/memorias-ia/modulo.yml" ]; then
|
||||
echo "$candidato"
|
||||
return
|
||||
fi
|
||||
|
||||
pwd
|
||||
}
|
||||
|
||||
SUPER_DIR="$(resolver_raiz_projeto)"
|
||||
|
||||
# 1. Garantir entradas do Graphify no .gitignore do projeto hospedeiro
|
||||
garantir_gitignore() {
|
||||
local gitignore_file="$SUPER_DIR/.gitignore"
|
||||
if [ ! -f "$gitignore_file" ]; then
|
||||
touch "$gitignore_file"
|
||||
fi
|
||||
|
||||
local adicionou_cabecalho=0
|
||||
if grep -qE "^# Graphify Knowledge Graph" "$gitignore_file" 2>/dev/null; then
|
||||
adicionou_cabecalho=1
|
||||
fi
|
||||
|
||||
for entrada in ".graphify/" ".engram/" "graphify-out/"; do
|
||||
if ! grep -qxF "$entrada" "$gitignore_file" 2>/dev/null; then
|
||||
if [ "$adicionou_cabecalho" -eq 0 ]; then
|
||||
printf "\n# Graphify Knowledge Graph\n" >> "$gitignore_file"
|
||||
adicionou_cabecalho=1
|
||||
fi
|
||||
printf "%s\n" "$entrada" >> "$gitignore_file"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# 2. Garantir que o Graphify esteja instalado na máquina (via Bun)
|
||||
garantir_instalacao() {
|
||||
local forcar="${1:-0}"
|
||||
if [ "$forcar" = "1" ] || { ! command -v graphify >/dev/null 2>&1 && ! command -v engram >/dev/null 2>&1; }; then
|
||||
if command -v bun >/dev/null 2>&1; then
|
||||
echo "📦 Instalando/atualizando Graphify globalmente via Bun (@sentropic/graphify)..." >&2
|
||||
bun i -g @sentropic/graphify >&2 || true
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# 3. Executar o binário do Graphify com fallback para bunx / bun x
|
||||
executar_graphify() {
|
||||
if command -v graphify >/dev/null 2>&1; then
|
||||
graphify "$@"
|
||||
elif command -v engram >/dev/null 2>&1; then
|
||||
engram "$@"
|
||||
elif command -v bunx >/dev/null 2>&1; then
|
||||
bunx @sentropic/graphify "$@"
|
||||
elif command -v bun >/dev/null 2>&1; then
|
||||
bun x @sentropic/graphify "$@"
|
||||
else
|
||||
echo "Erro: Graphify não encontrado no PATH e Bun (bun/bunx) não está disponível na máquina." >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 4. Garantir existência do grafo sob demanda (modo ensure)
|
||||
garantir_grafo() {
|
||||
garantir_gitignore
|
||||
garantir_instalacao 0
|
||||
if [ ! -f "$SUPER_DIR/.engram/graph.json" ] && [ ! -f "$SUPER_DIR/.graphify/graph.json" ]; then
|
||||
echo "📊 Grafo de conhecimento ainda não existe em $SUPER_DIR. Gerando automaticamente..." >&2
|
||||
(cd "$SUPER_DIR" && executar_graphify update . --no-description >&2)
|
||||
fi
|
||||
}
|
||||
|
||||
SUBCOMANDO="${1:-update}"
|
||||
if [ $# -gt 0 ]; then
|
||||
shift
|
||||
fi
|
||||
|
||||
case "$SUBCOMANDO" in
|
||||
install)
|
||||
garantir_gitignore
|
||||
garantir_instalacao 1
|
||||
echo "✅ Graphify instalado e .gitignore atualizado em $SUPER_DIR!"
|
||||
;;
|
||||
gitignore)
|
||||
garantir_gitignore
|
||||
echo "✅ .gitignore verificado e atualizado em $SUPER_DIR!"
|
||||
;;
|
||||
ensure)
|
||||
garantir_grafo
|
||||
;;
|
||||
update)
|
||||
garantir_gitignore
|
||||
garantir_instalacao 0
|
||||
echo "📊 Atualizando o grafo de conhecimento (Graphify) em $SUPER_DIR..."
|
||||
(cd "$SUPER_DIR" && executar_graphify update . --no-description "$@")
|
||||
echo "✅ Grafo atualizado com sucesso!"
|
||||
;;
|
||||
query)
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "Uso: sh .agent/scripts/graphify.sh query \"<termo-ou-pergunta>\" [budget]" >&2
|
||||
exit 1
|
||||
fi
|
||||
TERMO="$1"
|
||||
BUDGET="${2:-1500}"
|
||||
garantir_grafo
|
||||
(cd "$SUPER_DIR" && executar_graphify query "$TERMO" --budget "$BUDGET")
|
||||
;;
|
||||
explain)
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "Uso: sh .agent/scripts/graphify.sh explain \"<no-ou-arquivo>\"" >&2
|
||||
exit 1
|
||||
fi
|
||||
garantir_grafo
|
||||
(cd "$SUPER_DIR" && executar_graphify explain "$@")
|
||||
;;
|
||||
impact)
|
||||
garantir_grafo
|
||||
if [ $# -eq 0 ]; then
|
||||
(cd "$SUPER_DIR" && executar_graphify review-delta --depth 2)
|
||||
else
|
||||
CSV_FILES=$(IFS=,; echo "$*")
|
||||
(cd "$SUPER_DIR" && executar_graphify review-delta --files "$CSV_FILES" --depth 2)
|
||||
fi
|
||||
;;
|
||||
summary)
|
||||
garantir_grafo
|
||||
(cd "$SUPER_DIR" && executar_graphify summary --top-hubs 5 --top-communities 5 "$@")
|
||||
;;
|
||||
*)
|
||||
garantir_grafo
|
||||
(cd "$SUPER_DIR" && executar_graphify "$SUBCOMANDO" "$@")
|
||||
;;
|
||||
esac
|
||||
Loading…
Add table
Add a link
Reference in a new issue