"""Entrada de linha de comando: aplica um plano de edição na sequência ativa do Premiere. Espelha o ``executar_scanner.py``/``executar_retakes.py``: recebe o caminho de um JSON de ações (``kind``/``start``/``end``/``params``/``reason``, formato das skills de seleção de trechos) e aplica cada ação na sequência que estiver ativa no Premiere no momento da execução, via o MCP existente em ``engine.integracoes.premiere``. Uso:: python aplicar_plano_de_edicao.py "/caminho/0E6A8290_edit_actions.json" Pré-requisito: o Premiere precisa estar aberto com a sequência correta ativa e o painel/plugin do MCP em execução — este script não abre o Premiere nem troca de sequência. """ from __future__ import annotations import json import sys from pathlib import Path 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.editor import AplicadorDePlanoDeEdicao, EscritaNoEditor, LeitorDePlanoDeEdicao, MapeadorDeTempoDeOrigemParaTimeline from engine.integracoes.premiere.cliente_mcp import ClienteMCPPorStdio from engine.integracoes.premiere.conversores import ConversorDeTimeline from engine.integracoes.premiere.leitura import AcessoAoEditor, AcessoATimeline from engine.integracoes.premiere.sessao_mcp import SessaoMCP CAMINHO_DO_SERVIDOR_MCP = CAMINHO_DO_CODIGO / "dist" / "index.js" def executar(caminho_do_plano: Path) -> dict: """Lê o plano em ``caminho_do_plano`` e o aplica na sequência ativa do Premiere. Devolve um dicionário pronto para virar JSON, com o resultado de cada ação — para o painel exibir o que foi aplicado e o que falhou. """ plano = LeitorDePlanoDeEdicao().ler(caminho_do_plano) cliente = ClienteMCPPorStdio(["node", str(CAMINHO_DO_SERVIDOR_MCP)]) with SessaoMCP(cliente): acesso_ao_editor = AcessoAoEditor(AcessoATimeline(cliente)) aplicador = AplicadorDePlanoDeEdicao( acesso_ao_editor=acesso_ao_editor, conversor_de_timeline=ConversorDeTimeline(), escrita=EscritaNoEditor(cliente), mapeador=MapeadorDeTempoDeOrigemParaTimeline(), ) resultado = aplicador.aplicar(plano) return { "arquivo_de_origem": plano.arquivo_de_origem, "todas_bem_sucedidas": resultado.todas_bem_sucedidas, "acoes": [ { "tipo": item.acao.tipo.value, "inicio": item.acao.inicio, "fim": item.acao.fim, "motivo": item.acao.motivo, "sucesso": item.sucesso, "detalhe": item.detalhe, } for item in resultado.resultados ], } def main() -> None: """Ponto de entrada da linha de comando.""" if len(sys.argv) != 2: print("Uso: python aplicar_plano_de_edicao.py ", file=sys.stderr) sys.exit(2) resultado = executar(Path(sys.argv[1])) print(json.dumps(resultado, ensure_ascii=False, indent=2)) if not resultado["todas_bem_sucedidas"]: sys.exit(1) if __name__ == "__main__": main()