feat: initial commit - Jhonny Editor
- Adicionado estrutura completa do projeto - Configurado MCP server para Premiere Pro - Adicionado documentação e skills - Configurado Gitignore para o projeto
This commit is contained in:
Executable
+217
@@ -0,0 +1,217 @@
|
||||
#!/bin/zsh
|
||||
# ============================================================
|
||||
# Jhonny - admin/PremiereMCP.command
|
||||
#
|
||||
# PONTO DE ENTRADA UNICO do MCP do Premiere Pro (code/) e do pipeline
|
||||
# de corte de silencio por transcricao (Whisper). Rode este arquivo
|
||||
# sempre que mexer no codigo antes de testar dentro do Premiere.
|
||||
#
|
||||
# 1. BUILD compila o TypeScript (code/, tsc -> dist/), valida a
|
||||
# sintaxe dos scripts do painel CEP e do apply-silence-cuts,
|
||||
# e reinstala a COPIA do painel que o Premiere realmente
|
||||
# carrega (~/Library/.../Adobe/CEP/extensions/MCPBridgeCEP -
|
||||
# editar code/cep-plugin sozinho nao e o bastante)
|
||||
# 2. PYTHON confere o venv/dependencias do pipeline de transcricao
|
||||
# (faster-whisper) e a presenca dos scripts esperados
|
||||
# 3. RAG reindexa na RAG do Jhonny (jhonny-rag) o que mudou em
|
||||
# code/ desde o ultimo build - mantem o indice em dia pro
|
||||
# agente de IA buscar o codigo certo. Best-effort: se o
|
||||
# abre o tunel temporariamente quando necessario e fecha o
|
||||
# processo que este ciclo iniciou ao terminar.
|
||||
# 4. LEMBRETE reinicie o Premiere Pro por completo para o painel
|
||||
# reinstalado ser carregado - este passo so imprime isso
|
||||
#
|
||||
# Nao mexe em git (este projeto nao e um repositorio git) e nao sobe
|
||||
# nenhum servidor - o bridge roda dentro do proprio Premiere via CEP.
|
||||
#
|
||||
# Uso:
|
||||
# admin/PremiereMCP.command ciclo completo
|
||||
# SKIP_BUILD=1 admin/PremiereMCP.command pula o build TypeScript
|
||||
# SKIP_PYTHON=1 admin/PremiereMCP.command pula a checagem Python
|
||||
# SKIP_RAG=1 admin/PremiereMCP.command pula a reindexacao RAG
|
||||
# ONLY=build admin/PremiereMCP.command roda so uma etapa
|
||||
# (build | python | rag | reload)
|
||||
# ============================================================
|
||||
set -u
|
||||
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
|
||||
CODE="$ROOT/code"
|
||||
CEP="$CODE/cep-plugin"
|
||||
SCRIPTS="$CODE/scripts"
|
||||
|
||||
# Pipeline de transcricao (Whisper) - mesmo venv usado nesta sessao.
|
||||
TRANSCRICAO="/Volumes/Merongo/SISTEMAS/WHISPERX/transcricao"
|
||||
VENV_PY="/Volumes/Merongo/SISTEMAS/venvs/whisperx-transcricao/bin/python"
|
||||
|
||||
GRN="$(tput setaf 2 2>/dev/null)"; YLW="$(tput setaf 3 2>/dev/null)"
|
||||
RD="$(tput setaf 1 2>/dev/null)"; BLU="$(tput setaf 4 2>/dev/null)"
|
||||
NC="$(tput sgr0 2>/dev/null)"
|
||||
step() { echo; echo "${BLU}============================================================${NC}"
|
||||
echo "${BLU} $*${NC}"
|
||||
echo "${BLU}============================================================${NC}"; }
|
||||
ok() { echo "${GRN}-> OK ${NC}$*"; }
|
||||
warn() { echo "${YLW}-> Aviso: ${NC}$*"; }
|
||||
die() { echo "${RD}-> Erro: ${NC}$*" >&2; exit 1; }
|
||||
|
||||
ONLY="${ONLY:-all}"
|
||||
run_step() { [ "$ONLY" = "all" ] || [ "$ONLY" = "$1" ]; }
|
||||
|
||||
FAILED=0
|
||||
RAG_TUNNEL_PID=""
|
||||
|
||||
cleanup_rag_tunnel() {
|
||||
if [ -n "$RAG_TUNNEL_PID" ] && kill -0 "$RAG_TUNNEL_PID" 2>/dev/null; then
|
||||
kill "$RAG_TUNNEL_PID" 2>/dev/null || true
|
||||
wait "$RAG_TUNNEL_PID" 2>/dev/null || true
|
||||
fi
|
||||
}
|
||||
trap cleanup_rag_tunnel EXIT
|
||||
|
||||
[ -d "$CODE" ] || die "pasta do projeto nao encontrada: $CODE"
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# 1) Build (TypeScript + validacao de sintaxe dos scripts)
|
||||
# ------------------------------------------------------------
|
||||
if run_step build && [ "${SKIP_BUILD:-0}" != "1" ]; then
|
||||
step "1/4 BUILD (tsc + validacao de sintaxe)"
|
||||
cd "$CODE" || die "nao consegui entrar em $CODE"
|
||||
|
||||
if npm run build; then
|
||||
ok "npm run build (dist/ atualizado)"
|
||||
else
|
||||
warn "npm run build falhou - veja o log acima"
|
||||
FAILED=1
|
||||
fi
|
||||
|
||||
for f in "$CEP/main.js" "$SCRIPTS/apply-silence-cuts.mjs"; do
|
||||
if [ -f "$f" ]; then
|
||||
if node --check "$f" 2>/dev/null; then
|
||||
ok "sintaxe valida: ${f#$ROOT/}"
|
||||
else
|
||||
warn "sintaxe invalida: ${f#$ROOT/}"
|
||||
FAILED=1
|
||||
fi
|
||||
else
|
||||
warn "arquivo esperado nao encontrado: ${f#$ROOT/}"
|
||||
FAILED=1
|
||||
fi
|
||||
done
|
||||
|
||||
# O Premiere carrega o painel de uma COPIA instalada em
|
||||
# ~/Library/.../Adobe/CEP/extensions/MCPBridgeCEP, nao direto de
|
||||
# code/cep-plugin. Sem este passo, mudancas no painel nunca aparecem
|
||||
# dentro do Premiere, mesmo com o app reaberto.
|
||||
if node dist/index.js --install-cep >/tmp/premiere-mcp-install-cep.log 2>&1; then
|
||||
ok "painel CEP reinstalado (copia sincronizada)"
|
||||
else
|
||||
warn "falha ao reinstalar o painel CEP - veja /tmp/premiere-mcp-install-cep.log"
|
||||
FAILED=1
|
||||
fi
|
||||
elif run_step build; then
|
||||
step "1/4 BUILD - PULADO (SKIP_BUILD=1)"
|
||||
fi
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# 2) Pipeline Python (Whisper / corte de silencio)
|
||||
# ------------------------------------------------------------
|
||||
if run_step python && [ "${SKIP_PYTHON:-0}" != "1" ]; then
|
||||
step "2/4 PYTHON (venv + pipeline de transcricao)"
|
||||
|
||||
if [ -x "$VENV_PY" ]; then
|
||||
ok "venv encontrado: $VENV_PY"
|
||||
else
|
||||
warn "venv nao encontrado em $VENV_PY"
|
||||
FAILED=1
|
||||
fi
|
||||
|
||||
if [ -x "$VENV_PY" ] && "$VENV_PY" -c "import faster_whisper" 2>/dev/null; then
|
||||
ok "faster-whisper importavel"
|
||||
else
|
||||
warn "faster-whisper nao importavel neste venv"
|
||||
FAILED=1
|
||||
fi
|
||||
|
||||
for f in "$TRANSCRICAO/transcribe_cli.py" "$TRANSCRICAO/silence_cutter.py"; do
|
||||
if [ -f "$f" ]; then
|
||||
ok "script presente: ${f#/Volumes/Merongo/}"
|
||||
else
|
||||
warn "script esperado nao encontrado: ${f#/Volumes/Merongo/}"
|
||||
FAILED=1
|
||||
fi
|
||||
done
|
||||
elif run_step python; then
|
||||
step "2/4 PYTHON - PULADO (SKIP_PYTHON=1)"
|
||||
fi
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# 3) RAG - reindexa na RAG do Jhonny o que mudou em code/
|
||||
# ------------------------------------------------------------
|
||||
if run_step rag && [ "${SKIP_RAG:-0}" != "1" ]; then
|
||||
step "3/4 RAG (reindexacao incremental jhonny-rag)"
|
||||
RAG_PY="$ROOT/rag/.venv/bin/python3"
|
||||
[ -x "$RAG_PY" ] || RAG_PY="$(command -v python3)"
|
||||
if ! nc -z 127.0.0.1 55435 2>/dev/null; then
|
||||
echo "-> Abrindo tunel RAG temporario (127.0.0.1:55435)..."
|
||||
ssh -N \
|
||||
-o ExitOnForwardFailure=yes \
|
||||
-o ServerAliveInterval=30 \
|
||||
-o ServerAliveCountMax=3 \
|
||||
-L "127.0.0.1:55435:127.0.0.1:55435" \
|
||||
root@179.197.228.240 &
|
||||
RAG_TUNNEL_PID=$!
|
||||
|
||||
RAG_TUNNEL_READY=0
|
||||
for _ in $(seq 1 10); do
|
||||
if nc -z 127.0.0.1 55435 2>/dev/null; then
|
||||
RAG_TUNNEL_READY=1
|
||||
break
|
||||
fi
|
||||
if ! kill -0 "$RAG_TUNNEL_PID" 2>/dev/null; then
|
||||
break
|
||||
fi
|
||||
sleep 0.5
|
||||
done
|
||||
|
||||
if [ "$RAG_TUNNEL_READY" != "1" ]; then
|
||||
warn "nao foi possivel abrir o tunel RAG - reindexacao pulada."
|
||||
else
|
||||
ok "tunel RAG aberto temporariamente"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$RAG_TUNNEL_PID" ] && ! nc -z 127.0.0.1 55435 2>/dev/null; then
|
||||
warn "tunel RAG ficou indisponivel - reindexacao pulada."
|
||||
elif ! nc -z 127.0.0.1 55435 2>/dev/null; then
|
||||
warn "tunel RAG fechado - reindexacao pulada."
|
||||
elif [ ! -x "$RAG_PY" ]; then
|
||||
warn "python do rag nao encontrado - reindexacao pulada."
|
||||
else
|
||||
if ( cd "$ROOT" && RAG_ENV_FILE="$ROOT/rag/jhonny.env" \
|
||||
"$RAG_PY" "$ROOT/rag/index_code.py" >/tmp/premiere-mcp-rag.log 2>&1 ); then
|
||||
ok "RAG reindexado (incremental) - índice em dia"
|
||||
else
|
||||
warn "reindexacao RAG falhou - veja /tmp/premiere-mcp-rag.log"
|
||||
FAILED=1
|
||||
fi
|
||||
fi
|
||||
elif run_step rag; then
|
||||
step "3/4 RAG - PULADO (SKIP_RAG=1)"
|
||||
fi
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# 4) Lembrete de recarregar o painel dentro do Premiere
|
||||
# ------------------------------------------------------------
|
||||
if run_step reload; then
|
||||
step "4/4 REINICIAR O PREMIERE"
|
||||
echo "O painel ja foi reinstalado (passo 1), mas o Premiere so carrega a"
|
||||
echo "copia nova depois de um restart completo:"
|
||||
echo " 1. Feche o Premiere Pro por completo (Cmd+Q)"
|
||||
echo " 2. Abra de novo e va em Window > Extensions > MCP for Adobe Premiere Pro"
|
||||
echo " 3. Confira se aparecem as abas 'Bridge' e 'Cortar silencio'"
|
||||
fi
|
||||
|
||||
echo
|
||||
if [ "$FAILED" != "0" ]; then
|
||||
die "ciclo terminou com pendencias - corrija os avisos acima antes de testar no Premiere."
|
||||
fi
|
||||
ok "Ciclo concluido. Pronto para recarregar o painel no Premiere."
|
||||
Reference in New Issue
Block a user