feat: - tornado obrigatório registrar uma linha de resum
- tornado obrigatório registrar uma linha de resumo para cada implementação concluída - corrigido o Scanner e o Retakes no painel usando o Python do venv (3.14) em vez do /usr/bin/python3 3.9 e injetado o caminho da engine no executar_retakes.py Resumo: - 7 arquivos alterados - 0 novos - 7 modificados - 0 removidos 7 files changed, 57 insertions(+), 8 deletions(-) Arquivos: - .gitignore - AGENTS.md - CLAUDE.md - admin/DEV-NOTES.md - admin/deploy.command - code/cep-plugin/main.js - code/engine/executar_retakes.py
This commit is contained in:
@@ -28,3 +28,6 @@ build/
|
|||||||
# Temporary files
|
# Temporary files
|
||||||
*.tmp
|
*.tmp
|
||||||
*.temp
|
*.temp
|
||||||
|
|
||||||
|
# Resumo temporário usado pelo admin/deploy.command para detalhar o commit
|
||||||
|
admin/COMMIT-DETAILS.md
|
||||||
|
|||||||
@@ -2,6 +2,19 @@
|
|||||||
|
|
||||||
## Project Skills
|
## Project Skills
|
||||||
|
|
||||||
|
## Resumo obrigatório para commits
|
||||||
|
|
||||||
|
Toda pessoa, agente ou IA que implementar qualquer alteração neste projeto
|
||||||
|
deve, antes de finalizar o trabalho, acrescentar **uma única linha** ao final
|
||||||
|
de `admin/COMMIT-DETAILS.md`, em PT-BR, resumindo o que foi feito. Nunca
|
||||||
|
substituir nem apagar as linhas já registradas durante o lote. A linha deve
|
||||||
|
ser curta, sem credenciais, tokens ou dados sensíveis; por exemplo:
|
||||||
|
`- corrigido o carregamento do Scanner quando executado pelo painel CEP`.
|
||||||
|
|
||||||
|
O script `admin/deploy.command` incorpora todas as linhas na mensagem do
|
||||||
|
commit e limpa o arquivo somente após o commit ser concluído com sucesso. Se
|
||||||
|
o commit falhar, os resumos devem ser preservados para nova tentativa.
|
||||||
|
|
||||||
## Convenções obrigatórias de Python / OO
|
## Convenções obrigatórias de Python / OO
|
||||||
|
|
||||||
Todo código Python em `code/engine/` deve seguir a skill **`.agents/skills/boas-praticas-oo/SKILL.md`** (boas práticas de programação orientada a objetos) — obrigatória, aplicada automaticamente, não apenas quando solicitada. Leia-a antes de criar, modificar, corrigir, revisar, refatorar ou ampliar qualquer sistema Python.
|
Todo código Python em `code/engine/` deve seguir a skill **`.agents/skills/boas-praticas-oo/SKILL.md`** (boas práticas de programação orientada a objetos) — obrigatória, aplicada automaticamente, não apenas quando solicitada. Leia-a antes de criar, modificar, corrigir, revisar, refatorar ou ampliar qualquer sistema Python.
|
||||||
|
|||||||
@@ -2,6 +2,15 @@
|
|||||||
|
|
||||||
## Project Context
|
## Project Context
|
||||||
|
|
||||||
|
## Registro obrigatório de alterações
|
||||||
|
|
||||||
|
Ao concluir qualquer implementação, acrescentar uma única linha em
|
||||||
|
`admin/COMMIT-DETAILS.md` descrevendo resumidamente o que foi alterado. A
|
||||||
|
linha deve ser adicionada ao final do arquivo, sem apagar os registros
|
||||||
|
anteriores do lote. O resumo não pode conter segredos ou tokens. O
|
||||||
|
`admin/deploy.command` usa essas linhas na mensagem do commit e limpa o
|
||||||
|
arquivo somente depois de um commit bem-sucedido.
|
||||||
|
|
||||||
This is a software engineering project that uses mattpocock/skills for code quality and organization.
|
This is a software engineering project that uses mattpocock/skills for code quality and organization.
|
||||||
|
|
||||||
## Code Search: use the RAG first
|
## Code Search: use the RAG first
|
||||||
|
|||||||
+5
-3
@@ -1,9 +1,11 @@
|
|||||||
# DEV-NOTES — Registro de Alterações (Jhonny Editor)
|
# DEV-NOTES — Registro de Alterações (Jhonny Editor)
|
||||||
|
|
||||||
> **Como usar:**
|
> **Como usar:**
|
||||||
> 1. Ao fazer alterações, adicione bullets na seção `## NOVO NESTE LOTE`
|
> 1. Para alterações feitas pelo agente, use `admin/COMMIT-DETAILS.md`.
|
||||||
> 2. Rod `admin/deploy.command` — ele lê essas notas e usa como descrição do commit
|
> 2. Rode `admin/deploy.command` — ele usa o resumo como detalhe do commit.
|
||||||
> 3. Após o deploy, mova os bullets para `## Histórico` e esvazie `NOVO NESTE LOTE`
|
> 3. Após um commit bem-sucedido, o arquivo temporário é limpo automaticamente.
|
||||||
|
>
|
||||||
|
> O bloco abaixo continua como fallback para notas manuais ou histórico do projeto.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
+12
-2
@@ -21,6 +21,7 @@ umask 077
|
|||||||
ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
|
ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
|
||||||
ADMIN="$ROOT/admin"
|
ADMIN="$ROOT/admin"
|
||||||
NOTES="$ADMIN/DEV-NOTES.md"
|
NOTES="$ADMIN/DEV-NOTES.md"
|
||||||
|
COMMIT_DETAILS="$ADMIN/COMMIT-DETAILS.md"
|
||||||
REMOTE="origin"
|
REMOTE="origin"
|
||||||
BRANCH="main"
|
BRANCH="main"
|
||||||
|
|
||||||
@@ -57,10 +58,16 @@ echo " ... ($(echo "$CHANGES" | grep -c .) itens)"
|
|||||||
echo
|
echo
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
# 2) Extrair notas do DEV-NOTES.md
|
# 2) Extrair detalhes preparados pelo agente
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
MSG_NOTA=""
|
MSG_NOTA=""
|
||||||
if [[ -f "$NOTES" && -s "$NOTES" ]]; then
|
if [[ -f "$COMMIT_DETAILS" && -s "$COMMIT_DETAILS" ]]; then
|
||||||
|
MSG_NOTA="$(sed 's/^[[:space:]]*//; s/[[:space:]]*$//' "$COMMIT_DETAILS" \
|
||||||
|
| grep -v '^$' \
|
||||||
|
| grep -v '^<!--' \
|
||||||
|
| grep -v '^-->' || true)"
|
||||||
|
fi
|
||||||
|
if [[ -z "$MSG_NOTA" && -f "$NOTES" && -s "$NOTES" ]]; then
|
||||||
MSG_NOTA="$(awk '
|
MSG_NOTA="$(awk '
|
||||||
/^## NOVO NESTE LOTE/ {f=1; next}
|
/^## NOVO NESTE LOTE/ {f=1; next}
|
||||||
/^## / && f {exit}
|
/^## / && f {exit}
|
||||||
@@ -124,6 +131,9 @@ fi
|
|||||||
say "Adicionando arquivos e commitando..."
|
say "Adicionando arquivos e commitando..."
|
||||||
git add -A
|
git add -A
|
||||||
git commit -m "$COMMIT_MSG" || die "commit falhou"
|
git commit -m "$COMMIT_MSG" || die "commit falhou"
|
||||||
|
if [[ -f "$COMMIT_DETAILS" ]]; then
|
||||||
|
: > "$COMMIT_DETAILS"
|
||||||
|
fi
|
||||||
ok "commit criado: $(git rev-parse --short HEAD)"
|
ok "commit criado: $(git rev-parse --short HEAD)"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
|||||||
@@ -230,6 +230,10 @@ function switchTab(name) {
|
|||||||
// A aba apenas controla o processo e mostra resultados; a análise inteira
|
// A aba apenas controla o processo e mostra resultados; a análise inteira
|
||||||
// acontece na engine (scanner/retakes), chamada via executar_retakes.py.
|
// acontece na engine (scanner/retakes), chamada via executar_retakes.py.
|
||||||
var RETAKES_ENGINE_SCRIPT = "/Volumes/Merongo/SISTEMAS/GENIAL SISTEMAS/Jhonny/code/engine/executar_retakes.py";
|
var RETAKES_ENGINE_SCRIPT = "/Volumes/Merongo/SISTEMAS/GENIAL SISTEMAS/Jhonny/code/engine/executar_retakes.py";
|
||||||
|
// A engine usa tipos do Python 3.10+ (ex.: `X | None`, `dict[str, ...]`), que
|
||||||
|
// o `/usr/bin/python3` do macOS (3.9) não aceita. Usar o mesmo venv do projeto
|
||||||
|
// (Python 3.14, com faster_whisper) garante que Scanner e Retakes carreguem bem.
|
||||||
|
var SCANNER_PYTHON_BIN = "/Volumes/Merongo/SISTEMAS/venvs/whisperx-transcricao/bin/python";
|
||||||
var retakesCasoAtual = null;
|
var retakesCasoAtual = null;
|
||||||
var retakesGrupos = [];
|
var retakesGrupos = [];
|
||||||
var retakesProcesso = null;
|
var retakesProcesso = null;
|
||||||
@@ -354,7 +358,7 @@ function retakesAnalisar() {
|
|||||||
taskStart("Retakes", "Preparando análise", null);
|
taskStart("Retakes", "Preparando análise", null);
|
||||||
document.getElementById("retakesProgressoCard").hidden = false;
|
document.getElementById("retakesProgressoCard").hidden = false;
|
||||||
document.getElementById("retakesProgressoEtapa").textContent = "Analisando retakes…";
|
document.getElementById("retakesProgressoEtapa").textContent = "Analisando retakes…";
|
||||||
var child = childProcess.spawn("python3", [RETAKES_ENGINE_SCRIPT, entrada, path.join(retakesRaiz(), retakesCasoAtual)],
|
var child = childProcess.spawn(SCANNER_PYTHON_BIN, [RETAKES_ENGINE_SCRIPT, entrada, path.join(retakesRaiz(), retakesCasoAtual)],
|
||||||
{ cwd: "/Volumes/Merongo/SISTEMAS/GENIAL SISTEMAS/Jhonny/code/engine", stdio: ["ignore", "pipe", "pipe"] });
|
{ cwd: "/Volumes/Merongo/SISTEMAS/GENIAL SISTEMAS/Jhonny/code/engine", stdio: ["ignore", "pipe", "pipe"] });
|
||||||
retakesProcesso = child;
|
retakesProcesso = child;
|
||||||
var resto = "";
|
var resto = "";
|
||||||
@@ -393,7 +397,7 @@ function retakesRevisar(grupoId, acao) {
|
|||||||
var pedido = { acao: "revisar", video_id: retakesCasoAtual, revisao: { grupo_id: grupoId, acao: acao } };
|
var pedido = { acao: "revisar", video_id: retakesCasoAtual, revisao: { grupo_id: grupoId, acao: acao } };
|
||||||
var entrada = path.join(os.tmpdir(), "revisao-retakes-" + Date.now() + ".json");
|
var entrada = path.join(os.tmpdir(), "revisao-retakes-" + Date.now() + ".json");
|
||||||
fs.writeFileSync(entrada, JSON.stringify(pedido), "utf-8");
|
fs.writeFileSync(entrada, JSON.stringify(pedido), "utf-8");
|
||||||
var child = childProcess.spawn("python3", [RETAKES_ENGINE_SCRIPT, entrada, path.join(retakesRaiz(), retakesCasoAtual)],
|
var child = childProcess.spawn(SCANNER_PYTHON_BIN, [RETAKES_ENGINE_SCRIPT, entrada, path.join(retakesRaiz(), retakesCasoAtual)],
|
||||||
{ cwd: "/Volumes/Merongo/SISTEMAS/GENIAL SISTEMAS/Jhonny/code/engine", stdio: ["ignore", "pipe", "pipe"] });
|
{ cwd: "/Volumes/Merongo/SISTEMAS/GENIAL SISTEMAS/Jhonny/code/engine", stdio: ["ignore", "pipe", "pipe"] });
|
||||||
child.on("close", function (codigo) {
|
child.on("close", function (codigo) {
|
||||||
if (codigo !== 0) { showToast("err", "Não foi possível registrar a revisão."); return; }
|
if (codigo !== 0) { showToast("err", "Não foi possível registrar a revisão."); return; }
|
||||||
@@ -511,7 +515,7 @@ function scannerProcess() {
|
|||||||
setBusy("btnScannerProcess",true); taskStart("Scanner", "Preparando análise", null);
|
setBusy("btnScannerProcess",true); taskStart("Scanner", "Preparando análise", null);
|
||||||
var spawnOptions={cwd:"/Volumes/Merongo/SISTEMAS/GENIAL SISTEMAS/Jhonny/code",stdio:["ignore","pipe","pipe"]};
|
var spawnOptions={cwd:"/Volumes/Merongo/SISTEMAS/GENIAL SISTEMAS/Jhonny/code",stdio:["ignore","pipe","pipe"]};
|
||||||
var huggingFaceEnvironment=hfSpawnOptions(); if(huggingFaceEnvironment&&huggingFaceEnvironment.env) spawnOptions.env=huggingFaceEnvironment.env;
|
var huggingFaceEnvironment=hfSpawnOptions(); if(huggingFaceEnvironment&&huggingFaceEnvironment.env) spawnOptions.env=huggingFaceEnvironment.env;
|
||||||
var child=childProcess.spawn("python3",[SCANNER_ENGINE_SCRIPT,input,scannerReportPath],spawnOptions);
|
var child=childProcess.spawn(SCANNER_PYTHON_BIN,[SCANNER_ENGINE_SCRIPT,input,scannerReportPath],spawnOptions);
|
||||||
var stderr="", stdout="";
|
var stderr="", stdout="";
|
||||||
child.stdout.on("data",function(chunk) {
|
child.stdout.on("data",function(chunk) {
|
||||||
stdout += chunk.toString(); var lines=stdout.split("\n"); stdout=lines.pop();
|
stdout += chunk.toString(); var lines=stdout.split("\n"); stdout=lines.pop();
|
||||||
|
|||||||
@@ -36,6 +36,14 @@ import sys
|
|||||||
from dataclasses import asdict
|
from dataclasses import asdict
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
# O painel chama este arquivo com cwd ``code/engine`` e o Python inclui apenas
|
||||||
|
# essa pasta no caminho de importação. Injetar ``code`` (pai do pacote
|
||||||
|
# ``engine``) para que os importes da engine funcionem, como em
|
||||||
|
# ``executar_scanner.py``.
|
||||||
|
CAMINHO_DO_CODIGO = Path(__file__).resolve().parent.parent
|
||||||
|
if str(CAMINHO_DO_CODIGO) not in sys.path:
|
||||||
|
sys.path.insert(0, str(CAMINHO_DO_CODIGO))
|
||||||
|
|
||||||
from engine.scanner.retakes import (
|
from engine.scanner.retakes import (
|
||||||
STATUS_CONFIRMADO,
|
STATUS_CONFIRMADO,
|
||||||
STATUS_IGNORADO,
|
STATUS_IGNORADO,
|
||||||
|
|||||||
Reference in New Issue
Block a user