diff --git a/admin/Jhonny.command b/admin/Jhonny.command index f58b3e4..5cd2b5b 100755 --- a/admin/Jhonny.command +++ b/admin/Jhonny.command @@ -14,8 +14,8 @@ # publicar painel quebrado. # # Uso: -# admin/Jhonny.command ciclo completo (pede confirmacao pro push) -# AUTO=1 admin/Jhonny.command nao pergunta antes do push +# admin/Jhonny.command ciclo completo (commit + push automaticos) +# AUTO=1 admin/Jhonny.command mantido por compatibilidade # SKIP_BUILD=1 admin/Jhonny.command pula o build (so commit+push) # SKIP_PYTHON=1 admin/Jhonny.command repassado ao PremiereMCP.command # SKIP_RAG=1 admin/Jhonny.command repassado ao PremiereMCP.command @@ -42,6 +42,6 @@ else fi step "2/2 - deploy.command (commit + push)" -"$ADMIN/deploy.command" || die "deploy.command falhou" +AUTO=1 "$ADMIN/deploy.command" || die "deploy.command falhou" ok "Jhonny.command concluído" diff --git a/code/cep-plugin/main.js b/code/cep-plugin/main.js index 3cab187..4299c90 100755 --- a/code/cep-plugin/main.js +++ b/code/cep-plugin/main.js @@ -477,13 +477,105 @@ function tipoVideoCancelar() { function tipoVideoCopiarJson() { try { - var json = JSON.stringify({ tipo_de_video: tipoVideoDoFormulario() }, null, 2); - var copia = childProcess.spawn("pbcopy"); - copia.stdin.end(json); - showToast("ok", "Configuração copiada em JSON para a IA."); + var tipo = tipoVideoDoFormulario(); + var resumo = { + perfil_de_video: tipo.nome, + objetivo: { + principal: tipo.objetivo, + secundario: tipo.objetivo_secundario, + publico: tipo.publico, + mensagem: tipo.mensagem + }, + narrativa: { + tipo: tipo.tipo_narrativa, + foco: tipo.foco_narrativo, + storytelling: tipo.storytelling, + estrutura: tipo.estrutura + }, + emocao: { + objetivo: tipo.emocao, + intensidade: tipo.intensidade, + tom: tipo.tom, + construcao: tipo.construcao_emocao + }, + formato: { + canais: tipo.canais, + proporcao: tipo.proporcao, + duracao_minima_segundos: tipo.duracao_minima, + duracao_maxima_segundos: tipo.duracao_maxima_segundos, + ritmo: tipo.ritmo + }, + prioridades: tipo.prioridades, + elementos_de_edicao: { + broll: tipo.usa_broll, + legendas: tipo.usa_legendas, + textos: tipo.usa_textos, + graficos: tipo.usa_graficos, + zoom: tipo.usa_zoom, + cortes: tipo.cortes, + orientacao_de_broll: tipo.broll, + textos_e_legendas: tipo.texto + }, + audio: { + musica: tipo.usa_musica, + intensidade_da_musica: tipo.intensidade_musica, + prioridade_da_voz: tipo.prioridade_voz, + tratamento: tipo.som + }, + regras_de_edicao: tipo.diretriz, + restricoes: tipo.restricoes, + criterios_de_qualidade: tipo.qualidade + }; + copiarTextoParaAreaDeTransferencia(JSON.stringify(resumo, null, 2)); } catch (erro) { showToast("err", erro.message); } } +function copiarTextoParaAreaDeTransferencia(texto) { + function copiarComSelecaoDoPainel() { + var area = document.createElement("textarea"); + area.value = texto; + area.setAttribute("readonly", "readonly"); + area.style.position = "fixed"; + area.style.left = "-9999px"; + area.style.top = "0"; + document.body.appendChild(area); + area.focus(); + area.select(); + var copiado = false; + try { copiado = document.execCommand("copy"); } catch (_) { copiado = false; } + document.body.removeChild(area); + if (copiado) showToast("ok", "JSON resumido copiado para a área de transferência."); + else showToast("err", "Não foi possível copiar o JSON. Selecione e copie manualmente."); + } + + try { + if (navigator.clipboard && navigator.clipboard.writeText) { + navigator.clipboard.writeText(texto).then(function () { + showToast("ok", "JSON resumido copiado para a área de transferência."); + }).catch(function () { copiarComPbcopy(texto, copiarComSelecaoDoPainel); }); + return; + } + } catch (_) {} + copiarComPbcopy(texto, copiarComSelecaoDoPainel); +} + +function copiarComPbcopy(texto, fallback) { + try { + var copia = childProcess.spawn("pbcopy"); + var finalizado = false; + function concluir(copiado) { + if (finalizado) return; + finalizado = true; + if (copiado) showToast("ok", "JSON resumido copiado para a área de transferência."); + else fallback(); + } + copia.once("error", function () { concluir(false); }); + copia.once("close", function (codigo) { concluir(codigo === 0); }); + copia.stdin.write(texto, "utf8"); + copia.stdin.end(); + } catch (_) { fallback(); } +} + // ---- Análises --------------------------------------------------------------- // Aba que lê o banco de análises (.jhonny/analises.db) já produzido pelo // Scanner e mostra/copiar os dois J-SOM: som (transcrição por cena) e