primocode 10.19.0 → 11.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSES/opencode-MIT.txt +24 -0
- package/LICENSES/pptxgenjs-MIT.txt +31 -0
- package/README.md +18 -5
- package/agentes/acessibilidade.md +10 -0
- package/agentes/algoritmos.md +10 -0
- package/agentes/ambiente.md +10 -0
- package/agentes/angular.md +10 -0
- package/agentes/animacao-web.md +10 -0
- package/agentes/anuncios.md +10 -0
- package/agentes/api.md +10 -0
- package/agentes/apresentacao.md +10 -0
- package/agentes/arquitetura.md +10 -0
- package/agentes/audio.md +10 -0
- package/agentes/auth.md +10 -0
- package/agentes/automacao.md +10 -0
- package/agentes/backend.md +10 -0
- package/agentes/bash.md +10 -0
- package/agentes/blockchain.md +10 -0
- package/agentes/brand.md +10 -0
- package/agentes/canvas.md +10 -0
- package/agentes/ci-cd.md +10 -0
- package/agentes/cloud.md +10 -0
- package/agentes/copy.md +10 -0
- package/agentes/cores.md +10 -0
- package/agentes/cpp.md +10 -0
- package/agentes/csharp.md +10 -0
- package/agentes/css-layout.md +10 -0
- package/agentes/dados-sql-analise.md +10 -0
- package/agentes/dados.md +10 -0
- package/agentes/depuracao.md +10 -0
- package/agentes/design-system.md +10 -0
- package/agentes/design.md +10 -0
- package/agentes/docker.md +10 -0
- package/agentes/docs.md +10 -0
- package/agentes/electron.md +10 -0
- package/agentes/email-mkt.md +10 -0
- package/agentes/extensao-chrome.md +10 -0
- package/agentes/filas.md +10 -0
- package/agentes/firebase.md +10 -0
- package/agentes/flutter.md +10 -0
- package/agentes/frontend.md +10 -0
- package/agentes/games.md +10 -0
- package/agentes/geral/capacidades/arquivos.json +132 -0
- package/agentes/geral/capacidades/backend.json +246 -0
- package/agentes/geral/capacidades/banco.json +186 -0
- package/agentes/geral/capacidades/codigo.json +708 -0
- package/agentes/geral/capacidades/dados.json +126 -0
- package/agentes/geral/capacidades/depuracao.json +696 -0
- package/agentes/geral/capacidades/design.json +246 -0
- package/agentes/geral/capacidades/devops.json +240 -0
- package/agentes/geral/capacidades/escrita.json +126 -0
- package/agentes/geral/capacidades/frontend.json +252 -0
- package/agentes/geral/capacidades/git.json +684 -0
- package/agentes/geral/capacidades/ia-llm.json +246 -0
- package/agentes/geral/capacidades/marketing.json +252 -0
- package/agentes/geral/capacidades/mobile.json +192 -0
- package/agentes/geral/capacidades/pesquisa.json +126 -0
- package/agentes/geral/capacidades/produto-negocio.json +186 -0
- package/agentes/geral/capacidades/seguranca.json +132 -0
- package/agentes/geral/capacidades/shell.json +654 -0
- package/agentes/geral/capacidades/testes.json +186 -0
- package/agentes/geral/capacidades/video-motion.json +246 -0
- package/agentes/geral/capacidades/web.json +126 -0
- package/agentes/geral/capacidades/windows-linux.json +216 -0
- package/agentes/git-pr.md +10 -0
- package/agentes/go.md +10 -0
- package/agentes/graphql.md +10 -0
- package/agentes/growth.md +10 -0
- package/agentes/ia-evals.md +10 -0
- package/agentes/ilustracao.md +10 -0
- package/agentes/indice.md +1 -0
- package/agentes/iot.md +10 -0
- package/agentes/java.md +10 -0
- package/agentes/javascript.md +10 -0
- package/agentes/juridico-basico.md +10 -0
- package/agentes/kotlin.md +10 -0
- package/agentes/kubernetes.md +10 -0
- package/agentes/landing.md +10 -0
- package/agentes/legado.md +10 -0
- package/agentes/linux.md +10 -0
- package/agentes/llm-prompts.md +10 -0
- package/agentes/mcp.md +10 -0
- package/agentes/ml.md +10 -0
- package/agentes/mongodb.md +10 -0
- package/agentes/motion.md +10 -0
- package/agentes/negocio.md +10 -0
- package/agentes/nextjs.md +10 -0
- package/agentes/node.md +10 -0
- package/agentes/observabilidade.md +10 -0
- package/agentes/orm.md +10 -0
- package/agentes/pagamentos.md +10 -0
- package/agentes/pentest.md +10 -0
- package/agentes/performance.md +10 -0
- package/agentes/pesquisa-usuario.md +10 -0
- package/agentes/pesquisa.md +10 -0
- package/agentes/php.md +10 -0
- package/agentes/planilhas.md +10 -0
- package/agentes/privacidade.md +10 -0
- package/agentes/produto.md +10 -0
- package/agentes/pwa.md +10 -0
- package/agentes/python.md +10 -0
- package/agentes/qa-manual.md +10 -0
- package/agentes/raspagem.md +10 -0
- package/agentes/react-native.md +10 -0
- package/agentes/react.md +10 -0
- package/agentes/rede.md +10 -0
- package/agentes/redis.md +10 -0
- package/agentes/refatoracao.md +10 -0
- package/agentes/regex.md +10 -0
- package/agentes/revisao-texto.md +10 -0
- package/agentes/revisor.md +10 -0
- package/agentes/ruby.md +10 -0
- package/agentes/rust.md +10 -0
- package/agentes/seguranca.md +10 -0
- package/agentes/seo.md +10 -0
- package/agentes/social.md +10 -0
- package/agentes/sql.md +10 -0
- package/agentes/svelte.md +10 -0
- package/agentes/swift.md +10 -0
- package/agentes/tailwind.md +10 -0
- package/agentes/testes-carga.md +10 -0
- package/agentes/testes-e2e.md +10 -0
- package/agentes/testes-unit.md +10 -0
- package/agentes/testes.md +10 -0
- package/agentes/thumbnails.md +10 -0
- package/agentes/tipografia.md +10 -0
- package/agentes/traducao.md +10 -0
- package/agentes/typescript.md +10 -0
- package/agentes/ui-mobile.md +10 -0
- package/agentes/ux.md +10 -0
- package/agentes/video-edicao.md +10 -0
- package/agentes/video-roteiro.md +10 -0
- package/agentes/visualizacao.md +10 -0
- package/agentes/vue.md +10 -0
- package/agentes/web3d.md +10 -0
- package/agentes/websocket.md +10 -0
- package/bin/primocode.js +3 -4152
- package/editor/helpers/camera_viva.py +28 -2
- package/editor/modelo-projeto/build.py +12 -4
- package/kits/KITS.md +4 -0
- package/lib/agentes/index.js +189 -0
- package/lib/agentes/nucleo.js +18 -0
- package/lib/agents-md.js +1 -1
- package/lib/app-chat.js +1 -1
- package/lib/backup-banco.js +1 -1
- package/lib/browser.js +7 -3
- package/lib/cli/boas-vindas.js +153 -0
- package/lib/cli/comando-api.js +85 -0
- package/lib/cli/comandos-extra.js +553 -0
- package/lib/cli/comandos.js +104 -0
- package/lib/cli/headless.js +102 -0
- package/lib/cli/review.js +64 -0
- package/lib/cli/sessao.js +4152 -0
- package/lib/cli/statusline.js +52 -0
- package/lib/cli/subcomandos.js +34 -0
- package/lib/cli/tentativas.js +107 -0
- package/lib/cli/util.js +51 -0
- package/lib/conferir.js +4 -4
- package/lib/config/config.js +414 -0
- package/lib/config/limites.js +100 -0
- package/lib/cursor.js +3 -3
- package/lib/diff.js +1 -1
- package/lib/effort.js +1 -1
- package/lib/entrega.js +1 -1
- package/lib/escopo.js +1 -1
- package/lib/explicar.js +1 -1
- package/lib/fala.js +2 -2
- package/lib/fundo.js +34 -1
- package/lib/guardar.js +2 -2
- package/lib/mcp/mcp.js +819 -0
- package/lib/memoria-usuario.js +1 -1
- package/lib/mudou.js +1 -1
- package/lib/nome-projeto.js +1 -1
- package/lib/nomes.js +6 -0
- package/lib/nuvem.js +2 -2
- package/lib/permission/perigo.js +401 -0
- package/lib/permission/permissao.js +137 -0
- package/lib/permission/sandbox.js +252 -0
- package/lib/placar.js +173 -0
- package/lib/plano-previo.js +1 -1
- package/lib/plugin/auto-preview.js +71 -0
- package/lib/plugin/autoteste.js +100 -0
- package/lib/plugin/desktop.js +756 -0
- package/lib/plugin/edicao-visual.js +133 -0
- package/lib/plugin/editor-pro-maquina.js +355 -0
- package/lib/plugin/editor-pro.js +1022 -0
- package/lib/plugin/entregaveis/carrossel.js +93 -0
- package/lib/plugin/entregaveis/cartaz.js +112 -0
- package/lib/plugin/entregaveis/cli.js +36 -0
- package/lib/plugin/entregaveis/documento.js +169 -0
- package/lib/plugin/entregaveis/especialistas.js +72 -0
- package/lib/plugin/entregaveis/nucleo.js +243 -0
- package/lib/plugin/entregaveis/slides.js +232 -0
- package/lib/plugin/estudio/acervo.js +418 -0
- package/lib/plugin/estudio/assets.js +497 -0
- package/lib/plugin/estudio/assinatura.js +108 -0
- package/lib/plugin/estudio/conferencia-visual.js +76 -0
- package/lib/plugin/estudio/conferir-quadros.js +56 -0
- package/lib/plugin/estudio/cota.js +157 -0
- package/lib/plugin/estudio/diretor.js +392 -0
- package/lib/plugin/estudio/editor.js +290 -0
- package/lib/plugin/estudio/gosto-descrever.js +87 -0
- package/lib/plugin/estudio/gosto.js +608 -0
- package/lib/plugin/estudio/identidade.js +560 -0
- package/lib/plugin/estudio/index.js +2712 -0
- package/lib/plugin/estudio/kit.js +91 -0
- package/lib/plugin/estudio/kits-tela.js +199 -0
- package/lib/plugin/estudio/kokoro.js +127 -0
- package/lib/plugin/estudio/maquina-foto.js +177 -0
- package/lib/plugin/estudio/maquina-trilha.js +199 -0
- package/lib/plugin/estudio/maquina-voz.js +429 -0
- package/lib/plugin/estudio/marca.js +398 -0
- package/lib/plugin/estudio/materiais.js +218 -0
- package/lib/plugin/estudio/morfar.js +191 -0
- package/lib/plugin/estudio/print-site.js +341 -0
- package/lib/plugin/estudio/projeto.js +340 -0
- package/lib/plugin/estudio/projetos.js +72 -0
- package/lib/plugin/kits-parecidos.js +99 -0
- package/lib/plugin/kits.js +585 -0
- package/lib/plugin/marca-kit.js +312 -0
- package/lib/plugin/motioncraft.js +67 -0
- package/lib/plugin/pesquisar.js +95 -0
- package/lib/plugin/preview-cli.js +38 -0
- package/lib/plugin/preview.js +89 -0
- package/lib/plugin/tunel.js +27 -0
- package/lib/plugin/video/analise.js +89 -0
- package/lib/plugin/video/projeto.js +133 -0
- package/lib/plugin/video/rastrear.js +95 -0
- package/lib/plugin/video/render.js +274 -0
- package/lib/plugin/video/transcript.js +124 -0
- package/lib/plugin/voz-ponte.js +15 -0
- package/lib/plugin/voz.js +532 -0
- package/lib/porta.js +4 -4
- package/lib/pre-leitura.js +2 -2
- package/lib/preparar.js +11 -11
- package/lib/provider/api.js +310 -0
- package/lib/provider/claude-engine.js +673 -0
- package/lib/provider/codex-engine.js +225 -0
- package/lib/provider/local/motor-cli.js +93 -0
- package/lib/provider/local/motor.js +267 -0
- package/lib/provider/local/provedor.js +169 -0
- package/lib/publicar.js +2 -2
- package/lib/registro.js +2 -2
- package/lib/repeticao.js +2 -2
- package/lib/review.js +134 -0
- package/lib/segredos.js +2 -2
- package/lib/session/checkpoint-git.js +221 -0
- package/lib/session/checkpoint.js +366 -0
- package/lib/session/compactacao.js +124 -0
- package/lib/session/exportar-conversa.js +49 -0
- package/lib/session/linha-do-tempo.js +130 -0
- package/lib/session/runner/act.js +2522 -0
- package/lib/skill/catalogo.js +367 -0
- package/lib/skill/marketplace.js +189 -0
- package/lib/skill/skills.js +468 -0
- package/lib/team.js +4 -4
- package/lib/tool/diagnostico.js +111 -0
- package/lib/tool/lsp.js +211 -0
- package/lib/tool/perguntar.js +114 -0
- package/lib/tool/reparar-entrada.js +66 -0
- package/lib/tool/tools.js +1095 -0
- package/lib/tool/web.js +102 -0
- package/lib/trava.js +1 -1
- package/lib/travado.js +1 -1
- package/lib/tui/entrada.js +1031 -0
- package/lib/tui/tela.js +245 -0
- package/lib/tui/ui.js +763 -0
- package/materiais/adesivos/base.ts +101 -0
- package/materiais/adesivos/camera/CameraDeriva.tsx +37 -0
- package/materiais/adesivos/cores/paleta.json +30 -0
- package/materiais/adesivos/cores/paleta.png +0 -0
- package/materiais/adesivos/formas/AdesivoForma.tsx +42 -0
- package/materiais/adesivos/formas/AdesivoFoto.tsx +36 -0
- package/materiais/adesivos/formas/SeloPreco.tsx +38 -0
- package/materiais/adesivos/pecas.json +496 -0
- package/materiais/adesivos/referencia/analise.md +85 -0
- package/materiais/adesivos/referencia/quadro-1.png +0 -0
- package/materiais/adesivos/referencia/quadro-2.png +0 -0
- package/materiais/adesivos/referencia/quadro-3.png +0 -0
- package/materiais/adesivos/referencia/quadro-4.png +0 -0
- package/materiais/adesivos/referencia/referencia.mp4 +0 -0
- package/materiais/adesivos/regras.md +138 -0
- package/materiais/adesivos/sons/Som.tsx +33 -0
- package/materiais/adesivos/texturas/ChuvaDeAdesivos.tsx +29 -0
- package/materiais/adesivos/texturas/Fundo.tsx +21 -0
- package/materiais/adesivos/texturas/Particulas.tsx +22 -0
- package/materiais/adesivos/tipografia/AdesivoTexto.tsx +35 -0
- package/materiais/adesivos/tipografia/AssinaturaMarca.tsx +36 -0
- package/materiais/adesivos/tipografia/TituloEtiquetas.tsx +33 -0
- package/materiais/adesivos/transicoes/Cena.tsx +48 -0
- package/materiais/adesivos/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/antes-depois/base.ts +82 -0
- package/materiais/antes-depois/camera/CameraDeriva.tsx +37 -0
- package/materiais/antes-depois/cores/paleta.json +28 -0
- package/materiais/antes-depois/cores/paleta.png +0 -0
- package/materiais/antes-depois/formas/BarraMedidor.tsx +43 -0
- package/materiais/antes-depois/formas/FaixaMarquee.tsx +35 -0
- package/materiais/antes-depois/formas/ListaMudancas.tsx +37 -0
- package/materiais/antes-depois/formas/RotuloAntesDepois.tsx +26 -0
- package/materiais/antes-depois/formas/TelaDividida.tsx +68 -0
- package/materiais/antes-depois/pecas.json +520 -0
- package/materiais/antes-depois/referencia/analise.md +85 -0
- package/materiais/antes-depois/referencia/quadro-1.png +0 -0
- package/materiais/antes-depois/referencia/quadro-2.png +0 -0
- package/materiais/antes-depois/referencia/quadro-3.png +0 -0
- package/materiais/antes-depois/referencia/quadro-4.png +0 -0
- package/materiais/antes-depois/referencia/referencia.mp4 +0 -0
- package/materiais/antes-depois/regras.md +141 -0
- package/materiais/antes-depois/sons/Som.tsx +40 -0
- package/materiais/antes-depois/texturas/Fundo.tsx +24 -0
- package/materiais/antes-depois/texturas/Particulas.tsx +22 -0
- package/materiais/antes-depois/tipografia/NumeroDelta.tsx +36 -0
- package/materiais/antes-depois/transicoes/Cena.tsx +41 -0
- package/materiais/antes-depois/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/apple-tipografico/base.ts +111 -0
- package/materiais/apple-tipografico/camera/Camera.tsx +23 -0
- package/materiais/apple-tipografico/camera/CameraDeriva.tsx +37 -0
- package/materiais/apple-tipografico/cores/paleta.json +21 -0
- package/materiais/apple-tipografico/cores/paleta.png +0 -0
- package/materiais/apple-tipografico/formas/CartaoRadial.tsx +41 -0
- package/materiais/apple-tipografico/formas/Produto3D.tsx +126 -0
- package/materiais/apple-tipografico/formas/ProdutoFoto.tsx +47 -0
- package/materiais/apple-tipografico/lib/produto3d-apoio.ts +22 -0
- package/materiais/apple-tipografico/pecas.json +491 -0
- package/materiais/apple-tipografico/referencia/analise.md +87 -0
- package/materiais/apple-tipografico/referencia/quadro-1.png +0 -0
- package/materiais/apple-tipografico/referencia/quadro-2.png +0 -0
- package/materiais/apple-tipografico/referencia/quadro-3.png +0 -0
- package/materiais/apple-tipografico/referencia/quadro-4.png +0 -0
- package/materiais/apple-tipografico/referencia/referencia.mp4 +0 -0
- package/materiais/apple-tipografico/regras.md +171 -0
- package/materiais/apple-tipografico/sons/Som.tsx +40 -0
- package/materiais/apple-tipografico/texturas/Fundo.tsx +21 -0
- package/materiais/apple-tipografico/texturas/Particulas.tsx +22 -0
- package/materiais/apple-tipografico/tipografia/AssinaturaPreta.tsx +33 -0
- package/materiais/apple-tipografico/tipografia/LegendaCurta.tsx +51 -0
- package/materiais/apple-tipografico/transicoes/Cena.tsx +55 -0
- package/materiais/apple-tipografico/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/aquarela/base.ts +97 -0
- package/materiais/aquarela/camera/CameraDeriva.tsx +37 -0
- package/materiais/aquarela/cores/paleta.json +30 -0
- package/materiais/aquarela/cores/paleta.png +0 -0
- package/materiais/aquarela/formas/AnotacaoManual.tsx +40 -0
- package/materiais/aquarela/formas/ManchaTinta.tsx +46 -0
- package/materiais/aquarela/formas/Pincelada.tsx +43 -0
- package/materiais/aquarela/formas/Pingos.tsx +31 -0
- package/materiais/aquarela/pecas.json +498 -0
- package/materiais/aquarela/referencia/analise.md +87 -0
- package/materiais/aquarela/referencia/quadro-1.png +0 -0
- package/materiais/aquarela/referencia/quadro-2.png +0 -0
- package/materiais/aquarela/referencia/quadro-3.png +0 -0
- package/materiais/aquarela/referencia/quadro-4.png +0 -0
- package/materiais/aquarela/referencia/referencia.mp4 +0 -0
- package/materiais/aquarela/regras.md +141 -0
- package/materiais/aquarela/sons/Som.tsx +33 -0
- package/materiais/aquarela/texturas/Fundo.tsx +24 -0
- package/materiais/aquarela/texturas/PapelRasgado.tsx +50 -0
- package/materiais/aquarela/texturas/Particulas.tsx +22 -0
- package/materiais/aquarela/tipografia/AssinaturaMarca.tsx +33 -0
- package/materiais/aquarela/tipografia/TituloPincel.tsx +51 -0
- package/materiais/aquarela/transicoes/Cena.tsx +48 -0
- package/materiais/aquarela/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/aurora/base.ts +93 -0
- package/materiais/aurora/camera/CameraDeriva.tsx +37 -0
- package/materiais/aurora/cores/paleta.json +30 -0
- package/materiais/aurora/cores/paleta.png +0 -0
- package/materiais/aurora/formas/CartaoVidro.tsx +29 -0
- package/materiais/aurora/formas/CeuEstrelado.tsx +22 -0
- package/materiais/aurora/formas/Montanhas.tsx +24 -0
- package/materiais/aurora/pecas.json +485 -0
- package/materiais/aurora/referencia/analise.md +84 -0
- package/materiais/aurora/referencia/quadro-1.png +0 -0
- package/materiais/aurora/referencia/quadro-2.png +0 -0
- package/materiais/aurora/referencia/quadro-3.png +0 -0
- package/materiais/aurora/referencia/quadro-4.png +0 -0
- package/materiais/aurora/referencia/referencia.mp4 +0 -0
- package/materiais/aurora/regras.md +140 -0
- package/materiais/aurora/sons/Som.tsx +33 -0
- package/materiais/aurora/texturas/Fundo.tsx +35 -0
- package/materiais/aurora/texturas/Particulas.tsx +22 -0
- package/materiais/aurora/tipografia/AssinaturaMarca.tsx +24 -0
- package/materiais/aurora/tipografia/Legenda.tsx +23 -0
- package/materiais/aurora/tipografia/TituloSerif.tsx +36 -0
- package/materiais/aurora/transicoes/Cena.tsx +48 -0
- package/materiais/aurora/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/aurora/transicoes/CortinaDeLuz.tsx +36 -0
- package/materiais/bauhaus/base.ts +74 -0
- package/materiais/bauhaus/camera/Camera.tsx +21 -0
- package/materiais/bauhaus/camera/CameraDeriva.tsx +37 -0
- package/materiais/bauhaus/cores/paleta.json +27 -0
- package/materiais/bauhaus/cores/paleta.png +0 -0
- package/materiais/bauhaus/formas/BarraDiagonal.tsx +20 -0
- package/materiais/bauhaus/formas/ComposicaoGeometrica.tsx +54 -0
- package/materiais/bauhaus/formas/ListaFaixas.tsx +27 -0
- package/materiais/bauhaus/formas/Overlay.tsx +18 -0
- package/materiais/bauhaus/pecas.json +520 -0
- package/materiais/bauhaus/referencia/analise.md +81 -0
- package/materiais/bauhaus/referencia/quadro-1.png +0 -0
- package/materiais/bauhaus/referencia/quadro-2.png +0 -0
- package/materiais/bauhaus/referencia/quadro-3.png +0 -0
- package/materiais/bauhaus/referencia/quadro-4.png +0 -0
- package/materiais/bauhaus/referencia/referencia.mp4 +0 -0
- package/materiais/bauhaus/regras.md +127 -0
- package/materiais/bauhaus/sons/Som.tsx +30 -0
- package/materiais/bauhaus/texturas/Fundo.tsx +13 -0
- package/materiais/bauhaus/texturas/Particulas.tsx +22 -0
- package/materiais/bauhaus/tipografia/AssinaturaMarca.tsx +26 -0
- package/materiais/bauhaus/tipografia/NumeroBauhaus.tsx +21 -0
- package/materiais/bauhaus/tipografia/TituloBauhaus.tsx +32 -0
- package/materiais/bauhaus/transicoes/Cena.tsx +36 -0
- package/materiais/bauhaus/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/brutalista/base.ts +71 -0
- package/materiais/brutalista/camera/CameraDeriva.tsx +37 -0
- package/materiais/brutalista/cores/paleta.json +25 -0
- package/materiais/brutalista/cores/paleta.png +0 -0
- package/materiais/brutalista/formas/BlocoSombra.tsx +18 -0
- package/materiais/brutalista/formas/CartaoFotoBruto.tsx +19 -0
- package/materiais/brutalista/formas/FitaAlerta.tsx +20 -0
- package/materiais/brutalista/formas/ListaBruta.tsx +23 -0
- package/materiais/brutalista/formas/MonoEnorme.tsx +43 -0
- package/materiais/brutalista/formas/QuadroCor.tsx +14 -0
- package/materiais/brutalista/formas/Terminal.tsx +25 -0
- package/materiais/brutalista/pecas.json +559 -0
- package/materiais/brutalista/referencia/analise.md +81 -0
- package/materiais/brutalista/referencia/quadro-1.png +0 -0
- package/materiais/brutalista/referencia/quadro-2.png +0 -0
- package/materiais/brutalista/referencia/quadro-3.png +0 -0
- package/materiais/brutalista/referencia/quadro-4.png +0 -0
- package/materiais/brutalista/referencia/referencia.mp4 +0 -0
- package/materiais/brutalista/regras.md +128 -0
- package/materiais/brutalista/sons/Som.tsx +38 -0
- package/materiais/brutalista/texturas/Fundo.tsx +9 -0
- package/materiais/brutalista/texturas/Particulas.tsx +22 -0
- package/materiais/brutalista/tipografia/AssinaturaMarca.tsx +21 -0
- package/materiais/brutalista/tipografia/ContadorGrande.tsx +21 -0
- package/materiais/brutalista/transicoes/Cena.tsx +41 -0
- package/materiais/brutalista/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/campos-de-cor/base.ts +87 -0
- package/materiais/campos-de-cor/camera/Camera.tsx +23 -0
- package/materiais/campos-de-cor/camera/CameraDeriva.tsx +37 -0
- package/materiais/campos-de-cor/cores/paleta.json +25 -0
- package/materiais/campos-de-cor/cores/paleta.png +0 -0
- package/materiais/campos-de-cor/formas/Asterisco.tsx +26 -0
- package/materiais/campos-de-cor/formas/CampoDeCor.tsx +39 -0
- package/materiais/campos-de-cor/formas/FormaGeometrica.tsx +37 -0
- package/materiais/campos-de-cor/formas/ListaRegua.tsx +30 -0
- package/materiais/campos-de-cor/pecas.json +534 -0
- package/materiais/campos-de-cor/referencia/analise.md +81 -0
- package/materiais/campos-de-cor/referencia/quadro-1.png +0 -0
- package/materiais/campos-de-cor/referencia/quadro-2.png +0 -0
- package/materiais/campos-de-cor/referencia/quadro-3.png +0 -0
- package/materiais/campos-de-cor/referencia/quadro-4.png +0 -0
- package/materiais/campos-de-cor/referencia/referencia.mp4 +0 -0
- package/materiais/campos-de-cor/regras.md +125 -0
- package/materiais/campos-de-cor/sons/Som.tsx +39 -0
- package/materiais/campos-de-cor/texturas/Fundo.tsx +11 -0
- package/materiais/campos-de-cor/texturas/Particulas.tsx +22 -0
- package/materiais/campos-de-cor/tipografia/AssinaturaMarca.tsx +18 -0
- package/materiais/campos-de-cor/tipografia/FitaDeTexto.tsx +24 -0
- package/materiais/campos-de-cor/tipografia/LegendaItalica.tsx +12 -0
- package/materiais/campos-de-cor/tipografia/PalavraGigante.tsx +44 -0
- package/materiais/campos-de-cor/transicoes/Cena.tsx +46 -0
- package/materiais/campos-de-cor/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/cartaz-cinetico/base.ts +72 -0
- package/materiais/cartaz-cinetico/camera/CameraDeriva.tsx +37 -0
- package/materiais/cartaz-cinetico/cores/paleta.json +26 -0
- package/materiais/cartaz-cinetico/cores/paleta.png +0 -0
- package/materiais/cartaz-cinetico/formas/CirculoPoster.tsx +22 -0
- package/materiais/cartaz-cinetico/formas/PilhaCartaz.tsx +40 -0
- package/materiais/cartaz-cinetico/formas/Selo.tsx +25 -0
- package/materiais/cartaz-cinetico/pecas.json +524 -0
- package/materiais/cartaz-cinetico/referencia/analise.md +83 -0
- package/materiais/cartaz-cinetico/referencia/quadro-1.png +0 -0
- package/materiais/cartaz-cinetico/referencia/quadro-2.png +0 -0
- package/materiais/cartaz-cinetico/referencia/quadro-3.png +0 -0
- package/materiais/cartaz-cinetico/referencia/quadro-4.png +0 -0
- package/materiais/cartaz-cinetico/referencia/referencia.mp4 +0 -0
- package/materiais/cartaz-cinetico/regras.md +131 -0
- package/materiais/cartaz-cinetico/sons/Som.tsx +38 -0
- package/materiais/cartaz-cinetico/texturas/Fundo.tsx +16 -0
- package/materiais/cartaz-cinetico/texturas/Particulas.tsx +22 -0
- package/materiais/cartaz-cinetico/tipografia/AssinaturaMarca.tsx +31 -0
- package/materiais/cartaz-cinetico/tipografia/CartazPalavra.tsx +40 -0
- package/materiais/cartaz-cinetico/tipografia/EcoPalavra.tsx +27 -0
- package/materiais/cartaz-cinetico/tipografia/RoletaPalavras.tsx +30 -0
- package/materiais/cartaz-cinetico/transicoes/Cena.tsx +41 -0
- package/materiais/cartaz-cinetico/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/colagem/base.ts +77 -0
- package/materiais/colagem/camera/Camera.tsx +21 -0
- package/materiais/colagem/camera/CameraDeriva.tsx +37 -0
- package/materiais/colagem/cores/paleta.json +30 -0
- package/materiais/colagem/cores/paleta.png +0 -0
- package/materiais/colagem/formas/FitaAdesiva.tsx +11 -0
- package/materiais/colagem/formas/FotoRasgada.tsx +26 -0
- package/materiais/colagem/formas/ListaRecortes.tsx +23 -0
- package/materiais/colagem/formas/NotaDatilografada.tsx +35 -0
- package/materiais/colagem/formas/RecorteForma.tsx +23 -0
- package/materiais/colagem/lib/rasgado.ts +16 -0
- package/materiais/colagem/pecas.json +547 -0
- package/materiais/colagem/referencia/analise.md +82 -0
- package/materiais/colagem/referencia/quadro-1.png +0 -0
- package/materiais/colagem/referencia/quadro-2.png +0 -0
- package/materiais/colagem/referencia/quadro-3.png +0 -0
- package/materiais/colagem/referencia/quadro-4.png +0 -0
- package/materiais/colagem/referencia/referencia.mp4 +0 -0
- package/materiais/colagem/regras.md +129 -0
- package/materiais/colagem/sons/Som.tsx +30 -0
- package/materiais/colagem/texturas/Fundo.tsx +16 -0
- package/materiais/colagem/texturas/Particulas.tsx +22 -0
- package/materiais/colagem/tipografia/AssinaturaMarca.tsx +17 -0
- package/materiais/colagem/tipografia/TituloRecorte.tsx +34 -0
- package/materiais/colagem/transicoes/Cena.tsx +36 -0
- package/materiais/colagem/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/contagem/base.ts +79 -0
- package/materiais/contagem/camera/CameraDeriva.tsx +37 -0
- package/materiais/contagem/cores/paleta.json +27 -0
- package/materiais/contagem/cores/paleta.png +0 -0
- package/materiais/contagem/formas/AnelTempo.tsx +36 -0
- package/materiais/contagem/formas/BarraDias.tsx +41 -0
- package/materiais/contagem/formas/CarimboData.tsx +37 -0
- package/materiais/contagem/formas/RelogioFlip.tsx +51 -0
- package/materiais/contagem/pecas.json +509 -0
- package/materiais/contagem/referencia/analise.md +85 -0
- package/materiais/contagem/referencia/quadro-1.png +0 -0
- package/materiais/contagem/referencia/quadro-2.png +0 -0
- package/materiais/contagem/referencia/quadro-3.png +0 -0
- package/materiais/contagem/referencia/quadro-4.png +0 -0
- package/materiais/contagem/referencia/referencia.mp4 +0 -0
- package/materiais/contagem/regras.md +134 -0
- package/materiais/contagem/sons/Som.tsx +41 -0
- package/materiais/contagem/texturas/Fundo.tsx +27 -0
- package/materiais/contagem/texturas/Particulas.tsx +22 -0
- package/materiais/contagem/tipografia/NumeroRolando.tsx +49 -0
- package/materiais/contagem/transicoes/Cena.tsx +39 -0
- package/materiais/contagem/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/convite-evento/base.ts +82 -0
- package/materiais/convite-evento/camera/CameraDeriva.tsx +37 -0
- package/materiais/convite-evento/cores/paleta.json +27 -0
- package/materiais/convite-evento/cores/paleta.png +0 -0
- package/materiais/convite-evento/formas/BotaoInscricao.tsx +36 -0
- package/materiais/convite-evento/formas/DataGigante.tsx +37 -0
- package/materiais/convite-evento/formas/IngressoBilhete.tsx +40 -0
- package/materiais/convite-evento/formas/LugarGigante.tsx +38 -0
- package/materiais/convite-evento/formas/SeloRotativo.tsx +32 -0
- package/materiais/convite-evento/pecas.json +511 -0
- package/materiais/convite-evento/referencia/analise.md +84 -0
- package/materiais/convite-evento/referencia/quadro-1.png +0 -0
- package/materiais/convite-evento/referencia/quadro-2.png +0 -0
- package/materiais/convite-evento/referencia/quadro-3.png +0 -0
- package/materiais/convite-evento/referencia/quadro-4.png +0 -0
- package/materiais/convite-evento/referencia/referencia.mp4 +0 -0
- package/materiais/convite-evento/regras.md +135 -0
- package/materiais/convite-evento/sons/Som.tsx +40 -0
- package/materiais/convite-evento/texturas/Fundo.tsx +30 -0
- package/materiais/convite-evento/texturas/Particulas.tsx +22 -0
- package/materiais/convite-evento/tipografia/TituloEvento.tsx +33 -0
- package/materiais/convite-evento/transicoes/Cena.tsx +39 -0
- package/materiais/convite-evento/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/corte-podcast/base.ts +82 -0
- package/materiais/corte-podcast/camera/CameraDeriva.tsx +37 -0
- package/materiais/corte-podcast/cores/paleta.json +28 -0
- package/materiais/corte-podcast/cores/paleta.png +0 -0
- package/materiais/corte-podcast/formas/BarraEpisodio.tsx +43 -0
- package/materiais/corte-podcast/formas/CartaoConvidado.tsx +32 -0
- package/materiais/corte-podcast/formas/OndaAudio.tsx +41 -0
- package/materiais/corte-podcast/formas/SeloEpisodio.tsx +33 -0
- package/materiais/corte-podcast/pecas.json +516 -0
- package/materiais/corte-podcast/referencia/analise.md +84 -0
- package/materiais/corte-podcast/referencia/quadro-1.png +0 -0
- package/materiais/corte-podcast/referencia/quadro-2.png +0 -0
- package/materiais/corte-podcast/referencia/quadro-3.png +0 -0
- package/materiais/corte-podcast/referencia/quadro-4.png +0 -0
- package/materiais/corte-podcast/referencia/referencia.mp4 +0 -0
- package/materiais/corte-podcast/regras.md +132 -0
- package/materiais/corte-podcast/sons/Som.tsx +40 -0
- package/materiais/corte-podcast/texturas/Fundo.tsx +27 -0
- package/materiais/corte-podcast/texturas/Particulas.tsx +22 -0
- package/materiais/corte-podcast/tipografia/CitacaoGrande.tsx +42 -0
- package/materiais/corte-podcast/tipografia/LegendaKaraoke.tsx +32 -0
- package/materiais/corte-podcast/transicoes/Cena.tsx +41 -0
- package/materiais/corte-podcast/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/cubos/base.ts +97 -0
- package/materiais/cubos/camera/CameraDeriva.tsx +37 -0
- package/materiais/cubos/cores/paleta.json +29 -0
- package/materiais/cubos/cores/paleta.png +0 -0
- package/materiais/cubos/formas/Cubo.tsx +40 -0
- package/materiais/cubos/formas/CuboGiratorio.tsx +37 -0
- package/materiais/cubos/formas/MontagemDeCubos.tsx +58 -0
- package/materiais/cubos/formas/PlacaBloco.tsx +29 -0
- package/materiais/cubos/formas/TorreDeCubos.tsx +39 -0
- package/materiais/cubos/pecas.json +477 -0
- package/materiais/cubos/referencia/analise.md +83 -0
- package/materiais/cubos/referencia/quadro-1.png +0 -0
- package/materiais/cubos/referencia/quadro-2.png +0 -0
- package/materiais/cubos/referencia/quadro-3.png +0 -0
- package/materiais/cubos/referencia/quadro-4.png +0 -0
- package/materiais/cubos/referencia/referencia.mp4 +0 -0
- package/materiais/cubos/regras.md +136 -0
- package/materiais/cubos/sons/Som.tsx +33 -0
- package/materiais/cubos/texturas/Fundo.tsx +15 -0
- package/materiais/cubos/texturas/Particulas.tsx +22 -0
- package/materiais/cubos/tipografia/AssinaturaMarca.tsx +29 -0
- package/materiais/cubos/transicoes/Cena.tsx +48 -0
- package/materiais/cubos/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/dashboard-dados/base.ts +87 -0
- package/materiais/dashboard-dados/camera/Camera.tsx +23 -0
- package/materiais/dashboard-dados/camera/CameraDeriva.tsx +37 -0
- package/materiais/dashboard-dados/cores/paleta.json +30 -0
- package/materiais/dashboard-dados/cores/paleta.png +0 -0
- package/materiais/dashboard-dados/formas/BarrasCrescendo.tsx +27 -0
- package/materiais/dashboard-dados/formas/LinhaTendencia.tsx +29 -0
- package/materiais/dashboard-dados/formas/RankingBarras.tsx +27 -0
- package/materiais/dashboard-dados/formas/RoscaDados.tsx +39 -0
- package/materiais/dashboard-dados/pecas.json +490 -0
- package/materiais/dashboard-dados/referencia/analise.md +84 -0
- package/materiais/dashboard-dados/referencia/quadro-1.png +0 -0
- package/materiais/dashboard-dados/referencia/quadro-2.png +0 -0
- package/materiais/dashboard-dados/referencia/quadro-3.png +0 -0
- package/materiais/dashboard-dados/referencia/quadro-4.png +0 -0
- package/materiais/dashboard-dados/referencia/referencia.mp4 +0 -0
- package/materiais/dashboard-dados/regras.md +130 -0
- package/materiais/dashboard-dados/sons/Som.tsx +39 -0
- package/materiais/dashboard-dados/texturas/Fundo.tsx +12 -0
- package/materiais/dashboard-dados/texturas/Particulas.tsx +22 -0
- package/materiais/dashboard-dados/tipografia/AssinaturaMarca.tsx +19 -0
- package/materiais/dashboard-dados/tipografia/NumeroGigante.tsx +21 -0
- package/materiais/dashboard-dados/transicoes/Cena.tsx +46 -0
- package/materiais/dashboard-dados/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/depoimento/base.ts +83 -0
- package/materiais/depoimento/camera/CameraDeriva.tsx +37 -0
- package/materiais/depoimento/cores/paleta.json +29 -0
- package/materiais/depoimento/cores/paleta.png +0 -0
- package/materiais/depoimento/formas/Avatar.tsx +37 -0
- package/materiais/depoimento/formas/CartaoDepoimento.tsx +69 -0
- package/materiais/depoimento/formas/FaixaAvatares.tsx +41 -0
- package/materiais/depoimento/formas/NotaGigante.tsx +38 -0
- package/materiais/depoimento/formas/PilhaCartoes.tsx +37 -0
- package/materiais/depoimento/formas/SeloVerificado.tsx +29 -0
- package/materiais/depoimento/pecas.json +548 -0
- package/materiais/depoimento/referencia/analise.md +84 -0
- package/materiais/depoimento/referencia/quadro-1.png +0 -0
- package/materiais/depoimento/referencia/quadro-2.png +0 -0
- package/materiais/depoimento/referencia/quadro-3.png +0 -0
- package/materiais/depoimento/referencia/quadro-4.png +0 -0
- package/materiais/depoimento/referencia/referencia.mp4 +0 -0
- package/materiais/depoimento/regras.md +135 -0
- package/materiais/depoimento/sons/Som.tsx +41 -0
- package/materiais/depoimento/texturas/Estrelas.tsx +34 -0
- package/materiais/depoimento/texturas/Fundo.tsx +23 -0
- package/materiais/depoimento/texturas/Particulas.tsx +22 -0
- package/materiais/depoimento/transicoes/Cena.tsx +39 -0
- package/materiais/depoimento/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/infografico/base.ts +80 -0
- package/materiais/infografico/camera/CameraDeriva.tsx +37 -0
- package/materiais/infografico/cores/paleta.json +28 -0
- package/materiais/infografico/cores/paleta.png +0 -0
- package/materiais/infografico/formas/Anotacao.tsx +34 -0
- package/materiais/infografico/formas/CadeiaPassos.tsx +49 -0
- package/materiais/infografico/formas/GraficoBarras.tsx +41 -0
- package/materiais/infografico/formas/Icone.tsx +35 -0
- package/materiais/infografico/formas/NoProcesso.tsx +33 -0
- package/materiais/infografico/formas/SetaCurva.tsx +33 -0
- package/materiais/infografico/pecas.json +540 -0
- package/materiais/infografico/referencia/analise.md +84 -0
- package/materiais/infografico/referencia/quadro-1.png +0 -0
- package/materiais/infografico/referencia/quadro-2.png +0 -0
- package/materiais/infografico/referencia/quadro-3.png +0 -0
- package/materiais/infografico/referencia/quadro-4.png +0 -0
- package/materiais/infografico/referencia/referencia.mp4 +0 -0
- package/materiais/infografico/regras.md +132 -0
- package/materiais/infografico/sons/Som.tsx +40 -0
- package/materiais/infografico/texturas/Fundo.tsx +23 -0
- package/materiais/infografico/texturas/Particulas.tsx +22 -0
- package/materiais/infografico/tipografia/NumeroDestaque.tsx +35 -0
- package/materiais/infografico/transicoes/Cena.tsx +39 -0
- package/materiais/infografico/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/isometrico/base.ts +86 -0
- package/materiais/isometrico/camera/Camera.tsx +23 -0
- package/materiais/isometrico/camera/CameraDeriva.tsx +37 -0
- package/materiais/isometrico/cores/paleta.json +29 -0
- package/materiais/isometrico/cores/paleta.png +0 -0
- package/materiais/isometrico/formas/BlocosMontando.tsx +36 -0
- package/materiais/isometrico/formas/CidadeDeDados.tsx +33 -0
- package/materiais/isometrico/formas/RedeDeBlocos.tsx +41 -0
- package/materiais/isometrico/pecas.json +503 -0
- package/materiais/isometrico/referencia/analise.md +83 -0
- package/materiais/isometrico/referencia/quadro-1.png +0 -0
- package/materiais/isometrico/referencia/quadro-2.png +0 -0
- package/materiais/isometrico/referencia/quadro-3.png +0 -0
- package/materiais/isometrico/referencia/quadro-4.png +0 -0
- package/materiais/isometrico/referencia/referencia.mp4 +0 -0
- package/materiais/isometrico/regras.md +125 -0
- package/materiais/isometrico/sons/Som.tsx +39 -0
- package/materiais/isometrico/texturas/Fundo.tsx +13 -0
- package/materiais/isometrico/texturas/Particulas.tsx +22 -0
- package/materiais/isometrico/tipografia/AssinaturaMarca.tsx +24 -0
- package/materiais/isometrico/tipografia/LegendaPlaca.tsx +18 -0
- package/materiais/isometrico/tipografia/TextoNoChao.tsx +28 -0
- package/materiais/isometrico/transicoes/Cena.tsx +46 -0
- package/materiais/isometrico/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/jornal/base.ts +76 -0
- package/materiais/jornal/camera/CameraDeriva.tsx +37 -0
- package/materiais/jornal/cores/paleta.json +27 -0
- package/materiais/jornal/cores/paleta.png +0 -0
- package/materiais/jornal/formas/Cabecalho.tsx +21 -0
- package/materiais/jornal/formas/Carimbo.tsx +18 -0
- package/materiais/jornal/formas/Colunas.tsx +24 -0
- package/materiais/jornal/formas/FotoMeiaTinta.tsx +20 -0
- package/materiais/jornal/formas/JornalGirando.tsx +27 -0
- package/materiais/jornal/formas/Ticker.tsx +19 -0
- package/materiais/jornal/pecas.json +535 -0
- package/materiais/jornal/referencia/analise.md +81 -0
- package/materiais/jornal/referencia/quadro-1.png +0 -0
- package/materiais/jornal/referencia/quadro-2.png +0 -0
- package/materiais/jornal/referencia/quadro-3.png +0 -0
- package/materiais/jornal/referencia/quadro-4.png +0 -0
- package/materiais/jornal/referencia/referencia.mp4 +0 -0
- package/materiais/jornal/regras.md +131 -0
- package/materiais/jornal/sons/Som.tsx +38 -0
- package/materiais/jornal/texturas/Fundo.tsx +18 -0
- package/materiais/jornal/texturas/Particulas.tsx +22 -0
- package/materiais/jornal/tipografia/AssinaturaMarca.tsx +25 -0
- package/materiais/jornal/tipografia/Manchete.tsx +30 -0
- package/materiais/jornal/transicoes/Cena.tsx +41 -0
- package/materiais/jornal/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/legenda-viva/base.ts +73 -0
- package/materiais/legenda-viva/camera/CameraDeriva.tsx +37 -0
- package/materiais/legenda-viva/cores/paleta.json +27 -0
- package/materiais/legenda-viva/cores/paleta.png +0 -0
- package/materiais/legenda-viva/formas/ChipTema.tsx +19 -0
- package/materiais/legenda-viva/formas/OndaVoz.tsx +23 -0
- package/materiais/legenda-viva/formas/QuadroFalante.tsx +17 -0
- package/materiais/legenda-viva/pecas.json +503 -0
- package/materiais/legenda-viva/referencia/analise.md +79 -0
- package/materiais/legenda-viva/referencia/quadro-1.png +0 -0
- package/materiais/legenda-viva/referencia/quadro-2.png +0 -0
- package/materiais/legenda-viva/referencia/quadro-3.png +0 -0
- package/materiais/legenda-viva/referencia/quadro-4.png +0 -0
- package/materiais/legenda-viva/referencia/referencia.mp4 +0 -0
- package/materiais/legenda-viva/regras.md +130 -0
- package/materiais/legenda-viva/sons/Som.tsx +38 -0
- package/materiais/legenda-viva/texturas/Fundo.tsx +6 -0
- package/materiais/legenda-viva/texturas/Particulas.tsx +22 -0
- package/materiais/legenda-viva/tipografia/AssinaturaMarca.tsx +29 -0
- package/materiais/legenda-viva/tipografia/LegendaCaixa.tsx +36 -0
- package/materiais/legenda-viva/tipografia/LegendaPalavra.tsx +32 -0
- package/materiais/legenda-viva/tipografia/PalavraGigante.tsx +18 -0
- package/materiais/legenda-viva/transicoes/Cena.tsx +41 -0
- package/materiais/legenda-viva/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/luxo/base.ts +85 -0
- package/materiais/luxo/camera/CameraDeriva.tsx +37 -0
- package/materiais/luxo/cores/paleta.json +28 -0
- package/materiais/luxo/cores/paleta.png +0 -0
- package/materiais/luxo/formas/ConviteOuro.tsx +34 -0
- package/materiais/luxo/formas/LinhaOuro.tsx +24 -0
- package/materiais/luxo/formas/MolduraArco.tsx +36 -0
- package/materiais/luxo/formas/Monograma.tsx +35 -0
- package/materiais/luxo/pecas.json +505 -0
- package/materiais/luxo/referencia/analise.md +82 -0
- package/materiais/luxo/referencia/quadro-1.png +0 -0
- package/materiais/luxo/referencia/quadro-2.png +0 -0
- package/materiais/luxo/referencia/quadro-3.png +0 -0
- package/materiais/luxo/referencia/quadro-4.png +0 -0
- package/materiais/luxo/referencia/referencia.mp4 +0 -0
- package/materiais/luxo/regras.md +132 -0
- package/materiais/luxo/sons/Som.tsx +40 -0
- package/materiais/luxo/texturas/Fundo.tsx +26 -0
- package/materiais/luxo/texturas/Particulas.tsx +22 -0
- package/materiais/luxo/tipografia/LegendaFina.tsx +25 -0
- package/materiais/luxo/tipografia/TituloSerifa.tsx +35 -0
- package/materiais/luxo/transicoes/Cena.tsx +36 -0
- package/materiais/luxo/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/mapa/base.ts +89 -0
- package/materiais/mapa/camera/CameraDeriva.tsx +37 -0
- package/materiais/mapa/cores/paleta.json +33 -0
- package/materiais/mapa/cores/paleta.png +0 -0
- package/materiais/mapa/formas/CartaoEndereco.tsx +40 -0
- package/materiais/mapa/formas/ChipTempo.tsx +29 -0
- package/materiais/mapa/formas/MapaBase.tsx +63 -0
- package/materiais/mapa/formas/Pino.tsx +38 -0
- package/materiais/mapa/formas/RotaAnimada.tsx +38 -0
- package/materiais/mapa/pecas.json +529 -0
- package/materiais/mapa/referencia/analise.md +85 -0
- package/materiais/mapa/referencia/quadro-1.png +0 -0
- package/materiais/mapa/referencia/quadro-2.png +0 -0
- package/materiais/mapa/referencia/quadro-3.png +0 -0
- package/materiais/mapa/referencia/quadro-4.png +0 -0
- package/materiais/mapa/referencia/referencia.mp4 +0 -0
- package/materiais/mapa/regras.md +135 -0
- package/materiais/mapa/sons/Som.tsx +41 -0
- package/materiais/mapa/texturas/Fundo.tsx +25 -0
- package/materiais/mapa/texturas/Particulas.tsx +22 -0
- package/materiais/mapa/tipografia/TituloLocal.tsx +38 -0
- package/materiais/mapa/transicoes/Cena.tsx +41 -0
- package/materiais/mapa/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/massinha/base.ts +79 -0
- package/materiais/massinha/camera/Camera.tsx +21 -0
- package/materiais/massinha/camera/CameraDeriva.tsx +37 -0
- package/materiais/massinha/cores/paleta.json +32 -0
- package/materiais/massinha/cores/paleta.png +0 -0
- package/materiais/massinha/formas/BichinhoMassa.tsx +30 -0
- package/materiais/massinha/formas/BolasMassa.tsx +25 -0
- package/materiais/massinha/formas/FormaMassa.tsx +23 -0
- package/materiais/massinha/formas/ListaMassa.tsx +19 -0
- package/materiais/massinha/formas/Overlay.tsx +11 -0
- package/materiais/massinha/formas/PlacaMassa.tsx +24 -0
- package/materiais/massinha/pecas.json +544 -0
- package/materiais/massinha/referencia/analise.md +81 -0
- package/materiais/massinha/referencia/quadro-1.png +0 -0
- package/materiais/massinha/referencia/quadro-2.png +0 -0
- package/materiais/massinha/referencia/quadro-3.png +0 -0
- package/materiais/massinha/referencia/quadro-4.png +0 -0
- package/materiais/massinha/referencia/referencia.mp4 +0 -0
- package/materiais/massinha/regras.md +129 -0
- package/materiais/massinha/sons/Som.tsx +30 -0
- package/materiais/massinha/texturas/Fundo.tsx +12 -0
- package/materiais/massinha/texturas/Particulas.tsx +22 -0
- package/materiais/massinha/tipografia/AssinaturaMarca.tsx +20 -0
- package/materiais/massinha/tipografia/TituloMassa.tsx +31 -0
- package/materiais/massinha/transicoes/Cena.tsx +36 -0
- package/materiais/massinha/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/memphis/base.ts +78 -0
- package/materiais/memphis/camera/Camera.tsx +21 -0
- package/materiais/memphis/camera/CameraDeriva.tsx +37 -0
- package/materiais/memphis/cores/paleta.json +31 -0
- package/materiais/memphis/cores/paleta.png +0 -0
- package/materiais/memphis/formas/CartaoMemphis.tsx +16 -0
- package/materiais/memphis/formas/FitaMarquee.tsx +21 -0
- package/materiais/memphis/formas/FormasMemphis.tsx +46 -0
- package/materiais/memphis/formas/ListaPilulas.tsx +17 -0
- package/materiais/memphis/formas/Overlay.tsx +23 -0
- package/materiais/memphis/pecas.json +544 -0
- package/materiais/memphis/referencia/analise.md +82 -0
- package/materiais/memphis/referencia/quadro-1.png +0 -0
- package/materiais/memphis/referencia/quadro-2.png +0 -0
- package/materiais/memphis/referencia/quadro-3.png +0 -0
- package/materiais/memphis/referencia/quadro-4.png +0 -0
- package/materiais/memphis/referencia/referencia.mp4 +0 -0
- package/materiais/memphis/regras.md +130 -0
- package/materiais/memphis/sons/Som.tsx +30 -0
- package/materiais/memphis/texturas/Fundo.tsx +15 -0
- package/materiais/memphis/texturas/Particulas.tsx +22 -0
- package/materiais/memphis/tipografia/AssinaturaMarca.tsx +20 -0
- package/materiais/memphis/tipografia/NumeroGigante.tsx +19 -0
- package/materiais/memphis/tipografia/TituloMemphis.tsx +28 -0
- package/materiais/memphis/transicoes/Cena.tsx +36 -0
- package/materiais/memphis/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/metal-liquido/base.ts +94 -0
- package/materiais/metal-liquido/camera/CameraDeriva.tsx +37 -0
- package/materiais/metal-liquido/cores/paleta.json +30 -0
- package/materiais/metal-liquido/cores/paleta.png +0 -0
- package/materiais/metal-liquido/formas/AnelCromo.tsx +28 -0
- package/materiais/metal-liquido/formas/BolhasCromadas.tsx +53 -0
- package/materiais/metal-liquido/formas/EsferaCromo.tsx +32 -0
- package/materiais/metal-liquido/formas/PilulaCromo.tsx +23 -0
- package/materiais/metal-liquido/pecas.json +469 -0
- package/materiais/metal-liquido/referencia/analise.md +84 -0
- package/materiais/metal-liquido/referencia/quadro-1.png +0 -0
- package/materiais/metal-liquido/referencia/quadro-2.png +0 -0
- package/materiais/metal-liquido/referencia/quadro-3.png +0 -0
- package/materiais/metal-liquido/referencia/quadro-4.png +0 -0
- package/materiais/metal-liquido/referencia/referencia.mp4 +0 -0
- package/materiais/metal-liquido/regras.md +135 -0
- package/materiais/metal-liquido/sons/Som.tsx +33 -0
- package/materiais/metal-liquido/texturas/Fundo.tsx +20 -0
- package/materiais/metal-liquido/texturas/Particulas.tsx +22 -0
- package/materiais/metal-liquido/tipografia/AssinaturaMarca.tsx +26 -0
- package/materiais/metal-liquido/tipografia/TituloCromo.tsx +32 -0
- package/materiais/metal-liquido/transicoes/Cena.tsx +48 -0
- package/materiais/metal-liquido/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/minimal/base.ts +80 -0
- package/materiais/minimal/camera/CameraDeriva.tsx +37 -0
- package/materiais/minimal/cores/paleta.json +26 -0
- package/materiais/minimal/cores/paleta.png +0 -0
- package/materiais/minimal/formas/FormaMorph.tsx +44 -0
- package/materiais/minimal/formas/LinhaFina.tsx +24 -0
- package/materiais/minimal/formas/PontoMovel.tsx +27 -0
- package/materiais/minimal/pecas.json +505 -0
- package/materiais/minimal/referencia/analise.md +84 -0
- package/materiais/minimal/referencia/quadro-1.png +0 -0
- package/materiais/minimal/referencia/quadro-2.png +0 -0
- package/materiais/minimal/referencia/quadro-3.png +0 -0
- package/materiais/minimal/referencia/quadro-4.png +0 -0
- package/materiais/minimal/referencia/referencia.mp4 +0 -0
- package/materiais/minimal/regras.md +127 -0
- package/materiais/minimal/sons/Som.tsx +40 -0
- package/materiais/minimal/texturas/Fundo.tsx +20 -0
- package/materiais/minimal/texturas/Particulas.tsx +22 -0
- package/materiais/minimal/tipografia/FraseUnica.tsx +33 -0
- package/materiais/minimal/tipografia/NumeroSolo.tsx +33 -0
- package/materiais/minimal/tipografia/RodapeMinimal.tsx +26 -0
- package/materiais/minimal/transicoes/Cena.tsx +39 -0
- package/materiais/minimal/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/neon-cidade/base.ts +100 -0
- package/materiais/neon-cidade/camera/CameraDeriva.tsx +37 -0
- package/materiais/neon-cidade/cores/paleta.json +29 -0
- package/materiais/neon-cidade/cores/paleta.png +0 -0
- package/materiais/neon-cidade/formas/CaixaLuminosa.tsx +40 -0
- package/materiais/neon-cidade/formas/FormaNeon.tsx +42 -0
- package/materiais/neon-cidade/formas/Horizonte.tsx +34 -0
- package/materiais/neon-cidade/formas/LetreiroNeon.tsx +46 -0
- package/materiais/neon-cidade/pecas.json +464 -0
- package/materiais/neon-cidade/referencia/analise.md +84 -0
- package/materiais/neon-cidade/referencia/quadro-1.png +0 -0
- package/materiais/neon-cidade/referencia/quadro-2.png +0 -0
- package/materiais/neon-cidade/referencia/quadro-3.png +0 -0
- package/materiais/neon-cidade/referencia/quadro-4.png +0 -0
- package/materiais/neon-cidade/referencia/referencia.mp4 +0 -0
- package/materiais/neon-cidade/regras.md +137 -0
- package/materiais/neon-cidade/sons/Som.tsx +33 -0
- package/materiais/neon-cidade/texturas/Chuva.tsx +23 -0
- package/materiais/neon-cidade/texturas/Fundo.tsx +18 -0
- package/materiais/neon-cidade/texturas/Particulas.tsx +22 -0
- package/materiais/neon-cidade/tipografia/AssinaturaMarca.tsx +24 -0
- package/materiais/neon-cidade/transicoes/Cena.tsx +48 -0
- package/materiais/neon-cidade/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/notion-editorial/base.ts +87 -0
- package/materiais/notion-editorial/camera/Camera.tsx +23 -0
- package/materiais/notion-editorial/camera/CameraDeriva.tsx +37 -0
- package/materiais/notion-editorial/cores/paleta.json +28 -0
- package/materiais/notion-editorial/cores/paleta.png +0 -0
- package/materiais/notion-editorial/formas/BlocoNota.tsx +38 -0
- package/materiais/notion-editorial/formas/Diagrama.tsx +29 -0
- package/materiais/notion-editorial/formas/PassosNumerados.tsx +23 -0
- package/materiais/notion-editorial/formas/RabiscoIcone.tsx +33 -0
- package/materiais/notion-editorial/pecas.json +496 -0
- package/materiais/notion-editorial/referencia/analise.md +83 -0
- package/materiais/notion-editorial/referencia/quadro-1.png +0 -0
- package/materiais/notion-editorial/referencia/quadro-2.png +0 -0
- package/materiais/notion-editorial/referencia/quadro-3.png +0 -0
- package/materiais/notion-editorial/referencia/quadro-4.png +0 -0
- package/materiais/notion-editorial/referencia/referencia.mp4 +0 -0
- package/materiais/notion-editorial/regras.md +126 -0
- package/materiais/notion-editorial/sons/Som.tsx +39 -0
- package/materiais/notion-editorial/texturas/Fundo.tsx +12 -0
- package/materiais/notion-editorial/texturas/Particulas.tsx +22 -0
- package/materiais/notion-editorial/tipografia/AssinaturaMarca.tsx +20 -0
- package/materiais/notion-editorial/tipografia/TextoSerifa.tsx +53 -0
- package/materiais/notion-editorial/transicoes/Cena.tsx +46 -0
- package/materiais/notion-editorial/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/papel-recortado/base.ts +51 -0
- package/materiais/papel-recortado/camera/Camera.tsx +28 -0
- package/materiais/papel-recortado/camera/CameraDeriva.tsx +37 -0
- package/materiais/papel-recortado/cores/paleta.json +28 -0
- package/materiais/papel-recortado/cores/paleta.png +0 -0
- package/materiais/papel-recortado/formas/CamadaPapel.tsx +81 -0
- package/materiais/papel-recortado/formas/CartaoCamadas.tsx +38 -0
- package/materiais/papel-recortado/formas/EtiquetaPapel.tsx +40 -0
- package/materiais/papel-recortado/formas/Fita.tsx +21 -0
- package/materiais/papel-recortado/formas/FolhaPopUp.tsx +49 -0
- package/materiais/papel-recortado/formas/MolduraPapel.tsx +12 -0
- package/materiais/papel-recortado/pecas.json +545 -0
- package/materiais/papel-recortado/referencia/analise.md +82 -0
- package/materiais/papel-recortado/referencia/quadro-1.png +0 -0
- package/materiais/papel-recortado/referencia/quadro-2.png +0 -0
- package/materiais/papel-recortado/referencia/quadro-3.png +0 -0
- package/materiais/papel-recortado/referencia/quadro-4.png +0 -0
- package/materiais/papel-recortado/referencia/referencia.mp4 +0 -0
- package/materiais/papel-recortado/regras.md +117 -0
- package/materiais/papel-recortado/sons/Som.tsx +30 -0
- package/materiais/papel-recortado/texturas/Fundo.tsx +10 -0
- package/materiais/papel-recortado/texturas/Particulas.tsx +22 -0
- package/materiais/papel-recortado/tipografia/LetrasRecortadas.tsx +48 -0
- package/materiais/papel-recortado/transicoes/Cena.tsx +29 -0
- package/materiais/papel-recortado/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/pixel/base.ts +79 -0
- package/materiais/pixel/camera/Camera.tsx +21 -0
- package/materiais/pixel/camera/CameraDeriva.tsx +37 -0
- package/materiais/pixel/cores/paleta.json +32 -0
- package/materiais/pixel/cores/paleta.png +0 -0
- package/materiais/pixel/formas/CaixaDialogo.tsx +22 -0
- package/materiais/pixel/formas/HudPlacar.tsx +19 -0
- package/materiais/pixel/formas/MenuPixel.tsx +19 -0
- package/materiais/pixel/formas/Overlay.tsx +14 -0
- package/materiais/pixel/formas/Sprite.tsx +33 -0
- package/materiais/pixel/pecas.json +543 -0
- package/materiais/pixel/referencia/analise.md +82 -0
- package/materiais/pixel/referencia/quadro-1.png +0 -0
- package/materiais/pixel/referencia/quadro-2.png +0 -0
- package/materiais/pixel/referencia/quadro-3.png +0 -0
- package/materiais/pixel/referencia/quadro-4.png +0 -0
- package/materiais/pixel/referencia/referencia.mp4 +0 -0
- package/materiais/pixel/regras.md +129 -0
- package/materiais/pixel/sons/Som.tsx +30 -0
- package/materiais/pixel/texturas/ChuvaDeSprites.tsx +15 -0
- package/materiais/pixel/texturas/Fundo.tsx +23 -0
- package/materiais/pixel/texturas/Particulas.tsx +22 -0
- package/materiais/pixel/tipografia/AssinaturaMarca.tsx +18 -0
- package/materiais/pixel/tipografia/TituloPixel.tsx +31 -0
- package/materiais/pixel/transicoes/Cena.tsx +36 -0
- package/materiais/pixel/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/pontos-3d/base.ts +92 -0
- package/materiais/pontos-3d/camera/CameraDeriva.tsx +37 -0
- package/materiais/pontos-3d/cores/paleta.json +28 -0
- package/materiais/pontos-3d/cores/paleta.png +0 -0
- package/materiais/pontos-3d/formas/NuvemDePontos.tsx +84 -0
- package/materiais/pontos-3d/formas/RotuloPonto.tsx +32 -0
- package/materiais/pontos-3d/pecas.json +481 -0
- package/materiais/pontos-3d/referencia/analise.md +85 -0
- package/materiais/pontos-3d/referencia/quadro-1.png +0 -0
- package/materiais/pontos-3d/referencia/quadro-2.png +0 -0
- package/materiais/pontos-3d/referencia/quadro-3.png +0 -0
- package/materiais/pontos-3d/referencia/quadro-4.png +0 -0
- package/materiais/pontos-3d/referencia/referencia.mp4 +0 -0
- package/materiais/pontos-3d/regras.md +136 -0
- package/materiais/pontos-3d/sons/Som.tsx +33 -0
- package/materiais/pontos-3d/texturas/Fundo.tsx +20 -0
- package/materiais/pontos-3d/texturas/Particulas.tsx +22 -0
- package/materiais/pontos-3d/tipografia/AssinaturaMarca.tsx +23 -0
- package/materiais/pontos-3d/tipografia/Contador.tsx +32 -0
- package/materiais/pontos-3d/tipografia/TextoDePontos.tsx +55 -0
- package/materiais/pontos-3d/tipografia/TituloSora.tsx +36 -0
- package/materiais/pontos-3d/transicoes/Cena.tsx +48 -0
- package/materiais/pontos-3d/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/produto-3d/base.ts +109 -0
- package/materiais/produto-3d/camera/Camera.tsx +23 -0
- package/materiais/produto-3d/camera/CameraDeriva.tsx +37 -0
- package/materiais/produto-3d/cores/paleta.json +31 -0
- package/materiais/produto-3d/cores/paleta.png +0 -0
- package/materiais/produto-3d/formas/Produto3D.tsx +131 -0
- package/materiais/produto-3d/lib/produto3d-apoio.ts +21 -0
- package/materiais/produto-3d/pecas.json +516 -0
- package/materiais/produto-3d/referencia/analise.md +83 -0
- package/materiais/produto-3d/referencia/quadro-1.png +0 -0
- package/materiais/produto-3d/referencia/quadro-2.png +0 -0
- package/materiais/produto-3d/referencia/quadro-3.png +0 -0
- package/materiais/produto-3d/referencia/quadro-4.png +0 -0
- package/materiais/produto-3d/referencia/referencia.mp4 +0 -0
- package/materiais/produto-3d/regras.md +128 -0
- package/materiais/produto-3d/sons/Som.tsx +39 -0
- package/materiais/produto-3d/texturas/Fundo.tsx +45 -0
- package/materiais/produto-3d/texturas/Particulas.tsx +22 -0
- package/materiais/produto-3d/tipografia/AssinaturaMarca.tsx +28 -0
- package/materiais/produto-3d/tipografia/NumeroDestaque.tsx +35 -0
- package/materiais/produto-3d/tipografia/RotuloChamada.tsx +43 -0
- package/materiais/produto-3d/tipografia/TituloMinimo.tsx +45 -0
- package/materiais/produto-3d/transicoes/Cena.tsx +55 -0
- package/materiais/produto-3d/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/produto-3d/transicoes/VarreduraLuz.tsx +22 -0
- package/materiais/quadro-giz/base.ts +78 -0
- package/materiais/quadro-giz/camera/Camera.tsx +21 -0
- package/materiais/quadro-giz/camera/CameraDeriva.tsx +37 -0
- package/materiais/quadro-giz/cores/paleta.json +31 -0
- package/materiais/quadro-giz/cores/paleta.png +0 -0
- package/materiais/quadro-giz/formas/ApagadorVarrendo.tsx +32 -0
- package/materiais/quadro-giz/formas/CartaoGiz.tsx +25 -0
- package/materiais/quadro-giz/formas/ContaNoQuadro.tsx +34 -0
- package/materiais/quadro-giz/formas/DesenhoGiz.tsx +29 -0
- package/materiais/quadro-giz/formas/ListaGiz.tsx +21 -0
- package/materiais/quadro-giz/formas/Overlay.tsx +12 -0
- package/materiais/quadro-giz/lib/traco.ts +9 -0
- package/materiais/quadro-giz/pecas.json +546 -0
- package/materiais/quadro-giz/referencia/analise.md +82 -0
- package/materiais/quadro-giz/referencia/quadro-1.png +0 -0
- package/materiais/quadro-giz/referencia/quadro-2.png +0 -0
- package/materiais/quadro-giz/referencia/quadro-3.png +0 -0
- package/materiais/quadro-giz/referencia/quadro-4.png +0 -0
- package/materiais/quadro-giz/referencia/referencia.mp4 +0 -0
- package/materiais/quadro-giz/regras.md +132 -0
- package/materiais/quadro-giz/sons/Som.tsx +30 -0
- package/materiais/quadro-giz/texturas/Fundo.tsx +21 -0
- package/materiais/quadro-giz/texturas/Particulas.tsx +22 -0
- package/materiais/quadro-giz/tipografia/AssinaturaMarca.tsx +20 -0
- package/materiais/quadro-giz/tipografia/TituloGiz.tsx +29 -0
- package/materiais/quadro-giz/transicoes/Cena.tsx +36 -0
- package/materiais/quadro-giz/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/rabisco/base.ts +76 -0
- package/materiais/rabisco/camera/Camera.tsx +21 -0
- package/materiais/rabisco/camera/CameraDeriva.tsx +37 -0
- package/materiais/rabisco/cores/paleta.json +29 -0
- package/materiais/rabisco/cores/paleta.png +0 -0
- package/materiais/rabisco/formas/Bonequinho.tsx +31 -0
- package/materiais/rabisco/formas/CartaoRabiscado.tsx +27 -0
- package/materiais/rabisco/formas/ListaRabiscada.tsx +23 -0
- package/materiais/rabisco/formas/TracoDesenhando.tsx +31 -0
- package/materiais/rabisco/lib/traco.ts +10 -0
- package/materiais/rabisco/pecas.json +520 -0
- package/materiais/rabisco/referencia/analise.md +82 -0
- package/materiais/rabisco/referencia/quadro-1.png +0 -0
- package/materiais/rabisco/referencia/quadro-2.png +0 -0
- package/materiais/rabisco/referencia/quadro-3.png +0 -0
- package/materiais/rabisco/referencia/quadro-4.png +0 -0
- package/materiais/rabisco/referencia/referencia.mp4 +0 -0
- package/materiais/rabisco/regras.md +126 -0
- package/materiais/rabisco/sons/Som.tsx +30 -0
- package/materiais/rabisco/texturas/Fundo.tsx +17 -0
- package/materiais/rabisco/texturas/Particulas.tsx +22 -0
- package/materiais/rabisco/tipografia/AssinaturaMarca.tsx +21 -0
- package/materiais/rabisco/tipografia/TituloRabisco.tsx +28 -0
- package/materiais/rabisco/transicoes/Cena.tsx +36 -0
- package/materiais/rabisco/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/retro-70/base.ts +73 -0
- package/materiais/retro-70/camera/CameraDeriva.tsx +37 -0
- package/materiais/retro-70/cores/paleta.json +27 -0
- package/materiais/retro-70/cores/paleta.png +0 -0
- package/materiais/retro-70/formas/ArcoListras.tsx +25 -0
- package/materiais/retro-70/formas/CartaoData.tsx +24 -0
- package/materiais/retro-70/formas/FaixaOnda.tsx +27 -0
- package/materiais/retro-70/formas/Flor70.tsx +25 -0
- package/materiais/retro-70/formas/FotoArredondada.tsx +19 -0
- package/materiais/retro-70/formas/RaiosDeSol.tsx +27 -0
- package/materiais/retro-70/pecas.json +533 -0
- package/materiais/retro-70/referencia/analise.md +81 -0
- package/materiais/retro-70/referencia/quadro-1.png +0 -0
- package/materiais/retro-70/referencia/quadro-2.png +0 -0
- package/materiais/retro-70/referencia/quadro-3.png +0 -0
- package/materiais/retro-70/referencia/quadro-4.png +0 -0
- package/materiais/retro-70/referencia/referencia.mp4 +0 -0
- package/materiais/retro-70/regras.md +132 -0
- package/materiais/retro-70/sons/Som.tsx +38 -0
- package/materiais/retro-70/texturas/Fundo.tsx +11 -0
- package/materiais/retro-70/texturas/Particulas.tsx +22 -0
- package/materiais/retro-70/tipografia/AssinaturaMarca.tsx +21 -0
- package/materiais/retro-70/tipografia/TituloGordo.tsx +28 -0
- package/materiais/retro-70/transicoes/Cena.tsx +41 -0
- package/materiais/retro-70/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/revista/base.ts +76 -0
- package/materiais/revista/camera/CameraDeriva.tsx +37 -0
- package/materiais/revista/cores/paleta.json +27 -0
- package/materiais/revista/cores/paleta.png +0 -0
- package/materiais/revista/formas/ColagemFotos.tsx +22 -0
- package/materiais/revista/formas/Folio.tsx +19 -0
- package/materiais/revista/formas/FotoSangrando.tsx +24 -0
- package/materiais/revista/formas/PaginaDupla.tsx +36 -0
- package/materiais/revista/pecas.json +506 -0
- package/materiais/revista/referencia/analise.md +80 -0
- package/materiais/revista/referencia/quadro-1.png +0 -0
- package/materiais/revista/referencia/quadro-2.png +0 -0
- package/materiais/revista/referencia/quadro-3.png +0 -0
- package/materiais/revista/referencia/quadro-4.png +0 -0
- package/materiais/revista/referencia/referencia.mp4 +0 -0
- package/materiais/revista/regras.md +130 -0
- package/materiais/revista/sons/Som.tsx +38 -0
- package/materiais/revista/texturas/Fundo.tsx +11 -0
- package/materiais/revista/texturas/Particulas.tsx +22 -0
- package/materiais/revista/tipografia/AssinaturaMarca.tsx +23 -0
- package/materiais/revista/tipografia/CitacaoGrande.tsx +27 -0
- package/materiais/revista/tipografia/TituloEditorial.tsx +31 -0
- package/materiais/revista/transicoes/Cena.tsx +41 -0
- package/materiais/revista/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/risografia/base.ts +73 -0
- package/materiais/risografia/camera/Camera.tsx +21 -0
- package/materiais/risografia/camera/CameraDeriva.tsx +37 -0
- package/materiais/risografia/cores/paleta.json +26 -0
- package/materiais/risografia/cores/paleta.png +0 -0
- package/materiais/risografia/formas/BolaReticula.tsx +26 -0
- package/materiais/risografia/formas/FormaRiso.tsx +24 -0
- package/materiais/risografia/formas/ListaRiso.tsx +22 -0
- package/materiais/risografia/formas/Overlay.tsx +18 -0
- package/materiais/risografia/formas/TarjaCarimbo.tsx +20 -0
- package/materiais/risografia/pecas.json +538 -0
- package/materiais/risografia/referencia/analise.md +82 -0
- package/materiais/risografia/referencia/quadro-1.png +0 -0
- package/materiais/risografia/referencia/quadro-2.png +0 -0
- package/materiais/risografia/referencia/quadro-3.png +0 -0
- package/materiais/risografia/referencia/quadro-4.png +0 -0
- package/materiais/risografia/referencia/referencia.mp4 +0 -0
- package/materiais/risografia/regras.md +123 -0
- package/materiais/risografia/sons/Som.tsx +30 -0
- package/materiais/risografia/texturas/Fundo.tsx +12 -0
- package/materiais/risografia/texturas/Particulas.tsx +22 -0
- package/materiais/risografia/tipografia/AssinaturaMarca.tsx +21 -0
- package/materiais/risografia/tipografia/NumeroRiso.tsx +21 -0
- package/materiais/risografia/tipografia/TituloRiso.tsx +26 -0
- package/materiais/risografia/transicoes/Cena.tsx +36 -0
- package/materiais/risografia/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/saas-linear/base.ts +84 -0
- package/materiais/saas-linear/camera/Camera.tsx +38 -0
- package/materiais/saas-linear/camera/CameraDeriva.tsx +37 -0
- package/materiais/saas-linear/cores/paleta.json +18 -0
- package/materiais/saas-linear/cores/paleta.png +0 -0
- package/materiais/saas-linear/formas/Agenda.tsx +46 -0
- package/materiais/saas-linear/formas/CaixaPrompt.tsx +41 -0
- package/materiais/saas-linear/formas/CartoesIntegracao.tsx +57 -0
- package/materiais/saas-linear/formas/Cursor.tsx +40 -0
- package/materiais/saas-linear/formas/Menu.tsx +46 -0
- package/materiais/saas-linear/formas/Monitor.tsx +28 -0
- package/materiais/saas-linear/pecas.json +596 -0
- package/materiais/saas-linear/referencia/analise.md +87 -0
- package/materiais/saas-linear/referencia/quadro-1.png +0 -0
- package/materiais/saas-linear/referencia/quadro-2.png +0 -0
- package/materiais/saas-linear/referencia/quadro-3.png +0 -0
- package/materiais/saas-linear/referencia/quadro-4.png +0 -0
- package/materiais/saas-linear/referencia/referencia.mp4 +0 -0
- package/materiais/saas-linear/regras.md +40 -0
- package/materiais/saas-linear/sons/Som.tsx +39 -0
- package/materiais/saas-linear/texturas/Fundo.tsx +18 -0
- package/materiais/saas-linear/texturas/Particulas.tsx +22 -0
- package/materiais/saas-linear/tipografia/FraseSerifa.tsx +25 -0
- package/materiais/saas-linear/tipografia/Marca.tsx +20 -0
- package/materiais/saas-linear/tipografia/MarcaFinal.tsx +22 -0
- package/materiais/saas-linear/tipografia/Saudacao.tsx +27 -0
- package/materiais/saas-linear/transicoes/Cena.tsx +38 -0
- package/materiais/saas-linear/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/stripe-ondas/base.ts +85 -0
- package/materiais/stripe-ondas/camera/Camera.tsx +23 -0
- package/materiais/stripe-ondas/camera/CameraDeriva.tsx +37 -0
- package/materiais/stripe-ondas/cores/paleta.json +28 -0
- package/materiais/stripe-ondas/cores/paleta.png +0 -0
- package/materiais/stripe-ondas/formas/CartaoPagamento.tsx +35 -0
- package/materiais/stripe-ondas/formas/FaixaDeOndas.tsx +49 -0
- package/materiais/stripe-ondas/formas/GraficoOnda.tsx +34 -0
- package/materiais/stripe-ondas/formas/PainelCodigo.tsx +36 -0
- package/materiais/stripe-ondas/formas/SelosDeMetodo.tsx +27 -0
- package/materiais/stripe-ondas/pecas.json +510 -0
- package/materiais/stripe-ondas/referencia/analise.md +83 -0
- package/materiais/stripe-ondas/referencia/quadro-1.png +0 -0
- package/materiais/stripe-ondas/referencia/quadro-2.png +0 -0
- package/materiais/stripe-ondas/referencia/quadro-3.png +0 -0
- package/materiais/stripe-ondas/referencia/quadro-4.png +0 -0
- package/materiais/stripe-ondas/referencia/referencia.mp4 +0 -0
- package/materiais/stripe-ondas/regras.md +131 -0
- package/materiais/stripe-ondas/sons/Som.tsx +39 -0
- package/materiais/stripe-ondas/texturas/Fundo.tsx +11 -0
- package/materiais/stripe-ondas/texturas/Particulas.tsx +22 -0
- package/materiais/stripe-ondas/tipografia/AssinaturaMarca.tsx +18 -0
- package/materiais/stripe-ondas/tipografia/TituloLimpo.tsx +27 -0
- package/materiais/stripe-ondas/transicoes/Cena.tsx +46 -0
- package/materiais/stripe-ondas/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/suica/base.ts +76 -0
- package/materiais/suica/camera/CameraDeriva.tsx +37 -0
- package/materiais/suica/cores/paleta.json +27 -0
- package/materiais/suica/cores/paleta.png +0 -0
- package/materiais/suica/formas/DiscoFoto.tsx +20 -0
- package/materiais/suica/formas/Indice.tsx +17 -0
- package/materiais/suica/formas/ListaIndice.tsx +25 -0
- package/materiais/suica/formas/Regua.tsx +20 -0
- package/materiais/suica/pecas.json +528 -0
- package/materiais/suica/referencia/analise.md +80 -0
- package/materiais/suica/referencia/quadro-1.png +0 -0
- package/materiais/suica/referencia/quadro-2.png +0 -0
- package/materiais/suica/referencia/quadro-3.png +0 -0
- package/materiais/suica/referencia/quadro-4.png +0 -0
- package/materiais/suica/referencia/referencia.mp4 +0 -0
- package/materiais/suica/regras.md +129 -0
- package/materiais/suica/sons/Som.tsx +38 -0
- package/materiais/suica/texturas/Fundo.tsx +16 -0
- package/materiais/suica/texturas/GradeFotos.tsx +21 -0
- package/materiais/suica/texturas/Particulas.tsx +22 -0
- package/materiais/suica/tipografia/AssinaturaMarca.tsx +21 -0
- package/materiais/suica/tipografia/NumeroGigante.tsx +21 -0
- package/materiais/suica/tipografia/TituloGrade.tsx +38 -0
- package/materiais/suica/transicoes/Cena.tsx +41 -0
- package/materiais/suica/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/synthwave/base.ts +75 -0
- package/materiais/synthwave/camera/CameraDeriva.tsx +37 -0
- package/materiais/synthwave/cores/paleta.json +29 -0
- package/materiais/synthwave/cores/paleta.png +0 -0
- package/materiais/synthwave/formas/Montanhas.tsx +27 -0
- package/materiais/synthwave/formas/Palmeiras.tsx +30 -0
- package/materiais/synthwave/formas/QuadroHUD.tsx +33 -0
- package/materiais/synthwave/formas/SolListrado.tsx +29 -0
- package/materiais/synthwave/pecas.json +491 -0
- package/materiais/synthwave/referencia/analise.md +81 -0
- package/materiais/synthwave/referencia/quadro-1.png +0 -0
- package/materiais/synthwave/referencia/quadro-2.png +0 -0
- package/materiais/synthwave/referencia/quadro-3.png +0 -0
- package/materiais/synthwave/referencia/quadro-4.png +0 -0
- package/materiais/synthwave/referencia/referencia.mp4 +0 -0
- package/materiais/synthwave/regras.md +132 -0
- package/materiais/synthwave/sons/Som.tsx +38 -0
- package/materiais/synthwave/texturas/Estrelas.tsx +27 -0
- package/materiais/synthwave/texturas/Fundo.tsx +20 -0
- package/materiais/synthwave/texturas/Particulas.tsx +22 -0
- package/materiais/synthwave/tipografia/AssinaturaMarca.tsx +26 -0
- package/materiais/synthwave/tipografia/TituloNeon.tsx +30 -0
- package/materiais/synthwave/transicoes/Cena.tsx +41 -0
- package/materiais/synthwave/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/terminal/base.ts +67 -0
- package/materiais/terminal/camera/Camera.tsx +23 -0
- package/materiais/terminal/camera/CameraDeriva.tsx +37 -0
- package/materiais/terminal/cores/paleta.json +32 -0
- package/materiais/terminal/cores/paleta.png +0 -0
- package/materiais/terminal/formas/ArteAscii.tsx +61 -0
- package/materiais/terminal/formas/BarraProgresso.tsx +42 -0
- package/materiais/terminal/formas/BarraStatus.tsx +18 -0
- package/materiais/terminal/formas/BootBios.tsx +41 -0
- package/materiais/terminal/formas/LinhaComando.tsx +31 -0
- package/materiais/terminal/formas/Monitor.tsx +42 -0
- package/materiais/terminal/formas/PainelCaixa.tsx +35 -0
- package/materiais/terminal/formas/Tela.tsx +25 -0
- package/materiais/terminal/pecas.json +591 -0
- package/materiais/terminal/referencia/analise.md +84 -0
- package/materiais/terminal/referencia/quadro-1.png +0 -0
- package/materiais/terminal/referencia/quadro-2.png +0 -0
- package/materiais/terminal/referencia/quadro-3.png +0 -0
- package/materiais/terminal/referencia/quadro-4.png +0 -0
- package/materiais/terminal/referencia/referencia.mp4 +0 -0
- package/materiais/terminal/regras.md +124 -0
- package/materiais/terminal/sons/Som.tsx +32 -0
- package/materiais/terminal/texturas/Fundo.tsx +22 -0
- package/materiais/terminal/texturas/Particulas.tsx +22 -0
- package/materiais/terminal/tipografia/TextoGrande.tsx +35 -0
- package/materiais/terminal/transicoes/Cena.tsx +25 -0
- package/materiais/terminal/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/tiktok-energia/base.ts +92 -0
- package/materiais/tiktok-energia/camera/CameraDeriva.tsx +37 -0
- package/materiais/tiktok-energia/cores/paleta.json +27 -0
- package/materiais/tiktok-energia/cores/paleta.png +0 -0
- package/materiais/tiktok-energia/formas/EmojiSticker.tsx +21 -0
- package/materiais/tiktok-energia/formas/FotoSoco.tsx +27 -0
- package/materiais/tiktok-energia/pecas.json +470 -0
- package/materiais/tiktok-energia/referencia/analise.md +87 -0
- package/materiais/tiktok-energia/referencia/quadro-1.png +0 -0
- package/materiais/tiktok-energia/referencia/quadro-2.png +0 -0
- package/materiais/tiktok-energia/referencia/quadro-3.png +0 -0
- package/materiais/tiktok-energia/referencia/quadro-4.png +0 -0
- package/materiais/tiktok-energia/referencia/referencia.mp4 +0 -0
- package/materiais/tiktok-energia/regras.md +135 -0
- package/materiais/tiktok-energia/sons/Som.tsx +33 -0
- package/materiais/tiktok-energia/texturas/Fundo.tsx +8 -0
- package/materiais/tiktok-energia/texturas/Particulas.tsx +22 -0
- package/materiais/tiktok-energia/tipografia/AssinaturaMarca.tsx +25 -0
- package/materiais/tiktok-energia/tipografia/PalavraSoco.tsx +29 -0
- package/materiais/tiktok-energia/tipografia/TextoCaixa.tsx +25 -0
- package/materiais/tiktok-energia/transicoes/Cena.tsx +48 -0
- package/materiais/tiktok-energia/transicoes/CorteDeCor.tsx +22 -0
- package/materiais/tiktok-energia/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/tunel/base.ts +97 -0
- package/materiais/tunel/camera/CameraDeriva.tsx +37 -0
- package/materiais/tunel/cores/paleta.json +28 -0
- package/materiais/tunel/cores/paleta.png +0 -0
- package/materiais/tunel/formas/LinhasDeVelocidade.tsx +25 -0
- package/materiais/tunel/formas/PlacaVoadora.tsx +28 -0
- package/materiais/tunel/formas/TunelDeFormas.tsx +52 -0
- package/materiais/tunel/pecas.json +475 -0
- package/materiais/tunel/referencia/analise.md +83 -0
- package/materiais/tunel/referencia/quadro-1.png +0 -0
- package/materiais/tunel/referencia/quadro-2.png +0 -0
- package/materiais/tunel/referencia/quadro-3.png +0 -0
- package/materiais/tunel/referencia/quadro-4.png +0 -0
- package/materiais/tunel/referencia/referencia.mp4 +0 -0
- package/materiais/tunel/regras.md +134 -0
- package/materiais/tunel/sons/Som.tsx +33 -0
- package/materiais/tunel/texturas/Fundo.tsx +13 -0
- package/materiais/tunel/texturas/Particulas.tsx +22 -0
- package/materiais/tunel/tipografia/AssinaturaMarca.tsx +22 -0
- package/materiais/tunel/tipografia/NumeroGigante.tsx +28 -0
- package/materiais/tunel/tipografia/TituloTunel.tsx +32 -0
- package/materiais/tunel/transicoes/Cena.tsx +48 -0
- package/materiais/tunel/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/tutorial-tela/base.ts +65 -0
- package/materiais/tutorial-tela/camera/CameraDeriva.tsx +37 -0
- package/materiais/tutorial-tela/camera/CameraTela.tsx +29 -0
- package/materiais/tutorial-tela/cores/paleta.json +32 -0
- package/materiais/tutorial-tela/cores/paleta.png +0 -0
- package/materiais/tutorial-tela/formas/Cursor.tsx +36 -0
- package/materiais/tutorial-tela/formas/DestaqueCaixa.tsx +17 -0
- package/materiais/tutorial-tela/formas/JanelaApp.tsx +81 -0
- package/materiais/tutorial-tela/formas/TeclaAtalho.tsx +29 -0
- package/materiais/tutorial-tela/pecas.json +526 -0
- package/materiais/tutorial-tela/referencia/analise.md +86 -0
- package/materiais/tutorial-tela/referencia/quadro-1.png +0 -0
- package/materiais/tutorial-tela/referencia/quadro-2.png +0 -0
- package/materiais/tutorial-tela/referencia/quadro-3.png +0 -0
- package/materiais/tutorial-tela/referencia/quadro-4.png +0 -0
- package/materiais/tutorial-tela/referencia/referencia.mp4 +0 -0
- package/materiais/tutorial-tela/regras.md +139 -0
- package/materiais/tutorial-tela/sons/Som.tsx +41 -0
- package/materiais/tutorial-tela/texturas/Fundo.tsx +12 -0
- package/materiais/tutorial-tela/texturas/Particulas.tsx +22 -0
- package/materiais/tutorial-tela/tipografia/PassoChamada.tsx +22 -0
- package/materiais/tutorial-tela/tipografia/TituloTela.tsx +30 -0
- package/materiais/tutorial-tela/transicoes/Cena.tsx +33 -0
- package/materiais/tutorial-tela/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/ugc-reels/base.ts +92 -0
- package/materiais/ugc-reels/camera/CameraDeriva.tsx +37 -0
- package/materiais/ugc-reels/cores/paleta.json +28 -0
- package/materiais/ugc-reels/cores/paleta.png +0 -0
- package/materiais/ugc-reels/formas/BotaoLink.tsx +24 -0
- package/materiais/ugc-reels/formas/CabecalhoPerfil.tsx +38 -0
- package/materiais/ugc-reels/formas/Comentario.tsx +29 -0
- package/materiais/ugc-reels/formas/NotaDeMao.tsx +29 -0
- package/materiais/ugc-reels/formas/Reacoes.tsx +26 -0
- package/materiais/ugc-reels/formas/VideoCelular.tsx +37 -0
- package/materiais/ugc-reels/pecas.json +512 -0
- package/materiais/ugc-reels/referencia/analise.md +85 -0
- package/materiais/ugc-reels/referencia/quadro-1.png +0 -0
- package/materiais/ugc-reels/referencia/quadro-2.png +0 -0
- package/materiais/ugc-reels/referencia/quadro-3.png +0 -0
- package/materiais/ugc-reels/referencia/quadro-4.png +0 -0
- package/materiais/ugc-reels/referencia/referencia.mp4 +0 -0
- package/materiais/ugc-reels/regras.md +138 -0
- package/materiais/ugc-reels/sons/Som.tsx +33 -0
- package/materiais/ugc-reels/texturas/Fundo.tsx +8 -0
- package/materiais/ugc-reels/texturas/Particulas.tsx +22 -0
- package/materiais/ugc-reels/tipografia/AssinaturaMarca.tsx +28 -0
- package/materiais/ugc-reels/tipografia/LegendaEmoji.tsx +43 -0
- package/materiais/ugc-reels/transicoes/Cena.tsx +48 -0
- package/materiais/ugc-reels/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/vercel-mono/base.ts +82 -0
- package/materiais/vercel-mono/camera/Camera.tsx +23 -0
- package/materiais/vercel-mono/camera/CameraDeriva.tsx +37 -0
- package/materiais/vercel-mono/cores/paleta.json +25 -0
- package/materiais/vercel-mono/cores/paleta.png +0 -0
- package/materiais/vercel-mono/formas/FaixaOutline.tsx +25 -0
- package/materiais/vercel-mono/formas/Quadro.tsx +28 -0
- package/materiais/vercel-mono/formas/TerminalComando.tsx +33 -0
- package/materiais/vercel-mono/formas/TrianguloGigante.tsx +27 -0
- package/materiais/vercel-mono/pecas.json +504 -0
- package/materiais/vercel-mono/referencia/analise.md +82 -0
- package/materiais/vercel-mono/referencia/quadro-1.png +0 -0
- package/materiais/vercel-mono/referencia/quadro-2.png +0 -0
- package/materiais/vercel-mono/referencia/quadro-3.png +0 -0
- package/materiais/vercel-mono/referencia/quadro-4.png +0 -0
- package/materiais/vercel-mono/referencia/referencia.mp4 +0 -0
- package/materiais/vercel-mono/regras.md +120 -0
- package/materiais/vercel-mono/sons/Som.tsx +39 -0
- package/materiais/vercel-mono/texturas/Fundo.tsx +6 -0
- package/materiais/vercel-mono/texturas/GradeDeNumeros.tsx +27 -0
- package/materiais/vercel-mono/texturas/Particulas.tsx +22 -0
- package/materiais/vercel-mono/tipografia/AssinaturaMarca.tsx +18 -0
- package/materiais/vercel-mono/tipografia/PalavraMono.tsx +31 -0
- package/materiais/vercel-mono/transicoes/Cena.tsx +46 -0
- package/materiais/vercel-mono/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/vhs-90/base.ts +75 -0
- package/materiais/vhs-90/camera/CameraDeriva.tsx +37 -0
- package/materiais/vhs-90/cores/paleta.json +29 -0
- package/materiais/vhs-90/cores/paleta.png +0 -0
- package/materiais/vhs-90/formas/BarrasRastreio.tsx +21 -0
- package/materiais/vhs-90/formas/CapaVHS.tsx +28 -0
- package/materiais/vhs-90/formas/CarimboData.tsx +19 -0
- package/materiais/vhs-90/formas/MenuOSD.tsx +27 -0
- package/materiais/vhs-90/formas/TelaAzul.tsx +29 -0
- package/materiais/vhs-90/pecas.json +507 -0
- package/materiais/vhs-90/referencia/analise.md +81 -0
- package/materiais/vhs-90/referencia/quadro-1.png +0 -0
- package/materiais/vhs-90/referencia/quadro-2.png +0 -0
- package/materiais/vhs-90/referencia/quadro-3.png +0 -0
- package/materiais/vhs-90/referencia/quadro-4.png +0 -0
- package/materiais/vhs-90/referencia/referencia.mp4 +0 -0
- package/materiais/vhs-90/regras.md +133 -0
- package/materiais/vhs-90/sons/Som.tsx +38 -0
- package/materiais/vhs-90/texturas/Fundo.tsx +27 -0
- package/materiais/vhs-90/texturas/Particulas.tsx +22 -0
- package/materiais/vhs-90/tipografia/AssinaturaMarca.tsx +29 -0
- package/materiais/vhs-90/tipografia/TituloFita.tsx +40 -0
- package/materiais/vhs-90/transicoes/Cena.tsx +41 -0
- package/materiais/vhs-90/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/vidro-ios/base.ts +87 -0
- package/materiais/vidro-ios/camera/Camera.tsx +23 -0
- package/materiais/vidro-ios/camera/CameraDeriva.tsx +37 -0
- package/materiais/vidro-ios/cores/paleta.json +28 -0
- package/materiais/vidro-ios/cores/paleta.png +0 -0
- package/materiais/vidro-ios/formas/IlhaDinamica.tsx +24 -0
- package/materiais/vidro-ios/formas/PainelControle.tsx +33 -0
- package/materiais/vidro-ios/formas/PilhaNotificacoes.tsx +29 -0
- package/materiais/vidro-ios/formas/WidgetsGrade.tsx +34 -0
- package/materiais/vidro-ios/formas/vidro.tsx +20 -0
- package/materiais/vidro-ios/pecas.json +504 -0
- package/materiais/vidro-ios/referencia/analise.md +84 -0
- package/materiais/vidro-ios/referencia/quadro-1.png +0 -0
- package/materiais/vidro-ios/referencia/quadro-2.png +0 -0
- package/materiais/vidro-ios/referencia/quadro-3.png +0 -0
- package/materiais/vidro-ios/referencia/quadro-4.png +0 -0
- package/materiais/vidro-ios/referencia/referencia.mp4 +0 -0
- package/materiais/vidro-ios/regras.md +127 -0
- package/materiais/vidro-ios/sons/Som.tsx +39 -0
- package/materiais/vidro-ios/texturas/Fundo.tsx +17 -0
- package/materiais/vidro-ios/texturas/Particulas.tsx +22 -0
- package/materiais/vidro-ios/tipografia/AssinaturaMarca.tsx +21 -0
- package/materiais/vidro-ios/tipografia/TituloVidro.tsx +22 -0
- package/materiais/vidro-ios/transicoes/Cena.tsx +46 -0
- package/materiais/vidro-ios/transicoes/CorteImpacto.tsx +16 -0
- package/materiais/y2k-cromado/base.ts +75 -0
- package/materiais/y2k-cromado/camera/CameraDeriva.tsx +37 -0
- package/materiais/y2k-cromado/cores/paleta.json +29 -0
- package/materiais/y2k-cromado/cores/paleta.png +0 -0
- package/materiais/y2k-cromado/formas/Bolhas.tsx +30 -0
- package/materiais/y2k-cromado/formas/CartaoGloss.tsx +26 -0
- package/materiais/y2k-cromado/formas/FitaMarquee.tsx +20 -0
- package/materiais/y2k-cromado/formas/JanelaY2K.tsx +31 -0
- package/materiais/y2k-cromado/formas/OrbeCromo.tsx +20 -0
- package/materiais/y2k-cromado/pecas.json +527 -0
- package/materiais/y2k-cromado/referencia/analise.md +81 -0
- package/materiais/y2k-cromado/referencia/quadro-1.png +0 -0
- package/materiais/y2k-cromado/referencia/quadro-2.png +0 -0
- package/materiais/y2k-cromado/referencia/quadro-3.png +0 -0
- package/materiais/y2k-cromado/referencia/quadro-4.png +0 -0
- package/materiais/y2k-cromado/referencia/referencia.mp4 +0 -0
- package/materiais/y2k-cromado/regras.md +133 -0
- package/materiais/y2k-cromado/sons/Som.tsx +38 -0
- package/materiais/y2k-cromado/texturas/Brilhos.tsx +28 -0
- package/materiais/y2k-cromado/texturas/Fundo.tsx +18 -0
- package/materiais/y2k-cromado/texturas/Particulas.tsx +22 -0
- package/materiais/y2k-cromado/tipografia/AssinaturaMarca.tsx +25 -0
- package/materiais/y2k-cromado/tipografia/TextoCromo.tsx +34 -0
- package/materiais/y2k-cromado/transicoes/Cena.tsx +41 -0
- package/materiais/y2k-cromado/transicoes/CorteImpacto.tsx +16 -0
- package/package.json +3 -1
- package/skills/apresentacao-pptx/SKILL.md +1 -1
- package/skills/carrossel-conferido/SKILL.md +21 -0
- package/skills/cartaz-conferido/SKILL.md +28 -0
- package/skills/deck-conferido/SKILL.md +30 -0
- package/skills/documento-conferido/SKILL.md +23 -0
- package/vendor/fontes/anton.woff2 +0 -0
- package/vendor/fontes/caveat.woff2 +0 -0
- package/vendor/fontes/inter.woff2 +0 -0
- package/vendor/fontes/jetbrains-mono.woff2 +0 -0
- package/vendor/fontes/montserrat.woff2 +0 -0
- package/vendor/pptxgenjs/carregar.js +12 -0
- package/vendor/pptxgenjs/jszip.min.js +13 -0
- package/vendor/pptxgenjs/pptxgen.cjs.js +7370 -0
- package/voz/primo_voz/__main__.py +1 -1
- package/voz/primo_voz/app.py +8 -8
- package/voz/primo_voz/transcrever.py +2 -2
- package/kits/adesivos/assets/ASSETS.md +0 -22
- package/kits/adesivos/elementos/AdesivoForma.tsx +0 -42
- package/kits/adesivos/elementos/AdesivoFoto.tsx +0 -36
- package/kits/adesivos/elementos/AdesivoTexto.tsx +0 -35
- package/kits/adesivos/elementos/AssinaturaMarca.tsx +0 -36
- package/kits/adesivos/elementos/Cena.tsx +0 -48
- package/kits/adesivos/elementos/ChuvaDeAdesivos.tsx +0 -29
- package/kits/adesivos/elementos/Fundo.tsx +0 -21
- package/kits/adesivos/elementos/Montagem.tsx +0 -68
- package/kits/adesivos/elementos/SeloPreco.tsx +0 -38
- package/kits/adesivos/elementos/Som.tsx +0 -33
- package/kits/adesivos/elementos/TituloEtiquetas.tsx +0 -33
- package/kits/adesivos/elementos/base.ts +0 -101
- package/kits/adesivos/elementos/index.ts +0 -16
- package/kits/adesivos/exemplos/fotos/foto-01.jpg +0 -0
- package/kits/adesivos/exemplos/fotos/foto-02.jpg +0 -0
- package/kits/adesivos/exemplos/fotos/foto-03.jpg +0 -0
- package/kits/adesivos/exemplos/logo-grude.svg +0 -1
- package/kits/adesivos/exemplos/plano.json +0 -328
- package/kits/adesivos/exemplos/roteiro.md +0 -21
- package/kits/adesivos/preview.tsx +0 -15
- package/kits/adesivos/receita.json +0 -212
- package/kits/adesivos/regras/area-segura.md +0 -17
- package/kits/adesivos/regras/cor.md +0 -23
- package/kits/adesivos/regras/movimento.md +0 -17
- package/kits/adesivos/regras/ritmo.md +0 -16
- package/kits/adesivos/regras/som.md +0 -20
- package/kits/adesivos/regras/tipografia.md +0 -16
- package/kits/antes-depois/assets/ASSETS.md +0 -23
- package/kits/antes-depois/elementos/BarraMedidor.tsx +0 -43
- package/kits/antes-depois/elementos/Cena.tsx +0 -41
- package/kits/antes-depois/elementos/FaixaMarquee.tsx +0 -35
- package/kits/antes-depois/elementos/Fundo.tsx +0 -24
- package/kits/antes-depois/elementos/ListaMudancas.tsx +0 -37
- package/kits/antes-depois/elementos/Montagem.tsx +0 -59
- package/kits/antes-depois/elementos/NumeroDelta.tsx +0 -36
- package/kits/antes-depois/elementos/RotuloAntesDepois.tsx +0 -26
- package/kits/antes-depois/elementos/Som.tsx +0 -40
- package/kits/antes-depois/elementos/TelaDividida.tsx +0 -68
- package/kits/antes-depois/elementos/base.ts +0 -82
- package/kits/antes-depois/elementos/index.ts +0 -15
- package/kits/antes-depois/exemplos/fotos/foto-07.jpg +0 -0
- package/kits/antes-depois/exemplos/fotos/foto-08.jpg +0 -0
- package/kits/antes-depois/exemplos/plano.json +0 -276
- package/kits/antes-depois/exemplos/roteiro.md +0 -19
- package/kits/antes-depois/preview.tsx +0 -13
- package/kits/antes-depois/receita.json +0 -21
- package/kits/antes-depois/regras/area-segura.md +0 -21
- package/kits/antes-depois/regras/cor.md +0 -15
- package/kits/antes-depois/regras/movimento.md +0 -23
- package/kits/antes-depois/regras/ritmo.md +0 -15
- package/kits/antes-depois/regras/som.md +0 -20
- package/kits/antes-depois/regras/tipografia.md +0 -18
- package/kits/apple-tipografico/assets/ASSETS.md +0 -23
- package/kits/apple-tipografico/elementos/AssinaturaPreta.tsx +0 -33
- package/kits/apple-tipografico/elementos/Camera.tsx +0 -23
- package/kits/apple-tipografico/elementos/CartaoRadial.tsx +0 -41
- package/kits/apple-tipografico/elementos/Cena.tsx +0 -55
- package/kits/apple-tipografico/elementos/Fundo.tsx +0 -21
- package/kits/apple-tipografico/elementos/LegendaCurta.tsx +0 -51
- package/kits/apple-tipografico/elementos/Montagem.tsx +0 -55
- package/kits/apple-tipografico/elementos/Produto3D.tsx +0 -140
- package/kits/apple-tipografico/elementos/ProdutoFoto.tsx +0 -47
- package/kits/apple-tipografico/elementos/Som.tsx +0 -40
- package/kits/apple-tipografico/elementos/base.ts +0 -111
- package/kits/apple-tipografico/elementos/index.ts +0 -18
- package/kits/apple-tipografico/exemplos/logo-lume.svg +0 -1
- package/kits/apple-tipografico/exemplos/plano.json +0 -56
- package/kits/apple-tipografico/exemplos/roteiro.md +0 -19
- package/kits/apple-tipografico/preview.tsx +0 -12
- package/kits/apple-tipografico/receita.json +0 -22
- package/kits/apple-tipografico/regras/area-segura.md +0 -19
- package/kits/apple-tipografico/regras/cor.md +0 -24
- package/kits/apple-tipografico/regras/movimento.md +0 -29
- package/kits/apple-tipografico/regras/ritmo.md +0 -29
- package/kits/apple-tipografico/regras/som.md +0 -20
- package/kits/apple-tipografico/regras/tipografia.md +0 -21
- package/kits/aquarela/assets/ASSETS.md +0 -21
- package/kits/aquarela/elementos/AnotacaoManual.tsx +0 -40
- package/kits/aquarela/elementos/AssinaturaMarca.tsx +0 -33
- package/kits/aquarela/elementos/Cena.tsx +0 -48
- package/kits/aquarela/elementos/Fundo.tsx +0 -24
- package/kits/aquarela/elementos/ManchaTinta.tsx +0 -46
- package/kits/aquarela/elementos/Montagem.tsx +0 -60
- package/kits/aquarela/elementos/PapelRasgado.tsx +0 -50
- package/kits/aquarela/elementos/Pincelada.tsx +0 -43
- package/kits/aquarela/elementos/Pingos.tsx +0 -31
- package/kits/aquarela/elementos/Som.tsx +0 -33
- package/kits/aquarela/elementos/TituloPincel.tsx +0 -51
- package/kits/aquarela/elementos/base.ts +0 -97
- package/kits/aquarela/elementos/index.ts +0 -16
- package/kits/aquarela/exemplos/logo-mare.svg +0 -1
- package/kits/aquarela/exemplos/plano.json +0 -62
- package/kits/aquarela/exemplos/roteiro.md +0 -21
- package/kits/aquarela/preview.tsx +0 -12
- package/kits/aquarela/receita.json +0 -213
- package/kits/aquarela/regras/area-segura.md +0 -17
- package/kits/aquarela/regras/cor.md +0 -23
- package/kits/aquarela/regras/movimento.md +0 -19
- package/kits/aquarela/regras/ritmo.md +0 -17
- package/kits/aquarela/regras/som.md +0 -20
- package/kits/aquarela/regras/tipografia.md +0 -16
- package/kits/aurora/assets/ASSETS.md +0 -21
- package/kits/aurora/elementos/AssinaturaMarca.tsx +0 -24
- package/kits/aurora/elementos/CartaoVidro.tsx +0 -29
- package/kits/aurora/elementos/Cena.tsx +0 -48
- package/kits/aurora/elementos/CeuEstrelado.tsx +0 -22
- package/kits/aurora/elementos/CortinaDeLuz.tsx +0 -36
- package/kits/aurora/elementos/Fundo.tsx +0 -35
- package/kits/aurora/elementos/Legenda.tsx +0 -23
- package/kits/aurora/elementos/Montagem.tsx +0 -68
- package/kits/aurora/elementos/Montanhas.tsx +0 -24
- package/kits/aurora/elementos/Som.tsx +0 -33
- package/kits/aurora/elementos/TituloSerif.tsx +0 -36
- package/kits/aurora/elementos/base.ts +0 -93
- package/kits/aurora/elementos/index.ts +0 -16
- package/kits/aurora/exemplos/logo-boreal.svg +0 -1
- package/kits/aurora/exemplos/plano.json +0 -204
- package/kits/aurora/exemplos/roteiro.md +0 -19
- package/kits/aurora/preview.tsx +0 -12
- package/kits/aurora/receita.json +0 -146
- package/kits/aurora/regras/area-segura.md +0 -18
- package/kits/aurora/regras/cor.md +0 -24
- package/kits/aurora/regras/movimento.md +0 -20
- package/kits/aurora/regras/ritmo.md +0 -14
- package/kits/aurora/regras/som.md +0 -20
- package/kits/aurora/regras/tipografia.md +0 -15
- package/kits/bauhaus/assets/ASSETS.md +0 -18
- package/kits/bauhaus/elementos/AssinaturaMarca.tsx +0 -26
- package/kits/bauhaus/elementos/BarraDiagonal.tsx +0 -20
- package/kits/bauhaus/elementos/Camera.tsx +0 -21
- package/kits/bauhaus/elementos/Cena.tsx +0 -36
- package/kits/bauhaus/elementos/ComposicaoGeometrica.tsx +0 -54
- package/kits/bauhaus/elementos/Fundo.tsx +0 -13
- package/kits/bauhaus/elementos/ListaFaixas.tsx +0 -27
- package/kits/bauhaus/elementos/Montagem.tsx +0 -55
- package/kits/bauhaus/elementos/NumeroBauhaus.tsx +0 -21
- package/kits/bauhaus/elementos/Overlay.tsx +0 -18
- package/kits/bauhaus/elementos/Som.tsx +0 -30
- package/kits/bauhaus/elementos/TituloBauhaus.tsx +0 -32
- package/kits/bauhaus/elementos/base.ts +0 -74
- package/kits/bauhaus/elementos/index.ts +0 -16
- package/kits/bauhaus/exemplos/plano.json +0 -221
- package/kits/bauhaus/exemplos/roteiro.md +0 -20
- package/kits/bauhaus/preview.tsx +0 -12
- package/kits/bauhaus/receita.json +0 -174
- package/kits/bauhaus/regras/area-segura.md +0 -15
- package/kits/bauhaus/regras/cor.md +0 -13
- package/kits/bauhaus/regras/movimento.md +0 -17
- package/kits/bauhaus/regras/ritmo.md +0 -15
- package/kits/bauhaus/regras/som.md +0 -18
- package/kits/bauhaus/regras/tipografia.md +0 -20
- package/kits/brutalista/assets/ASSETS.md +0 -23
- package/kits/brutalista/elementos/AssinaturaMarca.tsx +0 -21
- package/kits/brutalista/elementos/BlocoSombra.tsx +0 -18
- package/kits/brutalista/elementos/CartaoFotoBruto.tsx +0 -19
- package/kits/brutalista/elementos/Cena.tsx +0 -41
- package/kits/brutalista/elementos/ContadorGrande.tsx +0 -21
- package/kits/brutalista/elementos/FitaAlerta.tsx +0 -20
- package/kits/brutalista/elementos/Fundo.tsx +0 -9
- package/kits/brutalista/elementos/ListaBruta.tsx +0 -23
- package/kits/brutalista/elementos/MonoEnorme.tsx +0 -43
- package/kits/brutalista/elementos/Montagem.tsx +0 -62
- package/kits/brutalista/elementos/QuadroCor.tsx +0 -14
- package/kits/brutalista/elementos/Som.tsx +0 -38
- package/kits/brutalista/elementos/Terminal.tsx +0 -25
- package/kits/brutalista/elementos/base.ts +0 -71
- package/kits/brutalista/elementos/index.ts +0 -18
- package/kits/brutalista/exemplos/fotos/foto-02.jpg +0 -0
- package/kits/brutalista/exemplos/fotos/foto-03.jpg +0 -0
- package/kits/brutalista/exemplos/fotos/foto-05.jpg +0 -0
- package/kits/brutalista/exemplos/fotos/foto-07.jpg +0 -0
- package/kits/brutalista/exemplos/fotos/foto-08.jpg +0 -0
- package/kits/brutalista/exemplos/logo-bloco.svg +0 -1
- package/kits/brutalista/exemplos/plano.json +0 -52
- package/kits/brutalista/exemplos/roteiro.md +0 -19
- package/kits/brutalista/preview.tsx +0 -20
- package/kits/brutalista/receita.json +0 -195
- package/kits/brutalista/regras/area-segura.md +0 -18
- package/kits/brutalista/regras/cor.md +0 -12
- package/kits/brutalista/regras/movimento.md +0 -16
- package/kits/brutalista/regras/ritmo.md +0 -16
- package/kits/brutalista/regras/som.md +0 -21
- package/kits/brutalista/regras/tipografia.md +0 -16
- package/kits/campos-de-cor/assets/ASSETS.md +0 -19
- package/kits/campos-de-cor/elementos/AssinaturaMarca.tsx +0 -18
- package/kits/campos-de-cor/elementos/Asterisco.tsx +0 -26
- package/kits/campos-de-cor/elementos/Camera.tsx +0 -23
- package/kits/campos-de-cor/elementos/CampoDeCor.tsx +0 -39
- package/kits/campos-de-cor/elementos/Cena.tsx +0 -46
- package/kits/campos-de-cor/elementos/FitaDeTexto.tsx +0 -24
- package/kits/campos-de-cor/elementos/FormaGeometrica.tsx +0 -37
- package/kits/campos-de-cor/elementos/Fundo.tsx +0 -11
- package/kits/campos-de-cor/elementos/LegendaItalica.tsx +0 -12
- package/kits/campos-de-cor/elementos/ListaRegua.tsx +0 -30
- package/kits/campos-de-cor/elementos/Montagem.tsx +0 -62
- package/kits/campos-de-cor/elementos/PalavraGigante.tsx +0 -44
- package/kits/campos-de-cor/elementos/Som.tsx +0 -39
- package/kits/campos-de-cor/elementos/base.ts +0 -87
- package/kits/campos-de-cor/elementos/index.ts +0 -17
- package/kits/campos-de-cor/exemplos/logo-pulso.svg +0 -1
- package/kits/campos-de-cor/exemplos/plano.json +0 -258
- package/kits/campos-de-cor/exemplos/roteiro.md +0 -19
- package/kits/campos-de-cor/preview.tsx +0 -12
- package/kits/campos-de-cor/receita.json +0 -174
- package/kits/campos-de-cor/regras/area-segura.md +0 -15
- package/kits/campos-de-cor/regras/cor.md +0 -14
- package/kits/campos-de-cor/regras/movimento.md +0 -15
- package/kits/campos-de-cor/regras/ritmo.md +0 -15
- package/kits/campos-de-cor/regras/som.md +0 -18
- package/kits/campos-de-cor/regras/tipografia.md +0 -13
- package/kits/cartaz-cinetico/assets/ASSETS.md +0 -22
- package/kits/cartaz-cinetico/elementos/AssinaturaMarca.tsx +0 -31
- package/kits/cartaz-cinetico/elementos/CartazPalavra.tsx +0 -40
- package/kits/cartaz-cinetico/elementos/Cena.tsx +0 -41
- package/kits/cartaz-cinetico/elementos/CirculoPoster.tsx +0 -22
- package/kits/cartaz-cinetico/elementos/EcoPalavra.tsx +0 -27
- package/kits/cartaz-cinetico/elementos/Fundo.tsx +0 -16
- package/kits/cartaz-cinetico/elementos/Montagem.tsx +0 -59
- package/kits/cartaz-cinetico/elementos/PilhaCartaz.tsx +0 -40
- package/kits/cartaz-cinetico/elementos/RoletaPalavras.tsx +0 -30
- package/kits/cartaz-cinetico/elementos/Selo.tsx +0 -25
- package/kits/cartaz-cinetico/elementos/Som.tsx +0 -38
- package/kits/cartaz-cinetico/elementos/base.ts +0 -72
- package/kits/cartaz-cinetico/elementos/index.ts +0 -16
- package/kits/cartaz-cinetico/exemplos/logo-feira.svg +0 -1
- package/kits/cartaz-cinetico/exemplos/plano.json +0 -55
- package/kits/cartaz-cinetico/exemplos/roteiro.md +0 -20
- package/kits/cartaz-cinetico/preview.tsx +0 -16
- package/kits/cartaz-cinetico/receita.json +0 -209
- package/kits/cartaz-cinetico/regras/area-segura.md +0 -19
- package/kits/cartaz-cinetico/regras/cor.md +0 -13
- package/kits/cartaz-cinetico/regras/movimento.md +0 -16
- package/kits/cartaz-cinetico/regras/ritmo.md +0 -17
- package/kits/cartaz-cinetico/regras/som.md +0 -21
- package/kits/cartaz-cinetico/regras/tipografia.md +0 -16
- package/kits/colagem/assets/ASSETS.md +0 -25
- package/kits/colagem/elementos/AssinaturaMarca.tsx +0 -17
- package/kits/colagem/elementos/Camera.tsx +0 -21
- package/kits/colagem/elementos/Cena.tsx +0 -36
- package/kits/colagem/elementos/FitaAdesiva.tsx +0 -11
- package/kits/colagem/elementos/FotoRasgada.tsx +0 -26
- package/kits/colagem/elementos/Fundo.tsx +0 -16
- package/kits/colagem/elementos/ListaRecortes.tsx +0 -23
- package/kits/colagem/elementos/Montagem.tsx +0 -56
- package/kits/colagem/elementos/NotaDatilografada.tsx +0 -35
- package/kits/colagem/elementos/RecorteForma.tsx +0 -23
- package/kits/colagem/elementos/Som.tsx +0 -30
- package/kits/colagem/elementos/TituloRecorte.tsx +0 -34
- package/kits/colagem/elementos/base.ts +0 -77
- package/kits/colagem/elementos/index.ts +0 -17
- package/kits/colagem/elementos/rasgado.ts +0 -16
- package/kits/colagem/exemplos/fotos/foto-01.jpg +0 -0
- package/kits/colagem/exemplos/fotos/foto-02.jpg +0 -0
- package/kits/colagem/exemplos/plano.json +0 -228
- package/kits/colagem/exemplos/roteiro.md +0 -20
- package/kits/colagem/preview.tsx +0 -13
- package/kits/colagem/receita.json +0 -171
- package/kits/colagem/regras/area-segura.md +0 -15
- package/kits/colagem/regras/cor.md +0 -16
- package/kits/colagem/regras/movimento.md +0 -18
- package/kits/colagem/regras/ritmo.md +0 -15
- package/kits/colagem/regras/som.md +0 -18
- package/kits/colagem/regras/tipografia.md +0 -18
- package/kits/contagem/assets/ASSETS.md +0 -20
- package/kits/contagem/elementos/AnelTempo.tsx +0 -36
- package/kits/contagem/elementos/BarraDias.tsx +0 -41
- package/kits/contagem/elementos/CarimboData.tsx +0 -37
- package/kits/contagem/elementos/Cena.tsx +0 -39
- package/kits/contagem/elementos/Fundo.tsx +0 -27
- package/kits/contagem/elementos/Montagem.tsx +0 -58
- package/kits/contagem/elementos/NumeroRolando.tsx +0 -49
- package/kits/contagem/elementos/RelogioFlip.tsx +0 -51
- package/kits/contagem/elementos/Som.tsx +0 -41
- package/kits/contagem/elementos/base.ts +0 -79
- package/kits/contagem/elementos/index.ts +0 -14
- package/kits/contagem/exemplos/plano.json +0 -48
- package/kits/contagem/exemplos/roteiro.md +0 -19
- package/kits/contagem/preview.tsx +0 -9
- package/kits/contagem/receita.json +0 -21
- package/kits/contagem/regras/area-segura.md +0 -16
- package/kits/contagem/regras/cor.md +0 -14
- package/kits/contagem/regras/movimento.md +0 -23
- package/kits/contagem/regras/ritmo.md +0 -15
- package/kits/contagem/regras/som.md +0 -21
- package/kits/contagem/regras/tipografia.md +0 -16
- package/kits/convite-evento/assets/ASSETS.md +0 -19
- package/kits/convite-evento/elementos/BotaoInscricao.tsx +0 -36
- package/kits/convite-evento/elementos/Cena.tsx +0 -39
- package/kits/convite-evento/elementos/DataGigante.tsx +0 -37
- package/kits/convite-evento/elementos/Fundo.tsx +0 -30
- package/kits/convite-evento/elementos/IngressoBilhete.tsx +0 -40
- package/kits/convite-evento/elementos/LugarGigante.tsx +0 -38
- package/kits/convite-evento/elementos/Montagem.tsx +0 -59
- package/kits/convite-evento/elementos/SeloRotativo.tsx +0 -32
- package/kits/convite-evento/elementos/Som.tsx +0 -40
- package/kits/convite-evento/elementos/TituloEvento.tsx +0 -33
- package/kits/convite-evento/elementos/base.ts +0 -82
- package/kits/convite-evento/elementos/index.ts +0 -15
- package/kits/convite-evento/exemplos/plano.json +0 -49
- package/kits/convite-evento/exemplos/roteiro.md +0 -19
- package/kits/convite-evento/preview.tsx +0 -9
- package/kits/convite-evento/receita.json +0 -21
- package/kits/convite-evento/regras/area-segura.md +0 -20
- package/kits/convite-evento/regras/cor.md +0 -13
- package/kits/convite-evento/regras/movimento.md +0 -20
- package/kits/convite-evento/regras/ritmo.md +0 -15
- package/kits/convite-evento/regras/som.md +0 -20
- package/kits/convite-evento/regras/tipografia.md +0 -18
- package/kits/corte-podcast/assets/ASSETS.md +0 -19
- package/kits/corte-podcast/elementos/BarraEpisodio.tsx +0 -43
- package/kits/corte-podcast/elementos/CartaoConvidado.tsx +0 -32
- package/kits/corte-podcast/elementos/Cena.tsx +0 -41
- package/kits/corte-podcast/elementos/CitacaoGrande.tsx +0 -42
- package/kits/corte-podcast/elementos/Fundo.tsx +0 -27
- package/kits/corte-podcast/elementos/LegendaKaraoke.tsx +0 -32
- package/kits/corte-podcast/elementos/Montagem.tsx +0 -59
- package/kits/corte-podcast/elementos/OndaAudio.tsx +0 -41
- package/kits/corte-podcast/elementos/SeloEpisodio.tsx +0 -33
- package/kits/corte-podcast/elementos/Som.tsx +0 -40
- package/kits/corte-podcast/elementos/base.ts +0 -82
- package/kits/corte-podcast/elementos/index.ts +0 -15
- package/kits/corte-podcast/exemplos/plano.json +0 -62
- package/kits/corte-podcast/exemplos/roteiro.md +0 -20
- package/kits/corte-podcast/preview.tsx +0 -9
- package/kits/corte-podcast/receita.json +0 -21
- package/kits/corte-podcast/regras/area-segura.md +0 -18
- package/kits/corte-podcast/regras/cor.md +0 -15
- package/kits/corte-podcast/regras/movimento.md +0 -18
- package/kits/corte-podcast/regras/ritmo.md +0 -16
- package/kits/corte-podcast/regras/som.md +0 -20
- package/kits/corte-podcast/regras/tipografia.md +0 -16
- package/kits/cubos/assets/ASSETS.md +0 -21
- package/kits/cubos/elementos/AssinaturaMarca.tsx +0 -29
- package/kits/cubos/elementos/Cena.tsx +0 -48
- package/kits/cubos/elementos/Cubo.tsx +0 -40
- package/kits/cubos/elementos/CuboGiratorio.tsx +0 -37
- package/kits/cubos/elementos/Fundo.tsx +0 -15
- package/kits/cubos/elementos/Montagem.tsx +0 -67
- package/kits/cubos/elementos/MontagemDeCubos.tsx +0 -58
- package/kits/cubos/elementos/PlacaBloco.tsx +0 -29
- package/kits/cubos/elementos/Som.tsx +0 -33
- package/kits/cubos/elementos/TorreDeCubos.tsx +0 -39
- package/kits/cubos/elementos/base.ts +0 -97
- package/kits/cubos/elementos/index.ts +0 -15
- package/kits/cubos/exemplos/logo-encaixa.svg +0 -1
- package/kits/cubos/exemplos/plano.json +0 -45
- package/kits/cubos/exemplos/roteiro.md +0 -20
- package/kits/cubos/preview.tsx +0 -12
- package/kits/cubos/receita.json +0 -151
- package/kits/cubos/regras/area-segura.md +0 -18
- package/kits/cubos/regras/cor.md +0 -23
- package/kits/cubos/regras/movimento.md +0 -17
- package/kits/cubos/regras/ritmo.md +0 -14
- package/kits/cubos/regras/som.md +0 -20
- package/kits/cubos/regras/tipografia.md +0 -15
- package/kits/dashboard-dados/assets/ASSETS.md +0 -18
- package/kits/dashboard-dados/elementos/AssinaturaMarca.tsx +0 -19
- package/kits/dashboard-dados/elementos/BarrasCrescendo.tsx +0 -27
- package/kits/dashboard-dados/elementos/Camera.tsx +0 -23
- package/kits/dashboard-dados/elementos/Cena.tsx +0 -46
- package/kits/dashboard-dados/elementos/Fundo.tsx +0 -12
- package/kits/dashboard-dados/elementos/LinhaTendencia.tsx +0 -29
- package/kits/dashboard-dados/elementos/Montagem.tsx +0 -60
- package/kits/dashboard-dados/elementos/NumeroGigante.tsx +0 -21
- package/kits/dashboard-dados/elementos/RankingBarras.tsx +0 -27
- package/kits/dashboard-dados/elementos/RoscaDados.tsx +0 -39
- package/kits/dashboard-dados/elementos/Som.tsx +0 -39
- package/kits/dashboard-dados/elementos/base.ts +0 -87
- package/kits/dashboard-dados/elementos/index.ts +0 -16
- package/kits/dashboard-dados/exemplos/logo-radar.svg +0 -1
- package/kits/dashboard-dados/exemplos/plano.json +0 -325
- package/kits/dashboard-dados/exemplos/roteiro.md +0 -20
- package/kits/dashboard-dados/preview.tsx +0 -12
- package/kits/dashboard-dados/receita.json +0 -173
- package/kits/dashboard-dados/regras/area-segura.md +0 -13
- package/kits/dashboard-dados/regras/cor.md +0 -17
- package/kits/dashboard-dados/regras/movimento.md +0 -17
- package/kits/dashboard-dados/regras/ritmo.md +0 -14
- package/kits/dashboard-dados/regras/som.md +0 -18
- package/kits/dashboard-dados/regras/tipografia.md +0 -16
- package/kits/depoimento/assets/ASSETS.md +0 -20
- package/kits/depoimento/elementos/Avatar.tsx +0 -37
- package/kits/depoimento/elementos/CartaoDepoimento.tsx +0 -69
- package/kits/depoimento/elementos/Cena.tsx +0 -39
- package/kits/depoimento/elementos/Estrelas.tsx +0 -34
- package/kits/depoimento/elementos/FaixaAvatares.tsx +0 -41
- package/kits/depoimento/elementos/Fundo.tsx +0 -23
- package/kits/depoimento/elementos/Montagem.tsx +0 -60
- package/kits/depoimento/elementos/NotaGigante.tsx +0 -38
- package/kits/depoimento/elementos/PilhaCartoes.tsx +0 -37
- package/kits/depoimento/elementos/SeloVerificado.tsx +0 -29
- package/kits/depoimento/elementos/Som.tsx +0 -41
- package/kits/depoimento/elementos/base.ts +0 -83
- package/kits/depoimento/elementos/index.ts +0 -16
- package/kits/depoimento/exemplos/plano.json +0 -57
- package/kits/depoimento/exemplos/roteiro.md +0 -19
- package/kits/depoimento/preview.tsx +0 -9
- package/kits/depoimento/receita.json +0 -21
- package/kits/depoimento/regras/area-segura.md +0 -17
- package/kits/depoimento/regras/cor.md +0 -16
- package/kits/depoimento/regras/movimento.md +0 -20
- package/kits/depoimento/regras/ritmo.md +0 -15
- package/kits/depoimento/regras/som.md +0 -21
- package/kits/depoimento/regras/tipografia.md +0 -17
- package/kits/infografico/assets/ASSETS.md +0 -19
- package/kits/infografico/elementos/Anotacao.tsx +0 -34
- package/kits/infografico/elementos/CadeiaPassos.tsx +0 -49
- package/kits/infografico/elementos/Cena.tsx +0 -39
- package/kits/infografico/elementos/Fundo.tsx +0 -23
- package/kits/infografico/elementos/GraficoBarras.tsx +0 -41
- package/kits/infografico/elementos/Icone.tsx +0 -35
- package/kits/infografico/elementos/Montagem.tsx +0 -60
- package/kits/infografico/elementos/NoProcesso.tsx +0 -33
- package/kits/infografico/elementos/NumeroDestaque.tsx +0 -35
- package/kits/infografico/elementos/SetaCurva.tsx +0 -33
- package/kits/infografico/elementos/Som.tsx +0 -40
- package/kits/infografico/elementos/base.ts +0 -80
- package/kits/infografico/elementos/index.ts +0 -16
- package/kits/infografico/exemplos/plano.json +0 -49
- package/kits/infografico/exemplos/roteiro.md +0 -19
- package/kits/infografico/preview.tsx +0 -9
- package/kits/infografico/receita.json +0 -21
- package/kits/infografico/regras/area-segura.md +0 -17
- package/kits/infografico/regras/cor.md +0 -15
- package/kits/infografico/regras/movimento.md +0 -20
- package/kits/infografico/regras/ritmo.md +0 -15
- package/kits/infografico/regras/som.md +0 -20
- package/kits/infografico/regras/tipografia.md +0 -16
- package/kits/isometrico/assets/ASSETS.md +0 -18
- package/kits/isometrico/elementos/AssinaturaMarca.tsx +0 -24
- package/kits/isometrico/elementos/BlocosMontando.tsx +0 -36
- package/kits/isometrico/elementos/Camera.tsx +0 -23
- package/kits/isometrico/elementos/Cena.tsx +0 -46
- package/kits/isometrico/elementos/CidadeDeDados.tsx +0 -33
- package/kits/isometrico/elementos/Fundo.tsx +0 -13
- package/kits/isometrico/elementos/LegendaPlaca.tsx +0 -18
- package/kits/isometrico/elementos/Montagem.tsx +0 -60
- package/kits/isometrico/elementos/RedeDeBlocos.tsx +0 -41
- package/kits/isometrico/elementos/Som.tsx +0 -39
- package/kits/isometrico/elementos/TextoNoChao.tsx +0 -28
- package/kits/isometrico/elementos/base.ts +0 -86
- package/kits/isometrico/elementos/index.ts +0 -16
- package/kits/isometrico/exemplos/logo-nodo.svg +0 -1
- package/kits/isometrico/exemplos/plano.json +0 -433
- package/kits/isometrico/exemplos/roteiro.md +0 -20
- package/kits/isometrico/preview.tsx +0 -12
- package/kits/isometrico/receita.json +0 -155
- package/kits/isometrico/regras/area-segura.md +0 -13
- package/kits/isometrico/regras/cor.md +0 -18
- package/kits/isometrico/regras/movimento.md +0 -16
- package/kits/isometrico/regras/ritmo.md +0 -13
- package/kits/isometrico/regras/som.md +0 -18
- package/kits/isometrico/regras/tipografia.md +0 -12
- package/kits/jornal/assets/ASSETS.md +0 -24
- package/kits/jornal/elementos/AssinaturaMarca.tsx +0 -25
- package/kits/jornal/elementos/Cabecalho.tsx +0 -21
- package/kits/jornal/elementos/Carimbo.tsx +0 -18
- package/kits/jornal/elementos/Cena.tsx +0 -41
- package/kits/jornal/elementos/Colunas.tsx +0 -24
- package/kits/jornal/elementos/FotoMeiaTinta.tsx +0 -20
- package/kits/jornal/elementos/Fundo.tsx +0 -18
- package/kits/jornal/elementos/JornalGirando.tsx +0 -27
- package/kits/jornal/elementos/Manchete.tsx +0 -30
- package/kits/jornal/elementos/Montagem.tsx +0 -61
- package/kits/jornal/elementos/Som.tsx +0 -38
- package/kits/jornal/elementos/Ticker.tsx +0 -19
- package/kits/jornal/elementos/base.ts +0 -76
- package/kits/jornal/elementos/index.ts +0 -17
- package/kits/jornal/exemplos/fotos/foto-03.jpg +0 -0
- package/kits/jornal/exemplos/fotos/foto-07.jpg +0 -0
- package/kits/jornal/exemplos/logo-esquina.svg +0 -1
- package/kits/jornal/exemplos/plano.json +0 -48
- package/kits/jornal/exemplos/roteiro.md +0 -19
- package/kits/jornal/preview.tsx +0 -17
- package/kits/jornal/receita.json +0 -170
- package/kits/jornal/regras/area-segura.md +0 -19
- package/kits/jornal/regras/cor.md +0 -14
- package/kits/jornal/regras/movimento.md +0 -16
- package/kits/jornal/regras/ritmo.md +0 -15
- package/kits/jornal/regras/som.md +0 -21
- package/kits/jornal/regras/tipografia.md +0 -17
- package/kits/legenda-viva/assets/ASSETS.md +0 -23
- package/kits/legenda-viva/elementos/AssinaturaMarca.tsx +0 -29
- package/kits/legenda-viva/elementos/Cena.tsx +0 -41
- package/kits/legenda-viva/elementos/ChipTema.tsx +0 -19
- package/kits/legenda-viva/elementos/Fundo.tsx +0 -6
- package/kits/legenda-viva/elementos/LegendaCaixa.tsx +0 -36
- package/kits/legenda-viva/elementos/LegendaPalavra.tsx +0 -32
- package/kits/legenda-viva/elementos/Montagem.tsx +0 -59
- package/kits/legenda-viva/elementos/OndaVoz.tsx +0 -23
- package/kits/legenda-viva/elementos/PalavraGigante.tsx +0 -18
- package/kits/legenda-viva/elementos/QuadroFalante.tsx +0 -17
- package/kits/legenda-viva/elementos/Som.tsx +0 -38
- package/kits/legenda-viva/elementos/base.ts +0 -73
- package/kits/legenda-viva/elementos/index.ts +0 -16
- package/kits/legenda-viva/exemplos/fotos/foto-01.jpg +0 -0
- package/kits/legenda-viva/exemplos/fotos/foto-02.jpg +0 -0
- package/kits/legenda-viva/exemplos/fotos/foto-03.jpg +0 -0
- package/kits/legenda-viva/exemplos/fotos/foto-05.jpg +0 -0
- package/kits/legenda-viva/exemplos/logo-dica.svg +0 -1
- package/kits/legenda-viva/exemplos/plano.json +0 -45
- package/kits/legenda-viva/exemplos/roteiro.md +0 -18
- package/kits/legenda-viva/preview.tsx +0 -19
- package/kits/legenda-viva/receita.json +0 -171
- package/kits/legenda-viva/regras/area-segura.md +0 -19
- package/kits/legenda-viva/regras/cor.md +0 -14
- package/kits/legenda-viva/regras/movimento.md +0 -16
- package/kits/legenda-viva/regras/ritmo.md +0 -15
- package/kits/legenda-viva/regras/som.md +0 -21
- package/kits/legenda-viva/regras/tipografia.md +0 -16
- package/kits/luxo/assets/ASSETS.md +0 -20
- package/kits/luxo/elementos/Cena.tsx +0 -36
- package/kits/luxo/elementos/ConviteOuro.tsx +0 -34
- package/kits/luxo/elementos/Fundo.tsx +0 -26
- package/kits/luxo/elementos/LegendaFina.tsx +0 -25
- package/kits/luxo/elementos/LinhaOuro.tsx +0 -24
- package/kits/luxo/elementos/MolduraArco.tsx +0 -36
- package/kits/luxo/elementos/Monograma.tsx +0 -35
- package/kits/luxo/elementos/Montagem.tsx +0 -59
- package/kits/luxo/elementos/Som.tsx +0 -40
- package/kits/luxo/elementos/TituloSerifa.tsx +0 -35
- package/kits/luxo/elementos/base.ts +0 -85
- package/kits/luxo/elementos/index.ts +0 -15
- package/kits/luxo/exemplos/fotos/foto-07.jpg +0 -0
- package/kits/luxo/exemplos/fotos/foto-08.jpg +0 -0
- package/kits/luxo/exemplos/plano.json +0 -145
- package/kits/luxo/exemplos/roteiro.md +0 -18
- package/kits/luxo/preview.tsx +0 -13
- package/kits/luxo/receita.json +0 -18
- package/kits/luxo/regras/area-segura.md +0 -16
- package/kits/luxo/regras/cor.md +0 -16
- package/kits/luxo/regras/movimento.md +0 -19
- package/kits/luxo/regras/ritmo.md +0 -14
- package/kits/luxo/regras/som.md +0 -21
- package/kits/luxo/regras/tipografia.md +0 -17
- package/kits/mapa/assets/ASSETS.md +0 -20
- package/kits/mapa/elementos/CartaoEndereco.tsx +0 -40
- package/kits/mapa/elementos/Cena.tsx +0 -41
- package/kits/mapa/elementos/ChipTempo.tsx +0 -29
- package/kits/mapa/elementos/Fundo.tsx +0 -25
- package/kits/mapa/elementos/MapaBase.tsx +0 -63
- package/kits/mapa/elementos/Montagem.tsx +0 -59
- package/kits/mapa/elementos/Pino.tsx +0 -38
- package/kits/mapa/elementos/RotaAnimada.tsx +0 -38
- package/kits/mapa/elementos/Som.tsx +0 -41
- package/kits/mapa/elementos/TituloLocal.tsx +0 -38
- package/kits/mapa/elementos/base.ts +0 -89
- package/kits/mapa/elementos/index.ts +0 -15
- package/kits/mapa/exemplos/plano.json +0 -48
- package/kits/mapa/exemplos/roteiro.md +0 -19
- package/kits/mapa/preview.tsx +0 -9
- package/kits/mapa/receita.json +0 -21
- package/kits/mapa/regras/area-segura.md +0 -15
- package/kits/mapa/regras/cor.md +0 -18
- package/kits/mapa/regras/movimento.md +0 -21
- package/kits/mapa/regras/ritmo.md +0 -15
- package/kits/mapa/regras/som.md +0 -21
- package/kits/mapa/regras/tipografia.md +0 -16
- package/kits/massinha/assets/ASSETS.md +0 -18
- package/kits/massinha/elementos/AssinaturaMarca.tsx +0 -20
- package/kits/massinha/elementos/BichinhoMassa.tsx +0 -30
- package/kits/massinha/elementos/BolasMassa.tsx +0 -25
- package/kits/massinha/elementos/Camera.tsx +0 -21
- package/kits/massinha/elementos/Cena.tsx +0 -36
- package/kits/massinha/elementos/FormaMassa.tsx +0 -23
- package/kits/massinha/elementos/Fundo.tsx +0 -12
- package/kits/massinha/elementos/ListaMassa.tsx +0 -19
- package/kits/massinha/elementos/Montagem.tsx +0 -56
- package/kits/massinha/elementos/Overlay.tsx +0 -11
- package/kits/massinha/elementos/PlacaMassa.tsx +0 -24
- package/kits/massinha/elementos/Som.tsx +0 -30
- package/kits/massinha/elementos/TituloMassa.tsx +0 -31
- package/kits/massinha/elementos/base.ts +0 -79
- package/kits/massinha/elementos/index.ts +0 -17
- package/kits/massinha/exemplos/plano.json +0 -220
- package/kits/massinha/exemplos/roteiro.md +0 -20
- package/kits/massinha/preview.tsx +0 -12
- package/kits/massinha/receita.json +0 -170
- package/kits/massinha/regras/area-segura.md +0 -15
- package/kits/massinha/regras/cor.md +0 -18
- package/kits/massinha/regras/movimento.md +0 -17
- package/kits/massinha/regras/ritmo.md +0 -15
- package/kits/massinha/regras/som.md +0 -17
- package/kits/massinha/regras/tipografia.md +0 -18
- package/kits/memphis/assets/ASSETS.md +0 -18
- package/kits/memphis/elementos/AssinaturaMarca.tsx +0 -20
- package/kits/memphis/elementos/Camera.tsx +0 -21
- package/kits/memphis/elementos/CartaoMemphis.tsx +0 -16
- package/kits/memphis/elementos/Cena.tsx +0 -36
- package/kits/memphis/elementos/FitaMarquee.tsx +0 -21
- package/kits/memphis/elementos/FormasMemphis.tsx +0 -46
- package/kits/memphis/elementos/Fundo.tsx +0 -15
- package/kits/memphis/elementos/ListaPilulas.tsx +0 -17
- package/kits/memphis/elementos/Montagem.tsx +0 -56
- package/kits/memphis/elementos/NumeroGigante.tsx +0 -19
- package/kits/memphis/elementos/Overlay.tsx +0 -23
- package/kits/memphis/elementos/Som.tsx +0 -30
- package/kits/memphis/elementos/TituloMemphis.tsx +0 -28
- package/kits/memphis/elementos/base.ts +0 -78
- package/kits/memphis/elementos/index.ts +0 -17
- package/kits/memphis/exemplos/plano.json +0 -314
- package/kits/memphis/exemplos/roteiro.md +0 -20
- package/kits/memphis/preview.tsx +0 -12
- package/kits/memphis/receita.json +0 -174
- package/kits/memphis/regras/area-segura.md +0 -14
- package/kits/memphis/regras/cor.md +0 -17
- package/kits/memphis/regras/movimento.md +0 -18
- package/kits/memphis/regras/ritmo.md +0 -15
- package/kits/memphis/regras/som.md +0 -18
- package/kits/memphis/regras/tipografia.md +0 -19
- package/kits/metal-liquido/assets/ASSETS.md +0 -21
- package/kits/metal-liquido/elementos/AnelCromo.tsx +0 -28
- package/kits/metal-liquido/elementos/AssinaturaMarca.tsx +0 -26
- package/kits/metal-liquido/elementos/BolhasCromadas.tsx +0 -53
- package/kits/metal-liquido/elementos/Cena.tsx +0 -48
- package/kits/metal-liquido/elementos/EsferaCromo.tsx +0 -32
- package/kits/metal-liquido/elementos/Fundo.tsx +0 -20
- package/kits/metal-liquido/elementos/Montagem.tsx +0 -67
- package/kits/metal-liquido/elementos/PilulaCromo.tsx +0 -23
- package/kits/metal-liquido/elementos/Som.tsx +0 -33
- package/kits/metal-liquido/elementos/TituloCromo.tsx +0 -32
- package/kits/metal-liquido/elementos/base.ts +0 -94
- package/kits/metal-liquido/elementos/index.ts +0 -15
- package/kits/metal-liquido/exemplos/logo-mercurio.svg +0 -1
- package/kits/metal-liquido/exemplos/plano.json +0 -48
- package/kits/metal-liquido/exemplos/roteiro.md +0 -20
- package/kits/metal-liquido/preview.tsx +0 -12
- package/kits/metal-liquido/receita.json +0 -173
- package/kits/metal-liquido/regras/area-segura.md +0 -16
- package/kits/metal-liquido/regras/cor.md +0 -23
- package/kits/metal-liquido/regras/movimento.md +0 -18
- package/kits/metal-liquido/regras/ritmo.md +0 -14
- package/kits/metal-liquido/regras/som.md +0 -20
- package/kits/metal-liquido/regras/tipografia.md +0 -15
- package/kits/minimal/assets/ASSETS.md +0 -19
- package/kits/minimal/elementos/Cena.tsx +0 -39
- package/kits/minimal/elementos/FormaMorph.tsx +0 -44
- package/kits/minimal/elementos/FraseUnica.tsx +0 -33
- package/kits/minimal/elementos/Fundo.tsx +0 -20
- package/kits/minimal/elementos/LinhaFina.tsx +0 -24
- package/kits/minimal/elementos/Montagem.tsx +0 -59
- package/kits/minimal/elementos/NumeroSolo.tsx +0 -33
- package/kits/minimal/elementos/PontoMovel.tsx +0 -27
- package/kits/minimal/elementos/RodapeMinimal.tsx +0 -26
- package/kits/minimal/elementos/Som.tsx +0 -40
- package/kits/minimal/elementos/base.ts +0 -80
- package/kits/minimal/elementos/index.ts +0 -15
- package/kits/minimal/exemplos/plano.json +0 -48
- package/kits/minimal/exemplos/roteiro.md +0 -19
- package/kits/minimal/preview.tsx +0 -9
- package/kits/minimal/receita.json +0 -21
- package/kits/minimal/regras/area-segura.md +0 -15
- package/kits/minimal/regras/cor.md +0 -12
- package/kits/minimal/regras/movimento.md +0 -20
- package/kits/minimal/regras/ritmo.md +0 -15
- package/kits/minimal/regras/som.md +0 -21
- package/kits/minimal/regras/tipografia.md +0 -15
- package/kits/neon-cidade/assets/ASSETS.md +0 -21
- package/kits/neon-cidade/elementos/AssinaturaMarca.tsx +0 -24
- package/kits/neon-cidade/elementos/CaixaLuminosa.tsx +0 -40
- package/kits/neon-cidade/elementos/Cena.tsx +0 -48
- package/kits/neon-cidade/elementos/Chuva.tsx +0 -23
- package/kits/neon-cidade/elementos/FormaNeon.tsx +0 -42
- package/kits/neon-cidade/elementos/Fundo.tsx +0 -18
- package/kits/neon-cidade/elementos/Horizonte.tsx +0 -34
- package/kits/neon-cidade/elementos/LetreiroNeon.tsx +0 -46
- package/kits/neon-cidade/elementos/Montagem.tsx +0 -67
- package/kits/neon-cidade/elementos/Som.tsx +0 -33
- package/kits/neon-cidade/elementos/base.ts +0 -100
- package/kits/neon-cidade/elementos/index.ts +0 -15
- package/kits/neon-cidade/exemplos/logo-fenix.svg +0 -1
- package/kits/neon-cidade/exemplos/plano.json +0 -50
- package/kits/neon-cidade/exemplos/roteiro.md +0 -20
- package/kits/neon-cidade/preview.tsx +0 -12
- package/kits/neon-cidade/receita.json +0 -151
- package/kits/neon-cidade/regras/area-segura.md +0 -18
- package/kits/neon-cidade/regras/cor.md +0 -23
- package/kits/neon-cidade/regras/movimento.md +0 -18
- package/kits/neon-cidade/regras/ritmo.md +0 -14
- package/kits/neon-cidade/regras/som.md +0 -20
- package/kits/neon-cidade/regras/tipografia.md +0 -15
- package/kits/notion-editorial/assets/ASSETS.md +0 -19
- package/kits/notion-editorial/elementos/AssinaturaMarca.tsx +0 -20
- package/kits/notion-editorial/elementos/BlocoNota.tsx +0 -38
- package/kits/notion-editorial/elementos/Camera.tsx +0 -23
- package/kits/notion-editorial/elementos/Cena.tsx +0 -46
- package/kits/notion-editorial/elementos/Diagrama.tsx +0 -29
- package/kits/notion-editorial/elementos/Fundo.tsx +0 -12
- package/kits/notion-editorial/elementos/Montagem.tsx +0 -60
- package/kits/notion-editorial/elementos/PassosNumerados.tsx +0 -23
- package/kits/notion-editorial/elementos/RabiscoIcone.tsx +0 -33
- package/kits/notion-editorial/elementos/Som.tsx +0 -39
- package/kits/notion-editorial/elementos/TextoSerifa.tsx +0 -53
- package/kits/notion-editorial/elementos/base.ts +0 -87
- package/kits/notion-editorial/elementos/index.ts +0 -16
- package/kits/notion-editorial/exemplos/logo-pauta.svg +0 -1
- package/kits/notion-editorial/exemplos/plano.json +0 -254
- package/kits/notion-editorial/exemplos/roteiro.md +0 -20
- package/kits/notion-editorial/preview.tsx +0 -12
- package/kits/notion-editorial/receita.json +0 -165
- package/kits/notion-editorial/regras/area-segura.md +0 -13
- package/kits/notion-editorial/regras/cor.md +0 -15
- package/kits/notion-editorial/regras/movimento.md +0 -16
- package/kits/notion-editorial/regras/ritmo.md +0 -14
- package/kits/notion-editorial/regras/som.md +0 -18
- package/kits/notion-editorial/regras/tipografia.md +0 -15
- package/kits/papel-recortado/assets/ASSETS.md +0 -18
- package/kits/papel-recortado/elementos/CamadaPapel.tsx +0 -81
- package/kits/papel-recortado/elementos/Camera.tsx +0 -28
- package/kits/papel-recortado/elementos/CartaoCamadas.tsx +0 -38
- package/kits/papel-recortado/elementos/Cena.tsx +0 -29
- package/kits/papel-recortado/elementos/EtiquetaPapel.tsx +0 -40
- package/kits/papel-recortado/elementos/Fita.tsx +0 -21
- package/kits/papel-recortado/elementos/FolhaPopUp.tsx +0 -49
- package/kits/papel-recortado/elementos/Fundo.tsx +0 -10
- package/kits/papel-recortado/elementos/LetrasRecortadas.tsx +0 -48
- package/kits/papel-recortado/elementos/MolduraPapel.tsx +0 -12
- package/kits/papel-recortado/elementos/Montagem.tsx +0 -42
- package/kits/papel-recortado/elementos/Som.tsx +0 -30
- package/kits/papel-recortado/elementos/base.ts +0 -51
- package/kits/papel-recortado/elementos/index.ts +0 -15
- package/kits/papel-recortado/exemplos/plano.json +0 -410
- package/kits/papel-recortado/exemplos/roteiro.md +0 -13
- package/kits/papel-recortado/preview.tsx +0 -9
- package/kits/papel-recortado/receita.json +0 -14
- package/kits/papel-recortado/regras/area-segura.md +0 -13
- package/kits/papel-recortado/regras/cor.md +0 -16
- package/kits/papel-recortado/regras/movimento.md +0 -17
- package/kits/papel-recortado/regras/ritmo.md +0 -13
- package/kits/papel-recortado/regras/som.md +0 -17
- package/kits/papel-recortado/regras/tipografia.md +0 -12
- package/kits/pixel/assets/ASSETS.md +0 -18
- package/kits/pixel/elementos/AssinaturaMarca.tsx +0 -18
- package/kits/pixel/elementos/CaixaDialogo.tsx +0 -22
- package/kits/pixel/elementos/Camera.tsx +0 -21
- package/kits/pixel/elementos/Cena.tsx +0 -36
- package/kits/pixel/elementos/ChuvaDeSprites.tsx +0 -15
- package/kits/pixel/elementos/Fundo.tsx +0 -23
- package/kits/pixel/elementos/HudPlacar.tsx +0 -19
- package/kits/pixel/elementos/MenuPixel.tsx +0 -19
- package/kits/pixel/elementos/Montagem.tsx +0 -56
- package/kits/pixel/elementos/Overlay.tsx +0 -14
- package/kits/pixel/elementos/Som.tsx +0 -30
- package/kits/pixel/elementos/Sprite.tsx +0 -33
- package/kits/pixel/elementos/TituloPixel.tsx +0 -31
- package/kits/pixel/elementos/base.ts +0 -79
- package/kits/pixel/elementos/index.ts +0 -17
- package/kits/pixel/exemplos/plano.json +0 -309
- package/kits/pixel/exemplos/roteiro.md +0 -20
- package/kits/pixel/preview.tsx +0 -12
- package/kits/pixel/receita.json +0 -175
- package/kits/pixel/regras/area-segura.md +0 -14
- package/kits/pixel/regras/cor.md +0 -17
- package/kits/pixel/regras/movimento.md +0 -18
- package/kits/pixel/regras/ritmo.md +0 -15
- package/kits/pixel/regras/som.md +0 -18
- package/kits/pixel/regras/tipografia.md +0 -18
- package/kits/pontos-3d/assets/ASSETS.md +0 -21
- package/kits/pontos-3d/elementos/AssinaturaMarca.tsx +0 -23
- package/kits/pontos-3d/elementos/Cena.tsx +0 -48
- package/kits/pontos-3d/elementos/Contador.tsx +0 -32
- package/kits/pontos-3d/elementos/Fundo.tsx +0 -20
- package/kits/pontos-3d/elementos/Montagem.tsx +0 -67
- package/kits/pontos-3d/elementos/NuvemDePontos.tsx +0 -84
- package/kits/pontos-3d/elementos/RotuloPonto.tsx +0 -32
- package/kits/pontos-3d/elementos/Som.tsx +0 -33
- package/kits/pontos-3d/elementos/TextoDePontos.tsx +0 -55
- package/kits/pontos-3d/elementos/TituloSora.tsx +0 -36
- package/kits/pontos-3d/elementos/base.ts +0 -92
- package/kits/pontos-3d/elementos/index.ts +0 -15
- package/kits/pontos-3d/exemplos/logo-malha.svg +0 -1
- package/kits/pontos-3d/exemplos/plano.json +0 -46
- package/kits/pontos-3d/exemplos/roteiro.md +0 -20
- package/kits/pontos-3d/preview.tsx +0 -12
- package/kits/pontos-3d/receita.json +0 -153
- package/kits/pontos-3d/regras/area-segura.md +0 -17
- package/kits/pontos-3d/regras/cor.md +0 -21
- package/kits/pontos-3d/regras/movimento.md +0 -19
- package/kits/pontos-3d/regras/ritmo.md +0 -14
- package/kits/pontos-3d/regras/som.md +0 -20
- package/kits/pontos-3d/regras/tipografia.md +0 -16
- package/kits/produto-3d/assets/ASSETS.md +0 -18
- package/kits/produto-3d/elementos/AssinaturaMarca.tsx +0 -28
- package/kits/produto-3d/elementos/Camera.tsx +0 -23
- package/kits/produto-3d/elementos/Cena.tsx +0 -55
- package/kits/produto-3d/elementos/Fundo.tsx +0 -45
- package/kits/produto-3d/elementos/Montagem.tsx +0 -53
- package/kits/produto-3d/elementos/NumeroDestaque.tsx +0 -35
- package/kits/produto-3d/elementos/Produto3D.tsx +0 -144
- package/kits/produto-3d/elementos/RotuloChamada.tsx +0 -43
- package/kits/produto-3d/elementos/Som.tsx +0 -39
- package/kits/produto-3d/elementos/TituloMinimo.tsx +0 -45
- package/kits/produto-3d/elementos/VarreduraLuz.tsx +0 -22
- package/kits/produto-3d/elementos/base.ts +0 -109
- package/kits/produto-3d/elementos/index.ts +0 -13
- package/kits/produto-3d/exemplos/plano.json +0 -53
- package/kits/produto-3d/exemplos/roteiro.md +0 -15
- package/kits/produto-3d/preview.tsx +0 -9
- package/kits/produto-3d/receita.json +0 -16
- package/kits/produto-3d/regras/area-segura.md +0 -14
- package/kits/produto-3d/regras/cor.md +0 -20
- package/kits/produto-3d/regras/movimento.md +0 -19
- package/kits/produto-3d/regras/ritmo.md +0 -15
- package/kits/produto-3d/regras/som.md +0 -18
- package/kits/produto-3d/regras/tipografia.md +0 -13
- package/kits/quadro-giz/assets/ASSETS.md +0 -18
- package/kits/quadro-giz/elementos/ApagadorVarrendo.tsx +0 -32
- package/kits/quadro-giz/elementos/AssinaturaMarca.tsx +0 -20
- package/kits/quadro-giz/elementos/Camera.tsx +0 -21
- package/kits/quadro-giz/elementos/CartaoGiz.tsx +0 -25
- package/kits/quadro-giz/elementos/Cena.tsx +0 -36
- package/kits/quadro-giz/elementos/ContaNoQuadro.tsx +0 -34
- package/kits/quadro-giz/elementos/DesenhoGiz.tsx +0 -29
- package/kits/quadro-giz/elementos/Fundo.tsx +0 -21
- package/kits/quadro-giz/elementos/ListaGiz.tsx +0 -21
- package/kits/quadro-giz/elementos/Montagem.tsx +0 -56
- package/kits/quadro-giz/elementos/Overlay.tsx +0 -12
- package/kits/quadro-giz/elementos/Som.tsx +0 -30
- package/kits/quadro-giz/elementos/TituloGiz.tsx +0 -29
- package/kits/quadro-giz/elementos/base.ts +0 -78
- package/kits/quadro-giz/elementos/index.ts +0 -17
- package/kits/quadro-giz/elementos/traco.ts +0 -9
- package/kits/quadro-giz/exemplos/plano.json +0 -237
- package/kits/quadro-giz/exemplos/roteiro.md +0 -20
- package/kits/quadro-giz/preview.tsx +0 -12
- package/kits/quadro-giz/receita.json +0 -193
- package/kits/quadro-giz/regras/area-segura.md +0 -15
- package/kits/quadro-giz/regras/cor.md +0 -17
- package/kits/quadro-giz/regras/movimento.md +0 -18
- package/kits/quadro-giz/regras/ritmo.md +0 -16
- package/kits/quadro-giz/regras/som.md +0 -18
- package/kits/quadro-giz/regras/tipografia.md +0 -19
- package/kits/rabisco/assets/ASSETS.md +0 -18
- package/kits/rabisco/elementos/AssinaturaMarca.tsx +0 -21
- package/kits/rabisco/elementos/Bonequinho.tsx +0 -31
- package/kits/rabisco/elementos/Camera.tsx +0 -21
- package/kits/rabisco/elementos/CartaoRabiscado.tsx +0 -27
- package/kits/rabisco/elementos/Cena.tsx +0 -36
- package/kits/rabisco/elementos/Fundo.tsx +0 -17
- package/kits/rabisco/elementos/ListaRabiscada.tsx +0 -23
- package/kits/rabisco/elementos/Montagem.tsx +0 -55
- package/kits/rabisco/elementos/Som.tsx +0 -30
- package/kits/rabisco/elementos/TituloRabisco.tsx +0 -28
- package/kits/rabisco/elementos/TracoDesenhando.tsx +0 -31
- package/kits/rabisco/elementos/base.ts +0 -76
- package/kits/rabisco/elementos/index.ts +0 -16
- package/kits/rabisco/elementos/traco.ts +0 -10
- package/kits/rabisco/exemplos/plano.json +0 -238
- package/kits/rabisco/exemplos/roteiro.md +0 -20
- package/kits/rabisco/preview.tsx +0 -12
- package/kits/rabisco/receita.json +0 -171
- package/kits/rabisco/regras/area-segura.md +0 -14
- package/kits/rabisco/regras/cor.md +0 -15
- package/kits/rabisco/regras/movimento.md +0 -18
- package/kits/rabisco/regras/ritmo.md +0 -15
- package/kits/rabisco/regras/som.md +0 -17
- package/kits/rabisco/regras/tipografia.md +0 -18
- package/kits/retro-70/assets/ASSETS.md +0 -23
- package/kits/retro-70/elementos/ArcoListras.tsx +0 -25
- package/kits/retro-70/elementos/AssinaturaMarca.tsx +0 -21
- package/kits/retro-70/elementos/CartaoData.tsx +0 -24
- package/kits/retro-70/elementos/Cena.tsx +0 -41
- package/kits/retro-70/elementos/FaixaOnda.tsx +0 -27
- package/kits/retro-70/elementos/Flor70.tsx +0 -25
- package/kits/retro-70/elementos/FotoArredondada.tsx +0 -19
- package/kits/retro-70/elementos/Fundo.tsx +0 -11
- package/kits/retro-70/elementos/Montagem.tsx +0 -60
- package/kits/retro-70/elementos/RaiosDeSol.tsx +0 -27
- package/kits/retro-70/elementos/Som.tsx +0 -38
- package/kits/retro-70/elementos/TituloGordo.tsx +0 -28
- package/kits/retro-70/elementos/base.ts +0 -73
- package/kits/retro-70/elementos/index.ts +0 -17
- package/kits/retro-70/exemplos/fotos/foto-02.jpg +0 -0
- package/kits/retro-70/exemplos/fotos/foto-03.jpg +0 -0
- package/kits/retro-70/exemplos/logo-girassol.svg +0 -1
- package/kits/retro-70/exemplos/plano.json +0 -50
- package/kits/retro-70/exemplos/roteiro.md +0 -19
- package/kits/retro-70/preview.tsx +0 -17
- package/kits/retro-70/receita.json +0 -172
- package/kits/retro-70/regras/area-segura.md +0 -20
- package/kits/retro-70/regras/cor.md +0 -14
- package/kits/retro-70/regras/movimento.md +0 -16
- package/kits/retro-70/regras/ritmo.md +0 -15
- package/kits/retro-70/regras/som.md +0 -21
- package/kits/retro-70/regras/tipografia.md +0 -17
- package/kits/revista/assets/ASSETS.md +0 -24
- package/kits/revista/elementos/AssinaturaMarca.tsx +0 -23
- package/kits/revista/elementos/Cena.tsx +0 -41
- package/kits/revista/elementos/CitacaoGrande.tsx +0 -27
- package/kits/revista/elementos/ColagemFotos.tsx +0 -22
- package/kits/revista/elementos/Folio.tsx +0 -19
- package/kits/revista/elementos/FotoSangrando.tsx +0 -24
- package/kits/revista/elementos/Fundo.tsx +0 -11
- package/kits/revista/elementos/Montagem.tsx +0 -59
- package/kits/revista/elementos/PaginaDupla.tsx +0 -36
- package/kits/revista/elementos/Som.tsx +0 -38
- package/kits/revista/elementos/TituloEditorial.tsx +0 -31
- package/kits/revista/elementos/base.ts +0 -76
- package/kits/revista/elementos/index.ts +0 -16
- package/kits/revista/exemplos/fotos/foto-02.jpg +0 -0
- package/kits/revista/exemplos/fotos/foto-03.jpg +0 -0
- package/kits/revista/exemplos/fotos/foto-05.jpg +0 -0
- package/kits/revista/exemplos/fotos/foto-06.jpg +0 -0
- package/kits/revista/exemplos/fotos/foto-07.jpg +0 -0
- package/kits/revista/exemplos/fotos/foto-08.jpg +0 -0
- package/kits/revista/exemplos/logo-linho.svg +0 -1
- package/kits/revista/exemplos/plano.json +0 -44
- package/kits/revista/exemplos/roteiro.md +0 -19
- package/kits/revista/preview.tsx +0 -21
- package/kits/revista/receita.json +0 -168
- package/kits/revista/regras/area-segura.md +0 -19
- package/kits/revista/regras/cor.md +0 -14
- package/kits/revista/regras/movimento.md +0 -15
- package/kits/revista/regras/ritmo.md +0 -15
- package/kits/revista/regras/som.md +0 -21
- package/kits/revista/regras/tipografia.md +0 -17
- package/kits/risografia/assets/ASSETS.md +0 -18
- package/kits/risografia/elementos/AssinaturaMarca.tsx +0 -21
- package/kits/risografia/elementos/BolaReticula.tsx +0 -26
- package/kits/risografia/elementos/Camera.tsx +0 -21
- package/kits/risografia/elementos/Cena.tsx +0 -36
- package/kits/risografia/elementos/FormaRiso.tsx +0 -24
- package/kits/risografia/elementos/Fundo.tsx +0 -12
- package/kits/risografia/elementos/ListaRiso.tsx +0 -22
- package/kits/risografia/elementos/Montagem.tsx +0 -56
- package/kits/risografia/elementos/NumeroRiso.tsx +0 -21
- package/kits/risografia/elementos/Overlay.tsx +0 -18
- package/kits/risografia/elementos/Som.tsx +0 -30
- package/kits/risografia/elementos/TarjaCarimbo.tsx +0 -20
- package/kits/risografia/elementos/TituloRiso.tsx +0 -26
- package/kits/risografia/elementos/base.ts +0 -73
- package/kits/risografia/elementos/index.ts +0 -17
- package/kits/risografia/exemplos/plano.json +0 -209
- package/kits/risografia/exemplos/roteiro.md +0 -20
- package/kits/risografia/preview.tsx +0 -12
- package/kits/risografia/receita.json +0 -169
- package/kits/risografia/regras/area-segura.md +0 -14
- package/kits/risografia/regras/cor.md +0 -12
- package/kits/risografia/regras/movimento.md +0 -18
- package/kits/risografia/regras/ritmo.md +0 -15
- package/kits/risografia/regras/som.md +0 -17
- package/kits/risografia/regras/tipografia.md +0 -18
- package/kits/saas-linear/assets/ASSETS.md +0 -19
- package/kits/saas-linear/elementos/Agenda.tsx +0 -46
- package/kits/saas-linear/elementos/CaixaPrompt.tsx +0 -41
- package/kits/saas-linear/elementos/Camera.tsx +0 -38
- package/kits/saas-linear/elementos/CartoesIntegracao.tsx +0 -57
- package/kits/saas-linear/elementos/Cena.tsx +0 -38
- package/kits/saas-linear/elementos/Cursor.tsx +0 -40
- package/kits/saas-linear/elementos/FraseSerifa.tsx +0 -25
- package/kits/saas-linear/elementos/Fundo.tsx +0 -18
- package/kits/saas-linear/elementos/Marca.tsx +0 -20
- package/kits/saas-linear/elementos/MarcaFinal.tsx +0 -22
- package/kits/saas-linear/elementos/Menu.tsx +0 -46
- package/kits/saas-linear/elementos/Monitor.tsx +0 -28
- package/kits/saas-linear/elementos/Montagem.tsx +0 -67
- package/kits/saas-linear/elementos/Saudacao.tsx +0 -27
- package/kits/saas-linear/elementos/Som.tsx +0 -39
- package/kits/saas-linear/elementos/base.ts +0 -84
- package/kits/saas-linear/elementos/index.ts +0 -21
- package/kits/saas-linear/exemplos/plano.json +0 -459
- package/kits/saas-linear/exemplos/roteiro.md +0 -15
- package/kits/saas-linear/preview.tsx +0 -9
- package/kits/saas-linear/receita.json +0 -32
- package/kits/saas-linear/regras/area-segura.md +0 -17
- package/kits/saas-linear/regras/cor.md +0 -19
- package/kits/saas-linear/regras/movimento.md +0 -20
- package/kits/saas-linear/regras/ritmo.md +0 -14
- package/kits/saas-linear/regras/som.md +0 -16
- package/kits/saas-linear/regras/tipografia.md +0 -17
- package/kits/stripe-ondas/assets/ASSETS.md +0 -18
- package/kits/stripe-ondas/elementos/AssinaturaMarca.tsx +0 -18
- package/kits/stripe-ondas/elementos/Camera.tsx +0 -23
- package/kits/stripe-ondas/elementos/CartaoPagamento.tsx +0 -35
- package/kits/stripe-ondas/elementos/Cena.tsx +0 -46
- package/kits/stripe-ondas/elementos/FaixaDeOndas.tsx +0 -49
- package/kits/stripe-ondas/elementos/Fundo.tsx +0 -11
- package/kits/stripe-ondas/elementos/GraficoOnda.tsx +0 -34
- package/kits/stripe-ondas/elementos/Montagem.tsx +0 -61
- package/kits/stripe-ondas/elementos/PainelCodigo.tsx +0 -36
- package/kits/stripe-ondas/elementos/SelosDeMetodo.tsx +0 -27
- package/kits/stripe-ondas/elementos/Som.tsx +0 -39
- package/kits/stripe-ondas/elementos/TituloLimpo.tsx +0 -27
- package/kits/stripe-ondas/elementos/base.ts +0 -85
- package/kits/stripe-ondas/elementos/index.ts +0 -16
- package/kits/stripe-ondas/exemplos/logo-cais.svg +0 -1
- package/kits/stripe-ondas/exemplos/plano.json +0 -366
- package/kits/stripe-ondas/exemplos/roteiro.md +0 -20
- package/kits/stripe-ondas/preview.tsx +0 -12
- package/kits/stripe-ondas/receita.json +0 -177
- package/kits/stripe-ondas/regras/area-segura.md +0 -16
- package/kits/stripe-ondas/regras/cor.md +0 -17
- package/kits/stripe-ondas/regras/movimento.md +0 -16
- package/kits/stripe-ondas/regras/ritmo.md +0 -14
- package/kits/stripe-ondas/regras/som.md +0 -18
- package/kits/stripe-ondas/regras/tipografia.md +0 -15
- package/kits/suica/assets/ASSETS.md +0 -23
- package/kits/suica/elementos/AssinaturaMarca.tsx +0 -21
- package/kits/suica/elementos/Cena.tsx +0 -41
- package/kits/suica/elementos/DiscoFoto.tsx +0 -20
- package/kits/suica/elementos/Fundo.tsx +0 -16
- package/kits/suica/elementos/GradeFotos.tsx +0 -21
- package/kits/suica/elementos/Indice.tsx +0 -17
- package/kits/suica/elementos/ListaIndice.tsx +0 -25
- package/kits/suica/elementos/Montagem.tsx +0 -60
- package/kits/suica/elementos/NumeroGigante.tsx +0 -21
- package/kits/suica/elementos/Regua.tsx +0 -20
- package/kits/suica/elementos/Som.tsx +0 -38
- package/kits/suica/elementos/TituloGrade.tsx +0 -38
- package/kits/suica/elementos/base.ts +0 -76
- package/kits/suica/elementos/index.ts +0 -17
- package/kits/suica/exemplos/fotos/foto-01.jpg +0 -0
- package/kits/suica/exemplos/fotos/foto-02.jpg +0 -0
- package/kits/suica/exemplos/fotos/foto-03.jpg +0 -0
- package/kits/suica/exemplos/fotos/foto-05.jpg +0 -0
- package/kits/suica/exemplos/fotos/foto-06.jpg +0 -0
- package/kits/suica/exemplos/fotos/foto-07.jpg +0 -0
- package/kits/suica/exemplos/logo-ponto.svg +0 -1
- package/kits/suica/exemplos/plano.json +0 -268
- package/kits/suica/exemplos/roteiro.md +0 -19
- package/kits/suica/preview.tsx +0 -21
- package/kits/suica/receita.json +0 -197
- package/kits/suica/regras/area-segura.md +0 -18
- package/kits/suica/regras/cor.md +0 -13
- package/kits/suica/regras/movimento.md +0 -15
- package/kits/suica/regras/ritmo.md +0 -17
- package/kits/suica/regras/som.md +0 -21
- package/kits/suica/regras/tipografia.md +0 -16
- package/kits/synthwave/assets/ASSETS.md +0 -22
- package/kits/synthwave/elementos/AssinaturaMarca.tsx +0 -26
- package/kits/synthwave/elementos/Cena.tsx +0 -41
- package/kits/synthwave/elementos/Estrelas.tsx +0 -27
- package/kits/synthwave/elementos/Fundo.tsx +0 -20
- package/kits/synthwave/elementos/Montagem.tsx +0 -59
- package/kits/synthwave/elementos/Montanhas.tsx +0 -27
- package/kits/synthwave/elementos/Palmeiras.tsx +0 -30
- package/kits/synthwave/elementos/QuadroHUD.tsx +0 -33
- package/kits/synthwave/elementos/SolListrado.tsx +0 -29
- package/kits/synthwave/elementos/Som.tsx +0 -38
- package/kits/synthwave/elementos/TituloNeon.tsx +0 -30
- package/kits/synthwave/elementos/base.ts +0 -75
- package/kits/synthwave/elementos/index.ts +0 -16
- package/kits/synthwave/exemplos/logo-arcade.svg +0 -1
- package/kits/synthwave/exemplos/plano.json +0 -50
- package/kits/synthwave/exemplos/roteiro.md +0 -19
- package/kits/synthwave/preview.tsx +0 -16
- package/kits/synthwave/receita.json +0 -170
- package/kits/synthwave/regras/area-segura.md +0 -19
- package/kits/synthwave/regras/cor.md +0 -16
- package/kits/synthwave/regras/movimento.md +0 -16
- package/kits/synthwave/regras/ritmo.md +0 -15
- package/kits/synthwave/regras/som.md +0 -21
- package/kits/synthwave/regras/tipografia.md +0 -16
- package/kits/terminal/assets/ASSETS.md +0 -20
- package/kits/terminal/elementos/ArteAscii.tsx +0 -61
- package/kits/terminal/elementos/BarraProgresso.tsx +0 -42
- package/kits/terminal/elementos/BarraStatus.tsx +0 -18
- package/kits/terminal/elementos/BootBios.tsx +0 -41
- package/kits/terminal/elementos/Camera.tsx +0 -23
- package/kits/terminal/elementos/Cena.tsx +0 -25
- package/kits/terminal/elementos/Fundo.tsx +0 -22
- package/kits/terminal/elementos/LinhaComando.tsx +0 -31
- package/kits/terminal/elementos/Monitor.tsx +0 -42
- package/kits/terminal/elementos/Montagem.tsx +0 -52
- package/kits/terminal/elementos/PainelCaixa.tsx +0 -35
- package/kits/terminal/elementos/Som.tsx +0 -32
- package/kits/terminal/elementos/Tela.tsx +0 -25
- package/kits/terminal/elementos/TextoGrande.tsx +0 -35
- package/kits/terminal/elementos/base.ts +0 -67
- package/kits/terminal/elementos/index.ts +0 -16
- package/kits/terminal/exemplos/plano.json +0 -330
- package/kits/terminal/exemplos/roteiro.md +0 -14
- package/kits/terminal/preview.tsx +0 -9
- package/kits/terminal/receita.json +0 -14
- package/kits/terminal/regras/area-segura.md +0 -18
- package/kits/terminal/regras/cor.md +0 -16
- package/kits/terminal/regras/movimento.md +0 -15
- package/kits/terminal/regras/ritmo.md +0 -14
- package/kits/terminal/regras/som.md +0 -17
- package/kits/terminal/regras/tipografia.md +0 -15
- package/kits/tiktok-energia/assets/ASSETS.md +0 -22
- package/kits/tiktok-energia/elementos/AssinaturaMarca.tsx +0 -25
- package/kits/tiktok-energia/elementos/Cena.tsx +0 -48
- package/kits/tiktok-energia/elementos/CorteDeCor.tsx +0 -22
- package/kits/tiktok-energia/elementos/EmojiSticker.tsx +0 -21
- package/kits/tiktok-energia/elementos/FotoSoco.tsx +0 -27
- package/kits/tiktok-energia/elementos/Fundo.tsx +0 -8
- package/kits/tiktok-energia/elementos/Montagem.tsx +0 -67
- package/kits/tiktok-energia/elementos/PalavraSoco.tsx +0 -29
- package/kits/tiktok-energia/elementos/Som.tsx +0 -33
- package/kits/tiktok-energia/elementos/TextoCaixa.tsx +0 -25
- package/kits/tiktok-energia/elementos/base.ts +0 -92
- package/kits/tiktok-energia/elementos/index.ts +0 -15
- package/kits/tiktok-energia/exemplos/fotos/foto-03.jpg +0 -0
- package/kits/tiktok-energia/exemplos/logo-pulo.svg +0 -1
- package/kits/tiktok-energia/exemplos/plano.json +0 -66
- package/kits/tiktok-energia/exemplos/roteiro.md +0 -22
- package/kits/tiktok-energia/preview.tsx +0 -13
- package/kits/tiktok-energia/receita.json +0 -166
- package/kits/tiktok-energia/regras/area-segura.md +0 -19
- package/kits/tiktok-energia/regras/cor.md +0 -20
- package/kits/tiktok-energia/regras/movimento.md +0 -17
- package/kits/tiktok-energia/regras/ritmo.md +0 -15
- package/kits/tiktok-energia/regras/som.md +0 -20
- package/kits/tiktok-energia/regras/tipografia.md +0 -15
- package/kits/tunel/assets/ASSETS.md +0 -21
- package/kits/tunel/elementos/AssinaturaMarca.tsx +0 -22
- package/kits/tunel/elementos/Cena.tsx +0 -48
- package/kits/tunel/elementos/Fundo.tsx +0 -13
- package/kits/tunel/elementos/LinhasDeVelocidade.tsx +0 -25
- package/kits/tunel/elementos/Montagem.tsx +0 -67
- package/kits/tunel/elementos/NumeroGigante.tsx +0 -28
- package/kits/tunel/elementos/PlacaVoadora.tsx +0 -28
- package/kits/tunel/elementos/Som.tsx +0 -33
- package/kits/tunel/elementos/TituloTunel.tsx +0 -32
- package/kits/tunel/elementos/TunelDeFormas.tsx +0 -52
- package/kits/tunel/elementos/base.ts +0 -97
- package/kits/tunel/elementos/index.ts +0 -15
- package/kits/tunel/exemplos/logo-rota21.svg +0 -1
- package/kits/tunel/exemplos/plano.json +0 -51
- package/kits/tunel/exemplos/roteiro.md +0 -20
- package/kits/tunel/preview.tsx +0 -12
- package/kits/tunel/receita.json +0 -153
- package/kits/tunel/regras/area-segura.md +0 -18
- package/kits/tunel/regras/cor.md +0 -21
- package/kits/tunel/regras/movimento.md +0 -17
- package/kits/tunel/regras/ritmo.md +0 -14
- package/kits/tunel/regras/som.md +0 -20
- package/kits/tunel/regras/tipografia.md +0 -15
- package/kits/tutorial-tela/assets/ASSETS.md +0 -20
- package/kits/tutorial-tela/elementos/CameraTela.tsx +0 -29
- package/kits/tutorial-tela/elementos/Cursor.tsx +0 -36
- package/kits/tutorial-tela/elementos/DestaqueCaixa.tsx +0 -17
- package/kits/tutorial-tela/elementos/Fundo.tsx +0 -12
- package/kits/tutorial-tela/elementos/JanelaApp.tsx +0 -81
- package/kits/tutorial-tela/elementos/Montagem.tsx +0 -49
- package/kits/tutorial-tela/elementos/PassoChamada.tsx +0 -22
- package/kits/tutorial-tela/elementos/Som.tsx +0 -41
- package/kits/tutorial-tela/elementos/TeclaAtalho.tsx +0 -29
- package/kits/tutorial-tela/elementos/TituloTela.tsx +0 -30
- package/kits/tutorial-tela/elementos/base.ts +0 -65
- package/kits/tutorial-tela/elementos/index.ts +0 -12
- package/kits/tutorial-tela/exemplos/plano.json +0 -41
- package/kits/tutorial-tela/exemplos/roteiro.md +0 -14
- package/kits/tutorial-tela/preview.tsx +0 -9
- package/kits/tutorial-tela/receita.json +0 -15
- package/kits/tutorial-tela/regras/area-segura.md +0 -13
- package/kits/tutorial-tela/regras/cor.md +0 -17
- package/kits/tutorial-tela/regras/movimento.md +0 -20
- package/kits/tutorial-tela/regras/ritmo.md +0 -24
- package/kits/tutorial-tela/regras/som.md +0 -21
- package/kits/tutorial-tela/regras/tipografia.md +0 -15
- package/kits/ugc-reels/assets/ASSETS.md +0 -22
- package/kits/ugc-reels/elementos/AssinaturaMarca.tsx +0 -28
- package/kits/ugc-reels/elementos/BotaoLink.tsx +0 -24
- package/kits/ugc-reels/elementos/CabecalhoPerfil.tsx +0 -38
- package/kits/ugc-reels/elementos/Cena.tsx +0 -48
- package/kits/ugc-reels/elementos/Comentario.tsx +0 -29
- package/kits/ugc-reels/elementos/Fundo.tsx +0 -8
- package/kits/ugc-reels/elementos/LegendaEmoji.tsx +0 -43
- package/kits/ugc-reels/elementos/Montagem.tsx +0 -69
- package/kits/ugc-reels/elementos/NotaDeMao.tsx +0 -29
- package/kits/ugc-reels/elementos/Reacoes.tsx +0 -26
- package/kits/ugc-reels/elementos/Som.tsx +0 -33
- package/kits/ugc-reels/elementos/VideoCelular.tsx +0 -37
- package/kits/ugc-reels/elementos/base.ts +0 -92
- package/kits/ugc-reels/elementos/index.ts +0 -17
- package/kits/ugc-reels/exemplos/fotos/foto-02.jpg +0 -0
- package/kits/ugc-reels/exemplos/fotos/foto-03.jpg +0 -0
- package/kits/ugc-reels/exemplos/fotos/foto-04.jpg +0 -0
- package/kits/ugc-reels/exemplos/fotos/foto-06.jpg +0 -0
- package/kits/ugc-reels/exemplos/logo-rotina.svg +0 -1
- package/kits/ugc-reels/exemplos/plano.json +0 -54
- package/kits/ugc-reels/exemplos/roteiro.md +0 -20
- package/kits/ugc-reels/preview.tsx +0 -16
- package/kits/ugc-reels/receita.json +0 -147
- package/kits/ugc-reels/regras/area-segura.md +0 -18
- package/kits/ugc-reels/regras/cor.md +0 -22
- package/kits/ugc-reels/regras/movimento.md +0 -19
- package/kits/ugc-reels/regras/ritmo.md +0 -14
- package/kits/ugc-reels/regras/som.md +0 -20
- package/kits/ugc-reels/regras/tipografia.md +0 -16
- package/kits/vercel-mono/assets/ASSETS.md +0 -18
- package/kits/vercel-mono/elementos/AssinaturaMarca.tsx +0 -18
- package/kits/vercel-mono/elementos/Camera.tsx +0 -23
- package/kits/vercel-mono/elementos/Cena.tsx +0 -46
- package/kits/vercel-mono/elementos/FaixaOutline.tsx +0 -25
- package/kits/vercel-mono/elementos/Fundo.tsx +0 -6
- package/kits/vercel-mono/elementos/GradeDeNumeros.tsx +0 -27
- package/kits/vercel-mono/elementos/Montagem.tsx +0 -61
- package/kits/vercel-mono/elementos/PalavraMono.tsx +0 -31
- package/kits/vercel-mono/elementos/Quadro.tsx +0 -28
- package/kits/vercel-mono/elementos/Som.tsx +0 -39
- package/kits/vercel-mono/elementos/TerminalComando.tsx +0 -33
- package/kits/vercel-mono/elementos/TrianguloGigante.tsx +0 -27
- package/kits/vercel-mono/elementos/base.ts +0 -82
- package/kits/vercel-mono/elementos/index.ts +0 -16
- package/kits/vercel-mono/exemplos/logo-vetor.svg +0 -1
- package/kits/vercel-mono/exemplos/plano.json +0 -318
- package/kits/vercel-mono/exemplos/roteiro.md +0 -20
- package/kits/vercel-mono/preview.tsx +0 -12
- package/kits/vercel-mono/receita.json +0 -156
- package/kits/vercel-mono/regras/area-segura.md +0 -13
- package/kits/vercel-mono/regras/cor.md +0 -12
- package/kits/vercel-mono/regras/movimento.md +0 -15
- package/kits/vercel-mono/regras/ritmo.md +0 -13
- package/kits/vercel-mono/regras/som.md +0 -18
- package/kits/vercel-mono/regras/tipografia.md +0 -14
- package/kits/vhs-90/assets/ASSETS.md +0 -23
- package/kits/vhs-90/elementos/AssinaturaMarca.tsx +0 -29
- package/kits/vhs-90/elementos/BarrasRastreio.tsx +0 -21
- package/kits/vhs-90/elementos/CapaVHS.tsx +0 -28
- package/kits/vhs-90/elementos/CarimboData.tsx +0 -19
- package/kits/vhs-90/elementos/Cena.tsx +0 -41
- package/kits/vhs-90/elementos/Fundo.tsx +0 -27
- package/kits/vhs-90/elementos/MenuOSD.tsx +0 -27
- package/kits/vhs-90/elementos/Montagem.tsx +0 -60
- package/kits/vhs-90/elementos/Som.tsx +0 -38
- package/kits/vhs-90/elementos/TelaAzul.tsx +0 -29
- package/kits/vhs-90/elementos/TituloFita.tsx +0 -40
- package/kits/vhs-90/elementos/base.ts +0 -75
- package/kits/vhs-90/elementos/index.ts +0 -16
- package/kits/vhs-90/exemplos/fotos/foto-05.jpg +0 -0
- package/kits/vhs-90/exemplos/fotos/foto-07.jpg +0 -0
- package/kits/vhs-90/exemplos/logo-rewind.svg +0 -1
- package/kits/vhs-90/exemplos/plano.json +0 -47
- package/kits/vhs-90/exemplos/roteiro.md +0 -19
- package/kits/vhs-90/preview.tsx +0 -17
- package/kits/vhs-90/receita.json +0 -189
- package/kits/vhs-90/regras/area-segura.md +0 -18
- package/kits/vhs-90/regras/cor.md +0 -16
- package/kits/vhs-90/regras/movimento.md +0 -16
- package/kits/vhs-90/regras/ritmo.md +0 -16
- package/kits/vhs-90/regras/som.md +0 -21
- package/kits/vhs-90/regras/tipografia.md +0 -17
- package/kits/vidro-ios/assets/ASSETS.md +0 -18
- package/kits/vidro-ios/elementos/AssinaturaMarca.tsx +0 -21
- package/kits/vidro-ios/elementos/Camera.tsx +0 -23
- package/kits/vidro-ios/elementos/Cena.tsx +0 -46
- package/kits/vidro-ios/elementos/Fundo.tsx +0 -17
- package/kits/vidro-ios/elementos/IlhaDinamica.tsx +0 -24
- package/kits/vidro-ios/elementos/Montagem.tsx +0 -60
- package/kits/vidro-ios/elementos/PainelControle.tsx +0 -33
- package/kits/vidro-ios/elementos/PilhaNotificacoes.tsx +0 -29
- package/kits/vidro-ios/elementos/Som.tsx +0 -39
- package/kits/vidro-ios/elementos/TituloVidro.tsx +0 -22
- package/kits/vidro-ios/elementos/WidgetsGrade.tsx +0 -34
- package/kits/vidro-ios/elementos/base.ts +0 -87
- package/kits/vidro-ios/elementos/index.ts +0 -16
- package/kits/vidro-ios/elementos/vidro.tsx +0 -20
- package/kits/vidro-ios/exemplos/logo-vento.svg +0 -1
- package/kits/vidro-ios/exemplos/plano.json +0 -288
- package/kits/vidro-ios/exemplos/roteiro.md +0 -20
- package/kits/vidro-ios/preview.tsx +0 -12
- package/kits/vidro-ios/receita.json +0 -170
- package/kits/vidro-ios/regras/area-segura.md +0 -13
- package/kits/vidro-ios/regras/cor.md +0 -16
- package/kits/vidro-ios/regras/movimento.md +0 -16
- package/kits/vidro-ios/regras/ritmo.md +0 -14
- package/kits/vidro-ios/regras/som.md +0 -18
- package/kits/vidro-ios/regras/tipografia.md +0 -15
- package/kits/y2k-cromado/assets/ASSETS.md +0 -23
- package/kits/y2k-cromado/elementos/AssinaturaMarca.tsx +0 -25
- package/kits/y2k-cromado/elementos/Bolhas.tsx +0 -30
- package/kits/y2k-cromado/elementos/Brilhos.tsx +0 -28
- package/kits/y2k-cromado/elementos/CartaoGloss.tsx +0 -26
- package/kits/y2k-cromado/elementos/Cena.tsx +0 -41
- package/kits/y2k-cromado/elementos/FitaMarquee.tsx +0 -20
- package/kits/y2k-cromado/elementos/Fundo.tsx +0 -18
- package/kits/y2k-cromado/elementos/JanelaY2K.tsx +0 -31
- package/kits/y2k-cromado/elementos/Montagem.tsx +0 -60
- package/kits/y2k-cromado/elementos/OrbeCromo.tsx +0 -20
- package/kits/y2k-cromado/elementos/Som.tsx +0 -38
- package/kits/y2k-cromado/elementos/TextoCromo.tsx +0 -34
- package/kits/y2k-cromado/elementos/base.ts +0 -75
- package/kits/y2k-cromado/elementos/index.ts +0 -17
- package/kits/y2k-cromado/exemplos/fotos/foto-02.jpg +0 -0
- package/kits/y2k-cromado/exemplos/fotos/foto-03.jpg +0 -0
- package/kits/y2k-cromado/exemplos/logo-bolha.svg +0 -1
- package/kits/y2k-cromado/exemplos/plano.json +0 -47
- package/kits/y2k-cromado/exemplos/roteiro.md +0 -19
- package/kits/y2k-cromado/preview.tsx +0 -17
- package/kits/y2k-cromado/receita.json +0 -174
- package/kits/y2k-cromado/regras/area-segura.md +0 -19
- package/kits/y2k-cromado/regras/cor.md +0 -16
- package/kits/y2k-cromado/regras/movimento.md +0 -16
- package/kits/y2k-cromado/regras/ritmo.md +0 -15
- package/kits/y2k-cromado/regras/som.md +0 -21
- package/kits/y2k-cromado/regras/tipografia.md +0 -17
- package/lib/act.js +0 -2443
- package/lib/api.js +0 -310
- package/lib/boas-vindas.js +0 -153
- package/lib/catalogo.js +0 -357
- package/lib/checkpoint-git.js +0 -221
- package/lib/checkpoint.js +0 -366
- package/lib/claude-engine.js +0 -673
- package/lib/codex-engine.js +0 -225
- package/lib/comandos-extra.js +0 -551
- package/lib/comandos.js +0 -104
- package/lib/config.js +0 -414
- package/lib/desktop.js +0 -756
- package/lib/editor-pro.js +0 -927
- package/lib/entrada.js +0 -1031
- package/lib/estudio/acervo.js +0 -418
- package/lib/estudio/assets.js +0 -497
- package/lib/estudio/assinatura.js +0 -108
- package/lib/estudio/conferencia-visual.js +0 -76
- package/lib/estudio/cota.js +0 -157
- package/lib/estudio/diretor.js +0 -392
- package/lib/estudio/editor.js +0 -290
- package/lib/estudio/gosto-descrever.js +0 -87
- package/lib/estudio/gosto.js +0 -608
- package/lib/estudio/identidade.js +0 -560
- package/lib/estudio/index.js +0 -2712
- package/lib/estudio/kit.js +0 -91
- package/lib/estudio/kits-tela.js +0 -199
- package/lib/estudio/kokoro.js +0 -127
- package/lib/estudio/maquina-foto.js +0 -177
- package/lib/estudio/maquina-trilha.js +0 -160
- package/lib/estudio/maquina-voz.js +0 -429
- package/lib/estudio/marca.js +0 -398
- package/lib/estudio/morfar.js +0 -191
- package/lib/estudio/print-site.js +0 -341
- package/lib/estudio/projeto.js +0 -340
- package/lib/estudio/projetos.js +0 -72
- package/lib/exportar-conversa.js +0 -49
- package/lib/headless.js +0 -102
- package/lib/kits-parecidos.js +0 -99
- package/lib/kits-plano.js +0 -557
- package/lib/kits.js +0 -1045
- package/lib/limites.js +0 -100
- package/lib/linha-do-tempo.js +0 -130
- package/lib/local/motor-cli.js +0 -93
- package/lib/local/motor.js +0 -267
- package/lib/local/provedor.js +0 -169
- package/lib/marca-kit.js +0 -312
- package/lib/marketplace.js +0 -189
- package/lib/mcp.js +0 -819
- package/lib/motioncraft.js +0 -67
- package/lib/perigo.js +0 -401
- package/lib/permissao.js +0 -137
- package/lib/sandbox.js +0 -252
- package/lib/skills.js +0 -468
- package/lib/tela.js +0 -245
- package/lib/tools.js +0 -1067
- package/lib/ui.js +0 -763
- package/lib/video/analise.js +0 -89
- package/lib/video/projeto.js +0 -133
- package/lib/video/rastrear.js +0 -95
- package/lib/video/render.js +0 -274
- package/lib/video/transcript.js +0 -124
- package/lib/voz-ponte.js +0 -15
- package/lib/voz.js +0 -532
- /package/lib/{comecar.js → cli/comecar.js} +0 -0
- /package/lib/{conta.js → config/conta.js} +0 -0
- /package/lib/{limite.js → config/limite.js} +0 -0
- /package/lib/{protecao.js → permission/protecao.js} +0 -0
- /package/lib/{entregaveis.js → plugin/entregaveis.js} +0 -0
- /package/lib/{estudio → plugin/estudio}/acervo-site.js +0 -0
- /package/lib/{estudio → plugin/estudio}/assinaturas/fluido.json +0 -0
- /package/lib/{estudio → plugin/estudio}/assinaturas/gerativo.json +0 -0
- /package/lib/{estudio → plugin/estudio}/batida.js +0 -0
- /package/lib/{estudio → plugin/estudio}/biblioteca.js +0 -0
- /package/lib/{estudio → plugin/estudio}/camadas.js +0 -0
- /package/lib/{estudio → plugin/estudio}/cena.js +0 -0
- /package/lib/{estudio → plugin/estudio}/cenarios.js +0 -0
- /package/lib/{estudio → plugin/estudio}/cinema.js +0 -0
- /package/lib/{estudio → plugin/estudio}/colecao.js +0 -0
- /package/lib/{estudio → plugin/estudio}/composicao.js +0 -0
- /package/lib/{estudio → plugin/estudio}/conferencia.js +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/fluent-3d.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/noto-animado.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-ad5.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-ae-sem-memoria.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-agent.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-antes-e-agora.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-apresentando-clube.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-bluevisa.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-caught-in-the-fire.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-chat-cliente-satisfeito.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-chatgpt-anuncios.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-claude-dj.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-claude-mcp.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-cleanui.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-clinica-take-unico.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-clinica.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-clube-opener.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-clube.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-codigo.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-distilbook.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-drive-upload.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-dub.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-enxovaly.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-fecha7.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-filatov.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-frame.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-glass.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-letra-em-apps.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-letra-globo-3d.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-letra-nos-apps.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-letra-seis-mundos.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-lula-3.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-morph.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-motion-designer.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-motion-pacote.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-movimento.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-not-like-us.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-pinterest-inspiracao.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-pixel-e-tinta.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-ponte.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-processo-edit-tonal.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-processo-motion-100-ia.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-promo.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-proposito.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-rankhog.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-recursao.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-revelar.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-robo.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-shelby-ep2.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-shelby.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-solar-eclipse.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-soldier.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-som-de-cena.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-spotify-candidatura.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-tda-app.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-tda-ia.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-telegram-chat.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-telegram-ilha.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-tennessee-nike.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-tudo-se-move.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-uiad.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-viralgrow.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-whose-side.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/clube-youtube-inscrever.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/elementos-do-site-em-movimento.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/explainer-narrado.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/lancamento-de-produto.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/motion-so-com-sons.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/titulo-em-after-effects.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos/tour-de-saas.json +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/antes-e-agora/ae/cenas.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/antes-e-agora/assets/fazer_assets.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-em-apps/ae/cenas.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-em-apps/assets/preparar_assets.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-em-apps/assets/svg_para_ae.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/BRIEF-AGENTES.md +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/README.md +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ROTEIRO-CENAS.md +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/A-agenda.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/B-docs.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/C-alttab.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/D-spotify.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/E-notas.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/F-jornal1.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/G-google.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/H-mapa.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/I-imagens.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/J-jornal2.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/K-maps.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/camera-movimentos.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/camera.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/card-spotify.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/digitar.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/jornal-comum.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/letra.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/letra_automatica.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/montagem.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/w-agenda/render_html.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/w-agenda/util.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/w-midia-comum.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/ae/wg-util.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/assets/F-jornal1/render_html.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/assets/render_w-midia.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/assets/w-midia-ferramentas/inclin.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/assets/w-midia-ferramentas/medir_d.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/assets/w-midia-ferramentas/medir_e.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/ajustar_movimentos.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/ancorar.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/assar.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/camera3d_jornal.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/comparar.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/dados_ae_jornal.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/folha_contato.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/homografia_jornal.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/integrar.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/medir_quadro_a_quadro.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/mesa_2d.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/plot_cenas.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/retificar_quadros.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/w-agenda/assar_ab.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/w-agenda/medir_ab.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/wg_ajustar_h.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/wg_corrige_cam.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/wg_ecc_cadeia.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/wg_finalizar_cam.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/camera/wg_mosaico.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/01-gramatica-e-roteiro.md +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/02-camera.md +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/03-montagem-no-ae.md +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/04-render-e-conferencia.md +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/05-abertura-celular-mergulho.md +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces.md +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/transicao/atraso_imagem.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/transicao/fundo.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/transicao/juntar.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/transicao/montar.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/transicao/rastreio.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/letra-nos-apps/transicao/sincronia.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/pinterest-inspiracao/ae/cenas.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/pinterest-inspiracao/assets/fazer_assets.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/assets/pessoas/figurinha.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/BRIEF-A.md +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/audio.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/confere.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/dados/tempo-parte1.js +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/dados/tempo-parte2.js +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/gerar_emojis.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/img/filmes/_indice.js +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/js/base.js +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/js/main.js +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p1a.js +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p1b.js +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p1c.js +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p2.js +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/comp-a/video.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/take-unico/README.md +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/take-unico/oraculo_take.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/take-unico/render_take.py +0 -0
- /package/lib/{estudio → plugin/estudio}/dados/projetos-ae/processo-motion-100-ia/take-unico/take.js +0 -0
- /package/lib/{estudio → plugin/estudio}/decisao.js +0 -0
- /package/lib/{estudio → plugin/estudio}/edicao.js +0 -0
- /package/lib/{estudio → plugin/estudio}/efeitos-fabrica/brilho-varredura.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/efeitos-fabrica/camadas-empilhadas.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/efeitos-fabrica/cor-inunda.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/efeitos-fabrica/mola-com-peso.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/efeitos-fabrica/peca-impacto-3d.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/efeitos-fabrica/raios-de-luz.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/efeitos-fabrica/risco-multilinha.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/efeitos-fabrica/terminal-digitando.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/efeitos.js +0 -0
- /package/lib/{estudio → plugin/estudio}/effectcraft.js +0 -0
- /package/lib/{estudio → plugin/estudio}/ende.js +0 -0
- /package/lib/{estudio → plugin/estudio}/estilo.js +0 -0
- /package/lib/{estudio → plugin/estudio}/estilos.js +0 -0
- /package/lib/{estudio → plugin/estudio}/exportar.js +0 -0
- /package/lib/{estudio → plugin/estudio}/falantes.js +0 -0
- /package/lib/{estudio → plugin/estudio}/fluido.js +0 -0
- /package/lib/{estudio → plugin/estudio}/gerativo.js +0 -0
- /package/lib/{estudio → plugin/estudio}/glifos.js +0 -0
- /package/lib/{estudio → plugin/estudio}/gosto/tela.html +0 -0
- /package/lib/{estudio → plugin/estudio}/gosto-medir.js +0 -0
- /package/lib/{estudio → plugin/estudio}/gosto-prova.js +0 -0
- /package/lib/{estudio → plugin/estudio}/hibrido.js +0 -0
- /package/lib/{estudio → plugin/estudio}/impacto.js +0 -0
- /package/lib/{estudio → plugin/estudio}/kit/animacao.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/kit/base.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/kit/fluido.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/kit/gerativo.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/kit/index.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/kit/marca.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/kit/mundo.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/kit/natural.js +0 -0
- /package/lib/{estudio → plugin/estudio}/kit/personagem.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/kit/rosto.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/kit/tres.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/kit/vox.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/kit/voxel.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/kit-ae/base.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/kit-ae/cenas.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/kit-ae/guarda.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/kit-ae/primitivas.jsx +0 -0
- /package/lib/{estudio → plugin/estudio}/kits/tela.html +0 -0
- /package/lib/{estudio → plugin/estudio}/lancamento.js +0 -0
- /package/lib/{estudio → plugin/estudio}/legibilidade.js +0 -0
- /package/lib/{estudio → plugin/estudio}/maquina-diretor.js +0 -0
- /package/lib/{estudio → plugin/estudio}/maquina-elementos.js +0 -0
- /package/lib/{estudio → plugin/estudio}/maquina-guarda.js +0 -0
- /package/lib/{estudio → plugin/estudio}/maquina-layout.js +0 -0
- /package/lib/{estudio → plugin/estudio}/maquina-som.js +0 -0
- /package/lib/{estudio → plugin/estudio}/maquina.js +0 -0
- /package/lib/{estudio → plugin/estudio}/margem.js +0 -0
- /package/lib/{estudio → plugin/estudio}/motion.js +0 -0
- /package/lib/{estudio → plugin/estudio}/movimentos.js +0 -0
- /package/lib/{estudio → plugin/estudio}/mundo.js +0 -0
- /package/lib/{estudio → plugin/estudio}/personagem.js +0 -0
- /package/lib/{estudio → plugin/estudio}/plano.js +0 -0
- /package/lib/{estudio → plugin/estudio}/producao.js +0 -0
- /package/lib/{estudio → plugin/estudio}/referencias.js +0 -0
- /package/lib/{estudio → plugin/estudio}/regras-motion.js +0 -0
- /package/lib/{estudio → plugin/estudio}/remotion.js +0 -0
- /package/lib/{estudio → plugin/estudio}/revisor.js +0 -0
- /package/lib/{estudio → plugin/estudio}/ritmo.js +0 -0
- /package/lib/{estudio → plugin/estudio}/sem-narracao.js +0 -0
- /package/lib/{estudio → plugin/estudio}/slides.js +0 -0
- /package/lib/{estudio → plugin/estudio}/sons-leves.js +0 -0
- /package/lib/{estudio → plugin/estudio}/variacao3d.js +0 -0
- /package/lib/{estudio → plugin/estudio}/variedade.js +0 -0
- /package/lib/{estudio → plugin/estudio}/video.js +0 -0
- /package/lib/{estudio → plugin/estudio}/visao/visao.swift +0 -0
- /package/lib/{estudio → plugin/estudio}/visao.js +0 -0
- /package/lib/{estudio → plugin/estudio}/voicestudio.js +0 -0
- /package/lib/{estudio → plugin/estudio}/vox.js +0 -0
- /package/lib/{video → plugin/video}/auto.js +0 -0
- /package/lib/{video → plugin/video}/camadas.js +0 -0
- /package/lib/{video → plugin/video}/cli.js +0 -0
- /package/lib/{video → plugin/video}/conferir-legenda.js +0 -0
- /package/lib/{video → plugin/video}/cor.js +0 -0
- /package/lib/{video → plugin/video}/delta.js +0 -0
- /package/lib/{video → plugin/video}/edits.js +0 -0
- /package/lib/{video → plugin/video}/filters.js +0 -0
- /package/lib/{video → plugin/video}/fx3d/Camadas.jsx +0 -0
- /package/lib/{video → plugin/video}/fx3d/Objetos.jsx +0 -0
- /package/lib/{video → plugin/video}/fx3d/Root.jsx +0 -0
- /package/lib/{video → plugin/video}/fx3d/modelos.jsx +0 -0
- /package/lib/{video → plugin/video}/fx3d.js +0 -0
- /package/lib/{video → plugin/video}/gerados.js +0 -0
- /package/lib/{video → plugin/video}/objetos.js +0 -0
- /package/lib/{video → plugin/video}/ops-fx.js +0 -0
- /package/lib/{video → plugin/video}/ops.js +0 -0
- /package/lib/{video → plugin/video}/paralelo.js +0 -0
- /package/lib/{video → plugin/video}/pedido.js +0 -0
- /package/lib/{video → plugin/video}/rastro.js +0 -0
- /package/lib/{video → plugin/video}/texto.js +0 -0
- /package/lib/{video → plugin/video}/timeline.js +0 -0
- /package/lib/{video → plugin/video}/zoom.js +0 -0
- /package/lib/{local → provider/local}/cerebro.json +0 -0
- /package/lib/{local → provider/local}/entrada.js +0 -0
- /package/lib/{encolheu.js → session/encolheu.js} +0 -0
- /package/lib/{memoria-conversa.js → session/memoria-conversa.js} +0 -0
- /package/lib/{retomar.js → session/retomar.js} +0 -0
- /package/lib/{snapshot.js → session/snapshot.js} +0 -0
- /package/lib/{titulo-conversa.js → session/titulo-conversa.js} +0 -0
- /package/lib/{especialistas.js → skill/especialistas.js} +0 -0
- /package/lib/{personas.js → skill/personas.js} +0 -0
- /package/lib/{portao-skill.js → skill/portao-skill.js} +0 -0
- /package/lib/{casar.js → tool/casar.js} +0 -0
- /package/lib/{markdown.js → tui/markdown.js} +0 -0
- /package/{kits/adesivos/elementos → materiais/adesivos/camera}/Camera.tsx +0 -0
- /package/{kits/adesivos/assets → materiais/adesivos}/fontes/OFL-BowlbyOne.txt +0 -0
- /package/{kits/adesivos/assets → materiais/adesivos}/fontes/OFL-Nunito.txt +0 -0
- /package/{kits/adesivos/assets → materiais/adesivos}/fontes/bowlby-latin.woff2 +0 -0
- /package/{kits/adesivos/assets → materiais/adesivos}/fontes/nunito-latin.woff2 +0 -0
- /package/{kits/adesivos/assets → materiais/adesivos}/sons/assinatura.mp3 +0 -0
- /package/{kits/adesivos/assets → materiais/adesivos}/sons/cola.mp3 +0 -0
- /package/{kits/adesivos/assets → materiais/adesivos}/sons/confete.mp3 +0 -0
- /package/{kits/adesivos/assets → materiais/adesivos}/sons/impacto.mp3 +0 -0
- /package/{kits/adesivos/assets → materiais/adesivos}/sons/palavra.mp3 +0 -0
- /package/{kits/adesivos/assets → materiais/adesivos}/sons/pop.mp3 +0 -0
- /package/{kits/adesivos/assets → materiais/adesivos}/sons/swipe.mp3 +0 -0
- /package/{kits/adesivos/assets → materiais/adesivos}/sons/whoosh.mp3 +0 -0
- /package/{kits/adesivos/assets → materiais/adesivos}/trilha/pop-colorido-112bpm.mp3 +0 -0
- /package/{kits/antes-depois/elementos → materiais/antes-depois/camera}/Camera.tsx +0 -0
- /package/{kits/antes-depois/assets → materiais/antes-depois}/fontes/OFL-ArchivoBlack.txt +0 -0
- /package/{kits/antes-depois/assets → materiais/antes-depois}/fontes/OFL-Manrope.txt +0 -0
- /package/{kits/antes-depois/assets → materiais/antes-depois}/fontes/archivoblack.woff2 +0 -0
- /package/{kits/antes-depois/assets → materiais/antes-depois}/fontes/manrope.woff2 +0 -0
- /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/assinatura.mp3 +0 -0
- /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/clique.mp3 +0 -0
- /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/impacto.mp3 +0 -0
- /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/subida.mp3 +0 -0
- /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/swoosh.mp3 +0 -0
- /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/tick.mp3 +0 -0
- /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/antes-depois/assets → materiais/antes-depois}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/antes-depois/assets → materiais/antes-depois}/trilha/corte-118bpm.mp3 +0 -0
- /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/fontes/OFL-Inter.txt +0 -0
- /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/fontes/inter-latin-500-800.woff2 +0 -0
- /package/{kits/apple-tipografico/elementos → materiais/apple-tipografico/lib}/modelos.ts +0 -0
- /package/{kits/apple-tipografico/elementos → materiais/apple-tipografico/lib}/raymarch.ts +0 -0
- /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/sons/assinatura.mp3 +0 -0
- /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/sons/clique.mp3 +0 -0
- /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/sons/impacto.mp3 +0 -0
- /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/sons/subida.mp3 +0 -0
- /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/sons/swoosh.mp3 +0 -0
- /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/apple-tipografico/assets → materiais/apple-tipografico}/trilha/tech-claro-125bpm.mp3 +0 -0
- /package/{kits/aquarela/elementos → materiais/aquarela/camera}/Camera.tsx +0 -0
- /package/{kits/aquarela/assets → materiais/aquarela}/fontes/OFL-Caveat.txt +0 -0
- /package/{kits/aquarela/assets → materiais/aquarela}/fontes/OFL-Fraunces.txt +0 -0
- /package/{kits/aquarela/assets → materiais/aquarela}/fontes/caveat-latin.woff2 +0 -0
- /package/{kits/aquarela/assets → materiais/aquarela}/fontes/fraunces-latin.woff2 +0 -0
- /package/{kits/aquarela/assets → materiais/aquarela}/sons/assinatura.mp3 +0 -0
- /package/{kits/aquarela/assets → materiais/aquarela}/sons/gota.mp3 +0 -0
- /package/{kits/aquarela/assets → materiais/aquarela}/sons/impacto.mp3 +0 -0
- /package/{kits/aquarela/assets → materiais/aquarela}/sons/palavra.mp3 +0 -0
- /package/{kits/aquarela/assets → materiais/aquarela}/sons/papel-cai.mp3 +0 -0
- /package/{kits/aquarela/assets → materiais/aquarela}/sons/pop-mancha.mp3 +0 -0
- /package/{kits/aquarela/assets → materiais/aquarela}/sons/risco.mp3 +0 -0
- /package/{kits/aquarela/assets → materiais/aquarela}/sons/whoosh-pincel.mp3 +0 -0
- /package/{kits/aquarela/assets → materiais/aquarela}/trilha/calma-com-punch-108bpm.mp3 +0 -0
- /package/{kits/aurora/elementos → materiais/aurora/camera}/Camera.tsx +0 -0
- /package/{kits/aurora/assets → materiais/aurora}/fontes/OFL-InstrumentSerif.txt +0 -0
- /package/{kits/aurora/assets → materiais/aurora}/fontes/OFL-Manrope.txt +0 -0
- /package/{kits/aurora/assets → materiais/aurora}/fontes/instrument-latin.woff2 +0 -0
- /package/{kits/aurora/assets → materiais/aurora}/fontes/manrope-latin.woff2 +0 -0
- /package/{kits/aurora/assets → materiais/aurora}/sons/assinatura.mp3 +0 -0
- /package/{kits/aurora/assets → materiais/aurora}/sons/brilho.mp3 +0 -0
- /package/{kits/aurora/assets → materiais/aurora}/sons/meteoro.mp3 +0 -0
- /package/{kits/aurora/assets → materiais/aurora}/sons/onda.mp3 +0 -0
- /package/{kits/aurora/assets → materiais/aurora}/sons/sino.mp3 +0 -0
- /package/{kits/aurora/assets → materiais/aurora}/sons/sopro.mp3 +0 -0
- /package/{kits/aurora/assets → materiais/aurora}/sons/subida.mp3 +0 -0
- /package/{kits/aurora/assets → materiais/aurora}/sons/toque.mp3 +0 -0
- /package/{kits/aurora/assets → materiais/aurora}/trilha/suave-88bpm.mp3 +0 -0
- /package/{kits/bauhaus/assets → materiais/bauhaus}/fontes/OFL-bebas-neue.txt +0 -0
- /package/{kits/bauhaus/assets → materiais/bauhaus}/fontes/OFL-jost-900.txt +0 -0
- /package/{kits/bauhaus/assets → materiais/bauhaus}/fontes/bebas-neue.woff2 +0 -0
- /package/{kits/bauhaus/assets → materiais/bauhaus}/fontes/jost-900.woff2 +0 -0
- /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/assinatura.mp3 +0 -0
- /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/clique.mp3 +0 -0
- /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/impacto.mp3 +0 -0
- /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/subida.mp3 +0 -0
- /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/swoosh.mp3 +0 -0
- /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/tick.mp3 +0 -0
- /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/bauhaus/assets → materiais/bauhaus}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/bauhaus/assets → materiais/bauhaus}/trilha/trilha.mp3 +0 -0
- /package/{kits/brutalista/elementos → materiais/brutalista/camera}/Camera.tsx +0 -0
- /package/{kits/brutalista/assets → materiais/brutalista}/fontes/OFL-ArchivoBlack.txt +0 -0
- /package/{kits/brutalista/assets → materiais/brutalista}/fontes/OFL-JetBrainsMono.txt +0 -0
- /package/{kits/brutalista/assets → materiais/brutalista}/fontes/archivo-black.woff2 +0 -0
- /package/{kits/brutalista/assets → materiais/brutalista}/fontes/jetbrains-mono.woff2 +0 -0
- /package/{kits/brutalista/assets → materiais/brutalista}/sons/assinatura.mp3 +0 -0
- /package/{kits/brutalista/assets → materiais/brutalista}/sons/clique.mp3 +0 -0
- /package/{kits/brutalista/assets → materiais/brutalista}/sons/impacto.mp3 +0 -0
- /package/{kits/brutalista/assets → materiais/brutalista}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/brutalista/assets → materiais/brutalista}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/brutalista/assets → materiais/brutalista}/sons/subida.mp3 +0 -0
- /package/{kits/brutalista/assets → materiais/brutalista}/sons/swoosh.mp3 +0 -0
- /package/{kits/brutalista/assets → materiais/brutalista}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/brutalista/assets → materiais/brutalista}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/brutalista/assets → materiais/brutalista}/trilha/bruta-108bpm.mp3 +0 -0
- /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/fontes/OFL-Archivo-Black.txt +0 -0
- /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/fontes/OFL-DM-Mono.txt +0 -0
- /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/fontes/OFL-Playfair-Italic.txt +0 -0
- /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/fontes/archivo-black.woff2 +0 -0
- /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/fontes/dm-mono.woff2 +0 -0
- /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/fontes/playfair-italic.woff2 +0 -0
- /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/sons/assinatura.mp3 +0 -0
- /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/sons/clique.mp3 +0 -0
- /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/sons/impacto.mp3 +0 -0
- /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/sons/subida.mp3 +0 -0
- /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/sons/swoosh.mp3 +0 -0
- /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/campos-de-cor/assets → materiais/campos-de-cor}/trilha/trilha.mp3 +0 -0
- /package/{kits/cartaz-cinetico/elementos → materiais/cartaz-cinetico/camera}/Camera.tsx +0 -0
- /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/fontes/OFL-Anton.txt +0 -0
- /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/fontes/OFL-Archivo.txt +0 -0
- /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/fontes/anton.woff2 +0 -0
- /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/fontes/archivo.woff2 +0 -0
- /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/sons/assinatura.mp3 +0 -0
- /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/sons/clique.mp3 +0 -0
- /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/sons/impacto.mp3 +0 -0
- /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/sons/subida.mp3 +0 -0
- /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/sons/swoosh.mp3 +0 -0
- /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/cartaz-cinetico/assets → materiais/cartaz-cinetico}/trilha/cartaz-124bpm.mp3 +0 -0
- /package/{kits/colagem/assets → materiais/colagem}/fontes/OFL-abril-fatface.txt +0 -0
- /package/{kits/colagem/assets → materiais/colagem}/fontes/OFL-special-elite.txt +0 -0
- /package/{kits/colagem/assets → materiais/colagem}/fontes/abril-fatface.woff2 +0 -0
- /package/{kits/colagem/assets → materiais/colagem}/fontes/special-elite.woff2 +0 -0
- /package/{kits/colagem/elementos → materiais/colagem/formas}/Overlay.tsx +0 -0
- /package/{kits/colagem/assets → materiais/colagem}/sons/assinatura.mp3 +0 -0
- /package/{kits/colagem/assets → materiais/colagem}/sons/clique.mp3 +0 -0
- /package/{kits/colagem/assets → materiais/colagem}/sons/impacto.mp3 +0 -0
- /package/{kits/colagem/assets → materiais/colagem}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/colagem/assets → materiais/colagem}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/colagem/assets → materiais/colagem}/sons/subida.mp3 +0 -0
- /package/{kits/colagem/assets → materiais/colagem}/sons/swoosh.mp3 +0 -0
- /package/{kits/colagem/assets → materiais/colagem}/sons/tick.mp3 +0 -0
- /package/{kits/colagem/assets → materiais/colagem}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/colagem/assets → materiais/colagem}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/colagem/assets → materiais/colagem}/trilha/trilha.mp3 +0 -0
- /package/{kits/contagem/elementos → materiais/contagem/camera}/Camera.tsx +0 -0
- /package/{kits/contagem/assets → materiais/contagem}/fontes/OFL-BigShouldersDisplay.txt +0 -0
- /package/{kits/contagem/assets → materiais/contagem}/fontes/OFL-SpaceMono.txt +0 -0
- /package/{kits/contagem/assets → materiais/contagem}/fontes/bigshoulders.woff2 +0 -0
- /package/{kits/contagem/assets → materiais/contagem}/fontes/spacemono.woff2 +0 -0
- /package/{kits/contagem/assets → materiais/contagem}/sons/assinatura.mp3 +0 -0
- /package/{kits/contagem/assets → materiais/contagem}/sons/clique.mp3 +0 -0
- /package/{kits/contagem/assets → materiais/contagem}/sons/confete.mp3 +0 -0
- /package/{kits/contagem/assets → materiais/contagem}/sons/impacto.mp3 +0 -0
- /package/{kits/contagem/assets → materiais/contagem}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/contagem/assets → materiais/contagem}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/contagem/assets → materiais/contagem}/sons/subida.mp3 +0 -0
- /package/{kits/contagem/assets → materiais/contagem}/sons/swoosh.mp3 +0 -0
- /package/{kits/contagem/assets → materiais/contagem}/sons/tick.mp3 +0 -0
- /package/{kits/contagem/assets → materiais/contagem}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/contagem/assets → materiais/contagem}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/contagem/assets → materiais/contagem}/trilha/pulso-128bpm.mp3 +0 -0
- /package/{kits/convite-evento/elementos → materiais/convite-evento/camera}/Camera.tsx +0 -0
- /package/{kits/convite-evento/assets → materiais/convite-evento}/fontes/OFL-InstrumentSerif.txt +0 -0
- /package/{kits/convite-evento/assets → materiais/convite-evento}/fontes/OFL-Unbounded.txt +0 -0
- /package/{kits/convite-evento/assets → materiais/convite-evento}/fontes/instrumentserif-i.woff2 +0 -0
- /package/{kits/convite-evento/assets → materiais/convite-evento}/fontes/unbounded.woff2 +0 -0
- /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/assinatura.mp3 +0 -0
- /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/clique.mp3 +0 -0
- /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/confete.mp3 +0 -0
- /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/impacto.mp3 +0 -0
- /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/subida.mp3 +0 -0
- /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/swoosh.mp3 +0 -0
- /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/convite-evento/assets → materiais/convite-evento}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/convite-evento/assets → materiais/convite-evento}/trilha/festa-112bpm.mp3 +0 -0
- /package/{kits/corte-podcast/elementos → materiais/corte-podcast/camera}/Camera.tsx +0 -0
- /package/{kits/corte-podcast/assets → materiais/corte-podcast}/fontes/OFL-Anton.txt +0 -0
- /package/{kits/corte-podcast/assets → materiais/corte-podcast}/fontes/OFL-IBMPlexMono.txt +0 -0
- /package/{kits/corte-podcast/assets → materiais/corte-podcast}/fontes/anton.woff2 +0 -0
- /package/{kits/corte-podcast/assets → materiais/corte-podcast}/fontes/plexmono.woff2 +0 -0
- /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/assinatura.mp3 +0 -0
- /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/clique.mp3 +0 -0
- /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/impacto.mp3 +0 -0
- /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/subida.mp3 +0 -0
- /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/swoosh.mp3 +0 -0
- /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/tick.mp3 +0 -0
- /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/corte-podcast/assets → materiais/corte-podcast}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/corte-podcast/assets → materiais/corte-podcast}/trilha/lofi-pulso-100bpm.mp3 +0 -0
- /package/{kits/cubos/elementos → materiais/cubos/camera}/Camera.tsx +0 -0
- /package/{kits/cubos/assets → materiais/cubos}/fontes/OFL-ArchivoBlack.txt +0 -0
- /package/{kits/cubos/assets → materiais/cubos}/fontes/OFL-DMSans.txt +0 -0
- /package/{kits/cubos/assets → materiais/cubos}/fontes/archivoblack-latin.woff2 +0 -0
- /package/{kits/cubos/assets → materiais/cubos}/fontes/dmsans-latin.woff2 +0 -0
- /package/{kits/cubos/assets → materiais/cubos}/sons/assinatura.mp3 +0 -0
- /package/{kits/cubos/assets → materiais/cubos}/sons/bloco.mp3 +0 -0
- /package/{kits/cubos/assets → materiais/cubos}/sons/desmonta.mp3 +0 -0
- /package/{kits/cubos/assets → materiais/cubos}/sons/encaixa.mp3 +0 -0
- /package/{kits/cubos/assets → materiais/cubos}/sons/estala.mp3 +0 -0
- /package/{kits/cubos/assets → materiais/cubos}/sons/gira.mp3 +0 -0
- /package/{kits/cubos/assets → materiais/cubos}/sons/queda.mp3 +0 -0
- /package/{kits/cubos/assets → materiais/cubos}/sons/whoosh.mp3 +0 -0
- /package/{kits/cubos/assets → materiais/cubos}/trilha/calma-com-punch-108bpm.mp3 +0 -0
- /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/fontes/OFL-IBM-Plex-Mono.txt +0 -0
- /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/fontes/OFL-Montserrat.txt +0 -0
- /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/fontes/montserrat.woff2 +0 -0
- /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/fontes/plex-mono.woff2 +0 -0
- /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/sons/assinatura.mp3 +0 -0
- /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/sons/clique.mp3 +0 -0
- /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/sons/impacto.mp3 +0 -0
- /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/sons/subida.mp3 +0 -0
- /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/sons/swoosh.mp3 +0 -0
- /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/dashboard-dados/assets → materiais/dashboard-dados}/trilha/trilha.mp3 +0 -0
- /package/{kits/depoimento/elementos → materiais/depoimento/camera}/Camera.tsx +0 -0
- /package/{kits/depoimento/assets → materiais/depoimento}/fontes/OFL-Newsreader.txt +0 -0
- /package/{kits/depoimento/assets → materiais/depoimento}/fontes/OFL-SpaceGrotesk.txt +0 -0
- /package/{kits/depoimento/assets → materiais/depoimento}/fontes/newsreader-i.woff2 +0 -0
- /package/{kits/depoimento/assets → materiais/depoimento}/fontes/spacegrotesk.woff2 +0 -0
- /package/{kits/depoimento/assets → materiais/depoimento}/sons/assinatura.mp3 +0 -0
- /package/{kits/depoimento/assets → materiais/depoimento}/sons/clique.mp3 +0 -0
- /package/{kits/depoimento/assets → materiais/depoimento}/sons/estrela.mp3 +0 -0
- /package/{kits/depoimento/assets → materiais/depoimento}/sons/impacto.mp3 +0 -0
- /package/{kits/depoimento/assets → materiais/depoimento}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/depoimento/assets → materiais/depoimento}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/depoimento/assets → materiais/depoimento}/sons/subida.mp3 +0 -0
- /package/{kits/depoimento/assets → materiais/depoimento}/sons/swoosh.mp3 +0 -0
- /package/{kits/depoimento/assets → materiais/depoimento}/sons/verificado.mp3 +0 -0
- /package/{kits/depoimento/assets → materiais/depoimento}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/depoimento/assets → materiais/depoimento}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/depoimento/assets → materiais/depoimento}/trilha/calor-104bpm.mp3 +0 -0
- /package/{kits/infografico/elementos → materiais/infografico/camera}/Camera.tsx +0 -0
- /package/{kits/infografico/assets → materiais/infografico}/fontes/OFL-Caveat.txt +0 -0
- /package/{kits/infografico/assets → materiais/infografico}/fontes/OFL-Outfit.txt +0 -0
- /package/{kits/infografico/assets → materiais/infografico}/fontes/caveat.woff2 +0 -0
- /package/{kits/infografico/assets → materiais/infografico}/fontes/outfit.woff2 +0 -0
- /package/{kits/infografico/assets → materiais/infografico}/sons/assinatura.mp3 +0 -0
- /package/{kits/infografico/assets → materiais/infografico}/sons/clique.mp3 +0 -0
- /package/{kits/infografico/assets → materiais/infografico}/sons/impacto.mp3 +0 -0
- /package/{kits/infografico/assets → materiais/infografico}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/infografico/assets → materiais/infografico}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/infografico/assets → materiais/infografico}/sons/subida.mp3 +0 -0
- /package/{kits/infografico/assets → materiais/infografico}/sons/swoosh.mp3 +0 -0
- /package/{kits/infografico/assets → materiais/infografico}/sons/traco.mp3 +0 -0
- /package/{kits/infografico/assets → materiais/infografico}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/infografico/assets → materiais/infografico}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/infografico/assets → materiais/infografico}/trilha/explica-100bpm.mp3 +0 -0
- /package/{kits/isometrico/assets → materiais/isometrico}/fontes/OFL-Archivo.txt +0 -0
- /package/{kits/isometrico/assets → materiais/isometrico}/fontes/OFL-Jost.txt +0 -0
- /package/{kits/isometrico/assets → materiais/isometrico}/fontes/archivo.woff2 +0 -0
- /package/{kits/isometrico/assets → materiais/isometrico}/fontes/jost.woff2 +0 -0
- /package/{kits/isometrico/elementos → materiais/isometrico/formas}/iso.tsx +0 -0
- /package/{kits/isometrico/assets → materiais/isometrico}/sons/assinatura.mp3 +0 -0
- /package/{kits/isometrico/assets → materiais/isometrico}/sons/clique.mp3 +0 -0
- /package/{kits/isometrico/assets → materiais/isometrico}/sons/impacto.mp3 +0 -0
- /package/{kits/isometrico/assets → materiais/isometrico}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/isometrico/assets → materiais/isometrico}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/isometrico/assets → materiais/isometrico}/sons/subida.mp3 +0 -0
- /package/{kits/isometrico/assets → materiais/isometrico}/sons/swoosh.mp3 +0 -0
- /package/{kits/isometrico/assets → materiais/isometrico}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/isometrico/assets → materiais/isometrico}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/isometrico/assets → materiais/isometrico}/trilha/trilha.mp3 +0 -0
- /package/{kits/jornal/elementos → materiais/jornal/camera}/Camera.tsx +0 -0
- /package/{kits/jornal/assets → materiais/jornal}/fontes/OFL-PlayfairDisplay.txt +0 -0
- /package/{kits/jornal/assets → materiais/jornal}/fontes/OFL-UnifrakturMaguntia.txt +0 -0
- /package/{kits/jornal/assets → materiais/jornal}/fontes/playfair-italic.woff2 +0 -0
- /package/{kits/jornal/assets → materiais/jornal}/fontes/playfair.woff2 +0 -0
- /package/{kits/jornal/assets → materiais/jornal}/fontes/unifraktur.woff2 +0 -0
- /package/{kits/jornal/assets → materiais/jornal}/sons/assinatura.mp3 +0 -0
- /package/{kits/jornal/assets → materiais/jornal}/sons/clique.mp3 +0 -0
- /package/{kits/jornal/assets → materiais/jornal}/sons/impacto.mp3 +0 -0
- /package/{kits/jornal/assets → materiais/jornal}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/jornal/assets → materiais/jornal}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/jornal/assets → materiais/jornal}/sons/subida.mp3 +0 -0
- /package/{kits/jornal/assets → materiais/jornal}/sons/swoosh.mp3 +0 -0
- /package/{kits/jornal/assets → materiais/jornal}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/jornal/assets → materiais/jornal}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/jornal/assets → materiais/jornal}/trilha/redacao-96bpm.mp3 +0 -0
- /package/{kits/legenda-viva/elementos → materiais/legenda-viva/camera}/Camera.tsx +0 -0
- /package/{kits/legenda-viva/assets → materiais/legenda-viva}/fontes/OFL-Inter.txt +0 -0
- /package/{kits/legenda-viva/assets → materiais/legenda-viva}/fontes/OFL-Montserrat.txt +0 -0
- /package/{kits/legenda-viva/assets → materiais/legenda-viva}/fontes/inter.woff2 +0 -0
- /package/{kits/legenda-viva/assets → materiais/legenda-viva}/fontes/montserrat.woff2 +0 -0
- /package/{kits/legenda-viva/assets → materiais/legenda-viva}/sons/assinatura.mp3 +0 -0
- /package/{kits/legenda-viva/assets → materiais/legenda-viva}/sons/clique.mp3 +0 -0
- /package/{kits/legenda-viva/assets → materiais/legenda-viva}/sons/impacto.mp3 +0 -0
- /package/{kits/legenda-viva/assets → materiais/legenda-viva}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/legenda-viva/assets → materiais/legenda-viva}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/legenda-viva/assets → materiais/legenda-viva}/sons/subida.mp3 +0 -0
- /package/{kits/legenda-viva/assets → materiais/legenda-viva}/sons/swoosh.mp3 +0 -0
- /package/{kits/legenda-viva/assets → materiais/legenda-viva}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/legenda-viva/assets → materiais/legenda-viva}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/legenda-viva/assets → materiais/legenda-viva}/trilha/voz-118bpm.mp3 +0 -0
- /package/{kits/luxo/elementos → materiais/luxo/camera}/Camera.tsx +0 -0
- /package/{kits/luxo/assets → materiais/luxo}/fontes/OFL-CormorantGaramond.txt +0 -0
- /package/{kits/luxo/assets → materiais/luxo}/fontes/OFL-Jost.txt +0 -0
- /package/{kits/luxo/assets → materiais/luxo}/fontes/cormorant-i.woff2 +0 -0
- /package/{kits/luxo/assets → materiais/luxo}/fontes/cormorant.woff2 +0 -0
- /package/{kits/luxo/assets → materiais/luxo}/fontes/jost.woff2 +0 -0
- /package/{kits/luxo/assets → materiais/luxo}/sons/assinatura.mp3 +0 -0
- /package/{kits/luxo/assets → materiais/luxo}/sons/clique.mp3 +0 -0
- /package/{kits/luxo/assets → materiais/luxo}/sons/impacto.mp3 +0 -0
- /package/{kits/luxo/assets → materiais/luxo}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/luxo/assets → materiais/luxo}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/luxo/assets → materiais/luxo}/sons/sino.mp3 +0 -0
- /package/{kits/luxo/assets → materiais/luxo}/sons/subida.mp3 +0 -0
- /package/{kits/luxo/assets → materiais/luxo}/sons/swoosh.mp3 +0 -0
- /package/{kits/luxo/assets → materiais/luxo}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/luxo/assets → materiais/luxo}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/luxo/assets → materiais/luxo}/trilha/ambar-78bpm.mp3 +0 -0
- /package/{kits/mapa/elementos → materiais/mapa/camera}/Camera.tsx +0 -0
- /package/{kits/mapa/assets → materiais/mapa}/fontes/OFL-DMMono.txt +0 -0
- /package/{kits/mapa/assets → materiais/mapa}/fontes/OFL-DMSans.txt +0 -0
- /package/{kits/mapa/assets → materiais/mapa}/fontes/dmmono.woff2 +0 -0
- /package/{kits/mapa/assets → materiais/mapa}/fontes/dmsans.woff2 +0 -0
- /package/{kits/mapa/assets → materiais/mapa}/sons/assinatura.mp3 +0 -0
- /package/{kits/mapa/assets → materiais/mapa}/sons/clique.mp3 +0 -0
- /package/{kits/mapa/assets → materiais/mapa}/sons/impacto.mp3 +0 -0
- /package/{kits/mapa/assets → materiais/mapa}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/mapa/assets → materiais/mapa}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/mapa/assets → materiais/mapa}/sons/quique.mp3 +0 -0
- /package/{kits/mapa/assets → materiais/mapa}/sons/subida.mp3 +0 -0
- /package/{kits/mapa/assets → materiais/mapa}/sons/swoosh.mp3 +0 -0
- /package/{kits/mapa/assets → materiais/mapa}/sons/traco.mp3 +0 -0
- /package/{kits/mapa/assets → materiais/mapa}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/mapa/assets → materiais/mapa}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/mapa/assets → materiais/mapa}/trilha/rota-100bpm.mp3 +0 -0
- /package/{kits/massinha/assets → materiais/massinha}/fontes/OFL-chewy.txt +0 -0
- /package/{kits/massinha/assets → materiais/massinha}/fontes/OFL-nunito-800.txt +0 -0
- /package/{kits/massinha/assets → materiais/massinha}/fontes/chewy.woff2 +0 -0
- /package/{kits/massinha/assets → materiais/massinha}/fontes/nunito-800.woff2 +0 -0
- /package/{kits/massinha/elementos → materiais/massinha/lib}/argila.ts +0 -0
- /package/{kits/massinha/assets → materiais/massinha}/sons/assinatura.mp3 +0 -0
- /package/{kits/massinha/assets → materiais/massinha}/sons/clique.mp3 +0 -0
- /package/{kits/massinha/assets → materiais/massinha}/sons/impacto.mp3 +0 -0
- /package/{kits/massinha/assets → materiais/massinha}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/massinha/assets → materiais/massinha}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/massinha/assets → materiais/massinha}/sons/subida.mp3 +0 -0
- /package/{kits/massinha/assets → materiais/massinha}/sons/swoosh.mp3 +0 -0
- /package/{kits/massinha/assets → materiais/massinha}/sons/tick.mp3 +0 -0
- /package/{kits/massinha/assets → materiais/massinha}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/massinha/assets → materiais/massinha}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/massinha/assets → materiais/massinha}/trilha/trilha.mp3 +0 -0
- /package/{kits/memphis/assets → materiais/memphis}/fontes/OFL-bowlby-one.txt +0 -0
- /package/{kits/memphis/assets → materiais/memphis}/fontes/OFL-dm-sans-800.txt +0 -0
- /package/{kits/memphis/assets → materiais/memphis}/fontes/bowlby-one.woff2 +0 -0
- /package/{kits/memphis/assets → materiais/memphis}/fontes/dm-sans-800.woff2 +0 -0
- /package/{kits/memphis/assets → materiais/memphis}/sons/assinatura.mp3 +0 -0
- /package/{kits/memphis/assets → materiais/memphis}/sons/clique.mp3 +0 -0
- /package/{kits/memphis/assets → materiais/memphis}/sons/impacto.mp3 +0 -0
- /package/{kits/memphis/assets → materiais/memphis}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/memphis/assets → materiais/memphis}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/memphis/assets → materiais/memphis}/sons/subida.mp3 +0 -0
- /package/{kits/memphis/assets → materiais/memphis}/sons/swoosh.mp3 +0 -0
- /package/{kits/memphis/assets → materiais/memphis}/sons/tick.mp3 +0 -0
- /package/{kits/memphis/assets → materiais/memphis}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/memphis/assets → materiais/memphis}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/memphis/assets → materiais/memphis}/trilha/trilha.mp3 +0 -0
- /package/{kits/metal-liquido/elementos → materiais/metal-liquido/camera}/Camera.tsx +0 -0
- /package/{kits/metal-liquido/assets → materiais/metal-liquido}/fontes/OFL-SpaceGrotesk.txt +0 -0
- /package/{kits/metal-liquido/assets → materiais/metal-liquido}/fontes/OFL-Unbounded.txt +0 -0
- /package/{kits/metal-liquido/assets → materiais/metal-liquido}/fontes/grotesk-latin.woff2 +0 -0
- /package/{kits/metal-liquido/assets → materiais/metal-liquido}/fontes/unbounded-latin.woff2 +0 -0
- /package/{kits/metal-liquido/assets → materiais/metal-liquido}/sons/assinatura.mp3 +0 -0
- /package/{kits/metal-liquido/assets → materiais/metal-liquido}/sons/clique.mp3 +0 -0
- /package/{kits/metal-liquido/assets → materiais/metal-liquido}/sons/cromo.mp3 +0 -0
- /package/{kits/metal-liquido/assets → materiais/metal-liquido}/sons/liquido.mp3 +0 -0
- /package/{kits/metal-liquido/assets → materiais/metal-liquido}/sons/quique.mp3 +0 -0
- /package/{kits/metal-liquido/assets → materiais/metal-liquido}/sons/subida.mp3 +0 -0
- /package/{kits/metal-liquido/assets → materiais/metal-liquido}/sons/varre.mp3 +0 -0
- /package/{kits/metal-liquido/assets → materiais/metal-liquido}/sons/whoosh.mp3 +0 -0
- /package/{kits/metal-liquido/assets → materiais/metal-liquido}/trilha/sombrio-114bpm.mp3 +0 -0
- /package/{kits/minimal/elementos → materiais/minimal/camera}/Camera.tsx +0 -0
- /package/{kits/minimal/assets → materiais/minimal}/fontes/OFL-HankenGrotesk.txt +0 -0
- /package/{kits/minimal/assets → materiais/minimal}/fontes/OFL-SplineSansMono.txt +0 -0
- /package/{kits/minimal/assets → materiais/minimal}/fontes/hanken.woff2 +0 -0
- /package/{kits/minimal/assets → materiais/minimal}/fontes/splinemono.woff2 +0 -0
- /package/{kits/minimal/assets → materiais/minimal}/sons/assinatura.mp3 +0 -0
- /package/{kits/minimal/assets → materiais/minimal}/sons/clique.mp3 +0 -0
- /package/{kits/minimal/assets → materiais/minimal}/sons/impacto.mp3 +0 -0
- /package/{kits/minimal/assets → materiais/minimal}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/minimal/assets → materiais/minimal}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/minimal/assets → materiais/minimal}/sons/subida.mp3 +0 -0
- /package/{kits/minimal/assets → materiais/minimal}/sons/swoosh.mp3 +0 -0
- /package/{kits/minimal/assets → materiais/minimal}/sons/toque.mp3 +0 -0
- /package/{kits/minimal/assets → materiais/minimal}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/minimal/assets → materiais/minimal}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/minimal/assets → materiais/minimal}/trilha/vazio-90bpm.mp3 +0 -0
- /package/{kits/neon-cidade/elementos → materiais/neon-cidade/camera}/Camera.tsx +0 -0
- /package/{kits/neon-cidade/assets → materiais/neon-cidade}/fontes/OFL-BarlowCondensed.txt +0 -0
- /package/{kits/neon-cidade/assets → materiais/neon-cidade}/fontes/OFL-TiltNeon.txt +0 -0
- /package/{kits/neon-cidade/assets → materiais/neon-cidade}/fontes/barlow-latin.woff2 +0 -0
- /package/{kits/neon-cidade/assets → materiais/neon-cidade}/fontes/tiltneon-latin.woff2 +0 -0
- /package/{kits/neon-cidade/assets → materiais/neon-cidade}/sons/assinatura.mp3 +0 -0
- /package/{kits/neon-cidade/assets → materiais/neon-cidade}/sons/balanca.mp3 +0 -0
- /package/{kits/neon-cidade/assets → materiais/neon-cidade}/sons/clique.mp3 +0 -0
- /package/{kits/neon-cidade/assets → materiais/neon-cidade}/sons/impacto.mp3 +0 -0
- /package/{kits/neon-cidade/assets → materiais/neon-cidade}/sons/liga.mp3 +0 -0
- /package/{kits/neon-cidade/assets → materiais/neon-cidade}/sons/tick.mp3 +0 -0
- /package/{kits/neon-cidade/assets → materiais/neon-cidade}/sons/whoosh.mp3 +0 -0
- /package/{kits/neon-cidade/assets → materiais/neon-cidade}/sons/zumbido.mp3 +0 -0
- /package/{kits/neon-cidade/assets → materiais/neon-cidade}/trilha/noite-100bpm.mp3 +0 -0
- /package/{kits/notion-editorial/assets → materiais/notion-editorial}/fontes/OFL-Cormorant-Italic.txt +0 -0
- /package/{kits/notion-editorial/assets → materiais/notion-editorial}/fontes/OFL-Cormorant.txt +0 -0
- /package/{kits/notion-editorial/assets → materiais/notion-editorial}/fontes/OFL-Jost.txt +0 -0
- /package/{kits/notion-editorial/assets → materiais/notion-editorial}/fontes/cormorant-italic.woff2 +0 -0
- /package/{kits/notion-editorial/assets → materiais/notion-editorial}/fontes/cormorant.woff2 +0 -0
- /package/{kits/notion-editorial/assets → materiais/notion-editorial}/fontes/jost.woff2 +0 -0
- /package/{kits/notion-editorial/elementos → materiais/notion-editorial/formas}/desenho.tsx +0 -0
- /package/{kits/notion-editorial/assets → materiais/notion-editorial}/sons/assinatura.mp3 +0 -0
- /package/{kits/notion-editorial/assets → materiais/notion-editorial}/sons/clique.mp3 +0 -0
- /package/{kits/notion-editorial/assets → materiais/notion-editorial}/sons/impacto.mp3 +0 -0
- /package/{kits/notion-editorial/assets → materiais/notion-editorial}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/notion-editorial/assets → materiais/notion-editorial}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/notion-editorial/assets → materiais/notion-editorial}/sons/subida.mp3 +0 -0
- /package/{kits/notion-editorial/assets → materiais/notion-editorial}/sons/swoosh.mp3 +0 -0
- /package/{kits/notion-editorial/assets → materiais/notion-editorial}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/notion-editorial/assets → materiais/notion-editorial}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/notion-editorial/assets → materiais/notion-editorial}/trilha/trilha.mp3 +0 -0
- /package/{kits/papel-recortado/assets → materiais/papel-recortado}/fontes/OFL-fredoka-700.txt +0 -0
- /package/{kits/papel-recortado/assets → materiais/papel-recortado}/fontes/OFL-nunito-700.txt +0 -0
- /package/{kits/papel-recortado/assets → materiais/papel-recortado}/fontes/fredoka-700.woff2 +0 -0
- /package/{kits/papel-recortado/assets → materiais/papel-recortado}/fontes/nunito-700.woff2 +0 -0
- /package/{kits/papel-recortado/elementos → materiais/papel-recortado/formas}/Filtros.tsx +0 -0
- /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/assinatura.mp3 +0 -0
- /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/clique.mp3 +0 -0
- /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/impacto.mp3 +0 -0
- /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/subida.mp3 +0 -0
- /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/swoosh.mp3 +0 -0
- /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/tick.mp3 +0 -0
- /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/papel-recortado/assets → materiais/papel-recortado}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/papel-recortado/assets → materiais/papel-recortado}/trilha/trilha.mp3 +0 -0
- /package/{kits/pixel/assets → materiais/pixel}/fontes/OFL-pressstart2p.txt +0 -0
- /package/{kits/pixel/assets → materiais/pixel}/fontes/OFL-vt323.txt +0 -0
- /package/{kits/pixel/assets → materiais/pixel}/fontes/pressstart2p.woff2 +0 -0
- /package/{kits/pixel/assets → materiais/pixel}/fontes/vt323.woff2 +0 -0
- /package/{kits/pixel/assets → materiais/pixel}/sons/assinatura.mp3 +0 -0
- /package/{kits/pixel/assets → materiais/pixel}/sons/clique.mp3 +0 -0
- /package/{kits/pixel/assets → materiais/pixel}/sons/impacto.mp3 +0 -0
- /package/{kits/pixel/assets → materiais/pixel}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/pixel/assets → materiais/pixel}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/pixel/assets → materiais/pixel}/sons/subida.mp3 +0 -0
- /package/{kits/pixel/assets → materiais/pixel}/sons/swoosh.mp3 +0 -0
- /package/{kits/pixel/assets → materiais/pixel}/sons/tick.mp3 +0 -0
- /package/{kits/pixel/assets → materiais/pixel}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/pixel/assets → materiais/pixel}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/pixel/assets → materiais/pixel}/trilha/trilha.mp3 +0 -0
- /package/{kits/pontos-3d/elementos → materiais/pontos-3d/camera}/Camera.tsx +0 -0
- /package/{kits/pontos-3d/assets → materiais/pontos-3d}/fontes/OFL-JetBrainsMono.txt +0 -0
- /package/{kits/pontos-3d/assets → materiais/pontos-3d}/fontes/OFL-Sora.txt +0 -0
- /package/{kits/pontos-3d/assets → materiais/pontos-3d}/fontes/jetbrains-latin.woff2 +0 -0
- /package/{kits/pontos-3d/assets → materiais/pontos-3d}/fontes/sora-latin.woff2 +0 -0
- /package/{kits/pontos-3d/assets → materiais/pontos-3d}/sons/assinatura.mp3 +0 -0
- /package/{kits/pontos-3d/assets → materiais/pontos-3d}/sons/clique.mp3 +0 -0
- /package/{kits/pontos-3d/assets → materiais/pontos-3d}/sons/impacto.mp3 +0 -0
- /package/{kits/pontos-3d/assets → materiais/pontos-3d}/sons/pop.mp3 +0 -0
- /package/{kits/pontos-3d/assets → materiais/pontos-3d}/sons/subida.mp3 +0 -0
- /package/{kits/pontos-3d/assets → materiais/pontos-3d}/sons/tick.mp3 +0 -0
- /package/{kits/pontos-3d/assets → materiais/pontos-3d}/sons/varre.mp3 +0 -0
- /package/{kits/pontos-3d/assets → materiais/pontos-3d}/sons/whoosh.mp3 +0 -0
- /package/{kits/pontos-3d/assets → materiais/pontos-3d}/trilha/tech-120bpm.mp3 +0 -0
- /package/{kits/produto-3d/assets → materiais/produto-3d}/fontes/OFL-IBMPlexMono.txt +0 -0
- /package/{kits/produto-3d/assets → materiais/produto-3d}/fontes/OFL-Syncopate.txt +0 -0
- /package/{kits/produto-3d/assets → materiais/produto-3d}/fontes/plex-mono.woff2 +0 -0
- /package/{kits/produto-3d/assets → materiais/produto-3d}/fontes/syncopate-latin.woff2 +0 -0
- /package/{kits/produto-3d/elementos → materiais/produto-3d/lib}/modelos.ts +0 -0
- /package/{kits/produto-3d/elementos → materiais/produto-3d/lib}/raymarch.ts +0 -0
- /package/{kits/produto-3d/assets → materiais/produto-3d}/sons/assinatura.mp3 +0 -0
- /package/{kits/produto-3d/assets → materiais/produto-3d}/sons/clique.mp3 +0 -0
- /package/{kits/produto-3d/assets → materiais/produto-3d}/sons/impacto.mp3 +0 -0
- /package/{kits/produto-3d/assets → materiais/produto-3d}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/produto-3d/assets → materiais/produto-3d}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/produto-3d/assets → materiais/produto-3d}/sons/subida.mp3 +0 -0
- /package/{kits/produto-3d/assets → materiais/produto-3d}/sons/swoosh.mp3 +0 -0
- /package/{kits/produto-3d/assets → materiais/produto-3d}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/produto-3d/assets → materiais/produto-3d}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/produto-3d/assets → materiais/produto-3d}/trilha/trilha.mp3 +0 -0
- /package/{kits/quadro-giz/assets → materiais/quadro-giz}/fontes/OFL-patrick-hand.txt +0 -0
- /package/{kits/quadro-giz/assets → materiais/quadro-giz}/fontes/OFL-schoolbell.txt +0 -0
- /package/{kits/quadro-giz/assets → materiais/quadro-giz}/fontes/patrick-hand.woff2 +0 -0
- /package/{kits/quadro-giz/assets → materiais/quadro-giz}/fontes/schoolbell.woff2 +0 -0
- /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/assinatura.mp3 +0 -0
- /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/clique.mp3 +0 -0
- /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/impacto.mp3 +0 -0
- /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/subida.mp3 +0 -0
- /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/swoosh.mp3 +0 -0
- /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/tick.mp3 +0 -0
- /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/quadro-giz/assets → materiais/quadro-giz}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/quadro-giz/assets → materiais/quadro-giz}/trilha/trilha.mp3 +0 -0
- /package/{kits/rabisco/assets → materiais/rabisco}/fontes/OFL-caveat-700.txt +0 -0
- /package/{kits/rabisco/assets → materiais/rabisco}/fontes/OFL-permanent-marker.txt +0 -0
- /package/{kits/rabisco/assets → materiais/rabisco}/fontes/caveat-700.woff2 +0 -0
- /package/{kits/rabisco/assets → materiais/rabisco}/fontes/permanent-marker.woff2 +0 -0
- /package/{kits/rabisco/elementos → materiais/rabisco/formas}/Overlay.tsx +0 -0
- /package/{kits/rabisco/assets → materiais/rabisco}/sons/assinatura.mp3 +0 -0
- /package/{kits/rabisco/assets → materiais/rabisco}/sons/clique.mp3 +0 -0
- /package/{kits/rabisco/assets → materiais/rabisco}/sons/impacto.mp3 +0 -0
- /package/{kits/rabisco/assets → materiais/rabisco}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/rabisco/assets → materiais/rabisco}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/rabisco/assets → materiais/rabisco}/sons/subida.mp3 +0 -0
- /package/{kits/rabisco/assets → materiais/rabisco}/sons/swoosh.mp3 +0 -0
- /package/{kits/rabisco/assets → materiais/rabisco}/sons/tick.mp3 +0 -0
- /package/{kits/rabisco/assets → materiais/rabisco}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/rabisco/assets → materiais/rabisco}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/rabisco/assets → materiais/rabisco}/trilha/trilha.mp3 +0 -0
- /package/{kits/retro-70/elementos → materiais/retro-70/camera}/Camera.tsx +0 -0
- /package/{kits/retro-70/assets → materiais/retro-70}/fontes/OFL-Fredoka.txt +0 -0
- /package/{kits/retro-70/assets → materiais/retro-70}/fontes/OFL-Shrikhand.txt +0 -0
- /package/{kits/retro-70/assets → materiais/retro-70}/fontes/fredoka.woff2 +0 -0
- /package/{kits/retro-70/assets → materiais/retro-70}/fontes/shrikhand.woff2 +0 -0
- /package/{kits/retro-70/assets → materiais/retro-70}/sons/assinatura.mp3 +0 -0
- /package/{kits/retro-70/assets → materiais/retro-70}/sons/clique.mp3 +0 -0
- /package/{kits/retro-70/assets → materiais/retro-70}/sons/impacto.mp3 +0 -0
- /package/{kits/retro-70/assets → materiais/retro-70}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/retro-70/assets → materiais/retro-70}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/retro-70/assets → materiais/retro-70}/sons/subida.mp3 +0 -0
- /package/{kits/retro-70/assets → materiais/retro-70}/sons/swoosh.mp3 +0 -0
- /package/{kits/retro-70/assets → materiais/retro-70}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/retro-70/assets → materiais/retro-70}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/retro-70/assets → materiais/retro-70}/trilha/solar-104bpm.mp3 +0 -0
- /package/{kits/revista/elementos → materiais/revista/camera}/Camera.tsx +0 -0
- /package/{kits/revista/assets → materiais/revista}/fontes/OFL-CormorantGaramond.txt +0 -0
- /package/{kits/revista/assets → materiais/revista}/fontes/OFL-Jost.txt +0 -0
- /package/{kits/revista/assets → materiais/revista}/fontes/cormorant-italic.woff2 +0 -0
- /package/{kits/revista/assets → materiais/revista}/fontes/cormorant.woff2 +0 -0
- /package/{kits/revista/assets → materiais/revista}/fontes/jost.woff2 +0 -0
- /package/{kits/revista/assets → materiais/revista}/sons/assinatura.mp3 +0 -0
- /package/{kits/revista/assets → materiais/revista}/sons/clique.mp3 +0 -0
- /package/{kits/revista/assets → materiais/revista}/sons/impacto.mp3 +0 -0
- /package/{kits/revista/assets → materiais/revista}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/revista/assets → materiais/revista}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/revista/assets → materiais/revista}/sons/subida.mp3 +0 -0
- /package/{kits/revista/assets → materiais/revista}/sons/swoosh.mp3 +0 -0
- /package/{kits/revista/assets → materiais/revista}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/revista/assets → materiais/revista}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/revista/assets → materiais/revista}/trilha/editorial-100bpm.mp3 +0 -0
- /package/{kits/risografia/assets → materiais/risografia}/fontes/OFL-bricolage-800.txt +0 -0
- /package/{kits/risografia/assets → materiais/risografia}/fontes/OFL-space-mono-700.txt +0 -0
- /package/{kits/risografia/assets → materiais/risografia}/fontes/bricolage-800.woff2 +0 -0
- /package/{kits/risografia/assets → materiais/risografia}/fontes/space-mono-700.woff2 +0 -0
- /package/{kits/risografia/assets → materiais/risografia}/sons/assinatura.mp3 +0 -0
- /package/{kits/risografia/assets → materiais/risografia}/sons/clique.mp3 +0 -0
- /package/{kits/risografia/assets → materiais/risografia}/sons/impacto.mp3 +0 -0
- /package/{kits/risografia/assets → materiais/risografia}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/risografia/assets → materiais/risografia}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/risografia/assets → materiais/risografia}/sons/subida.mp3 +0 -0
- /package/{kits/risografia/assets → materiais/risografia}/sons/swoosh.mp3 +0 -0
- /package/{kits/risografia/assets → materiais/risografia}/sons/tick.mp3 +0 -0
- /package/{kits/risografia/assets → materiais/risografia}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/risografia/assets → materiais/risografia}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/risografia/assets → materiais/risografia}/trilha/trilha.mp3 +0 -0
- /package/{kits/saas-linear/assets → materiais/saas-linear}/fontes/OFL-Inter.txt +0 -0
- /package/{kits/saas-linear/assets → materiais/saas-linear}/fontes/OFL-Newsreader.txt +0 -0
- /package/{kits/saas-linear/assets → materiais/saas-linear}/fontes/inter-400.woff2 +0 -0
- /package/{kits/saas-linear/assets → materiais/saas-linear}/fontes/inter-600.woff2 +0 -0
- /package/{kits/saas-linear/assets → materiais/saas-linear}/fontes/newsreader-400.woff2 +0 -0
- /package/{kits/saas-linear/assets → materiais/saas-linear}/sons/assinatura.mp3 +0 -0
- /package/{kits/saas-linear/assets → materiais/saas-linear}/sons/clique.mp3 +0 -0
- /package/{kits/saas-linear/assets → materiais/saas-linear}/sons/impacto.mp3 +0 -0
- /package/{kits/saas-linear/assets → materiais/saas-linear}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/saas-linear/assets → materiais/saas-linear}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/saas-linear/assets → materiais/saas-linear}/sons/subida.mp3 +0 -0
- /package/{kits/saas-linear/assets → materiais/saas-linear}/sons/swoosh.mp3 +0 -0
- /package/{kits/saas-linear/assets → materiais/saas-linear}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/saas-linear/assets → materiais/saas-linear}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/saas-linear/assets → materiais/saas-linear}/trilha/trilha.mp3 +0 -0
- /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/fontes/OFL-DM-Mono.txt +0 -0
- /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/fontes/OFL-Inter.txt +0 -0
- /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/fontes/dm-mono.woff2 +0 -0
- /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/fontes/inter.woff2 +0 -0
- /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/sons/assinatura.mp3 +0 -0
- /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/sons/clique.mp3 +0 -0
- /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/sons/impacto.mp3 +0 -0
- /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/sons/subida.mp3 +0 -0
- /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/sons/swoosh.mp3 +0 -0
- /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/stripe-ondas/assets → materiais/stripe-ondas}/trilha/trilha.mp3 +0 -0
- /package/{kits/suica/elementos → materiais/suica/camera}/Camera.tsx +0 -0
- /package/{kits/suica/assets → materiais/suica}/fontes/OFL-IBMPlexMono.txt +0 -0
- /package/{kits/suica/assets → materiais/suica}/fontes/OFL-InterTight.txt +0 -0
- /package/{kits/suica/assets → materiais/suica}/fontes/inter-tight.woff2 +0 -0
- /package/{kits/suica/assets → materiais/suica}/fontes/plex-mono.woff2 +0 -0
- /package/{kits/suica/assets → materiais/suica}/sons/assinatura.mp3 +0 -0
- /package/{kits/suica/assets → materiais/suica}/sons/clique.mp3 +0 -0
- /package/{kits/suica/assets → materiais/suica}/sons/impacto.mp3 +0 -0
- /package/{kits/suica/assets → materiais/suica}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/suica/assets → materiais/suica}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/suica/assets → materiais/suica}/sons/subida.mp3 +0 -0
- /package/{kits/suica/assets → materiais/suica}/sons/swoosh.mp3 +0 -0
- /package/{kits/suica/assets → materiais/suica}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/suica/assets → materiais/suica}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/suica/assets → materiais/suica}/trilha/frio-120bpm.mp3 +0 -0
- /package/{kits/synthwave/elementos → materiais/synthwave/camera}/Camera.tsx +0 -0
- /package/{kits/synthwave/assets → materiais/synthwave}/fontes/OFL-Orbitron.txt +0 -0
- /package/{kits/synthwave/assets → materiais/synthwave}/fontes/OFL-Rajdhani.txt +0 -0
- /package/{kits/synthwave/assets → materiais/synthwave}/fontes/orbitron.woff2 +0 -0
- /package/{kits/synthwave/assets → materiais/synthwave}/fontes/rajdhani.woff2 +0 -0
- /package/{kits/synthwave/assets → materiais/synthwave}/sons/assinatura.mp3 +0 -0
- /package/{kits/synthwave/assets → materiais/synthwave}/sons/clique.mp3 +0 -0
- /package/{kits/synthwave/assets → materiais/synthwave}/sons/impacto.mp3 +0 -0
- /package/{kits/synthwave/assets → materiais/synthwave}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/synthwave/assets → materiais/synthwave}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/synthwave/assets → materiais/synthwave}/sons/subida.mp3 +0 -0
- /package/{kits/synthwave/assets → materiais/synthwave}/sons/swoosh.mp3 +0 -0
- /package/{kits/synthwave/assets → materiais/synthwave}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/synthwave/assets → materiais/synthwave}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/synthwave/assets → materiais/synthwave}/trilha/noite-110bpm.mp3 +0 -0
- /package/{kits/terminal/assets → materiais/terminal}/fontes/OFL-jetbrains-mono-700.txt +0 -0
- /package/{kits/terminal/assets → materiais/terminal}/fontes/OFL-vt323.txt +0 -0
- /package/{kits/terminal/assets → materiais/terminal}/fontes/jetbrains-mono-700.woff2 +0 -0
- /package/{kits/terminal/assets → materiais/terminal}/fontes/vt323.woff2 +0 -0
- /package/{kits/terminal/assets → materiais/terminal}/sons/assinatura.mp3 +0 -0
- /package/{kits/terminal/assets → materiais/terminal}/sons/clique.mp3 +0 -0
- /package/{kits/terminal/assets → materiais/terminal}/sons/digitar.mp3 +0 -0
- /package/{kits/terminal/assets → materiais/terminal}/sons/impacto.mp3 +0 -0
- /package/{kits/terminal/assets → materiais/terminal}/sons/liga-crt.mp3 +0 -0
- /package/{kits/terminal/assets → materiais/terminal}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/terminal/assets → materiais/terminal}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/terminal/assets → materiais/terminal}/sons/subida.mp3 +0 -0
- /package/{kits/terminal/assets → materiais/terminal}/sons/swoosh.mp3 +0 -0
- /package/{kits/terminal/assets → materiais/terminal}/sons/tick.mp3 +0 -0
- /package/{kits/terminal/assets → materiais/terminal}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/terminal/assets → materiais/terminal}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/terminal/assets → materiais/terminal}/trilha/trilha.mp3 +0 -0
- /package/{kits/tiktok-energia/elementos → materiais/tiktok-energia/camera}/Camera.tsx +0 -0
- /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/fontes/OFL-Anton.txt +0 -0
- /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/fontes/OFL-Rubik.txt +0 -0
- /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/fontes/anton-latin.woff2 +0 -0
- /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/fontes/rubik-latin.woff2 +0 -0
- /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/sons/assinatura.mp3 +0 -0
- /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/sons/corte.mp3 +0 -0
- /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/sons/palavra.mp3 +0 -0
- /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/sons/pop.mp3 +0 -0
- /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/sons/soco.mp3 +0 -0
- /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/sons/subida.mp3 +0 -0
- /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/sons/whoosh.mp3 +0 -0
- /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/sons/zap.mp3 +0 -0
- /package/{kits/tiktok-energia/assets → materiais/tiktok-energia}/trilha/tech-128bpm.mp3 +0 -0
- /package/{kits/tunel/elementos → materiais/tunel/camera}/Camera.tsx +0 -0
- /package/{kits/tunel/assets → materiais/tunel}/fontes/OFL-ChakraPetch.txt +0 -0
- /package/{kits/tunel/assets → materiais/tunel}/fontes/OFL-Syncopate.txt +0 -0
- /package/{kits/tunel/assets → materiais/tunel}/fontes/chakra-latin.woff2 +0 -0
- /package/{kits/tunel/assets → materiais/tunel}/fontes/syncopate-latin.woff2 +0 -0
- /package/{kits/tunel/assets → materiais/tunel}/sons/assinatura.mp3 +0 -0
- /package/{kits/tunel/assets → materiais/tunel}/sons/clique.mp3 +0 -0
- /package/{kits/tunel/assets → materiais/tunel}/sons/impacto.mp3 +0 -0
- /package/{kits/tunel/assets → materiais/tunel}/sons/passa.mp3 +0 -0
- /package/{kits/tunel/assets → materiais/tunel}/sons/subida.mp3 +0 -0
- /package/{kits/tunel/assets → materiais/tunel}/sons/tick.mp3 +0 -0
- /package/{kits/tunel/assets → materiais/tunel}/sons/varre.mp3 +0 -0
- /package/{kits/tunel/assets → materiais/tunel}/sons/whoosh.mp3 +0 -0
- /package/{kits/tunel/assets → materiais/tunel}/trilha/tech-128bpm.mp3 +0 -0
- /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/fontes/OFL-JetBrainsMono.txt +0 -0
- /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/fontes/OFL-PlusJakartaSans.txt +0 -0
- /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/fontes/jakarta.woff2 +0 -0
- /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/fontes/jbmono.woff2 +0 -0
- /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/assinatura.mp3 +0 -0
- /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/clique.mp3 +0 -0
- /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/digitar.mp3 +0 -0
- /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/impacto.mp3 +0 -0
- /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/subida.mp3 +0 -0
- /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/sucesso.mp3 +0 -0
- /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/swoosh.mp3 +0 -0
- /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/tutorial-tela/assets → materiais/tutorial-tela}/trilha/passo-108bpm.mp3 +0 -0
- /package/{kits/ugc-reels/elementos → materiais/ugc-reels/camera}/Camera.tsx +0 -0
- /package/{kits/ugc-reels/assets → materiais/ugc-reels}/fontes/OFL-Caveat.txt +0 -0
- /package/{kits/ugc-reels/assets → materiais/ugc-reels}/fontes/OFL-Montserrat.txt +0 -0
- /package/{kits/ugc-reels/assets → materiais/ugc-reels}/fontes/caveat-latin.woff2 +0 -0
- /package/{kits/ugc-reels/assets → materiais/ugc-reels}/fontes/montserrat-latin.woff2 +0 -0
- /package/{kits/ugc-reels/assets → materiais/ugc-reels}/sons/assinatura.mp3 +0 -0
- /package/{kits/ugc-reels/assets → materiais/ugc-reels}/sons/corte.mp3 +0 -0
- /package/{kits/ugc-reels/assets → materiais/ugc-reels}/sons/impacto.mp3 +0 -0
- /package/{kits/ugc-reels/assets → materiais/ugc-reels}/sons/notificacao.mp3 +0 -0
- /package/{kits/ugc-reels/assets → materiais/ugc-reels}/sons/palavra.mp3 +0 -0
- /package/{kits/ugc-reels/assets → materiais/ugc-reels}/sons/pop.mp3 +0 -0
- /package/{kits/ugc-reels/assets → materiais/ugc-reels}/sons/toque.mp3 +0 -0
- /package/{kits/ugc-reels/assets → materiais/ugc-reels}/sons/whoosh.mp3 +0 -0
- /package/{kits/ugc-reels/assets → materiais/ugc-reels}/trilha/pop-120bpm.mp3 +0 -0
- /package/{kits/vercel-mono/assets → materiais/vercel-mono}/fontes/OFL-Inter.txt +0 -0
- /package/{kits/vercel-mono/assets → materiais/vercel-mono}/fontes/OFL-JetBrains-Mono.txt +0 -0
- /package/{kits/vercel-mono/assets → materiais/vercel-mono}/fontes/inter.woff2 +0 -0
- /package/{kits/vercel-mono/assets → materiais/vercel-mono}/fontes/jetbrains-mono.woff2 +0 -0
- /package/{kits/vercel-mono/assets → materiais/vercel-mono}/sons/assinatura.mp3 +0 -0
- /package/{kits/vercel-mono/assets → materiais/vercel-mono}/sons/clique.mp3 +0 -0
- /package/{kits/vercel-mono/assets → materiais/vercel-mono}/sons/impacto.mp3 +0 -0
- /package/{kits/vercel-mono/assets → materiais/vercel-mono}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/vercel-mono/assets → materiais/vercel-mono}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/vercel-mono/assets → materiais/vercel-mono}/sons/subida.mp3 +0 -0
- /package/{kits/vercel-mono/assets → materiais/vercel-mono}/sons/swoosh.mp3 +0 -0
- /package/{kits/vercel-mono/assets → materiais/vercel-mono}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/vercel-mono/assets → materiais/vercel-mono}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/vercel-mono/assets → materiais/vercel-mono}/trilha/trilha.mp3 +0 -0
- /package/{kits/vhs-90/elementos → materiais/vhs-90/camera}/Camera.tsx +0 -0
- /package/{kits/vhs-90/assets → materiais/vhs-90}/fontes/OFL-BebasNeue.txt +0 -0
- /package/{kits/vhs-90/assets → materiais/vhs-90}/fontes/OFL-VT323.txt +0 -0
- /package/{kits/vhs-90/assets → materiais/vhs-90}/fontes/bebas.woff2 +0 -0
- /package/{kits/vhs-90/assets → materiais/vhs-90}/fontes/vt323.woff2 +0 -0
- /package/{kits/vhs-90/assets → materiais/vhs-90}/sons/assinatura.mp3 +0 -0
- /package/{kits/vhs-90/assets → materiais/vhs-90}/sons/clique.mp3 +0 -0
- /package/{kits/vhs-90/assets → materiais/vhs-90}/sons/impacto.mp3 +0 -0
- /package/{kits/vhs-90/assets → materiais/vhs-90}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/vhs-90/assets → materiais/vhs-90}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/vhs-90/assets → materiais/vhs-90}/sons/subida.mp3 +0 -0
- /package/{kits/vhs-90/assets → materiais/vhs-90}/sons/swoosh.mp3 +0 -0
- /package/{kits/vhs-90/assets → materiais/vhs-90}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/vhs-90/assets → materiais/vhs-90}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/vhs-90/assets → materiais/vhs-90}/trilha/fita-88bpm.mp3 +0 -0
- /package/{kits/vidro-ios/assets → materiais/vidro-ios}/fontes/OFL-DM-Mono.txt +0 -0
- /package/{kits/vidro-ios/assets → materiais/vidro-ios}/fontes/OFL-Inter.txt +0 -0
- /package/{kits/vidro-ios/assets → materiais/vidro-ios}/fontes/dm-mono.woff2 +0 -0
- /package/{kits/vidro-ios/assets → materiais/vidro-ios}/fontes/inter.woff2 +0 -0
- /package/{kits/vidro-ios/assets → materiais/vidro-ios}/sons/assinatura.mp3 +0 -0
- /package/{kits/vidro-ios/assets → materiais/vidro-ios}/sons/clique.mp3 +0 -0
- /package/{kits/vidro-ios/assets → materiais/vidro-ios}/sons/impacto.mp3 +0 -0
- /package/{kits/vidro-ios/assets → materiais/vidro-ios}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/vidro-ios/assets → materiais/vidro-ios}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/vidro-ios/assets → materiais/vidro-ios}/sons/subida.mp3 +0 -0
- /package/{kits/vidro-ios/assets → materiais/vidro-ios}/sons/swoosh.mp3 +0 -0
- /package/{kits/vidro-ios/assets → materiais/vidro-ios}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/vidro-ios/assets → materiais/vidro-ios}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/vidro-ios/assets → materiais/vidro-ios}/trilha/trilha.mp3 +0 -0
- /package/{kits/y2k-cromado/elementos → materiais/y2k-cromado/camera}/Camera.tsx +0 -0
- /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/fontes/OFL-DMMono.txt +0 -0
- /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/fontes/OFL-Unbounded.txt +0 -0
- /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/fontes/dm-mono.woff2 +0 -0
- /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/fontes/unbounded.woff2 +0 -0
- /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/sons/assinatura.mp3 +0 -0
- /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/sons/clique.mp3 +0 -0
- /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/sons/impacto.mp3 +0 -0
- /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/sons/pop-cartao.mp3 +0 -0
- /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/sons/pop-palavra.mp3 +0 -0
- /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/sons/subida.mp3 +0 -0
- /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/sons/swoosh.mp3 +0 -0
- /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/sons/whoosh-entra.mp3 +0 -0
- /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/sons/whoosh-sai.mp3 +0 -0
- /package/{kits/y2k-cromado/assets → materiais/y2k-cromado}/trilha/y2k-128bpm.mp3 +0 -0
|
@@ -0,0 +1,2522 @@
|
|
|
1
|
+
// Loop do agente autônomo — streaming via /api/act/stream.
|
|
2
|
+
//
|
|
3
|
+
// O contrato com o servidor é uma conversa completa (`messages`, estilo OpenAI).
|
|
4
|
+
// Cada volta: o servidor devolve tool_calls -> executamos AQUI, com await, e
|
|
5
|
+
// devolvemos o resultado na volta seguinte. Sem isso o modelo fica cego e
|
|
6
|
+
// repete a mesma tool até estourar o limite.
|
|
7
|
+
//
|
|
8
|
+
// spawn_agent roda este mesmo loop recursivamente, com conversa própria: o
|
|
9
|
+
// subagente não enxerga o diálogo do usuário e devolve só o resumo final.
|
|
10
|
+
|
|
11
|
+
'use strict';
|
|
12
|
+
|
|
13
|
+
/* A EDIÇÃO COMPLETA de vídeo falado (20/10/2026): o motor do EDIT IA PRO, pela
|
|
14
|
+
ferramenta editor_pro ou, com servidor antigo, pelo `primocode editor` no
|
|
15
|
+
run_shell. É o caminho SE a pessoa quer o vídeo editado; quem decide é o modelo. */
|
|
16
|
+
const EDICAO_DE_VIDEO_FALADO = 'SE ELA QUER A GRAVAÇÃO DELA FALANDO EDITADA DE VERDADE (a edição completa: "edita meu vídeo", "faz um reels disso", '
|
|
17
|
+
+ '"coloca legenda e efeitos", corte + legenda + gancho + efeitos + sons + trilha), o caminho é o editor_pro (motor EDIT IA PRO; a skill editar-video explica): '
|
|
18
|
+
+ 'acao:"cortar" {video} → leia a fala que volta, com os tempos → acao:"montar" {pasta, plano:{gancho, pecas, broll}} → entregue <pasta>/final.mp4 só com o portão PASSOU '
|
|
19
|
+
+ '(atalho sem plano: acao:"editar"). Se editor_pro não estiver na sua lista de ferramentas, rode o mesmo pelo run_shell: '
|
|
20
|
+
+ '`primocode editor cortar --json \'{"video":"<arquivo>"}\'` (montar e editar do mesmo jeito; a saída é uma linha de JSON).\n';
|
|
21
|
+
|
|
22
|
+
const { c, Spinner, PENSANDO } = require('../../tui/ui');
|
|
23
|
+
const fala = require('../../fala');
|
|
24
|
+
const especialistas = require('../../skill/especialistas');
|
|
25
|
+
const limites = require('../../config/limites');
|
|
26
|
+
let avisouParalelo = false;
|
|
27
|
+
const tools = require('../../tool/tools');
|
|
28
|
+
const api = require('../../provider/api');
|
|
29
|
+
const cfg = require('../../config/config');
|
|
30
|
+
const catalogo = require('../../skill/catalogo');
|
|
31
|
+
const repeticao = require('../../repeticao');
|
|
32
|
+
const diff = require('../../diff');
|
|
33
|
+
const registro = require('../../registro');
|
|
34
|
+
const permissao = require('../../permission/permissao');
|
|
35
|
+
const perigo = require('../../permission/perigo');
|
|
36
|
+
const skills = require('../../skill/skills');
|
|
37
|
+
const checkpoint = require('../checkpoint');
|
|
38
|
+
const hooks = require('../../hooks');
|
|
39
|
+
const tempos = require('../../tempos');
|
|
40
|
+
const preLeitura = require('../../pre-leitura');
|
|
41
|
+
const travado = require('../../travado');
|
|
42
|
+
const auditoria = require('../../auditoria');
|
|
43
|
+
const chamadaTorta = require('../../chamada-torta');
|
|
44
|
+
const idioma = require('../../idioma');
|
|
45
|
+
const entregaveis = require('../../plugin/entregaveis');
|
|
46
|
+
|
|
47
|
+
// 40, não 15: com o freio de repetição (repeticao.js) e o de rodada parada,
|
|
48
|
+
// volta a mais não é volta em círculo — é trabalho. Quinze acabavam no meio
|
|
49
|
+
// de um vídeo de dez cenas com pesquisa, e a pessoa lia "gastei as voltas".
|
|
50
|
+
const MAX_ITERATIONS = Number(process.env.PRIMOCODE_MAX_VOLTAS || 40);
|
|
51
|
+
const MAX_VOLTAS_AGENTE = Number(process.env.PRIMOCODE_MAX_VOLTAS_AGENTE || 20);
|
|
52
|
+
// Quantas vezes o agente é EMPURRADO quando para no meio para narrar
|
|
53
|
+
// ("agora vou criar o arquivo…") em vez de fazer. Ver `pareceParadaNoMeio`.
|
|
54
|
+
const MAX_EMPURROES = 3;
|
|
55
|
+
// Voltas seguidas sem executar nada antes de desistir.
|
|
56
|
+
const MAX_RODADAS_PARADAS = 3;
|
|
57
|
+
const MAX_PROFUNDIDADE = 2; // principal + 1 nível de subagente
|
|
58
|
+
// As leituras que, repetidas sem mudança no meio, devolvem o guardado.
|
|
59
|
+
const RELEITURA = new Set(['read_file', 'list_dir']);
|
|
60
|
+
/* O que só lê: pode rodar junto com as outras leituras da mesma rodada. */
|
|
61
|
+
const SO_LEITURA = new Set(['read_file', 'list_dir', 'glob', 'grep', 'pesquisar_referencia', 'buscar_web', 'ler_url', 'estudio_site', 'mcp_procurar']);
|
|
62
|
+
const ehLeitura = (tc) => SO_LEITURA.has(tc.name)
|
|
63
|
+
|| (tc.name === 'run_shell' && /^\s*primocode\s+(skill|mcp\s+list|video\s+(help|get_timeline|get_transcript))\b/.test(String((tc.arguments && tc.arguments.command) || '')));
|
|
64
|
+
|
|
65
|
+
// ── Interrupção (Esc Esc) ─────────────────────────────────────────────────
|
|
66
|
+
// O usuário aperta Esc duas vezes e o agente PARA — entre uma rodada e outra
|
|
67
|
+
// e entre uma tool e a seguinte (uma tool já em execução termina; o que ela
|
|
68
|
+
// fez, ficou feito). A flag é do módulo de propósito: parar o principal para
|
|
69
|
+
// os subagentes junto.
|
|
70
|
+
let PARAR = false;
|
|
71
|
+
// O pedido que está em voo agora. Sem isto o Esc Esc só valia entre uma
|
|
72
|
+
// rodada e outra: o modelo seguia escrevendo do outro lado e o usuário ficava
|
|
73
|
+
// vendo o spinner girar depois de ter mandado parar.
|
|
74
|
+
let emVoo = null;
|
|
75
|
+
/** Se o último pedido foi parado com Esc Esc (o PARAR só volta a false no começo do próximo). */
|
|
76
|
+
function interrompido() { return PARAR; }
|
|
77
|
+
|
|
78
|
+
function interromper() {
|
|
79
|
+
PARAR = true;
|
|
80
|
+
if (emVoo) { try { emVoo.abort(); } catch {} }
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* ── A CAIXA DE ENTRADA: o que a pessoa digita enquanto ele trabalha ────
|
|
84
|
+
* Antes, a linha digitada durante uma tarefa ia para a fila do terminal e só
|
|
85
|
+
* rodava DEPOIS — como um pedido novo, que não sabia nada do que estava em
|
|
86
|
+
* curso. "Mesmo quando ela estiver trabalhando poderá enviar mensagem; ela
|
|
87
|
+
* vai à fila e, quando o PrimoCode termina um passo, recebe a mensagem e
|
|
88
|
+
* integra na tarefa." É o que o Claude Code e o Codex fazem: o recado entra
|
|
89
|
+
* na conversa na fronteira seguinte — depois do resultado das ferramentas,
|
|
90
|
+
* antes da próxima ida ao modelo. Nenhuma ferramenta é cortada no meio.
|
|
91
|
+
*
|
|
92
|
+
* Só o pedido PRINCIPAL lê a caixa (o subagente trabalha para ele). O que
|
|
93
|
+
* sobrar quando a tarefa acabar volta para o terminal como pedido normal. */
|
|
94
|
+
const CAIXA = [];
|
|
95
|
+
let TRABALHANDO = false;
|
|
96
|
+
function mandarDuranteATarefa(texto) {
|
|
97
|
+
const t = String(texto || '').trim();
|
|
98
|
+
if (!t || !TRABALHANDO) return false;
|
|
99
|
+
CAIXA.push(t);
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
function trabalhando() { return TRABALHANDO; }
|
|
103
|
+
/** O que ficou na caixa sem ser lido — o terminal roda como pedido novo. */
|
|
104
|
+
function sobrasDaCaixa() { return CAIXA.splice(0); }
|
|
105
|
+
/* Esvazia a caixa dentro da conversa. Devolve quantos recados entraram. */
|
|
106
|
+
function entregarRecados(messages, profundidade) {
|
|
107
|
+
if (!CAIXA.length) return 0;
|
|
108
|
+
const recados = CAIXA.splice(0);
|
|
109
|
+
for (const r of recados) fala.pensamento(`recado recebido — entrando na tarefa: ${r}`, profundidade);
|
|
110
|
+
messages.push({
|
|
111
|
+
role: 'user',
|
|
112
|
+
content: (recados.length === 1 ? 'MENSAGEM NOVA do usuário, enviada enquanto você trabalhava:\n'
|
|
113
|
+
: 'MENSAGENS NOVAS do usuário, enviadas enquanto você trabalhava:\n')
|
|
114
|
+
+ recados.map((r) => `- ${r}`).join('\n')
|
|
115
|
+
+ '\n\nIntegre isto na tarefa em curso: se é um ajuste, aplique; se muda o rumo, siga o novo rumo; '
|
|
116
|
+
+ 'se é uma pergunta, responda em uma frase e continue. Não recomece o que já está feito.',
|
|
117
|
+
});
|
|
118
|
+
return recados.length;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Este erro é "não coube no minuto"?
|
|
123
|
+
*
|
|
124
|
+
* É o único erro que a gente sabe consertar sozinho: encolher o que já foi
|
|
125
|
+
* feito e continuar. Rede, cota do dia e chave inválida não se resolvem
|
|
126
|
+
* assim, e tentar de novo só gastaria a vez do usuário.
|
|
127
|
+
*/
|
|
128
|
+
function ehTetoDeToken(e) {
|
|
129
|
+
const s = String((e && e.message) || e || '').toLowerCase();
|
|
130
|
+
return /não cabe no teto|conversa passou do teto|request too large|tokens per minute|\btpm\b|reduce your message size/.test(s);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Este erro é PASSAGEIRO — daqui a alguns segundos a mesma chamada passa?
|
|
135
|
+
*
|
|
136
|
+
* 429 por pedidos, 5xx do provedor ou do servidor, conexão que caiu no meio.
|
|
137
|
+
* Nada disso é do usuário, e nada disso ele precisa ver: espera-se um pouco
|
|
138
|
+
* e repete-se, com o spinner de pensar girando. O que NÃO entra aqui, de
|
|
139
|
+
* propósito: cota do DIA (esperar minutos não resolve), crédito, chave e o
|
|
140
|
+
* teto de tokens (esse tem a função acima e o conserto próprio, encolher).
|
|
141
|
+
*/
|
|
142
|
+
/**
|
|
143
|
+
* Erro que o NOSSO servidor mandou no meio do stream, sem chave própria.
|
|
144
|
+
*
|
|
145
|
+
* Quando a corrente inteira falha, o servidor repassa o erro do último
|
|
146
|
+
* provedor dela. Se esse último recusou a chave DELE (401/403), o erro chegava
|
|
147
|
+
* cru e virava "este servidor pede um token" — com o login da pessoa válido,
|
|
148
|
+
* e sem nova tentativa (23/10: o /comecar caiu assim, e o pedido seguinte
|
|
149
|
+
* passou). O 401 do nosso portão não vem por aqui: vem como HTTP 401, antes
|
|
150
|
+
* do stream. Então aqui é a corrente fora do ar, e isso é passageiro.
|
|
151
|
+
*/
|
|
152
|
+
function erroDaCorrente(erro) {
|
|
153
|
+
const s = String(erro || '');
|
|
154
|
+
if (!/\b40[13]\b|unauthorized|forbidden/i.test(s)) return erro;
|
|
155
|
+
traco(`a corrente falhou e o último provedor recusou a chave dele: ${s.slice(0, 160)}`);
|
|
156
|
+
return '503 nenhum provedor de IA do servidor respondeu agora';
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/** A linha de quando respondeu um modelo de reserva: trocar em silêncio é a queixa nº 7 da pesquisa (Gemini cai
|
|
160
|
+
pra Flash sem avisar). O servidor manda { modelo, reserva } desde a 10.19; antes disso, nada aparece. */
|
|
161
|
+
function linhaDaReserva(modelo) {
|
|
162
|
+
const nome = String(modelo || '').replace(/^[a-z0-9]+:/i, '') || 'outro modelo';
|
|
163
|
+
return `respondeu um modelo de reserva (${nome}): o principal estava ocupado, e a qualidade pode variar um pouco.`;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
function ehTransitorio(e) {
|
|
167
|
+
const s = String((e && e.message) || e || '').toLowerCase();
|
|
168
|
+
if (/tokens per day|\btpd\b|free-models-per-day|per day|\b402\b|\b401\b|\b403\b|afford|credit/.test(s)) return false;
|
|
169
|
+
return /rate.?limit|too many requests|\b429\b|\b50[234]\b|bad gateway|service unavailable|gateway timeout|overloaded|socket hang up|econnreset|etimedout|aborted|internal server error|\b500\b/.test(s);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* O /compact automático, feito no meio da tarefa.
|
|
174
|
+
*
|
|
175
|
+
* O dono: "quando bate no teto dos 6 mil, ele roda o compact ocultamente e
|
|
176
|
+
* continua a tarefa, pega todo o contexto que ele fez antes, como se nada
|
|
177
|
+
* tivesse acontecido".
|
|
178
|
+
*
|
|
179
|
+
* Troca as rodadas já feitas por UMA anotação do que se descobriu e do que
|
|
180
|
+
* ficou pronto. O agente perde o texto literal das ferramentas e mantém o que
|
|
181
|
+
* importa para seguir: onde estava, o que já sabe, o que falta.
|
|
182
|
+
*/
|
|
183
|
+
/** O motivo de uma tool que falhou, curto: o error, o código de saída e a linha de falha da saída do comando. */
|
|
184
|
+
function porqueFalhou(corpo) {
|
|
185
|
+
let j = null;
|
|
186
|
+
try { j = JSON.parse(String(corpo).replace(/…\(truncado\)$/, '')); } catch { /* não é JSON inteiro */ }
|
|
187
|
+
if (!j) { const m = /"error"\s*:\s*"([^"]{1,160})/.exec(corpo); return m ? ` — ${m[1]}` : ''; }
|
|
188
|
+
const partes = [];
|
|
189
|
+
if (j.error) partes.push(String(j.error).slice(0, 140));
|
|
190
|
+
if (j.code != null && j.code !== 0) partes.push(`código ${j.code}`);
|
|
191
|
+
const linha = `${j.stdout || ''}\n${j.stderr || ''}`.split('\n').reverse().find((l) => require('../../saida').FALHA.test(l));
|
|
192
|
+
if (linha) partes.push(linha.trim().slice(0, 160));
|
|
193
|
+
return partes.length ? ` — ${partes.join(' · ')}` : '';
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/** O resumo de cima da anotação: os arquivos que a tarefa escreveu e o último comando que falhou (e não passou depois). */
|
|
197
|
+
function resumoDoQueJaFoi(messages) {
|
|
198
|
+
const chamadas = repeticao.chamadasPorId(messages);
|
|
199
|
+
const escritos = new Set();
|
|
200
|
+
let ultimaFalha = null;
|
|
201
|
+
for (const m of messages) {
|
|
202
|
+
if (!m || m.role !== 'tool') continue;
|
|
203
|
+
const ch = chamadas.get(m.tool_call_id);
|
|
204
|
+
if (!ch) continue;
|
|
205
|
+
const ok = !/"ok"\s*:\s*false/.test(String(m.content || ''));
|
|
206
|
+
if (ok && /^(write_file|edit_file|multi_edit)$/.test(ch.nome) && ch.args && ch.args.path) escritos.add(ch.args.path);
|
|
207
|
+
if (ch.nome === 'run_shell' && ch.args && ch.args.command) {
|
|
208
|
+
if (!ok) ultimaFalha = { cmd: ch.args.command, porque: porqueFalhou(m.content) };
|
|
209
|
+
else if (ultimaFalha && mesmoComando(ultimaFalha.cmd, ch.args.command)) ultimaFalha = null;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
const linhas = [];
|
|
213
|
+
if (escritos.size) linhas.push(`Arquivos que você já escreveu (estão no disco; releia antes de editar): ${[...escritos].join(', ')}`);
|
|
214
|
+
if (ultimaFalha) linhas.push(`Ainda falhando: \`${String(ultimaFalha.cmd).slice(0, 120)}\`${ultimaFalha.porque}`);
|
|
215
|
+
return linhas;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
function anotacaoDoQueJaFoi(messages) {
|
|
219
|
+
const chamadas = repeticao.chamadasPorId(messages);
|
|
220
|
+
const feitos = [];
|
|
221
|
+
for (const m of messages) {
|
|
222
|
+
if (!m || m.role !== 'tool') continue;
|
|
223
|
+
const ch = chamadas.get(m.tool_call_id);
|
|
224
|
+
if (!ch) continue;
|
|
225
|
+
const alvo = ch.args && (ch.args.path || ch.args.command || ch.args.consulta || ch.args.ferramenta || ch.args.titulo || ch.args.id);
|
|
226
|
+
const corpo = String(m.content || '');
|
|
227
|
+
const deuErrado = /"ok"\s*:\s*false/.test(corpo);
|
|
228
|
+
feitos.push(`- ${ch.nome}${alvo ? `(${String(alvo).slice(0, 80)})` : ''}: `
|
|
229
|
+
+ (deuErrado ? `FALHOU${porqueFalhou(corpo)}` : corpo.slice(0, 220).replace(/\s+/g, ' ')));
|
|
230
|
+
}
|
|
231
|
+
return feitos;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function ident(profundidade) {
|
|
235
|
+
return ' '.repeat(profundidade);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/* O bloco de diff embaixo do resultado.
|
|
239
|
+
*
|
|
240
|
+
* O `_antes`/`_depois` vem das tools de arquivo e existe só para isto: são as
|
|
241
|
+
* duas versões do texto, que o `limparParaOModelo` apaga antes de a conversa
|
|
242
|
+
* seguir. Sem essa limpeza, cada edição mandaria o arquivo inteiro de volta
|
|
243
|
+
* ao modelo — que acabou de escrevê-lo e não aprende nada relendo. */
|
|
244
|
+
function mostrarDiff(result, profundidade) {
|
|
245
|
+
if (!result || typeof result._antes !== 'string' || typeof result._depois !== 'string') return;
|
|
246
|
+
const bloco = diff.desenhar(result._antes, result._depois, {
|
|
247
|
+
prefixo: fala.recuo(profundidade),
|
|
248
|
+
});
|
|
249
|
+
if (bloco) console.log(bloco);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/* O que NÃO pode ir para a conversa. Chave com `_` é desenho de tela: o
|
|
253
|
+
arquivo inteiro, duas vezes, por edição. */
|
|
254
|
+
function limparParaOModelo(result) {
|
|
255
|
+
if (!result || typeof result !== 'object') return result;
|
|
256
|
+
const limpo = {};
|
|
257
|
+
for (const [k, v] of Object.entries(result)) if (!k.startsWith('_')) limpo[k] = v;
|
|
258
|
+
return limpo;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
function logResult(kind, result, profundidade) {
|
|
262
|
+
const p = fala.resultado(profundidade);
|
|
263
|
+
if (!result) return;
|
|
264
|
+
// Uma tool que falhou é informação para o AGENTE, que vai consertar na
|
|
265
|
+
// volta seguinte — não é o erro do usuário. Âmbar, uma linha, sem o
|
|
266
|
+
// vermelho que faz parecer que a tarefa morreu.
|
|
267
|
+
if (result.ok === false) {
|
|
268
|
+
const texto = String(result.error || `exit ${result.code ?? 'erro'}`).replace(/\s+/g, ' ').trim();
|
|
269
|
+
// Erro de permissão não corta: a instrução que resolve ("Acessibilidade…
|
|
270
|
+
// peça de novo") fica justamente depois do 160º caractere.
|
|
271
|
+
const teto = result.permissao === false ? 400 : 160;
|
|
272
|
+
console.log(p + c.warn(texto.length > teto ? texto.slice(0, teto - 1) + '…' : texto));
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
switch (kind) {
|
|
277
|
+
case 'write_file':
|
|
278
|
+
console.log(p + c.muted(`${result.created ? 'criado' : 'atualizado'} · ${tools.fmtBytes(result.bytes)}`));
|
|
279
|
+
// Reescrever arquivo que já existia apaga o que estava lá. O
|
|
280
|
+
// número de bytes não conta isso; o bloco embaixo conta.
|
|
281
|
+
mostrarDiff(result, profundidade);
|
|
282
|
+
return;
|
|
283
|
+
case 'edit_file':
|
|
284
|
+
case 'multi_edit': {
|
|
285
|
+
const delta = result.linhasDepois - result.linhasAntes;
|
|
286
|
+
const sinal = delta > 0 ? c.ok(`+${delta}`) : delta < 0 ? c.err(`${delta}`) : c.muted('±0');
|
|
287
|
+
console.log(p + c.muted(`${result.substituicoes} troca${result.substituicoes > 1 ? 's' : ''} · `) + sinal + c.muted(' linhas'));
|
|
288
|
+
mostrarDiff(result, profundidade);
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
case 'read_file':
|
|
292
|
+
console.log(p + c.muted(result.de
|
|
293
|
+
? `linhas ${result.de}–${result.ate} de ${result.linhas}`
|
|
294
|
+
: `${result.linhas} linhas · ${tools.fmtBytes(result.bytes || 0)}${result.truncado ? ' (cortado)' : ''}`));
|
|
295
|
+
return;
|
|
296
|
+
case 'list_dir': {
|
|
297
|
+
const linhas = (result.tree || '').split('\n').filter(Boolean);
|
|
298
|
+
for (const l of linhas.slice(0, 8)) console.log(p + c.muted(l));
|
|
299
|
+
if (linhas.length > 8) console.log(p + c.muted(`… +${linhas.length - 8}`));
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
case 'glob':
|
|
303
|
+
console.log(p + c.muted(`${result.total} arquivo${result.total === 1 ? '' : 's'}`));
|
|
304
|
+
for (const f of (result.arquivos || []).slice(0, 5)) console.log(p + c.dim(f));
|
|
305
|
+
if ((result.arquivos || []).length > 5) console.log(p + c.dim(`… +${result.arquivos.length - 5}`));
|
|
306
|
+
return;
|
|
307
|
+
case 'grep': {
|
|
308
|
+
console.log(p + c.muted(`${result.total} ocorrência${result.total === 1 ? '' : 's'} em ${result.arquivosVistos} arquivos`));
|
|
309
|
+
for (const r of (result.resultados || []).slice(0, 5)) {
|
|
310
|
+
console.log(p + c.dim(`${r.arquivo}:${r.linha}`));
|
|
311
|
+
}
|
|
312
|
+
if ((result.resultados || []).length > 5) console.log(p + c.dim(`… +${result.resultados.length - 5}`));
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
case 'run_shell': {
|
|
316
|
+
const saida = (result.stdout || '').trim().split('\n').filter(Boolean);
|
|
317
|
+
for (const l of saida.slice(0, 6)) console.log(p + c.muted(l.slice(0, 160)));
|
|
318
|
+
if (saida.length > 6) console.log(p + c.muted(`… +${saida.length - 6} linhas`));
|
|
319
|
+
if (!saida.length) console.log(p + c.ok('exit 0'));
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
case 'open_in_browser':
|
|
323
|
+
console.log(p + c.muted(result.opener || 'aberto'));
|
|
324
|
+
return;
|
|
325
|
+
case 'multi_edit': {
|
|
326
|
+
const delta = result.linhasDepois - result.linhasAntes;
|
|
327
|
+
const sinal = delta > 0 ? c.ok(`+${delta}`) : delta < 0 ? c.err(`${delta}`) : c.muted('±0');
|
|
328
|
+
console.log(p + c.muted(`${result.substituicoes} trocas · `) + sinal + c.muted(' linhas'));
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
case 'write_todos': {
|
|
332
|
+
const marca = { completed: c.ok('✔'), in_progress: c.brand('▶'), pending: c.dim('○') };
|
|
333
|
+
for (const t of result.todos || []) {
|
|
334
|
+
const texto = t.status === 'completed' ? c.dim(t.content) : c.white(t.content);
|
|
335
|
+
console.log(p + `${marca[t.status] || c.dim('○')} ${texto}`);
|
|
336
|
+
}
|
|
337
|
+
console.log(p + c.muted(`${result.feitos}/${result.total} concluídas`));
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
case 'browser_open':
|
|
341
|
+
console.log(p + c.muted(result.url || 'aberto'));
|
|
342
|
+
return;
|
|
343
|
+
case 'browser_read': {
|
|
344
|
+
const refs = (String(result.pagina || '').match(/^@e\d+/gm) || []).length;
|
|
345
|
+
console.log(p + c.muted(refs ? `${refs} elementos com ref · ${(result.text || '').length} caracteres de texto`
|
|
346
|
+
: `${(result.text || '').length} caracteres lidos da página`));
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
case 'pesquisar_referencia': {
|
|
350
|
+
console.log(p + c.muted(`${result.fontes} fonte${result.fontes === 1 ? '' : 's'} lida${result.fontes === 1 ? '' : 's'} sobre "${result.consulta}"`));
|
|
351
|
+
for (const r of (result.referencias || []).slice(0, 4)) {
|
|
352
|
+
console.log(p + c.dim(`${r.titulo}`.slice(0, 100)));
|
|
353
|
+
console.log(p + c.dim(` ${r.url}`.slice(0, 110)));
|
|
354
|
+
}
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
case 'mcp_procurar': {
|
|
358
|
+
console.log(p + c.muted(`${(result.resultados || []).length} MCP para "${result.busca}"`));
|
|
359
|
+
for (const r of (result.resultados || []).slice(0, 4)) console.log(p + c.dim(`${r.nome} · ${r.descricao}`.slice(0, 110)));
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
case 'mcp_conectar':
|
|
363
|
+
console.log(p + c.ok('conectado') + c.muted(` · ${result.servidor} · ${(result.ferramentas || []).length} tools`));
|
|
364
|
+
return;
|
|
365
|
+
case 'mcp_usar':
|
|
366
|
+
console.log(p + c.muted(`${result.servidor}.${result.ferramenta} · ${String(result.resultado || '').length} caracteres`));
|
|
367
|
+
return;
|
|
368
|
+
case 'desktop_windows': {
|
|
369
|
+
console.log(p + c.muted(`${result.total} janela${result.total === 1 ? '' : 's'}`));
|
|
370
|
+
for (const j of (result.janelas || []).slice(0, 5)) console.log(p + c.dim(`${j.app ? j.app + ' · ' : ''}${j.titulo}`.slice(0, 120)));
|
|
371
|
+
if ((result.janelas || []).length > 5) console.log(p + c.dim(`… +${result.janelas.length - 5}`));
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
case 'desktop_elements': {
|
|
375
|
+
console.log(p + c.muted(`${result.total} elemento${result.total === 1 ? '' : 's'} em “${result.janela || 'janela em foco'}”`));
|
|
376
|
+
for (const e of (result.elementos || []).slice(0, 5)) console.log(p + c.dim(`${e.nome} (${e.x},${e.y})`.slice(0, 120)));
|
|
377
|
+
if ((result.elementos || []).length > 5) console.log(p + c.dim(`… +${result.elementos.length - 5}`));
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
case 'desktop_click_element':
|
|
381
|
+
console.log(p + c.ok('ok') + c.muted(` · ${result.duplo ? 'clique duplo' : 'clique'} em “${result.clicado}” (${result.x},${result.y})`));
|
|
382
|
+
return;
|
|
383
|
+
case 'desktop_open_app':
|
|
384
|
+
console.log(p + c.ok('ok') + c.muted(` · ${result.app}`));
|
|
385
|
+
return;
|
|
386
|
+
case 'desktop_focus':
|
|
387
|
+
console.log(p + c.ok('ok') + c.muted(` · ${result.janela || 'em foco'}`));
|
|
388
|
+
return;
|
|
389
|
+
case 'browser_screenshot':
|
|
390
|
+
case 'desktop_screenshot':
|
|
391
|
+
console.log(p + c.muted(`${result.path} · ${tools.fmtBytes(result.bytes || 0)}`));
|
|
392
|
+
return;
|
|
393
|
+
case 'browser_click':
|
|
394
|
+
case 'browser_type':
|
|
395
|
+
case 'browser_key':
|
|
396
|
+
case 'browser_scroll':
|
|
397
|
+
case 'browser_wait':
|
|
398
|
+
case 'browser_eval':
|
|
399
|
+
case 'desktop_click':
|
|
400
|
+
case 'desktop_double_click':
|
|
401
|
+
case 'desktop_move':
|
|
402
|
+
case 'desktop_drag':
|
|
403
|
+
case 'desktop_type':
|
|
404
|
+
case 'desktop_key':
|
|
405
|
+
case 'desktop_scroll':
|
|
406
|
+
case 'desktop_size':
|
|
407
|
+
console.log(p + c.ok('ok') + (result.text || result.tag || result.selector || result.width ? c.muted(' · ' + (result.selector || result.tag || (result.width ? `${result.width}×${result.height}` : ''))) : ''));
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
/** Dois comandos de shell que resolvem a mesma coisa: o mesmo texto, o mesmo `primocode kit <x> <n>`, ou os dois rodam testes/build. */
|
|
413
|
+
const RODA_TESTE = /\b(test|tests|jest|vitest|mocha|pytest|unittest|cargo\s+test|go\s+test|tsc|build|lint|check)\b/i;
|
|
414
|
+
function mesmoComando(a, b) {
|
|
415
|
+
const n = (c) => String(c || '').trim().replace(/\s+/g, ' ');
|
|
416
|
+
const x = n(a), y = n(b);
|
|
417
|
+
if (!x || !y) return false;
|
|
418
|
+
if (x === y) return true;
|
|
419
|
+
const kit = (c) => (/^(primocode|primo) kits? /.test(c) ? c.split(' ').slice(0, 4).join(' ') : null);
|
|
420
|
+
if (kit(x) && kit(x) === kit(y)) return true;
|
|
421
|
+
return RODA_TESTE.test(x) && RODA_TESTE.test(y);
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
// O que volta para o modelo. Cortamos saídas gigantes para não estourar a
|
|
425
|
+
// janela de contexto na iteração seguinte.
|
|
426
|
+
function summarizeForModel(result) {
|
|
427
|
+
// As chaves com `_` são desenho de tela (as duas versões do arquivo, para
|
|
428
|
+
// o diff). Se escapassem daqui, cada edição mandaria o arquivo inteiro,
|
|
429
|
+
// duas vezes, de volta a um modelo que acabou de escrevê-lo.
|
|
430
|
+
// saída de comando: começo + as falhas do meio + o fim, e o stderr com a sua cota (lib/saida.js)
|
|
431
|
+
const S = require('../../saida');
|
|
432
|
+
const json = JSON.stringify(S.caber(S.resumirComando(limparParaOModelo(result))));
|
|
433
|
+
return json.length > 6000 ? json.slice(0, 6000) + '…(truncado)' : json;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
// Quantos resultados de tool ficam INTEIROS na conversa. Os mais novos são o
|
|
437
|
+
// que o modelo precisa para decidir o próximo passo; os velhos viram peso.
|
|
438
|
+
const RESULTADOS_INTEIROS = 3;
|
|
439
|
+
const RESTO_DO_RESULTADO = 300;
|
|
440
|
+
/* ── COM MOTOR PRÓPRIO, A MEMÓRIA NÃO É AMPUTADA ────────────────────────
|
|
441
|
+
* Os 3 e os 300 de cima são para o teto de ~6 mil tokens por minuto do
|
|
442
|
+
* servidor grátis. Com Claude Code, Codex ou chave própria (`provedor.atual()`)
|
|
443
|
+
* eles valiam igual, e o modelo perdia o arquivo que tinha acabado de ler:
|
|
444
|
+
* no jogo de carro de 09/10 o Claude leu o world.js (458 linhas) sete vezes,
|
|
445
|
+
* em fatias, porque a cada três ferramentas a leitura anterior virava 300
|
|
446
|
+
* caracteres. A pre-leitura já folgava com motor próprio; o compactar agora
|
|
447
|
+
* também. */
|
|
448
|
+
const RESULTADOS_INTEIROS_FOLGADO = 20;
|
|
449
|
+
const RESTO_DO_RESULTADO_FOLGADO = 1500;
|
|
450
|
+
// A pesquisa é MATÉRIA-PRIMA, não passo intermediário: é dela que saem os
|
|
451
|
+
// fatos do vídeo, do post, do slide. Ela sempre fica velha (pesquisa-se no
|
|
452
|
+
// começo, escreve-se no fim), e a 300 caracteres não sobrava fato nenhum — o
|
|
453
|
+
// modelo escrevia genérico, que foi exatamente a reclamação de "está tudo
|
|
454
|
+
// padrão". Encolhe também, mas com espaço para os fatos sobreviverem.
|
|
455
|
+
const RESTO_DA_PESQUISA = 1500;
|
|
456
|
+
const MATERIA_PRIMA = new Set(['pesquisar_referencia']);
|
|
457
|
+
|
|
458
|
+
/* ── O ARQUIVO JÁ GRAVADO NÃO VIAJA DE NOVO ─────────────────────────────
|
|
459
|
+
* O `compactar` encolhia o resultado das ferramentas e deixava intacto o que
|
|
460
|
+
* o MODELO escreveu — e o que ele escreve num site é o arquivo inteiro, dentro
|
|
461
|
+
* da chamada write_file. Medido em 29/09 ("crie uma landing de barbearia"):
|
|
462
|
+
* depois do index.html (7,6 KB) e do style.css (15 KB), cada ida ao modelo
|
|
463
|
+
* levava os dois de novo, passava do teto de tokens por minuto do plano
|
|
464
|
+
* grátis e ficava esperando a janela virar, em silêncio — "escreve dois
|
|
465
|
+
* arquivos e trava". O conteúdo já está no disco: nas voltas antigas ele vira
|
|
466
|
+
* um ponteiro. As duas últimas ficam inteiras (é nelas que o modelo decide o
|
|
467
|
+
* próximo passo, e é delas que sai a releitura sem disco — ver read_file). */
|
|
468
|
+
const ESCRITAS_INTEIRAS = 2;
|
|
469
|
+
const RESTO_DA_ESCRITA = 400;
|
|
470
|
+
function assistentesAntigas(messages) {
|
|
471
|
+
const idx = [];
|
|
472
|
+
for (let i = 0; i < messages.length; i++) {
|
|
473
|
+
const m = messages[i];
|
|
474
|
+
if (m && m.role === 'assistant' && Array.isArray(m.tool_calls) && m.tool_calls.length) idx.push(i);
|
|
475
|
+
}
|
|
476
|
+
return new Set(idx.slice(0, -ESCRITAS_INTEIRAS));
|
|
477
|
+
}
|
|
478
|
+
function encolherEscritas(m) {
|
|
479
|
+
let mudou = false;
|
|
480
|
+
const tool_calls = m.tool_calls.map((tc) => {
|
|
481
|
+
const f = tc && tc.function;
|
|
482
|
+
if (!f || !/^(write_file|edit_file|multi_edit)$/.test(f.name)) return tc;
|
|
483
|
+
const bruto = String(f.arguments || '');
|
|
484
|
+
if (bruto.length <= RESTO_DA_ESCRITA) return tc;
|
|
485
|
+
let a;
|
|
486
|
+
try { a = JSON.parse(bruto); } catch { return tc; }
|
|
487
|
+
const ponteiro = (n) => `(${n} caracteres — já gravado no disco; para mudar, leia com read_file e use edit_file)`;
|
|
488
|
+
if (f.name === 'write_file' && typeof a.content === 'string' && a.content.length > RESTO_DA_ESCRITA) a.content = ponteiro(a.content.length);
|
|
489
|
+
else if (f.name === 'edit_file' && typeof a.new_string === 'string' && a.new_string.length > RESTO_DA_ESCRITA) {
|
|
490
|
+
a.new_string = ponteiro(a.new_string.length);
|
|
491
|
+
if (typeof a.old_string === 'string' && a.old_string.length > 200) a.old_string = a.old_string.slice(0, 200) + '…';
|
|
492
|
+
} else if (f.name === 'multi_edit' && Array.isArray(a.edits)) {
|
|
493
|
+
a.edits = a.edits.map((e) => (e && typeof e.new_string === 'string' && e.new_string.length > RESTO_DA_ESCRITA
|
|
494
|
+
? { ...e, new_string: ponteiro(e.new_string.length), old_string: String(e.old_string || '').slice(0, 200) } : e));
|
|
495
|
+
} else return tc;
|
|
496
|
+
mudou = true;
|
|
497
|
+
return { ...tc, function: { ...f, arguments: JSON.stringify(a) } };
|
|
498
|
+
});
|
|
499
|
+
return mudou ? { ...m, tool_calls } : m;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* Encolhe os resultados de tool ANTIGOS antes de mandar a conversa.
|
|
504
|
+
*
|
|
505
|
+
* Sem isto, cada página lida e cada pesquisa ficava inteira no histórico para
|
|
506
|
+
* sempre. Medido num pedido real ("pesquise sobre a empresa X e faça um
|
|
507
|
+
* vídeo"): cinco pesquisas e seis leituras de página levaram a conversa a
|
|
508
|
+
* 27.454 tokens contra um teto de 6.000 por minuto do plano grátis — a tarefa
|
|
509
|
+
* morreu no meio, depois de todo o trabalho de pesquisa já feito.
|
|
510
|
+
*
|
|
511
|
+
* MAS: encolher REFERÊNCIA cria um loop. O manual e as specs do estúdio são o
|
|
512
|
+
* formato que o modelo precisa ter em mãos na hora de escrever o documento;
|
|
513
|
+
* encolhidos, ele pede de novo — e é encolhido de novo. Foi assim que um
|
|
514
|
+
* pedido de vídeo pesquisou e leu a mesma spec sete vezes sem criar nada. A
|
|
515
|
+
* cópia mais nova de cada referência fica INTEIRA; as velhas, que são o mesmo
|
|
516
|
+
* texto repetido, viram um ponteiro para ela.
|
|
517
|
+
*
|
|
518
|
+
* Nenhuma mensagem é REMOVIDA: a API exige que cada role:'tool' continue
|
|
519
|
+
* pareada com o tool_call que a pediu. Só o texto encolhe.
|
|
520
|
+
*/
|
|
521
|
+
function compactar(messages, { folgado = false } = {}) {
|
|
522
|
+
const { inteiras, duplicadas } = repeticao.referenciasNaConversa(messages);
|
|
523
|
+
const quantosInteiros = folgado ? RESULTADOS_INTEIROS_FOLGADO : RESULTADOS_INTEIROS;
|
|
524
|
+
const resto = folgado ? RESTO_DO_RESULTADO_FOLGADO : RESTO_DO_RESULTADO;
|
|
525
|
+
|
|
526
|
+
const indices = [];
|
|
527
|
+
for (let i = 0; i < messages.length; i++) if (messages[i].role === 'tool') indices.push(i);
|
|
528
|
+
if (indices.length <= quantosInteiros && !duplicadas.size && !assistentesAntigas(messages).size) return messages;
|
|
529
|
+
|
|
530
|
+
const chamadas = repeticao.chamadasPorId(messages);
|
|
531
|
+
const encolher = new Set(indices.slice(0, -quantosInteiros));
|
|
532
|
+
const antigas = assistentesAntigas(messages);
|
|
533
|
+
return messages.map((m, i) => {
|
|
534
|
+
if (antigas.has(i)) return encolherEscritas(m);
|
|
535
|
+
if (duplicadas.has(i)) {
|
|
536
|
+
return { ...m, content: '(a mesma referência aparece inteira mais adiante nesta conversa — use aquela)' };
|
|
537
|
+
}
|
|
538
|
+
if (inteiras.has(i) || !encolher.has(i)) return m;
|
|
539
|
+
const chamada = chamadas.get(m.tool_call_id);
|
|
540
|
+
const limite = chamada && MATERIA_PRIMA.has(chamada.nome) ? Math.max(RESTO_DA_PESQUISA, resto) : resto;
|
|
541
|
+
const texto = String(m.content || '');
|
|
542
|
+
if (texto.length <= limite) return m;
|
|
543
|
+
return { ...m, content: texto.slice(0, limite) + `…(resultado antigo encurtado; eram ${texto.length} caracteres)` };
|
|
544
|
+
});
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
/**
|
|
548
|
+
* Por que parou, quando o modelo não disse.
|
|
549
|
+
*
|
|
550
|
+
* "Parei sem concluir e sem explicação do modelo" era a resposta para tudo, e
|
|
551
|
+
* quase sempre mentia: na prática o agente tinha gastado as 15 voltas dando
|
|
552
|
+
* murro em ponta de faca. Dizer o motivo certo é a diferença entre o usuário
|
|
553
|
+
* saber o que fazer e ficar no escuro.
|
|
554
|
+
*/
|
|
555
|
+
/**
|
|
556
|
+
* Troca as rodadas já feitas por uma ANOTAÇÃO do que se descobriu, no lugar.
|
|
557
|
+
*
|
|
558
|
+
* Mexe no array recebido de propósito: quem chamou continua o mesmo loop, com
|
|
559
|
+
* a mesma conversa, só que leve. O pedido do usuário e a mensagem de sistema
|
|
560
|
+
* ficam — sem eles o agente não sabe mais o que estava fazendo.
|
|
561
|
+
*/
|
|
562
|
+
function encolherParaContinuar(messages) {
|
|
563
|
+
const anotacao = [...resumoDoQueJaFoi(messages), ...anotacaoDoQueJaFoi(messages)];
|
|
564
|
+
const guardar = messages.filter((m) => m.role === 'system' || m.role === 'user');
|
|
565
|
+
messages.length = 0;
|
|
566
|
+
messages.push(...guardar);
|
|
567
|
+
if (anotacao.length) {
|
|
568
|
+
messages.push({
|
|
569
|
+
role: 'system',
|
|
570
|
+
content: 'O QUE VOCÊ JÁ FEZ NESTA TAREFA (a conversa foi encolhida para caber no limite; '
|
|
571
|
+
+ 'estas são as suas anotações, continue de onde parou e NÃO refaça o que já está aqui):\n'
|
|
572
|
+
+ anotacao.join('\n')
|
|
573
|
+
+ '\n\nSiga para o próximo passo. Se já tem o que precisa, PRODUZA o resultado agora.',
|
|
574
|
+
});
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
/** Quanto esperar quando o minuto estourou. O provedor costuma dizer
|
|
579
|
+
* ("Please try again in 7.664s"); sem isso, meio minuto é seguro. */
|
|
580
|
+
function esperaDoErro(e, tentativa = 0) {
|
|
581
|
+
const m = /try again in ([0-9.]+)s/i.exec(String((e && e.message) || e || ''));
|
|
582
|
+
if (m) return Math.min(70, Math.max(5, Math.ceil(parseFloat(m[1])) + 2)) * 1000;
|
|
583
|
+
// Sem o tempo do provedor, cresce a passada a cada tentativa: bater na
|
|
584
|
+
// mesma porta a cada 30s por horas só esquenta o rate limit.
|
|
585
|
+
if (ehTetoDeToken(e)) return Math.min(70, Math.max(5, 30 + tentativa * 10)) * 1000;
|
|
586
|
+
// Rede e 5xx voltam em segundos, não em minutos: 3, 6, 12, 20, 20…
|
|
587
|
+
// Esperar meio minuto para um servidor que já voltou é a tela parada à toa.
|
|
588
|
+
return Math.min(20, 3 * 2 ** Math.max(0, tentativa - 1)) * 1000;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
/** Espera a vez no modelo — À VISTA, com os segundos, também no subagente.
|
|
592
|
+
* Antes girava o spinner de "pensando" (e no subagente, nada): eram minutos
|
|
593
|
+
* de tela parada que pareciam trava. "As coisas estão acontecendo, só não
|
|
594
|
+
* estão sendo mostradas." Dizer que é a vez do modelo, sem alarme, é a
|
|
595
|
+
* diferença entre esperar e desistir. */
|
|
596
|
+
/* PRIMOCODE_TRACO=1: uma linha por ida ao modelo no stderr — o tamanho da
|
|
597
|
+
conversa, o erro e a espera. É o que diz ONDE uma tarefa travou quando a
|
|
598
|
+
tela (ou um log sem terminal) só mostra o último arquivo escrito. */
|
|
599
|
+
function traco(texto) {
|
|
600
|
+
if (process.env.PRIMOCODE_TRACO === '1') process.stderr.write(` [traço ${new Date().toTimeString().slice(0, 8)}] ${texto}\n`);
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
async function pausar(ms, subagent) {
|
|
604
|
+
traco(`esperando ${Math.round(ms / 1000)}s pela vez no modelo${subagent ? ' (agente)' : ''}`);
|
|
605
|
+
const sp = new Spinner(subagent ? 'o agente espera a vez no modelo' : 'esperando a vez no modelo').start();
|
|
606
|
+
await new Promise((r) => setTimeout(r, ms));
|
|
607
|
+
if (sp) sp.stop();
|
|
608
|
+
tempos.somar('espera de cota/rede', ms);
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
/**
|
|
612
|
+
* O modelo devolveu TEXTO, sem tool e sem finish. Isso é resposta — ou é o
|
|
613
|
+
* agente parando no meio para narrar o que ia fazer?
|
|
614
|
+
*
|
|
615
|
+
* Reclamação do dono: "ele tá parando sem concluir, ele deve continuar até o
|
|
616
|
+
* fim". Medido: o modelo escreve "Agora vou criar o vídeo com as cenas…" e
|
|
617
|
+
* para, porque texto sem tool encerra a rodada. Quem lê vê uma promessa no
|
|
618
|
+
* lugar da entrega. Três sinais dizem que foi parada, não resposta:
|
|
619
|
+
*
|
|
620
|
+
* 1. Há um plano (write_todos) com item por fazer — ele mesmo disse que
|
|
621
|
+
* não acabou.
|
|
622
|
+
* 2. O texto é INTENÇÃO: anuncia o próximo passo ("vou", "em seguida",
|
|
623
|
+
* "próximo passo"), ou termina em dois-pontos e reticências.
|
|
624
|
+
* 3. É curto. Uma resposta de verdade a "explique este erro" tem corpo; um
|
|
625
|
+
* "vou abrir o arquivo agora" não tem.
|
|
626
|
+
*
|
|
627
|
+
* Pergunta ao usuário NÃO conta como parada: o prompt proíbe perguntar, mas
|
|
628
|
+
* se o modelo perguntou, empurrá-lo faria ele decidir sozinho o que talvez
|
|
629
|
+
* não devesse.
|
|
630
|
+
*/
|
|
631
|
+
const INTENCAO = /(^|[.!,;\n]\s*)(agora\s+)?(vou|irei|deixa eu|deixe-me|preciso (agora )?(de )?(criar|ler|abrir|rodar|ver|conferir|pesquisar|mandar|fazer|gerar|escrever)|primeiro (vou|eu)|em seguida|pr[óo]ximo passo|a seguir,?\s+(vou|eu)|vamos (criar|ler|abrir|rodar|ver|conferir|come[çc]ar|fazer|gerar|escrever))\b/i;
|
|
632
|
+
/* o mesmo em inglês: a trava de idioma responde na língua do pedido, e "Now I'll update the tests." parava a tarefa calado */
|
|
633
|
+
const INTENCAO_EN = /(^|[.!,;\n]\s*)(now,?\s+|next,?\s+|first,?\s+|then,?\s+)?(i'll|i will|i'm going to|i am going to|i need to|let me|let's|we'll|we will|next step)\b/i;
|
|
634
|
+
function pareceParadaNoMeio(texto, { todosPendentes = 0, rodouTool = false } = {}) {
|
|
635
|
+
const t = String(texto || '').trim();
|
|
636
|
+
if (!t) return false;
|
|
637
|
+
if (todosPendentes > 0) return true;
|
|
638
|
+
if (t.length > 700) return false; // resposta com corpo
|
|
639
|
+
if (/\?\s*$/.test(t)) return false; // perguntou: não é parada
|
|
640
|
+
if (INTENCAO.test(t) || INTENCAO_EN.test(t)) return true;
|
|
641
|
+
if (rodouTool && /[:…]\s*$|\.\.\.\s*$/.test(t)) return true; // "Criando as cenas:" e nada depois
|
|
642
|
+
return false;
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
/** O recado do plano com passo aberto (o "pronto" com "0/1 concluídas"). Puro. */
|
|
646
|
+
function recadoDoPlanoAberto(abertos) {
|
|
647
|
+
const lista = abertos.map((t) => `"${t.content}"`).join('; ');
|
|
648
|
+
return `o seu plano ainda tem ${abertos.length} passo(s) aberto(s): ${lista}. `
|
|
649
|
+
+ 'Termine esses passos e marque como feitos (write_todos). Se algum não dá pra fazer, '
|
|
650
|
+
+ 'diga claramente o que falta e por quê, e finalize.';
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
/* O recado da troca de rota: não repete o que já tentou, quebra o que falta
|
|
654
|
+
em pedaços e faz o primeiro. Quem divide a tarefa é o agente, não a pessoa. */
|
|
655
|
+
const TROCA_DE_ROTA = 'Você ficou três voltas sem conseguir rodar nada, repetindo chamadas que já tinha feito. '
|
|
656
|
+
+ 'Não repita nenhuma delas. Olhe o que já está pronto na conversa, divida o que falta em passos pequenos '
|
|
657
|
+
+ '(write_todos) e faça AGORA o primeiro passo, por um caminho diferente: outra ferramenta, outro arquivo, '
|
|
658
|
+
+ 'outro comando. Se não houver caminho, chame finish e diga em uma frase o que impediu.';
|
|
659
|
+
|
|
660
|
+
function motivoDaParada({ voltas, voltasEmFalso, falhasPendentes, travou, teto = MAX_ITERATIONS }) {
|
|
661
|
+
if (falhasPendentes.length) {
|
|
662
|
+
return `Parei sem concluir. A última falha foi: ${falhasPendentes[falhasPendentes.length - 1].texto}`;
|
|
663
|
+
}
|
|
664
|
+
if (travou) {
|
|
665
|
+
return 'Fiquei preso: tentei dois caminhos e os dois voltaram ao mesmo lugar, então parei antes de gastar sua cota à toa. '
|
|
666
|
+
+ 'O que já fiz está salvo. Diga "continua" que eu retomo daqui.';
|
|
667
|
+
}
|
|
668
|
+
if (voltas >= teto) {
|
|
669
|
+
const emFalso = voltasEmFalso
|
|
670
|
+
? ` ${voltasEmFalso} ${voltasEmFalso === 1 ? 'chamada foi repetida' : 'chamadas foram repetidas'} e não rodaram de novo.`
|
|
671
|
+
: '';
|
|
672
|
+
return `Usei as ${teto} voltas deste pedido sem chegar ao fim.${emFalso}`
|
|
673
|
+
+ ' O que já fiz está salvo. Diga "continua" que eu retomo daqui.';
|
|
674
|
+
}
|
|
675
|
+
return 'Parei sem concluir e sem explicação do modelo. Diga "continua" que eu tento de novo daqui.';
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
/* ── O MAPA DO PROJETO ───────────────────────────────────────────────────
|
|
679
|
+
* "Continua o jogo" num projeto de vinte arquivos: o agente começava às
|
|
680
|
+
* cegas, gastava uma volta listando a pasta — ou, pior, escrevia um index.html
|
|
681
|
+
* novo por cima do que existia. Agora ele recebe, junto da memória, a lista dos
|
|
682
|
+
* arquivos do projeto (até 80, sem node_modules nem build), e sabe de saída
|
|
683
|
+
* onde está cada coisa. Só em pasta de projeto: a raiz ~/primocode lista
|
|
684
|
+
* outros projetos, não este. */
|
|
685
|
+
const PULAR_NO_MAPA = new Set(['node_modules', '.git', 'dist', 'build', '.next', '.nuxt', 'out',
|
|
686
|
+
'.cache', 'coverage', '__pycache__', '.venv', 'venv', '.turbo', '.vercel', '.idea', '.vscode']);
|
|
687
|
+
|
|
688
|
+
function arquivosDoProjeto(dir, limite = 80) {
|
|
689
|
+
const path = require('path');
|
|
690
|
+
const fs = require('fs');
|
|
691
|
+
if (!dir || path.resolve(dir) === path.resolve(cfg.ROOT_DIR)) return [];
|
|
692
|
+
const achados = [];
|
|
693
|
+
const andar = (atual, fundo) => {
|
|
694
|
+
if (fundo > 4 || achados.length >= limite) return;
|
|
695
|
+
let itens = [];
|
|
696
|
+
try { itens = fs.readdirSync(atual, { withFileTypes: true }); } catch { return; }
|
|
697
|
+
itens.sort((a, b) => (a.isDirectory() === b.isDirectory() ? a.name.localeCompare(b.name) : a.isDirectory() ? 1 : -1));
|
|
698
|
+
for (const it of itens) {
|
|
699
|
+
if (achados.length >= limite) return;
|
|
700
|
+
if (PULAR_NO_MAPA.has(it.name) || (it.name.startsWith('.') && it.name !== '.env.example')) continue;
|
|
701
|
+
const cheio = path.join(atual, it.name);
|
|
702
|
+
if (it.isDirectory()) andar(cheio, fundo + 1);
|
|
703
|
+
else if (it.name !== 'memory.md') achados.push(path.relative(dir, cheio));
|
|
704
|
+
}
|
|
705
|
+
};
|
|
706
|
+
andar(dir, 0);
|
|
707
|
+
return achados;
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
function mapaDoProjeto(dir, limite = 80, achados = arquivosDoProjeto(dir, limite)) {
|
|
711
|
+
if (!achados.length) return '';
|
|
712
|
+
const mais = achados.length >= limite ? `\n… (mais arquivos — use glob para achar)` : '';
|
|
713
|
+
return `Arquivos que JÁ existem neste projeto (edite-os em vez de recriar):\n${achados.join('\n')}${mais}`;
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
/* O comando de shell que só LÊ um arquivo — `cat x`, `sed -n '10,40p' x`,
|
|
717
|
+
`head -50 x`, `tail x`, `nl x`, com ou sem `cd pasta &&` na frente. Medido
|
|
718
|
+
num pedido de site (29/09): depois de escrever o script.js, o agente o
|
|
719
|
+
releu em quatro fatias de `sed -n`, uma volta de modelo cada. Devolve o
|
|
720
|
+
caminho lido (absoluto quando houve cd), ou null. */
|
|
721
|
+
function leituraPeloShell(comando) {
|
|
722
|
+
const m = /^\s*(?:cd\s+("[^"]+"|'[^']+'|\S+)\s*&&\s*)?(?:cat|nl|sed\s+-n\s+(?:'[^']*'|"[^"]*"|\S+)|head(?:\s+-n?\s*\d+)?|tail(?:\s+-n?\s*\d+)?)\s+("[^"]+"|'[^']+'|[^\s|;&><]+)\s*$/.exec(String(comando || ''));
|
|
723
|
+
if (!m) return null;
|
|
724
|
+
const tira = (x) => String(x || '').replace(/^["']|["']$/g, '');
|
|
725
|
+
const arquivo = tira(m[2]);
|
|
726
|
+
return m[1] ? require('path').resolve(tira(m[1]), arquivo) : arquivo;
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
/* ── O HISTÓRICO QUE VIAJA ─────────────────────────────────────────────
|
|
730
|
+
* Vinte mensagens INTEIRAS iam em toda volta do agente principal. Medido em
|
|
731
|
+
* 29/09: num pedido de site, 28 mil dos 38 mil caracteres da primeira ida
|
|
732
|
+
* eram respostas de pedidos anteriores — sozinhas, acima do teto por minuto
|
|
733
|
+
* do plano grátis. O que a conversa precisa para continuar é o fio (o que
|
|
734
|
+
* foi pedido, o que ficou pronto), não o texto inteiro: cada mensagem entra
|
|
735
|
+
* até um teto, e o total também, das mais novas para as mais velhas. */
|
|
736
|
+
const HISTORICO_POR_MENSAGEM = 1200;
|
|
737
|
+
const HISTORICO_TOTAL = 6000;
|
|
738
|
+
function historicoEnxuto(history) {
|
|
739
|
+
const fora = [];
|
|
740
|
+
let total = 0;
|
|
741
|
+
for (const m of (history || []).slice(-20).reverse()) {
|
|
742
|
+
if (!m || !m.role || !m.content) continue;
|
|
743
|
+
let t = String(m.content);
|
|
744
|
+
if (t.length > HISTORICO_POR_MENSAGEM) t = t.slice(0, HISTORICO_POR_MENSAGEM) + '…(encurtado)';
|
|
745
|
+
if (total + t.length > HISTORICO_TOTAL && fora.length) break;
|
|
746
|
+
total += t.length;
|
|
747
|
+
fora.unshift({ role: m.role, content: t });
|
|
748
|
+
}
|
|
749
|
+
// A API quer a conversa começando pelo usuário.
|
|
750
|
+
while (fora.length && fora[0].role !== 'user') fora.shift();
|
|
751
|
+
return fora;
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
/* ── O RITMO ─────────────────────────────────────────────────────────
|
|
755
|
+
* "A potência não deve vir do modelo, deve vir do sistema." O prompt do
|
|
756
|
+
* servidor manda "leia antes de editar" e "confira antes de dizer que
|
|
757
|
+
* terminou" — certo para editar código dos outros, e a receita do laço
|
|
758
|
+
* quando o arquivo foi ele mesmo que escreveu um minuto antes. Estas regras
|
|
759
|
+
* vêm do que o opencode e o Codex põem nos prompts deles para o modelo não
|
|
760
|
+
* reler o que fez; entram em TODO pedido, curtas, porque o plano conta token.
|
|
761
|
+
* A conferência de verdade é nossa (a página aberta no Chrome escondido). */
|
|
762
|
+
/* MCP primeiro, mouse por último: vale no modo local e no subagente, que não
|
|
763
|
+
recebem o prompt do servidor. */
|
|
764
|
+
const FERRAMENTA_CERTA = '- FERRAMENTA CERTA: para agir num serviço ou app, use primeiro um MCP (veja [mcp]). '
|
|
765
|
+
+ 'Sem MCP: mcp_procurar → mcp_conectar → mcp_usar. Mouse/desktop_* só quando não houver MCP, API ou CLI.';
|
|
766
|
+
|
|
767
|
+
const RITMO = '[ritmo]\n'
|
|
768
|
+
+ '- O resultado de write_file/edit_file é a verdade. Não releia um arquivo que você acabou de escrever para conferir (nem com cat/sed/head): a conferência é do PrimoCode.\n'
|
|
769
|
+
+ '- Várias ações independentes vão na MESMA resposta (ex.: escrever index.html, style.css e script.js juntos).\n'
|
|
770
|
+
+ '- Leia um arquivo inteiro uma vez, não em pedaços pequenos; não leia de novo o que não mudou.\n'
|
|
771
|
+
+ '- PERGUNTAR (ferramenta perguntar) só quando está BLOQUEADO: duas saídas razoáveis e errar custa caro. Pergunta de educação gasta a vez da pessoa; escolha e siga.\n'
|
|
772
|
+
+ '- Não narre o próximo passo: faça. Termine com finish("o que foi feito").\n'
|
|
773
|
+
+ '- VOCÊ DECIDE O CAMINHO. Pedido simples: faça direto. Pedido grande com partes independentes: write_todos com as partes, '
|
|
774
|
+
+ 'depois spawn_agent — um por parte, até 8 NA MESMA resposta (rodam juntos), cada um com o especialista e tudo que ele precisa saber. '
|
|
775
|
+
+ 'Cada um volta com uma ENTREGA: confira; o que falhou volta para conserto; a parte que depende de outra recebe a entrega dela no prompt.\n'
|
|
776
|
+
+ '- Antes de dizer pronto, PROVE: rode o teste ou o comando, abra o resultado, olhe a imagem. Sem prova, não está pronto.\n'
|
|
777
|
+
+ FERRAMENTA_CERTA;
|
|
778
|
+
|
|
779
|
+
/* O ritmo do subagente: o mesmo, sem a parte de orquestrar (ele não abre outro agente). */
|
|
780
|
+
const RITMO_AGENTE = '[ritmo]\n'
|
|
781
|
+
+ '- O resultado de write_file/edit_file é a verdade. Não releia o que acabou de escrever.\n'
|
|
782
|
+
+ '- Leia um arquivo INTEIRO uma vez (read_file sem offset). Não leia aos pedaços, não leia de novo o que não mudou.\n'
|
|
783
|
+
+ '- Várias ações independentes na MESMA resposta.\n'
|
|
784
|
+
+ '- Faça o que a sua parte pede, prove (teste ou comando) e chame finish. Polimento além do pedido não é sua parte.\n'
|
|
785
|
+
+ FERRAMENTA_CERTA;
|
|
786
|
+
|
|
787
|
+
/* `pedido` é opcional: com ele, o arquivo citado no pedido é o primeiro a
|
|
788
|
+
entrar já lido (ver lib/pre-leitura.js). */
|
|
789
|
+
/** O agente quer o editor de gravação (`primocode video`) num pedido que não é editar gravação? Puro. */
|
|
790
|
+
function videoForaDeEdicao(nome, args, ehEdicao) {
|
|
791
|
+
return nome === 'run_shell' && !ehEdicao && /^\s*(?:cd\s+\S+\s*&&\s*)?(?:npx\s+)?primocode\s+video\b/.test(String((args || {}).command || ''));
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
function buildMemoryContext(projectDir, projectName, pedido = '', { memoriaDaPasta = true } = {}) {
|
|
795
|
+
const parts = [];
|
|
796
|
+
/* NO SERVIDOR O CONTEXTO É CURTO (13/10: "continua lendo e listando
|
|
797
|
+
coisas desnecessárias"). O plano grátis guarda ~1.900 tokens de
|
|
798
|
+
conversa; 3.400 de contexto fixo empurravam para fora o que o modelo
|
|
799
|
+
acabou de ler, e ele lia de novo. Com provedor próprio (/api) nada muda. */
|
|
800
|
+
let proprio = false;
|
|
801
|
+
try { proprio = !!require('../../provider/local/provedor.js').atual(); } catch { /* sem provedor próprio */ }
|
|
802
|
+
const curto = (t) => (proprio || t.length <= 1500 ? t : '…' + t.slice(-1500));
|
|
803
|
+
// As instruções vêm primeiro: são regra de quem manda no projeto, e a
|
|
804
|
+
// memória é o que o agente anotou. Entram aqui (e não no bin) para valer
|
|
805
|
+
// igual no terminal, no modo voz e em cada passo de um plano.
|
|
806
|
+
const instrucoes = require('../../mencoes.js').instrucoesDoProjeto(projectDir);
|
|
807
|
+
if (instrucoes) parts.push(instrucoes);
|
|
808
|
+
/* A conversa das sessões anteriores NESTA pasta (lib/agents-md.js). É o
|
|
809
|
+
que faz a sessão de amanhã começar de onde a de hoje parou. Quando o
|
|
810
|
+
resumo da conversa já a carrega (`memoriaDaPasta: false`, quem sabe é o
|
|
811
|
+
bin), ela não vem de novo. */
|
|
812
|
+
if (memoriaDaPasta) {
|
|
813
|
+
const daPasta = require('../../agents-md.js').ler(projectDir);
|
|
814
|
+
if (daPasta) parts.push(`[AGENTS.md — memória desta pasta: de onde a conversa parou]\n${curto(daPasta)}`);
|
|
815
|
+
}
|
|
816
|
+
// A memória entre sessões (lib/memoria-usuario.js): a instrução e o índice; no servidor, só as 25 primeiras.
|
|
817
|
+
try { parts.push(require('../../memoria-usuario.js').blocoDoContexto(undefined, { linhas: proprio ? undefined : 25 })); } catch { /* memória é conveniência */ }
|
|
818
|
+
const geral = cfg.readGeneralMemory();
|
|
819
|
+
if (geral.trim()) parts.push(`[memory-geral.md]\n${curto(geral)}`);
|
|
820
|
+
const projeto = cfg.readProjectMemory(projectDir);
|
|
821
|
+
if (projeto.trim()) parts.push(`[${projectName || 'projeto'}/memory.md]\n${curto(projeto)}`);
|
|
822
|
+
const arquivos = arquivosDoProjeto(projectDir);
|
|
823
|
+
const mapa = mapaDoProjeto(projectDir, proprio ? 80 : 30, arquivos);
|
|
824
|
+
if (mapa) parts.push(`[${projectName || 'projeto'}/arquivos]\n${mapa}\n\n${preLeitura.JUNTAR_LEITURAS}`);
|
|
825
|
+
const lidos = preLeitura.bloco(preLeitura.escolher(projectDir, arquivos, pedido));
|
|
826
|
+
if (lidos) parts.push(lidos);
|
|
827
|
+
parts.push(RITMO);
|
|
828
|
+
// Mastermind + Geral (lib/agentes): o núcleo sempre ligado; o resto o modelo busca (agentes_buscar, capacidade_buscar).
|
|
829
|
+
try { parts.push(require('../../agentes').nucleo()); } catch { /* sem núcleo, segue com o ritmo */ }
|
|
830
|
+
// Os servidores MCP configurados, numa linha (lib/mcp/mcp.js).
|
|
831
|
+
try { const m = require('../../mcp/mcp.js').dica(projectDir); if (m) parts.push(m); } catch { /* sem mcp */ }
|
|
832
|
+
// A equipe calada (lib/skill/personas.js): o olhar do especialista que o pedido pede.
|
|
833
|
+
const equipe = require('../../skill/personas.js').bloco(pedido);
|
|
834
|
+
if (equipe) parts.push(equipe);
|
|
835
|
+
return parts.join('\n\n');
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
/* O PLACAR (lib/placar.js): o PrimoCode aprende qual modelo grátis acerta mais em cada tipo de tarefa.
|
|
839
|
+
Aqui ele (1) classifica o pedido, (2) sem modelo fixado, manda ao servidor o melhor modelo do apelido como
|
|
840
|
+
DICA (`preferido`), e (3) no fim anota o desfecho. Só no agente principal e no servidor de verdade
|
|
841
|
+
(motor injetado = teste = sem placar). Qualquer falha aqui é ignorada: o placar nunca atrapalha a tarefa. */
|
|
842
|
+
let _vivos = { em: 0, dados: null };
|
|
843
|
+
async function modelosVivos(server, token, alias) {
|
|
844
|
+
if (!_vivos.dados || Date.now() - _vivos.em > 10 * 60 * 1000) {
|
|
845
|
+
const h = await Promise.race([api.getHealth(server, token), new Promise((_, rej) => setTimeout(() => rej(new Error('lento')), 2500))]);
|
|
846
|
+
_vivos = { em: Date.now(), dados: (h && (h.correntes_ativas || h.correntes)) || {} };
|
|
847
|
+
}
|
|
848
|
+
return _vivos.dados[alias] || [];
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
async function runAct(userPrompt, opts = {}) {
|
|
852
|
+
if (opts.subagent || (opts.profundidade || 0) > 0 || (opts.motor && opts.motor !== api) || opts.sinais || process.env.PRIMOCODE_PLACAR === 'off') {
|
|
853
|
+
return runActInterno(userPrompt, opts);
|
|
854
|
+
}
|
|
855
|
+
const P = require('../../placar.js');
|
|
856
|
+
const tipo = P.classificar(userPrompt);
|
|
857
|
+
const sinais = { modelo: null, testes: null, diagSujo: false };
|
|
858
|
+
let preferido = null;
|
|
859
|
+
const fixado = /[\/:]/.test(String(opts.model || '')); // /model <id>: o placar não mexe
|
|
860
|
+
if (!fixado) {
|
|
861
|
+
try {
|
|
862
|
+
const alias = ['fast', 'main', 'top'].includes(opts.model) ? opts.model : 'main';
|
|
863
|
+
const dados = P.ler();
|
|
864
|
+
const temDado = Object.values(dados.tipos[tipo] || {}).some((c) => (c.ganhos || 0) + (c.perdas || 0) >= P.MIN_AMOSTRAS);
|
|
865
|
+
if (temDado) {
|
|
866
|
+
const e = P.escolher(dados, tipo, await modelosVivos(opts.server, opts.token, alias));
|
|
867
|
+
if (e) preferido = e.modelo;
|
|
868
|
+
}
|
|
869
|
+
} catch { /* sem dica: o servidor decide */ }
|
|
870
|
+
}
|
|
871
|
+
const r = await runActInterno(userPrompt, { ...opts, sinais, preferido });
|
|
872
|
+
try { P.fechar(tipo, sinais, r && r.concluiu); } catch { /* anotar é conveniência */ }
|
|
873
|
+
return r;
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
async function runActInterno(userPrompt, opts) {
|
|
877
|
+
const {
|
|
878
|
+
server, model, token, history, projectDir, projectName,
|
|
879
|
+
sinais = null, preferido = null, // o placar (lib/placar.js): onde anotar o que aconteceu, e a dica de modelo
|
|
880
|
+
ensureWorkDir, profundidade = 0, subagent = false, effort,
|
|
881
|
+
/* A memória do AGENTS.md entra no contexto? O bin diz não quando o
|
|
882
|
+
resumo da conversa já a dobrou (lib/session/memoria-conversa.js). */
|
|
883
|
+
memoriaDaPasta = true,
|
|
884
|
+
/* Quem troca a pasta de trabalho quando o modelo chama mudar_pasta:
|
|
885
|
+
async ({ caminho, motivo }) → { ok, caminho, memoria?, error? }.
|
|
886
|
+
Vem do bin, porque é lá que se PERGUNTA ao usuário — sem ele (pipe,
|
|
887
|
+
subagente) a troca é recusada. */
|
|
888
|
+
mudarPasta = null,
|
|
889
|
+
/* Quem responde ao pedido de controle do computador, e o estado da
|
|
890
|
+
resposta. Vêm de fora porque quem sabe perguntar é o terminal, e
|
|
891
|
+
quem sabe lembrar é a SESSÃO — um subagente não pode começar do
|
|
892
|
+
zero e pedir de novo o que já foi autorizado. */
|
|
893
|
+
autorizar = null, controle = null,
|
|
894
|
+
/* Quem mostra a pergunta com opções da ferramenta `perguntar` (terminal). Sem ele: 1ª opção + log. */
|
|
895
|
+
escolher = null,
|
|
896
|
+
/* O modo do /permissoes (auto · perguntar · livre). Vem da config pela
|
|
897
|
+
CLI e desce para os subagentes pelo ctx: eles recusam o perigoso,
|
|
898
|
+
mas só sabem que é "livre" se alguém disser. */
|
|
899
|
+
permissoes = 'auto',
|
|
900
|
+
/* O cliente HTTP, injetável. NÃO é mais um comutador de motor — o
|
|
901
|
+
PrimoCode tem um motor só, o do servidor, e não há provedor para o
|
|
902
|
+
usuário escolher. Continua um parâmetro porque é por aqui que o
|
|
903
|
+
teste põe um servidor de mentira no lugar da rede: sem ele,
|
|
904
|
+
`test/repeticao.js` e `test/continuar.js` teriam de falar com a
|
|
905
|
+
internet para verificar o loop do agente. */
|
|
906
|
+
motor = api,
|
|
907
|
+
/* Instrução de FORMA que vai junto do pedido mas não É o pedido — a
|
|
908
|
+
do modo voz ("responda em três frases faladas"). Ela chega ao
|
|
909
|
+
modelo; a memória e o histórico guardam só o que a pessoa disse.
|
|
910
|
+
Antes ela ia colada no texto, e a memória do projeto enchia de
|
|
911
|
+
"[MODO VOZ] A sua resposta vai ser lida em voz alta…". */
|
|
912
|
+
instrucao = '',
|
|
913
|
+
/* Quem abre a página para conferir antes do "pronto". Injetável pelo
|
|
914
|
+
mesmo motivo do `motor`: o teste mede a regra sem abrir um Chrome. */
|
|
915
|
+
medirPagina = (dir) => require('../../pipeline.js').medirNoNavegador(dir),
|
|
916
|
+
/* Quem LIGA o navegador escondido antes da hora. Injetável pelo mesmo
|
|
917
|
+
motivo do `medirPagina` — e só vale junto com o padrão dele: um
|
|
918
|
+
teste que troca o medidor não pode subir um Chrome de verdade. */
|
|
919
|
+
aquecerPagina = opts && opts.medirPagina ? null
|
|
920
|
+
: () => require('../../browser.js').aquecerRevisor(),
|
|
921
|
+
/* Quem é este agente no livro de ações (auditoria.js). */
|
|
922
|
+
rotulo = subagent ? 'subagente' : 'principal',
|
|
923
|
+
} = opts || {};
|
|
924
|
+
|
|
925
|
+
// A pasta de projeto só nasce quando o agente for mesmo MEXER EM ARQUIVO.
|
|
926
|
+
// Antes ela nascia na primeira tool qualquer — pedir "abre o Chrome" criava
|
|
927
|
+
// um projeto vazio, e ~/primocode enchia de pasta que não era projeto de
|
|
928
|
+
// nada. Quem decide é o catálogo: `escreve: true`.
|
|
929
|
+
let criarPasta = ensureWorkDir || null;
|
|
930
|
+
let pastaAtual = projectDir; // onde as tools agem AGORA
|
|
931
|
+
let estudioDaTarefa = null; // o projeto do Estúdio desta tarefa, se houver
|
|
932
|
+
let temPasta = !criarPasta; // já é a pasta definitiva?
|
|
933
|
+
/* Cria a pasta do projeto pendente, uma vez. Chamado antes de qualquer
|
|
934
|
+
ferramenta que faz código (ver `criaProjeto` no catálogo) — e ANTES do
|
|
935
|
+
subagente e do pipeline, que senão escreviam na raiz de ~/primocode. */
|
|
936
|
+
const garantirPasta = () => {
|
|
937
|
+
if (!criarPasta) return;
|
|
938
|
+
const nova = criarPasta();
|
|
939
|
+
if (nova) pastaAtual = nova;
|
|
940
|
+
criarPasta = null;
|
|
941
|
+
temPasta = true;
|
|
942
|
+
};
|
|
943
|
+
const falhasPendentes = [];
|
|
944
|
+
let tentativasDeEncerrar = 0;
|
|
945
|
+
// Portão de prova fresca (Gravitas, comum/desmontados/udaysharmadev-Gravitas.md): o
|
|
946
|
+
// `finish` depois de editar código sem rodar nada depois volta UMA vez.
|
|
947
|
+
const prova = novoPortaoDeProva();
|
|
948
|
+
/* ── CONFERIR ANTES DE DIZER "PRONTO" ───────────────────────────────
|
|
949
|
+
* Mexeu em página (html, css, js) nesta tarefa? Antes de aceitar o
|
|
950
|
+
* `finish`, o PrimoCode abre a página num navegador invisível e olha: tela
|
|
951
|
+
* em branco, erro de JavaScript, recurso que não carregou. Achou problema,
|
|
952
|
+
* a tarefa volta para o agente com o relato — uma vez só, para não virar
|
|
953
|
+
* laço. É a diferença entre "pronto!" e "pronto, e abre". */
|
|
954
|
+
let mexeuNaPagina = false; // mexeu desde a última conferência?
|
|
955
|
+
let conferencias = 0; // até duas: entregar, e conferir o conserto
|
|
956
|
+
let avisoDaPagina = ''; // o que ainda estava quebrado na última
|
|
957
|
+
let msConferindo = 0; // para o PRIMOCODE_TEMPOS separar as fases
|
|
958
|
+
/* Abre a página e devolve o relato quando é para VOLTAR (achou problema e
|
|
959
|
+
ainda cabe uma volta); null quando é para entregar. O que ficar
|
|
960
|
+
quebrado na última conferência fica em `avisoDaPagina`, e a entrega sai
|
|
961
|
+
com ele — nunca "pronto" seco sobre uma página com erro. Vale para os
|
|
962
|
+
dois jeitos de terminar: a ferramenta finish e a resposta em texto. */
|
|
963
|
+
const conferirPagina = async () => {
|
|
964
|
+
if (subagent || !mexeuNaPagina || conferencias >= 2 || PARAR) return null;
|
|
965
|
+
conferencias++;
|
|
966
|
+
mexeuNaPagina = false;
|
|
967
|
+
let medida = null;
|
|
968
|
+
const t = Date.now();
|
|
969
|
+
// Com spinner: eram segundos de tela parada entre o último arquivo e o
|
|
970
|
+
// "pronto", e parecia que tinha travado ali.
|
|
971
|
+
const sp = new Spinner('abrindo a página escondido para conferir').start();
|
|
972
|
+
try {
|
|
973
|
+
medida = await medirPagina(pastaAtual);
|
|
974
|
+
} catch { medida = null; } finally { sp.stop(); }
|
|
975
|
+
msConferindo += Date.now() - t;
|
|
976
|
+
tempos.somar('conferir página', Date.now() - t);
|
|
977
|
+
if (!medida || !medida.testou) return null;
|
|
978
|
+
avisoDaPagina = medida.limpo ? ''
|
|
979
|
+
: String(medida.relato || '').split('\n').filter((l) => /·|BRANCO/.test(l)).slice(0, 3).join(' ');
|
|
980
|
+
if (medida.limpo) { fala.pensamento('a página abriu sem erro', profundidade); return null; }
|
|
981
|
+
return conferencias >= 2 ? null : medida.relato;
|
|
982
|
+
};
|
|
983
|
+
/* ── RODAR OS TESTES ANTES DE DIZER "PRONTO" (lib/conferir.js) ──────
|
|
984
|
+
* Mexeu em arquivo e a pasta tem como testar (npm test, pytest, cargo…)?
|
|
985
|
+
* Antes de aceitar a entrega, roda. Passou: diz "funcionou" e marca o ponto
|
|
986
|
+
* pro /voltar. Falhou: a tarefa volta pro agente uma vez, com a saída. Na
|
|
987
|
+
* segunda, entrega dizendo que ainda falha. Prazo estourado não julga
|
|
988
|
+
* nada. É a brecha 6 da pesquisa: ninguém testa sozinho pro iniciante. */
|
|
989
|
+
let mexeuNoCodigo = false, rodadasDeTeste = 0, avisoDosTestes = '';
|
|
990
|
+
let erroQueHavia = '', notaDoConserto = ''; // o que estava errado, pra entrega dizer (pesquisa 4: o iniciante quer saber)
|
|
991
|
+
let avisouReserva = false; // uma vez por tarefa: o modelo de reserva respondeu
|
|
992
|
+
/* A CHAVE NO CÓDIGO (lib/chave-exposta.js): os arquivos que a tarefa mexeu, olhados antes do "pronto". Achou,
|
|
993
|
+
a tarefa volta pro agente uma vez; na segunda, a entrega sai dizendo onde está. */
|
|
994
|
+
const arquivosDaTarefa = new Set();
|
|
995
|
+
let conferiuChaves = 0, avisoDaChave = '';
|
|
996
|
+
const conferirChaves = () => {
|
|
997
|
+
if (subagent || !arquivosDaTarefa.size || conferiuChaves >= 2) return null;
|
|
998
|
+
conferiuChaves++;
|
|
999
|
+
const K = require('../../chave-exposta.js');
|
|
1000
|
+
const achados = K.procurar([...arquivosDaTarefa], { raiz: pastaAtual });
|
|
1001
|
+
avisoDaChave = K.relato(achados);
|
|
1002
|
+
if (!avisoDaChave) return null;
|
|
1003
|
+
console.log(c.warn(` ⚠ ${avisoDaChave}`));
|
|
1004
|
+
return conferiuChaves >= 2 ? null : `${avisoDaChave} Tire a chave do código: leia de um .env (process.env) ou do servidor, e ponha o .env no .gitignore.`;
|
|
1005
|
+
};
|
|
1006
|
+
const conferirTestes = async () => {
|
|
1007
|
+
const C = require('../../conferir.js');
|
|
1008
|
+
if (!C.podeRodarSozinho({ subagent, mexeu: mexeuNoCodigo, rodadas: rodadasDeTeste, parar: PARAR, modo: perigo.normalizarModo(permissoes) })) return null;
|
|
1009
|
+
const como = C.descobrir(pastaAtual);
|
|
1010
|
+
if (!como) return null;
|
|
1011
|
+
rodadasDeTeste++;
|
|
1012
|
+
mexeuNoCodigo = false;
|
|
1013
|
+
const t = Date.now();
|
|
1014
|
+
const sp = new Spinner(`rodando ${como.rotulo} pra conferir`).start();
|
|
1015
|
+
let r = null;
|
|
1016
|
+
try { r = await C.rodar(como.comando, pastaAtual, { timeout: C.PRAZO_SOZINHO }); } catch { r = null; } finally { sp.stop(); }
|
|
1017
|
+
tempos.somar('rodar os testes', Date.now() - t);
|
|
1018
|
+
if (!r || r.estourou) { avisoDosTestes = ''; return null; }
|
|
1019
|
+
if (sinais) sinais.testes = !!r.ok;
|
|
1020
|
+
registro.anotarTeste(livro, { comando: como.comando, ok: r.ok, code: r.codigo, saida: r.saida });
|
|
1021
|
+
const ex = C.explicar(r, como);
|
|
1022
|
+
if (r.ok) {
|
|
1023
|
+
avisoDosTestes = '';
|
|
1024
|
+
if (erroQueHavia) notaDoConserto = `O que estava errado: os testes falhavam (${erroQueHavia}); depois do conserto, passaram.`;
|
|
1025
|
+
console.log(c.ok(` ✓ ${ex.titulo}`) + c.dim(` (${como.comando})`));
|
|
1026
|
+
try { checkpoint.marcarFuncionando(pastaAtual, `${como.comando}, pelo agente`); } catch { /* sem ponto pra marcar */ }
|
|
1027
|
+
return null;
|
|
1028
|
+
}
|
|
1029
|
+
avisoDosTestes = `${ex.titulo} ${ex.linhas.slice(0, 2).join(' ')}`.trim();
|
|
1030
|
+
// a frase que explica (a do Error:, se houver), não a do stack: é a que a pessoa entende
|
|
1031
|
+
if (!erroQueHavia) erroQueHavia = String(ex.linhas.find((l) => /error|erro|assert|fail|falh/i.test(l)) || ex.linhas[0] || '').trim().slice(0, 140);
|
|
1032
|
+
console.log(c.warn(` ✗ ${ex.titulo}`) + c.dim(` (${como.comando})`));
|
|
1033
|
+
return rodadasDeTeste >= 2 ? null : `Rodei \`${como.comando}\` e falhou:\n${r.saida}`;
|
|
1034
|
+
};
|
|
1035
|
+
/* O ARQUIVO QUE O PEDIDO MANDA GRAVAR (lib/plugin/entregaveis.js): "grave o
|
|
1036
|
+
PLANO.md" não termina como feito com o PLANO.md sem existir. Volta uma
|
|
1037
|
+
vez; na segunda, a entrega sai dizendo que o arquivo não existe. */
|
|
1038
|
+
let cobrouArquivo = false, avisoDoArquivo = '';
|
|
1039
|
+
const conferirEntregaveis = () => {
|
|
1040
|
+
if (subagent || perigo.normalizarModo(permissoes) === 'plano') return null;
|
|
1041
|
+
const falta = entregaveis.faltando(userPrompt, pastaAtual, arquivosDaTarefa);
|
|
1042
|
+
avisoDoArquivo = falta.length ? `o pedido mandava gravar ${falta.join(', ')}, e ainda não existe.` : '';
|
|
1043
|
+
if (!falta.length || cobrouArquivo) return null;
|
|
1044
|
+
cobrouArquivo = true;
|
|
1045
|
+
return entregaveis.recado(falta);
|
|
1046
|
+
};
|
|
1047
|
+
/* O PLANO COM PASSO ABERTO: o agente escreveu um plano (write_todos) e
|
|
1048
|
+
disse "pronto" com passo por fazer ("0/1 concluídas"). Volta uma vez
|
|
1049
|
+
pra terminar ou dizer o que falta e por quê; na segunda, a entrega sai
|
|
1050
|
+
com os passos abertos. `todosDaTarefa` é lido na hora: é preenchido
|
|
1051
|
+
mais abaixo, quando o write_todos roda. */
|
|
1052
|
+
let cobrouPlano = false, avisoDoPlano = '';
|
|
1053
|
+
const conferirPlano = () => {
|
|
1054
|
+
if (subagent) return null;
|
|
1055
|
+
const abertos = todosDaTarefa.filter((t) => t.status !== 'completed');
|
|
1056
|
+
avisoDoPlano = abertos.length ? `o plano ficou com ${abertos.length} passo(s) aberto(s): ${abertos.map((t) => t.content).join('; ')}.` : '';
|
|
1057
|
+
if (!abertos.length || cobrouPlano) return null;
|
|
1058
|
+
cobrouPlano = true;
|
|
1059
|
+
return recadoDoPlanoAberto(abertos);
|
|
1060
|
+
};
|
|
1061
|
+
/* O RESUMO QUE DIZ TER MUDADO UM ARQUIVO INTACTO (lib/afirmacoes.js): volta uma vez; na segunda, a entrega avisa. */
|
|
1062
|
+
const inicioDaTarefa = Date.now();
|
|
1063
|
+
let cobrouAfirmacao = false, avisoDaAfirmacao = '';
|
|
1064
|
+
const conferirAfirmacoes = (resumo) => {
|
|
1065
|
+
if (subagent) return null;
|
|
1066
|
+
const A = require('../../afirmacoes.js');
|
|
1067
|
+
const falsos = A.semMudanca(resumo, { tocados: arquivosDaTarefa, pasta: pastaAtual, desde: inicioDaTarefa });
|
|
1068
|
+
const semProva = A.testeSemProva(resumo, (livro && livro.testes) || []);
|
|
1069
|
+
const partes = [];
|
|
1070
|
+
if (falsos.length) partes.push(`o resumo diz que mudou ${falsos.join(', ')}, mas nesta tarefa nada foi escrito ${falsos.length > 1 ? 'neles' : 'nele'}`);
|
|
1071
|
+
if (semProva) partes.push(`o resumo diz que o teste passou, mas ${semProva}`);
|
|
1072
|
+
avisoDaAfirmacao = partes.length ? `${partes.join('; ')}.` : '';
|
|
1073
|
+
if (!partes.length || cobrouAfirmacao) return null;
|
|
1074
|
+
cobrouAfirmacao = true;
|
|
1075
|
+
const pedidos = [];
|
|
1076
|
+
if (falsos.length) pedidos.push(`você disse que mudou ${falsos.join(', ')}, mas nesta tarefa nada foi escrito ${falsos.length > 1 ? 'neles' : 'nele'}: faça a mudança agora (edit_file/write_file) ou corrija o resumo`);
|
|
1077
|
+
if (semProva) pedidos.push(`você disse que o teste passou, mas ${semProva}: rode o teste agora e leia o resultado, ou tire isso do resumo`);
|
|
1078
|
+
return `${pedidos.join('; e ')}.`;
|
|
1079
|
+
};
|
|
1080
|
+
const comAviso = (texto) => {
|
|
1081
|
+
let t = avisoDaPagina ? `${texto}\n\nAtenção: abri a página e ela ainda tem problema — ${avisoDaPagina.trim()}` : texto;
|
|
1082
|
+
if (avisoDosTestes) t += `\n\nAtenção: rodei os testes e eles ainda falham — ${avisoDosTestes}`;
|
|
1083
|
+
if (avisoDaChave) t += `\n\nAtenção: ${avisoDaChave}`;
|
|
1084
|
+
if (avisoDoArquivo) t += `\n\nAtenção: ${avisoDoArquivo}`;
|
|
1085
|
+
if (avisoDoPlano) t += `\n\nAtenção: ${avisoDoPlano}`;
|
|
1086
|
+
if (avisoDaAfirmacao) t += `\n\nAtenção: ${avisoDaAfirmacao}`;
|
|
1087
|
+
if (notaDoConserto && !avisoDosTestes) t += `\n\n${notaDoConserto}`;
|
|
1088
|
+
return t;
|
|
1089
|
+
};
|
|
1090
|
+
// Quem já foi chamado, e quantas vezes. Ver lib/repeticao.js.
|
|
1091
|
+
const jaChamado = repeticao.novo();
|
|
1092
|
+
/* Andando em círculo? (lib/travado.js — o subagente de 01/10 que releu o
|
|
1093
|
+
mesmo arquivo por uma hora). Empurra uma vez; na segunda, para. */
|
|
1094
|
+
const circulo = travado.novo();
|
|
1095
|
+
let paradoPorTravar = null;
|
|
1096
|
+
/* Anota ANTES de agir (lib/auditoria.js): recusado também fica no livro. */
|
|
1097
|
+
const anotar = (tc, decisao, motivo) => {
|
|
1098
|
+
if (decisao !== 'recusada' && decisao !== 'negada') require('../../plugin/voz-ponte').ferramenta(tc.name, tc.arguments);
|
|
1099
|
+
const id = auditoria.antes({ agente: rotulo, ferramenta: tc.name, args: tc.arguments, decisao, motivo });
|
|
1100
|
+
const falhou = auditoria.problema();
|
|
1101
|
+
if (falhou) console.log(c.warn(`⚠ ${falhou}`));
|
|
1102
|
+
return id;
|
|
1103
|
+
};
|
|
1104
|
+
// O que read_file/list_dir devolveram, pela chave da época (repeticao.js).
|
|
1105
|
+
const leiturasGuardadas = new Map();
|
|
1106
|
+
// O que ELE escreveu inteiro nesta tarefa, por caminho absoluto — para
|
|
1107
|
+
// não gastar uma volta relendo o próprio texto (ver read_file abaixo).
|
|
1108
|
+
const escritosNaTarefa = new Map();
|
|
1109
|
+
/* O livro deste pedido: arquivos, comandos, links, testes e falhas. Sai
|
|
1110
|
+
no fim como balanço (ver lib/registro.js). O subagente tem o seu, que
|
|
1111
|
+
não se mistura com o do principal — mas o que ele fez também precisa
|
|
1112
|
+
aparecer, então o de cima incorpora o de baixo no retorno. */
|
|
1113
|
+
const livro = registro.novo();
|
|
1114
|
+
/* A autorização do computador vale pela SESSÃO, então o estado vem de
|
|
1115
|
+
fora. Um subagente que criasse o seu perguntaria de novo o que já foi
|
|
1116
|
+
respondido — e uma pergunta repetida é uma pergunta que se responde
|
|
1117
|
+
sem ler. Sem ninguém de fora (teste, pipe), nasce um aqui, que começa
|
|
1118
|
+
fechado. */
|
|
1119
|
+
const portaoControle = controle || permissao.novo();
|
|
1120
|
+
|
|
1121
|
+
/* AS SKILLS entram na frente do pedido, e só as que casam com ele.
|
|
1122
|
+
*
|
|
1123
|
+
* No pedido principal, não no subagente: o subagente já recebe o briefing
|
|
1124
|
+
* do especialista dele, e empilhar os dois gastaria o teto de tokens
|
|
1125
|
+
* duas vezes para dizer coisas parecidas.
|
|
1126
|
+
*
|
|
1127
|
+
* O que decide quais entram é o `quando:` de cada skill — ver
|
|
1128
|
+
* lib/skill/skills.js, que também explica por que mandar todas em todo pedido
|
|
1129
|
+
* não é uma opção num plano limitado por token. */
|
|
1130
|
+
let pedido = userPrompt;
|
|
1131
|
+
/* Editar a GRAVAÇÃO da pessoa? Decide pelo que ELA escreveu (userPrompt),
|
|
1132
|
+
não pelo `pedido` já com skills e instruções na frente: uma skill com
|
|
1133
|
+
"editar… o vídeo" no corpo bastava para virar edição. */
|
|
1134
|
+
const ehEdicaoDaGravacao = require('../../plugin/estudio/diretor.js').precisaDeEdicao(userPrompt);
|
|
1135
|
+
if (!subagent) {
|
|
1136
|
+
const comSkills = skills.cardapio(userPrompt);
|
|
1137
|
+
pedido = comSkills.texto;
|
|
1138
|
+
/* O menu de comandos (lib/nomes.js): "põe no ar" sem barra nenhuma e o
|
|
1139
|
+
agente aponta o /ship. A IA decide pelo "quando" de cada um; nenhum
|
|
1140
|
+
regex escolhe comando. Os .md da pessoa entram no fim do menu. */
|
|
1141
|
+
let dela = [];
|
|
1142
|
+
try { dela = require('../../cli/comandos.js').carregar({ projectDir }); } catch { /* disco estranho não trava o pedido */ }
|
|
1143
|
+
pedido = `${require('../../nomes.js').menuParaIA({ dela })}\n\n${pedido}`;
|
|
1144
|
+
/* OS KITS DE ESTILO DE MOTION (lib/plugin/kits.js): um turno novo por pedido da pessoa (o `kit fazer` só
|
|
1145
|
+
passa depois que ela respondeu ao cartão) e o menu dos kits. A IA escolhe o kit; o "parece motion"
|
|
1146
|
+
só decide se vai o menu inteiro ou uma linha. */
|
|
1147
|
+
try {
|
|
1148
|
+
const kits = require('../../plugin/kits.js');
|
|
1149
|
+
kits.novoTurno();
|
|
1150
|
+
const cabeca = kits.cabecaDoPedido(userPrompt, { projectDir });
|
|
1151
|
+
// o vídeo esperando o sim vai colado na resposta da pessoa (é dela que a IA decide); o menu, na frente
|
|
1152
|
+
if (cabeca && /^\[VÍDEO (ESPERANDO|SENDO MONTADO)/.test(cabeca) && pedido.endsWith(userPrompt)) pedido = `${pedido.slice(0, pedido.length - userPrompt.length)}${cabeca}\n\nRESPOSTA DA PESSOA: ${userPrompt}`;
|
|
1153
|
+
else if (cabeca) pedido = `${cabeca}\n\n${pedido}`;
|
|
1154
|
+
} catch { /* pacote sem kits: segue */ }
|
|
1155
|
+
if (instrucao) pedido = `${instrucao}\n\nPEDIDO: ${pedido}`;
|
|
1156
|
+
}
|
|
1157
|
+
let voltasEmFalso = 0;
|
|
1158
|
+
// Pesquisas que voltaram de mãos vazias. A partir da terceira, a tool
|
|
1159
|
+
// para de rodar e devolve ORDEM DE SEGUIR: sem isto o agente entrava em
|
|
1160
|
+
// ciclo — buscava, não achava, lia "tente outra consulta", buscava de
|
|
1161
|
+
// novo — até a cota do minuto acabar e o modelo responder vazio. Foi
|
|
1162
|
+
// assim que "crie um vídeo para a tostudy" morreu sem entregar nada.
|
|
1163
|
+
let pesquisasSecas = 0;
|
|
1164
|
+
let rodadasParadas = 0;
|
|
1165
|
+
let trocouDeRota = false;
|
|
1166
|
+
/* Para o `pareceParadaNoMeio`: se alguma tool já rodou nesta tarefa, e o
|
|
1167
|
+
último plano que o modelo escreveu (write_todos) — desta TAREFA, não da
|
|
1168
|
+
sessão: um plano velho, de um pedido interrompido, não pode empurrar o
|
|
1169
|
+
pedido seguinte. */
|
|
1170
|
+
let rodouTool = false;
|
|
1171
|
+
let todosDaTarefa = [];
|
|
1172
|
+
let empurroes = 0, empurroesDoKit = 0;
|
|
1173
|
+
// As travas do fim (idioma, arquivo pedido, plano aberto): cada uma manda de volta UMA vez por pedido.
|
|
1174
|
+
let pediuIdioma = false;
|
|
1175
|
+
|
|
1176
|
+
const messages = [];
|
|
1177
|
+
if (!subagent) {
|
|
1178
|
+
const memory = buildMemoryContext(projectDir, projectName, userPrompt, { memoriaDaPasta });
|
|
1179
|
+
if (memory) messages.push({ role: 'system', content: `Memória persistente:\n\n${memory}` });
|
|
1180
|
+
for (const m of historicoEnxuto(history)) messages.push(m);
|
|
1181
|
+
} else {
|
|
1182
|
+
// O subagente também trabalha no ritmo: sem isto ele relia o mesmo arquivo aos pedaços.
|
|
1183
|
+
messages.push({ role: 'system', content: RITMO_AGENTE });
|
|
1184
|
+
}
|
|
1185
|
+
/* O que VAI para o modelo é `pedido` (com as skills na frente); o que
|
|
1186
|
+
fica guardado na memória e no histórico é `userPrompt`, o que a pessoa
|
|
1187
|
+
escreveu. Guardar o texto inflado faria a conversa crescer com o mesmo
|
|
1188
|
+
conhecimento repetido em cada turno. */
|
|
1189
|
+
/* ── O GATILHO DO DIRETOR ────────────────────────────────────────────
|
|
1190
|
+
*
|
|
1191
|
+
* "A IA identifica que precisa criar vídeo, ativa o agente, esse agente
|
|
1192
|
+
* faz a estrutura e manda pra IA, e depois ela só faz o vídeo."
|
|
1193
|
+
*
|
|
1194
|
+
* Deixar isso só escrito no catálogo não basta: com um pedido curto
|
|
1195
|
+
* ("faz um vídeo do produto") o modelo pula direto para montar cena,
|
|
1196
|
+
* porque montar cena é o que ele sabe fazer — e o roteiro, escrito no
|
|
1197
|
+
* meio do JSON, vira legenda de slide. Quem reconhece o pedido é uma
|
|
1198
|
+
* regra (diretor.precisaDeProducao), e ela entra como ORDEM na conversa,
|
|
1199
|
+
* não como conselho perdido no meio de quarenta e sete ferramentas.
|
|
1200
|
+
*
|
|
1201
|
+
* Num subagente não entra: ele já está fazendo uma parte de um plano, e
|
|
1202
|
+
* um diretor dentro do diretor é uma volta a mais para o mesmo lugar. */
|
|
1203
|
+
if (!subagent && profundidade === 0) {
|
|
1204
|
+
const diretor = require('../../plugin/estudio/diretor.js');
|
|
1205
|
+
// Vídeo que o Estúdio fez se edita no Remotion Studio, não no editor por linha do tempo.
|
|
1206
|
+
const EDITAR_DO_ESTUDIO = 'SE ELA QUER EDITAR UM VÍDEO QUE O ESTÚDIO FEZ (não uma gravação dela): '
|
|
1207
|
+
+ 'estudio_projeto acao:"editar" com o id do projeto abre o Remotion Studio no navegador; diga a pasta a ela e pare.\n';
|
|
1208
|
+
const EDICAO_COMPLETA = EDICAO_DE_VIDEO_FALADO;
|
|
1209
|
+
const producao = diretor.precisaDeProducao(userPrompt);
|
|
1210
|
+
if (ehEdicaoDaGravacao) {
|
|
1211
|
+
/* A gravação da pessoa FALANDO: a edição completa é do motor do EDIT IA PRO
|
|
1212
|
+
(lib/plugin/editor-pro.js), decisão do Joel em 20/10 depois de comparar os dois no
|
|
1213
|
+
mesmo vídeo. O editor por linha do tempo (lib/plugin/video/) fica para as operações
|
|
1214
|
+
soltas. Quem escolhe entre os dois é o modelo, pelo que a pessoa pediu. */
|
|
1215
|
+
messages.push({ role: 'system', content: EDITAR_DO_ESTUDIO + EDICAO_COMPLETA
|
|
1216
|
+
+ 'SE ela pediu UMA operação solta na gravação (cortar um trecho, juntar, exportar, trocar o fundo, um efeito que segue a mão), use o editor por linha do tempo via run_shell: '
|
|
1217
|
+
+ 'SE A GRAVAÇÃO TRAZ PEDIDOS FALADOS ("separe em camadas", "me coloca numa praia"): `primocode video import --json \'{"path":"<arquivo>"}\'`, '
|
|
1218
|
+
+ 'depois `primocode video auto --json \'{}\'` (lê o que ela FALA na gravação e aplica cada efeito no momento em que diz), inspect, export e abra o mp4. '
|
|
1219
|
+
+ 'Nos outros casos: '
|
|
1220
|
+
+ 'rode `primocode video help` UMA vez (lista as operações), depois import → remove_silence/remove_words → add_captions → inspect (olhe o png) → export. '
|
|
1221
|
+
+ 'Cada edição devolve um delta curto e tem undo: edite sem pedir licença a cada passo.\n'
|
|
1222
|
+
/* "deixar os vídeos cinematográficos… fazer um color grading sozinha" (13/10). */
|
|
1223
|
+
+ 'CINEMATOGRÁFICO: `primocode video grade --json \'{}\'` mede a imagem e faz o color grading de cinema sozinho (look:cinema|quente|noite|natural|pb, intensidade); use antes do export quando a pessoa quer o vídeo bonito, e OLHE o inspect.\n'
|
|
1224
|
+
+ 'EFEITOS que seguem a pessoa: separate_layers (recorte + momento 3D), replace_background (fundo novo no estalo), '
|
|
1225
|
+
+ 'attach_3d (logo 3D na mão, segue a mão), merge_on_join (mãos juntas → fusão → cérebro), cut_silence_at (silêncio depois do estalo), '
|
|
1226
|
+
+ 'style_captions (cor, legenda em cima da cabeça) — detalhe em `primocode video help efeitos`. Atalho: `primocode video do --json \'{"pedido":"<o pedido em português>"}\'`.' });
|
|
1227
|
+
} else if (producao.producao) {
|
|
1228
|
+
/* "SE ESTIVER NA SUA LISTA" não é hesitação — é a diferença entre
|
|
1229
|
+
a tarefa seguir e a tarefa morrer.
|
|
1230
|
+
|
|
1231
|
+
A primeira versão mandava chamar `planejar_producao` sem
|
|
1232
|
+
ressalva. Só que quem declara as ferramentas ao modelo é o
|
|
1233
|
+
SERVIDOR, e este texto é do cliente: com o servidor
|
|
1234
|
+
desatualizado, o modelo obedecia a uma ordem para chamar algo
|
|
1235
|
+
que não estava na lista dele, e o provedor recusava com
|
|
1236
|
+
"attempted to call tool 'planejar_producao' which was not in
|
|
1237
|
+
request.tools" — erro FATAL, em inglês, na cara do usuário, com
|
|
1238
|
+
a tarefa perdida antes da primeira ação.
|
|
1239
|
+
|
|
1240
|
+
Um modelo não chama tool fora da lista por conta própria. Só
|
|
1241
|
+
chamou porque este parágrafo mandou. */
|
|
1242
|
+
/* O caminho do ROTEIRO (lib/plugin/estudio/composicao.js). Antes esta
|
|
1243
|
+
ordem mandava chamar o diretor e depois compor "cena a cena,
|
|
1244
|
+
com as primitivas" — o modelo escrevia posição em pixel e o
|
|
1245
|
+
vídeo saía quebrado, além de custar três ou quatro rodadas a
|
|
1246
|
+
mais de modelo (medido em 25/09). */
|
|
1247
|
+
/* A IA DECIDE (01/10): "pedi um roteiro de vídeo e ela já ia fazer o
|
|
1248
|
+
motion". A regra só sabe que a palavra "vídeo" apareceu; quem sabe
|
|
1249
|
+
se a pessoa quer o vídeo PRONTO ou só o roteiro, a ideia ou uma
|
|
1250
|
+
resposta é o modelo. Então isto é o caminho SE for produzir, e não
|
|
1251
|
+
mais uma ordem de produzir. */
|
|
1252
|
+
messages.push({ role: 'system', content:
|
|
1253
|
+
EDITAR_DO_ESTUDIO + EDICAO_COMPLETA + 'VOCÊ DECIDE o que entregar, pelo que a pessoa pediu: se ela quer só o roteiro, a ideia, um texto ou uma resposta, ESCREVA isso e pare — não produza vídeo. '
|
|
1254
|
+
+ `SE ela quer a peça pronta (formato "${producao.formato === 'apresentacao' ? 'slides' : 'video'}"), faça em três passos: `
|
|
1255
|
+
+ `estudio_projeto acao:"criar" com formato "${producao.formato === 'apresentacao' ? 'slides' : 'video'}" → `
|
|
1256
|
+
+ 'estudio_plano com "roteiro" (partes com tipo e fala; o PrimoCode faz layout, voz, ícones, música e sons) → '
|
|
1257
|
+
+ 'estudio_render. Se a peça for de uma marca de verdade, estudio_site antes, e use as cores e a logo em roteiro.marca. '
|
|
1258
|
+
/* "todo vídeo começa igual" (09/10): o cardápio de estruturas e o
|
|
1259
|
+
que os últimos vídeos usaram. O modelo escolhe; nada aqui força. */
|
|
1260
|
+
+ 'ANTES de escrever as partes, escolha a estrutura do roteiro e diga qual em roteiro.estrutura. '
|
|
1261
|
+
+ 'SE a pessoa pediu duas vozes, dois narradores ou diálogo: roteiro.vozes {nome: voz} e falante em cada parte.\n'
|
|
1262
|
+
+ diretor.cardapioEstruturas() + '\n'
|
|
1263
|
+
+ 'NÃO escreva cenas, elementos nem posições à mão. '
|
|
1264
|
+
+ 'Se estudio_plano não aceitar "roteiro" (servidor antigo), siga com as ferramentas que você tem. '
|
|
1265
|
+
+ 'Nunca chame uma ferramenta que não está na sua lista — a chamada é recusada e a tarefa se perde.' });
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
|
|
1269
|
+
/* "O app não abre": o `primocode porta` (lib/porta.js) sabe a porta de verdade, e o modelo decide se roda.
|
|
1270
|
+
A regra só SUGERE (a palavra apareceu); sem ela, a linha não ocupa o pedido de quem não falou disso. */
|
|
1271
|
+
if (!subagent && profundidade === 0 && require('../../porta.js').PEDE_PORTA.test(userPrompt)) {
|
|
1272
|
+
messages.push({ role: 'system', content: 'SE a pessoa diz que o app ou o site não abre no navegador: rode `primocode porta` pelo run_shell, na pasta do projeto. '
|
|
1273
|
+
+ 'Ele diz a porta que o projeto declara, a que está respondendo de verdade (com o título da página) e o endereço certo. Use isso na resposta; não adivinhe a porta.' });
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1276
|
+
/* A LÍNGUA DO PEDIDO (lib/idioma.js): pedido em português, resposta em
|
|
1277
|
+
português — mesmo quando as ferramentas devolvem inglês. */
|
|
1278
|
+
if (!subagent) {
|
|
1279
|
+
const linha = idioma.instrucao(userPrompt);
|
|
1280
|
+
if (linha) messages.push({ role: 'system', content: linha });
|
|
1281
|
+
}
|
|
1282
|
+
messages.push({ role: 'user', content: pedido });
|
|
1283
|
+
|
|
1284
|
+
let finalText = '';
|
|
1285
|
+
|
|
1286
|
+
// Pedido novo zera o pedido de parada anterior.
|
|
1287
|
+
if (!subagent) PARAR = false;
|
|
1288
|
+
|
|
1289
|
+
// Quantas vezes já encolhemos por estouro de teto. Duas bastam: se depois
|
|
1290
|
+
// disso ainda não couber, o problema é o custo fixo, e encolher de novo só
|
|
1291
|
+
// apagaria o trabalho sem resolver.
|
|
1292
|
+
let compactacoes = 0;
|
|
1293
|
+
const MAX_COMPACTACOES = 2;
|
|
1294
|
+
|
|
1295
|
+
// O provedor recusa chamada de função malformada com um 400 que dizia
|
|
1296
|
+
// "Failed to call a function. Please adjust your prompt." NA CARA do
|
|
1297
|
+
// usuário — que não tem prompt nenhum para ajustar. É o modelo tropeçando
|
|
1298
|
+
// ao escrever o JSON da chamada, e quase sempre acerta na segunda.
|
|
1299
|
+
let funcoesQuebradas = 0;
|
|
1300
|
+
/* As ferramentas que o provedor recusou por não estarem na lista do
|
|
1301
|
+
pedido. Guardadas para não entrar em laço: tira a instrução, tenta de
|
|
1302
|
+
novo UMA vez, e se voltar a acontecer com a mesma ferramenta é porque a
|
|
1303
|
+
causa é outra. */
|
|
1304
|
+
const toolsRecusadas = new Set();
|
|
1305
|
+
let respostasVazias = 0;
|
|
1306
|
+
// O teto de tokens é POR MINUTO, somando TODAS as chamadas — o plano, o
|
|
1307
|
+
// resumo e cada rodada do loop dividem a mesma cota. Um pedido perfeito
|
|
1308
|
+
// estoura se a rodada anterior já gastou o minuto. Encolher não resolve
|
|
1309
|
+
// isso (num caso real "encolheu" de 2 para 2 mensagens); esperar a janela
|
|
1310
|
+
// virar, sim.
|
|
1311
|
+
let esperas = 0;
|
|
1312
|
+
// Ordem do dono: limite de token NUNCA mais encerra a tarefa. Ele espera
|
|
1313
|
+
// o quanto precisar — Esc Esc continua sendo a saída na mão do usuário.
|
|
1314
|
+
// 200 esperas de até 70s são horas: na prática, para quem não apertou
|
|
1315
|
+
// Esc, é "espera até dar".
|
|
1316
|
+
// O teste derruba para 2 via env; em produção são 200.
|
|
1317
|
+
const MAX_ESPERAS = Number(process.env.PRIMOCODE_MAX_ESPERAS || 200);
|
|
1318
|
+
// Rede e 5xx têm teto menor: seis esperas curtas (~1 min) e aí é o
|
|
1319
|
+
// servidor que caiu de verdade, e a pessoa merece saber.
|
|
1320
|
+
const MAX_ESPERAS_REDE = Number(process.env.PRIMOCODE_MAX_ESPERAS_REDE || 6);
|
|
1321
|
+
|
|
1322
|
+
let voltas = 0;
|
|
1323
|
+
const teto = subagent ? MAX_VOLTAS_AGENTE : MAX_ITERATIONS;
|
|
1324
|
+
let avisouTeto = false;
|
|
1325
|
+
if (!subagent) TRABALHANDO = true;
|
|
1326
|
+
try {
|
|
1327
|
+
/* O AGENTE TEM TETO PRÓPRIO. No teste da loja (01/10) o "fechar
|
|
1328
|
+
pendências do painel" passou de 38 voltas lendo o mesmo app.js aos
|
|
1329
|
+
pedaços — a conversa dele inchou para 45 mil caracteres e uma resposta
|
|
1330
|
+
levou 22 minutos. Uma parte de um plano cabe em 20 voltas; na 15ª ele
|
|
1331
|
+
é avisado para fechar, e no teto volta com a entrega do que fez. */
|
|
1332
|
+
let ultimoModelo = null; let voltaDoResumo = -9; // lib/session/compactacao.js
|
|
1333
|
+
for (let iteration = 0; iteration < teto && !PARAR; iteration++) {
|
|
1334
|
+
voltas++;
|
|
1335
|
+
if (subagent && !avisouTeto && voltas >= teto - 5) {
|
|
1336
|
+
avisouTeto = true;
|
|
1337
|
+
messages.push({ role: 'user', content: `Faltam ${teto - voltas + 1} voltas para o seu limite. Feche o essencial do que foi pedido agora, `
|
|
1338
|
+
+ 'prove (rode o teste ou o comando) e chame finish dizendo o que ficou de fora. Nada de polimento extra.' });
|
|
1339
|
+
}
|
|
1340
|
+
// Recado digitado durante o passo anterior entra AGORA, antes da ida
|
|
1341
|
+
// ao modelo — o resultado das ferramentas já está na conversa.
|
|
1342
|
+
if (!subagent) entregarRecados(messages, profundidade);
|
|
1343
|
+
// Tarefa em segundo plano que acabou desde a última volta (lib/fundo.js): o modelo fica sabendo.
|
|
1344
|
+
if (!subagent) for (const av of require('../../fundo').pegarAvisos()) messages.push({ role: 'user', content: av.texto });
|
|
1345
|
+
const sp = new Spinner(subagent ? 'subagente trabalhando' : PENSANDO).start();
|
|
1346
|
+
|
|
1347
|
+
const toolCalls = [];
|
|
1348
|
+
let assistantText = '';
|
|
1349
|
+
let streamError = null;
|
|
1350
|
+
let modeloDaVolta = null; // { modelo, reserva }: o servidor conta quem respondeu
|
|
1351
|
+
// O texto do modelo NÃO sai letra a letra enquanto chega: fica guardado
|
|
1352
|
+
// até o fim da rodada, porque só ali se sabe o que ele É. Vieram
|
|
1353
|
+
// tool_calls junto? É PENSAMENTO ("o vídeo veio em .avi, vou
|
|
1354
|
+
// converter") e sai recuado, em cinza, com ✦. Não veio tool nenhuma? É
|
|
1355
|
+
// a RESPOSTA, e sai com ● na cor da marca. Antes tudo saía em branco
|
|
1356
|
+
// no mesmo lugar, e "vou converter" e "pronto, converti" tinham a
|
|
1357
|
+
// mesma cara. A exceção é texto longo: passou do limiar sem tool à
|
|
1358
|
+
// vista, é resposta — e aí volta a correr na tela conforme chega.
|
|
1359
|
+
let fluxo = null;
|
|
1360
|
+
|
|
1361
|
+
emVoo = new AbortController();
|
|
1362
|
+
const tRodada = Date.now();
|
|
1363
|
+
try {
|
|
1364
|
+
let folgado = false;
|
|
1365
|
+
try { folgado = !!require('../../provider/local/provedor.js').atual(); } catch { /* sem provedor próprio */ }
|
|
1366
|
+
/* RESUMO AUTOMÁTICO (lib/session/compactacao.js): passou de ~80% da janela do modelo → as voltas antigas viram
|
|
1367
|
+
um resumo feito pelo modelo (objetivo, decisões, arquivos, to-dos). Só depois o compactar() encolhe o resto. */
|
|
1368
|
+
if (voltas - voltaDoResumo >= 3) {
|
|
1369
|
+
try {
|
|
1370
|
+
const comp = require('../compactacao');
|
|
1371
|
+
if (comp.precisaCompactar(messages, { janela: comp.janelaDe(ultimoModelo) })) {
|
|
1372
|
+
voltaDoResumo = voltas;
|
|
1373
|
+
const r = await comp.compactarMensagens(messages, {
|
|
1374
|
+
todos: todosDaTarefa,
|
|
1375
|
+
resumir: ({ resumo, mensagens }, todos) => comp.resumirComFatos({ resumo, mensagens },
|
|
1376
|
+
(p) => motor.requestResumo(server, { ...p, token }).then((x) => x && x.resumo), todos),
|
|
1377
|
+
});
|
|
1378
|
+
if (r.ok) console.log(ident(profundidade) + c.dim(` ⎿ conversa passou de 80% da janela: ${r.resumidas} mensagens viraram resumo (${r.antes} → ${r.depois} tokens)`));
|
|
1379
|
+
}
|
|
1380
|
+
} catch { /* resumo é economia, não requisito */ }
|
|
1381
|
+
}
|
|
1382
|
+
const enviadas = compactar(messages, { folgado });
|
|
1383
|
+
traco(`volta ${voltas}${subagent ? ' (agente)' : ''} · ${enviadas.length} mensagens · ${JSON.stringify(enviadas).length} caracteres`);
|
|
1384
|
+
await motor.requestAct(server, { messages: enviadas, model, preferido: preferido || undefined, effort, token, projectDir: pastaAtual, projectName, subagent, sinal: emVoo.signal }, (evt) => {
|
|
1385
|
+
if (evt.erro) { streamError = folgado ? evt.erro : erroDaCorrente(evt.erro); return; }
|
|
1386
|
+
if (evt.modelo) { modeloDaVolta = evt; ultimoModelo = evt.modelo; if (sinais) sinais.modelo = evt.modelo; require('../../cli/statusline').registrarModelo(evt.modelo); return; }
|
|
1387
|
+
if (evt.tool_call) {
|
|
1388
|
+
toolCalls.push(evt.tool_call);
|
|
1389
|
+
const a = evt.tool_call.arguments || {};
|
|
1390
|
+
sp.detalhe = `${toolCalls.length} ${toolCalls.length > 1 ? 'ações prontas' : 'ação pronta'} · ${evt.tool_call.name}${a.path ? ' ' + a.path : ''}`;
|
|
1391
|
+
return;
|
|
1392
|
+
}
|
|
1393
|
+
if (evt.delta) {
|
|
1394
|
+
assistantText += evt.delta;
|
|
1395
|
+
sp.detalhe = assistantText.length > 200 ? `${Math.round(assistantText.length / 100) / 10} mil caracteres` : '';
|
|
1396
|
+
if (!subagent && !toolCalls.length) {
|
|
1397
|
+
if (!fluxo && assistantText.length > fala.LIMIAR_PENSAMENTO) {
|
|
1398
|
+
sp.stop();
|
|
1399
|
+
fluxo = fala.fluxo();
|
|
1400
|
+
fluxo.escrever(assistantText);
|
|
1401
|
+
} else if (fluxo) fluxo.escrever(evt.delta);
|
|
1402
|
+
}
|
|
1403
|
+
}
|
|
1404
|
+
if (evt.assistant_message) assistantText = evt.assistant_message.content || assistantText;
|
|
1405
|
+
});
|
|
1406
|
+
} catch (e) {
|
|
1407
|
+
sp.stop();
|
|
1408
|
+
emVoo = null;
|
|
1409
|
+
traco(`erro na volta ${voltas}: ${String((e && e.message) || e).slice(0, 200)}`);
|
|
1410
|
+
if (fluxo) fluxo.fechar();
|
|
1411
|
+
// Estourou o minuto: encolhe o que já foi feito e CONTINUA, em vez
|
|
1412
|
+
// de devolver erro e jogar fora o trabalho. O usuário não precisa
|
|
1413
|
+
// saber que isso aconteceu — a tarefa é dele, o encanamento é
|
|
1414
|
+
// nosso. E não sabe MESMO: nada disto vai para a tela; o spinner de
|
|
1415
|
+
// pensar segue girando com as frases de sempre.
|
|
1416
|
+
if (ehTetoDeToken(e) && !PARAR && messages.length > 8 && compactacoes < MAX_COMPACTACOES) {
|
|
1417
|
+
compactacoes++;
|
|
1418
|
+
encolherParaContinuar(messages);
|
|
1419
|
+
iteration--; // esta volta não contou: nada foi decidido
|
|
1420
|
+
continue;
|
|
1421
|
+
}
|
|
1422
|
+
if ((ehTetoDeToken(e) || ehTransitorio(e)) && !PARAR) {
|
|
1423
|
+
const teto = ehTetoDeToken(e) ? MAX_ESPERAS : MAX_ESPERAS_REDE;
|
|
1424
|
+
if (esperas < teto) {
|
|
1425
|
+
esperas++;
|
|
1426
|
+
await pausar(esperaDoErro(e, esperas), subagent);
|
|
1427
|
+
iteration--;
|
|
1428
|
+
continue;
|
|
1429
|
+
}
|
|
1430
|
+
}
|
|
1431
|
+
if (subagent) return { assistantMessage: { role: 'assistant', content: `Subagente falhou: ${fala.frase(e)}` } };
|
|
1432
|
+
fala.problema(e);
|
|
1433
|
+
throw e;
|
|
1434
|
+
}
|
|
1435
|
+
sp.stop();
|
|
1436
|
+
emVoo = null;
|
|
1437
|
+
if (!subagent && !avisouReserva && modeloDaVolta && modeloDaVolta.reserva) {
|
|
1438
|
+
avisouReserva = true;
|
|
1439
|
+
console.log(c.dim(` ⎿ ${linhaDaReserva(modeloDaVolta.modelo)}`));
|
|
1440
|
+
}
|
|
1441
|
+
traco(`volta ${voltas} voltou em ${Math.round((Date.now() - tRodada) / 1000)}s · ${toolCalls.map((t) => t.name).join(', ') || 'texto'}${streamError ? ' · erro: ' + String(streamError).slice(0, 160) : ''}`);
|
|
1442
|
+
tempos.somar(subagent ? 'rodada do subagente' : 'rodada do modelo', Date.now() - tRodada);
|
|
1443
|
+
if (PARAR) { if (fluxo) fluxo.fechar(); break; }
|
|
1444
|
+
|
|
1445
|
+
// Chamada de função malformada: o modelo errou a SINTAXE da chamada,
|
|
1446
|
+
// não a tarefa. Repetir a mesma rodada quase sempre resolve — e sem
|
|
1447
|
+
// isto o 400 cru do provedor ("Failed to call a function. Please
|
|
1448
|
+
// adjust your prompt.") caía na tela de quem não tem prompt nenhum
|
|
1449
|
+
// para ajustar.
|
|
1450
|
+
// "failed to parse tool call arguments" é a variante nova do mesmo
|
|
1451
|
+
// tropeço: o provedor recusou o JSON que o MODELO gerou. Medido em
|
|
1452
|
+
// produção num "crie um vídeo" — o documento grande saía torto e o
|
|
1453
|
+
// erro cru parava a tarefa com a corrente inteira ainda de pé.
|
|
1454
|
+
// Tudo o que é encanamento daqui para baixo acontece EM SILÊNCIO: o
|
|
1455
|
+
// tropeço, o encolhimento, a espera. Antes cada um escrevia uma linha
|
|
1456
|
+
// cinza ("o modelo tropeçou", "conversa encolhida (12 → 4)"), e quem
|
|
1457
|
+
// lia via a máquina engasgando no meio do trabalho.
|
|
1458
|
+
if (streamError && /failed to call a function|failed to parse tool call|failed_generation|tool_use_failed/i.test(String(streamError))
|
|
1459
|
+
&& funcoesQuebradas < 4 && !PARAR) {
|
|
1460
|
+
funcoesQuebradas++;
|
|
1461
|
+
if (fluxo) fluxo.fechar();
|
|
1462
|
+
iteration--;
|
|
1463
|
+
continue;
|
|
1464
|
+
}
|
|
1465
|
+
|
|
1466
|
+
/* FERRAMENTA FORA DA LISTA DO PEDIDO — recuperável, e antes não era.
|
|
1467
|
+
O provedor recusa com "attempted to call tool 'X' which was not in
|
|
1468
|
+
request.tools" e a rodada morria ali: erro cru em inglês, tarefa
|
|
1469
|
+
perdida antes da primeira ação. Visto em produção num "crie um
|
|
1470
|
+
vídeo para a Paris Group".
|
|
1471
|
+
|
|
1472
|
+
Quem mandou chamar aquilo foi uma instrução NOSSA, de sistema (o
|
|
1473
|
+
gatilho do diretor). Então a cura é tirar a instrução que cita a
|
|
1474
|
+
ferramenta recusada e repetir a rodada: o modelo segue com o que
|
|
1475
|
+
ele realmente tem, e a pessoa recebe o trabalho em vez de um erro.
|
|
1476
|
+
Uma vez por ferramenta — insistindo, o problema é outro. */
|
|
1477
|
+
const foraDaLista = streamError && String(streamError)
|
|
1478
|
+
.match(/attempted to call tool '([^']+)' which was not in request\.tools/i);
|
|
1479
|
+
if (foraDaLista && !PARAR && !toolsRecusadas.has(foraDaLista[1])) {
|
|
1480
|
+
toolsRecusadas.add(foraDaLista[1]);
|
|
1481
|
+
const nome = foraDaLista[1];
|
|
1482
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
1483
|
+
if (messages[i].role === 'system' && String(messages[i].content || '').includes(nome)) {
|
|
1484
|
+
messages.splice(i, 1);
|
|
1485
|
+
}
|
|
1486
|
+
}
|
|
1487
|
+
messages.push({ role: 'system', content:
|
|
1488
|
+
`A ferramenta "${nome}" NÃO está disponível nesta sessão. Não a chame e não procure `
|
|
1489
|
+
+ 'equivalente com outro nome: siga a tarefa com as ferramentas da sua lista. '
|
|
1490
|
+
+ 'Se nenhuma delas servir para o que foi pedido, diga isso ao usuário em uma frase, '
|
|
1491
|
+
+ 'em vez de desistir sem explicar.' });
|
|
1492
|
+
if (fluxo) fluxo.fechar();
|
|
1493
|
+
iteration--;
|
|
1494
|
+
continue;
|
|
1495
|
+
}
|
|
1496
|
+
|
|
1497
|
+
if (streamError && !PARAR && (ehTetoDeToken(streamError) || ehTransitorio(streamError))) {
|
|
1498
|
+
if (fluxo) fluxo.fechar();
|
|
1499
|
+
// Conversa longa: encolher resolve, porque o peso é o histórico.
|
|
1500
|
+
if (ehTetoDeToken(streamError) && messages.length > 8 && compactacoes < MAX_COMPACTACOES) {
|
|
1501
|
+
compactacoes++;
|
|
1502
|
+
encolherParaContinuar(messages);
|
|
1503
|
+
iteration--;
|
|
1504
|
+
continue;
|
|
1505
|
+
}
|
|
1506
|
+
// Conversa curta: o peso é o MINUTO, não o histórico — as chamadas
|
|
1507
|
+
// anteriores gastaram a cota. Espera a janela virar e repete. O
|
|
1508
|
+
// 5xx e a rede caem no mesmo lugar, com o teto menor.
|
|
1509
|
+
const teto = ehTetoDeToken(streamError) ? MAX_ESPERAS : MAX_ESPERAS_REDE;
|
|
1510
|
+
if (esperas < teto) {
|
|
1511
|
+
esperas++;
|
|
1512
|
+
await pausar(esperaDoErro(streamError, esperas), subagent);
|
|
1513
|
+
iteration--;
|
|
1514
|
+
continue;
|
|
1515
|
+
}
|
|
1516
|
+
}
|
|
1517
|
+
|
|
1518
|
+
if (streamError) {
|
|
1519
|
+
if (fluxo) fluxo.fechar();
|
|
1520
|
+
const amigavel = fala.frase(streamError);
|
|
1521
|
+
if (subagent) return { assistantMessage: { role: 'assistant', content: `Subagente falhou: ${amigavel}` }, concluiu: false };
|
|
1522
|
+
fala.problema(streamError);
|
|
1523
|
+
// concluiu: false — o plano de passos não pode tratar um erro de
|
|
1524
|
+
// provedor como resultado e passá-lo adiante como "fato".
|
|
1525
|
+
return { assistantMessage: { role: 'assistant', content: amigavel }, concluiu: false };
|
|
1526
|
+
}
|
|
1527
|
+
|
|
1528
|
+
// Sem tool_calls: o modelo respondeu e acabou.
|
|
1529
|
+
if (!toolCalls.length) {
|
|
1530
|
+
finalText = assistantText.trim();
|
|
1531
|
+
// Resposta VAZIA não é resposta: sem tool, sem texto e sem erro é
|
|
1532
|
+
// o modelo grátis engasgando. Cair direto no "parei sem concluir"
|
|
1533
|
+
// jogava a tarefa fora quando repetir a MESMA rodada quase sempre
|
|
1534
|
+
// resolve — visto em produção no primeiro pedido de vídeo.
|
|
1535
|
+
if (!finalText && respostasVazias < 3 && !PARAR) {
|
|
1536
|
+
respostasVazias++;
|
|
1537
|
+
// Repetir o MESMO contexto costuma produzir o mesmo vazio: se
|
|
1538
|
+
// o turno anterior já engasgou, o que falta é um empurrão
|
|
1539
|
+
// curto e concreto. A partir da segunda vez, entra um pedido
|
|
1540
|
+
// explícito de fechamento — barato em tokens (é justamente
|
|
1541
|
+
// quando a cota está no fim) e suficiente para o modelo
|
|
1542
|
+
// escrever a resposta ou chamar finish.
|
|
1543
|
+
if (respostasVazias >= 2) {
|
|
1544
|
+
messages.push({
|
|
1545
|
+
role: 'user',
|
|
1546
|
+
content: 'Sua última resposta veio vazia. Não pesquise mais nem explique o processo: '
|
|
1547
|
+
+ 'faça agora a entrega pedida com o que você já tem e finalize.',
|
|
1548
|
+
});
|
|
1549
|
+
}
|
|
1550
|
+
iteration--;
|
|
1551
|
+
continue;
|
|
1552
|
+
}
|
|
1553
|
+
/* PAROU NO MEIO? Texto de intenção ("agora vou criar…") ou plano
|
|
1554
|
+
com item aberto não é entrega. Em vez de encerrar, a tarefa
|
|
1555
|
+
volta: "isso foi uma promessa — faça". Três empurrões; se
|
|
1556
|
+
depois disso ele insistir em só falar, a resposta é dele. */
|
|
1557
|
+
const pendentes = todosDaTarefa.filter((t) => t.status !== 'completed').length;
|
|
1558
|
+
if (finalText && empurroes < MAX_EMPURROES && !PARAR
|
|
1559
|
+
&& pareceParadaNoMeio(finalText, { todosPendentes: pendentes, rodouTool })) {
|
|
1560
|
+
empurroes++;
|
|
1561
|
+
if (pendentes) cobrouPlano = true; // este empurrão já cobrou o plano aberto
|
|
1562
|
+
if (!subagent) {
|
|
1563
|
+
if (fluxo) fluxo.fechar();
|
|
1564
|
+
else fala.pensamento(finalText, profundidade);
|
|
1565
|
+
}
|
|
1566
|
+
messages.push({ role: 'assistant', content: finalText });
|
|
1567
|
+
messages.push({
|
|
1568
|
+
role: 'user',
|
|
1569
|
+
content: 'Isso foi uma intenção, não uma entrega: você parou no meio. Não narre o próximo '
|
|
1570
|
+
+ 'passo — CHAME a tool agora e siga até o fim'
|
|
1571
|
+
+ (pendentes ? `, o seu plano ainda tem ${pendentes} item(ns) por fazer` : '')
|
|
1572
|
+
+ '. Só pare quando tudo estiver feito, com finish("o que foi feito").',
|
|
1573
|
+
});
|
|
1574
|
+
finalText = '';
|
|
1575
|
+
continue;
|
|
1576
|
+
}
|
|
1577
|
+
/* O VÍDEO DE KIT MONTADO PELA METADE: a pessoa pediu (ou confirmou) e o modelo parou falando com
|
|
1578
|
+
batida vazia em motion/plano.json (E2E do Lume, 27/10: "Now I understand the structure…" e fim). Volta
|
|
1579
|
+
com a batida que falta; duas vezes no máximo, e só se o pedido continua o vídeo. */
|
|
1580
|
+
if (finalText && !subagent && !PARAR && empurroesDoKit < 2) {
|
|
1581
|
+
let falta = [];
|
|
1582
|
+
try { const K = require('../../plugin/kits.js'); if (K.continuaVideo(userPrompt)) falta = K.batidasFaltando(pastaAtual); } catch { /* sem kits */ }
|
|
1583
|
+
if (falta.length) {
|
|
1584
|
+
empurroesDoKit++;
|
|
1585
|
+
if (fluxo) fluxo.fechar(); else fala.pensamento(finalText, profundidade);
|
|
1586
|
+
messages.push({ role: 'assistant', content: finalText });
|
|
1587
|
+
messages.push({ role: 'user', content: `O vídeo ainda não está montado: faltam as batidas ${falta.join(', ')} em motion/plano.json. Não explique — mande agora a batida ${falta[0]}: run_shell "primocode kit batida ${falta[0]} --camadas '[…]'" (o formulário: "primocode kit batida ${falta[0]}"), e siga até o cartão (primocode kit plano).` });
|
|
1588
|
+
finalText = '';
|
|
1589
|
+
continue;
|
|
1590
|
+
}
|
|
1591
|
+
}
|
|
1592
|
+
// Terminou falando, sem chamar finish: confere a página do mesmo jeito.
|
|
1593
|
+
if (finalText) {
|
|
1594
|
+
const relato = await conferirPagina();
|
|
1595
|
+
if (relato) {
|
|
1596
|
+
messages.push({ role: 'assistant', content: finalText });
|
|
1597
|
+
messages.push({
|
|
1598
|
+
role: 'user',
|
|
1599
|
+
content: `AINDA NÃO. Abri a página para conferir e ela tem problema:\n${relato}\n\n`
|
|
1600
|
+
+ 'Conserte SÓ o que está apontado, com edit_file no arquivo do erro (leia só ele, se precisar), e finalize de novo.',
|
|
1601
|
+
});
|
|
1602
|
+
finalText = '';
|
|
1603
|
+
continue;
|
|
1604
|
+
}
|
|
1605
|
+
const relatoDaChave = conferirChaves();
|
|
1606
|
+
if (relatoDaChave) {
|
|
1607
|
+
messages.push({ role: 'assistant', content: finalText });
|
|
1608
|
+
messages.push({ role: 'user', content: `AINDA NÃO: ${relatoDaChave} Depois finalize de novo.` });
|
|
1609
|
+
finalText = '';
|
|
1610
|
+
continue;
|
|
1611
|
+
}
|
|
1612
|
+
const relatoDosTestes = await conferirTestes();
|
|
1613
|
+
if (relatoDosTestes) {
|
|
1614
|
+
messages.push({ role: 'assistant', content: finalText });
|
|
1615
|
+
messages.push({ role: 'user', content: `AINDA NÃO. ${relatoDosTestes}\n\nAche a causa, conserte só o que quebrou e finalize de novo.` });
|
|
1616
|
+
finalText = '';
|
|
1617
|
+
continue;
|
|
1618
|
+
}
|
|
1619
|
+
const semArquivo = conferirEntregaveis();
|
|
1620
|
+
if (semArquivo) {
|
|
1621
|
+
if (fluxo) fluxo.fechar();
|
|
1622
|
+
messages.push({ role: 'assistant', content: finalText });
|
|
1623
|
+
messages.push({ role: 'user', content: `AINDA NÃO: ${semArquivo}` });
|
|
1624
|
+
finalText = '';
|
|
1625
|
+
continue;
|
|
1626
|
+
}
|
|
1627
|
+
const planoAberto = conferirPlano();
|
|
1628
|
+
if (planoAberto) {
|
|
1629
|
+
if (fluxo) fluxo.fechar();
|
|
1630
|
+
messages.push({ role: 'assistant', content: finalText });
|
|
1631
|
+
messages.push({ role: 'user', content: `AINDA NÃO: ${planoAberto}` });
|
|
1632
|
+
finalText = '';
|
|
1633
|
+
continue;
|
|
1634
|
+
}
|
|
1635
|
+
const troca = !subagent && !pediuIdioma && idioma.trocouDeIdioma(userPrompt, finalText);
|
|
1636
|
+
if (troca) {
|
|
1637
|
+
pediuIdioma = true;
|
|
1638
|
+
if (fluxo) fluxo.fechar();
|
|
1639
|
+
messages.push({ role: 'assistant', content: finalText });
|
|
1640
|
+
messages.push({ role: 'user', content: `AINDA NÃO. ${troca} Responda só com o texto.` });
|
|
1641
|
+
finalText = '';
|
|
1642
|
+
continue;
|
|
1643
|
+
}
|
|
1644
|
+
finalText = comAviso(finalText);
|
|
1645
|
+
}
|
|
1646
|
+
if (!subagent) {
|
|
1647
|
+
if (fluxo) fluxo.fechar();
|
|
1648
|
+
else fala.resposta(finalText);
|
|
1649
|
+
}
|
|
1650
|
+
/* Ia terminar, mas chegou recado no meio: a tarefa não acaba com
|
|
1651
|
+
a pessoa esperando resposta. A volta seguinte entrega o recado. */
|
|
1652
|
+
if (!subagent && CAIXA.length && !PARAR) {
|
|
1653
|
+
messages.push({ role: 'assistant', content: finalText });
|
|
1654
|
+
finalText = '';
|
|
1655
|
+
continue;
|
|
1656
|
+
}
|
|
1657
|
+
break;
|
|
1658
|
+
}
|
|
1659
|
+
respostasVazias = 0;
|
|
1660
|
+
|
|
1661
|
+
// O que o modelo disse ANTES de agir é pensamento, e sai como tal.
|
|
1662
|
+
if (!subagent) {
|
|
1663
|
+
if (fluxo) fluxo.fechar();
|
|
1664
|
+
else if (assistantText.trim()) fala.pensamento(assistantText, profundidade);
|
|
1665
|
+
}
|
|
1666
|
+
|
|
1667
|
+
// Registra o turno do assistente COM os tool_calls. A API exige que
|
|
1668
|
+
// cada mensagem role:'tool' venha logo depois deste turno.
|
|
1669
|
+
messages.push({
|
|
1670
|
+
role: 'assistant',
|
|
1671
|
+
content: assistantText || null,
|
|
1672
|
+
tool_calls: toolCalls.map((tc) => ({
|
|
1673
|
+
id: tc.id,
|
|
1674
|
+
type: 'function',
|
|
1675
|
+
function: { name: tc.name, arguments: JSON.stringify(tc.arguments || {}) },
|
|
1676
|
+
})),
|
|
1677
|
+
});
|
|
1678
|
+
|
|
1679
|
+
let finished = null;
|
|
1680
|
+
let algoRodou = false;
|
|
1681
|
+
const tTools = Date.now();
|
|
1682
|
+
const conferindoAntes = msConferindo;
|
|
1683
|
+
|
|
1684
|
+
// ORQUESTRAÇÃO: subagentes da MESMA rodada rodam juntos. O modelo que
|
|
1685
|
+
// pede "3 agentes, um por arquivo" esperava paralelismo e recebia uma
|
|
1686
|
+
// fila — cada subagente só começava quando o anterior terminava, e a
|
|
1687
|
+
// rodada custava a soma dos três. Agora as chamadas spawn_agent da
|
|
1688
|
+
// rodada disparam de uma vez (Promise.all) e cada resultado volta na
|
|
1689
|
+
// posição certa da conversa. Limite de 8 por rodada (era 4: o laço do
|
|
1690
|
+
// Qwen despacha várias direções de uma vez); o excedente roda em série.
|
|
1691
|
+
const spawns = toolCalls.filter((tc) => tc.name === 'spawn_agent');
|
|
1692
|
+
const resultadosSpawn = new Map();
|
|
1693
|
+
if (spawns.length && !PARAR) garantirPasta();
|
|
1694
|
+
/* O plano decide quantos subagentes rodam JUNTOS (lib/config/limites.js; grátis e
|
|
1695
|
+
Primo: um de cada vez, o resto continua em fila). Nunca recusa: só diz o porquê. */
|
|
1696
|
+
const par = spawns.length > 1 ? await limites.paralelo() : null;
|
|
1697
|
+
if (par) { const av = par.aviso(spawns.length); if (av && !avisouParalelo) { avisouParalelo = true; console.log(` ${av}`); } }
|
|
1698
|
+
if (spawns.length > 1 && par.max > 1 && !PARAR) {
|
|
1699
|
+
const juntos = spawns.slice(0, par.max);
|
|
1700
|
+
fala.paralelo(juntos.length, profundidade);
|
|
1701
|
+
const ids = juntos.map((tc) => anotar(tc, 'permitida'));
|
|
1702
|
+
const rs = await Promise.all(juntos.map((tc) =>
|
|
1703
|
+
runSubagent(tc.arguments || {}, {
|
|
1704
|
+
server, model, token, projectDir: pastaAtual, projectName, profundidade, motor, permissoes,
|
|
1705
|
+
}).catch((e) => `Subagente falhou: ${e && e.message}`)));
|
|
1706
|
+
juntos.forEach((tc, i) => { resultadosSpawn.set(tc.id, rs[i]); auditoria.depois(ids[i], { ok: true }); });
|
|
1707
|
+
}
|
|
1708
|
+
|
|
1709
|
+
/* LEITURAS JUNTAS. O RITMO pede ao modelo para juntar as ações
|
|
1710
|
+
independentes numa resposta só — e ele junta: três read_file, um
|
|
1711
|
+
grep e uma pesquisa. Só que o laço abaixo rodava uma de cada vez, e
|
|
1712
|
+
a rodada custava a soma. O que só LÊ (não muda arquivo, tela nem
|
|
1713
|
+
conta) roda tudo de uma vez aqui; o laço usa o resultado pronto,
|
|
1714
|
+
passando pelos mesmos freios de sempre (repetição, registro).
|
|
1715
|
+
Só entra no lote o que o laço NÃO vai recusar: a releitura, a
|
|
1716
|
+
mesma leitura duas vezes na resposta e a pesquisa depois de três
|
|
1717
|
+
secas ficam de fora. Senão rodavam aqui e o livro anotava
|
|
1718
|
+
"recusada" para o que já tinha rodado. */
|
|
1719
|
+
const adiantadas = new Map();
|
|
1720
|
+
const chavesDoLote = new Set();
|
|
1721
|
+
const leituras = toolCalls.filter(ehLeitura).filter((tc) => {
|
|
1722
|
+
if (tc.name === 'pesquisar_referencia' && pesquisasSecas >= 3) return false;
|
|
1723
|
+
if (chamadaTorta.ehTorta(tc.arguments)) return false;
|
|
1724
|
+
const { repetida, chave } = repeticao.espiar(jaChamado, tc.name, tc.arguments);
|
|
1725
|
+
if (repetida || chavesDoLote.has(chave)) return false;
|
|
1726
|
+
chavesDoLote.add(chave);
|
|
1727
|
+
return true;
|
|
1728
|
+
});
|
|
1729
|
+
const idsAdiantados = new Map();
|
|
1730
|
+
if (leituras.length > 1 && !PARAR) {
|
|
1731
|
+
leituras.slice(0, 8).forEach((tc) => idsAdiantados.set(tc.id, anotar(tc, 'permitida')));
|
|
1732
|
+
const rs = await Promise.all(leituras.slice(0, 8).map((tc) =>
|
|
1733
|
+
tools.execute(tc.name, tc.arguments, { projectDir: pastaAtual, server, token, api })
|
|
1734
|
+
.catch((e) => ({ ok: false, error: e && e.message }))));
|
|
1735
|
+
leituras.slice(0, 8).forEach((tc, i) => adiantadas.set(tc.id, rs[i]));
|
|
1736
|
+
traco(`${adiantadas.size} leituras em paralelo`);
|
|
1737
|
+
}
|
|
1738
|
+
|
|
1739
|
+
let motivoTravou = null;
|
|
1740
|
+
for (const tc of toolCalls) {
|
|
1741
|
+
/* O JSON da chamada veio quebrado (lib/chamada-torta.js): a
|
|
1742
|
+
ferramenta não roda, e o modelo recebe o erro com os argumentos
|
|
1743
|
+
crus para se corrigir — em vez de rodar com `{}` e repetir. */
|
|
1744
|
+
if (chamadaTorta.ehTorta(tc.arguments)) {
|
|
1745
|
+
anotar(tc, 'recusada', 'argumentos não são JSON válido');
|
|
1746
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: chamadaTorta.erroParaOModelo(tc.name, tc.arguments) });
|
|
1747
|
+
continue;
|
|
1748
|
+
}
|
|
1749
|
+
if (PARAR) break;
|
|
1750
|
+
prova.ver(tc);
|
|
1751
|
+
if (tc.name === 'finish') {
|
|
1752
|
+
// Os testes vêm ANTES do portão de prova: quando o PrimoCode sabe testar a pasta, ele mesmo
|
|
1753
|
+
// roda, e isso é a prova. Sem isso, o portão mandava o agente rodar o que o PrimoCode já ia rodar.
|
|
1754
|
+
const relatoDaChave = conferirChaves();
|
|
1755
|
+
if (relatoDaChave) {
|
|
1756
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: `AINDA NÃO: ${relatoDaChave} Depois chame finish de novo.` });
|
|
1757
|
+
continue;
|
|
1758
|
+
}
|
|
1759
|
+
const rodadasAntes = rodadasDeTeste;
|
|
1760
|
+
const relatoDosTestes = await conferirTestes();
|
|
1761
|
+
if (rodadasDeTeste > rodadasAntes) prova.rodouPorFora();
|
|
1762
|
+
if (relatoDosTestes) {
|
|
1763
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: `AINDA NÃO. ${relatoDosTestes}\n\nAche a causa, conserte só o que quebrou e chame finish de novo.` });
|
|
1764
|
+
continue;
|
|
1765
|
+
}
|
|
1766
|
+
const faltaProva = prova.barrar();
|
|
1767
|
+
if (faltaProva) {
|
|
1768
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: faltaProva });
|
|
1769
|
+
continue;
|
|
1770
|
+
}
|
|
1771
|
+
const relato = await conferirPagina();
|
|
1772
|
+
if (relato) {
|
|
1773
|
+
messages.push({
|
|
1774
|
+
role: 'tool',
|
|
1775
|
+
tool_call_id: tc.id,
|
|
1776
|
+
content: `AINDA NÃO. Abri a página para conferir e ela tem problema:\n${relato}\n\n`
|
|
1777
|
+
+ 'Conserte (leia o arquivo antes de editar) e chame finish de novo.',
|
|
1778
|
+
});
|
|
1779
|
+
continue;
|
|
1780
|
+
}
|
|
1781
|
+
const semArquivo = conferirEntregaveis();
|
|
1782
|
+
if (semArquivo) {
|
|
1783
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: `AINDA NÃO: ${semArquivo}` });
|
|
1784
|
+
continue;
|
|
1785
|
+
}
|
|
1786
|
+
const planoAberto = conferirPlano();
|
|
1787
|
+
if (planoAberto) {
|
|
1788
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: `AINDA NÃO: ${planoAberto}` });
|
|
1789
|
+
continue;
|
|
1790
|
+
}
|
|
1791
|
+
const afirmou = conferirAfirmacoes((tc.arguments && tc.arguments.summary) || '');
|
|
1792
|
+
if (afirmou) {
|
|
1793
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: `AINDA NÃO: ${afirmou}` });
|
|
1794
|
+
continue;
|
|
1795
|
+
}
|
|
1796
|
+
const troca = !subagent && !pediuIdioma && idioma.trocouDeIdioma(userPrompt, (tc.arguments && tc.arguments.summary) || '');
|
|
1797
|
+
if (troca) {
|
|
1798
|
+
pediuIdioma = true;
|
|
1799
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: `AINDA NÃO. ${troca} Chame finish de novo com esse resumo.` });
|
|
1800
|
+
continue;
|
|
1801
|
+
}
|
|
1802
|
+
}
|
|
1803
|
+
if (tc.name === 'finish') {
|
|
1804
|
+
// Encerrar com falha pendente é como o agente dizia "pronto!"
|
|
1805
|
+
// sem ter mudado nada. Devolvemos a tarefa para ele.
|
|
1806
|
+
if (falhasPendentes.length && tentativasDeEncerrar < 2) {
|
|
1807
|
+
tentativasDeEncerrar++;
|
|
1808
|
+
messages.push({
|
|
1809
|
+
role: 'tool',
|
|
1810
|
+
tool_call_id: tc.id,
|
|
1811
|
+
content: `NÃO terminou. Estas tools falharam e você não corrigiu: ${falhasPendentes.map((f) => f.texto).join('; ')}. `
|
|
1812
|
+
+ 'Conserte agora com edit_file no arquivo que falhou ou, se for impossível, diga claramente ao usuário o que falhou.',
|
|
1813
|
+
});
|
|
1814
|
+
continue;
|
|
1815
|
+
}
|
|
1816
|
+
algoRodou = true;
|
|
1817
|
+
finished = comAviso((tc.arguments && tc.arguments.summary) || 'Concluído.');
|
|
1818
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: 'ok' });
|
|
1819
|
+
continue;
|
|
1820
|
+
}
|
|
1821
|
+
|
|
1822
|
+
/* TROCAR DE PASTA mora aqui, e não no tools.execute: ela muda
|
|
1823
|
+
`pastaAtual`, que é deste laço, e precisa de quem PERGUNTA ao
|
|
1824
|
+
usuário (o bin). Sem a resposta dele, não troca. */
|
|
1825
|
+
if (tc.name === 'mudar_pasta') {
|
|
1826
|
+
algoRodou = true;
|
|
1827
|
+
fala.acao(tc.name, tc.arguments, profundidade);
|
|
1828
|
+
const idA = anotar(tc, 'permitida');
|
|
1829
|
+
const r = await require('../../outra-pasta.js').pedirTroca(tc.arguments || {}, {
|
|
1830
|
+
atual: pastaAtual, subagent, trocar: mudarPasta,
|
|
1831
|
+
});
|
|
1832
|
+
if (r.ok) {
|
|
1833
|
+
pastaAtual = r.caminho;
|
|
1834
|
+
criarPasta = null;
|
|
1835
|
+
temPasta = true;
|
|
1836
|
+
}
|
|
1837
|
+
logResult(tc.name, r, profundidade);
|
|
1838
|
+
auditoria.depois(idA, r);
|
|
1839
|
+
repeticao.executou(jaChamado, tc.name, tc.arguments);
|
|
1840
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: JSON.stringify(r) });
|
|
1841
|
+
continue;
|
|
1842
|
+
}
|
|
1843
|
+
|
|
1844
|
+
if (tc.name === 'spawn_agent') {
|
|
1845
|
+
algoRodou = true;
|
|
1846
|
+
const idA = resultadosSpawn.has(tc.id) ? null : anotar(tc, 'permitida');
|
|
1847
|
+
const r = resultadosSpawn.has(tc.id)
|
|
1848
|
+
? resultadosSpawn.get(tc.id)
|
|
1849
|
+
: await runSubagent(tc.arguments || {}, {
|
|
1850
|
+
server, model, token, projectDir: pastaAtual, projectName, profundidade, motor, permissoes,
|
|
1851
|
+
});
|
|
1852
|
+
if (idA) auditoria.depois(idA, { ok: true });
|
|
1853
|
+
repeticao.executou(jaChamado, tc.name, tc.arguments);
|
|
1854
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: r + lembreteDeParalelo(todosDaTarefa, spawns.length) });
|
|
1855
|
+
continue;
|
|
1856
|
+
}
|
|
1857
|
+
|
|
1858
|
+
/* O DIRETOR mora aqui pela mesma razão: ele É uma conversa
|
|
1859
|
+
nova, e quem sabe abrir conversa é este arquivo. */
|
|
1860
|
+
if (tc.name === 'planejar_producao') {
|
|
1861
|
+
algoRodou = true;
|
|
1862
|
+
fala.acao(tc.name, tc.arguments, profundidade);
|
|
1863
|
+
const idA = anotar(tc, 'permitida');
|
|
1864
|
+
const r = await rodarDiretor(tc.arguments || {}, {
|
|
1865
|
+
server, model, token, projectDir: pastaAtual, projectName, profundidade, motor, permissoes,
|
|
1866
|
+
});
|
|
1867
|
+
logResult(tc.name, r, profundidade);
|
|
1868
|
+
auditoria.depois(idA, r);
|
|
1869
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: JSON.stringify(r) });
|
|
1870
|
+
continue;
|
|
1871
|
+
}
|
|
1872
|
+
|
|
1873
|
+
/* O PIPELINE DE QUATRO PAPÉIS mora aqui pelo mesmo motivo que o
|
|
1874
|
+
`spawn_agent`: ele PRECISA rodar agentes, e quem sabe rodar
|
|
1875
|
+
agente é este arquivo. Pôr isto no `tools.execute` obrigaria
|
|
1876
|
+
aquele módulo a conhecer o loop do agente — e um segundo lugar
|
|
1877
|
+
que sabe abrir conversa com o modelo é um segundo lugar para
|
|
1878
|
+
esquecer de passar o token ou a pasta. */
|
|
1879
|
+
if (tc.name === 'construir_app') {
|
|
1880
|
+
algoRodou = true;
|
|
1881
|
+
garantirPasta();
|
|
1882
|
+
fala.acao(tc.name, tc.arguments, profundidade);
|
|
1883
|
+
const idA = anotar(tc, 'permitida');
|
|
1884
|
+
const r = await rodarPipeline(tc.arguments || {}, {
|
|
1885
|
+
server, model, token, projectDir: pastaAtual, projectName, profundidade, motor, permissoes, livro, autorizar, controle: portaoControle,
|
|
1886
|
+
});
|
|
1887
|
+
logResult(tc.name, r, profundidade);
|
|
1888
|
+
auditoria.depois(idA, r);
|
|
1889
|
+
repeticao.executou(jaChamado, tc.name, tc.arguments);
|
|
1890
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: JSON.stringify(r) });
|
|
1891
|
+
if (r && r.ok && catalogo.escreveArquivo(tc.name)) temPasta = true;
|
|
1892
|
+
continue;
|
|
1893
|
+
}
|
|
1894
|
+
|
|
1895
|
+
// Repetiu a mesma chamada? Não executa de novo. Rodar outra vez
|
|
1896
|
+
// gastaria a cota para devolver exatamente o mesmo texto, e é
|
|
1897
|
+
// esse texto que convence o modelo a repetir mais uma vez. Sem
|
|
1898
|
+
// linha na tela: o freio é nosso, não do usuário — o modelo recebe
|
|
1899
|
+
// o aviso e segue, e quem olha vê o trabalho continuar.
|
|
1900
|
+
const eco = repeticao.ver(jaChamado, tc.name, tc.arguments);
|
|
1901
|
+
if (eco.repetida) {
|
|
1902
|
+
voltasEmFalso++;
|
|
1903
|
+
anotar(tc, 'recusada', `repetida (${eco.vezes}ª vez) — não executou de novo`);
|
|
1904
|
+
/* RELER SEM MUDANÇA devolve o que já foi lido, uma vez.
|
|
1905
|
+
O aviso seco ("o resultado está na conversa acima") mentia
|
|
1906
|
+
depois do `compactar`: a leitura velha já tinha virado 300
|
|
1907
|
+
caracteres, e o modelo gastava OUTRA ida ao servidor para
|
|
1908
|
+
achar o arquivo por outro caminho (um `cat`, um grep). Na
|
|
1909
|
+
segunda vez vai o conteúdo guardado — ler de novo sem nada
|
|
1910
|
+
mudar dá o mesmo texto, então não há o que executar. Da
|
|
1911
|
+
terceira em diante é laço, e o freio segue como era. */
|
|
1912
|
+
const guardado = eco.vezes === 2 && leiturasGuardadas.get(eco.chave);
|
|
1913
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: guardado
|
|
1914
|
+
? `(sem mudança desde a última leitura — é o mesmo conteúdo; não precisa ler de novo)\n${guardado}`
|
|
1915
|
+
: eco.aviso });
|
|
1916
|
+
continue;
|
|
1917
|
+
}
|
|
1918
|
+
|
|
1919
|
+
/* Só conta o que passou do freio de repetição: a chamada idêntica
|
|
1920
|
+
já é barrada lá (e a rodada parada desiste sozinha). Aqui entra
|
|
1921
|
+
o que escapa dele — a fatia sobreposta, a volta sem nada novo. */
|
|
1922
|
+
/* VÍDEO SE FAZ NO ESTÚDIO (13/10). Pedida uma animação 3D, o modelo
|
|
1923
|
+
do servidor rodou `primocode video do` e `primocode video help`
|
|
1924
|
+
pelo shell cinco vezes até o freio parar — o editor por linha do
|
|
1925
|
+
tempo é para a GRAVAÇÃO da pessoa, e as ferramentas do Estúdio
|
|
1926
|
+
estavam ali. Fora de edição, a chamada volta com o caminho certo. */
|
|
1927
|
+
if (videoForaDeEdicao(tc.name, tc.arguments, ehEdicaoDaGravacao)) {
|
|
1928
|
+
anotar(tc, 'recusada', 'primocode video fora de edição de gravação');
|
|
1929
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: JSON.stringify({ ok: false,
|
|
1930
|
+
error: '`primocode video` é só para editar uma GRAVAÇÃO da pessoa. Para criar vídeo, animação ou motion: '
|
|
1931
|
+
+ 'estudio_projeto acao:"criar" → estudio_plano com o roteiro → estudio_render.' }) });
|
|
1932
|
+
continue;
|
|
1933
|
+
}
|
|
1934
|
+
|
|
1935
|
+
motivoTravou = motivoTravou || travado.observar(circulo, tc.name, tc.arguments, pastaAtual);
|
|
1936
|
+
|
|
1937
|
+
if (criarPasta && catalogo.criaProjeto(tc.name, tc.arguments)) garantirPasta();
|
|
1938
|
+
|
|
1939
|
+
/* RELER O QUE ACABOU DE ESCREVER. O modelo grátis escreve o
|
|
1940
|
+
index.html e, na volta seguinte, pede para lê-lo "para
|
|
1941
|
+
conferir" — uma ida ao servidor para receber o texto que ele
|
|
1942
|
+
mesmo mandou, e que continua inteiro na chamada write_file dele
|
|
1943
|
+
(o `compactar` só encolhe resultado de ferramenta, nunca o que
|
|
1944
|
+
o modelo escreveu). Se o arquivo está byte a byte como ele
|
|
1945
|
+
deixou, a resposta é essa, sem abrir nada. Depois de um
|
|
1946
|
+
edit_file não vale: aí o texto na conversa está em pedaços. */
|
|
1947
|
+
const relido = tc.name === 'read_file' && tc.arguments && tc.arguments.path
|
|
1948
|
+
? tc.arguments.path
|
|
1949
|
+
: tc.name === 'run_shell' ? leituraPeloShell(tc.arguments && tc.arguments.command) : null;
|
|
1950
|
+
if (relido && escritosNaTarefa.size) {
|
|
1951
|
+
let igual = false;
|
|
1952
|
+
try {
|
|
1953
|
+
const abs = require('path').isAbsolute(relido) ? relido : tools.resolveInProject(relido, pastaAtual);
|
|
1954
|
+
const e = escritosNaTarefa.get(abs);
|
|
1955
|
+
// Só enquanto a escrita ainda viaja inteira na conversa
|
|
1956
|
+
// (as duas últimas voltas — ver ESCRITAS_INTEIRAS).
|
|
1957
|
+
igual = !!e && voltas - e.volta <= 1 && require('fs').readFileSync(abs, 'utf8') === e.texto;
|
|
1958
|
+
} catch { igual = false; }
|
|
1959
|
+
if (igual) {
|
|
1960
|
+
fala.acao(tc.name, tc.arguments, profundidade);
|
|
1961
|
+
console.log(fala.resultado(profundidade) + c.muted('igual ao que ele escreveu — não precisou ler'));
|
|
1962
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: JSON.stringify({
|
|
1963
|
+
ok: true, igualAoQueVoceEscreveu: true,
|
|
1964
|
+
aviso: 'Este arquivo está EXATAMENTE como você o escreveu nesta tarefa — o conteúdo é o da sua '
|
|
1965
|
+
+ 'chamada write_file acima. Não precisa ler. Para mudar, use edit_file direto; se terminou, siga.',
|
|
1966
|
+
}) });
|
|
1967
|
+
continue;
|
|
1968
|
+
}
|
|
1969
|
+
}
|
|
1970
|
+
|
|
1971
|
+
if (tc.name === 'pesquisar_referencia' && pesquisasSecas >= 3) {
|
|
1972
|
+
voltasEmFalso++;
|
|
1973
|
+
anotar(tc, 'recusada', 'três pesquisas seguidas sem fonte');
|
|
1974
|
+
messages.push({
|
|
1975
|
+
role: 'tool',
|
|
1976
|
+
tool_call_id: tc.id,
|
|
1977
|
+
content: 'PARE DE PESQUISAR. Três buscas seguidas não trouxeram fonte nenhuma; '
|
|
1978
|
+
+ 'mais uma vai gastar a cota e devolver o mesmo nada. FAÇA AGORA a entrega '
|
|
1979
|
+
+ 'pedida com o que você já sabe. Se faltar um fato específico (número, data, '
|
|
1980
|
+
+ 'preço, nome de pessoa), NÃO invente: escreva a peça sem ele e avise o '
|
|
1981
|
+
+ 'usuário no final, em uma linha, o que não deu para confirmar.',
|
|
1982
|
+
});
|
|
1983
|
+
continue;
|
|
1984
|
+
}
|
|
1985
|
+
|
|
1986
|
+
/* O PORTÃO do controle do computador. Antes da ação, não depois:
|
|
1987
|
+
depois é o ponteiro já tendo andado. Ler a tela não passa por
|
|
1988
|
+
aqui — ver é o que ele precisa fazer para saber onde clicar. */
|
|
1989
|
+
if (permissao.precisa(tc.name)) {
|
|
1990
|
+
const porta = await permissao.pedir(portaoControle, tc.name, tc.arguments, autorizar);
|
|
1991
|
+
if (!porta.ok) {
|
|
1992
|
+
anotar(tc, 'recusada', porta.error);
|
|
1993
|
+
fala.acao(tc.name, tc.arguments, profundidade);
|
|
1994
|
+
console.log(fala.resultado(profundidade) + c.warn('não autorizado'));
|
|
1995
|
+
registro.anotar(livro, tc.name, tc.arguments, { ok: false, error: porta.error });
|
|
1996
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: JSON.stringify({ ok: false, error: porta.error }) });
|
|
1997
|
+
continue;
|
|
1998
|
+
}
|
|
1999
|
+
}
|
|
2000
|
+
|
|
2001
|
+
/* O PORTÃO do que não tem volta (lib/permission/perigo.js). No mesmo lugar do
|
|
2002
|
+
portão do desktop e pelo mesmo motivo: antes, não depois. A
|
|
2003
|
+
resposta mora no mesmo objeto da sessão — quem lembra é ela. */
|
|
2004
|
+
if (!portaoControle.perigo) portaoControle.perigo = perigo.novo();
|
|
2005
|
+
const risco = await perigo.portao(portaoControle.perigo, {
|
|
2006
|
+
modo: permissoes, nome: tc.name, args: tc.arguments,
|
|
2007
|
+
projectDir: pastaAtual, subagent, perguntar: autorizar,
|
|
2008
|
+
});
|
|
2009
|
+
if (!risco.ok) {
|
|
2010
|
+
anotar(tc, 'recusada', risco.motivo || risco.error);
|
|
2011
|
+
fala.acao(tc.name, tc.arguments, profundidade);
|
|
2012
|
+
console.log(fala.resultado(profundidade) + c.warn(`não autorizado — ${risco.motivo}`));
|
|
2013
|
+
registro.anotar(livro, tc.name, tc.arguments, { ok: false, error: risco.error });
|
|
2014
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: JSON.stringify({ ok: false, error: risco.error }) });
|
|
2015
|
+
continue;
|
|
2016
|
+
}
|
|
2017
|
+
|
|
2018
|
+
/* Hook PreToolUse (lib/hooks.js): exit 2 bloqueia a ferramenta. */
|
|
2019
|
+
const gancho = hooks.rodar('PreToolUse', { nome: tc.name, args: tc.arguments, projectDir: pastaAtual });
|
|
2020
|
+
if (gancho.bloqueado) {
|
|
2021
|
+
anotar(tc, 'recusada', gancho.motivo);
|
|
2022
|
+
fala.acao(tc.name, tc.arguments, profundidade);
|
|
2023
|
+
console.log(fala.resultado(profundidade) + c.warn(`bloqueado por hook — ${gancho.motivo.slice(0, 80)}`));
|
|
2024
|
+
registro.anotar(livro, tc.name, tc.arguments, { ok: false, error: gancho.motivo });
|
|
2025
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: JSON.stringify({ ok: false, error: `Bloqueado por hook: ${gancho.motivo}` }) });
|
|
2026
|
+
continue;
|
|
2027
|
+
}
|
|
2028
|
+
|
|
2029
|
+
/* Vai apagar dado do banco e a pessoa deixou (ou o modo livre deixa): copia o SQLite antes (lib/backup-banco.js).
|
|
2030
|
+
O /undo devolve. Fica depois do portão de propósito: recusado não gera cópia. */
|
|
2031
|
+
if (['run_shell', 'run_in_new_terminal', 'run_background'].includes(tc.name) && perigo.apagaBancoNoComando((tc.arguments || {}).command)) {
|
|
2032
|
+
try {
|
|
2033
|
+
const copia = require('../../backup-banco.js').fazer(pastaAtual);
|
|
2034
|
+
if (copia) console.log(c.ok(' ⎿ fiz uma cópia do banco antes') + c.dim(` (${copia.arquivos.join(', ')}) · /undo devolve`));
|
|
2035
|
+
} catch { /* sem cópia o comando segue: ela é rede de segurança, não condição */ }
|
|
2036
|
+
}
|
|
2037
|
+
|
|
2038
|
+
algoRodou = true;
|
|
2039
|
+
rodouTool = true;
|
|
2040
|
+
fala.acao(tc.name, tc.arguments, profundidade);
|
|
2041
|
+
/* Antes de mexer no arquivo, guarda o original — é o que o /desfazer
|
|
2042
|
+
devolve. Caminho inválido não é problema nosso: a tool recusa. */
|
|
2043
|
+
let antesDaEdicao = null, arquivoDaEdicao = null; // pro alarme do arquivo que encolheu (lib/session/encolheu.js)
|
|
2044
|
+
if (checkpoint.MUDAM_ARQUIVO.has(tc.name)) {
|
|
2045
|
+
mexeuNoCodigo = true; // o conferirTestes roda no fim da tarefa
|
|
2046
|
+
try {
|
|
2047
|
+
arquivoDaEdicao = tools.resolveInProject(tc.arguments && tc.arguments.path, pastaAtual);
|
|
2048
|
+
arquivosDaTarefa.add(arquivoDaEdicao);
|
|
2049
|
+
if (require('fs').statSync(arquivoDaEdicao).size < 2 * 1024 * 1024) antesDaEdicao = require('fs').readFileSync(arquivoDaEdicao, 'utf8');
|
|
2050
|
+
} catch { antesDaEdicao = null; } // arquivo novo, ou caminho que a tool vai recusar
|
|
2051
|
+
try { checkpoint.antesDeMudar(tools.resolveInProject(tc.arguments && tc.arguments.path, pastaAtual), pastaAtual); }
|
|
2052
|
+
catch (e) {
|
|
2053
|
+
// Caminho inválido a tool recusa sozinha. O resto (disco cheio, sem permissão)
|
|
2054
|
+
// quer dizer que o /desfazer não vai devolver este arquivo: a pessoa tem que saber.
|
|
2055
|
+
if (tc.arguments && tc.arguments.path) console.log(c.warn(` ⚠ não guardei o original de ${tc.arguments.path}: o /undo não vai voltar este arquivo (${e.message})`));
|
|
2056
|
+
}
|
|
2057
|
+
}
|
|
2058
|
+
/* O servidor, o token e o cliente da API vão junto: a legenda do
|
|
2059
|
+
estudio_video transcreve no servidor, e sem eles a ferramenta
|
|
2060
|
+
respondia "a transcrição precisa do servidor". */
|
|
2061
|
+
traco(`executando ${tc.name}`);
|
|
2062
|
+
const idAcao = idsAdiantados.get(tc.id) || anotar(tc, 'permitida');
|
|
2063
|
+
const result = adiantadas.has(tc.id) ? adiantadas.get(tc.id)
|
|
2064
|
+
: await tools.execute(tc.name, tc.arguments, { projectDir: pastaAtual, server, token, api, escolher: subagent ? undefined : escolher });
|
|
2065
|
+
auditoria.depois(idAcao, result);
|
|
2066
|
+
if (sinais && result && result.ok && /^(write_file|edit_file|multi_edit)$/.test(tc.name)) sinais.diagSujo = !!result.diagnosticos; // diagnóstico depois da edição
|
|
2067
|
+
if (antesDaEdicao != null && result && result.ok !== false) {
|
|
2068
|
+
let depois = null;
|
|
2069
|
+
try { depois = require('fs').readFileSync(arquivoDaEdicao, 'utf8'); } catch { depois = null; }
|
|
2070
|
+
const encolheu = require('../encolheu.js').julgar(antesDaEdicao, depois);
|
|
2071
|
+
if (encolheu) {
|
|
2072
|
+
console.log(c.warn(` ⚠ ${tc.arguments.path}: ${encolheu.texto}. Se sumiu código sem querer, /undo volta.`));
|
|
2073
|
+
result.aviso_encolheu = `ATENÇÃO: ${tc.arguments.path} ${encolheu.texto}. Confira se você não apagou código sem querer; se apagou, refaça a edição sem cortar nada.`;
|
|
2074
|
+
}
|
|
2075
|
+
}
|
|
2076
|
+
for (const aviso of hooks.rodar('PostToolUse', { nome: tc.name, args: tc.arguments, resultado: result, projectDir: pastaAtual }).avisos) console.log(c.dim(` ⎿ ${aviso}`));
|
|
2077
|
+
traco(`${tc.name} devolveu ok=${result && result.ok}`);
|
|
2078
|
+
if (/^estudio_|^planejar_producao$/.test(tc.name) && result && result.ok !== false) {
|
|
2079
|
+
const id = result.id || (result.projeto && result.projeto.id) || (tc.arguments && tc.arguments.id);
|
|
2080
|
+
if (typeof id === 'string' && id) estudioDaTarefa = id;
|
|
2081
|
+
}
|
|
2082
|
+
logResult(tc.name, result, profundidade);
|
|
2083
|
+
if (/^estudio_render/.test(tc.name) && result && result.conferencia && !subagent) {
|
|
2084
|
+
for (const l of require('../../plugin/estudio/conferencia.js').linhasPraPessoa(result.conferencia)) console.log(c.warn(` ⎿ ${l}`));
|
|
2085
|
+
}
|
|
2086
|
+
repeticao.executou(jaChamado, tc.name, tc.arguments);
|
|
2087
|
+
if (RELEITURA.has(tc.name) && result && result.ok !== false) {
|
|
2088
|
+
leiturasGuardadas.set(eco.chave, summarizeForModel(result));
|
|
2089
|
+
}
|
|
2090
|
+
if (tc.name === 'write_todos' && result && Array.isArray(result.todos)) todosDaTarefa = result.todos;
|
|
2091
|
+
if (/^(write_file|edit_file|multi_edit)$/.test(tc.name) && tc.arguments && tc.arguments.path) {
|
|
2092
|
+
try {
|
|
2093
|
+
const abs = tools.resolveInProject(tc.arguments.path, pastaAtual);
|
|
2094
|
+
if (tc.name === 'write_file' && result && result.ok !== false && typeof tc.arguments.content === 'string') {
|
|
2095
|
+
escritosNaTarefa.set(abs, { texto: tc.arguments.content, volta: voltas });
|
|
2096
|
+
} else escritosNaTarefa.delete(abs);
|
|
2097
|
+
} catch { /* caminho inválido: a tool já recusou */ }
|
|
2098
|
+
}
|
|
2099
|
+
// Além de narrar, ANOTA: no fim do pedido sai o balanço do que
|
|
2100
|
+
// nasceu, mudou, rodou e falhou. Narrar sozinho não basta — numa
|
|
2101
|
+
// tarefa de trinta ações, a primeira já saiu da tela.
|
|
2102
|
+
registro.anotar(livro, tc.name, tc.arguments, result);
|
|
2103
|
+
if (result && result.ok !== false && catalogo.criaProjeto(tc.name, tc.arguments)
|
|
2104
|
+
&& /\.(html?|css|m?jsx?|tsx?|vue|svelte)$/i.test(String((tc.arguments && tc.arguments.path) || ''))) {
|
|
2105
|
+
mexeuNaPagina = true;
|
|
2106
|
+
/* O NAVEGADOR ESCONDIDO SOBE AGORA, e não no `finish`.
|
|
2107
|
+
A conferência só roda quando o agente diz "pronto", e até
|
|
2108
|
+
lá ainda há pelo menos uma rodada do modelo. Subir o Chrome
|
|
2109
|
+
ali, em paralelo com ela, tira do "pronto" o tempo de ligar
|
|
2110
|
+
o navegador e de fazer a PRIMEIRA navegação dele, que é a
|
|
2111
|
+
parte cara (ver `aquecerRevisor` em lib/browser.js). Medido
|
|
2112
|
+
em 24/09: a conferência num Chrome recém-aberto levava de
|
|
2113
|
+
2,1 a 4,6s; aquecido antes, 1,24s — que é o assentar de
|
|
2114
|
+
1,2s, e nada mais. Sem `await` e sem erro: se não subir, a
|
|
2115
|
+
conferência tenta de novo e diz o que houve. */
|
|
2116
|
+
if (aquecerPagina && !subagent && conferencias < 2) {
|
|
2117
|
+
try { Promise.resolve(aquecerPagina()).catch(() => {}); } catch { /* segue */ }
|
|
2118
|
+
}
|
|
2119
|
+
}
|
|
2120
|
+
|
|
2121
|
+
// Uma escrita bem-sucedida limpa a dívida — mas só a do MESMO
|
|
2122
|
+
// arquivo. Escrever algo sem relação (ou um run_shell qualquer)
|
|
2123
|
+
// não corrige um teste quebrado noutro lugar; antes isto zerava
|
|
2124
|
+
// a lista inteira e o agente conseguia dizer "concluído" com uma
|
|
2125
|
+
// falha real ainda pendente.
|
|
2126
|
+
if (tc.name === 'pesquisar_referencia') {
|
|
2127
|
+
if (result && result.ok === false) pesquisasSecas++;
|
|
2128
|
+
else pesquisasSecas = 0; // achou fonte: o ciclo se rompeu
|
|
2129
|
+
}
|
|
2130
|
+
|
|
2131
|
+
if (result && result.ok === false) {
|
|
2132
|
+
const cmd = tc.name === 'run_shell' ? String(tc.arguments?.command || '') : '';
|
|
2133
|
+
falhasPendentes.push({
|
|
2134
|
+
tool: tc.name,
|
|
2135
|
+
alvo: tc.arguments?.path || '',
|
|
2136
|
+
comando: cmd,
|
|
2137
|
+
texto: cmd ? `run_shell(\`${cmd.slice(0, 120)}\`): saiu com código ${result.code ?? '?'}${result.error ? ` (${String(result.error).slice(0, 160)})` : ''}`
|
|
2138
|
+
: `${tc.name}(${tc.arguments?.path || ''}): ${result.error}`,
|
|
2139
|
+
});
|
|
2140
|
+
} else {
|
|
2141
|
+
// Deu certo: some com o que ESTA tool tinha deixado pendente.
|
|
2142
|
+
//
|
|
2143
|
+
// Antes só write_file/edit_file limpavam, e por caminho. Uma
|
|
2144
|
+
// falha já superada continuava bloqueando o finish para sempre:
|
|
2145
|
+
// medido num pedido real, o browser_read errou o seletor
|
|
2146
|
+
// ("main"), acertou na tentativa seguinte lendo 5.240 chars — e
|
|
2147
|
+
// mesmo assim a tarefa morreu com "Parei sem concluir. A última
|
|
2148
|
+
// falha foi: browser_read()". Acertar depois de errar é
|
|
2149
|
+
// exatamente o que esta guarda quer premiar, não punir.
|
|
2150
|
+
const alvo = tc.arguments?.path;
|
|
2151
|
+
const sobrou = falhasPendentes.filter((f) => {
|
|
2152
|
+
// comando de shell: só o MESMO comando (ou outro jeito de rodar os testes) passando limpa.
|
|
2153
|
+
// Antes um `ls` qualquer depois de um `npm test` vermelho apagava a dívida e o "pronto" passava.
|
|
2154
|
+
if (f.tool === 'run_shell' && tc.name === 'run_shell') return !mesmoComando(f.comando, tc.arguments?.command);
|
|
2155
|
+
if (f.tool === tc.name) return false; // a mesma tool funcionou
|
|
2156
|
+
if (alvo && f.alvo === alvo) return false; // o mesmo arquivo foi resolvido
|
|
2157
|
+
return true;
|
|
2158
|
+
});
|
|
2159
|
+
falhasPendentes.length = 0;
|
|
2160
|
+
falhasPendentes.push(...sobrou);
|
|
2161
|
+
}
|
|
2162
|
+
|
|
2163
|
+
messages.push({ role: 'tool', tool_call_id: tc.id, content: summarizeForModel(result) });
|
|
2164
|
+
}
|
|
2165
|
+
|
|
2166
|
+
// A conferência da página tem linha própria: aqui fica só o resto.
|
|
2167
|
+
tempos.somar('ferramentas', Date.now() - tTools - (msConferindo - conferindoAntes));
|
|
2168
|
+
|
|
2169
|
+
/* ANDANDO EM CÍRCULO (lib/travado.js): a primeira vez, um empurrão
|
|
2170
|
+
com o que ele está repetindo; a segunda, para — antes da cota. */
|
|
2171
|
+
const giro = travado.fimDaVolta(circulo);
|
|
2172
|
+
const travou = finished ? null : travado.decidir(circulo, motivoTravou || giro);
|
|
2173
|
+
if (travou && travou.acao === 'empurrar') {
|
|
2174
|
+
traco(`travado: ${motivoTravou || giro}`);
|
|
2175
|
+
messages.push({ role: 'user', content: travou.texto });
|
|
2176
|
+
} else if (travou) {
|
|
2177
|
+
paradoPorTravar = travou.texto;
|
|
2178
|
+
break;
|
|
2179
|
+
}
|
|
2180
|
+
|
|
2181
|
+
// Uma volta inteira sem executar nada é o modelo preso. Insistir custa
|
|
2182
|
+
// um pedido ao servidor por volta, e as 15 voltas saíam caras para
|
|
2183
|
+
// terminar no mesmo lugar — melhor parar e devolver a vez ao usuário.
|
|
2184
|
+
if (!algoRodou && toolCalls.length) {
|
|
2185
|
+
rodadasParadas++;
|
|
2186
|
+
/* Antes de desistir, UMA troca de rota, sem aparecer na tela. Parar
|
|
2187
|
+
aqui devolvia ao usuário o trabalho de dividir a tarefa — que é
|
|
2188
|
+
justamente o que ele não sabe fazer e o sistema sabe: o que já
|
|
2189
|
+
foi feito está na conversa, e o que falta é outro caminho. */
|
|
2190
|
+
if (rodadasParadas >= MAX_RODADAS_PARADAS && !trocouDeRota) {
|
|
2191
|
+
trocouDeRota = true;
|
|
2192
|
+
rodadasParadas = 0;
|
|
2193
|
+
messages.push({ role: 'user', content: TROCA_DE_ROTA });
|
|
2194
|
+
continue;
|
|
2195
|
+
}
|
|
2196
|
+
// Quem fala é o motivoDaParada, uma vez só — aqui havia uma
|
|
2197
|
+
// segunda frase de "travei", e as duas saíam em sequência.
|
|
2198
|
+
if (rodadasParadas >= MAX_RODADAS_PARADAS) break;
|
|
2199
|
+
} else {
|
|
2200
|
+
rodadasParadas = 0;
|
|
2201
|
+
}
|
|
2202
|
+
|
|
2203
|
+
if (finished) {
|
|
2204
|
+
finalText = finished;
|
|
2205
|
+
if (!subagent) fala.resposta(finished);
|
|
2206
|
+
// Recado chegou enquanto ele fechava: entrega e segue.
|
|
2207
|
+
if (!subagent && CAIXA.length && !PARAR) { finalText = ''; continue; }
|
|
2208
|
+
break;
|
|
2209
|
+
}
|
|
2210
|
+
}
|
|
2211
|
+
} finally {
|
|
2212
|
+
if (!subagent) TRABALHANDO = false;
|
|
2213
|
+
}
|
|
2214
|
+
|
|
2215
|
+
// O que o modelo entregou por vontade própria, ANTES dos textos de
|
|
2216
|
+
// desistência. É esta a diferença que o plano de passos precisa: um passo
|
|
2217
|
+
// que "parou sem concluir" não pode virar fato para o passo seguinte.
|
|
2218
|
+
const concluiu = Boolean(finalText) && !PARAR;
|
|
2219
|
+
|
|
2220
|
+
let passagemDaParada = null;
|
|
2221
|
+
if (paradoPorTravar && !finalText) {
|
|
2222
|
+
finalText = paradoPorTravar;
|
|
2223
|
+
if (!subagent) fala.aviso(finalText);
|
|
2224
|
+
// Parou sem terminar: a memória leva o estado, não só "parei" (lib/passagem.js).
|
|
2225
|
+
passagemDaParada = require('../../passagem').montar({ pedido: userPrompt, motivo: finalText, registro: livro, falhasPendentes });
|
|
2226
|
+
}
|
|
2227
|
+
|
|
2228
|
+
if (PARAR && !finalText) {
|
|
2229
|
+
finalText = 'Parado por você (Esc Esc). O que já foi feito, ficou feito.';
|
|
2230
|
+
if (!subagent) fala.aviso(finalText);
|
|
2231
|
+
}
|
|
2232
|
+
|
|
2233
|
+
// Nunca terminar em silêncio. Quando o modelo devolvia resposta vazia sem
|
|
2234
|
+
// chamar tool, o usuário via a tela parar e mais nada — pior que erro, porque
|
|
2235
|
+
// não dá nem para saber que acabou. Medido: um pedido de navegador morria assim
|
|
2236
|
+
// depois de a primeira tentativa de seletor falhar.
|
|
2237
|
+
if (!finalText) {
|
|
2238
|
+
finalText = motivoDaParada({ voltas, voltasEmFalso, falhasPendentes, travou: rodadasParadas >= MAX_RODADAS_PARADAS, teto });
|
|
2239
|
+
if (!subagent) fala.aviso(finalText);
|
|
2240
|
+
passagemDaParada = require('../../passagem').montar({ pedido: userPrompt, motivo: finalText, registro: livro, falhasPendentes });
|
|
2241
|
+
}
|
|
2242
|
+
|
|
2243
|
+
// Nada de arquivo mexido = nada para lembrar. E grava em `pastaAtual`, não em
|
|
2244
|
+
// `projectDir`: quando a pasta do projeto nasceu no meio do caminho, a memória
|
|
2245
|
+
// precisa ir para ela, não para a raiz onde a sessão começou.
|
|
2246
|
+
//
|
|
2247
|
+
// `projectName` NÃO entra na condição: ele só rotula a memória no prompt
|
|
2248
|
+
// (buildMemoryContext), e sessão sem projeto nomeado (ex.: primeiro pedido
|
|
2249
|
+
// antes de /project) tem `projectName` undefined mesmo já tendo mexido em
|
|
2250
|
+
// arquivo de verdade — a memória era descartada nesse caso, sempre.
|
|
2251
|
+
// A raiz de trabalho não é projeto: um memory.md solto em ~/primocode
|
|
2252
|
+
// era o que um pedido de vídeo (que trabalha na raiz) deixava para trás.
|
|
2253
|
+
if (!subagent && temPasta && require('path').resolve(pastaAtual) !== require('path').resolve(cfg.ROOT_DIR)) {
|
|
2254
|
+
cfg.appendProjectMemory(pastaAtual, passagemDaParada || `**Pedido:** ${userPrompt.slice(0, 300)}\n**Resultado:** ${finalText.slice(0, 500)}`);
|
|
2255
|
+
}
|
|
2256
|
+
|
|
2257
|
+
// A memória GERAL é gravada sempre, tenha havido pasta ou não.
|
|
2258
|
+
//
|
|
2259
|
+
// Antes ela só era escrita se o agente chamasse `remember_general` — e ele
|
|
2260
|
+
// quase nunca chamava. Pior: a memória de projeto acima depende de
|
|
2261
|
+
// `temPasta`, e tarefa de estúdio (vídeo, slides) não cria pasta nenhuma.
|
|
2262
|
+
// Resultado prático: quem só fazia vídeo NUNCA teve memória gravada, de
|
|
2263
|
+
// tipo nenhum. O usuário notou: "nunca atualiza os arquivos de memória, e
|
|
2264
|
+
// ela deve atualizar independente do projeto".
|
|
2265
|
+
//
|
|
2266
|
+
// Fica curto de propósito — isto entra em todo pedido seguinte. Uma linha
|
|
2267
|
+
// por tarefa concluída, e podada por config.js quando passa do limite.
|
|
2268
|
+
if (!subagent && concluiu && finalText.trim()) {
|
|
2269
|
+
const pedido = userPrompt.replace(/\s+/g, ' ').trim().slice(0, 160);
|
|
2270
|
+
const feito = finalText.replace(/\s+/g, ' ').trim().slice(0, 240);
|
|
2271
|
+
cfg.appendGeneralMemory(`- **${pedido}** → ${feito}`);
|
|
2272
|
+
}
|
|
2273
|
+
|
|
2274
|
+
return {
|
|
2275
|
+
userMessage: { role: 'user', content: userPrompt },
|
|
2276
|
+
assistantMessage: { role: 'assistant', content: finalText },
|
|
2277
|
+
registro: livro,
|
|
2278
|
+
// Esc Esc no meio de um plano de vários passos precisa parar o plano
|
|
2279
|
+
// INTEIRO, não só o passo — senão o próximo passo começa logo depois
|
|
2280
|
+
// de o usuário ter mandado parar.
|
|
2281
|
+
parado: PARAR,
|
|
2282
|
+
concluiu,
|
|
2283
|
+
// Onde terminou: o mudar_pasta pode ter trocado no meio.
|
|
2284
|
+
pasta: pastaAtual,
|
|
2285
|
+
// O projeto do Estúdio em que se mexeu, para a memória ir para a pasta dele.
|
|
2286
|
+
estudio: estudioDaTarefa,
|
|
2287
|
+
};
|
|
2288
|
+
}
|
|
2289
|
+
|
|
2290
|
+
async function runSubagent(args, ctx) {
|
|
2291
|
+
const { server, model, token, projectDir, projectName, profundidade, motor, permissoes } = ctx;
|
|
2292
|
+
const descricao = args.description || 'sub-tarefa';
|
|
2293
|
+
|
|
2294
|
+
if (profundidade + 1 >= MAX_PROFUNDIDADE) {
|
|
2295
|
+
return 'Recusado: subagente não pode criar outro subagente. Faça você mesmo.';
|
|
2296
|
+
}
|
|
2297
|
+
if (!args.prompt) return 'Recusado: prompt do subagente vazio.';
|
|
2298
|
+
|
|
2299
|
+
// O ofício: o modelo diz quem faz (`especialista`), ou a tarefa sugere. O
|
|
2300
|
+
// briefing vai na frente da tarefa, na mesma mensagem — ver especialistas.js.
|
|
2301
|
+
// Novo catálogo (agentes/): "id" ou "id1,id2" (até 3 olhares na mesma tarefa); o que não existe cai no legado.
|
|
2302
|
+
const novos = require('../../agentes').refinar(args.especialista, args.prompt); // o catálogo confere o chute do modelo
|
|
2303
|
+
const esp = novos.length ? null : especialistas.escolher(args.especialista, args.prompt);
|
|
2304
|
+
const agentes = require('../../agentes');
|
|
2305
|
+
const rot = novos.length ? agentes.rotulo(novos) : especialistas.rotulo(esp);
|
|
2306
|
+
fala.agente(rot, descricao, profundidade);
|
|
2307
|
+
|
|
2308
|
+
// modelo_sugerido do briefing vale quando o placar ainda não tem dado desse tipo de tarefa.
|
|
2309
|
+
let modeloDoAgente = model;
|
|
2310
|
+
if (novos.length) {
|
|
2311
|
+
let temDado = false;
|
|
2312
|
+
try {
|
|
2313
|
+
const P = require('../../placar.js');
|
|
2314
|
+
temDado = Object.values(P.ler().tipos[P.classificar(args.prompt)] || {}).some((c) => (c.ganhos || 0) + (c.perdas || 0) >= P.MIN_AMOSTRAS);
|
|
2315
|
+
} catch { /* sem placar: sem dado */ }
|
|
2316
|
+
modeloDoAgente = agentes.modeloPara(novos, model, { placarTemDados: temDado });
|
|
2317
|
+
}
|
|
2318
|
+
const r = await runAct(novos.length ? agentes.montarTarefa(novos, args.prompt) : especialistas.montarTarefa(esp, args.prompt), {
|
|
2319
|
+
server, model: modeloDoAgente, token, projectDir, projectName,
|
|
2320
|
+
history: [],
|
|
2321
|
+
profundidade: profundidade + 1,
|
|
2322
|
+
subagent: true,
|
|
2323
|
+
motor,
|
|
2324
|
+
permissoes,
|
|
2325
|
+
autorizar: ctx.autorizar,
|
|
2326
|
+
controle: ctx.controle, // o mesmo objeto: a resposta vale para todos
|
|
2327
|
+
rotulo: `subagente: ${String(descricao).slice(0, 60)}`,
|
|
2328
|
+
});
|
|
2329
|
+
|
|
2330
|
+
/* O que o subagente fez entra no livro de quem o chamou. Sem isto, o
|
|
2331
|
+
balanço no fim mentiria por omissão: o especialista escreveu cinco
|
|
2332
|
+
arquivos e a tela diria "nenhum arquivo". A conversa dele continua
|
|
2333
|
+
separada — o que se junta é o registro do que aconteceu no disco. */
|
|
2334
|
+
if (ctx.livro && r.registro) registro.juntar(ctx.livro, r.registro);
|
|
2335
|
+
|
|
2336
|
+
const resumo = r.assistantMessage.content || 'sem resultado';
|
|
2337
|
+
fala.agenteVoltou(resumo, profundidade);
|
|
2338
|
+
return entregaDoAgente(rot, resumo, r.registro, { pasta: projectDir });
|
|
2339
|
+
}
|
|
2340
|
+
|
|
2341
|
+
/* UM AGENTE DE CADA VEZ é o padrão do modelo grátis: no teste da loja
|
|
2342
|
+
(API + site + painel, 01/10) ele despachou os três em fila — 6 + 8 + 5
|
|
2343
|
+
minutos — quando o site e o painel só dependiam do contrato, que já
|
|
2344
|
+
existia. Quem decide continua sendo ele; a volta só lembra que as partes
|
|
2345
|
+
que faltam podem ir JUNTAS. Pura. */
|
|
2346
|
+
function lembreteDeParalelo(todos, naRodada) {
|
|
2347
|
+
const faltam = (todos || []).filter((t) => t && t.status !== 'completed' && t.status !== 'concluida');
|
|
2348
|
+
if (naRodada > 1 || faltam.length < 2) return '';
|
|
2349
|
+
return `\n\n(Faltam ${faltam.length} partes do plano. As que não dependem uma da outra vão JUNTAS: `
|
|
2350
|
+
+ 'vários spawn_agent na MESMA resposta rodam em paralelo.)';
|
|
2351
|
+
}
|
|
2352
|
+
|
|
2353
|
+
/* O SALTO ENTRE AGENTES. O pai recebia só o texto final do especialista —
|
|
2354
|
+
"pronto, fiz a API" — e, para passar a vez ao próximo (o do front, o
|
|
2355
|
+
revisor), tinha de adivinhar o que existia. Agora a volta é uma ENTREGA:
|
|
2356
|
+
quem fez, o que disse, os arquivos que nasceram e mudaram, os comandos, o
|
|
2357
|
+
que falhou. É o contexto que o próximo especialista precisa no prompt
|
|
2358
|
+
dele, e é o que deixa o pai mandar a falha de volta para conserto (o laço
|
|
2359
|
+
do Qwen: planeja → despacha → confere → conserta). Pura, para o teste. */
|
|
2360
|
+
function entregaDoAgente(quem, texto, reg, { pasta } = {}) {
|
|
2361
|
+
const linhas = [`ENTREGA DO ${String(quem).toUpperCase()}`, require('../../entrega').limitar(texto, { quem }).texto];
|
|
2362
|
+
/* mexeu em código e não rodou teste nenhum: o subagente não roda o teste automático (só o agente de cima),
|
|
2363
|
+
então quem chamou recebia "alterou x.js" sem prova. Diz com todas as letras e dá o comando do projeto. */
|
|
2364
|
+
const codigo = (xs) => (xs || []).some((f) => /\.(m?[jt]sx?|cjs|py|go|rs|rb|php|java|kt|swift|vue|svelte|c|cc|cpp|h)$/i.test(String(f)));
|
|
2365
|
+
if (reg && (codigo(reg.criados) || codigo(reg.alterados)) && !(reg.testes || []).length) {
|
|
2366
|
+
let como = null;
|
|
2367
|
+
try { como = pasta ? require('../../conferir.js').descobrir(pasta) : null; } catch { /* sem pasta */ }
|
|
2368
|
+
linhas.push(`NÃO TESTOU: mexeu em código e não rodou teste.${como ? ` Rode \`${como.comando}\` antes de dar por pronto.` : ' Confira rodando o que prova que funciona.'}`);
|
|
2369
|
+
}
|
|
2370
|
+
if (reg) {
|
|
2371
|
+
const lista = (nome, xs) => { if (xs && xs.length) linhas.push(`${nome}: ${xs.slice(0, 15).join(', ')}`); };
|
|
2372
|
+
lista('criou', reg.criados);
|
|
2373
|
+
lista('alterou', reg.alterados);
|
|
2374
|
+
lista('rodou', (reg.comandos || []).map((x) => `${x.comando}${x.ok === false ? ` (saiu ${x.code})` : ''}`));
|
|
2375
|
+
lista('testes', (reg.testes || []).map((x) => `${x.comando}: ${x.ok ? 'passou' : 'FALHOU'}`));
|
|
2376
|
+
if (reg.falhas && reg.falhas.length) linhas.push('FALHOU: ' + reg.falhas.slice(0, 6).map((f) => `${f.acao} ${f.alvo}: ${f.motivo}`.slice(0, 200)).join(' | '));
|
|
2377
|
+
}
|
|
2378
|
+
linhas.push(reg && ((reg.falhas && reg.falhas.length) || (reg.testes || []).some((x) => !x.ok))
|
|
2379
|
+
? 'PRÓXIMO: há falha acima — mande de volta para conserto (spawn_agent com o erro no prompt) ou conserte você, antes de seguir.'
|
|
2380
|
+
: 'PRÓXIMO: se outra parte depende desta, passe a vez (spawn_agent) com esta entrega no prompt; senão, confira e siga.');
|
|
2381
|
+
return linhas.join('\n');
|
|
2382
|
+
}
|
|
2383
|
+
|
|
2384
|
+
/* ══ O PIPELINE DE QUATRO PAPÉIS ═══════════════════════════════════════════
|
|
2385
|
+
*
|
|
2386
|
+
* "Engenheiro de Prompt → Construtor 1 (protótipo) → Construtor 2 (MVP) →
|
|
2387
|
+
* Revisador (testa ocultamente) → loop de correção → abre no navegador."
|
|
2388
|
+
*
|
|
2389
|
+
* As regras dos papéis, os prompts e o revisor que abre a página moram em
|
|
2390
|
+
* `pipeline.js`, que não conhece o loop do agente. O que esta função faz é a
|
|
2391
|
+
* costura: dar a ele uma forma de RODAR um agente, uma de escrever na tela e
|
|
2392
|
+
* uma de abrir o navegador da pessoa.
|
|
2393
|
+
*
|
|
2394
|
+
* Cada papel roda com `history: []` — conversa própria, sem ver a do usuário
|
|
2395
|
+
* nem a do papel anterior. É essa separação que faz o revisor valer alguma
|
|
2396
|
+
* coisa: quem acabou de escrever o código é o pior revisor dele, porque lê o
|
|
2397
|
+
* que quis escrever em vez do que escreveu.
|
|
2398
|
+
*/
|
|
2399
|
+
/**
|
|
2400
|
+
* O DIRETOR: estrutura antes de alguém produzir.
|
|
2401
|
+
*
|
|
2402
|
+
* Por que uma conversa PRÓPRIA, e não mais um parágrafo no prompt de quem
|
|
2403
|
+
* produz: o modelo que está montando as cenas já gastou a atenção dele em
|
|
2404
|
+
* JSON — fonte, cor, duração, posição — e é ali que o roteiro morre. Vira
|
|
2405
|
+
* legenda do que aparece na tela ("Vantagens", "Nossos serviços"), sem arco,
|
|
2406
|
+
* sem narração escrita, sem decisão de voz. O diretor não vê JSON de cena
|
|
2407
|
+
* nenhum: ele decide o que se conta, em que ordem, em quantos segundos, com
|
|
2408
|
+
* que voz e com que direção de arte. Depois disso o produtor tem pouco a
|
|
2409
|
+
* inventar — e inventar é onde ele erra.
|
|
2410
|
+
*/
|
|
2411
|
+
async function rodarDiretor(args, ctx) {
|
|
2412
|
+
const { server, model, token, projectDir, projectName, profundidade, motor, permissoes } = ctx;
|
|
2413
|
+
if (profundidade > 0) {
|
|
2414
|
+
return { ok: false, error: 'Recusado: o diretor não roda dentro de um subagente. '
|
|
2415
|
+
+ 'Produza com o plano que você já recebeu.' };
|
|
2416
|
+
}
|
|
2417
|
+
const diretor = require('../../plugin/estudio/diretor.js');
|
|
2418
|
+
const correr = async (prompt, rotulo) => {
|
|
2419
|
+
if (PARAR) return '';
|
|
2420
|
+
fala.agente('Diretor', rotulo, profundidade);
|
|
2421
|
+
const r = await runAct(prompt, {
|
|
2422
|
+
server, model, token, projectDir, projectName,
|
|
2423
|
+
history: [], profundidade: profundidade + 1, subagent: true, motor, permissoes,
|
|
2424
|
+
});
|
|
2425
|
+
return (r && r.assistantMessage && r.assistantMessage.content) || '';
|
|
2426
|
+
};
|
|
2427
|
+
|
|
2428
|
+
const r = await diretor.planejar({
|
|
2429
|
+
pedido: args.pedido || args.prompt || '',
|
|
2430
|
+
segundos: Number(args.segundos) || 30,
|
|
2431
|
+
formato: args.formato === 'apresentacao' ? 'apresentacao' : 'video',
|
|
2432
|
+
contexto: args.contexto || '',
|
|
2433
|
+
correr,
|
|
2434
|
+
mostrar: (t) => fala.agente('Diretor', t, profundidade),
|
|
2435
|
+
});
|
|
2436
|
+
if (!r.ok) return r;
|
|
2437
|
+
|
|
2438
|
+
/* A PAUTA é o que volta para o produtor, não o JSON cru. O JSON cru
|
|
2439
|
+
convida a copiar campo por campo para dentro do plano de cena — e aí o
|
|
2440
|
+
"fundo": "verde descendo" viraria uma string num lugar que espera cor.
|
|
2441
|
+
A pauta é prosa: o produtor LÊ e compõe com os primitivos que ele tem. */
|
|
2442
|
+
return {
|
|
2443
|
+
ok: true,
|
|
2444
|
+
aprovado: r.aprovado,
|
|
2445
|
+
defeitos: r.defeitos.length ? r.defeitos : undefined,
|
|
2446
|
+
pauta: diretor.pauta(r.plano),
|
|
2447
|
+
voz: r.plano.voz,
|
|
2448
|
+
midia: r.plano.midia,
|
|
2449
|
+
trilha: r.plano.trilha,
|
|
2450
|
+
segundos: r.plano.segundos,
|
|
2451
|
+
proporcao: r.plano.proporcao,
|
|
2452
|
+
};
|
|
2453
|
+
}
|
|
2454
|
+
|
|
2455
|
+
async function rodarPipeline(args, ctx) {
|
|
2456
|
+
const { server, model, token, projectDir, projectName, profundidade, motor, permissoes } = ctx;
|
|
2457
|
+
if (profundidade > 0) {
|
|
2458
|
+
return { ok: false, error: 'Recusado: o pipeline não roda dentro de um subagente — '
|
|
2459
|
+
+ 'os papéis dele já são subagentes. Faça a parte que te cabe.' };
|
|
2460
|
+
}
|
|
2461
|
+
|
|
2462
|
+
const pipeline = require('../../pipeline.js');
|
|
2463
|
+
const path = require('path');
|
|
2464
|
+
const pedido = args.pedido || args.prompt || '';
|
|
2465
|
+
const base = projectDir || cfg.ROOT_DIR;
|
|
2466
|
+
/* Dentro de um projeto, o app é montado NA pasta dele. A subpasta com
|
|
2467
|
+
nome derivado do pedido só vale na raiz: era ela que fazia o app nascer
|
|
2468
|
+
num lugar que a conversa nunca mais achava. */
|
|
2469
|
+
const naRaiz = path.resolve(base) === path.resolve(cfg.ROOT_DIR);
|
|
2470
|
+
const pasta = args.pasta
|
|
2471
|
+
? path.resolve(base, args.pasta)
|
|
2472
|
+
: (naRaiz ? pipeline.pastaPara(pedido, base) : base);
|
|
2473
|
+
|
|
2474
|
+
const correr = async (prompt, rotulo) => {
|
|
2475
|
+
if (PARAR) return '';
|
|
2476
|
+
fala.agente('Agente', rotulo, profundidade);
|
|
2477
|
+
const r = await runAct(prompt, {
|
|
2478
|
+
server, model, token, projectDir: pasta, projectName,
|
|
2479
|
+
history: [], profundidade: profundidade + 1, subagent: true, motor, permissoes,
|
|
2480
|
+
});
|
|
2481
|
+
return (r && r.assistantMessage && r.assistantMessage.content) || '';
|
|
2482
|
+
};
|
|
2483
|
+
|
|
2484
|
+
return pipeline.construir({
|
|
2485
|
+
pedido,
|
|
2486
|
+
pasta,
|
|
2487
|
+
rodadas: args.rodadas,
|
|
2488
|
+
correr,
|
|
2489
|
+
mostrar: (linha) => console.log(fala.resultado(profundidade) + c.muted(linha)),
|
|
2490
|
+
abrir: tools.openInBrowser,
|
|
2491
|
+
});
|
|
2492
|
+
}
|
|
2493
|
+
|
|
2494
|
+
/**
|
|
2495
|
+
* Portão de prova fresca: marca a edição de código e o comando rodado, nessa
|
|
2496
|
+
* ordem. `barrar()` devolve a frase de "AINDA NÃO" (uma vez só) quando o
|
|
2497
|
+
* último código editado não tem comando depois dele; senão null. Página
|
|
2498
|
+
* (html/css) fica com o conferirPagina.
|
|
2499
|
+
*/
|
|
2500
|
+
const CODIGO = /\.(m?[jt]sx?|cjs|py|rb|go|rs|java|php|sh|c|cpp|cs)$/i;
|
|
2501
|
+
function novoPortaoDeProva() {
|
|
2502
|
+
let seq = 0, edicao = 0, rodou = 0, avisou = false;
|
|
2503
|
+
return {
|
|
2504
|
+
ver(tc) {
|
|
2505
|
+
const a = (tc && tc.arguments) || {};
|
|
2506
|
+
if (tc.name === 'write_file' || tc.name === 'edit_file' || tc.name === 'multi_edit') {
|
|
2507
|
+
if (CODIGO.test(String(a.path || a.file_path || ''))) edicao = ++seq;
|
|
2508
|
+
} else if (tc.name === 'run_shell' || tc.name === 'run_in_new_terminal' || tc.name === 'run_background') rodou = ++seq;
|
|
2509
|
+
},
|
|
2510
|
+
/** O PrimoCode rodou os testes por conta própria (conferirTestes): vale como o comando depois da edição. */
|
|
2511
|
+
rodouPorFora() { if (edicao) rodou = ++seq; },
|
|
2512
|
+
barrar() {
|
|
2513
|
+
if (!edicao || rodou > edicao || avisou) return null;
|
|
2514
|
+
avisou = true;
|
|
2515
|
+
return 'AINDA NÃO: você editou código e não rodou nada depois. Rode o teste ou o comando que prova '
|
|
2516
|
+
+ 'que funciona, leia o resultado e chame finish de novo (ou diga o que não conseguiu conferir).';
|
|
2517
|
+
},
|
|
2518
|
+
};
|
|
2519
|
+
}
|
|
2520
|
+
|
|
2521
|
+
module.exports = { summarizeForModel, mesmoComando, EDICAO_DE_VIDEO_FALADO, novoPortaoDeProva, runAct, erroDaCorrente, linhaDaReserva, videoForaDeEdicao, entregaDoAgente, lembreteDeParalelo, buildMemoryContext, leituraPeloShell, historicoEnxuto, interromper, interrompido, mandarDuranteATarefa, trabalhando, sobrasDaCaixa, entregarRecados, compactar, motivoDaParada, pareceParadaNoMeio, ehTetoDeToken, ehTransitorio, esperaDoErro,
|
|
2522
|
+
anotacaoDoQueJaFoi, resumoDoQueJaFoi, encolherParaContinuar, recadoDoPlanoAberto, MAX_ITERATIONS };
|