Files
João Henrique ee181360c8 feat: criado repositório jhonny-editor no Gitea
criado repositório jhonny-editor no Gitea
adicionado script admin/deploy.command com commit automático
atualizado admin/DEV-NOTES.md com template limpo

Resumo:
- 32 arquivos alterados
- 16 novos
- 15 modificados
- 0 removidos

 16 files changed, 638 insertions(+), 61 deletions(-)

Arquivos:
  - code/engine/skills/boas-praticas-oo.md -> .agents/skills/boas-praticas-oo/SKILL.md
  - AGENTS.md
  - code/cep-plugin/index.html
  - code/cep-plugin/main.js
  - code/cep-plugin/styles.css
  - code/engine/integracoes/visual/apple_vision.py
  - code/engine/integracoes/visual/apple_vision_runner.swift
  - code/engine/integracoes/visual/extrator_ffmpeg.py
  - code/engine/scanner/__init__.py
  - code/engine/scanner/configuracao_visual.py
  - code/engine/scanner/coordenacao/__init__.py
  - code/engine/scanner/retakes/adaptador_de_falas.py
  - code/engine/scanner/retakes/agrupador_de_takes.py
  - code/engine/scanner/retakes/detector_de_reinicios.py
  - code/engine/scanner/retakes/modelos_de_retakes.py
  - code/engine/scanner/visual.py
  - .jhonny/
  - .retakes/
  - CODING_STANDARDS.md
  - code/engine/executar_retakes.py
  - code/engine/persistencia/
  - code/engine/scanner/retakes/__init__.py
  - code/engine/scanner/retakes/carregador_de_artefatos.py
  - code/engine/scanner/retakes/classificador_de_retakes.py
  - code/engine/scanner/retakes/coordenador_de_retakes.py
  - code/engine/scanner/retakes/deteccao_de_retakes.py
  - code/engine/scanner/retakes/gerador_de_evidencias.py
  - code/engine/scanner/retakes/repositorio_de_retakes.py
  - code/engine/testes/test_consultas_de_persistencia.py
  - code/engine/testes/test_deteccao_de_retakes.py
  - code/engine/testes/test_persistencia_sqlite.py
  - code/relatorios/audio/arquivos/92f97877259a86a8095b1eecafdefe357212a12247d04b78df60e0c0ae38b2ea/
2026-09-08 17:13:19 -04:00

51 lines
1.7 KiB
Python

from dataclasses import dataclass, field
from typing import Any, Protocol
from ...dominio import Timeline
@dataclass
class ContextoDeAnalise:
timeline: Timeline | None = None
dados_da_timeline: dict[str, Any] | None = None
erros: list[str] = field(default_factory=list)
avisos: list[str] = field(default_factory=list)
analises_concluidas: list[str] = field(default_factory=list)
transcricoes: dict[str, list[Any]] = field(default_factory=dict)
caracteristicas_visuais: dict[str, dict[str, Any]] = field(default_factory=dict)
cenas: list[Any] = field(default_factory=list)
cenas_visuais: list[Any] = field(default_factory=list)
eventos: list[Any] = field(default_factory=list)
arquivos: dict[str, Any] = field(default_factory=dict)
metadados_dos_arquivos: dict[str, Any] = field(default_factory=dict)
retakes: Any = None
class Analisador(Protocol):
nome: str
def executar(self, contexto: ContextoDeAnalise) -> ContextoDeAnalise: ...
class PipelineDoScanner:
"""Executa análises em ordem, sem conhecer sua implementação."""
def __init__(self, analises: list[Analisador]) -> None:
self.analises = analises
def executar(self, contexto: ContextoDeAnalise) -> ContextoDeAnalise:
for analise in self.analises:
contexto = analise.executar(contexto)
contexto.analises_concluidas.append(analise.nome)
return contexto
class AnalisadorDeTimeline:
"""Ponto de entrada da análise da timeline."""
def __init__(self, pipeline: PipelineDoScanner) -> None:
self.pipeline = pipeline
def analisar(self, timeline: Timeline | None = None) -> ContextoDeAnalise:
return self.pipeline.executar(ContextoDeAnalise(timeline=timeline))