primocode 10.17.1 → 11.0.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.
Files changed (2452) hide show
  1. package/LICENSES/fontes-OFL.txt +95 -0
  2. package/LICENSES/opencode-MIT.txt +24 -0
  3. package/LICENSES/pptxgenjs-MIT.txt +31 -0
  4. package/README.md +50 -20
  5. package/agentes/acessibilidade.md +10 -0
  6. package/agentes/ambiente.md +10 -0
  7. package/agentes/api.md +10 -0
  8. package/agentes/backend.md +10 -0
  9. package/agentes/copy.md +10 -0
  10. package/agentes/css-layout.md +10 -0
  11. package/agentes/dados.md +10 -0
  12. package/agentes/depuracao.md +10 -0
  13. package/agentes/design.md +10 -0
  14. package/agentes/docs.md +10 -0
  15. package/agentes/frontend.md +10 -0
  16. package/agentes/geral/capacidades/arquivos.json +132 -0
  17. package/agentes/geral/capacidades/codigo.json +132 -0
  18. package/agentes/geral/capacidades/dados.json +126 -0
  19. package/agentes/geral/capacidades/depuracao.json +126 -0
  20. package/agentes/geral/capacidades/escrita.json +126 -0
  21. package/agentes/geral/capacidades/git.json +126 -0
  22. package/agentes/geral/capacidades/pesquisa.json +126 -0
  23. package/agentes/geral/capacidades/seguranca.json +132 -0
  24. package/agentes/geral/capacidades/shell.json +132 -0
  25. package/agentes/geral/capacidades/web.json +126 -0
  26. package/agentes/git-pr.md +10 -0
  27. package/agentes/indice.md +86 -0
  28. package/agentes/nextjs.md +10 -0
  29. package/agentes/node.md +10 -0
  30. package/agentes/performance.md +10 -0
  31. package/agentes/pesquisa.md +10 -0
  32. package/agentes/python.md +10 -0
  33. package/agentes/react.md +10 -0
  34. package/agentes/refatoracao.md +10 -0
  35. package/agentes/revisor.md +10 -0
  36. package/agentes/seguranca.md +10 -0
  37. package/agentes/sql.md +10 -0
  38. package/agentes/testes.md +10 -0
  39. package/agentes/typescript.md +10 -0
  40. package/agentes/ux.md +10 -0
  41. package/bin/primocode.js +1112 -275
  42. package/editor/THIRD_PARTY_NOTICES.md +3 -3
  43. package/editor/assets/baixar.json +8 -0
  44. package/editor/helpers/camera_viva.py +67 -4
  45. package/editor/modelo-projeto/assets/fontes/OFL-Inter.txt +93 -0
  46. package/editor/modelo-projeto/assets/fontes/larguras.json +1 -1
  47. package/editor/modelo-projeto/build.py +164 -19
  48. package/editor/modelo-projeto/ferramentas/medir_fontes.py +1 -1
  49. package/kits/CATALOGO.md +65 -0
  50. package/kits/KITS.md +179 -0
  51. package/kits/adesivos/SKILL.md +53 -0
  52. package/kits/adesivos/assets/ASSETS.md +22 -0
  53. package/kits/adesivos/assets/fontes/OFL-BowlbyOne.txt +92 -0
  54. package/kits/adesivos/assets/fontes/OFL-Nunito.txt +92 -0
  55. package/kits/adesivos/assets/fontes/bowlby-latin.woff2 +0 -0
  56. package/kits/adesivos/assets/fontes/nunito-latin.woff2 +0 -0
  57. package/kits/adesivos/assets/sons/assinatura.mp3 +0 -0
  58. package/kits/adesivos/assets/sons/cola.mp3 +0 -0
  59. package/kits/adesivos/assets/sons/confete.mp3 +0 -0
  60. package/kits/adesivos/assets/sons/impacto.mp3 +0 -0
  61. package/kits/adesivos/assets/sons/palavra.mp3 +0 -0
  62. package/kits/adesivos/assets/sons/pop.mp3 +0 -0
  63. package/kits/adesivos/assets/sons/swipe.mp3 +0 -0
  64. package/kits/adesivos/assets/sons/whoosh.mp3 +0 -0
  65. package/kits/adesivos/assets/trilha/pop-colorido-112bpm.mp3 +0 -0
  66. package/kits/adesivos/capa.jpg +0 -0
  67. package/kits/adesivos/elementos/AdesivoForma.tsx +42 -0
  68. package/kits/adesivos/elementos/AdesivoFoto.tsx +36 -0
  69. package/kits/adesivos/elementos/AdesivoTexto.tsx +35 -0
  70. package/kits/adesivos/elementos/AssinaturaMarca.tsx +36 -0
  71. package/kits/adesivos/elementos/Camera.tsx +22 -0
  72. package/kits/adesivos/elementos/Cena.tsx +48 -0
  73. package/kits/adesivos/elementos/ChuvaDeAdesivos.tsx +29 -0
  74. package/kits/adesivos/elementos/Fundo.tsx +21 -0
  75. package/kits/adesivos/elementos/Montagem.tsx +68 -0
  76. package/kits/adesivos/elementos/SeloPreco.tsx +38 -0
  77. package/kits/adesivos/elementos/Som.tsx +33 -0
  78. package/kits/adesivos/elementos/TituloEtiquetas.tsx +33 -0
  79. package/kits/adesivos/elementos/base.ts +101 -0
  80. package/kits/adesivos/elementos/index.ts +16 -0
  81. package/kits/adesivos/exemplos/fotos/foto-01.jpg +0 -0
  82. package/kits/adesivos/exemplos/fotos/foto-02.jpg +0 -0
  83. package/kits/adesivos/exemplos/fotos/foto-03.jpg +0 -0
  84. package/kits/adesivos/exemplos/logo-grude.svg +1 -0
  85. package/kits/adesivos/exemplos/plano.json +328 -0
  86. package/kits/adesivos/exemplos/roteiro.md +21 -0
  87. package/kits/adesivos/preview.tsx +15 -0
  88. package/kits/adesivos/receita.json +212 -0
  89. package/kits/adesivos/regras/area-segura.md +17 -0
  90. package/kits/adesivos/regras/cor.md +23 -0
  91. package/kits/adesivos/regras/movimento.md +17 -0
  92. package/kits/adesivos/regras/ritmo.md +16 -0
  93. package/kits/adesivos/regras/som.md +20 -0
  94. package/kits/adesivos/regras/tipografia.md +16 -0
  95. package/kits/antes-depois/SKILL.md +57 -0
  96. package/kits/antes-depois/assets/ASSETS.md +23 -0
  97. package/kits/antes-depois/assets/fontes/OFL-ArchivoBlack.txt +93 -0
  98. package/kits/antes-depois/assets/fontes/OFL-Manrope.txt +93 -0
  99. package/kits/antes-depois/assets/fontes/archivoblack.woff2 +0 -0
  100. package/kits/antes-depois/assets/fontes/manrope.woff2 +0 -0
  101. package/kits/antes-depois/assets/sons/assinatura.mp3 +0 -0
  102. package/kits/antes-depois/assets/sons/clique.mp3 +0 -0
  103. package/kits/antes-depois/assets/sons/impacto.mp3 +0 -0
  104. package/kits/antes-depois/assets/sons/pop-cartao.mp3 +0 -0
  105. package/kits/antes-depois/assets/sons/pop-palavra.mp3 +0 -0
  106. package/kits/antes-depois/assets/sons/subida.mp3 +0 -0
  107. package/kits/antes-depois/assets/sons/swoosh.mp3 +0 -0
  108. package/kits/antes-depois/assets/sons/tick.mp3 +0 -0
  109. package/kits/antes-depois/assets/sons/whoosh-entra.mp3 +0 -0
  110. package/kits/antes-depois/assets/sons/whoosh-sai.mp3 +0 -0
  111. package/kits/antes-depois/assets/trilha/corte-118bpm.mp3 +0 -0
  112. package/kits/antes-depois/capa.jpg +0 -0
  113. package/kits/antes-depois/elementos/BarraMedidor.tsx +43 -0
  114. package/kits/antes-depois/elementos/Camera.tsx +21 -0
  115. package/kits/antes-depois/elementos/Cena.tsx +41 -0
  116. package/kits/antes-depois/elementos/FaixaMarquee.tsx +35 -0
  117. package/kits/antes-depois/elementos/Fundo.tsx +24 -0
  118. package/kits/antes-depois/elementos/ListaMudancas.tsx +37 -0
  119. package/kits/antes-depois/elementos/Montagem.tsx +59 -0
  120. package/kits/antes-depois/elementos/NumeroDelta.tsx +36 -0
  121. package/kits/antes-depois/elementos/RotuloAntesDepois.tsx +26 -0
  122. package/kits/antes-depois/elementos/Som.tsx +40 -0
  123. package/kits/antes-depois/elementos/TelaDividida.tsx +68 -0
  124. package/kits/antes-depois/elementos/base.ts +82 -0
  125. package/kits/antes-depois/elementos/index.ts +15 -0
  126. package/kits/antes-depois/exemplos/fotos/foto-07.jpg +0 -0
  127. package/kits/antes-depois/exemplos/fotos/foto-08.jpg +0 -0
  128. package/kits/antes-depois/exemplos/plano.json +276 -0
  129. package/kits/antes-depois/exemplos/roteiro.md +19 -0
  130. package/kits/antes-depois/preview.tsx +13 -0
  131. package/kits/antes-depois/receita.json +21 -0
  132. package/kits/antes-depois/regras/area-segura.md +21 -0
  133. package/kits/antes-depois/regras/cor.md +15 -0
  134. package/kits/antes-depois/regras/movimento.md +23 -0
  135. package/kits/antes-depois/regras/ritmo.md +15 -0
  136. package/kits/antes-depois/regras/som.md +20 -0
  137. package/kits/antes-depois/regras/tipografia.md +18 -0
  138. package/kits/apple-tipografico/SKILL.md +73 -0
  139. package/kits/apple-tipografico/assets/ASSETS.md +23 -0
  140. package/kits/apple-tipografico/assets/fontes/OFL-Inter.txt +93 -0
  141. package/kits/apple-tipografico/assets/fontes/inter-latin-500-800.woff2 +0 -0
  142. package/kits/apple-tipografico/assets/sons/assinatura.mp3 +0 -0
  143. package/kits/apple-tipografico/assets/sons/clique.mp3 +0 -0
  144. package/kits/apple-tipografico/assets/sons/impacto.mp3 +0 -0
  145. package/kits/apple-tipografico/assets/sons/pop-cartao.mp3 +0 -0
  146. package/kits/apple-tipografico/assets/sons/pop-palavra.mp3 +0 -0
  147. package/kits/apple-tipografico/assets/sons/subida.mp3 +0 -0
  148. package/kits/apple-tipografico/assets/sons/swoosh.mp3 +0 -0
  149. package/kits/apple-tipografico/assets/sons/whoosh-entra.mp3 +0 -0
  150. package/kits/apple-tipografico/assets/sons/whoosh-sai.mp3 +0 -0
  151. package/kits/apple-tipografico/assets/trilha/tech-claro-125bpm.mp3 +0 -0
  152. package/kits/apple-tipografico/capa.jpg +0 -0
  153. package/kits/apple-tipografico/elementos/AssinaturaPreta.tsx +33 -0
  154. package/kits/apple-tipografico/elementos/Camera.tsx +23 -0
  155. package/kits/apple-tipografico/elementos/CartaoRadial.tsx +41 -0
  156. package/kits/apple-tipografico/elementos/Cena.tsx +55 -0
  157. package/kits/apple-tipografico/elementos/Fundo.tsx +21 -0
  158. package/kits/apple-tipografico/elementos/LegendaCurta.tsx +51 -0
  159. package/kits/apple-tipografico/elementos/Montagem.tsx +55 -0
  160. package/kits/apple-tipografico/elementos/Produto3D.tsx +140 -0
  161. package/kits/apple-tipografico/elementos/ProdutoFoto.tsx +47 -0
  162. package/kits/apple-tipografico/elementos/Som.tsx +40 -0
  163. package/kits/apple-tipografico/elementos/base.ts +111 -0
  164. package/kits/apple-tipografico/elementos/index.ts +18 -0
  165. package/kits/apple-tipografico/elementos/modelos.ts +108 -0
  166. package/kits/apple-tipografico/elementos/raymarch.ts +249 -0
  167. package/kits/apple-tipografico/exemplos/logo-lume.svg +1 -0
  168. package/kits/apple-tipografico/exemplos/plano.json +56 -0
  169. package/kits/apple-tipografico/exemplos/roteiro.md +19 -0
  170. package/kits/apple-tipografico/preview.tsx +12 -0
  171. package/kits/apple-tipografico/receita.json +22 -0
  172. package/kits/apple-tipografico/regras/area-segura.md +19 -0
  173. package/kits/apple-tipografico/regras/cor.md +24 -0
  174. package/kits/apple-tipografico/regras/movimento.md +29 -0
  175. package/kits/apple-tipografico/regras/ritmo.md +29 -0
  176. package/kits/apple-tipografico/regras/som.md +20 -0
  177. package/kits/apple-tipografico/regras/tipografia.md +21 -0
  178. package/kits/aquarela/SKILL.md +52 -0
  179. package/kits/aquarela/assets/ASSETS.md +21 -0
  180. package/kits/aquarela/assets/fontes/OFL-Caveat.txt +92 -0
  181. package/kits/aquarela/assets/fontes/OFL-Fraunces.txt +92 -0
  182. package/kits/aquarela/assets/fontes/caveat-latin.woff2 +0 -0
  183. package/kits/aquarela/assets/fontes/fraunces-latin.woff2 +0 -0
  184. package/kits/aquarela/assets/sons/assinatura.mp3 +0 -0
  185. package/kits/aquarela/assets/sons/gota.mp3 +0 -0
  186. package/kits/aquarela/assets/sons/impacto.mp3 +0 -0
  187. package/kits/aquarela/assets/sons/palavra.mp3 +0 -0
  188. package/kits/aquarela/assets/sons/papel-cai.mp3 +0 -0
  189. package/kits/aquarela/assets/sons/pop-mancha.mp3 +0 -0
  190. package/kits/aquarela/assets/sons/risco.mp3 +0 -0
  191. package/kits/aquarela/assets/sons/whoosh-pincel.mp3 +0 -0
  192. package/kits/aquarela/assets/trilha/calma-com-punch-108bpm.mp3 +0 -0
  193. package/kits/aquarela/capa.jpg +0 -0
  194. package/kits/aquarela/elementos/AnotacaoManual.tsx +40 -0
  195. package/kits/aquarela/elementos/AssinaturaMarca.tsx +33 -0
  196. package/kits/aquarela/elementos/Camera.tsx +22 -0
  197. package/kits/aquarela/elementos/Cena.tsx +48 -0
  198. package/kits/aquarela/elementos/Fundo.tsx +24 -0
  199. package/kits/aquarela/elementos/ManchaTinta.tsx +46 -0
  200. package/kits/aquarela/elementos/Montagem.tsx +60 -0
  201. package/kits/aquarela/elementos/PapelRasgado.tsx +50 -0
  202. package/kits/aquarela/elementos/Pincelada.tsx +43 -0
  203. package/kits/aquarela/elementos/Pingos.tsx +31 -0
  204. package/kits/aquarela/elementos/Som.tsx +33 -0
  205. package/kits/aquarela/elementos/TituloPincel.tsx +51 -0
  206. package/kits/aquarela/elementos/base.ts +97 -0
  207. package/kits/aquarela/elementos/index.ts +16 -0
  208. package/kits/aquarela/exemplos/logo-mare.svg +1 -0
  209. package/kits/aquarela/exemplos/plano.json +62 -0
  210. package/kits/aquarela/exemplos/roteiro.md +21 -0
  211. package/kits/aquarela/preview.tsx +12 -0
  212. package/kits/aquarela/receita.json +213 -0
  213. package/kits/aquarela/regras/area-segura.md +17 -0
  214. package/kits/aquarela/regras/cor.md +23 -0
  215. package/kits/aquarela/regras/movimento.md +19 -0
  216. package/kits/aquarela/regras/ritmo.md +17 -0
  217. package/kits/aquarela/regras/som.md +20 -0
  218. package/kits/aquarela/regras/tipografia.md +16 -0
  219. package/kits/aurora/SKILL.md +52 -0
  220. package/kits/aurora/assets/ASSETS.md +21 -0
  221. package/kits/aurora/assets/fontes/OFL-InstrumentSerif.txt +92 -0
  222. package/kits/aurora/assets/fontes/OFL-Manrope.txt +92 -0
  223. package/kits/aurora/assets/fontes/instrument-latin.woff2 +0 -0
  224. package/kits/aurora/assets/fontes/manrope-latin.woff2 +0 -0
  225. package/kits/aurora/assets/sons/assinatura.mp3 +0 -0
  226. package/kits/aurora/assets/sons/brilho.mp3 +0 -0
  227. package/kits/aurora/assets/sons/meteoro.mp3 +0 -0
  228. package/kits/aurora/assets/sons/onda.mp3 +0 -0
  229. package/kits/aurora/assets/sons/sino.mp3 +0 -0
  230. package/kits/aurora/assets/sons/sopro.mp3 +0 -0
  231. package/kits/aurora/assets/sons/subida.mp3 +0 -0
  232. package/kits/aurora/assets/sons/toque.mp3 +0 -0
  233. package/kits/aurora/assets/trilha/suave-88bpm.mp3 +0 -0
  234. package/kits/aurora/capa.jpg +0 -0
  235. package/kits/aurora/elementos/AssinaturaMarca.tsx +24 -0
  236. package/kits/aurora/elementos/Camera.tsx +22 -0
  237. package/kits/aurora/elementos/CartaoVidro.tsx +29 -0
  238. package/kits/aurora/elementos/Cena.tsx +48 -0
  239. package/kits/aurora/elementos/CeuEstrelado.tsx +22 -0
  240. package/kits/aurora/elementos/CortinaDeLuz.tsx +36 -0
  241. package/kits/aurora/elementos/Fundo.tsx +35 -0
  242. package/kits/aurora/elementos/Legenda.tsx +23 -0
  243. package/kits/aurora/elementos/Montagem.tsx +68 -0
  244. package/kits/aurora/elementos/Montanhas.tsx +24 -0
  245. package/kits/aurora/elementos/Som.tsx +33 -0
  246. package/kits/aurora/elementos/TituloSerif.tsx +36 -0
  247. package/kits/aurora/elementos/base.ts +93 -0
  248. package/kits/aurora/elementos/index.ts +16 -0
  249. package/kits/aurora/exemplos/logo-boreal.svg +1 -0
  250. package/kits/aurora/exemplos/plano.json +204 -0
  251. package/kits/aurora/exemplos/roteiro.md +19 -0
  252. package/kits/aurora/preview.tsx +12 -0
  253. package/kits/aurora/receita.json +146 -0
  254. package/kits/aurora/regras/area-segura.md +18 -0
  255. package/kits/aurora/regras/cor.md +24 -0
  256. package/kits/aurora/regras/movimento.md +20 -0
  257. package/kits/aurora/regras/ritmo.md +14 -0
  258. package/kits/aurora/regras/som.md +20 -0
  259. package/kits/aurora/regras/tipografia.md +15 -0
  260. package/kits/bauhaus/SKILL.md +52 -0
  261. package/kits/bauhaus/assets/ASSETS.md +18 -0
  262. package/kits/bauhaus/assets/fontes/OFL-bebas-neue.txt +93 -0
  263. package/kits/bauhaus/assets/fontes/OFL-jost-900.txt +93 -0
  264. package/kits/bauhaus/assets/fontes/bebas-neue.woff2 +0 -0
  265. package/kits/bauhaus/assets/fontes/jost-900.woff2 +0 -0
  266. package/kits/bauhaus/assets/sons/assinatura.mp3 +0 -0
  267. package/kits/bauhaus/assets/sons/clique.mp3 +0 -0
  268. package/kits/bauhaus/assets/sons/impacto.mp3 +0 -0
  269. package/kits/bauhaus/assets/sons/pop-cartao.mp3 +0 -0
  270. package/kits/bauhaus/assets/sons/pop-palavra.mp3 +0 -0
  271. package/kits/bauhaus/assets/sons/subida.mp3 +0 -0
  272. package/kits/bauhaus/assets/sons/swoosh.mp3 +0 -0
  273. package/kits/bauhaus/assets/sons/tick.mp3 +0 -0
  274. package/kits/bauhaus/assets/sons/whoosh-entra.mp3 +0 -0
  275. package/kits/bauhaus/assets/sons/whoosh-sai.mp3 +0 -0
  276. package/kits/bauhaus/assets/trilha/trilha.mp3 +0 -0
  277. package/kits/bauhaus/capa.jpg +0 -0
  278. package/kits/bauhaus/elementos/AssinaturaMarca.tsx +26 -0
  279. package/kits/bauhaus/elementos/BarraDiagonal.tsx +20 -0
  280. package/kits/bauhaus/elementos/Camera.tsx +21 -0
  281. package/kits/bauhaus/elementos/Cena.tsx +36 -0
  282. package/kits/bauhaus/elementos/ComposicaoGeometrica.tsx +54 -0
  283. package/kits/bauhaus/elementos/Fundo.tsx +13 -0
  284. package/kits/bauhaus/elementos/ListaFaixas.tsx +27 -0
  285. package/kits/bauhaus/elementos/Montagem.tsx +55 -0
  286. package/kits/bauhaus/elementos/NumeroBauhaus.tsx +21 -0
  287. package/kits/bauhaus/elementos/Overlay.tsx +18 -0
  288. package/kits/bauhaus/elementos/Som.tsx +30 -0
  289. package/kits/bauhaus/elementos/TituloBauhaus.tsx +32 -0
  290. package/kits/bauhaus/elementos/base.ts +74 -0
  291. package/kits/bauhaus/elementos/index.ts +16 -0
  292. package/kits/bauhaus/exemplos/plano.json +221 -0
  293. package/kits/bauhaus/exemplos/roteiro.md +20 -0
  294. package/kits/bauhaus/preview.tsx +12 -0
  295. package/kits/bauhaus/receita.json +174 -0
  296. package/kits/bauhaus/regras/area-segura.md +15 -0
  297. package/kits/bauhaus/regras/cor.md +13 -0
  298. package/kits/bauhaus/regras/movimento.md +17 -0
  299. package/kits/bauhaus/regras/ritmo.md +15 -0
  300. package/kits/bauhaus/regras/som.md +18 -0
  301. package/kits/bauhaus/regras/tipografia.md +20 -0
  302. package/kits/brutalista/SKILL.md +54 -0
  303. package/kits/brutalista/assets/ASSETS.md +23 -0
  304. package/kits/brutalista/assets/fontes/OFL-ArchivoBlack.txt +93 -0
  305. package/kits/brutalista/assets/fontes/OFL-JetBrainsMono.txt +93 -0
  306. package/kits/brutalista/assets/fontes/archivo-black.woff2 +0 -0
  307. package/kits/brutalista/assets/fontes/jetbrains-mono.woff2 +0 -0
  308. package/kits/brutalista/assets/sons/assinatura.mp3 +0 -0
  309. package/kits/brutalista/assets/sons/clique.mp3 +0 -0
  310. package/kits/brutalista/assets/sons/impacto.mp3 +0 -0
  311. package/kits/brutalista/assets/sons/pop-cartao.mp3 +0 -0
  312. package/kits/brutalista/assets/sons/pop-palavra.mp3 +0 -0
  313. package/kits/brutalista/assets/sons/subida.mp3 +0 -0
  314. package/kits/brutalista/assets/sons/swoosh.mp3 +0 -0
  315. package/kits/brutalista/assets/sons/whoosh-entra.mp3 +0 -0
  316. package/kits/brutalista/assets/sons/whoosh-sai.mp3 +0 -0
  317. package/kits/brutalista/assets/trilha/bruta-108bpm.mp3 +0 -0
  318. package/kits/brutalista/capa.jpg +0 -0
  319. package/kits/brutalista/elementos/AssinaturaMarca.tsx +21 -0
  320. package/kits/brutalista/elementos/BlocoSombra.tsx +18 -0
  321. package/kits/brutalista/elementos/Camera.tsx +23 -0
  322. package/kits/brutalista/elementos/CartaoFotoBruto.tsx +19 -0
  323. package/kits/brutalista/elementos/Cena.tsx +41 -0
  324. package/kits/brutalista/elementos/ContadorGrande.tsx +21 -0
  325. package/kits/brutalista/elementos/FitaAlerta.tsx +20 -0
  326. package/kits/brutalista/elementos/Fundo.tsx +9 -0
  327. package/kits/brutalista/elementos/ListaBruta.tsx +23 -0
  328. package/kits/brutalista/elementos/MonoEnorme.tsx +43 -0
  329. package/kits/brutalista/elementos/Montagem.tsx +62 -0
  330. package/kits/brutalista/elementos/QuadroCor.tsx +14 -0
  331. package/kits/brutalista/elementos/Som.tsx +38 -0
  332. package/kits/brutalista/elementos/Terminal.tsx +25 -0
  333. package/kits/brutalista/elementos/base.ts +71 -0
  334. package/kits/brutalista/elementos/index.ts +18 -0
  335. package/kits/brutalista/exemplos/fotos/foto-02.jpg +0 -0
  336. package/kits/brutalista/exemplos/fotos/foto-03.jpg +0 -0
  337. package/kits/brutalista/exemplos/fotos/foto-05.jpg +0 -0
  338. package/kits/brutalista/exemplos/fotos/foto-07.jpg +0 -0
  339. package/kits/brutalista/exemplos/fotos/foto-08.jpg +0 -0
  340. package/kits/brutalista/exemplos/logo-bloco.svg +1 -0
  341. package/kits/brutalista/exemplos/plano.json +52 -0
  342. package/kits/brutalista/exemplos/roteiro.md +19 -0
  343. package/kits/brutalista/preview.tsx +20 -0
  344. package/kits/brutalista/receita.json +195 -0
  345. package/kits/brutalista/regras/area-segura.md +18 -0
  346. package/kits/brutalista/regras/cor.md +12 -0
  347. package/kits/brutalista/regras/movimento.md +16 -0
  348. package/kits/brutalista/regras/ritmo.md +16 -0
  349. package/kits/brutalista/regras/som.md +21 -0
  350. package/kits/brutalista/regras/tipografia.md +16 -0
  351. package/kits/campos-de-cor/SKILL.md +55 -0
  352. package/kits/campos-de-cor/assets/ASSETS.md +19 -0
  353. package/kits/campos-de-cor/assets/fontes/OFL-Archivo-Black.txt +93 -0
  354. package/kits/campos-de-cor/assets/fontes/OFL-DM-Mono.txt +93 -0
  355. package/kits/campos-de-cor/assets/fontes/OFL-Playfair-Italic.txt +93 -0
  356. package/kits/campos-de-cor/assets/fontes/archivo-black.woff2 +0 -0
  357. package/kits/campos-de-cor/assets/fontes/dm-mono.woff2 +0 -0
  358. package/kits/campos-de-cor/assets/fontes/playfair-italic.woff2 +0 -0
  359. package/kits/campos-de-cor/assets/sons/assinatura.mp3 +0 -0
  360. package/kits/campos-de-cor/assets/sons/clique.mp3 +0 -0
  361. package/kits/campos-de-cor/assets/sons/impacto.mp3 +0 -0
  362. package/kits/campos-de-cor/assets/sons/pop-cartao.mp3 +0 -0
  363. package/kits/campos-de-cor/assets/sons/pop-palavra.mp3 +0 -0
  364. package/kits/campos-de-cor/assets/sons/subida.mp3 +0 -0
  365. package/kits/campos-de-cor/assets/sons/swoosh.mp3 +0 -0
  366. package/kits/campos-de-cor/assets/sons/whoosh-entra.mp3 +0 -0
  367. package/kits/campos-de-cor/assets/sons/whoosh-sai.mp3 +0 -0
  368. package/kits/campos-de-cor/assets/trilha/trilha.mp3 +0 -0
  369. package/kits/campos-de-cor/capa.jpg +0 -0
  370. package/kits/campos-de-cor/elementos/AssinaturaMarca.tsx +18 -0
  371. package/kits/campos-de-cor/elementos/Asterisco.tsx +26 -0
  372. package/kits/campos-de-cor/elementos/Camera.tsx +23 -0
  373. package/kits/campos-de-cor/elementos/CampoDeCor.tsx +39 -0
  374. package/kits/campos-de-cor/elementos/Cena.tsx +46 -0
  375. package/kits/campos-de-cor/elementos/FitaDeTexto.tsx +24 -0
  376. package/kits/campos-de-cor/elementos/FormaGeometrica.tsx +37 -0
  377. package/kits/campos-de-cor/elementos/Fundo.tsx +11 -0
  378. package/kits/campos-de-cor/elementos/LegendaItalica.tsx +12 -0
  379. package/kits/campos-de-cor/elementos/ListaRegua.tsx +30 -0
  380. package/kits/campos-de-cor/elementos/Montagem.tsx +62 -0
  381. package/kits/campos-de-cor/elementos/PalavraGigante.tsx +44 -0
  382. package/kits/campos-de-cor/elementos/Som.tsx +39 -0
  383. package/kits/campos-de-cor/elementos/base.ts +87 -0
  384. package/kits/campos-de-cor/elementos/index.ts +17 -0
  385. package/kits/campos-de-cor/exemplos/logo-pulso.svg +1 -0
  386. package/kits/campos-de-cor/exemplos/plano.json +258 -0
  387. package/kits/campos-de-cor/exemplos/roteiro.md +19 -0
  388. package/kits/campos-de-cor/preview.tsx +12 -0
  389. package/kits/campos-de-cor/receita.json +174 -0
  390. package/kits/campos-de-cor/regras/area-segura.md +15 -0
  391. package/kits/campos-de-cor/regras/cor.md +14 -0
  392. package/kits/campos-de-cor/regras/movimento.md +15 -0
  393. package/kits/campos-de-cor/regras/ritmo.md +15 -0
  394. package/kits/campos-de-cor/regras/som.md +18 -0
  395. package/kits/campos-de-cor/regras/tipografia.md +13 -0
  396. package/kits/cartaz-cinetico/SKILL.md +52 -0
  397. package/kits/cartaz-cinetico/assets/ASSETS.md +22 -0
  398. package/kits/cartaz-cinetico/assets/fontes/OFL-Anton.txt +93 -0
  399. package/kits/cartaz-cinetico/assets/fontes/OFL-Archivo.txt +93 -0
  400. package/kits/cartaz-cinetico/assets/fontes/anton.woff2 +0 -0
  401. package/kits/cartaz-cinetico/assets/fontes/archivo.woff2 +0 -0
  402. package/kits/cartaz-cinetico/assets/sons/assinatura.mp3 +0 -0
  403. package/kits/cartaz-cinetico/assets/sons/clique.mp3 +0 -0
  404. package/kits/cartaz-cinetico/assets/sons/impacto.mp3 +0 -0
  405. package/kits/cartaz-cinetico/assets/sons/pop-cartao.mp3 +0 -0
  406. package/kits/cartaz-cinetico/assets/sons/pop-palavra.mp3 +0 -0
  407. package/kits/cartaz-cinetico/assets/sons/subida.mp3 +0 -0
  408. package/kits/cartaz-cinetico/assets/sons/swoosh.mp3 +0 -0
  409. package/kits/cartaz-cinetico/assets/sons/whoosh-entra.mp3 +0 -0
  410. package/kits/cartaz-cinetico/assets/sons/whoosh-sai.mp3 +0 -0
  411. package/kits/cartaz-cinetico/assets/trilha/cartaz-124bpm.mp3 +0 -0
  412. package/kits/cartaz-cinetico/capa.jpg +0 -0
  413. package/kits/cartaz-cinetico/elementos/AssinaturaMarca.tsx +31 -0
  414. package/kits/cartaz-cinetico/elementos/Camera.tsx +22 -0
  415. package/kits/cartaz-cinetico/elementos/CartazPalavra.tsx +40 -0
  416. package/kits/cartaz-cinetico/elementos/Cena.tsx +41 -0
  417. package/kits/cartaz-cinetico/elementos/CirculoPoster.tsx +22 -0
  418. package/kits/cartaz-cinetico/elementos/EcoPalavra.tsx +27 -0
  419. package/kits/cartaz-cinetico/elementos/Fundo.tsx +16 -0
  420. package/kits/cartaz-cinetico/elementos/Montagem.tsx +59 -0
  421. package/kits/cartaz-cinetico/elementos/PilhaCartaz.tsx +40 -0
  422. package/kits/cartaz-cinetico/elementos/RoletaPalavras.tsx +30 -0
  423. package/kits/cartaz-cinetico/elementos/Selo.tsx +25 -0
  424. package/kits/cartaz-cinetico/elementos/Som.tsx +38 -0
  425. package/kits/cartaz-cinetico/elementos/base.ts +72 -0
  426. package/kits/cartaz-cinetico/elementos/index.ts +16 -0
  427. package/kits/cartaz-cinetico/exemplos/logo-feira.svg +1 -0
  428. package/kits/cartaz-cinetico/exemplos/plano.json +55 -0
  429. package/kits/cartaz-cinetico/exemplos/roteiro.md +20 -0
  430. package/kits/cartaz-cinetico/preview.tsx +16 -0
  431. package/kits/cartaz-cinetico/receita.json +209 -0
  432. package/kits/cartaz-cinetico/regras/area-segura.md +19 -0
  433. package/kits/cartaz-cinetico/regras/cor.md +13 -0
  434. package/kits/cartaz-cinetico/regras/movimento.md +16 -0
  435. package/kits/cartaz-cinetico/regras/ritmo.md +17 -0
  436. package/kits/cartaz-cinetico/regras/som.md +21 -0
  437. package/kits/cartaz-cinetico/regras/tipografia.md +16 -0
  438. package/kits/colagem/SKILL.md +53 -0
  439. package/kits/colagem/assets/ASSETS.md +25 -0
  440. package/kits/colagem/assets/fontes/OFL-abril-fatface.txt +93 -0
  441. package/kits/colagem/assets/fontes/OFL-special-elite.txt +93 -0
  442. package/kits/colagem/assets/fontes/abril-fatface.woff2 +0 -0
  443. package/kits/colagem/assets/fontes/special-elite.woff2 +0 -0
  444. package/kits/colagem/assets/sons/assinatura.mp3 +0 -0
  445. package/kits/colagem/assets/sons/clique.mp3 +0 -0
  446. package/kits/colagem/assets/sons/impacto.mp3 +0 -0
  447. package/kits/colagem/assets/sons/pop-cartao.mp3 +0 -0
  448. package/kits/colagem/assets/sons/pop-palavra.mp3 +0 -0
  449. package/kits/colagem/assets/sons/subida.mp3 +0 -0
  450. package/kits/colagem/assets/sons/swoosh.mp3 +0 -0
  451. package/kits/colagem/assets/sons/tick.mp3 +0 -0
  452. package/kits/colagem/assets/sons/whoosh-entra.mp3 +0 -0
  453. package/kits/colagem/assets/sons/whoosh-sai.mp3 +0 -0
  454. package/kits/colagem/assets/trilha/trilha.mp3 +0 -0
  455. package/kits/colagem/capa.jpg +0 -0
  456. package/kits/colagem/elementos/AssinaturaMarca.tsx +17 -0
  457. package/kits/colagem/elementos/Camera.tsx +21 -0
  458. package/kits/colagem/elementos/Cena.tsx +36 -0
  459. package/kits/colagem/elementos/FitaAdesiva.tsx +11 -0
  460. package/kits/colagem/elementos/FotoRasgada.tsx +26 -0
  461. package/kits/colagem/elementos/Fundo.tsx +16 -0
  462. package/kits/colagem/elementos/ListaRecortes.tsx +23 -0
  463. package/kits/colagem/elementos/Montagem.tsx +56 -0
  464. package/kits/colagem/elementos/NotaDatilografada.tsx +35 -0
  465. package/kits/colagem/elementos/Overlay.tsx +8 -0
  466. package/kits/colagem/elementos/RecorteForma.tsx +23 -0
  467. package/kits/colagem/elementos/Som.tsx +30 -0
  468. package/kits/colagem/elementos/TituloRecorte.tsx +34 -0
  469. package/kits/colagem/elementos/base.ts +77 -0
  470. package/kits/colagem/elementos/index.ts +17 -0
  471. package/kits/colagem/elementos/rasgado.ts +16 -0
  472. package/kits/colagem/exemplos/fotos/foto-01.jpg +0 -0
  473. package/kits/colagem/exemplos/fotos/foto-02.jpg +0 -0
  474. package/kits/colagem/exemplos/plano.json +228 -0
  475. package/kits/colagem/exemplos/roteiro.md +20 -0
  476. package/kits/colagem/preview.tsx +13 -0
  477. package/kits/colagem/receita.json +171 -0
  478. package/kits/colagem/regras/area-segura.md +15 -0
  479. package/kits/colagem/regras/cor.md +16 -0
  480. package/kits/colagem/regras/movimento.md +18 -0
  481. package/kits/colagem/regras/ritmo.md +15 -0
  482. package/kits/colagem/regras/som.md +18 -0
  483. package/kits/colagem/regras/tipografia.md +18 -0
  484. package/kits/contagem/SKILL.md +52 -0
  485. package/kits/contagem/assets/ASSETS.md +20 -0
  486. package/kits/contagem/assets/fontes/OFL-BigShouldersDisplay.txt +93 -0
  487. package/kits/contagem/assets/fontes/OFL-SpaceMono.txt +93 -0
  488. package/kits/contagem/assets/fontes/bigshoulders.woff2 +0 -0
  489. package/kits/contagem/assets/fontes/spacemono.woff2 +0 -0
  490. package/kits/contagem/assets/sons/assinatura.mp3 +0 -0
  491. package/kits/contagem/assets/sons/clique.mp3 +0 -0
  492. package/kits/contagem/assets/sons/confete.mp3 +0 -0
  493. package/kits/contagem/assets/sons/impacto.mp3 +0 -0
  494. package/kits/contagem/assets/sons/pop-cartao.mp3 +0 -0
  495. package/kits/contagem/assets/sons/pop-palavra.mp3 +0 -0
  496. package/kits/contagem/assets/sons/subida.mp3 +0 -0
  497. package/kits/contagem/assets/sons/swoosh.mp3 +0 -0
  498. package/kits/contagem/assets/sons/tick.mp3 +0 -0
  499. package/kits/contagem/assets/sons/whoosh-entra.mp3 +0 -0
  500. package/kits/contagem/assets/sons/whoosh-sai.mp3 +0 -0
  501. package/kits/contagem/assets/trilha/pulso-128bpm.mp3 +0 -0
  502. package/kits/contagem/capa.jpg +0 -0
  503. package/kits/contagem/elementos/AnelTempo.tsx +36 -0
  504. package/kits/contagem/elementos/BarraDias.tsx +41 -0
  505. package/kits/contagem/elementos/Camera.tsx +21 -0
  506. package/kits/contagem/elementos/CarimboData.tsx +37 -0
  507. package/kits/contagem/elementos/Cena.tsx +39 -0
  508. package/kits/contagem/elementos/Fundo.tsx +27 -0
  509. package/kits/contagem/elementos/Montagem.tsx +58 -0
  510. package/kits/contagem/elementos/NumeroRolando.tsx +49 -0
  511. package/kits/contagem/elementos/RelogioFlip.tsx +51 -0
  512. package/kits/contagem/elementos/Som.tsx +41 -0
  513. package/kits/contagem/elementos/base.ts +79 -0
  514. package/kits/contagem/elementos/index.ts +14 -0
  515. package/kits/contagem/exemplos/plano.json +48 -0
  516. package/kits/contagem/exemplos/roteiro.md +19 -0
  517. package/kits/contagem/preview.tsx +9 -0
  518. package/kits/contagem/receita.json +21 -0
  519. package/kits/contagem/regras/area-segura.md +16 -0
  520. package/kits/contagem/regras/cor.md +14 -0
  521. package/kits/contagem/regras/movimento.md +23 -0
  522. package/kits/contagem/regras/ritmo.md +15 -0
  523. package/kits/contagem/regras/som.md +21 -0
  524. package/kits/contagem/regras/tipografia.md +16 -0
  525. package/kits/convite-evento/SKILL.md +53 -0
  526. package/kits/convite-evento/assets/ASSETS.md +19 -0
  527. package/kits/convite-evento/assets/fontes/OFL-InstrumentSerif.txt +93 -0
  528. package/kits/convite-evento/assets/fontes/OFL-Unbounded.txt +93 -0
  529. package/kits/convite-evento/assets/fontes/instrumentserif-i.woff2 +0 -0
  530. package/kits/convite-evento/assets/fontes/unbounded.woff2 +0 -0
  531. package/kits/convite-evento/assets/sons/assinatura.mp3 +0 -0
  532. package/kits/convite-evento/assets/sons/clique.mp3 +0 -0
  533. package/kits/convite-evento/assets/sons/confete.mp3 +0 -0
  534. package/kits/convite-evento/assets/sons/impacto.mp3 +0 -0
  535. package/kits/convite-evento/assets/sons/pop-cartao.mp3 +0 -0
  536. package/kits/convite-evento/assets/sons/pop-palavra.mp3 +0 -0
  537. package/kits/convite-evento/assets/sons/subida.mp3 +0 -0
  538. package/kits/convite-evento/assets/sons/swoosh.mp3 +0 -0
  539. package/kits/convite-evento/assets/sons/whoosh-entra.mp3 +0 -0
  540. package/kits/convite-evento/assets/sons/whoosh-sai.mp3 +0 -0
  541. package/kits/convite-evento/assets/trilha/festa-112bpm.mp3 +0 -0
  542. package/kits/convite-evento/capa.jpg +0 -0
  543. package/kits/convite-evento/elementos/BotaoInscricao.tsx +36 -0
  544. package/kits/convite-evento/elementos/Camera.tsx +21 -0
  545. package/kits/convite-evento/elementos/Cena.tsx +39 -0
  546. package/kits/convite-evento/elementos/DataGigante.tsx +37 -0
  547. package/kits/convite-evento/elementos/Fundo.tsx +30 -0
  548. package/kits/convite-evento/elementos/IngressoBilhete.tsx +40 -0
  549. package/kits/convite-evento/elementos/LugarGigante.tsx +38 -0
  550. package/kits/convite-evento/elementos/Montagem.tsx +59 -0
  551. package/kits/convite-evento/elementos/SeloRotativo.tsx +32 -0
  552. package/kits/convite-evento/elementos/Som.tsx +40 -0
  553. package/kits/convite-evento/elementos/TituloEvento.tsx +33 -0
  554. package/kits/convite-evento/elementos/base.ts +82 -0
  555. package/kits/convite-evento/elementos/index.ts +15 -0
  556. package/kits/convite-evento/exemplos/plano.json +49 -0
  557. package/kits/convite-evento/exemplos/roteiro.md +19 -0
  558. package/kits/convite-evento/preview.tsx +9 -0
  559. package/kits/convite-evento/receita.json +21 -0
  560. package/kits/convite-evento/regras/area-segura.md +20 -0
  561. package/kits/convite-evento/regras/cor.md +13 -0
  562. package/kits/convite-evento/regras/movimento.md +20 -0
  563. package/kits/convite-evento/regras/ritmo.md +15 -0
  564. package/kits/convite-evento/regras/som.md +20 -0
  565. package/kits/convite-evento/regras/tipografia.md +18 -0
  566. package/kits/corte-podcast/SKILL.md +53 -0
  567. package/kits/corte-podcast/assets/ASSETS.md +19 -0
  568. package/kits/corte-podcast/assets/fontes/OFL-Anton.txt +93 -0
  569. package/kits/corte-podcast/assets/fontes/OFL-IBMPlexMono.txt +93 -0
  570. package/kits/corte-podcast/assets/fontes/anton.woff2 +0 -0
  571. package/kits/corte-podcast/assets/fontes/plexmono.woff2 +0 -0
  572. package/kits/corte-podcast/assets/sons/assinatura.mp3 +0 -0
  573. package/kits/corte-podcast/assets/sons/clique.mp3 +0 -0
  574. package/kits/corte-podcast/assets/sons/impacto.mp3 +0 -0
  575. package/kits/corte-podcast/assets/sons/pop-cartao.mp3 +0 -0
  576. package/kits/corte-podcast/assets/sons/pop-palavra.mp3 +0 -0
  577. package/kits/corte-podcast/assets/sons/subida.mp3 +0 -0
  578. package/kits/corte-podcast/assets/sons/swoosh.mp3 +0 -0
  579. package/kits/corte-podcast/assets/sons/tick.mp3 +0 -0
  580. package/kits/corte-podcast/assets/sons/whoosh-entra.mp3 +0 -0
  581. package/kits/corte-podcast/assets/sons/whoosh-sai.mp3 +0 -0
  582. package/kits/corte-podcast/assets/trilha/lofi-pulso-100bpm.mp3 +0 -0
  583. package/kits/corte-podcast/capa.jpg +0 -0
  584. package/kits/corte-podcast/elementos/BarraEpisodio.tsx +43 -0
  585. package/kits/corte-podcast/elementos/Camera.tsx +21 -0
  586. package/kits/corte-podcast/elementos/CartaoConvidado.tsx +32 -0
  587. package/kits/corte-podcast/elementos/Cena.tsx +41 -0
  588. package/kits/corte-podcast/elementos/CitacaoGrande.tsx +42 -0
  589. package/kits/corte-podcast/elementos/Fundo.tsx +27 -0
  590. package/kits/corte-podcast/elementos/LegendaKaraoke.tsx +32 -0
  591. package/kits/corte-podcast/elementos/Montagem.tsx +59 -0
  592. package/kits/corte-podcast/elementos/OndaAudio.tsx +41 -0
  593. package/kits/corte-podcast/elementos/SeloEpisodio.tsx +33 -0
  594. package/kits/corte-podcast/elementos/Som.tsx +40 -0
  595. package/kits/corte-podcast/elementos/base.ts +82 -0
  596. package/kits/corte-podcast/elementos/index.ts +15 -0
  597. package/kits/corte-podcast/exemplos/plano.json +62 -0
  598. package/kits/corte-podcast/exemplos/roteiro.md +20 -0
  599. package/kits/corte-podcast/preview.tsx +9 -0
  600. package/kits/corte-podcast/receita.json +21 -0
  601. package/kits/corte-podcast/regras/area-segura.md +18 -0
  602. package/kits/corte-podcast/regras/cor.md +15 -0
  603. package/kits/corte-podcast/regras/movimento.md +18 -0
  604. package/kits/corte-podcast/regras/ritmo.md +16 -0
  605. package/kits/corte-podcast/regras/som.md +20 -0
  606. package/kits/corte-podcast/regras/tipografia.md +16 -0
  607. package/kits/cubos/SKILL.md +51 -0
  608. package/kits/cubos/assets/ASSETS.md +21 -0
  609. package/kits/cubos/assets/fontes/OFL-ArchivoBlack.txt +92 -0
  610. package/kits/cubos/assets/fontes/OFL-DMSans.txt +92 -0
  611. package/kits/cubos/assets/fontes/archivoblack-latin.woff2 +0 -0
  612. package/kits/cubos/assets/fontes/dmsans-latin.woff2 +0 -0
  613. package/kits/cubos/assets/sons/assinatura.mp3 +0 -0
  614. package/kits/cubos/assets/sons/bloco.mp3 +0 -0
  615. package/kits/cubos/assets/sons/desmonta.mp3 +0 -0
  616. package/kits/cubos/assets/sons/encaixa.mp3 +0 -0
  617. package/kits/cubos/assets/sons/estala.mp3 +0 -0
  618. package/kits/cubos/assets/sons/gira.mp3 +0 -0
  619. package/kits/cubos/assets/sons/queda.mp3 +0 -0
  620. package/kits/cubos/assets/sons/whoosh.mp3 +0 -0
  621. package/kits/cubos/assets/trilha/calma-com-punch-108bpm.mp3 +0 -0
  622. package/kits/cubos/capa.jpg +0 -0
  623. package/kits/cubos/elementos/AssinaturaMarca.tsx +29 -0
  624. package/kits/cubos/elementos/Camera.tsx +22 -0
  625. package/kits/cubos/elementos/Cena.tsx +48 -0
  626. package/kits/cubos/elementos/Cubo.tsx +40 -0
  627. package/kits/cubos/elementos/CuboGiratorio.tsx +37 -0
  628. package/kits/cubos/elementos/Fundo.tsx +15 -0
  629. package/kits/cubos/elementos/Montagem.tsx +67 -0
  630. package/kits/cubos/elementos/MontagemDeCubos.tsx +58 -0
  631. package/kits/cubos/elementos/PlacaBloco.tsx +29 -0
  632. package/kits/cubos/elementos/Som.tsx +33 -0
  633. package/kits/cubos/elementos/TorreDeCubos.tsx +39 -0
  634. package/kits/cubos/elementos/base.ts +97 -0
  635. package/kits/cubos/elementos/index.ts +15 -0
  636. package/kits/cubos/exemplos/logo-encaixa.svg +1 -0
  637. package/kits/cubos/exemplos/plano.json +45 -0
  638. package/kits/cubos/exemplos/roteiro.md +20 -0
  639. package/kits/cubos/preview.tsx +12 -0
  640. package/kits/cubos/receita.json +151 -0
  641. package/kits/cubos/regras/area-segura.md +18 -0
  642. package/kits/cubos/regras/cor.md +23 -0
  643. package/kits/cubos/regras/movimento.md +17 -0
  644. package/kits/cubos/regras/ritmo.md +14 -0
  645. package/kits/cubos/regras/som.md +20 -0
  646. package/kits/cubos/regras/tipografia.md +15 -0
  647. package/kits/dashboard-dados/SKILL.md +51 -0
  648. package/kits/dashboard-dados/assets/ASSETS.md +18 -0
  649. package/kits/dashboard-dados/assets/fontes/OFL-IBM-Plex-Mono.txt +93 -0
  650. package/kits/dashboard-dados/assets/fontes/OFL-Montserrat.txt +93 -0
  651. package/kits/dashboard-dados/assets/fontes/montserrat.woff2 +0 -0
  652. package/kits/dashboard-dados/assets/fontes/plex-mono.woff2 +0 -0
  653. package/kits/dashboard-dados/assets/sons/assinatura.mp3 +0 -0
  654. package/kits/dashboard-dados/assets/sons/clique.mp3 +0 -0
  655. package/kits/dashboard-dados/assets/sons/impacto.mp3 +0 -0
  656. package/kits/dashboard-dados/assets/sons/pop-cartao.mp3 +0 -0
  657. package/kits/dashboard-dados/assets/sons/pop-palavra.mp3 +0 -0
  658. package/kits/dashboard-dados/assets/sons/subida.mp3 +0 -0
  659. package/kits/dashboard-dados/assets/sons/swoosh.mp3 +0 -0
  660. package/kits/dashboard-dados/assets/sons/whoosh-entra.mp3 +0 -0
  661. package/kits/dashboard-dados/assets/sons/whoosh-sai.mp3 +0 -0
  662. package/kits/dashboard-dados/assets/trilha/trilha.mp3 +0 -0
  663. package/kits/dashboard-dados/capa.jpg +0 -0
  664. package/kits/dashboard-dados/elementos/AssinaturaMarca.tsx +19 -0
  665. package/kits/dashboard-dados/elementos/BarrasCrescendo.tsx +27 -0
  666. package/kits/dashboard-dados/elementos/Camera.tsx +23 -0
  667. package/kits/dashboard-dados/elementos/Cena.tsx +46 -0
  668. package/kits/dashboard-dados/elementos/Fundo.tsx +12 -0
  669. package/kits/dashboard-dados/elementos/LinhaTendencia.tsx +29 -0
  670. package/kits/dashboard-dados/elementos/Montagem.tsx +60 -0
  671. package/kits/dashboard-dados/elementos/NumeroGigante.tsx +21 -0
  672. package/kits/dashboard-dados/elementos/RankingBarras.tsx +27 -0
  673. package/kits/dashboard-dados/elementos/RoscaDados.tsx +39 -0
  674. package/kits/dashboard-dados/elementos/Som.tsx +39 -0
  675. package/kits/dashboard-dados/elementos/base.ts +87 -0
  676. package/kits/dashboard-dados/elementos/index.ts +16 -0
  677. package/kits/dashboard-dados/exemplos/logo-radar.svg +1 -0
  678. package/kits/dashboard-dados/exemplos/plano.json +325 -0
  679. package/kits/dashboard-dados/exemplos/roteiro.md +20 -0
  680. package/kits/dashboard-dados/preview.tsx +12 -0
  681. package/kits/dashboard-dados/receita.json +173 -0
  682. package/kits/dashboard-dados/regras/area-segura.md +13 -0
  683. package/kits/dashboard-dados/regras/cor.md +17 -0
  684. package/kits/dashboard-dados/regras/movimento.md +17 -0
  685. package/kits/dashboard-dados/regras/ritmo.md +14 -0
  686. package/kits/dashboard-dados/regras/som.md +18 -0
  687. package/kits/dashboard-dados/regras/tipografia.md +16 -0
  688. package/kits/depoimento/SKILL.md +54 -0
  689. package/kits/depoimento/assets/ASSETS.md +20 -0
  690. package/kits/depoimento/assets/fontes/OFL-Newsreader.txt +93 -0
  691. package/kits/depoimento/assets/fontes/OFL-SpaceGrotesk.txt +93 -0
  692. package/kits/depoimento/assets/fontes/newsreader-i.woff2 +0 -0
  693. package/kits/depoimento/assets/fontes/spacegrotesk.woff2 +0 -0
  694. package/kits/depoimento/assets/sons/assinatura.mp3 +0 -0
  695. package/kits/depoimento/assets/sons/clique.mp3 +0 -0
  696. package/kits/depoimento/assets/sons/estrela.mp3 +0 -0
  697. package/kits/depoimento/assets/sons/impacto.mp3 +0 -0
  698. package/kits/depoimento/assets/sons/pop-cartao.mp3 +0 -0
  699. package/kits/depoimento/assets/sons/pop-palavra.mp3 +0 -0
  700. package/kits/depoimento/assets/sons/subida.mp3 +0 -0
  701. package/kits/depoimento/assets/sons/swoosh.mp3 +0 -0
  702. package/kits/depoimento/assets/sons/verificado.mp3 +0 -0
  703. package/kits/depoimento/assets/sons/whoosh-entra.mp3 +0 -0
  704. package/kits/depoimento/assets/sons/whoosh-sai.mp3 +0 -0
  705. package/kits/depoimento/assets/trilha/calor-104bpm.mp3 +0 -0
  706. package/kits/depoimento/capa.jpg +0 -0
  707. package/kits/depoimento/elementos/Avatar.tsx +37 -0
  708. package/kits/depoimento/elementos/Camera.tsx +21 -0
  709. package/kits/depoimento/elementos/CartaoDepoimento.tsx +69 -0
  710. package/kits/depoimento/elementos/Cena.tsx +39 -0
  711. package/kits/depoimento/elementos/Estrelas.tsx +34 -0
  712. package/kits/depoimento/elementos/FaixaAvatares.tsx +41 -0
  713. package/kits/depoimento/elementos/Fundo.tsx +23 -0
  714. package/kits/depoimento/elementos/Montagem.tsx +60 -0
  715. package/kits/depoimento/elementos/NotaGigante.tsx +38 -0
  716. package/kits/depoimento/elementos/PilhaCartoes.tsx +37 -0
  717. package/kits/depoimento/elementos/SeloVerificado.tsx +29 -0
  718. package/kits/depoimento/elementos/Som.tsx +41 -0
  719. package/kits/depoimento/elementos/base.ts +83 -0
  720. package/kits/depoimento/elementos/index.ts +16 -0
  721. package/kits/depoimento/exemplos/plano.json +57 -0
  722. package/kits/depoimento/exemplos/roteiro.md +19 -0
  723. package/kits/depoimento/preview.tsx +9 -0
  724. package/kits/depoimento/receita.json +21 -0
  725. package/kits/depoimento/regras/area-segura.md +17 -0
  726. package/kits/depoimento/regras/cor.md +16 -0
  727. package/kits/depoimento/regras/movimento.md +20 -0
  728. package/kits/depoimento/regras/ritmo.md +15 -0
  729. package/kits/depoimento/regras/som.md +21 -0
  730. package/kits/depoimento/regras/tipografia.md +17 -0
  731. package/kits/estudio/package.json +13 -0
  732. package/kits/estudio/render.mjs +48 -0
  733. package/kits/infografico/SKILL.md +54 -0
  734. package/kits/infografico/assets/ASSETS.md +19 -0
  735. package/kits/infografico/assets/fontes/OFL-Caveat.txt +93 -0
  736. package/kits/infografico/assets/fontes/OFL-Outfit.txt +93 -0
  737. package/kits/infografico/assets/fontes/caveat.woff2 +0 -0
  738. package/kits/infografico/assets/fontes/outfit.woff2 +0 -0
  739. package/kits/infografico/assets/sons/assinatura.mp3 +0 -0
  740. package/kits/infografico/assets/sons/clique.mp3 +0 -0
  741. package/kits/infografico/assets/sons/impacto.mp3 +0 -0
  742. package/kits/infografico/assets/sons/pop-cartao.mp3 +0 -0
  743. package/kits/infografico/assets/sons/pop-palavra.mp3 +0 -0
  744. package/kits/infografico/assets/sons/subida.mp3 +0 -0
  745. package/kits/infografico/assets/sons/swoosh.mp3 +0 -0
  746. package/kits/infografico/assets/sons/traco.mp3 +0 -0
  747. package/kits/infografico/assets/sons/whoosh-entra.mp3 +0 -0
  748. package/kits/infografico/assets/sons/whoosh-sai.mp3 +0 -0
  749. package/kits/infografico/assets/trilha/explica-100bpm.mp3 +0 -0
  750. package/kits/infografico/capa.jpg +0 -0
  751. package/kits/infografico/elementos/Anotacao.tsx +34 -0
  752. package/kits/infografico/elementos/CadeiaPassos.tsx +49 -0
  753. package/kits/infografico/elementos/Camera.tsx +21 -0
  754. package/kits/infografico/elementos/Cena.tsx +39 -0
  755. package/kits/infografico/elementos/Fundo.tsx +23 -0
  756. package/kits/infografico/elementos/GraficoBarras.tsx +41 -0
  757. package/kits/infografico/elementos/Icone.tsx +35 -0
  758. package/kits/infografico/elementos/Montagem.tsx +60 -0
  759. package/kits/infografico/elementos/NoProcesso.tsx +33 -0
  760. package/kits/infografico/elementos/NumeroDestaque.tsx +35 -0
  761. package/kits/infografico/elementos/SetaCurva.tsx +33 -0
  762. package/kits/infografico/elementos/Som.tsx +40 -0
  763. package/kits/infografico/elementos/base.ts +80 -0
  764. package/kits/infografico/elementos/index.ts +16 -0
  765. package/kits/infografico/exemplos/plano.json +49 -0
  766. package/kits/infografico/exemplos/roteiro.md +19 -0
  767. package/kits/infografico/preview.tsx +9 -0
  768. package/kits/infografico/receita.json +21 -0
  769. package/kits/infografico/regras/area-segura.md +17 -0
  770. package/kits/infografico/regras/cor.md +15 -0
  771. package/kits/infografico/regras/movimento.md +20 -0
  772. package/kits/infografico/regras/ritmo.md +15 -0
  773. package/kits/infografico/regras/som.md +20 -0
  774. package/kits/infografico/regras/tipografia.md +16 -0
  775. package/kits/isometrico/SKILL.md +52 -0
  776. package/kits/isometrico/assets/ASSETS.md +18 -0
  777. package/kits/isometrico/assets/fontes/OFL-Archivo.txt +93 -0
  778. package/kits/isometrico/assets/fontes/OFL-Jost.txt +93 -0
  779. package/kits/isometrico/assets/fontes/archivo.woff2 +0 -0
  780. package/kits/isometrico/assets/fontes/jost.woff2 +0 -0
  781. package/kits/isometrico/assets/sons/assinatura.mp3 +0 -0
  782. package/kits/isometrico/assets/sons/clique.mp3 +0 -0
  783. package/kits/isometrico/assets/sons/impacto.mp3 +0 -0
  784. package/kits/isometrico/assets/sons/pop-cartao.mp3 +0 -0
  785. package/kits/isometrico/assets/sons/pop-palavra.mp3 +0 -0
  786. package/kits/isometrico/assets/sons/subida.mp3 +0 -0
  787. package/kits/isometrico/assets/sons/swoosh.mp3 +0 -0
  788. package/kits/isometrico/assets/sons/whoosh-entra.mp3 +0 -0
  789. package/kits/isometrico/assets/sons/whoosh-sai.mp3 +0 -0
  790. package/kits/isometrico/assets/trilha/trilha.mp3 +0 -0
  791. package/kits/isometrico/capa.jpg +0 -0
  792. package/kits/isometrico/elementos/AssinaturaMarca.tsx +24 -0
  793. package/kits/isometrico/elementos/BlocosMontando.tsx +36 -0
  794. package/kits/isometrico/elementos/Camera.tsx +23 -0
  795. package/kits/isometrico/elementos/Cena.tsx +46 -0
  796. package/kits/isometrico/elementos/CidadeDeDados.tsx +33 -0
  797. package/kits/isometrico/elementos/Fundo.tsx +13 -0
  798. package/kits/isometrico/elementos/LegendaPlaca.tsx +18 -0
  799. package/kits/isometrico/elementos/Montagem.tsx +60 -0
  800. package/kits/isometrico/elementos/RedeDeBlocos.tsx +41 -0
  801. package/kits/isometrico/elementos/Som.tsx +39 -0
  802. package/kits/isometrico/elementos/TextoNoChao.tsx +28 -0
  803. package/kits/isometrico/elementos/base.ts +86 -0
  804. package/kits/isometrico/elementos/index.ts +16 -0
  805. package/kits/isometrico/elementos/iso.tsx +49 -0
  806. package/kits/isometrico/exemplos/logo-nodo.svg +1 -0
  807. package/kits/isometrico/exemplos/plano.json +433 -0
  808. package/kits/isometrico/exemplos/roteiro.md +20 -0
  809. package/kits/isometrico/preview.tsx +12 -0
  810. package/kits/isometrico/receita.json +155 -0
  811. package/kits/isometrico/regras/area-segura.md +13 -0
  812. package/kits/isometrico/regras/cor.md +18 -0
  813. package/kits/isometrico/regras/movimento.md +16 -0
  814. package/kits/isometrico/regras/ritmo.md +13 -0
  815. package/kits/isometrico/regras/som.md +18 -0
  816. package/kits/isometrico/regras/tipografia.md +12 -0
  817. package/kits/jornal/SKILL.md +54 -0
  818. package/kits/jornal/assets/ASSETS.md +24 -0
  819. package/kits/jornal/assets/fontes/OFL-PlayfairDisplay.txt +93 -0
  820. package/kits/jornal/assets/fontes/OFL-UnifrakturMaguntia.txt +93 -0
  821. package/kits/jornal/assets/fontes/playfair-italic.woff2 +0 -0
  822. package/kits/jornal/assets/fontes/playfair.woff2 +0 -0
  823. package/kits/jornal/assets/fontes/unifraktur.woff2 +0 -0
  824. package/kits/jornal/assets/sons/assinatura.mp3 +0 -0
  825. package/kits/jornal/assets/sons/clique.mp3 +0 -0
  826. package/kits/jornal/assets/sons/impacto.mp3 +0 -0
  827. package/kits/jornal/assets/sons/pop-cartao.mp3 +0 -0
  828. package/kits/jornal/assets/sons/pop-palavra.mp3 +0 -0
  829. package/kits/jornal/assets/sons/subida.mp3 +0 -0
  830. package/kits/jornal/assets/sons/swoosh.mp3 +0 -0
  831. package/kits/jornal/assets/sons/whoosh-entra.mp3 +0 -0
  832. package/kits/jornal/assets/sons/whoosh-sai.mp3 +0 -0
  833. package/kits/jornal/assets/trilha/redacao-96bpm.mp3 +0 -0
  834. package/kits/jornal/capa.jpg +0 -0
  835. package/kits/jornal/elementos/AssinaturaMarca.tsx +25 -0
  836. package/kits/jornal/elementos/Cabecalho.tsx +21 -0
  837. package/kits/jornal/elementos/Camera.tsx +22 -0
  838. package/kits/jornal/elementos/Carimbo.tsx +18 -0
  839. package/kits/jornal/elementos/Cena.tsx +41 -0
  840. package/kits/jornal/elementos/Colunas.tsx +24 -0
  841. package/kits/jornal/elementos/FotoMeiaTinta.tsx +20 -0
  842. package/kits/jornal/elementos/Fundo.tsx +18 -0
  843. package/kits/jornal/elementos/JornalGirando.tsx +27 -0
  844. package/kits/jornal/elementos/Manchete.tsx +30 -0
  845. package/kits/jornal/elementos/Montagem.tsx +61 -0
  846. package/kits/jornal/elementos/Som.tsx +38 -0
  847. package/kits/jornal/elementos/Ticker.tsx +19 -0
  848. package/kits/jornal/elementos/base.ts +76 -0
  849. package/kits/jornal/elementos/index.ts +17 -0
  850. package/kits/jornal/exemplos/fotos/foto-03.jpg +0 -0
  851. package/kits/jornal/exemplos/fotos/foto-07.jpg +0 -0
  852. package/kits/jornal/exemplos/logo-esquina.svg +1 -0
  853. package/kits/jornal/exemplos/plano.json +48 -0
  854. package/kits/jornal/exemplos/roteiro.md +19 -0
  855. package/kits/jornal/preview.tsx +17 -0
  856. package/kits/jornal/receita.json +170 -0
  857. package/kits/jornal/regras/area-segura.md +19 -0
  858. package/kits/jornal/regras/cor.md +14 -0
  859. package/kits/jornal/regras/movimento.md +16 -0
  860. package/kits/jornal/regras/ritmo.md +15 -0
  861. package/kits/jornal/regras/som.md +21 -0
  862. package/kits/jornal/regras/tipografia.md +17 -0
  863. package/kits/legenda-viva/SKILL.md +52 -0
  864. package/kits/legenda-viva/assets/ASSETS.md +23 -0
  865. package/kits/legenda-viva/assets/fontes/OFL-Inter.txt +93 -0
  866. package/kits/legenda-viva/assets/fontes/OFL-Montserrat.txt +93 -0
  867. package/kits/legenda-viva/assets/fontes/inter.woff2 +0 -0
  868. package/kits/legenda-viva/assets/fontes/montserrat.woff2 +0 -0
  869. package/kits/legenda-viva/assets/sons/assinatura.mp3 +0 -0
  870. package/kits/legenda-viva/assets/sons/clique.mp3 +0 -0
  871. package/kits/legenda-viva/assets/sons/impacto.mp3 +0 -0
  872. package/kits/legenda-viva/assets/sons/pop-cartao.mp3 +0 -0
  873. package/kits/legenda-viva/assets/sons/pop-palavra.mp3 +0 -0
  874. package/kits/legenda-viva/assets/sons/subida.mp3 +0 -0
  875. package/kits/legenda-viva/assets/sons/swoosh.mp3 +0 -0
  876. package/kits/legenda-viva/assets/sons/whoosh-entra.mp3 +0 -0
  877. package/kits/legenda-viva/assets/sons/whoosh-sai.mp3 +0 -0
  878. package/kits/legenda-viva/assets/trilha/voz-118bpm.mp3 +0 -0
  879. package/kits/legenda-viva/capa.jpg +0 -0
  880. package/kits/legenda-viva/elementos/AssinaturaMarca.tsx +29 -0
  881. package/kits/legenda-viva/elementos/Camera.tsx +22 -0
  882. package/kits/legenda-viva/elementos/Cena.tsx +41 -0
  883. package/kits/legenda-viva/elementos/ChipTema.tsx +19 -0
  884. package/kits/legenda-viva/elementos/Fundo.tsx +6 -0
  885. package/kits/legenda-viva/elementos/LegendaCaixa.tsx +36 -0
  886. package/kits/legenda-viva/elementos/LegendaPalavra.tsx +32 -0
  887. package/kits/legenda-viva/elementos/Montagem.tsx +59 -0
  888. package/kits/legenda-viva/elementos/OndaVoz.tsx +23 -0
  889. package/kits/legenda-viva/elementos/PalavraGigante.tsx +18 -0
  890. package/kits/legenda-viva/elementos/QuadroFalante.tsx +17 -0
  891. package/kits/legenda-viva/elementos/Som.tsx +38 -0
  892. package/kits/legenda-viva/elementos/base.ts +73 -0
  893. package/kits/legenda-viva/elementos/index.ts +16 -0
  894. package/kits/legenda-viva/exemplos/fotos/foto-01.jpg +0 -0
  895. package/kits/legenda-viva/exemplos/fotos/foto-02.jpg +0 -0
  896. package/kits/legenda-viva/exemplos/fotos/foto-03.jpg +0 -0
  897. package/kits/legenda-viva/exemplos/fotos/foto-05.jpg +0 -0
  898. package/kits/legenda-viva/exemplos/logo-dica.svg +1 -0
  899. package/kits/legenda-viva/exemplos/plano.json +45 -0
  900. package/kits/legenda-viva/exemplos/roteiro.md +18 -0
  901. package/kits/legenda-viva/preview.tsx +19 -0
  902. package/kits/legenda-viva/receita.json +171 -0
  903. package/kits/legenda-viva/regras/area-segura.md +19 -0
  904. package/kits/legenda-viva/regras/cor.md +14 -0
  905. package/kits/legenda-viva/regras/movimento.md +16 -0
  906. package/kits/legenda-viva/regras/ritmo.md +15 -0
  907. package/kits/legenda-viva/regras/som.md +21 -0
  908. package/kits/legenda-viva/regras/tipografia.md +16 -0
  909. package/kits/luxo/SKILL.md +55 -0
  910. package/kits/luxo/assets/ASSETS.md +20 -0
  911. package/kits/luxo/assets/fontes/OFL-CormorantGaramond.txt +93 -0
  912. package/kits/luxo/assets/fontes/OFL-Jost.txt +93 -0
  913. package/kits/luxo/assets/fontes/cormorant-i.woff2 +0 -0
  914. package/kits/luxo/assets/fontes/cormorant.woff2 +0 -0
  915. package/kits/luxo/assets/fontes/jost.woff2 +0 -0
  916. package/kits/luxo/assets/sons/assinatura.mp3 +0 -0
  917. package/kits/luxo/assets/sons/clique.mp3 +0 -0
  918. package/kits/luxo/assets/sons/impacto.mp3 +0 -0
  919. package/kits/luxo/assets/sons/pop-cartao.mp3 +0 -0
  920. package/kits/luxo/assets/sons/pop-palavra.mp3 +0 -0
  921. package/kits/luxo/assets/sons/sino.mp3 +0 -0
  922. package/kits/luxo/assets/sons/subida.mp3 +0 -0
  923. package/kits/luxo/assets/sons/swoosh.mp3 +0 -0
  924. package/kits/luxo/assets/sons/whoosh-entra.mp3 +0 -0
  925. package/kits/luxo/assets/sons/whoosh-sai.mp3 +0 -0
  926. package/kits/luxo/assets/trilha/ambar-78bpm.mp3 +0 -0
  927. package/kits/luxo/capa.jpg +0 -0
  928. package/kits/luxo/elementos/Camera.tsx +21 -0
  929. package/kits/luxo/elementos/Cena.tsx +36 -0
  930. package/kits/luxo/elementos/ConviteOuro.tsx +34 -0
  931. package/kits/luxo/elementos/Fundo.tsx +26 -0
  932. package/kits/luxo/elementos/LegendaFina.tsx +25 -0
  933. package/kits/luxo/elementos/LinhaOuro.tsx +24 -0
  934. package/kits/luxo/elementos/MolduraArco.tsx +36 -0
  935. package/kits/luxo/elementos/Monograma.tsx +35 -0
  936. package/kits/luxo/elementos/Montagem.tsx +59 -0
  937. package/kits/luxo/elementos/Som.tsx +40 -0
  938. package/kits/luxo/elementos/TituloSerifa.tsx +35 -0
  939. package/kits/luxo/elementos/base.ts +85 -0
  940. package/kits/luxo/elementos/index.ts +15 -0
  941. package/kits/luxo/exemplos/fotos/foto-07.jpg +0 -0
  942. package/kits/luxo/exemplos/fotos/foto-08.jpg +0 -0
  943. package/kits/luxo/exemplos/plano.json +145 -0
  944. package/kits/luxo/exemplos/roteiro.md +18 -0
  945. package/kits/luxo/preview.tsx +13 -0
  946. package/kits/luxo/receita.json +18 -0
  947. package/kits/luxo/regras/area-segura.md +16 -0
  948. package/kits/luxo/regras/cor.md +16 -0
  949. package/kits/luxo/regras/movimento.md +19 -0
  950. package/kits/luxo/regras/ritmo.md +14 -0
  951. package/kits/luxo/regras/som.md +21 -0
  952. package/kits/luxo/regras/tipografia.md +17 -0
  953. package/kits/manifest.json +552 -0
  954. package/kits/mapa/SKILL.md +54 -0
  955. package/kits/mapa/assets/ASSETS.md +20 -0
  956. package/kits/mapa/assets/fontes/OFL-DMMono.txt +93 -0
  957. package/kits/mapa/assets/fontes/OFL-DMSans.txt +93 -0
  958. package/kits/mapa/assets/fontes/dmmono.woff2 +0 -0
  959. package/kits/mapa/assets/fontes/dmsans.woff2 +0 -0
  960. package/kits/mapa/assets/sons/assinatura.mp3 +0 -0
  961. package/kits/mapa/assets/sons/clique.mp3 +0 -0
  962. package/kits/mapa/assets/sons/impacto.mp3 +0 -0
  963. package/kits/mapa/assets/sons/pop-cartao.mp3 +0 -0
  964. package/kits/mapa/assets/sons/pop-palavra.mp3 +0 -0
  965. package/kits/mapa/assets/sons/quique.mp3 +0 -0
  966. package/kits/mapa/assets/sons/subida.mp3 +0 -0
  967. package/kits/mapa/assets/sons/swoosh.mp3 +0 -0
  968. package/kits/mapa/assets/sons/traco.mp3 +0 -0
  969. package/kits/mapa/assets/sons/whoosh-entra.mp3 +0 -0
  970. package/kits/mapa/assets/sons/whoosh-sai.mp3 +0 -0
  971. package/kits/mapa/assets/trilha/rota-100bpm.mp3 +0 -0
  972. package/kits/mapa/capa.jpg +0 -0
  973. package/kits/mapa/elementos/Camera.tsx +21 -0
  974. package/kits/mapa/elementos/CartaoEndereco.tsx +40 -0
  975. package/kits/mapa/elementos/Cena.tsx +41 -0
  976. package/kits/mapa/elementos/ChipTempo.tsx +29 -0
  977. package/kits/mapa/elementos/Fundo.tsx +25 -0
  978. package/kits/mapa/elementos/MapaBase.tsx +63 -0
  979. package/kits/mapa/elementos/Montagem.tsx +59 -0
  980. package/kits/mapa/elementos/Pino.tsx +38 -0
  981. package/kits/mapa/elementos/RotaAnimada.tsx +38 -0
  982. package/kits/mapa/elementos/Som.tsx +41 -0
  983. package/kits/mapa/elementos/TituloLocal.tsx +38 -0
  984. package/kits/mapa/elementos/base.ts +89 -0
  985. package/kits/mapa/elementos/index.ts +15 -0
  986. package/kits/mapa/exemplos/plano.json +48 -0
  987. package/kits/mapa/exemplos/roteiro.md +19 -0
  988. package/kits/mapa/preview.tsx +9 -0
  989. package/kits/mapa/receita.json +21 -0
  990. package/kits/mapa/regras/area-segura.md +15 -0
  991. package/kits/mapa/regras/cor.md +18 -0
  992. package/kits/mapa/regras/movimento.md +21 -0
  993. package/kits/mapa/regras/ritmo.md +15 -0
  994. package/kits/mapa/regras/som.md +21 -0
  995. package/kits/mapa/regras/tipografia.md +16 -0
  996. package/kits/massinha/SKILL.md +53 -0
  997. package/kits/massinha/assets/ASSETS.md +18 -0
  998. package/kits/massinha/assets/fontes/OFL-chewy.txt +93 -0
  999. package/kits/massinha/assets/fontes/OFL-nunito-800.txt +93 -0
  1000. package/kits/massinha/assets/fontes/chewy.woff2 +0 -0
  1001. package/kits/massinha/assets/fontes/nunito-800.woff2 +0 -0
  1002. package/kits/massinha/assets/sons/assinatura.mp3 +0 -0
  1003. package/kits/massinha/assets/sons/clique.mp3 +0 -0
  1004. package/kits/massinha/assets/sons/impacto.mp3 +0 -0
  1005. package/kits/massinha/assets/sons/pop-cartao.mp3 +0 -0
  1006. package/kits/massinha/assets/sons/pop-palavra.mp3 +0 -0
  1007. package/kits/massinha/assets/sons/subida.mp3 +0 -0
  1008. package/kits/massinha/assets/sons/swoosh.mp3 +0 -0
  1009. package/kits/massinha/assets/sons/tick.mp3 +0 -0
  1010. package/kits/massinha/assets/sons/whoosh-entra.mp3 +0 -0
  1011. package/kits/massinha/assets/sons/whoosh-sai.mp3 +0 -0
  1012. package/kits/massinha/assets/trilha/trilha.mp3 +0 -0
  1013. package/kits/massinha/capa.jpg +0 -0
  1014. package/kits/massinha/elementos/AssinaturaMarca.tsx +20 -0
  1015. package/kits/massinha/elementos/BichinhoMassa.tsx +30 -0
  1016. package/kits/massinha/elementos/BolasMassa.tsx +25 -0
  1017. package/kits/massinha/elementos/Camera.tsx +21 -0
  1018. package/kits/massinha/elementos/Cena.tsx +36 -0
  1019. package/kits/massinha/elementos/FormaMassa.tsx +23 -0
  1020. package/kits/massinha/elementos/Fundo.tsx +12 -0
  1021. package/kits/massinha/elementos/ListaMassa.tsx +19 -0
  1022. package/kits/massinha/elementos/Montagem.tsx +56 -0
  1023. package/kits/massinha/elementos/Overlay.tsx +11 -0
  1024. package/kits/massinha/elementos/PlacaMassa.tsx +24 -0
  1025. package/kits/massinha/elementos/Som.tsx +30 -0
  1026. package/kits/massinha/elementos/TituloMassa.tsx +31 -0
  1027. package/kits/massinha/elementos/argila.ts +21 -0
  1028. package/kits/massinha/elementos/base.ts +79 -0
  1029. package/kits/massinha/elementos/index.ts +17 -0
  1030. package/kits/massinha/exemplos/plano.json +220 -0
  1031. package/kits/massinha/exemplos/roteiro.md +20 -0
  1032. package/kits/massinha/preview.tsx +12 -0
  1033. package/kits/massinha/receita.json +170 -0
  1034. package/kits/massinha/regras/area-segura.md +15 -0
  1035. package/kits/massinha/regras/cor.md +18 -0
  1036. package/kits/massinha/regras/movimento.md +17 -0
  1037. package/kits/massinha/regras/ritmo.md +15 -0
  1038. package/kits/massinha/regras/som.md +17 -0
  1039. package/kits/massinha/regras/tipografia.md +18 -0
  1040. package/kits/memphis/SKILL.md +52 -0
  1041. package/kits/memphis/assets/ASSETS.md +18 -0
  1042. package/kits/memphis/assets/fontes/OFL-bowlby-one.txt +93 -0
  1043. package/kits/memphis/assets/fontes/OFL-dm-sans-800.txt +93 -0
  1044. package/kits/memphis/assets/fontes/bowlby-one.woff2 +0 -0
  1045. package/kits/memphis/assets/fontes/dm-sans-800.woff2 +0 -0
  1046. package/kits/memphis/assets/sons/assinatura.mp3 +0 -0
  1047. package/kits/memphis/assets/sons/clique.mp3 +0 -0
  1048. package/kits/memphis/assets/sons/impacto.mp3 +0 -0
  1049. package/kits/memphis/assets/sons/pop-cartao.mp3 +0 -0
  1050. package/kits/memphis/assets/sons/pop-palavra.mp3 +0 -0
  1051. package/kits/memphis/assets/sons/subida.mp3 +0 -0
  1052. package/kits/memphis/assets/sons/swoosh.mp3 +0 -0
  1053. package/kits/memphis/assets/sons/tick.mp3 +0 -0
  1054. package/kits/memphis/assets/sons/whoosh-entra.mp3 +0 -0
  1055. package/kits/memphis/assets/sons/whoosh-sai.mp3 +0 -0
  1056. package/kits/memphis/assets/trilha/trilha.mp3 +0 -0
  1057. package/kits/memphis/capa.jpg +0 -0
  1058. package/kits/memphis/elementos/AssinaturaMarca.tsx +20 -0
  1059. package/kits/memphis/elementos/Camera.tsx +21 -0
  1060. package/kits/memphis/elementos/CartaoMemphis.tsx +16 -0
  1061. package/kits/memphis/elementos/Cena.tsx +36 -0
  1062. package/kits/memphis/elementos/FitaMarquee.tsx +21 -0
  1063. package/kits/memphis/elementos/FormasMemphis.tsx +46 -0
  1064. package/kits/memphis/elementos/Fundo.tsx +15 -0
  1065. package/kits/memphis/elementos/ListaPilulas.tsx +17 -0
  1066. package/kits/memphis/elementos/Montagem.tsx +56 -0
  1067. package/kits/memphis/elementos/NumeroGigante.tsx +19 -0
  1068. package/kits/memphis/elementos/Overlay.tsx +23 -0
  1069. package/kits/memphis/elementos/Som.tsx +30 -0
  1070. package/kits/memphis/elementos/TituloMemphis.tsx +28 -0
  1071. package/kits/memphis/elementos/base.ts +78 -0
  1072. package/kits/memphis/elementos/index.ts +17 -0
  1073. package/kits/memphis/exemplos/plano.json +314 -0
  1074. package/kits/memphis/exemplos/roteiro.md +20 -0
  1075. package/kits/memphis/preview.tsx +12 -0
  1076. package/kits/memphis/receita.json +174 -0
  1077. package/kits/memphis/regras/area-segura.md +14 -0
  1078. package/kits/memphis/regras/cor.md +17 -0
  1079. package/kits/memphis/regras/movimento.md +18 -0
  1080. package/kits/memphis/regras/ritmo.md +15 -0
  1081. package/kits/memphis/regras/som.md +18 -0
  1082. package/kits/memphis/regras/tipografia.md +19 -0
  1083. package/kits/metal-liquido/SKILL.md +51 -0
  1084. package/kits/metal-liquido/assets/ASSETS.md +21 -0
  1085. package/kits/metal-liquido/assets/fontes/OFL-SpaceGrotesk.txt +92 -0
  1086. package/kits/metal-liquido/assets/fontes/OFL-Unbounded.txt +92 -0
  1087. package/kits/metal-liquido/assets/fontes/grotesk-latin.woff2 +0 -0
  1088. package/kits/metal-liquido/assets/fontes/unbounded-latin.woff2 +0 -0
  1089. package/kits/metal-liquido/assets/sons/assinatura.mp3 +0 -0
  1090. package/kits/metal-liquido/assets/sons/clique.mp3 +0 -0
  1091. package/kits/metal-liquido/assets/sons/cromo.mp3 +0 -0
  1092. package/kits/metal-liquido/assets/sons/liquido.mp3 +0 -0
  1093. package/kits/metal-liquido/assets/sons/quique.mp3 +0 -0
  1094. package/kits/metal-liquido/assets/sons/subida.mp3 +0 -0
  1095. package/kits/metal-liquido/assets/sons/varre.mp3 +0 -0
  1096. package/kits/metal-liquido/assets/sons/whoosh.mp3 +0 -0
  1097. package/kits/metal-liquido/assets/trilha/sombrio-114bpm.mp3 +0 -0
  1098. package/kits/metal-liquido/capa.jpg +0 -0
  1099. package/kits/metal-liquido/elementos/AnelCromo.tsx +28 -0
  1100. package/kits/metal-liquido/elementos/AssinaturaMarca.tsx +26 -0
  1101. package/kits/metal-liquido/elementos/BolhasCromadas.tsx +53 -0
  1102. package/kits/metal-liquido/elementos/Camera.tsx +22 -0
  1103. package/kits/metal-liquido/elementos/Cena.tsx +48 -0
  1104. package/kits/metal-liquido/elementos/EsferaCromo.tsx +32 -0
  1105. package/kits/metal-liquido/elementos/Fundo.tsx +20 -0
  1106. package/kits/metal-liquido/elementos/Montagem.tsx +67 -0
  1107. package/kits/metal-liquido/elementos/PilulaCromo.tsx +23 -0
  1108. package/kits/metal-liquido/elementos/Som.tsx +33 -0
  1109. package/kits/metal-liquido/elementos/TituloCromo.tsx +32 -0
  1110. package/kits/metal-liquido/elementos/base.ts +94 -0
  1111. package/kits/metal-liquido/elementos/index.ts +15 -0
  1112. package/kits/metal-liquido/exemplos/logo-mercurio.svg +1 -0
  1113. package/kits/metal-liquido/exemplos/plano.json +48 -0
  1114. package/kits/metal-liquido/exemplos/roteiro.md +20 -0
  1115. package/kits/metal-liquido/preview.tsx +12 -0
  1116. package/kits/metal-liquido/receita.json +173 -0
  1117. package/kits/metal-liquido/regras/area-segura.md +16 -0
  1118. package/kits/metal-liquido/regras/cor.md +23 -0
  1119. package/kits/metal-liquido/regras/movimento.md +18 -0
  1120. package/kits/metal-liquido/regras/ritmo.md +14 -0
  1121. package/kits/metal-liquido/regras/som.md +20 -0
  1122. package/kits/metal-liquido/regras/tipografia.md +15 -0
  1123. package/kits/minimal/SKILL.md +54 -0
  1124. package/kits/minimal/assets/ASSETS.md +19 -0
  1125. package/kits/minimal/assets/fontes/OFL-HankenGrotesk.txt +93 -0
  1126. package/kits/minimal/assets/fontes/OFL-SplineSansMono.txt +93 -0
  1127. package/kits/minimal/assets/fontes/hanken.woff2 +0 -0
  1128. package/kits/minimal/assets/fontes/splinemono.woff2 +0 -0
  1129. package/kits/minimal/assets/sons/assinatura.mp3 +0 -0
  1130. package/kits/minimal/assets/sons/clique.mp3 +0 -0
  1131. package/kits/minimal/assets/sons/impacto.mp3 +0 -0
  1132. package/kits/minimal/assets/sons/pop-cartao.mp3 +0 -0
  1133. package/kits/minimal/assets/sons/pop-palavra.mp3 +0 -0
  1134. package/kits/minimal/assets/sons/subida.mp3 +0 -0
  1135. package/kits/minimal/assets/sons/swoosh.mp3 +0 -0
  1136. package/kits/minimal/assets/sons/toque.mp3 +0 -0
  1137. package/kits/minimal/assets/sons/whoosh-entra.mp3 +0 -0
  1138. package/kits/minimal/assets/sons/whoosh-sai.mp3 +0 -0
  1139. package/kits/minimal/assets/trilha/vazio-90bpm.mp3 +0 -0
  1140. package/kits/minimal/capa.jpg +0 -0
  1141. package/kits/minimal/elementos/Camera.tsx +21 -0
  1142. package/kits/minimal/elementos/Cena.tsx +39 -0
  1143. package/kits/minimal/elementos/FormaMorph.tsx +44 -0
  1144. package/kits/minimal/elementos/FraseUnica.tsx +33 -0
  1145. package/kits/minimal/elementos/Fundo.tsx +20 -0
  1146. package/kits/minimal/elementos/LinhaFina.tsx +24 -0
  1147. package/kits/minimal/elementos/Montagem.tsx +59 -0
  1148. package/kits/minimal/elementos/NumeroSolo.tsx +33 -0
  1149. package/kits/minimal/elementos/PontoMovel.tsx +27 -0
  1150. package/kits/minimal/elementos/RodapeMinimal.tsx +26 -0
  1151. package/kits/minimal/elementos/Som.tsx +40 -0
  1152. package/kits/minimal/elementos/base.ts +80 -0
  1153. package/kits/minimal/elementos/index.ts +15 -0
  1154. package/kits/minimal/exemplos/plano.json +48 -0
  1155. package/kits/minimal/exemplos/roteiro.md +19 -0
  1156. package/kits/minimal/preview.tsx +9 -0
  1157. package/kits/minimal/receita.json +21 -0
  1158. package/kits/minimal/regras/area-segura.md +15 -0
  1159. package/kits/minimal/regras/cor.md +12 -0
  1160. package/kits/minimal/regras/movimento.md +20 -0
  1161. package/kits/minimal/regras/ritmo.md +15 -0
  1162. package/kits/minimal/regras/som.md +21 -0
  1163. package/kits/minimal/regras/tipografia.md +15 -0
  1164. package/kits/neon-cidade/SKILL.md +51 -0
  1165. package/kits/neon-cidade/assets/ASSETS.md +21 -0
  1166. package/kits/neon-cidade/assets/fontes/OFL-BarlowCondensed.txt +92 -0
  1167. package/kits/neon-cidade/assets/fontes/OFL-TiltNeon.txt +92 -0
  1168. package/kits/neon-cidade/assets/fontes/barlow-latin.woff2 +0 -0
  1169. package/kits/neon-cidade/assets/fontes/tiltneon-latin.woff2 +0 -0
  1170. package/kits/neon-cidade/assets/sons/assinatura.mp3 +0 -0
  1171. package/kits/neon-cidade/assets/sons/balanca.mp3 +0 -0
  1172. package/kits/neon-cidade/assets/sons/clique.mp3 +0 -0
  1173. package/kits/neon-cidade/assets/sons/impacto.mp3 +0 -0
  1174. package/kits/neon-cidade/assets/sons/liga.mp3 +0 -0
  1175. package/kits/neon-cidade/assets/sons/tick.mp3 +0 -0
  1176. package/kits/neon-cidade/assets/sons/whoosh.mp3 +0 -0
  1177. package/kits/neon-cidade/assets/sons/zumbido.mp3 +0 -0
  1178. package/kits/neon-cidade/assets/trilha/noite-100bpm.mp3 +0 -0
  1179. package/kits/neon-cidade/capa.jpg +0 -0
  1180. package/kits/neon-cidade/elementos/AssinaturaMarca.tsx +24 -0
  1181. package/kits/neon-cidade/elementos/CaixaLuminosa.tsx +40 -0
  1182. package/kits/neon-cidade/elementos/Camera.tsx +22 -0
  1183. package/kits/neon-cidade/elementos/Cena.tsx +48 -0
  1184. package/kits/neon-cidade/elementos/Chuva.tsx +23 -0
  1185. package/kits/neon-cidade/elementos/FormaNeon.tsx +42 -0
  1186. package/kits/neon-cidade/elementos/Fundo.tsx +18 -0
  1187. package/kits/neon-cidade/elementos/Horizonte.tsx +34 -0
  1188. package/kits/neon-cidade/elementos/LetreiroNeon.tsx +46 -0
  1189. package/kits/neon-cidade/elementos/Montagem.tsx +67 -0
  1190. package/kits/neon-cidade/elementos/Som.tsx +33 -0
  1191. package/kits/neon-cidade/elementos/base.ts +100 -0
  1192. package/kits/neon-cidade/elementos/index.ts +15 -0
  1193. package/kits/neon-cidade/exemplos/logo-fenix.svg +1 -0
  1194. package/kits/neon-cidade/exemplos/plano.json +50 -0
  1195. package/kits/neon-cidade/exemplos/roteiro.md +20 -0
  1196. package/kits/neon-cidade/preview.tsx +12 -0
  1197. package/kits/neon-cidade/receita.json +151 -0
  1198. package/kits/neon-cidade/regras/area-segura.md +18 -0
  1199. package/kits/neon-cidade/regras/cor.md +23 -0
  1200. package/kits/neon-cidade/regras/movimento.md +18 -0
  1201. package/kits/neon-cidade/regras/ritmo.md +14 -0
  1202. package/kits/neon-cidade/regras/som.md +20 -0
  1203. package/kits/neon-cidade/regras/tipografia.md +15 -0
  1204. package/kits/notion-editorial/SKILL.md +51 -0
  1205. package/kits/notion-editorial/assets/ASSETS.md +19 -0
  1206. package/kits/notion-editorial/assets/fontes/OFL-Cormorant-Italic.txt +93 -0
  1207. package/kits/notion-editorial/assets/fontes/OFL-Cormorant.txt +93 -0
  1208. package/kits/notion-editorial/assets/fontes/OFL-Jost.txt +93 -0
  1209. package/kits/notion-editorial/assets/fontes/cormorant-italic.woff2 +0 -0
  1210. package/kits/notion-editorial/assets/fontes/cormorant.woff2 +0 -0
  1211. package/kits/notion-editorial/assets/fontes/jost.woff2 +0 -0
  1212. package/kits/notion-editorial/assets/sons/assinatura.mp3 +0 -0
  1213. package/kits/notion-editorial/assets/sons/clique.mp3 +0 -0
  1214. package/kits/notion-editorial/assets/sons/impacto.mp3 +0 -0
  1215. package/kits/notion-editorial/assets/sons/pop-cartao.mp3 +0 -0
  1216. package/kits/notion-editorial/assets/sons/pop-palavra.mp3 +0 -0
  1217. package/kits/notion-editorial/assets/sons/subida.mp3 +0 -0
  1218. package/kits/notion-editorial/assets/sons/swoosh.mp3 +0 -0
  1219. package/kits/notion-editorial/assets/sons/whoosh-entra.mp3 +0 -0
  1220. package/kits/notion-editorial/assets/sons/whoosh-sai.mp3 +0 -0
  1221. package/kits/notion-editorial/assets/trilha/trilha.mp3 +0 -0
  1222. package/kits/notion-editorial/capa.jpg +0 -0
  1223. package/kits/notion-editorial/elementos/AssinaturaMarca.tsx +20 -0
  1224. package/kits/notion-editorial/elementos/BlocoNota.tsx +38 -0
  1225. package/kits/notion-editorial/elementos/Camera.tsx +23 -0
  1226. package/kits/notion-editorial/elementos/Cena.tsx +46 -0
  1227. package/kits/notion-editorial/elementos/Diagrama.tsx +29 -0
  1228. package/kits/notion-editorial/elementos/Fundo.tsx +12 -0
  1229. package/kits/notion-editorial/elementos/Montagem.tsx +60 -0
  1230. package/kits/notion-editorial/elementos/PassosNumerados.tsx +23 -0
  1231. package/kits/notion-editorial/elementos/RabiscoIcone.tsx +33 -0
  1232. package/kits/notion-editorial/elementos/Som.tsx +39 -0
  1233. package/kits/notion-editorial/elementos/TextoSerifa.tsx +53 -0
  1234. package/kits/notion-editorial/elementos/base.ts +87 -0
  1235. package/kits/notion-editorial/elementos/desenho.tsx +36 -0
  1236. package/kits/notion-editorial/elementos/index.ts +16 -0
  1237. package/kits/notion-editorial/exemplos/logo-pauta.svg +1 -0
  1238. package/kits/notion-editorial/exemplos/plano.json +254 -0
  1239. package/kits/notion-editorial/exemplos/roteiro.md +20 -0
  1240. package/kits/notion-editorial/preview.tsx +12 -0
  1241. package/kits/notion-editorial/receita.json +165 -0
  1242. package/kits/notion-editorial/regras/area-segura.md +13 -0
  1243. package/kits/notion-editorial/regras/cor.md +15 -0
  1244. package/kits/notion-editorial/regras/movimento.md +16 -0
  1245. package/kits/notion-editorial/regras/ritmo.md +14 -0
  1246. package/kits/notion-editorial/regras/som.md +18 -0
  1247. package/kits/notion-editorial/regras/tipografia.md +15 -0
  1248. package/kits/papel-recortado/SKILL.md +57 -0
  1249. package/kits/papel-recortado/assets/ASSETS.md +18 -0
  1250. package/kits/papel-recortado/assets/fontes/OFL-fredoka-700.txt +93 -0
  1251. package/kits/papel-recortado/assets/fontes/OFL-nunito-700.txt +93 -0
  1252. package/kits/papel-recortado/assets/fontes/fredoka-700.woff2 +0 -0
  1253. package/kits/papel-recortado/assets/fontes/nunito-700.woff2 +0 -0
  1254. package/kits/papel-recortado/assets/sons/assinatura.mp3 +0 -0
  1255. package/kits/papel-recortado/assets/sons/clique.mp3 +0 -0
  1256. package/kits/papel-recortado/assets/sons/impacto.mp3 +0 -0
  1257. package/kits/papel-recortado/assets/sons/pop-cartao.mp3 +0 -0
  1258. package/kits/papel-recortado/assets/sons/pop-palavra.mp3 +0 -0
  1259. package/kits/papel-recortado/assets/sons/subida.mp3 +0 -0
  1260. package/kits/papel-recortado/assets/sons/swoosh.mp3 +0 -0
  1261. package/kits/papel-recortado/assets/sons/tick.mp3 +0 -0
  1262. package/kits/papel-recortado/assets/sons/whoosh-entra.mp3 +0 -0
  1263. package/kits/papel-recortado/assets/sons/whoosh-sai.mp3 +0 -0
  1264. package/kits/papel-recortado/assets/trilha/trilha.mp3 +0 -0
  1265. package/kits/papel-recortado/capa.jpg +0 -0
  1266. package/kits/papel-recortado/elementos/CamadaPapel.tsx +81 -0
  1267. package/kits/papel-recortado/elementos/Camera.tsx +28 -0
  1268. package/kits/papel-recortado/elementos/CartaoCamadas.tsx +38 -0
  1269. package/kits/papel-recortado/elementos/Cena.tsx +29 -0
  1270. package/kits/papel-recortado/elementos/EtiquetaPapel.tsx +40 -0
  1271. package/kits/papel-recortado/elementos/Filtros.tsx +33 -0
  1272. package/kits/papel-recortado/elementos/Fita.tsx +21 -0
  1273. package/kits/papel-recortado/elementos/FolhaPopUp.tsx +49 -0
  1274. package/kits/papel-recortado/elementos/Fundo.tsx +10 -0
  1275. package/kits/papel-recortado/elementos/LetrasRecortadas.tsx +48 -0
  1276. package/kits/papel-recortado/elementos/MolduraPapel.tsx +12 -0
  1277. package/kits/papel-recortado/elementos/Montagem.tsx +42 -0
  1278. package/kits/papel-recortado/elementos/Som.tsx +30 -0
  1279. package/kits/papel-recortado/elementos/base.ts +51 -0
  1280. package/kits/papel-recortado/elementos/index.ts +15 -0
  1281. package/kits/papel-recortado/exemplos/plano.json +410 -0
  1282. package/kits/papel-recortado/exemplos/roteiro.md +13 -0
  1283. package/kits/papel-recortado/preview.tsx +9 -0
  1284. package/kits/papel-recortado/receita.json +14 -0
  1285. package/kits/papel-recortado/regras/area-segura.md +13 -0
  1286. package/kits/papel-recortado/regras/cor.md +16 -0
  1287. package/kits/papel-recortado/regras/movimento.md +17 -0
  1288. package/kits/papel-recortado/regras/ritmo.md +13 -0
  1289. package/kits/papel-recortado/regras/som.md +17 -0
  1290. package/kits/papel-recortado/regras/tipografia.md +12 -0
  1291. package/kits/pixel/SKILL.md +52 -0
  1292. package/kits/pixel/assets/ASSETS.md +18 -0
  1293. package/kits/pixel/assets/fontes/OFL-pressstart2p.txt +93 -0
  1294. package/kits/pixel/assets/fontes/OFL-vt323.txt +93 -0
  1295. package/kits/pixel/assets/fontes/pressstart2p.woff2 +0 -0
  1296. package/kits/pixel/assets/fontes/vt323.woff2 +0 -0
  1297. package/kits/pixel/assets/sons/assinatura.mp3 +0 -0
  1298. package/kits/pixel/assets/sons/clique.mp3 +0 -0
  1299. package/kits/pixel/assets/sons/impacto.mp3 +0 -0
  1300. package/kits/pixel/assets/sons/pop-cartao.mp3 +0 -0
  1301. package/kits/pixel/assets/sons/pop-palavra.mp3 +0 -0
  1302. package/kits/pixel/assets/sons/subida.mp3 +0 -0
  1303. package/kits/pixel/assets/sons/swoosh.mp3 +0 -0
  1304. package/kits/pixel/assets/sons/tick.mp3 +0 -0
  1305. package/kits/pixel/assets/sons/whoosh-entra.mp3 +0 -0
  1306. package/kits/pixel/assets/sons/whoosh-sai.mp3 +0 -0
  1307. package/kits/pixel/assets/trilha/trilha.mp3 +0 -0
  1308. package/kits/pixel/capa.jpg +0 -0
  1309. package/kits/pixel/elementos/AssinaturaMarca.tsx +18 -0
  1310. package/kits/pixel/elementos/CaixaDialogo.tsx +22 -0
  1311. package/kits/pixel/elementos/Camera.tsx +21 -0
  1312. package/kits/pixel/elementos/Cena.tsx +36 -0
  1313. package/kits/pixel/elementos/ChuvaDeSprites.tsx +15 -0
  1314. package/kits/pixel/elementos/Fundo.tsx +23 -0
  1315. package/kits/pixel/elementos/HudPlacar.tsx +19 -0
  1316. package/kits/pixel/elementos/MenuPixel.tsx +19 -0
  1317. package/kits/pixel/elementos/Montagem.tsx +56 -0
  1318. package/kits/pixel/elementos/Overlay.tsx +14 -0
  1319. package/kits/pixel/elementos/Som.tsx +30 -0
  1320. package/kits/pixel/elementos/Sprite.tsx +33 -0
  1321. package/kits/pixel/elementos/TituloPixel.tsx +31 -0
  1322. package/kits/pixel/elementos/base.ts +79 -0
  1323. package/kits/pixel/elementos/index.ts +17 -0
  1324. package/kits/pixel/exemplos/plano.json +309 -0
  1325. package/kits/pixel/exemplos/roteiro.md +20 -0
  1326. package/kits/pixel/preview.tsx +12 -0
  1327. package/kits/pixel/receita.json +175 -0
  1328. package/kits/pixel/regras/area-segura.md +14 -0
  1329. package/kits/pixel/regras/cor.md +17 -0
  1330. package/kits/pixel/regras/movimento.md +18 -0
  1331. package/kits/pixel/regras/ritmo.md +15 -0
  1332. package/kits/pixel/regras/som.md +18 -0
  1333. package/kits/pixel/regras/tipografia.md +18 -0
  1334. package/kits/pontos-3d/SKILL.md +51 -0
  1335. package/kits/pontos-3d/assets/ASSETS.md +21 -0
  1336. package/kits/pontos-3d/assets/fontes/OFL-JetBrainsMono.txt +92 -0
  1337. package/kits/pontos-3d/assets/fontes/OFL-Sora.txt +92 -0
  1338. package/kits/pontos-3d/assets/fontes/jetbrains-latin.woff2 +0 -0
  1339. package/kits/pontos-3d/assets/fontes/sora-latin.woff2 +0 -0
  1340. package/kits/pontos-3d/assets/sons/assinatura.mp3 +0 -0
  1341. package/kits/pontos-3d/assets/sons/clique.mp3 +0 -0
  1342. package/kits/pontos-3d/assets/sons/impacto.mp3 +0 -0
  1343. package/kits/pontos-3d/assets/sons/pop.mp3 +0 -0
  1344. package/kits/pontos-3d/assets/sons/subida.mp3 +0 -0
  1345. package/kits/pontos-3d/assets/sons/tick.mp3 +0 -0
  1346. package/kits/pontos-3d/assets/sons/varre.mp3 +0 -0
  1347. package/kits/pontos-3d/assets/sons/whoosh.mp3 +0 -0
  1348. package/kits/pontos-3d/assets/trilha/tech-120bpm.mp3 +0 -0
  1349. package/kits/pontos-3d/capa.jpg +0 -0
  1350. package/kits/pontos-3d/elementos/AssinaturaMarca.tsx +23 -0
  1351. package/kits/pontos-3d/elementos/Camera.tsx +22 -0
  1352. package/kits/pontos-3d/elementos/Cena.tsx +48 -0
  1353. package/kits/pontos-3d/elementos/Contador.tsx +32 -0
  1354. package/kits/pontos-3d/elementos/Fundo.tsx +20 -0
  1355. package/kits/pontos-3d/elementos/Montagem.tsx +67 -0
  1356. package/kits/pontos-3d/elementos/NuvemDePontos.tsx +84 -0
  1357. package/kits/pontos-3d/elementos/RotuloPonto.tsx +32 -0
  1358. package/kits/pontos-3d/elementos/Som.tsx +33 -0
  1359. package/kits/pontos-3d/elementos/TextoDePontos.tsx +55 -0
  1360. package/kits/pontos-3d/elementos/TituloSora.tsx +36 -0
  1361. package/kits/pontos-3d/elementos/base.ts +92 -0
  1362. package/kits/pontos-3d/elementos/index.ts +15 -0
  1363. package/kits/pontos-3d/exemplos/logo-malha.svg +1 -0
  1364. package/kits/pontos-3d/exemplos/plano.json +46 -0
  1365. package/kits/pontos-3d/exemplos/roteiro.md +20 -0
  1366. package/kits/pontos-3d/preview.tsx +12 -0
  1367. package/kits/pontos-3d/receita.json +153 -0
  1368. package/kits/pontos-3d/regras/area-segura.md +17 -0
  1369. package/kits/pontos-3d/regras/cor.md +21 -0
  1370. package/kits/pontos-3d/regras/movimento.md +19 -0
  1371. package/kits/pontos-3d/regras/ritmo.md +14 -0
  1372. package/kits/pontos-3d/regras/som.md +20 -0
  1373. package/kits/pontos-3d/regras/tipografia.md +16 -0
  1374. package/kits/produto-3d/SKILL.md +59 -0
  1375. package/kits/produto-3d/assets/ASSETS.md +18 -0
  1376. package/kits/produto-3d/assets/fontes/OFL-IBMPlexMono.txt +93 -0
  1377. package/kits/produto-3d/assets/fontes/OFL-Syncopate.txt +92 -0
  1378. package/kits/produto-3d/assets/fontes/plex-mono.woff2 +0 -0
  1379. package/kits/produto-3d/assets/fontes/syncopate-latin.woff2 +0 -0
  1380. package/kits/produto-3d/assets/sons/assinatura.mp3 +0 -0
  1381. package/kits/produto-3d/assets/sons/clique.mp3 +0 -0
  1382. package/kits/produto-3d/assets/sons/impacto.mp3 +0 -0
  1383. package/kits/produto-3d/assets/sons/pop-cartao.mp3 +0 -0
  1384. package/kits/produto-3d/assets/sons/pop-palavra.mp3 +0 -0
  1385. package/kits/produto-3d/assets/sons/subida.mp3 +0 -0
  1386. package/kits/produto-3d/assets/sons/swoosh.mp3 +0 -0
  1387. package/kits/produto-3d/assets/sons/whoosh-entra.mp3 +0 -0
  1388. package/kits/produto-3d/assets/sons/whoosh-sai.mp3 +0 -0
  1389. package/kits/produto-3d/assets/trilha/trilha.mp3 +0 -0
  1390. package/kits/produto-3d/capa.jpg +0 -0
  1391. package/kits/produto-3d/elementos/AssinaturaMarca.tsx +28 -0
  1392. package/kits/produto-3d/elementos/Camera.tsx +23 -0
  1393. package/kits/produto-3d/elementos/Cena.tsx +55 -0
  1394. package/kits/produto-3d/elementos/Fundo.tsx +45 -0
  1395. package/kits/produto-3d/elementos/Montagem.tsx +53 -0
  1396. package/kits/produto-3d/elementos/NumeroDestaque.tsx +35 -0
  1397. package/kits/produto-3d/elementos/Produto3D.tsx +144 -0
  1398. package/kits/produto-3d/elementos/RotuloChamada.tsx +43 -0
  1399. package/kits/produto-3d/elementos/Som.tsx +39 -0
  1400. package/kits/produto-3d/elementos/TituloMinimo.tsx +45 -0
  1401. package/kits/produto-3d/elementos/VarreduraLuz.tsx +22 -0
  1402. package/kits/produto-3d/elementos/base.ts +109 -0
  1403. package/kits/produto-3d/elementos/index.ts +13 -0
  1404. package/kits/produto-3d/elementos/modelos.ts +92 -0
  1405. package/kits/produto-3d/elementos/raymarch.ts +295 -0
  1406. package/kits/produto-3d/exemplos/plano.json +53 -0
  1407. package/kits/produto-3d/exemplos/roteiro.md +15 -0
  1408. package/kits/produto-3d/preview.tsx +9 -0
  1409. package/kits/produto-3d/receita.json +16 -0
  1410. package/kits/produto-3d/regras/area-segura.md +14 -0
  1411. package/kits/produto-3d/regras/cor.md +20 -0
  1412. package/kits/produto-3d/regras/movimento.md +19 -0
  1413. package/kits/produto-3d/regras/ritmo.md +15 -0
  1414. package/kits/produto-3d/regras/som.md +18 -0
  1415. package/kits/produto-3d/regras/tipografia.md +13 -0
  1416. package/kits/quadro-giz/SKILL.md +52 -0
  1417. package/kits/quadro-giz/assets/ASSETS.md +18 -0
  1418. package/kits/quadro-giz/assets/fontes/OFL-patrick-hand.txt +93 -0
  1419. package/kits/quadro-giz/assets/fontes/OFL-schoolbell.txt +93 -0
  1420. package/kits/quadro-giz/assets/fontes/patrick-hand.woff2 +0 -0
  1421. package/kits/quadro-giz/assets/fontes/schoolbell.woff2 +0 -0
  1422. package/kits/quadro-giz/assets/sons/assinatura.mp3 +0 -0
  1423. package/kits/quadro-giz/assets/sons/clique.mp3 +0 -0
  1424. package/kits/quadro-giz/assets/sons/impacto.mp3 +0 -0
  1425. package/kits/quadro-giz/assets/sons/pop-cartao.mp3 +0 -0
  1426. package/kits/quadro-giz/assets/sons/pop-palavra.mp3 +0 -0
  1427. package/kits/quadro-giz/assets/sons/subida.mp3 +0 -0
  1428. package/kits/quadro-giz/assets/sons/swoosh.mp3 +0 -0
  1429. package/kits/quadro-giz/assets/sons/tick.mp3 +0 -0
  1430. package/kits/quadro-giz/assets/sons/whoosh-entra.mp3 +0 -0
  1431. package/kits/quadro-giz/assets/sons/whoosh-sai.mp3 +0 -0
  1432. package/kits/quadro-giz/assets/trilha/trilha.mp3 +0 -0
  1433. package/kits/quadro-giz/capa.jpg +0 -0
  1434. package/kits/quadro-giz/elementos/ApagadorVarrendo.tsx +32 -0
  1435. package/kits/quadro-giz/elementos/AssinaturaMarca.tsx +20 -0
  1436. package/kits/quadro-giz/elementos/Camera.tsx +21 -0
  1437. package/kits/quadro-giz/elementos/CartaoGiz.tsx +25 -0
  1438. package/kits/quadro-giz/elementos/Cena.tsx +36 -0
  1439. package/kits/quadro-giz/elementos/ContaNoQuadro.tsx +34 -0
  1440. package/kits/quadro-giz/elementos/DesenhoGiz.tsx +29 -0
  1441. package/kits/quadro-giz/elementos/Fundo.tsx +21 -0
  1442. package/kits/quadro-giz/elementos/ListaGiz.tsx +21 -0
  1443. package/kits/quadro-giz/elementos/Montagem.tsx +56 -0
  1444. package/kits/quadro-giz/elementos/Overlay.tsx +12 -0
  1445. package/kits/quadro-giz/elementos/Som.tsx +30 -0
  1446. package/kits/quadro-giz/elementos/TituloGiz.tsx +29 -0
  1447. package/kits/quadro-giz/elementos/base.ts +78 -0
  1448. package/kits/quadro-giz/elementos/index.ts +17 -0
  1449. package/kits/quadro-giz/elementos/traco.ts +9 -0
  1450. package/kits/quadro-giz/exemplos/plano.json +237 -0
  1451. package/kits/quadro-giz/exemplos/roteiro.md +20 -0
  1452. package/kits/quadro-giz/preview.tsx +12 -0
  1453. package/kits/quadro-giz/receita.json +193 -0
  1454. package/kits/quadro-giz/regras/area-segura.md +15 -0
  1455. package/kits/quadro-giz/regras/cor.md +17 -0
  1456. package/kits/quadro-giz/regras/movimento.md +18 -0
  1457. package/kits/quadro-giz/regras/ritmo.md +16 -0
  1458. package/kits/quadro-giz/regras/som.md +18 -0
  1459. package/kits/quadro-giz/regras/tipografia.md +19 -0
  1460. package/kits/rabisco/SKILL.md +51 -0
  1461. package/kits/rabisco/assets/ASSETS.md +18 -0
  1462. package/kits/rabisco/assets/fontes/OFL-caveat-700.txt +93 -0
  1463. package/kits/rabisco/assets/fontes/OFL-permanent-marker.txt +93 -0
  1464. package/kits/rabisco/assets/fontes/caveat-700.woff2 +0 -0
  1465. package/kits/rabisco/assets/fontes/permanent-marker.woff2 +0 -0
  1466. package/kits/rabisco/assets/sons/assinatura.mp3 +0 -0
  1467. package/kits/rabisco/assets/sons/clique.mp3 +0 -0
  1468. package/kits/rabisco/assets/sons/impacto.mp3 +0 -0
  1469. package/kits/rabisco/assets/sons/pop-cartao.mp3 +0 -0
  1470. package/kits/rabisco/assets/sons/pop-palavra.mp3 +0 -0
  1471. package/kits/rabisco/assets/sons/subida.mp3 +0 -0
  1472. package/kits/rabisco/assets/sons/swoosh.mp3 +0 -0
  1473. package/kits/rabisco/assets/sons/tick.mp3 +0 -0
  1474. package/kits/rabisco/assets/sons/whoosh-entra.mp3 +0 -0
  1475. package/kits/rabisco/assets/sons/whoosh-sai.mp3 +0 -0
  1476. package/kits/rabisco/assets/trilha/trilha.mp3 +0 -0
  1477. package/kits/rabisco/capa.jpg +0 -0
  1478. package/kits/rabisco/elementos/AssinaturaMarca.tsx +21 -0
  1479. package/kits/rabisco/elementos/Bonequinho.tsx +31 -0
  1480. package/kits/rabisco/elementos/Camera.tsx +21 -0
  1481. package/kits/rabisco/elementos/CartaoRabiscado.tsx +27 -0
  1482. package/kits/rabisco/elementos/Cena.tsx +36 -0
  1483. package/kits/rabisco/elementos/Fundo.tsx +17 -0
  1484. package/kits/rabisco/elementos/ListaRabiscada.tsx +23 -0
  1485. package/kits/rabisco/elementos/Montagem.tsx +55 -0
  1486. package/kits/rabisco/elementos/Overlay.tsx +8 -0
  1487. package/kits/rabisco/elementos/Som.tsx +30 -0
  1488. package/kits/rabisco/elementos/TituloRabisco.tsx +28 -0
  1489. package/kits/rabisco/elementos/TracoDesenhando.tsx +31 -0
  1490. package/kits/rabisco/elementos/base.ts +76 -0
  1491. package/kits/rabisco/elementos/index.ts +16 -0
  1492. package/kits/rabisco/elementos/traco.ts +10 -0
  1493. package/kits/rabisco/exemplos/plano.json +238 -0
  1494. package/kits/rabisco/exemplos/roteiro.md +20 -0
  1495. package/kits/rabisco/preview.tsx +12 -0
  1496. package/kits/rabisco/receita.json +171 -0
  1497. package/kits/rabisco/regras/area-segura.md +14 -0
  1498. package/kits/rabisco/regras/cor.md +15 -0
  1499. package/kits/rabisco/regras/movimento.md +18 -0
  1500. package/kits/rabisco/regras/ritmo.md +15 -0
  1501. package/kits/rabisco/regras/som.md +17 -0
  1502. package/kits/rabisco/regras/tipografia.md +18 -0
  1503. package/kits/retro-70/SKILL.md +53 -0
  1504. package/kits/retro-70/assets/ASSETS.md +23 -0
  1505. package/kits/retro-70/assets/fontes/OFL-Fredoka.txt +93 -0
  1506. package/kits/retro-70/assets/fontes/OFL-Shrikhand.txt +93 -0
  1507. package/kits/retro-70/assets/fontes/fredoka.woff2 +0 -0
  1508. package/kits/retro-70/assets/fontes/shrikhand.woff2 +0 -0
  1509. package/kits/retro-70/assets/sons/assinatura.mp3 +0 -0
  1510. package/kits/retro-70/assets/sons/clique.mp3 +0 -0
  1511. package/kits/retro-70/assets/sons/impacto.mp3 +0 -0
  1512. package/kits/retro-70/assets/sons/pop-cartao.mp3 +0 -0
  1513. package/kits/retro-70/assets/sons/pop-palavra.mp3 +0 -0
  1514. package/kits/retro-70/assets/sons/subida.mp3 +0 -0
  1515. package/kits/retro-70/assets/sons/swoosh.mp3 +0 -0
  1516. package/kits/retro-70/assets/sons/whoosh-entra.mp3 +0 -0
  1517. package/kits/retro-70/assets/sons/whoosh-sai.mp3 +0 -0
  1518. package/kits/retro-70/assets/trilha/solar-104bpm.mp3 +0 -0
  1519. package/kits/retro-70/capa.jpg +0 -0
  1520. package/kits/retro-70/elementos/ArcoListras.tsx +25 -0
  1521. package/kits/retro-70/elementos/AssinaturaMarca.tsx +21 -0
  1522. package/kits/retro-70/elementos/Camera.tsx +22 -0
  1523. package/kits/retro-70/elementos/CartaoData.tsx +24 -0
  1524. package/kits/retro-70/elementos/Cena.tsx +41 -0
  1525. package/kits/retro-70/elementos/FaixaOnda.tsx +27 -0
  1526. package/kits/retro-70/elementos/Flor70.tsx +25 -0
  1527. package/kits/retro-70/elementos/FotoArredondada.tsx +19 -0
  1528. package/kits/retro-70/elementos/Fundo.tsx +11 -0
  1529. package/kits/retro-70/elementos/Montagem.tsx +60 -0
  1530. package/kits/retro-70/elementos/RaiosDeSol.tsx +27 -0
  1531. package/kits/retro-70/elementos/Som.tsx +38 -0
  1532. package/kits/retro-70/elementos/TituloGordo.tsx +28 -0
  1533. package/kits/retro-70/elementos/base.ts +73 -0
  1534. package/kits/retro-70/elementos/index.ts +17 -0
  1535. package/kits/retro-70/exemplos/fotos/foto-02.jpg +0 -0
  1536. package/kits/retro-70/exemplos/fotos/foto-03.jpg +0 -0
  1537. package/kits/retro-70/exemplos/logo-girassol.svg +1 -0
  1538. package/kits/retro-70/exemplos/plano.json +50 -0
  1539. package/kits/retro-70/exemplos/roteiro.md +19 -0
  1540. package/kits/retro-70/preview.tsx +17 -0
  1541. package/kits/retro-70/receita.json +172 -0
  1542. package/kits/retro-70/regras/area-segura.md +20 -0
  1543. package/kits/retro-70/regras/cor.md +14 -0
  1544. package/kits/retro-70/regras/movimento.md +16 -0
  1545. package/kits/retro-70/regras/ritmo.md +15 -0
  1546. package/kits/retro-70/regras/som.md +21 -0
  1547. package/kits/retro-70/regras/tipografia.md +17 -0
  1548. package/kits/revista/SKILL.md +52 -0
  1549. package/kits/revista/assets/ASSETS.md +24 -0
  1550. package/kits/revista/assets/fontes/OFL-CormorantGaramond.txt +93 -0
  1551. package/kits/revista/assets/fontes/OFL-Jost.txt +93 -0
  1552. package/kits/revista/assets/fontes/cormorant-italic.woff2 +0 -0
  1553. package/kits/revista/assets/fontes/cormorant.woff2 +0 -0
  1554. package/kits/revista/assets/fontes/jost.woff2 +0 -0
  1555. package/kits/revista/assets/sons/assinatura.mp3 +0 -0
  1556. package/kits/revista/assets/sons/clique.mp3 +0 -0
  1557. package/kits/revista/assets/sons/impacto.mp3 +0 -0
  1558. package/kits/revista/assets/sons/pop-cartao.mp3 +0 -0
  1559. package/kits/revista/assets/sons/pop-palavra.mp3 +0 -0
  1560. package/kits/revista/assets/sons/subida.mp3 +0 -0
  1561. package/kits/revista/assets/sons/swoosh.mp3 +0 -0
  1562. package/kits/revista/assets/sons/whoosh-entra.mp3 +0 -0
  1563. package/kits/revista/assets/sons/whoosh-sai.mp3 +0 -0
  1564. package/kits/revista/assets/trilha/editorial-100bpm.mp3 +0 -0
  1565. package/kits/revista/capa.jpg +0 -0
  1566. package/kits/revista/elementos/AssinaturaMarca.tsx +23 -0
  1567. package/kits/revista/elementos/Camera.tsx +22 -0
  1568. package/kits/revista/elementos/Cena.tsx +41 -0
  1569. package/kits/revista/elementos/CitacaoGrande.tsx +27 -0
  1570. package/kits/revista/elementos/ColagemFotos.tsx +22 -0
  1571. package/kits/revista/elementos/Folio.tsx +19 -0
  1572. package/kits/revista/elementos/FotoSangrando.tsx +24 -0
  1573. package/kits/revista/elementos/Fundo.tsx +11 -0
  1574. package/kits/revista/elementos/Montagem.tsx +59 -0
  1575. package/kits/revista/elementos/PaginaDupla.tsx +36 -0
  1576. package/kits/revista/elementos/Som.tsx +38 -0
  1577. package/kits/revista/elementos/TituloEditorial.tsx +31 -0
  1578. package/kits/revista/elementos/base.ts +76 -0
  1579. package/kits/revista/elementos/index.ts +16 -0
  1580. package/kits/revista/exemplos/fotos/foto-02.jpg +0 -0
  1581. package/kits/revista/exemplos/fotos/foto-03.jpg +0 -0
  1582. package/kits/revista/exemplos/fotos/foto-05.jpg +0 -0
  1583. package/kits/revista/exemplos/fotos/foto-06.jpg +0 -0
  1584. package/kits/revista/exemplos/fotos/foto-07.jpg +0 -0
  1585. package/kits/revista/exemplos/fotos/foto-08.jpg +0 -0
  1586. package/kits/revista/exemplos/logo-linho.svg +1 -0
  1587. package/kits/revista/exemplos/plano.json +44 -0
  1588. package/kits/revista/exemplos/roteiro.md +19 -0
  1589. package/kits/revista/preview.tsx +21 -0
  1590. package/kits/revista/receita.json +168 -0
  1591. package/kits/revista/regras/area-segura.md +19 -0
  1592. package/kits/revista/regras/cor.md +14 -0
  1593. package/kits/revista/regras/movimento.md +15 -0
  1594. package/kits/revista/regras/ritmo.md +15 -0
  1595. package/kits/revista/regras/som.md +21 -0
  1596. package/kits/revista/regras/tipografia.md +17 -0
  1597. package/kits/risografia/SKILL.md +53 -0
  1598. package/kits/risografia/assets/ASSETS.md +18 -0
  1599. package/kits/risografia/assets/fontes/OFL-bricolage-800.txt +93 -0
  1600. package/kits/risografia/assets/fontes/OFL-space-mono-700.txt +93 -0
  1601. package/kits/risografia/assets/fontes/bricolage-800.woff2 +0 -0
  1602. package/kits/risografia/assets/fontes/space-mono-700.woff2 +0 -0
  1603. package/kits/risografia/assets/sons/assinatura.mp3 +0 -0
  1604. package/kits/risografia/assets/sons/clique.mp3 +0 -0
  1605. package/kits/risografia/assets/sons/impacto.mp3 +0 -0
  1606. package/kits/risografia/assets/sons/pop-cartao.mp3 +0 -0
  1607. package/kits/risografia/assets/sons/pop-palavra.mp3 +0 -0
  1608. package/kits/risografia/assets/sons/subida.mp3 +0 -0
  1609. package/kits/risografia/assets/sons/swoosh.mp3 +0 -0
  1610. package/kits/risografia/assets/sons/tick.mp3 +0 -0
  1611. package/kits/risografia/assets/sons/whoosh-entra.mp3 +0 -0
  1612. package/kits/risografia/assets/sons/whoosh-sai.mp3 +0 -0
  1613. package/kits/risografia/assets/trilha/trilha.mp3 +0 -0
  1614. package/kits/risografia/capa.jpg +0 -0
  1615. package/kits/risografia/elementos/AssinaturaMarca.tsx +21 -0
  1616. package/kits/risografia/elementos/BolaReticula.tsx +26 -0
  1617. package/kits/risografia/elementos/Camera.tsx +21 -0
  1618. package/kits/risografia/elementos/Cena.tsx +36 -0
  1619. package/kits/risografia/elementos/FormaRiso.tsx +24 -0
  1620. package/kits/risografia/elementos/Fundo.tsx +12 -0
  1621. package/kits/risografia/elementos/ListaRiso.tsx +22 -0
  1622. package/kits/risografia/elementos/Montagem.tsx +56 -0
  1623. package/kits/risografia/elementos/NumeroRiso.tsx +21 -0
  1624. package/kits/risografia/elementos/Overlay.tsx +18 -0
  1625. package/kits/risografia/elementos/Som.tsx +30 -0
  1626. package/kits/risografia/elementos/TarjaCarimbo.tsx +20 -0
  1627. package/kits/risografia/elementos/TituloRiso.tsx +26 -0
  1628. package/kits/risografia/elementos/base.ts +73 -0
  1629. package/kits/risografia/elementos/index.ts +17 -0
  1630. package/kits/risografia/exemplos/plano.json +209 -0
  1631. package/kits/risografia/exemplos/roteiro.md +20 -0
  1632. package/kits/risografia/preview.tsx +12 -0
  1633. package/kits/risografia/receita.json +169 -0
  1634. package/kits/risografia/regras/area-segura.md +14 -0
  1635. package/kits/risografia/regras/cor.md +12 -0
  1636. package/kits/risografia/regras/movimento.md +18 -0
  1637. package/kits/risografia/regras/ritmo.md +15 -0
  1638. package/kits/risografia/regras/som.md +17 -0
  1639. package/kits/risografia/regras/tipografia.md +18 -0
  1640. package/kits/saas-linear/SKILL.md +60 -0
  1641. package/kits/saas-linear/assets/ASSETS.md +19 -0
  1642. package/kits/saas-linear/assets/fontes/OFL-Inter.txt +93 -0
  1643. package/kits/saas-linear/assets/fontes/OFL-Newsreader.txt +93 -0
  1644. package/kits/saas-linear/assets/fontes/inter-400.woff2 +0 -0
  1645. package/kits/saas-linear/assets/fontes/inter-600.woff2 +0 -0
  1646. package/kits/saas-linear/assets/fontes/newsreader-400.woff2 +0 -0
  1647. package/kits/saas-linear/assets/sons/assinatura.mp3 +0 -0
  1648. package/kits/saas-linear/assets/sons/clique.mp3 +0 -0
  1649. package/kits/saas-linear/assets/sons/impacto.mp3 +0 -0
  1650. package/kits/saas-linear/assets/sons/pop-cartao.mp3 +0 -0
  1651. package/kits/saas-linear/assets/sons/pop-palavra.mp3 +0 -0
  1652. package/kits/saas-linear/assets/sons/subida.mp3 +0 -0
  1653. package/kits/saas-linear/assets/sons/swoosh.mp3 +0 -0
  1654. package/kits/saas-linear/assets/sons/whoosh-entra.mp3 +0 -0
  1655. package/kits/saas-linear/assets/sons/whoosh-sai.mp3 +0 -0
  1656. package/kits/saas-linear/assets/trilha/trilha.mp3 +0 -0
  1657. package/kits/saas-linear/capa.jpg +0 -0
  1658. package/kits/saas-linear/elementos/Agenda.tsx +46 -0
  1659. package/kits/saas-linear/elementos/CaixaPrompt.tsx +41 -0
  1660. package/kits/saas-linear/elementos/Camera.tsx +38 -0
  1661. package/kits/saas-linear/elementos/CartoesIntegracao.tsx +57 -0
  1662. package/kits/saas-linear/elementos/Cena.tsx +38 -0
  1663. package/kits/saas-linear/elementos/Cursor.tsx +40 -0
  1664. package/kits/saas-linear/elementos/FraseSerifa.tsx +25 -0
  1665. package/kits/saas-linear/elementos/Fundo.tsx +18 -0
  1666. package/kits/saas-linear/elementos/Marca.tsx +20 -0
  1667. package/kits/saas-linear/elementos/MarcaFinal.tsx +22 -0
  1668. package/kits/saas-linear/elementos/Menu.tsx +46 -0
  1669. package/kits/saas-linear/elementos/Monitor.tsx +28 -0
  1670. package/kits/saas-linear/elementos/Montagem.tsx +67 -0
  1671. package/kits/saas-linear/elementos/Saudacao.tsx +27 -0
  1672. package/kits/saas-linear/elementos/Som.tsx +39 -0
  1673. package/kits/saas-linear/elementos/base.ts +84 -0
  1674. package/kits/saas-linear/elementos/index.ts +21 -0
  1675. package/kits/saas-linear/exemplos/plano.json +459 -0
  1676. package/kits/saas-linear/exemplos/roteiro.md +15 -0
  1677. package/kits/saas-linear/preview.tsx +9 -0
  1678. package/kits/saas-linear/receita.json +32 -0
  1679. package/kits/saas-linear/regras/area-segura.md +17 -0
  1680. package/kits/saas-linear/regras/cor.md +19 -0
  1681. package/kits/saas-linear/regras/movimento.md +20 -0
  1682. package/kits/saas-linear/regras/ritmo.md +14 -0
  1683. package/kits/saas-linear/regras/som.md +16 -0
  1684. package/kits/saas-linear/regras/tipografia.md +17 -0
  1685. package/kits/stripe-ondas/SKILL.md +52 -0
  1686. package/kits/stripe-ondas/assets/ASSETS.md +18 -0
  1687. package/kits/stripe-ondas/assets/fontes/OFL-DM-Mono.txt +93 -0
  1688. package/kits/stripe-ondas/assets/fontes/OFL-Inter.txt +93 -0
  1689. package/kits/stripe-ondas/assets/fontes/dm-mono.woff2 +0 -0
  1690. package/kits/stripe-ondas/assets/fontes/inter.woff2 +0 -0
  1691. package/kits/stripe-ondas/assets/sons/assinatura.mp3 +0 -0
  1692. package/kits/stripe-ondas/assets/sons/clique.mp3 +0 -0
  1693. package/kits/stripe-ondas/assets/sons/impacto.mp3 +0 -0
  1694. package/kits/stripe-ondas/assets/sons/pop-cartao.mp3 +0 -0
  1695. package/kits/stripe-ondas/assets/sons/pop-palavra.mp3 +0 -0
  1696. package/kits/stripe-ondas/assets/sons/subida.mp3 +0 -0
  1697. package/kits/stripe-ondas/assets/sons/swoosh.mp3 +0 -0
  1698. package/kits/stripe-ondas/assets/sons/whoosh-entra.mp3 +0 -0
  1699. package/kits/stripe-ondas/assets/sons/whoosh-sai.mp3 +0 -0
  1700. package/kits/stripe-ondas/assets/trilha/trilha.mp3 +0 -0
  1701. package/kits/stripe-ondas/capa.jpg +0 -0
  1702. package/kits/stripe-ondas/elementos/AssinaturaMarca.tsx +18 -0
  1703. package/kits/stripe-ondas/elementos/Camera.tsx +23 -0
  1704. package/kits/stripe-ondas/elementos/CartaoPagamento.tsx +35 -0
  1705. package/kits/stripe-ondas/elementos/Cena.tsx +46 -0
  1706. package/kits/stripe-ondas/elementos/FaixaDeOndas.tsx +49 -0
  1707. package/kits/stripe-ondas/elementos/Fundo.tsx +11 -0
  1708. package/kits/stripe-ondas/elementos/GraficoOnda.tsx +34 -0
  1709. package/kits/stripe-ondas/elementos/Montagem.tsx +61 -0
  1710. package/kits/stripe-ondas/elementos/PainelCodigo.tsx +36 -0
  1711. package/kits/stripe-ondas/elementos/SelosDeMetodo.tsx +27 -0
  1712. package/kits/stripe-ondas/elementos/Som.tsx +39 -0
  1713. package/kits/stripe-ondas/elementos/TituloLimpo.tsx +27 -0
  1714. package/kits/stripe-ondas/elementos/base.ts +85 -0
  1715. package/kits/stripe-ondas/elementos/index.ts +16 -0
  1716. package/kits/stripe-ondas/exemplos/logo-cais.svg +1 -0
  1717. package/kits/stripe-ondas/exemplos/plano.json +366 -0
  1718. package/kits/stripe-ondas/exemplos/roteiro.md +20 -0
  1719. package/kits/stripe-ondas/preview.tsx +12 -0
  1720. package/kits/stripe-ondas/receita.json +177 -0
  1721. package/kits/stripe-ondas/regras/area-segura.md +16 -0
  1722. package/kits/stripe-ondas/regras/cor.md +17 -0
  1723. package/kits/stripe-ondas/regras/movimento.md +16 -0
  1724. package/kits/stripe-ondas/regras/ritmo.md +14 -0
  1725. package/kits/stripe-ondas/regras/som.md +18 -0
  1726. package/kits/stripe-ondas/regras/tipografia.md +15 -0
  1727. package/kits/suica/SKILL.md +56 -0
  1728. package/kits/suica/assets/ASSETS.md +23 -0
  1729. package/kits/suica/assets/fontes/OFL-IBMPlexMono.txt +93 -0
  1730. package/kits/suica/assets/fontes/OFL-InterTight.txt +93 -0
  1731. package/kits/suica/assets/fontes/inter-tight.woff2 +0 -0
  1732. package/kits/suica/assets/fontes/plex-mono.woff2 +0 -0
  1733. package/kits/suica/assets/sons/assinatura.mp3 +0 -0
  1734. package/kits/suica/assets/sons/clique.mp3 +0 -0
  1735. package/kits/suica/assets/sons/impacto.mp3 +0 -0
  1736. package/kits/suica/assets/sons/pop-cartao.mp3 +0 -0
  1737. package/kits/suica/assets/sons/pop-palavra.mp3 +0 -0
  1738. package/kits/suica/assets/sons/subida.mp3 +0 -0
  1739. package/kits/suica/assets/sons/swoosh.mp3 +0 -0
  1740. package/kits/suica/assets/sons/whoosh-entra.mp3 +0 -0
  1741. package/kits/suica/assets/sons/whoosh-sai.mp3 +0 -0
  1742. package/kits/suica/assets/trilha/frio-120bpm.mp3 +0 -0
  1743. package/kits/suica/capa.jpg +0 -0
  1744. package/kits/suica/elementos/AssinaturaMarca.tsx +21 -0
  1745. package/kits/suica/elementos/Camera.tsx +22 -0
  1746. package/kits/suica/elementos/Cena.tsx +41 -0
  1747. package/kits/suica/elementos/DiscoFoto.tsx +20 -0
  1748. package/kits/suica/elementos/Fundo.tsx +16 -0
  1749. package/kits/suica/elementos/GradeFotos.tsx +21 -0
  1750. package/kits/suica/elementos/Indice.tsx +17 -0
  1751. package/kits/suica/elementos/ListaIndice.tsx +25 -0
  1752. package/kits/suica/elementos/Montagem.tsx +60 -0
  1753. package/kits/suica/elementos/NumeroGigante.tsx +21 -0
  1754. package/kits/suica/elementos/Regua.tsx +20 -0
  1755. package/kits/suica/elementos/Som.tsx +38 -0
  1756. package/kits/suica/elementos/TituloGrade.tsx +38 -0
  1757. package/kits/suica/elementos/base.ts +76 -0
  1758. package/kits/suica/elementos/index.ts +17 -0
  1759. package/kits/suica/exemplos/fotos/foto-01.jpg +0 -0
  1760. package/kits/suica/exemplos/fotos/foto-02.jpg +0 -0
  1761. package/kits/suica/exemplos/fotos/foto-03.jpg +0 -0
  1762. package/kits/suica/exemplos/fotos/foto-05.jpg +0 -0
  1763. package/kits/suica/exemplos/fotos/foto-06.jpg +0 -0
  1764. package/kits/suica/exemplos/fotos/foto-07.jpg +0 -0
  1765. package/kits/suica/exemplos/logo-ponto.svg +1 -0
  1766. package/kits/suica/exemplos/plano.json +268 -0
  1767. package/kits/suica/exemplos/roteiro.md +19 -0
  1768. package/kits/suica/preview.tsx +21 -0
  1769. package/kits/suica/receita.json +197 -0
  1770. package/kits/suica/regras/area-segura.md +18 -0
  1771. package/kits/suica/regras/cor.md +13 -0
  1772. package/kits/suica/regras/movimento.md +15 -0
  1773. package/kits/suica/regras/ritmo.md +17 -0
  1774. package/kits/suica/regras/som.md +21 -0
  1775. package/kits/suica/regras/tipografia.md +16 -0
  1776. package/kits/synthwave/SKILL.md +52 -0
  1777. package/kits/synthwave/assets/ASSETS.md +22 -0
  1778. package/kits/synthwave/assets/fontes/OFL-Orbitron.txt +93 -0
  1779. package/kits/synthwave/assets/fontes/OFL-Rajdhani.txt +93 -0
  1780. package/kits/synthwave/assets/fontes/orbitron.woff2 +0 -0
  1781. package/kits/synthwave/assets/fontes/rajdhani.woff2 +0 -0
  1782. package/kits/synthwave/assets/sons/assinatura.mp3 +0 -0
  1783. package/kits/synthwave/assets/sons/clique.mp3 +0 -0
  1784. package/kits/synthwave/assets/sons/impacto.mp3 +0 -0
  1785. package/kits/synthwave/assets/sons/pop-cartao.mp3 +0 -0
  1786. package/kits/synthwave/assets/sons/pop-palavra.mp3 +0 -0
  1787. package/kits/synthwave/assets/sons/subida.mp3 +0 -0
  1788. package/kits/synthwave/assets/sons/swoosh.mp3 +0 -0
  1789. package/kits/synthwave/assets/sons/whoosh-entra.mp3 +0 -0
  1790. package/kits/synthwave/assets/sons/whoosh-sai.mp3 +0 -0
  1791. package/kits/synthwave/assets/trilha/noite-110bpm.mp3 +0 -0
  1792. package/kits/synthwave/capa.jpg +0 -0
  1793. package/kits/synthwave/elementos/AssinaturaMarca.tsx +26 -0
  1794. package/kits/synthwave/elementos/Camera.tsx +22 -0
  1795. package/kits/synthwave/elementos/Cena.tsx +41 -0
  1796. package/kits/synthwave/elementos/Estrelas.tsx +27 -0
  1797. package/kits/synthwave/elementos/Fundo.tsx +20 -0
  1798. package/kits/synthwave/elementos/Montagem.tsx +59 -0
  1799. package/kits/synthwave/elementos/Montanhas.tsx +27 -0
  1800. package/kits/synthwave/elementos/Palmeiras.tsx +30 -0
  1801. package/kits/synthwave/elementos/QuadroHUD.tsx +33 -0
  1802. package/kits/synthwave/elementos/SolListrado.tsx +29 -0
  1803. package/kits/synthwave/elementos/Som.tsx +38 -0
  1804. package/kits/synthwave/elementos/TituloNeon.tsx +30 -0
  1805. package/kits/synthwave/elementos/base.ts +75 -0
  1806. package/kits/synthwave/elementos/index.ts +16 -0
  1807. package/kits/synthwave/exemplos/logo-arcade.svg +1 -0
  1808. package/kits/synthwave/exemplos/plano.json +50 -0
  1809. package/kits/synthwave/exemplos/roteiro.md +19 -0
  1810. package/kits/synthwave/preview.tsx +16 -0
  1811. package/kits/synthwave/receita.json +170 -0
  1812. package/kits/synthwave/regras/area-segura.md +19 -0
  1813. package/kits/synthwave/regras/cor.md +16 -0
  1814. package/kits/synthwave/regras/movimento.md +16 -0
  1815. package/kits/synthwave/regras/ritmo.md +15 -0
  1816. package/kits/synthwave/regras/som.md +21 -0
  1817. package/kits/synthwave/regras/tipografia.md +16 -0
  1818. package/kits/terminal/SKILL.md +57 -0
  1819. package/kits/terminal/assets/ASSETS.md +20 -0
  1820. package/kits/terminal/assets/fontes/OFL-jetbrains-mono-700.txt +93 -0
  1821. package/kits/terminal/assets/fontes/OFL-vt323.txt +93 -0
  1822. package/kits/terminal/assets/fontes/jetbrains-mono-700.woff2 +0 -0
  1823. package/kits/terminal/assets/fontes/vt323.woff2 +0 -0
  1824. package/kits/terminal/assets/sons/assinatura.mp3 +0 -0
  1825. package/kits/terminal/assets/sons/clique.mp3 +0 -0
  1826. package/kits/terminal/assets/sons/digitar.mp3 +0 -0
  1827. package/kits/terminal/assets/sons/impacto.mp3 +0 -0
  1828. package/kits/terminal/assets/sons/liga-crt.mp3 +0 -0
  1829. package/kits/terminal/assets/sons/pop-cartao.mp3 +0 -0
  1830. package/kits/terminal/assets/sons/pop-palavra.mp3 +0 -0
  1831. package/kits/terminal/assets/sons/subida.mp3 +0 -0
  1832. package/kits/terminal/assets/sons/swoosh.mp3 +0 -0
  1833. package/kits/terminal/assets/sons/tick.mp3 +0 -0
  1834. package/kits/terminal/assets/sons/whoosh-entra.mp3 +0 -0
  1835. package/kits/terminal/assets/sons/whoosh-sai.mp3 +0 -0
  1836. package/kits/terminal/assets/trilha/trilha.mp3 +0 -0
  1837. package/kits/terminal/capa.jpg +0 -0
  1838. package/kits/terminal/elementos/ArteAscii.tsx +61 -0
  1839. package/kits/terminal/elementos/BarraProgresso.tsx +42 -0
  1840. package/kits/terminal/elementos/BarraStatus.tsx +18 -0
  1841. package/kits/terminal/elementos/BootBios.tsx +41 -0
  1842. package/kits/terminal/elementos/Camera.tsx +23 -0
  1843. package/kits/terminal/elementos/Cena.tsx +25 -0
  1844. package/kits/terminal/elementos/Fundo.tsx +22 -0
  1845. package/kits/terminal/elementos/LinhaComando.tsx +31 -0
  1846. package/kits/terminal/elementos/Monitor.tsx +42 -0
  1847. package/kits/terminal/elementos/Montagem.tsx +52 -0
  1848. package/kits/terminal/elementos/PainelCaixa.tsx +35 -0
  1849. package/kits/terminal/elementos/Som.tsx +32 -0
  1850. package/kits/terminal/elementos/Tela.tsx +25 -0
  1851. package/kits/terminal/elementos/TextoGrande.tsx +35 -0
  1852. package/kits/terminal/elementos/base.ts +67 -0
  1853. package/kits/terminal/elementos/index.ts +16 -0
  1854. package/kits/terminal/exemplos/plano.json +330 -0
  1855. package/kits/terminal/exemplos/roteiro.md +14 -0
  1856. package/kits/terminal/preview.tsx +9 -0
  1857. package/kits/terminal/receita.json +14 -0
  1858. package/kits/terminal/regras/area-segura.md +18 -0
  1859. package/kits/terminal/regras/cor.md +16 -0
  1860. package/kits/terminal/regras/movimento.md +15 -0
  1861. package/kits/terminal/regras/ritmo.md +14 -0
  1862. package/kits/terminal/regras/som.md +17 -0
  1863. package/kits/terminal/regras/tipografia.md +15 -0
  1864. package/kits/tiktok-energia/SKILL.md +51 -0
  1865. package/kits/tiktok-energia/assets/ASSETS.md +22 -0
  1866. package/kits/tiktok-energia/assets/fontes/OFL-Anton.txt +92 -0
  1867. package/kits/tiktok-energia/assets/fontes/OFL-Rubik.txt +92 -0
  1868. package/kits/tiktok-energia/assets/fontes/anton-latin.woff2 +0 -0
  1869. package/kits/tiktok-energia/assets/fontes/rubik-latin.woff2 +0 -0
  1870. package/kits/tiktok-energia/assets/sons/assinatura.mp3 +0 -0
  1871. package/kits/tiktok-energia/assets/sons/corte.mp3 +0 -0
  1872. package/kits/tiktok-energia/assets/sons/palavra.mp3 +0 -0
  1873. package/kits/tiktok-energia/assets/sons/pop.mp3 +0 -0
  1874. package/kits/tiktok-energia/assets/sons/soco.mp3 +0 -0
  1875. package/kits/tiktok-energia/assets/sons/subida.mp3 +0 -0
  1876. package/kits/tiktok-energia/assets/sons/whoosh.mp3 +0 -0
  1877. package/kits/tiktok-energia/assets/sons/zap.mp3 +0 -0
  1878. package/kits/tiktok-energia/assets/trilha/tech-128bpm.mp3 +0 -0
  1879. package/kits/tiktok-energia/capa.jpg +0 -0
  1880. package/kits/tiktok-energia/elementos/AssinaturaMarca.tsx +25 -0
  1881. package/kits/tiktok-energia/elementos/Camera.tsx +22 -0
  1882. package/kits/tiktok-energia/elementos/Cena.tsx +48 -0
  1883. package/kits/tiktok-energia/elementos/CorteDeCor.tsx +22 -0
  1884. package/kits/tiktok-energia/elementos/EmojiSticker.tsx +21 -0
  1885. package/kits/tiktok-energia/elementos/FotoSoco.tsx +27 -0
  1886. package/kits/tiktok-energia/elementos/Fundo.tsx +8 -0
  1887. package/kits/tiktok-energia/elementos/Montagem.tsx +67 -0
  1888. package/kits/tiktok-energia/elementos/PalavraSoco.tsx +29 -0
  1889. package/kits/tiktok-energia/elementos/Som.tsx +33 -0
  1890. package/kits/tiktok-energia/elementos/TextoCaixa.tsx +25 -0
  1891. package/kits/tiktok-energia/elementos/base.ts +92 -0
  1892. package/kits/tiktok-energia/elementos/index.ts +15 -0
  1893. package/kits/tiktok-energia/exemplos/fotos/foto-03.jpg +0 -0
  1894. package/kits/tiktok-energia/exemplos/logo-pulo.svg +1 -0
  1895. package/kits/tiktok-energia/exemplos/plano.json +66 -0
  1896. package/kits/tiktok-energia/exemplos/roteiro.md +22 -0
  1897. package/kits/tiktok-energia/preview.tsx +13 -0
  1898. package/kits/tiktok-energia/receita.json +166 -0
  1899. package/kits/tiktok-energia/regras/area-segura.md +19 -0
  1900. package/kits/tiktok-energia/regras/cor.md +20 -0
  1901. package/kits/tiktok-energia/regras/movimento.md +17 -0
  1902. package/kits/tiktok-energia/regras/ritmo.md +15 -0
  1903. package/kits/tiktok-energia/regras/som.md +20 -0
  1904. package/kits/tiktok-energia/regras/tipografia.md +15 -0
  1905. package/kits/tunel/SKILL.md +51 -0
  1906. package/kits/tunel/assets/ASSETS.md +21 -0
  1907. package/kits/tunel/assets/fontes/OFL-ChakraPetch.txt +92 -0
  1908. package/kits/tunel/assets/fontes/OFL-Syncopate.txt +92 -0
  1909. package/kits/tunel/assets/fontes/chakra-latin.woff2 +0 -0
  1910. package/kits/tunel/assets/fontes/syncopate-latin.woff2 +0 -0
  1911. package/kits/tunel/assets/sons/assinatura.mp3 +0 -0
  1912. package/kits/tunel/assets/sons/clique.mp3 +0 -0
  1913. package/kits/tunel/assets/sons/impacto.mp3 +0 -0
  1914. package/kits/tunel/assets/sons/passa.mp3 +0 -0
  1915. package/kits/tunel/assets/sons/subida.mp3 +0 -0
  1916. package/kits/tunel/assets/sons/tick.mp3 +0 -0
  1917. package/kits/tunel/assets/sons/varre.mp3 +0 -0
  1918. package/kits/tunel/assets/sons/whoosh.mp3 +0 -0
  1919. package/kits/tunel/assets/trilha/tech-128bpm.mp3 +0 -0
  1920. package/kits/tunel/capa.jpg +0 -0
  1921. package/kits/tunel/elementos/AssinaturaMarca.tsx +22 -0
  1922. package/kits/tunel/elementos/Camera.tsx +22 -0
  1923. package/kits/tunel/elementos/Cena.tsx +48 -0
  1924. package/kits/tunel/elementos/Fundo.tsx +13 -0
  1925. package/kits/tunel/elementos/LinhasDeVelocidade.tsx +25 -0
  1926. package/kits/tunel/elementos/Montagem.tsx +67 -0
  1927. package/kits/tunel/elementos/NumeroGigante.tsx +28 -0
  1928. package/kits/tunel/elementos/PlacaVoadora.tsx +28 -0
  1929. package/kits/tunel/elementos/Som.tsx +33 -0
  1930. package/kits/tunel/elementos/TituloTunel.tsx +32 -0
  1931. package/kits/tunel/elementos/TunelDeFormas.tsx +52 -0
  1932. package/kits/tunel/elementos/base.ts +97 -0
  1933. package/kits/tunel/elementos/index.ts +15 -0
  1934. package/kits/tunel/exemplos/logo-rota21.svg +1 -0
  1935. package/kits/tunel/exemplos/plano.json +51 -0
  1936. package/kits/tunel/exemplos/roteiro.md +20 -0
  1937. package/kits/tunel/preview.tsx +12 -0
  1938. package/kits/tunel/receita.json +153 -0
  1939. package/kits/tunel/regras/area-segura.md +18 -0
  1940. package/kits/tunel/regras/cor.md +21 -0
  1941. package/kits/tunel/regras/movimento.md +17 -0
  1942. package/kits/tunel/regras/ritmo.md +14 -0
  1943. package/kits/tunel/regras/som.md +20 -0
  1944. package/kits/tunel/regras/tipografia.md +15 -0
  1945. package/kits/tutorial-tela/SKILL.md +55 -0
  1946. package/kits/tutorial-tela/assets/ASSETS.md +20 -0
  1947. package/kits/tutorial-tela/assets/fontes/OFL-JetBrainsMono.txt +93 -0
  1948. package/kits/tutorial-tela/assets/fontes/OFL-PlusJakartaSans.txt +93 -0
  1949. package/kits/tutorial-tela/assets/fontes/jakarta.woff2 +0 -0
  1950. package/kits/tutorial-tela/assets/fontes/jbmono.woff2 +0 -0
  1951. package/kits/tutorial-tela/assets/sons/assinatura.mp3 +0 -0
  1952. package/kits/tutorial-tela/assets/sons/clique.mp3 +0 -0
  1953. package/kits/tutorial-tela/assets/sons/digitar.mp3 +0 -0
  1954. package/kits/tutorial-tela/assets/sons/impacto.mp3 +0 -0
  1955. package/kits/tutorial-tela/assets/sons/pop-cartao.mp3 +0 -0
  1956. package/kits/tutorial-tela/assets/sons/pop-palavra.mp3 +0 -0
  1957. package/kits/tutorial-tela/assets/sons/subida.mp3 +0 -0
  1958. package/kits/tutorial-tela/assets/sons/sucesso.mp3 +0 -0
  1959. package/kits/tutorial-tela/assets/sons/swoosh.mp3 +0 -0
  1960. package/kits/tutorial-tela/assets/sons/whoosh-entra.mp3 +0 -0
  1961. package/kits/tutorial-tela/assets/sons/whoosh-sai.mp3 +0 -0
  1962. package/kits/tutorial-tela/assets/trilha/passo-108bpm.mp3 +0 -0
  1963. package/kits/tutorial-tela/capa.jpg +0 -0
  1964. package/kits/tutorial-tela/elementos/CameraTela.tsx +29 -0
  1965. package/kits/tutorial-tela/elementos/Cursor.tsx +36 -0
  1966. package/kits/tutorial-tela/elementos/DestaqueCaixa.tsx +17 -0
  1967. package/kits/tutorial-tela/elementos/Fundo.tsx +12 -0
  1968. package/kits/tutorial-tela/elementos/JanelaApp.tsx +81 -0
  1969. package/kits/tutorial-tela/elementos/Montagem.tsx +49 -0
  1970. package/kits/tutorial-tela/elementos/PassoChamada.tsx +22 -0
  1971. package/kits/tutorial-tela/elementos/Som.tsx +41 -0
  1972. package/kits/tutorial-tela/elementos/TeclaAtalho.tsx +29 -0
  1973. package/kits/tutorial-tela/elementos/TituloTela.tsx +30 -0
  1974. package/kits/tutorial-tela/elementos/base.ts +65 -0
  1975. package/kits/tutorial-tela/elementos/index.ts +12 -0
  1976. package/kits/tutorial-tela/exemplos/plano.json +41 -0
  1977. package/kits/tutorial-tela/exemplos/roteiro.md +14 -0
  1978. package/kits/tutorial-tela/preview.tsx +9 -0
  1979. package/kits/tutorial-tela/receita.json +15 -0
  1980. package/kits/tutorial-tela/regras/area-segura.md +13 -0
  1981. package/kits/tutorial-tela/regras/cor.md +17 -0
  1982. package/kits/tutorial-tela/regras/movimento.md +20 -0
  1983. package/kits/tutorial-tela/regras/ritmo.md +24 -0
  1984. package/kits/tutorial-tela/regras/som.md +21 -0
  1985. package/kits/tutorial-tela/regras/tipografia.md +15 -0
  1986. package/kits/ugc-reels/SKILL.md +53 -0
  1987. package/kits/ugc-reels/assets/ASSETS.md +22 -0
  1988. package/kits/ugc-reels/assets/fontes/OFL-Caveat.txt +92 -0
  1989. package/kits/ugc-reels/assets/fontes/OFL-Montserrat.txt +92 -0
  1990. package/kits/ugc-reels/assets/fontes/caveat-latin.woff2 +0 -0
  1991. package/kits/ugc-reels/assets/fontes/montserrat-latin.woff2 +0 -0
  1992. package/kits/ugc-reels/assets/sons/assinatura.mp3 +0 -0
  1993. package/kits/ugc-reels/assets/sons/corte.mp3 +0 -0
  1994. package/kits/ugc-reels/assets/sons/impacto.mp3 +0 -0
  1995. package/kits/ugc-reels/assets/sons/notificacao.mp3 +0 -0
  1996. package/kits/ugc-reels/assets/sons/palavra.mp3 +0 -0
  1997. package/kits/ugc-reels/assets/sons/pop.mp3 +0 -0
  1998. package/kits/ugc-reels/assets/sons/toque.mp3 +0 -0
  1999. package/kits/ugc-reels/assets/sons/whoosh.mp3 +0 -0
  2000. package/kits/ugc-reels/assets/trilha/pop-120bpm.mp3 +0 -0
  2001. package/kits/ugc-reels/capa.jpg +0 -0
  2002. package/kits/ugc-reels/elementos/AssinaturaMarca.tsx +28 -0
  2003. package/kits/ugc-reels/elementos/BotaoLink.tsx +24 -0
  2004. package/kits/ugc-reels/elementos/CabecalhoPerfil.tsx +38 -0
  2005. package/kits/ugc-reels/elementos/Camera.tsx +22 -0
  2006. package/kits/ugc-reels/elementos/Cena.tsx +48 -0
  2007. package/kits/ugc-reels/elementos/Comentario.tsx +29 -0
  2008. package/kits/ugc-reels/elementos/Fundo.tsx +8 -0
  2009. package/kits/ugc-reels/elementos/LegendaEmoji.tsx +43 -0
  2010. package/kits/ugc-reels/elementos/Montagem.tsx +69 -0
  2011. package/kits/ugc-reels/elementos/NotaDeMao.tsx +29 -0
  2012. package/kits/ugc-reels/elementos/Reacoes.tsx +26 -0
  2013. package/kits/ugc-reels/elementos/Som.tsx +33 -0
  2014. package/kits/ugc-reels/elementos/VideoCelular.tsx +37 -0
  2015. package/kits/ugc-reels/elementos/base.ts +92 -0
  2016. package/kits/ugc-reels/elementos/index.ts +17 -0
  2017. package/kits/ugc-reels/exemplos/fotos/foto-02.jpg +0 -0
  2018. package/kits/ugc-reels/exemplos/fotos/foto-03.jpg +0 -0
  2019. package/kits/ugc-reels/exemplos/fotos/foto-04.jpg +0 -0
  2020. package/kits/ugc-reels/exemplos/fotos/foto-06.jpg +0 -0
  2021. package/kits/ugc-reels/exemplos/logo-rotina.svg +1 -0
  2022. package/kits/ugc-reels/exemplos/plano.json +54 -0
  2023. package/kits/ugc-reels/exemplos/roteiro.md +20 -0
  2024. package/kits/ugc-reels/preview.tsx +16 -0
  2025. package/kits/ugc-reels/receita.json +147 -0
  2026. package/kits/ugc-reels/regras/area-segura.md +18 -0
  2027. package/kits/ugc-reels/regras/cor.md +22 -0
  2028. package/kits/ugc-reels/regras/movimento.md +19 -0
  2029. package/kits/ugc-reels/regras/ritmo.md +14 -0
  2030. package/kits/ugc-reels/regras/som.md +20 -0
  2031. package/kits/ugc-reels/regras/tipografia.md +16 -0
  2032. package/kits/vercel-mono/SKILL.md +51 -0
  2033. package/kits/vercel-mono/assets/ASSETS.md +18 -0
  2034. package/kits/vercel-mono/assets/fontes/OFL-Inter.txt +93 -0
  2035. package/kits/vercel-mono/assets/fontes/OFL-JetBrains-Mono.txt +93 -0
  2036. package/kits/vercel-mono/assets/fontes/inter.woff2 +0 -0
  2037. package/kits/vercel-mono/assets/fontes/jetbrains-mono.woff2 +0 -0
  2038. package/kits/vercel-mono/assets/sons/assinatura.mp3 +0 -0
  2039. package/kits/vercel-mono/assets/sons/clique.mp3 +0 -0
  2040. package/kits/vercel-mono/assets/sons/impacto.mp3 +0 -0
  2041. package/kits/vercel-mono/assets/sons/pop-cartao.mp3 +0 -0
  2042. package/kits/vercel-mono/assets/sons/pop-palavra.mp3 +0 -0
  2043. package/kits/vercel-mono/assets/sons/subida.mp3 +0 -0
  2044. package/kits/vercel-mono/assets/sons/swoosh.mp3 +0 -0
  2045. package/kits/vercel-mono/assets/sons/whoosh-entra.mp3 +0 -0
  2046. package/kits/vercel-mono/assets/sons/whoosh-sai.mp3 +0 -0
  2047. package/kits/vercel-mono/assets/trilha/trilha.mp3 +0 -0
  2048. package/kits/vercel-mono/capa.jpg +0 -0
  2049. package/kits/vercel-mono/elementos/AssinaturaMarca.tsx +18 -0
  2050. package/kits/vercel-mono/elementos/Camera.tsx +23 -0
  2051. package/kits/vercel-mono/elementos/Cena.tsx +46 -0
  2052. package/kits/vercel-mono/elementos/FaixaOutline.tsx +25 -0
  2053. package/kits/vercel-mono/elementos/Fundo.tsx +6 -0
  2054. package/kits/vercel-mono/elementos/GradeDeNumeros.tsx +27 -0
  2055. package/kits/vercel-mono/elementos/Montagem.tsx +61 -0
  2056. package/kits/vercel-mono/elementos/PalavraMono.tsx +31 -0
  2057. package/kits/vercel-mono/elementos/Quadro.tsx +28 -0
  2058. package/kits/vercel-mono/elementos/Som.tsx +39 -0
  2059. package/kits/vercel-mono/elementos/TerminalComando.tsx +33 -0
  2060. package/kits/vercel-mono/elementos/TrianguloGigante.tsx +27 -0
  2061. package/kits/vercel-mono/elementos/base.ts +82 -0
  2062. package/kits/vercel-mono/elementos/index.ts +16 -0
  2063. package/kits/vercel-mono/exemplos/logo-vetor.svg +1 -0
  2064. package/kits/vercel-mono/exemplos/plano.json +318 -0
  2065. package/kits/vercel-mono/exemplos/roteiro.md +20 -0
  2066. package/kits/vercel-mono/preview.tsx +12 -0
  2067. package/kits/vercel-mono/receita.json +156 -0
  2068. package/kits/vercel-mono/regras/area-segura.md +13 -0
  2069. package/kits/vercel-mono/regras/cor.md +12 -0
  2070. package/kits/vercel-mono/regras/movimento.md +15 -0
  2071. package/kits/vercel-mono/regras/ritmo.md +13 -0
  2072. package/kits/vercel-mono/regras/som.md +18 -0
  2073. package/kits/vercel-mono/regras/tipografia.md +14 -0
  2074. package/kits/vhs-90/SKILL.md +52 -0
  2075. package/kits/vhs-90/assets/ASSETS.md +23 -0
  2076. package/kits/vhs-90/assets/fontes/OFL-BebasNeue.txt +93 -0
  2077. package/kits/vhs-90/assets/fontes/OFL-VT323.txt +93 -0
  2078. package/kits/vhs-90/assets/fontes/bebas.woff2 +0 -0
  2079. package/kits/vhs-90/assets/fontes/vt323.woff2 +0 -0
  2080. package/kits/vhs-90/assets/sons/assinatura.mp3 +0 -0
  2081. package/kits/vhs-90/assets/sons/clique.mp3 +0 -0
  2082. package/kits/vhs-90/assets/sons/impacto.mp3 +0 -0
  2083. package/kits/vhs-90/assets/sons/pop-cartao.mp3 +0 -0
  2084. package/kits/vhs-90/assets/sons/pop-palavra.mp3 +0 -0
  2085. package/kits/vhs-90/assets/sons/subida.mp3 +0 -0
  2086. package/kits/vhs-90/assets/sons/swoosh.mp3 +0 -0
  2087. package/kits/vhs-90/assets/sons/whoosh-entra.mp3 +0 -0
  2088. package/kits/vhs-90/assets/sons/whoosh-sai.mp3 +0 -0
  2089. package/kits/vhs-90/assets/trilha/fita-88bpm.mp3 +0 -0
  2090. package/kits/vhs-90/capa.jpg +0 -0
  2091. package/kits/vhs-90/elementos/AssinaturaMarca.tsx +29 -0
  2092. package/kits/vhs-90/elementos/BarrasRastreio.tsx +21 -0
  2093. package/kits/vhs-90/elementos/Camera.tsx +22 -0
  2094. package/kits/vhs-90/elementos/CapaVHS.tsx +28 -0
  2095. package/kits/vhs-90/elementos/CarimboData.tsx +19 -0
  2096. package/kits/vhs-90/elementos/Cena.tsx +41 -0
  2097. package/kits/vhs-90/elementos/Fundo.tsx +27 -0
  2098. package/kits/vhs-90/elementos/MenuOSD.tsx +27 -0
  2099. package/kits/vhs-90/elementos/Montagem.tsx +60 -0
  2100. package/kits/vhs-90/elementos/Som.tsx +38 -0
  2101. package/kits/vhs-90/elementos/TelaAzul.tsx +29 -0
  2102. package/kits/vhs-90/elementos/TituloFita.tsx +40 -0
  2103. package/kits/vhs-90/elementos/base.ts +75 -0
  2104. package/kits/vhs-90/elementos/index.ts +16 -0
  2105. package/kits/vhs-90/exemplos/fotos/foto-05.jpg +0 -0
  2106. package/kits/vhs-90/exemplos/fotos/foto-07.jpg +0 -0
  2107. package/kits/vhs-90/exemplos/logo-rewind.svg +1 -0
  2108. package/kits/vhs-90/exemplos/plano.json +47 -0
  2109. package/kits/vhs-90/exemplos/roteiro.md +19 -0
  2110. package/kits/vhs-90/preview.tsx +17 -0
  2111. package/kits/vhs-90/receita.json +189 -0
  2112. package/kits/vhs-90/regras/area-segura.md +18 -0
  2113. package/kits/vhs-90/regras/cor.md +16 -0
  2114. package/kits/vhs-90/regras/movimento.md +16 -0
  2115. package/kits/vhs-90/regras/ritmo.md +16 -0
  2116. package/kits/vhs-90/regras/som.md +21 -0
  2117. package/kits/vhs-90/regras/tipografia.md +17 -0
  2118. package/kits/vidro-ios/SKILL.md +52 -0
  2119. package/kits/vidro-ios/assets/ASSETS.md +18 -0
  2120. package/kits/vidro-ios/assets/fontes/OFL-DM-Mono.txt +93 -0
  2121. package/kits/vidro-ios/assets/fontes/OFL-Inter.txt +93 -0
  2122. package/kits/vidro-ios/assets/fontes/dm-mono.woff2 +0 -0
  2123. package/kits/vidro-ios/assets/fontes/inter.woff2 +0 -0
  2124. package/kits/vidro-ios/assets/sons/assinatura.mp3 +0 -0
  2125. package/kits/vidro-ios/assets/sons/clique.mp3 +0 -0
  2126. package/kits/vidro-ios/assets/sons/impacto.mp3 +0 -0
  2127. package/kits/vidro-ios/assets/sons/pop-cartao.mp3 +0 -0
  2128. package/kits/vidro-ios/assets/sons/pop-palavra.mp3 +0 -0
  2129. package/kits/vidro-ios/assets/sons/subida.mp3 +0 -0
  2130. package/kits/vidro-ios/assets/sons/swoosh.mp3 +0 -0
  2131. package/kits/vidro-ios/assets/sons/whoosh-entra.mp3 +0 -0
  2132. package/kits/vidro-ios/assets/sons/whoosh-sai.mp3 +0 -0
  2133. package/kits/vidro-ios/assets/trilha/trilha.mp3 +0 -0
  2134. package/kits/vidro-ios/capa.jpg +0 -0
  2135. package/kits/vidro-ios/elementos/AssinaturaMarca.tsx +21 -0
  2136. package/kits/vidro-ios/elementos/Camera.tsx +23 -0
  2137. package/kits/vidro-ios/elementos/Cena.tsx +46 -0
  2138. package/kits/vidro-ios/elementos/Fundo.tsx +17 -0
  2139. package/kits/vidro-ios/elementos/IlhaDinamica.tsx +24 -0
  2140. package/kits/vidro-ios/elementos/Montagem.tsx +60 -0
  2141. package/kits/vidro-ios/elementos/PainelControle.tsx +33 -0
  2142. package/kits/vidro-ios/elementos/PilhaNotificacoes.tsx +29 -0
  2143. package/kits/vidro-ios/elementos/Som.tsx +39 -0
  2144. package/kits/vidro-ios/elementos/TituloVidro.tsx +22 -0
  2145. package/kits/vidro-ios/elementos/WidgetsGrade.tsx +34 -0
  2146. package/kits/vidro-ios/elementos/base.ts +87 -0
  2147. package/kits/vidro-ios/elementos/index.ts +16 -0
  2148. package/kits/vidro-ios/elementos/vidro.tsx +20 -0
  2149. package/kits/vidro-ios/exemplos/logo-vento.svg +1 -0
  2150. package/kits/vidro-ios/exemplos/plano.json +288 -0
  2151. package/kits/vidro-ios/exemplos/roteiro.md +20 -0
  2152. package/kits/vidro-ios/preview.tsx +12 -0
  2153. package/kits/vidro-ios/receita.json +170 -0
  2154. package/kits/vidro-ios/regras/area-segura.md +13 -0
  2155. package/kits/vidro-ios/regras/cor.md +16 -0
  2156. package/kits/vidro-ios/regras/movimento.md +16 -0
  2157. package/kits/vidro-ios/regras/ritmo.md +14 -0
  2158. package/kits/vidro-ios/regras/som.md +18 -0
  2159. package/kits/vidro-ios/regras/tipografia.md +15 -0
  2160. package/kits/y2k-cromado/SKILL.md +53 -0
  2161. package/kits/y2k-cromado/assets/ASSETS.md +23 -0
  2162. package/kits/y2k-cromado/assets/fontes/OFL-DMMono.txt +93 -0
  2163. package/kits/y2k-cromado/assets/fontes/OFL-Unbounded.txt +93 -0
  2164. package/kits/y2k-cromado/assets/fontes/dm-mono.woff2 +0 -0
  2165. package/kits/y2k-cromado/assets/fontes/unbounded.woff2 +0 -0
  2166. package/kits/y2k-cromado/assets/sons/assinatura.mp3 +0 -0
  2167. package/kits/y2k-cromado/assets/sons/clique.mp3 +0 -0
  2168. package/kits/y2k-cromado/assets/sons/impacto.mp3 +0 -0
  2169. package/kits/y2k-cromado/assets/sons/pop-cartao.mp3 +0 -0
  2170. package/kits/y2k-cromado/assets/sons/pop-palavra.mp3 +0 -0
  2171. package/kits/y2k-cromado/assets/sons/subida.mp3 +0 -0
  2172. package/kits/y2k-cromado/assets/sons/swoosh.mp3 +0 -0
  2173. package/kits/y2k-cromado/assets/sons/whoosh-entra.mp3 +0 -0
  2174. package/kits/y2k-cromado/assets/sons/whoosh-sai.mp3 +0 -0
  2175. package/kits/y2k-cromado/assets/trilha/y2k-128bpm.mp3 +0 -0
  2176. package/kits/y2k-cromado/capa.jpg +0 -0
  2177. package/kits/y2k-cromado/elementos/AssinaturaMarca.tsx +25 -0
  2178. package/kits/y2k-cromado/elementos/Bolhas.tsx +30 -0
  2179. package/kits/y2k-cromado/elementos/Brilhos.tsx +28 -0
  2180. package/kits/y2k-cromado/elementos/Camera.tsx +22 -0
  2181. package/kits/y2k-cromado/elementos/CartaoGloss.tsx +26 -0
  2182. package/kits/y2k-cromado/elementos/Cena.tsx +41 -0
  2183. package/kits/y2k-cromado/elementos/FitaMarquee.tsx +20 -0
  2184. package/kits/y2k-cromado/elementos/Fundo.tsx +18 -0
  2185. package/kits/y2k-cromado/elementos/JanelaY2K.tsx +31 -0
  2186. package/kits/y2k-cromado/elementos/Montagem.tsx +60 -0
  2187. package/kits/y2k-cromado/elementos/OrbeCromo.tsx +20 -0
  2188. package/kits/y2k-cromado/elementos/Som.tsx +38 -0
  2189. package/kits/y2k-cromado/elementos/TextoCromo.tsx +34 -0
  2190. package/kits/y2k-cromado/elementos/base.ts +75 -0
  2191. package/kits/y2k-cromado/elementos/index.ts +17 -0
  2192. package/kits/y2k-cromado/exemplos/fotos/foto-02.jpg +0 -0
  2193. package/kits/y2k-cromado/exemplos/fotos/foto-03.jpg +0 -0
  2194. package/kits/y2k-cromado/exemplos/logo-bolha.svg +1 -0
  2195. package/kits/y2k-cromado/exemplos/plano.json +47 -0
  2196. package/kits/y2k-cromado/exemplos/roteiro.md +19 -0
  2197. package/kits/y2k-cromado/preview.tsx +17 -0
  2198. package/kits/y2k-cromado/receita.json +174 -0
  2199. package/kits/y2k-cromado/regras/area-segura.md +19 -0
  2200. package/kits/y2k-cromado/regras/cor.md +16 -0
  2201. package/kits/y2k-cromado/regras/movimento.md +16 -0
  2202. package/kits/y2k-cromado/regras/ritmo.md +15 -0
  2203. package/kits/y2k-cromado/regras/som.md +21 -0
  2204. package/kits/y2k-cromado/regras/tipografia.md +17 -0
  2205. package/lib/act.js +464 -26
  2206. package/lib/afirmacoes.js +56 -0
  2207. package/lib/agendar.js +124 -0
  2208. package/lib/agentes/index.js +146 -0
  2209. package/lib/agentes/nucleo.js +18 -0
  2210. package/lib/backup-banco.js +121 -0
  2211. package/lib/boas-vindas.js +4 -3
  2212. package/lib/catalogo.js +20 -4
  2213. package/lib/chave-exposta.js +61 -0
  2214. package/lib/checkpoint-git.js +7 -4
  2215. package/lib/checkpoint.js +120 -3
  2216. package/lib/cli/review.js +64 -0
  2217. package/lib/cli/subcomandos.js +34 -0
  2218. package/lib/cli/tentativas.js +107 -0
  2219. package/lib/cli/util.js +51 -0
  2220. package/lib/comandos-extra.js +73 -4
  2221. package/lib/comecar.js +56 -0
  2222. package/lib/como-rodar.js +66 -0
  2223. package/lib/conferir.js +117 -0
  2224. package/lib/config.js +4 -2
  2225. package/lib/editor-pro-maquina.js +165 -0
  2226. package/lib/editor-pro.js +167 -23
  2227. package/lib/encolheu.js +33 -0
  2228. package/lib/entrada.js +1 -1
  2229. package/lib/entregaveis/cli.js +26 -0
  2230. package/lib/entregaveis/especialistas.js +50 -0
  2231. package/lib/entregaveis/nucleo.js +111 -0
  2232. package/lib/entregaveis/slides.js +221 -0
  2233. package/lib/entregaveis.js +67 -0
  2234. package/lib/escopo.js +68 -0
  2235. package/lib/especialistas.js +1 -1
  2236. package/lib/estudio/conferencia.js +71 -6
  2237. package/lib/estudio/gosto/tela.html +119 -4
  2238. package/lib/estudio/gosto-descrever.js +87 -0
  2239. package/lib/estudio/gosto-medir.js +204 -0
  2240. package/lib/estudio/gosto-prova.js +52 -0
  2241. package/lib/estudio/gosto.js +312 -9
  2242. package/lib/estudio/index.js +2 -2
  2243. package/lib/estudio/kits/tela.html +568 -0
  2244. package/lib/estudio/kits-tela.js +199 -0
  2245. package/lib/estudio/maquina-diretor.js +6 -2
  2246. package/lib/estudio/materiais.js +172 -0
  2247. package/lib/estudio/regras-motion.js +69 -0
  2248. package/lib/explicar.js +48 -0
  2249. package/lib/exportar-conversa.js +49 -0
  2250. package/lib/fundo.js +232 -0
  2251. package/lib/guardar.js +118 -0
  2252. package/lib/headless.js +20 -1
  2253. package/lib/idioma.js +74 -0
  2254. package/lib/kits-parecidos.js +99 -0
  2255. package/lib/kits-plano.js +557 -0
  2256. package/lib/kits.js +1084 -0
  2257. package/lib/limite.js +99 -0
  2258. package/lib/linha-do-tempo.js +130 -0
  2259. package/lib/local/cerebro.json +118 -2
  2260. package/lib/local/entrada.js +1 -1
  2261. package/lib/mapa.js +94 -0
  2262. package/lib/memoria-usuario.js +1 -1
  2263. package/lib/mencoes.js +10 -0
  2264. package/lib/mostrar.js +121 -0
  2265. package/lib/motioncraft.js +67 -0
  2266. package/lib/mudou.js +58 -0
  2267. package/lib/nomes.js +257 -0
  2268. package/lib/partes.js +39 -0
  2269. package/lib/passagem.js +30 -1
  2270. package/lib/perigo.js +74 -6
  2271. package/lib/placar.js +173 -0
  2272. package/lib/plano-previo.js +53 -0
  2273. package/lib/planos.js +1 -1
  2274. package/lib/plugin/autoteste.js +99 -0
  2275. package/lib/plugin/edicao-visual.js +133 -0
  2276. package/lib/plugin/pesquisar.js +92 -0
  2277. package/lib/plugin/preview-cli.js +38 -0
  2278. package/lib/plugin/preview.js +89 -0
  2279. package/lib/plugin/tunel.js +27 -0
  2280. package/lib/porta.js +147 -0
  2281. package/lib/publicar.js +112 -0
  2282. package/lib/registro.js +38 -4
  2283. package/lib/regras.js +88 -0
  2284. package/lib/review.js +134 -0
  2285. package/lib/saida.js +83 -0
  2286. package/lib/segredos.js +103 -0
  2287. package/lib/session/compactacao.js +124 -0
  2288. package/lib/statusline.js +52 -0
  2289. package/lib/team.js +317 -0
  2290. package/lib/tool/diagnostico.js +100 -0
  2291. package/lib/tool/perguntar.js +60 -0
  2292. package/lib/tool/reparar-entrada.js +66 -0
  2293. package/lib/tool/web.js +102 -0
  2294. package/lib/tools.js +104 -22
  2295. package/lib/trava.js +155 -0
  2296. package/lib/ui.js +43 -6
  2297. package/lib/video/conferir-legenda.js +47 -0
  2298. package/lib/video/ops.js +6 -1
  2299. package/lib/video/transcript.js +1 -1
  2300. package/lib/web-pagina.js +87 -0
  2301. package/materiais/saas-linear/base.ts +84 -0
  2302. package/materiais/saas-linear/camera/Camera.tsx +38 -0
  2303. package/materiais/saas-linear/fontes/OFL-Inter.txt +93 -0
  2304. package/materiais/saas-linear/fontes/OFL-Newsreader.txt +93 -0
  2305. package/materiais/saas-linear/fontes/inter-400.woff2 +0 -0
  2306. package/materiais/saas-linear/fontes/inter-600.woff2 +0 -0
  2307. package/materiais/saas-linear/fontes/newsreader-400.woff2 +0 -0
  2308. package/materiais/saas-linear/formas/Agenda.tsx +46 -0
  2309. package/materiais/saas-linear/formas/CaixaPrompt.tsx +41 -0
  2310. package/materiais/saas-linear/formas/CartoesIntegracao.tsx +57 -0
  2311. package/materiais/saas-linear/formas/Cursor.tsx +40 -0
  2312. package/materiais/saas-linear/formas/Menu.tsx +46 -0
  2313. package/materiais/saas-linear/formas/Monitor.tsx +28 -0
  2314. package/materiais/saas-linear/paleta.json +18 -0
  2315. package/materiais/saas-linear/pecas.json +590 -0
  2316. package/materiais/saas-linear/regras.md +40 -0
  2317. package/materiais/saas-linear/sons/Som.tsx +39 -0
  2318. package/materiais/saas-linear/sons/assinatura.mp3 +0 -0
  2319. package/materiais/saas-linear/sons/clique.mp3 +0 -0
  2320. package/materiais/saas-linear/sons/impacto.mp3 +0 -0
  2321. package/materiais/saas-linear/sons/pop-cartao.mp3 +0 -0
  2322. package/materiais/saas-linear/sons/pop-palavra.mp3 +0 -0
  2323. package/materiais/saas-linear/sons/subida.mp3 +0 -0
  2324. package/materiais/saas-linear/sons/swoosh.mp3 +0 -0
  2325. package/materiais/saas-linear/sons/trilha.mp3 +0 -0
  2326. package/materiais/saas-linear/sons/whoosh-entra.mp3 +0 -0
  2327. package/materiais/saas-linear/sons/whoosh-sai.mp3 +0 -0
  2328. package/materiais/saas-linear/texturas/Fundo.tsx +18 -0
  2329. package/materiais/saas-linear/texturas/Particulas.tsx +22 -0
  2330. package/materiais/saas-linear/tipografia/FraseSerifa.tsx +25 -0
  2331. package/materiais/saas-linear/tipografia/Marca.tsx +20 -0
  2332. package/materiais/saas-linear/tipografia/MarcaFinal.tsx +22 -0
  2333. package/materiais/saas-linear/tipografia/Saudacao.tsx +27 -0
  2334. package/materiais/saas-linear/transicoes/Cena.tsx +38 -0
  2335. package/materiais/saas-linear/transicoes/CorteImpacto.tsx +16 -0
  2336. package/package.json +6 -1
  2337. package/skills/deck-conferido/SKILL.md +29 -0
  2338. package/skills/motion-de-primeira/SKILL.md +1 -1
  2339. package/skills/motion-motioncraft/SKILL.md +31 -0
  2340. package/vendor/motioncraft/CREDITS.md +18 -0
  2341. package/vendor/motioncraft/LICENSE +21 -0
  2342. package/vendor/motioncraft/ORIGEM.txt +1 -0
  2343. package/vendor/motioncraft/SKILL.md +178 -0
  2344. package/vendor/motioncraft/assets/template/package-lock.json +2958 -0
  2345. package/vendor/motioncraft/assets/template/package.json +27 -0
  2346. package/vendor/motioncraft/assets/template/remotion.config.ts +4 -0
  2347. package/vendor/motioncraft/assets/template/src/Root.tsx +27 -0
  2348. package/vendor/motioncraft/assets/template/src/components/CachedFrames.tsx +11 -0
  2349. package/vendor/motioncraft/assets/template/src/components/EndCard.tsx +17 -0
  2350. package/vendor/motioncraft/assets/template/src/components/Headline.tsx +45 -0
  2351. package/vendor/motioncraft/assets/template/src/components/MorphTransition.tsx +28 -0
  2352. package/vendor/motioncraft/assets/template/src/components/Stage.tsx +52 -0
  2353. package/vendor/motioncraft/assets/template/src/components/Three.tsx +134 -0
  2354. package/vendor/motioncraft/assets/template/src/components/UI.tsx +103 -0
  2355. package/vendor/motioncraft/assets/template/src/components/Word.tsx +46 -0
  2356. package/vendor/motioncraft/assets/template/src/index.ts +3 -0
  2357. package/vendor/motioncraft/assets/template/src/lib/anim.ts +17 -0
  2358. package/vendor/motioncraft/assets/template/src/lib/beat.ts +23 -0
  2359. package/vendor/motioncraft/assets/template/src/lib/debug.tsx +12 -0
  2360. package/vendor/motioncraft/assets/template/src/lib/fonts.ts +6 -0
  2361. package/vendor/motioncraft/assets/template/src/lib/format-context.tsx +5 -0
  2362. package/vendor/motioncraft/assets/template/src/lib/format.d.mts +2 -0
  2363. package/vendor/motioncraft/assets/template/src/lib/format.mjs +28 -0
  2364. package/vendor/motioncraft/assets/template/src/lib/timeline.ts +29 -0
  2365. package/vendor/motioncraft/assets/template/src/lib/tokens.ts +9 -0
  2366. package/vendor/motioncraft/assets/template/src/scenes/Example.tsx +76 -0
  2367. package/vendor/motioncraft/assets/template/src/scenes/Launch.tsx +26 -0
  2368. package/vendor/motioncraft/assets/template/src/scenes/TimelineLegacy.tsx +24 -0
  2369. package/vendor/motioncraft/assets/template/src/scenes/TimelineVideo.tsx +49 -0
  2370. package/vendor/motioncraft/assets/template/src/scenes/Tutorial.tsx +37 -0
  2371. package/vendor/motioncraft/assets/template/src/style.json +62 -0
  2372. package/vendor/motioncraft/assets/template/tsconfig.json +7 -0
  2373. package/vendor/motioncraft/references/animation-system.md +57 -0
  2374. package/vendor/motioncraft/references/assets-and-licensing.md +21 -0
  2375. package/vendor/motioncraft/references/customization.md +52 -0
  2376. package/vendor/motioncraft/references/gpu-cloud-render.md +15 -0
  2377. package/vendor/motioncraft/references/music.md +43 -0
  2378. package/vendor/motioncraft/references/phase1-planning-and-preview.md +74 -0
  2379. package/vendor/motioncraft/references/phase2-timeline-audio.md +33 -0
  2380. package/vendor/motioncraft/references/phase3-pixel-review.md +13 -0
  2381. package/vendor/motioncraft/references/phase4-templates.md +30 -0
  2382. package/vendor/motioncraft/references/preflight.md +27 -0
  2383. package/vendor/motioncraft/references/qa.md +53 -0
  2384. package/vendor/motioncraft/references/reference-analysis.md +37 -0
  2385. package/vendor/motioncraft/references/research-and-topic.md +25 -0
  2386. package/vendor/motioncraft/references/script-and-structure.md +39 -0
  2387. package/vendor/motioncraft/references/sfx.md +40 -0
  2388. package/vendor/motioncraft/references/social-formats.md +18 -0
  2389. package/vendor/motioncraft/references/taste.md +36 -0
  2390. package/vendor/motioncraft/references/troubleshooting.md +19 -0
  2391. package/vendor/motioncraft/references/typography.md +34 -0
  2392. package/vendor/motioncraft/references/voiceover.md +37 -0
  2393. package/vendor/motioncraft/references/workflow.md +40 -0
  2394. package/vendor/motioncraft/scripts/assets/timeline-editor.js +24 -0
  2395. package/vendor/motioncraft/scripts/doctor.ps1 +13 -0
  2396. package/vendor/motioncraft/scripts/doctor.sh +23 -0
  2397. package/vendor/motioncraft/scripts/lib/audio.mjs +58 -0
  2398. package/vendor/motioncraft/scripts/lib/check-update.mjs +66 -0
  2399. package/vendor/motioncraft/scripts/lib/commands.mjs +147 -0
  2400. package/vendor/motioncraft/scripts/lib/doctor.mjs +67 -0
  2401. package/vendor/motioncraft/scripts/lib/dsp.mjs +178 -0
  2402. package/vendor/motioncraft/scripts/lib/music.mjs +162 -0
  2403. package/vendor/motioncraft/scripts/lib/phase1.mjs +90 -0
  2404. package/vendor/motioncraft/scripts/lib/phase2.mjs +89 -0
  2405. package/vendor/motioncraft/scripts/lib/qa-full.mjs +24 -0
  2406. package/vendor/motioncraft/scripts/lib/qa-pixels.mjs +47 -0
  2407. package/vendor/motioncraft/scripts/lib/qa.mjs +66 -0
  2408. package/vendor/motioncraft/scripts/lib/qa_full.py +45 -0
  2409. package/vendor/motioncraft/scripts/lib/qa_pixels.py +50 -0
  2410. package/vendor/motioncraft/scripts/lib/render-worker.mjs +37 -0
  2411. package/vendor/motioncraft/scripts/lib/render.mjs +31 -0
  2412. package/vendor/motioncraft/scripts/lib/retime-audio.mjs +49 -0
  2413. package/vendor/motioncraft/scripts/lib/sfx.mjs +68 -0
  2414. package/vendor/motioncraft/scripts/lib/style.mjs +44 -0
  2415. package/vendor/motioncraft/scripts/lib/templates.mjs +34 -0
  2416. package/vendor/motioncraft/scripts/lib/timeline-editor.mjs +74 -0
  2417. package/vendor/motioncraft/scripts/lib/util.mjs +45 -0
  2418. package/vendor/motioncraft/scripts/lib/voices.mjs +85 -0
  2419. package/vendor/motioncraft/scripts/motioncraft.mjs +79 -0
  2420. package/vendor/motioncraft/scripts/py/whisper_words.py +13 -0
  2421. package/vendor/motioncraft/styles/mono-editorial/style.md +13 -0
  2422. package/vendor/motioncraft/styles/mono-editorial/tokens.json +256 -0
  2423. package/vendor/motioncraft/styles/pi-v2/style.md +15 -0
  2424. package/vendor/motioncraft/styles/pi-v2/tokens.json +62 -0
  2425. package/vendor/motioncraft/styles/pi-v2-dark/style.md +13 -0
  2426. package/vendor/motioncraft/styles/pi-v2-dark/tokens.json +256 -0
  2427. package/vendor/motioncraft/styles/tech-neon-soft/style.md +13 -0
  2428. package/vendor/motioncraft/styles/tech-neon-soft/tokens.json +256 -0
  2429. package/vendor/motioncraft/styles/warm-paper/style.md +13 -0
  2430. package/vendor/motioncraft/styles/warm-paper/tokens.json +256 -0
  2431. package/vendor/motioncraft/tests/beat.test.mjs +13 -0
  2432. package/vendor/motioncraft/tests/camera3d.test.mjs +22 -0
  2433. package/vendor/motioncraft/tests/check-update.test.mjs +19 -0
  2434. package/vendor/motioncraft/tests/format.test.mjs +23 -0
  2435. package/vendor/motioncraft/tests/kinetic.test.mjs +10 -0
  2436. package/vendor/motioncraft/tests/morph.test.mjs +13 -0
  2437. package/vendor/motioncraft/tests/phase1.test.mjs +27 -0
  2438. package/vendor/motioncraft/tests/phase2.test.mjs +57 -0
  2439. package/vendor/motioncraft/tests/phase3.test.mjs +25 -0
  2440. package/vendor/motioncraft/tests/phase4.test.mjs +21 -0
  2441. package/vendor/motioncraft/tests/qa-frame-rate.test.mjs +15 -0
  2442. package/vendor/motioncraft/tests/qa-full.test.mjs +10 -0
  2443. package/vendor/motioncraft/tests/render-worker.test.mjs +7 -0
  2444. package/vendor/motioncraft/tests/retime-audio.test.mjs +23 -0
  2445. package/vendor/motioncraft/tests/timeline-editor.test.mjs +45 -0
  2446. package/vendor/pptxgenjs/carregar.js +12 -0
  2447. package/vendor/pptxgenjs/jszip.min.js +13 -0
  2448. package/vendor/pptxgenjs/pptxgen.cjs.js +7370 -0
  2449. package/voz/primo_voz/transcrever.py +34 -4
  2450. /package/comandos/{explicar.md → explain.md} +0 -0
  2451. /package/comandos/{revisar.md → review.md} +0 -0
  2452. /package/comandos/{publicar.md → ship.md} +0 -0
package/bin/primocode.js CHANGED
@@ -38,6 +38,7 @@ const perigo = require('../lib/perigo');
38
38
  const skills = require('../lib/skills');
39
39
  const checkpoint = require('../lib/checkpoint');
40
40
  const comandosLib = require('../lib/comandos');
41
+ const nomes = require('../lib/nomes');
41
42
  const marketplace = require('../lib/marketplace');
42
43
  const portaoSkill = require('../lib/portao-skill');
43
44
  const vozModo = require('../lib/voz');
@@ -49,10 +50,11 @@ const compat = require('../lib/compatibilidade');
49
50
  const mencoesLib = require('../lib/mencoes');
50
51
  const extra = require('../lib/comandos-extra');
51
52
  const offline = require('../lib/offline');
53
+ const conferirLib = require('../lib/conferir');
52
54
 
53
55
  /* O /custo: toda conversa com o modelo passa pelo lib/api.js, e o contador
54
56
  embrulha as funções dele uma vez, aqui. Quem atende é o provedor do /api
55
- quando há um, senão o servidor — é por eles que o /custo separa. */
57
+ quando há um, senão o servidor — é por eles que o /usage separa. */
56
58
  const contadorDaSessao = extra.novoContador();
57
59
  extra.instalarContador(api, contadorDaSessao, () => {
58
60
  const p = provedorLocal.atual();
@@ -93,6 +95,7 @@ const VERSION = pkg.version;
93
95
  const state = {
94
96
  config: cfg.loadConfig(),
95
97
  history: [],
98
+ passosProntos: null, // os passos que a pessoa aprovou no /plan: o próximo enviarPedido usa em vez de dividir
96
99
  resumindo: null, // o resumo da última rodada, sendo feito em segundo plano
97
100
  mode: null, // 'primocode' | 'chat' | 'auto' — vem da config em main()
98
101
  modoEfetivo: null, // no auto, o modo que o último pedido usou de fato
@@ -120,55 +123,32 @@ const state = {
120
123
  controle: permissao.novo(),
121
124
  currentProject: null,
122
125
  workDir: null, // pasta onde o agente trabalha nesta sessão
123
- workDirOrigem: null, // 'padrao' | '/dir' | 'detectada' | 'projeto' — para o /dir explicar
126
+ workDirOrigem: null, // 'padrao' | '/dir' | 'detectada' | 'projeto' | 'terminal' (o -p) — para o /dir explicar
124
127
  };
125
128
 
126
- const HELP = `
127
- ${c.bold('Comandos')}
128
- ${c.brand('/resume')} [n|id] retoma uma conversa salva (sem argumento, lista)
129
- ${c.brand('/worktree')} <nome> cria ../<repo>-<nome> numa branch nova e entra
130
- ${c.brand('/dir')} <caminho> trabalha numa pasta que já existe (onde você quiser)
131
- ${c.brand('/project')} lista projetos ou cria em ~/primocode: /project <nome>
132
- ${c.brand('/projetos')} [n] projetos do mais recente, com tamanho · /projetos 2 entra
133
- ${c.brand('/novo')} <descrição> começa um projeto NOVO do zero, em pasta própria
134
- ${c.brand('/mode')} /mode primocode|chat|auto
135
- ${c.brand('/effort')} esforço do agente — do rápido ao mais esperto
136
- ${c.brand('/permissoes')} quando ele pergunta antes de agir: auto|perguntar|livre|plano
129
+ /* O /help: os comandos nos 9 grupos de lib/nomes.js, cada um com a descrição
130
+ que o menu já tem (SLASH_COMANDOS + os .md da pessoa e de fábrica). É função
131
+ porque SLASH_COMANDOS nasce depois deste ponto do arquivo. */
132
+ function linhasDosGrupos() {
133
+ const desc = new Map(comandosDoMenu().map(([n, d]) => [n.slice(1), d]));
134
+ const saida = [];
135
+ for (const g of nomes.agrupados()) {
136
+ saida.push(c.bold(g.titulo));
137
+ for (const n of g.comandos) {
138
+ const d = desc.get(n);
139
+ saida.push(d ? ` ${c.brand(ui.padRight('/' + n, 16))}${c.muted(d)}` : ` ${c.brand('/' + n)}`);
140
+ }
141
+ saida.push('');
142
+ }
143
+ return saida;
144
+ }
145
+
146
+ function montarHelp() {
147
+ return `
148
+ ${c.bold('Comandos')} ${c.dim('· os nomes em português continuam valendo (/desfazer = /undo)')}
149
+
150
+ ${linhasDosGrupos().join('\n')}
137
151
  ${c.brand('-p')} "pedido" modo script: sem tela, aceita stdin e --output-format json
138
- ${c.brand('/memoria')} o que ele lembra de você: /memoria esquecer <nome> · /memoria pasta
139
- ${c.brand('/gosto')} o seu gosto de motion: /gosto refazer|apagar
140
- ${c.brand('/sandbox')} isola os comandos do agente: on|off|rede on|off|status
141
- ${c.brand('/compact')} resume a conversa e devolve o contexto
142
- ${c.brand('/init')} estuda o projeto e escreve o PRIMO.md
143
- ${c.brand('/attach')} <arquivo> anexa arquivo ao próximo pedido · ou @arquivo no pedido
144
- ${c.brand('/files')} lista anexos ${c.brand('/detach')} remove
145
- ${c.brand('/all')} lista tudo que ele sabe fazer
146
- ${c.brand('/desfazer')} [lista|N] desfaz o que o último pedido (ou os N últimos) mudou
147
- ${c.brand('/tree')} [n] árvore do projeto
148
- ${c.brand('/read')} <arquivo> mostra um arquivo
149
- ${c.brand('/run')} <comando> executa no shell do projeto
150
- ${c.brand('/open')} <arq|url> abre no navegador
151
- ${c.brand('/abrir')} abre o projeto: o servidor de pé, ou a index.html
152
- ${c.brand('/copiar')} copia a última resposta
153
- ${c.brand('/videos')} seus vídeos prontos (abrir <n> · pasta <n>)
154
- ${c.brand('/historico')} [termo] procura nos seus pedidos antigos
155
- ${c.brand('/login')} entra na sua conta · ${c.brand('/account')} mostra o plano
156
- ${c.brand('/planos')} os planos e o link para assinar
157
- ${c.brand('/chats')} [n] suas conversas — as mesmas do app e do celular
158
- ${c.brand('/logout')} desconecta este computador da conta
159
- ${c.brand('/comandos')} seus comandos (/revisar, /explicar…) · /comandos novo <nome>
160
- ${c.brand('/status')} checa o servidor
161
- ${c.brand('/offline')} roda o servidor no seu computador (temporário) · /offline off volta
162
- ${c.brand('/doctor')} confere tudo (servidor, /api, Chrome, disco…) e diz como consertar
163
- ${c.brand('/custo')} tokens e pedidos desta sessão, por provedor
164
- ${c.brand('/atalhos')} as teclas que ajudam
165
- ${c.brand('/name')} <nome> como o Primo te chama
166
- ${c.brand('/marca')} [criar|listar|usar] o kit de marca: cores, fontes e logo em todo vídeo
167
- ${c.brand('/mascot')} [nome|n] galeria dos mascotes · /mascot reacoes on|off
168
- ${c.brand('/config')} mostra suas preferências
169
- ${c.brand('/clear')} limpa a conversa ${c.brand('/cls')} limpa a tela
170
- ${c.brand('/uninstall')} remove o PrimoCode
171
- ${c.brand('/exit')} sai do PrimoCode
172
152
 
173
153
  ${c.bold('Modos')}
174
154
  ${c.warn('Primo Code')} ${c.muted('Agente completo — cria arquivos, roda comandos, abre o navegador')}
@@ -182,39 +162,59 @@ ${c.bold('Onde ele trabalha')}
182
162
  ${c.muted(' ·')} ${c.muted('falar o nome dela no pedido — ele procura no seu computador')}
183
163
  ${c.dim('Pasta de projeto nova só nasce quando ele vai mexer em arquivo.')}
184
164
  `;
165
+ }
185
166
 
186
167
  // ── Autopreenchimento dos comandos (estilo Claude Code) ────────────────
187
168
  // Metade do comando já serve: Tab completa, e um prefixo único executa
188
169
  // direto — "/eff" vira "/effort" sozinho. A lista é só a dos nomes
189
170
  // canônicos; os apelidos (/cd, /stream…) continuam valendo por extenso.
190
171
  const SLASH_COMANDOS = [
191
- ['/help', 'todos os comandos'],
192
- ['/project', 'lista/cria projetos em ~/primocode'],
193
- ['/projetos', 'projetos do mais recente, com tamanho · /projetos 2 entra'],
194
- ['/novo', 'começa um projeto novo do zero: /novo site da padaria'],
172
+ ['/help', 'todos os comandos · /help all: tudo que ele sabe fazer'],
173
+ ['/projects', 'seus projetos, do mais recente · /projects 2 entra · /projects <nome> cria'],
174
+ ['/new', 'projeto novo do zero: /new site da padaria · sem nada: 3 perguntas pra quem nunca programou'],
195
175
  ['/dir', 'trabalhar numa pasta sua'],
176
+ ['/worktree', 'cria ../<repo>-<nome> numa branch nova e entra'],
177
+ ['/resume', 'retoma uma conversa salva (sem número, lista)'],
178
+ ['/sandbox', 'isola os comandos do agente: on | off | rede on | off | status'],
196
179
  ['/mode', 'primocode | chat | auto'],
197
180
  ['/effort', 'esforço: low → ultracode (←/→ para ajustar)'],
198
- ['/permissoes', 'auto | perguntar | livre | plano — quando ele pede licença'],
199
- ['/memoria', 'o que ele lembra de você · esquecer <nome> · pasta'],
181
+ ['/perms', 'auto | perguntar | livre | plano — quando ele pede licença'],
182
+ ['/memory', 'o que ele lembra de você · esquecer <nome> · pasta'],
183
+ ['/taste', 'o seu gosto de motion e pra onde ele inclina (refazer, apagar, tirar N) · /taste referencias: ensina com vídeos que você curtiu'],
200
184
  ['/compact', 'resume a conversa e devolve o contexto'],
201
185
  ['/init', 'estuda o projeto e escreve o PRIMO.md (as instruções dele)'],
202
- ['/attach', 'anexa arquivo ao pedido'],
186
+ ['/attach', 'anexa um arquivo ou uma página (/attach <url>) · sem nada, lista · /detach tira'],
203
187
  ['/detach', 'remove os anexos'],
204
- ['/files', 'lista os anexos'],
205
- ['/all', 'tudo que ele sabe fazer'],
206
- ['/desfazer', 'desfaz o que o último pedido mudou nos arquivos (lista · N)'],
207
- ['/tree', 'árvore do projeto'],
188
+ ['/undo', 'desfaz o que o último pedido mudou nos arquivos (lista · N · out)'],
189
+ ['/redo', 'volta o que o último /undo desfez'],
190
+ ['/check', 'testa o projeto e diz se funcionou (/conferir e /testar ainda valem)'],
191
+ ['/restore', 'volta pro último ponto que o /check marcou como funcionando'],
192
+ ['/show', 'abre o app no celular de alguém no mesmo Wi-Fi, sem publicar'],
193
+ ['/howto', 'escreve no PRIMO.md como abrir e testar este projeto'],
194
+ ['/save', 'guarda o projeto no GitHub (privado) e mostra o link · também vale /guardar'],
195
+ ['/secrets', 'as chaves que o projeto usa (só os nomes) · /secrets add NOME guarda uma, escondida, no .env · também vale /segredos'],
196
+ ['/testar-app', 'sobe o app, abre, clica nos fluxos e conserta os erros (até 2 rodadas)'],
197
+ ['/pesquisar', 'relatório com fontes: /pesquisar <tema> grava em pesquisas/'],
198
+ ['/placar', 'qual modelo grátis acerta mais em cada tipo de tarefa, aprendido aqui · /placar zerar apaga'],
199
+ ['/schedule', 'um pedido que roda sozinho: /schedule "toda segunda às 9h" <pedido> · sem nada, lista · /schedule off 1 tira · também vale /agendar'],
200
+ ['/lock', 'arquivos que o agente só pode ler · /lock login.js trava · /lock off login.js solta · sem nada, lista'],
201
+ ['/rule', 'uma regra que o PrimoCode segue sempre, mesmo depois de resumir a conversa'],
202
+ ['/port', 'o app não abre? diz qual porta responde e o endereço certo'],
203
+ ['/map', 'o que tem no projeto, em português, e o que está faltando · /map tree: as pastas'],
204
+ ['/explain', 'o que o último pedido mudou, em até 5 linhas · /explain commit: uma palavra · /explain projeto: o projeto todo'],
205
+ ['/review', 'revisa o que mudou em duas passadas: acha e depois confere cada achado · /review rápido: uma passada só'],
206
+ ['/plan', 'mostra 3 a 5 passos e só começa quando você aperta Enter (ou muda um passo) · /plan <pedido>'],
207
+ ['/changes', 'o que mudou no projeto, em português (arquivos e linhas)'],
208
+ ['/timeline', 'abre a história do projeto numa página'],
208
209
  ['/read', 'mostra um arquivo'],
209
210
  ['/run', 'roda um comando'],
210
- ['/open', 'abre no navegador'],
211
- ['/abrir', 'abre o projeto atual: o servidor de pé, ou a index.html'],
212
- ['/copiar', 'copia a última resposta'],
211
+ ['/open', 'abre o projeto (sem nada), um arquivo ou um site no navegador'],
212
+ ['/export', 'salva a conversa num .md, sem chave nem senha'],
213
+ ['/copy', 'copia a última resposta'],
213
214
  ['/videos', 'seus vídeos prontos (abrir n · pasta n)'],
214
- ['/historico', 'procura nos seus pedidos antigos: /historico login'],
215
+ ['/history', 'procura nos seus pedidos antigos: /history login'],
215
216
  ['/login', 'entra na sua conta (abre o navegador) · /login senha: e-mail e senha aqui'],
216
- ['/account', 'sua conta e o seu plano'],
217
- ['/planos', 'os planos do PrimoCode e o link para assinar'],
217
+ ['/account', 'sua conta e o seu plano · /account plans: os planos e o link para assinar'],
218
218
  ['/chats', 'suas conversas salvas, as mesmas do app e do celular'],
219
219
  ['/logout', 'desconecta este computador da conta'],
220
220
  ['!comando', 'roda direto no shell, sem passar pelo agente (o campo fica âmbar)'],
@@ -222,19 +222,19 @@ const SLASH_COMANDOS = [
222
222
  ['/voice painel', 'só o painel do Primo (ESC esconde)'],
223
223
  ['/voice nome <Nome>', 'dá outro nome ao assistente (só o nome; o modo voz abre no clique)'],
224
224
  ['/voice parar', 'desliga o modo voz e fecha o microfone'],
225
- ['/skills', 'o que ele sabe fazer bem — ligue e desligue'],
226
- ['/marketplace', 'a tela das skills: navegue, ligue, crie'],
227
- ['/install-skill', 'instala uma skill de um arquivo'],
228
- ['/comandos', 'seus comandos: um .md vira /nome · /comandos novo <nome>'],
225
+ ['/skills', 'o que ele sabe fazer bem · /skills store: a loja · /skills add <arquivo>: instala'],
226
+ ['/commands', 'seus comandos: um .md vira /nome · /commands novo <nome>'],
227
+ ['/styles', 'os estilos de motion (kits): a lista e a galeria · /styles <estilo>: o preview dele'],
228
+ ['/team', 'trabalhar junto com o claude, codex, gemini, agy ou opencode: /team <nome> liga · /team off'],
229
229
  ['/api', 'usa a SUA chave (Gemini, ChatGPT, Claude…) direto daqui, sem o limite do servidor'],
230
- ['/status', 'checa o servidor'],
231
230
  ['/offline', 'roda o servidor aqui no seu computador, com as chaves do Render'],
232
- ['/doctor', 'confere se está tudo certo e diz como consertar'],
233
- ['/custo', 'tokens e pedidos desta sessão, por provedor'],
234
- ['/atalhos', 'as teclas que ajudam'],
231
+ ['/doctor', 'confere se está tudo certo e diz como consertar · /doctor status: só o servidor'],
232
+ ['/usage', 'quanto você gastou (agora e hoje) e quando zera · /usage limite 100000 ensina o limite do seu plano'],
233
+ ['/tasks', 'o que roda em segundo plano · rodar <cmd> · abrir · parar <id>'],
234
+ ['/keys', 'as teclas que ajudam'],
235
235
  ['/connectors', 'quem está atendendo os seus pedidos'],
236
- ['/name', 'como ele te chama'],
237
- ['/marca', 'kit de marca: cores, fontes e logo'],
236
+ ['/name', 'como ele te chama · /name voz <Nome>: o nome do assistente de voz'],
237
+ ['/brand', 'kit de marca: cores, fontes e logo'],
238
238
  ['/mascot', 'galeria dos mascotes · escolha por nome ou número'],
239
239
  ['/config', 'suas preferências'],
240
240
  ['/clear', 'limpa a conversa'],
@@ -417,11 +417,15 @@ function comandosDoMenu() {
417
417
  }
418
418
 
419
419
  function mostrarMenuSlash() {
420
+ // "/" sozinho mostra as 9 intenções, não a lista seca; o /help tem tudo, com descrição.
420
421
  console.log('');
421
- for (const [nome, desc] of comandosDoMenu()) {
422
- console.log(` ${c.brand(ui.padRight(nome, 12))}${c.muted(desc)}`);
422
+ for (const g of nomes.agrupados()) {
423
+ console.log(` ${c.bold(ui.padRight(g.titulo, 19))}${c.brand(g.comandos.map((n) => '/' + n).join(' '))}`);
423
424
  }
424
- console.log(c.dim('\n Tab completa · metade do comando já serve: /eff vira /effort'));
425
+ const dela = comandosDaPessoa().filter((x) => !nomes.COMANDOS[x.nome]);
426
+ if (dela.length) console.log(` ${c.bold(ui.padRight('Os seus', 19))}${c.brand(dela.map((x) => '/' + x.nome).join(' '))}`);
427
+ console.log(c.dim('\n /help explica cada um · Tab completa · metade do comando já serve: /eff vira /effort'));
428
+ console.log(c.dim(' Os nomes em português continuam valendo: /undo chama o /undo.'));
425
429
  }
426
430
 
427
431
  let rl = null;
@@ -486,6 +490,14 @@ function barraDeStatus() {
486
490
  esquece que deu — e ela vale até o PrimoCode fechar. */
487
491
  if (state.controle && state.controle.liberado) partes.push(c.warn('controle do pc'));
488
492
 
493
+ /* O que o agente deixou de pé (run_background). Servidor esquecido segura
494
+ a porta e gasta bateria: tem que estar à vista enquanto roda. */
495
+ const vivos = require('../lib/fundo.js').listar().filter((t) => t.rodando);
496
+ if (vivos.length) {
497
+ const porta = vivos.length === 1 && vivos[0].url && (vivos[0].url.match(/:(\d+)/) || [])[1];
498
+ partes.push(c.ok('●') + ' ' + c.muted(porta ? `de pé :${porta}` : `${vivos.length} de pé`));
499
+ }
500
+
489
501
  /* O CONTEXTO. Só aparece depois que há conversa: um "ctx 0%" na abertura
490
502
  é ruído, e ruído que aparece sempre é o que a pessoa aprende a não
491
503
  enxergar — inclusive quando marcar 90%. Âmbar a partir de 70% e
@@ -493,11 +505,9 @@ function barraDeStatus() {
493
505
  conselho e vira o que fazer. */
494
506
  const direita = [];
495
507
  const uso = memoria.usoDoContexto(state.memoria, state.history);
496
- if (uso.pct >= 5) {
497
- direita.push(uso.pct >= 100 ? c.err(`${uso.pct}% ctx`)
498
- : uso.pct >= 70 ? c.warn(`${uso.pct}% ctx`)
499
- : c.dim(`${uso.pct}% ctx`));
500
- }
508
+ // Modelo que respondeu · contexto · tokens de hoje (os mesmos do /usage) — lib/statusline.js.
509
+ const SL = require('../lib/statusline.js');
510
+ direita.push(...SL.partes({ modelo: SL.modelo(), ctxPct: uso.pct, tokensHoje: SL.tokensDeHoje(), c }));
501
511
  direita.push(state.trabalhando && rl && rl.ocupado
502
512
  ? c.warn('trabalhando') + c.dim(' · ') + c.white('esc esc') + c.dim(' para')
503
513
  : c.white('tab') + c.dim(' modos ') + c.white('ctrl+p') + c.dim(' comandos'));
@@ -772,7 +782,7 @@ function ehSoEstudio(texto) {
772
782
  function planWorkDir(userText) {
773
783
  // O /novo já criou a pasta e entrou nela: nenhuma heurística decide outra.
774
784
  if (state.projetoFixo) return { dir: state.workDir, pending: false, name: state.currentProject };
775
- const escolhida = ['/dir', 'detectada', 'projeto'].includes(state.workDirOrigem);
785
+ const escolhida = ['/dir', 'detectada', 'projeto', 'terminal'].includes(state.workDirOrigem);
776
786
  // Pasta escolhida a dedo (/dir, ou dita no pedido) manda sempre. Projeto
777
787
  // em andamento manda também — a menos que o pedido abra outra coisa.
778
788
  if (escolhida && !(state.workDirOrigem === 'projeto' && pedeProjetoNovo(userText))) {
@@ -801,6 +811,32 @@ async function perguntarNome(texto) {
801
811
  return resposta;
802
812
  }
803
813
 
814
+ /* O corpo do /novo, num lugar só: o /comecar também cria a pasta e roda o
815
+ pedido preso nela, e dois caminhos copiados divergiriam. */
816
+ async function criarProjetoNovo(rest) {
817
+ const nomes = cfg.listProjects();
818
+ const sp = new Spinner('escolhendo o nome da pasta').start();
819
+ const sugerido = await nomeProjeto.escolher({ pedido: rest, nomes, perguntar: perguntarNome }).catch(() => null);
820
+ sp.stop();
821
+ const nomeNovo = extra.nomeDoNovo({
822
+ descricao: rest, nomes, sugerido, derivar: deriveProjectName,
823
+ // A régua curta (lib/nome-curto.js) também no /novo.
824
+ slugify: (t) => nomeCurto(t) || cfg.slugify(t), semColisao: nomeProjeto.semColisao,
825
+ });
826
+ const dir = cfg.createProjectDir(nomeNovo);
827
+ entrarNoProjeto(dir, 'projeto');
828
+ // Conversa nova junto: o que se falou do projeto anterior puxaria o
829
+ // agente de volta para ele.
830
+ state.history = []; state.memoria = memoria.nova(); state.gravador.zerar();
831
+ console.log(c.ok(` Projeto novo: ${state.currentProject}`) + c.muted(` (${shortPath(dir)})`));
832
+ refreshPrompt();
833
+ const modoAntes = state.mode;
834
+ state.mode = 'primocode';
835
+ state.projetoFixo = true;
836
+ try { await sendPrompt(extra.pedidoDoNovo(rest, state.currentProject)); }
837
+ finally { state.mode = modoAntes; state.projetoFixo = false; }
838
+ }
839
+
804
840
  function batizarDepois(plan, userText) {
805
841
  if (!plan.pending || !(RE_CRIAR_UM.test(semAcento(userText)) || PEDIDO_DE_CODIGO.test(userText))) return;
806
842
  plan.batizando = nomeProjeto.escolher({ pedido: userText, nomes: cfg.listProjects(), perguntar: perguntarNome })
@@ -956,7 +992,7 @@ async function autorizarControle(oQueVaiFazer, { primeira, tipo } = {}) {
956
992
  console.log('');
957
993
  console.log(' ' + c.warn('▸▸') + ' ' + c.bold(c.white(tipo === 'perigo'
958
994
  ? 'Isto não tem volta. O Primo quer:'
959
- : 'O Primo quer (você escolheu /permissoes perguntar):')));
995
+ : 'O Primo quer (você escolheu /perms perguntar):')));
960
996
  } else if (primeira) {
961
997
  console.log('');
962
998
  console.log(' ' + c.warn('▸▸') + ' ' + c.bold(c.white('O Primo quer usar o seu computador.')));
@@ -1158,7 +1194,7 @@ async function instalarComPortao(caminho) {
1158
1194
  return skills.instalarDe(caminho, { forcar: true });
1159
1195
  }
1160
1196
 
1161
- async function sendPrompt(userText) {
1197
+ async function sendPrompt(userText, { digitado = false } = {}) {
1162
1198
  /* O portão do plano. Sem ele o bloqueio da abertura seria só um texto na
1163
1199
  tela: a pessoa leria "você não tem acesso" e mandaria a primeira coisa
1164
1200
  do mesmo jeito, e funcionaria.
@@ -1170,14 +1206,49 @@ async function sendPrompt(userText) {
1170
1206
  produto está quebrado. */
1171
1207
  if (state.liberado === false) {
1172
1208
  console.log(c.err(' O PrimoCode pede um plano (a partir de R$ 69,90/mês).'));
1173
- console.log(c.muted(' Veja e assine com ') + c.brand('/planos')
1209
+ console.log(c.muted(' Veja e assine com ') + c.brand('/account plans')
1174
1210
  + c.muted(' · já assinou? ') + c.brand('/account'));
1175
1211
  return;
1176
1212
  }
1177
1213
 
1214
+ /* Pedido grande: uma linha dizendo quanto deve gastar do plano de hoje (lib/limite.js). Sem o limite do plano,
1215
+ diz isso com todas as letras (uma vez por conversa) em vez de inventar %. Só pra quem digitou, no terminal. */
1216
+ if (digitado && !state.semTerminal && process.stdin.isTTY) {
1217
+ try {
1218
+ const L = require('../lib/limite.js');
1219
+ const anexos = state.attachedFiles.reduce((n, f) => n + String(f.content || '').length, 0);
1220
+ const limite = L.limiteConhecido();
1221
+ if (L.pedidoGrande(userText, anexos) && (limite || !state.avisouSemLimite)) {
1222
+ const { total } = extra.resumoCusto(contadorDaSessao);
1223
+ const media = total.pedidos ? Math.round((total.enviados + total.recebidos) / total.pedidos) : 0;
1224
+ console.log(c.muted(' ' + L.linhaDoPedido({ tokens: L.estimar({ texto: userText, anexosChars: anexos, mediaPorPedido: media }), limite, usadoHoje: L.usoDeHoje().tokens })));
1225
+ if (!limite) state.avisouSemLimite = true;
1226
+ }
1227
+ } catch { /* a estimativa nunca derruba o pedido */ }
1228
+ }
1229
+
1178
1230
  // PRIMOCODE_TEMPOS=1: uma linha no fim com o custo de cada fase.
1179
1231
  tempos.comecar();
1180
1232
  const inicio = Date.now();
1233
+ /* Pedido em lista, com 4 itens ou mais (lib/partes.js): PERGUNTA se faz um de cada vez. Só no terminal de
1234
+ verdade; no app e no -p, segue inteiro como sempre. */
1235
+ // só o que a PESSOA digitou: o pedido que o próprio PrimoCode monta (o conserto do /conferir leva a saída do teste,
1236
+ // e o mocha escreve "1) nome do teste") não pode virar "esse pedido tem 4 partes" (achado da revisão de 24/10)
1237
+ const divisao = digitado && !state.semTerminal && process.stdin.isTTY ? require('../lib/partes.js').dividir(userText) : null;
1238
+ if (divisao && await confirm(`Esse pedido tem ${divisao.partes.length} partes. De uma vez só, pedido grande costuma travar no meio. Faço uma de cada vez, conferindo entre elas?`)) {
1239
+ const P = require('../lib/partes.js');
1240
+ try {
1241
+ for (let i = 0; i < divisao.partes.length; i++) {
1242
+ console.log(c.brand(`\n ▸ parte ${i + 1} de ${divisao.partes.length}: `) + c.white(divisao.partes[i].slice(0, 80)));
1243
+ await enviarPedido(P.pedidoDaParte(divisao, i));
1244
+ if (require('../lib/act.js').interrompido()) break; // Esc Esc numa parte para as que faltam
1245
+ }
1246
+ } finally {
1247
+ const linha = tempos.relatorio();
1248
+ if (linha) console.log(c.dim(` ⏱ ${linha}`));
1249
+ }
1250
+ return;
1251
+ }
1181
1252
  try { await enviarPedido(userText); }
1182
1253
  finally {
1183
1254
  const linha = tempos.relatorio();
@@ -1188,15 +1259,42 @@ async function sendPrompt(userText) {
1188
1259
  if (!state.semTerminal) {
1189
1260
  console.log('\n ' + `${COR_MODO[m] || COR_MODO.auto}▣${c.reset} ` + c.white(NOME_MODO[m] || m)
1190
1261
  + c.dim(` · ${effort.normalizar(state.config.effort)} · ${((Date.now() - inicio) / 1000).toFixed(1)}s`) + '\n');
1262
+ // O que o agente deixou de pé (run_background), com o endereço pra abrir.
1263
+ const rodape = require('../lib/fundo.js').linhasRodape(require('../lib/fundo.js').listar(), c);
1264
+ if (rodape.length) console.log(rodape.join('\n') + '\n');
1191
1265
  }
1192
1266
  }
1193
1267
  }
1194
1268
 
1269
+ /* Marca no arquivo de hoje o que ESTA conversa já gastou (lib/limite.js): é o que o /usage soma. */
1270
+ const IDENTIDADE_DA_SESSAO = `${process.pid}-${Date.now()}`;
1271
+ /* Tarefa em segundo plano que acabou sozinha: uma linha na tela (o modelo recebe o aviso na próxima volta). */
1272
+ require('../lib/fundo.js').aoTerminar((a) => {
1273
+ if (state.semTerminal) return;
1274
+ process.stdout.write('\n ' + (a.ok ? c.ok('✔') : c.err('✘')) + ' ' + c.muted(`tarefa ${a.id} terminou (código ${a.codigo}): ${a.comando.slice(0, 60)}`) + '\n');
1275
+ });
1276
+ function guardarUsoDeHoje() {
1277
+ try {
1278
+ const { total } = extra.resumoCusto(contadorDaSessao);
1279
+ require('../lib/limite.js').guardarSessao(IDENTIDADE_DA_SESSAO, total.enviados + total.recebidos);
1280
+ } catch { /* contar nunca derruba um pedido */ }
1281
+ }
1282
+
1195
1283
  async function enviarPedido(userText) {
1196
1284
  let prompt = userText;
1285
+ const custoAntes = extra.resumoCusto(contadorDaSessao); // pro "Este pedido: …" do fim
1197
1286
  // "@index.html" no pedido é um /attach só deste pedido: vai junto dos
1198
1287
  // anexos, mas não fica em state.attachedFiles para o próximo.
1199
1288
  const citados = mencoesDoPedido(userText);
1289
+ // "@https://…" no pedido é um /web só deste pedido (lib/web-pagina.js)
1290
+ const W = require('../lib/web-pagina.js');
1291
+ for (const url of W.urlsDoPedido(userText)) {
1292
+ const r = await W.baixar(url);
1293
+ if (r.ok) {
1294
+ citados.push({ path: r.url, content: (r.titulo ? `# ${r.titulo}\n\n` : '') + r.texto });
1295
+ console.log(c.dim(` ⎿ anexado: ${r.titulo || r.url} (${r.palavras} palavras${r.cortado ? ', o começo da página' : ''})`));
1296
+ } else console.log(c.dim(` ⎿ não anexei ${url}: ${r.error}`));
1297
+ }
1200
1298
  const anexos = [...state.attachedFiles, ...citados];
1201
1299
  if (anexos.length) {
1202
1300
  const parts = anexos.map((f) => `Arquivo: ${f.path}\n\`\`\`\n${f.content}\n\`\`\``);
@@ -1285,7 +1383,8 @@ async function enviarPedido(userText) {
1285
1383
  ? '\n\nATENÇÃO: o passo anterior não trouxe fatos. Trabalhe só com o que está no pedido. '
1286
1384
  + 'É PROIBIDO inventar dado de empresa, data, preço ou pessoa — na dúvida, não afirme.'
1287
1385
  : '';
1288
- const pedido = passos[i].pedido + contexto + semFatos;
1386
+ // o pedido citou arquivo: o agente sabe antes, não só no aviso do fim (lib/escopo.js)
1387
+ const pedido = passos[i].pedido + contexto + semFatos + require('../lib/escopo.js').nota(userText);
1289
1388
 
1290
1389
  const rodarPasso = (texto = pedido) => runAct(texto, {
1291
1390
  server: state.config.server,
@@ -1305,6 +1404,7 @@ async function enviarPedido(userText) {
1305
1404
  // No pedido único (`primo "…"`) não há ninguém para responder:
1306
1405
  // sem `autorizar`, o que pede licença é recusado (lib/perigo.js).
1307
1406
  autorizar: state.semTerminal ? undefined : autorizarControle,
1407
+ escolher: state.semTerminal ? undefined : (q, o, op) => require('../lib/tool/perguntar').escolherNoTerminal(ask, c, q, o, op),
1308
1408
  // A memória do AGENTS.md só vai se o resumo ainda não a carrega.
1309
1409
  memoriaDaPasta: !memoria.jaDobrou(state.memoria, plan.dir),
1310
1410
  mudarPasta: state.semTerminal ? null : mudarPastaPeloAgente,
@@ -1362,11 +1462,32 @@ async function enviarPedido(userText) {
1362
1462
  }
1363
1463
  checkpoint.encerrar();
1364
1464
 
1465
+ // O pedido nomeou arquivo e o agente mexeu em outros? Diz quais, e o /desfazer fora volta só esses (lib/escopo.js).
1466
+ try {
1467
+ const escopo = require('../lib/escopo.js');
1468
+ const ultimo = checkpoint.lista(projectDir())[0];
1469
+ if (ultimo && ultimo.pedido === String(userText).replace(/\s+/g, ' ').trim()) {
1470
+ const fora = escopo.foraDoPedido(userText, ultimo.mudou, projectDir());
1471
+ if (fora.length) {
1472
+ escopo.texto(escopo.citados(userText), fora).forEach((l, i, ls) => console.log(i === 0 ? c.warn(' ' + l) : i === ls.length - 1 ? c.muted(' ' + l) : c.white(' ' + l)));
1473
+ }
1474
+ }
1475
+ } catch { /* o aviso nunca derruba o pedido */ }
1476
+ // "nunca mexa no logo" dito no pedido: oferece guardar como regra, não guarda sozinho (lib/regras.js)
1477
+ try {
1478
+ const regras = require('../lib/regras.js');
1479
+ const sug = regras.sugerir(userText, regras.ler(projectDir()));
1480
+ if (sug) console.log(c.muted(' Isso vale sempre? ') + c.white(`/rule ${sug}`) + c.muted(' (fica no PRIMO.md e não some quando a conversa é resumida)'));
1481
+ } catch { /* a oferta nunca derruba o pedido */ }
1482
+
1365
1483
  /* O balanço, depois da resposta. Depois, e não antes, de propósito: o
1366
1484
  que a pessoa quer ler primeiro é o que ele TEM A DIZER; a lista de
1367
1485
  arquivos é a conferência, e conferência se lê por último. */
1368
1486
  const balanco = registro.resumo(livro, { colunas: process.stdout.columns || 80 });
1369
1487
  if (balanco) console.log(balanco);
1488
+ const custo = extra.custoDoPedido(custoAntes, extra.resumoCusto(contadorDaSessao));
1489
+ if (custo) console.log(c.dim(` ${custo}`));
1490
+ guardarUsoDeHoje();
1370
1491
  // O rostinho do mascote, por último e numa linha só. O humor sai do
1371
1492
  // que aconteceu, não de adivinhar pelo texto da resposta.
1372
1493
  if (state.config.reacoes !== false && r) {
@@ -1374,7 +1495,10 @@ async function enviarPedido(userText) {
1374
1495
  console.log(ui.reacao(state.config.mascot, humor));
1375
1496
  }
1376
1497
  state.history.push({ role: 'user', content: userText });
1377
- state.history.push({ role: 'assistant', content: r.assistantMessage.content });
1498
+ // na memória da conversa vai também o que o pedido fez no disco (arquivos, último teste): o pedido seguinte sabe
1499
+ let feito = '';
1500
+ try { feito = require('../lib/registro.js').paraMemoria(r.registro); } catch { /* sem registro */ }
1501
+ state.history.push({ role: 'assistant', content: r.assistantMessage.content + (feito ? `\n\n${feito}` : '') });
1378
1502
  resumirDepois();
1379
1503
  state.lastResponse = r.assistantMessage.content;
1380
1504
  cfg.appendHistory({ mode: 'primocode', project: state.currentProject, prompt: userText });
@@ -1382,6 +1506,8 @@ async function enviarPedido(userText) {
1382
1506
  // rede, não acontece nada — a conversa segue aqui do mesmo jeito.
1383
1507
  state.gravador.turno(userText, r.assistantMessage.content,
1384
1508
  { modo: 'primocode', projeto: state.currentProject || null });
1509
+ // O parceiro do /team revisa o que mudou (lib/team.js). Depois do histórico: o conserto vem como pedido seguinte.
1510
+ await revisaoDoParceiro(userText, livro, r);
1385
1511
  } else {
1386
1512
  await tempos.medir('espera do resumo', () => esperarResumo());
1387
1513
  await tempos.medir('chat', () => runChat(prompt, userText));
@@ -1391,6 +1517,72 @@ async function enviarPedido(userText) {
1391
1517
  refreshPrompt();
1392
1518
  }
1393
1519
 
1520
+ /* "UM FAZ, O OUTRO REVISA" (/team). O PrimoCode fez; o parceiro lê a mudança
1521
+ (só lendo, na pasta do projeto, com prazo) e devolve a revisão. Achou
1522
+ problema, a pessoa diz se corrige; o conserto não é revisado de novo. */
1523
+ async function revisaoDoParceiro(userText, livro, r) {
1524
+ const nome = state.config.team;
1525
+ if (!nome || state.consertandoRevisao || !r || r.parado || !livro) return;
1526
+ const arquivos = [...(livro.criados || []), ...(livro.alterados || [])];
1527
+ if (!arquivos.length) return;
1528
+ const team = require('../lib/team.js');
1529
+ const dele = team.instalados().find((x) => x.nome === nome);
1530
+ if (!dele) { console.log(c.warn(` O ${nome} não está mais instalado: sem revisão. /team mostra os que você tem.`)); return; }
1531
+ const dir = r.pasta || projectDir();
1532
+ const diff = team.diffDaVez(dir, arquivos);
1533
+ if (!diff) return;
1534
+ console.log(c.muted(` ${dele.titulo} revisando o que eu fiz (só lendo)…`));
1535
+ const rev = await team.rodar(nome, 'revisar', { prompt: team.pedidoDeRevisao({ pedido: userText, diff }), dir, caminho: dele.caminho,
1536
+ linha: (l) => console.log(c.dim(` ${nome} │ ${l}`)) });
1537
+ if (!rev.ok) { console.log(c.warn(` ${rev.erro}`)); return; }
1538
+ if (!rev.texto || team.semProblema(rev.texto)) { console.log(c.ok(` ✓ ${nome} revisou: nada a corrigir.`)); return; }
1539
+ console.log(c.white(` A revisão do ${nome}:`));
1540
+ for (const l of rev.texto.split('\n')) console.log(` ${l}`);
1541
+ if (state.semTerminal) return;
1542
+ if (!(await confirm('Corrijo o que a revisão achou?'))) return;
1543
+ state.consertandoRevisao = true;
1544
+ try { await sendPrompt(team.pedidoDeConserto(nome, rev.texto)); } finally { state.consertandoRevisao = false; }
1545
+ }
1546
+
1547
+ /* `/team <nome> faz <pedido>`: o parceiro faz numa cópia do projeto (git
1548
+ worktree, ou cópia da pasta), o PrimoCode mostra o que mudou, passa cada
1549
+ arquivo pelo portão (lib/perigo.js) e só aplica com o sim. /undo volta. */
1550
+ async function parceiroFaz(nome, pedido) {
1551
+ const team = require('../lib/team.js');
1552
+ const dele = team.instalados().find((x) => x.nome === nome);
1553
+ const dir = projectDir();
1554
+ if (!pastaSegura(dir) || path.resolve(dir) === path.resolve(cfg.ROOT_DIR)) {
1555
+ console.log(c.warn(' Entre num projeto antes (/projects ou /dir): o parceiro trabalha numa cópia dele.'));
1556
+ return;
1557
+ }
1558
+ let copia;
1559
+ try { copia = team.prepararCopia(dir); } catch (e) { console.log(c.warn(` Não consegui preparar a cópia do projeto: ${String(e.message || e).split('\n')[0]}`)); return; }
1560
+ try {
1561
+ console.log(c.muted(` ${dele.titulo} trabalhando numa cópia do projeto${copia.git ? ' (git worktree)' : ''}…`));
1562
+ const r = await team.rodar(nome, 'fazer', { prompt: team.pedidoDeFazer(pedido), dir: copia.pasta, caminho: dele.caminho,
1563
+ linha: (l) => console.log(c.dim(` ${nome} │ ${l}`)) });
1564
+ if (!r.ok) { console.log(c.warn(` ${r.erro}`)); return; }
1565
+ if (r.texto) { console.log(c.white(` O ${nome} disse:`)); for (const l of r.texto.split('\n')) console.log(` ${l}`); }
1566
+ const m = team.mudancasDaCopia(copia);
1567
+ if (!m.arquivos.length) { console.log(c.muted(' Ele não mudou nenhum arquivo. O projeto ficou como estava.')); return; }
1568
+ console.log(c.white(` O que ele mudou (${m.arquivos.length} arquivo${m.arquivos.length > 1 ? 's' : ''}):`));
1569
+ const linhas = m.patch.split('\n');
1570
+ for (const l of linhas.slice(0, 200)) console.log(' ' + (/^\+(?!\+\+)/.test(l) ? c.ok(l) : /^-(?!--)/.test(l) ? c.err(l) : c.dim(l)));
1571
+ if (linhas.length > 200) console.log(c.dim(` … e mais ${linhas.length - 200} linhas`));
1572
+ if (!state.controle.perigo) state.controle.perigo = perigo.novo();
1573
+ const recusas = await team.passarPeloPortao(m.arquivos, { projectDir: dir, aplicarEm: copia.aplicarEm, modo: state.config.permissoes,
1574
+ estado: state.controle.perigo, perguntar: state.semTerminal ? undefined : autorizarControle });
1575
+ if (recusas.length) { console.log(c.warn(` O portão do PrimoCode recusou: ${recusas.join('; ')}. Nada foi aplicado.`)); return; }
1576
+ if (state.semTerminal) { console.log(c.muted(' No modo script eu não aplico sozinho: rode no terminal do PrimoCode pra aplicar.')); return; }
1577
+ if (!(await confirm('Aplico essa mudança no projeto?'))) { console.log(c.muted(' Não apliquei. O projeto ficou como estava.')); return; }
1578
+ checkpoint.iniciar(`/team ${nome} faz ${pedido}`, dir);
1579
+ for (const a of m.arquivos) checkpoint.antesDeMudar(path.join(copia.aplicarEm, a.caminho), dir);
1580
+ const ap = team.aplicar(copia, m.patch);
1581
+ checkpoint.encerrar();
1582
+ console.log(ap.ok ? c.ok(` ✓ Apliquei. /undo volta.`) : c.warn(` ${ap.erro}`));
1583
+ } finally { copia.limpar(); }
1584
+ }
1585
+
1394
1586
  /**
1395
1587
  * Arruma o pedido e divide em passos — as duas coisas, ESCONDIDAS.
1396
1588
  *
@@ -1488,6 +1680,8 @@ function pedidoDeContinuacao(original, livro) {
1488
1680
  }
1489
1681
 
1490
1682
  async function dividirTarefa(pedido) {
1683
+ // O /plan já dividiu, e a pessoa aprovou: nada de chamar o servidor de novo.
1684
+ if (state.passosProntos) { const prontos = state.passosProntos; state.passosProntos = null; console.log(c.dim(` ⎿ ${prontos[0].titulo}`)); return prontos; }
1491
1685
  const inteiro = [{ titulo: 'tarefa', pedido }];
1492
1686
  if (!pedido || pedido.trim().length < 12) return inteiro;
1493
1687
  // Sem as duas fases no texto, nem chama o servidor: mais rápido, e sem
@@ -1532,9 +1726,10 @@ async function comprimirConversa(forcado = false, { silencioso = false } = {}) {
1532
1726
  if (!memoria.jaDobrou(state.memoria, dir) && !(state.memoria.semente && state.memoria.semente.pasta === dir)) {
1533
1727
  state.memoria = memoria.semear(state.memoria, dir, agentsMd.ler(dir));
1534
1728
  }
1729
+ // O mesmo `resumir` da compactação automática do agente (lib/session/compactacao.js): resumo + arquivos mexidos + to-dos.
1535
1730
  const nova = await memoria.atualizar(state.memoria, conversa, ({ resumo, mensagens }) =>
1536
- api.requestResumo(state.config.server, { resumo, mensagens, token: state.config.token })
1537
- .then((r) => r.resumo));
1731
+ require('../lib/session/compactacao.js').resumirComFatos({ resumo, mensagens },
1732
+ (p) => api.requestResumo(state.config.server, { ...p, token: state.config.token }).then((r) => r.resumo)));
1538
1733
  // /clear ou /chats trocaram a conversa enquanto o resumo era feito:
1539
1734
  // o resumo é da conversa velha e não pode voltar por cima da nova.
1540
1735
  if (state.history !== conversa) { sp.stop(); return; }
@@ -1760,35 +1955,10 @@ async function rodarBash(text) {
1760
1955
  }
1761
1956
 
1762
1957
  /* ── OS NOMES ANTIGOS ────────────────────────────────────────────────────
1763
- * Os comandos passaram a ser todos em inglês. Metade já era; a outra metade
1764
- * estava em português, e a mistura era o que a especificação chamou de
1765
- * bagunça — `/run` ao lado de `/pasta`, `/tree` ao lado de `/tudo`.
1766
- *
1767
- * O nome antigo NÃO some: ele responde e ensina o novo. Sumir de vez faz quem
1768
- * tem o dedo viciado bater num "comando não existe" e concluir que a
1769
- * atualização quebrou alguma coisa — e essa pessoa não vai procurar no /help,
1770
- * vai desinstalar.
1771
- *
1772
- * Uma tabela, e não um `if` dentro de cada `case`: com dezoito apelidos, o
1773
- * `if` espalhado é o jeito garantido de esquecer um. Aqui, esquecer é não
1774
- * escrever a linha, e a linha some da lista.
1775
- */
1776
- const RENOMEADOS = {
1777
- // a conta
1778
- entrar: 'login', conectar: 'login',
1779
- conta: 'account',
1780
- plano: 'planos', assinar: 'planos', assinatura: 'planos', precos: 'planos',
1781
- sair: 'exit', // sair é SAIR; desconectar a conta é /logout
1782
- // o histórico
1783
- // /historico deixou de ser apelido do /chats: agora procura nos pedidos
1784
- // guardados nesta máquina (lib/comandos-extra.js). /chats segue sendo a
1785
- // conversa inteira, da conta.
1786
- conversas: 'chats',
1787
- // o resto
1788
- pasta: 'dir',
1789
- esforco: 'effort', esforço: 'effort',
1790
- tudo: 'all', capacidades: 'all',
1791
- };
1958
+ * Os comandos são todos em inglês curto e o nome antigo NÃO some: ele responde
1959
+ * e ensina o novo. Sumir de vez faz quem tem o dedo viciado achar que a
1960
+ * atualização quebrou — e essa pessoa não procura no /help, desinstala.
1961
+ * A tabela (apelido → nome novo, e os 9 grupos) mora em lib/nomes.js. */
1792
1962
 
1793
1963
  /* Abrir uma conversa salva e seguir dela. Uma função só, para o /chats n e o
1794
1964
  `primo -c` carregarem a conversa do MESMO jeito: dois caminhos divergiriam
@@ -1874,19 +2044,126 @@ function entrarNoWorktree(nome) {
1874
2044
  return true;
1875
2045
  }
1876
2046
 
2047
+ /* /new sem nada: as 3 perguntas (era o /new). */
2048
+ async function comecarPerguntas() {
2049
+ const comecar = require('../lib/comecar');
2050
+ let oque = (await ask(' O que você quer criar? Conte do seu jeito. (Enter: ver ideias)\n > ')).trim();
2051
+ if (!oque) {
2052
+ // Sem ideia não é motivo pra desistir: mostra por onde começar.
2053
+ console.log(c.muted('\n Algumas ideias pra começar:'));
2054
+ comecar.IDEIAS.forEach((ideia, i) => console.log(` ${c.brand(String(i + 1))} ${ideia}`));
2055
+ oque = comecar.escolherIdeia(await ask('\n Escolha um número, ou escreva a sua ideia (Enter cancela)\n > ')) || '';
2056
+ }
2057
+ if (!oque) { console.log(c.muted(' Tudo bem, sem pressa. Quando quiser, é só digitar /new de novo.')); return; }
2058
+ console.log(c.muted(` → ${oque}`));
2059
+ const praQuem = (await ask(' Pra quem é? (Enter pula)\n > ')).trim();
2060
+ const onde = (await ask(' Abre onde: no navegador, no celular, ou tanto faz? (Enter pula)\n > ')).trim();
2061
+ await criarProjetoNovo(comecar.montarPedidoComecar({ oque, praQuem, onde }));
2062
+ // quem acabou de fazer o primeiro app não sabe que pode conferir nem voltar: é a hora de contar
2063
+ console.log(c.muted(`\n ${comecar.DEPOIS_DO_PRIMEIRO_APP}`));
2064
+ return;
2065
+ }
2066
+
2067
+ /* /attach <url>: a página vira texto e vai junto do próximo pedido (lib/web-pagina.js). */
2068
+ async function anexarPagina(rest) {
2069
+ const sp = new Spinner('lendo a página').start();
2070
+ const r = await require('../lib/web-pagina.js').baixar(rest.trim());
2071
+ sp.stop();
2072
+ if (!r.ok) { console.log(c.err(` Não anexei: ${r.error}.`)); return; }
2073
+ state.attachedFiles.push({ path: r.url, content: (r.titulo ? `# ${r.titulo}\n\n` : '') + r.texto });
2074
+ console.log(c.ok(` Anexei: ${r.titulo || r.url}`) + c.muted(` · ${r.palavras} palavras${r.cortado ? ' (o começo da página)' : ''}`));
2075
+ console.log(c.muted(' Vai junto do próximo pedido. /attach mostra, /detach tira.'));
2076
+ refreshPrompt();
2077
+ return;
2078
+ }
2079
+
2080
+ /* /attach sem nada: o que está anexado. */
2081
+ function listarAnexos() {
2082
+ if (!state.attachedFiles.length) console.log(c.muted('Nenhum arquivo anexado.'));
2083
+ else state.attachedFiles.forEach((f) => console.log(` ${c.brand(f.path)} ${c.muted(tools.fmtBytes(f.content.length))}`));
2084
+ }
2085
+
2086
+ /* /help all: tudo que ele sabe fazer (lib/catalogo.js). */
2087
+ function mostrarTudo() {
2088
+ const cols = Math.max(40, Math.min(process.stdout.columns || 90, 110));
2089
+ console.log('');
2090
+ for (const g of catalogo.GRUPOS) {
2091
+ console.log(' ' + c.bold(c.white(g.nome)) + ' ' + ui.truncate(c.dim('— ' + g.resumo), cols - 4 - ui.visibleWidth(g.nome)));
2092
+ for (const i of g.itens) {
2093
+ console.log(' ' + c.brand(ui.padRight(i.tool, 23)) + ui.truncate(c.muted(i.faz), cols - 28));
2094
+ }
2095
+ console.log('');
2096
+ }
2097
+ console.log(c.dim(` ${catalogo.TODAS.length} ferramentas. Você não precisa saber nenhum desses nomes — peça em português.`));
2098
+ return;
2099
+ }
2100
+
2101
+ /* /taste referencias: a tela pra soltar os motions que você curtiu. */
2102
+ async function abrirReferencias() {
2103
+ const G = require('../lib/estudio/gosto.js');
2104
+ console.log(c.muted(process.env.PRIMOCODE_APP === '1' ? ' Abri a tela do gosto (até 10 min): solte os vídeos que você curtiu e salve.' : ' Abri uma tela no navegador (até 10 min): solte os vídeos que você curtiu e salve.'));
2105
+ const r = await G.abrirOndeDer({ inicio: 'referencias' });
2106
+ if (!r.ok) console.log(c.warn(r.motivo === 'pulou' ? ' Você pulou: nada foi salvo.' : r.motivo === 'tempo' ? ' Acabou o tempo: nada foi salvo.' : r.motivo === 'fechou' ? ' Você fechou a tela: nada foi salvo.' : ' Não consegui abrir a tela.'));
2107
+ const rs = G.resumo(G.ler());
2108
+ console.log(rs ? c.muted(' ') + rs : c.muted(' Ainda não tem gosto salvo. /taste referencias abre a tela.'));
2109
+ return;
2110
+ }
2111
+
2112
+ /* /doctor status: só o servidor, a versão e a conversa. */
2113
+ async function mostrarStatus() {
2114
+ const sp = new Spinner('verificando').start();
2115
+ try {
2116
+ const h = await api.getHealth(state.config.server, state.config.token);
2117
+ sp.stop();
2118
+ console.log(c.ok(`Servidor: ${h.status || 'ok'}`));
2119
+ if (h.version) console.log(c.muted(` Versão: ${h.version}`));
2120
+ if (h.model) console.log(c.muted(` Modelo: ${h.model}`) + (h.gratis ? c.dim(' · grátis') : ''));
2121
+ // A corrente inteira: é o que garante que um modelo no limite não
2122
+ // vira erro na sua tela.
2123
+ if (h.correntes && h.correntes[state.config.model || 'main']) {
2124
+ const fila = h.correntes[state.config.model] || h.correntes.main;
2125
+ console.log(c.dim(` Reservas: ${fila.length - 1}`));
2126
+ }
2127
+ } catch (e) { sp.stop(); console.log(c.err(`Indisponível: ${e.message}`)); }
2128
+ // A memória da conversa: quanto ela está poupando por pedido.
2129
+ if (state.history.length) {
2130
+ const e = memoria.economia(state.memoria, state.history);
2131
+ console.log(c.muted(` Conversa: ${state.history.length} mensagens`)
2132
+ + (state.memoria.resumo
2133
+ ? c.dim(` · resumida, ${e.enxuto} tokens por pedido em vez de ${e.cheio}`)
2134
+ : c.dim(` · ${e.enxuto} tokens por pedido`)));
2135
+ }
2136
+ return;
2137
+ }
2138
+
2139
+ /* /account plans: os planos e o link pra assinar. */
2140
+ async function mostrarPlanos() {
2141
+ const sp = new Spinner('buscando os planos').start();
2142
+ const r = await planosTela.buscarPlanos(state.config.server);
2143
+ sp.stop();
2144
+ const eu = conta.atual();
2145
+ for (const l of planosTela.desenhar(r, { cores: c, atual: eu && eu.pro ? eu.plano : null, site: conta.SITE })) console.log(l);
2146
+ return;
2147
+ }
2148
+
1877
2149
  async function handleSlash(text) {
1878
2150
  const [cmd] = text.trim().slice(1).split(/\s+/);
1879
- const rest = text.trim().slice(1 + cmd.length).trim();
2151
+ const restoDigitado = text.trim().slice(1 + cmd.length).trim();
1880
2152
 
1881
2153
  let nome = cmd.toLowerCase();
1882
- if (RENOMEADOS[nome]) {
1883
- const novo = RENOMEADOS[nome];
1884
- console.log(c.muted(' Agora é ') + c.brand('/' + novo) + c.muted('.'));
1885
- nome = novo;
2154
+ const apelido = nomes.ehApelido(nome);
2155
+ // O comando da própria pessoa com o nome antigo (um ~/.primocode/comandos/revisar.md) ganha do apelido.
2156
+ const dela = apelido && comandosDaPessoa().find((x) => x.nome === nome && x.origem !== 'primocode');
2157
+ let rest = restoDigitado;
2158
+ if (apelido && !dela) {
2159
+ const junto = nomes.PREFIXO[nome];
2160
+ console.log(c.muted(' Agora é ') + c.brand('/' + apelido + (junto ? ' ' + junto : '')) + c.muted('.'));
2161
+ nome = apelido;
2162
+ if (junto) rest = `${junto} ${restoDigitado}`.trim(); // /account plans vira /account plans
1886
2163
  }
1887
2164
 
1888
2165
  switch (nome) {
1889
- case 'help': console.log(HELP); break;
2166
+ case 'help': if (/^(all|tudo)$/i.test(rest)) mostrarTudo(); else console.log(montarHelp()); break;
1890
2167
 
1891
2168
  case 'resume': await retomarConversa(rest); break;
1892
2169
  case 'worktree':
@@ -1898,10 +2175,10 @@ async function handleSlash(text) {
1898
2175
  listava os nomes, em ordem alfabética, e quem procurava "o de ontem"
1899
2176
  tinha de abrir pasta por pasta. Agora vem do mais recente, com
1900
2177
  quando mexeu e o tamanho, e um número para entrar. */
1901
- case 'projetos': case 'project': {
2178
+ case 'projects': {
1902
2179
  const lista = extra.listarProjetos(cfg.ROOT_DIR);
1903
2180
  const numero = /^\d+$/.test(rest) ? Number(rest) : 0;
1904
- if (!rest || (numero && nome === 'projetos') || (numero && numero <= lista.length)) {
2181
+ if (!rest || (numero && cmd.toLowerCase() === 'projetos') || (numero && numero <= lista.length)) {
1905
2182
  if (!lista.length) { console.log(c.muted(' Nenhum projeto ainda. Peça algo e eu crio o primeiro.')); break; }
1906
2183
  if (numero) {
1907
2184
  const alvo = lista[numero - 1];
@@ -1920,7 +2197,7 @@ async function handleSlash(text) {
1920
2197
  + c.muted(ui.padRight(extra.quandoFoi(x.modificado), 11))
1921
2198
  + c.dim(`${extra.fmtTamanho(x.bytes)}${x.cortado ? '+' : ''} · ${x.arquivos} arq.`));
1922
2199
  });
1923
- console.log(c.dim(`\n ${shortPath(cfg.ROOT_DIR)} · /projetos 1 entra no primeiro · /novo <descrição> começa outro`));
2200
+ console.log(c.dim(`\n ${shortPath(cfg.ROOT_DIR)} · /projects 1 entra no primeiro · /new <descrição> começa outro`));
1924
2201
  break;
1925
2202
  }
1926
2203
  const dir = cfg.createProjectDir(rest);
@@ -1932,8 +2209,7 @@ async function handleSlash(text) {
1932
2209
 
1933
2210
  // Antes só existia /project, que SEMPRE cria em ~/primocode/<nome>. Se a
1934
2211
  // sua pasta já existe em outro lugar, não havia como apontar para ela.
1935
- case 'dir':
1936
- case 'cd': {
2212
+ case 'dir': {
1937
2213
  if (!rest) {
1938
2214
  const de = {
1939
2215
  padrao: 'a pasta padrão do PrimoCode',
@@ -1984,10 +2260,13 @@ async function handleSlash(text) {
1984
2260
 
1985
2261
  /* Quando ele pergunta antes de agir. Os três modos e o porquê de cada
1986
2262
  um estão em lib/perigo.js. */
2263
+ /* Os motions que a pessoa curtiu: ela solta os vídeos na tela e o PrimoCode mede e soma no gosto (gosto-medir.js). */
2264
+
1987
2265
  /* O gosto de motion: a tela abre sozinha no primeiro estudio_motion; aqui dá pra ver, refazer ou apagar. */
1988
- case 'gosto': {
2266
+ case 'taste': {
1989
2267
  const G = require('../lib/estudio/gosto.js');
1990
2268
  const a = String(rest || '').trim().toLowerCase();
2269
+ if (/^(referencias|ref|refs)$/.test(a)) { await abrirReferencias(); break; }
1991
2270
  if (a === 'apagar') {
1992
2271
  try { fs.unlinkSync(G.arquivo()); console.log(c.ok(' Gosto de motion apagado. O próximo motion pergunta de novo.')); }
1993
2272
  catch { console.log(c.muted(' Não havia gosto salvo.')); }
@@ -1995,32 +2274,58 @@ async function handleSlash(text) {
1995
2274
  }
1996
2275
  if (a === 'refazer') {
1997
2276
  console.log(c.muted(' Abri uma tela no navegador (até 10 min). Feche ou pule pra voltar.'));
1998
- const r = await G.abrirTela();
2277
+ const r = await G.abrirOndeDer();
1999
2278
  if (!r.ok) console.log(c.warn(r.motivo === 'pulou' ? ' Você pulou: sem gosto salvo.' : r.motivo === 'tempo' ? ' Acabou o tempo: nada foi salvo.' : ' Não consegui abrir a tela.'));
2000
- } else if (a && a !== 'ver') { console.log(c.err('Uso: /gosto [refazer|apagar]')); break; }
2001
- const rs = G.resumo(G.ler());
2002
- console.log(rs ? c.muted(' ') + rs : c.muted(' Ainda não tem gosto salvo. /gosto refazer abre a tela.'));
2279
+ } else if (/^provar\b/.test(a)) {
2280
+ const assunto = String(rest).trim().replace(/^provar\s*/i, '') || 'um vídeo de apresentação';
2281
+ const P = require('../lib/estudio/gosto-prova.js');
2282
+ for (const l of P.texto(P.provar(G.pesos(G.ler()), { assunto }), assunto)) console.log(' ' + l);
2283
+ break;
2284
+ } else if (/^for[cç]a\s+\S/.test(a)) {
2285
+ const r = G.definirForca(a.replace(/^for[cç]a\s+/, ''));
2286
+ if (!r.ok) { console.log(c.err(` ${r.error}`)); break; }
2287
+ console.log(c.ok(` Força das referências: ${{ pouco: 'pouco (só sugerem)', medio: 'médio', muito: 'muito (puxam forte)' }[r.forca]}.`));
2288
+ } else if (/^salvar\s+\S/.test(a)) {
2289
+ const r = G.salvarEstilo(String(rest).trim().replace(/^salvar\s+/i, ''));
2290
+ console.log(r.ok ? c.ok(` Estilo "${r.nome}" salvo. /taste usar ${r.nome} volta pra ele quando quiser.`) : c.err(` ${r.error}`));
2291
+ break;
2292
+ } else if (/^usar\s+\S/.test(a)) {
2293
+ const r = G.usarEstilo(String(rest).trim().replace(/^usar\s+/i, ''));
2294
+ if (!r.ok) { console.log(c.err(` ${r.error}`)); break; }
2295
+ console.log(c.ok(` Agora o gosto em uso é o "${r.nome}".`));
2296
+ } else if (a === 'estilos') {
2297
+ const lista = G.estilos();
2298
+ console.log(lista.length ? ' Estilos salvos: ' + lista.join(', ') + c.muted(' · /taste usar <nome>') : c.muted(' Nenhum estilo salvo ainda. /taste salvar <nome> guarda o gosto de agora.'));
2299
+ break;
2300
+ } else if (/^tirar\s+\d+$/.test(a)) {
2301
+ const g = G.tirarReferencia(a.split(/\s+/)[1]);
2302
+ console.log(g ? c.ok(` Referência ${a.split(/\s+/)[1]} tirada.`) : c.err(' Não tem essa referência. /taste mostra os números.'));
2303
+ } else if (a && a !== 'ver') { console.log(c.err('Uso: /taste [refazer|apagar|tirar N|força pouco/médio/muito|provar [assunto]|salvar <nome>|usar <nome>|estilos]')); break; }
2304
+ const linhas = G.listar(G.ler());
2305
+ if (!linhas.length) { console.log(c.muted(' Ainda não tem gosto salvo. /taste refazer abre a tela, e /taste referencias recebe os vídeos que você curtiu.')); break; }
2306
+ for (const l of linhas) console.log(/^\s*"/.test(l) ? c.muted(' ' + l) : ' ' + l);
2307
+ if ((G.ler().referencias || []).length) console.log(c.muted(' /taste tirar N tira um vídeo · /taste referencias traz mais'));
2003
2308
  break;
2004
2309
  }
2005
2310
  /* A memória entre sessões (lib/memoria-usuario.js): ver, esquecer, achar a pasta. */
2006
- case 'memoria': {
2311
+ case 'memory': {
2007
2312
  const M = require('../lib/memoria-usuario.js');
2008
2313
  const [sub, ...resto] = String(rest || '').trim().split(/\s+/);
2009
2314
  const a = (sub || '').toLowerCase();
2010
2315
  if (a === 'pasta') { console.log(c.muted(' ') + M.pasta()); break; }
2011
2316
  if (a === 'esquecer') {
2012
2317
  const alvo = resto.join(' ');
2013
- if (!alvo) { console.log(c.err('Uso: /memoria esquecer <nome>')); break; }
2318
+ if (!alvo) { console.log(c.err('Uso: /memory esquecer <nome>')); break; }
2014
2319
  const r = M.apagar(alvo);
2015
2320
  console.log(r.ok ? c.ok(` Esqueci "${r.nome}".`) : c.err(' ' + r.error));
2016
2321
  break;
2017
2322
  }
2018
- if (a) { console.log(c.err('Uso: /memoria [esquecer <nome> | pasta]')); break; }
2323
+ if (a) { console.log(c.err('Uso: /memory [esquecer <nome> | pasta]')); break; }
2019
2324
  const lista = M.listar();
2020
2325
  if (!lista.length) { console.log(c.muted(' Ainda não lembro de nada. Conforme você trabalha, eu vou anotando.')); break; }
2021
2326
  console.log('');
2022
2327
  for (const m of lista) console.log(' ' + c.brand(m.nome) + c.dim(` (${m.tipo})`) + c.muted(' — ' + m.descricao));
2023
- console.log(c.dim(`\n ${lista.length} memórias · /memoria esquecer <nome> · /memoria pasta`));
2328
+ console.log(c.dim(`\n ${lista.length} memórias · /memory esquecer <nome> · /memory pasta`));
2024
2329
  break;
2025
2330
  }
2026
2331
  case 'sandbox': {
@@ -2037,8 +2342,7 @@ async function handleSlash(text) {
2037
2342
  console.log(c.dim(` ${e.rede ? 'Com a rede aberta, o que o comando LÊ pode sair pela internet: a lista acima é o que fica protegido. ' : ''}Detalhes: docs/sandbox.md`));
2038
2343
  break;
2039
2344
  }
2040
- case 'permissoes':
2041
- case 'permissions': {
2345
+ case 'perms': {
2042
2346
  const DIZ = {
2043
2347
  auto: 'roda tudo, mas pergunta antes do que não tem volta (apagar fora do projeto, push --force, sudo…)',
2044
2348
  perguntar: 'pergunta antes de todo comando e de toda escrita de arquivo',
@@ -2049,12 +2353,12 @@ async function handleSlash(text) {
2049
2353
  if (!rest) {
2050
2354
  console.log(c.muted(' Agora: ') + c.brand(atual) + c.muted(' — ' + DIZ[atual]));
2051
2355
  for (const m of perigo.MODOS) console.log(` ${m === atual ? c.brand('● ' + m) : c.muted('○ ' + m)} ${c.dim(DIZ[m])}`);
2052
- console.log(c.dim(' Use /permissoes auto|perguntar|livre|plano'));
2356
+ console.log(c.dim(' Use /perms auto|perguntar|livre|plano'));
2053
2357
  break;
2054
2358
  }
2055
2359
  const pedido = rest.toLowerCase();
2056
2360
  if (!perigo.MODOS.includes(perigo.normalizarModo(pedido)) || (perigo.normalizarModo(pedido) === 'auto' && pedido !== 'auto')) {
2057
- console.log(c.err('Uso: /permissoes auto|perguntar|livre|plano'));
2361
+ console.log(c.err('Uso: /perms auto|perguntar|livre|plano'));
2058
2362
  break;
2059
2363
  }
2060
2364
  const m = perigo.normalizarModo(pedido);
@@ -2063,7 +2367,7 @@ async function handleSlash(text) {
2063
2367
  console.log(c.ok(` Permissões: ${m}`) + c.muted(' — ' + DIZ[m]));
2064
2368
  if (m === 'livre') {
2065
2369
  console.log(' ' + c.warn('▸▸ Atenção: ele vai apagar, forçar push e usar sudo sem te perguntar.'));
2066
- console.log(' ' + c.warn(' O que der errado pode não ter volta. /permissoes auto desfaz.'));
2370
+ console.log(' ' + c.warn(' O que der errado pode não ter volta. /perms auto desfaz.'));
2067
2371
  }
2068
2372
  break;
2069
2373
  }
@@ -2118,7 +2422,8 @@ async function handleSlash(text) {
2118
2422
  }
2119
2423
 
2120
2424
  case 'attach': {
2121
- if (!rest) { console.log(c.err('Uso: /attach <arquivo>')); break; }
2425
+ if (!rest) { listarAnexos(); break; }
2426
+ if (/^https?:\/\//i.test(rest)) { await anexarPagina(rest); break; }
2122
2427
  try {
2123
2428
  // Relativo à pasta de trabalho (a do /dir), como o /read — não ao
2124
2429
  // terminal de onde o PrimoCode foi aberto.
@@ -2140,55 +2445,65 @@ async function handleSlash(text) {
2140
2445
  // achasse que é conversa) o /init só responderia um texto.
2141
2446
  const modoAntes = state.mode;
2142
2447
  state.mode = 'primocode';
2143
- try { await sendPrompt(PEDIDO_INIT); } finally { state.mode = modoAntes; }
2448
+ // o /init reescreve o PRIMO.md inteiro: as regras do /regra voltam pro topo depois
2449
+ const regras = require('../lib/regras.js');
2450
+ const guardadas = regras.ler(projectDir());
2451
+ try { await sendPrompt(PEDIDO_INIT); } finally {
2452
+ state.mode = modoAntes;
2453
+ if (regras.garantir(projectDir(), guardadas).length) console.log(c.muted(` As suas ${guardadas.length === 1 ? 'regra voltou' : guardadas.length + ' regras voltaram'} pro topo do PRIMO.md.`));
2454
+ }
2144
2455
  break;
2145
2456
  }
2146
2457
 
2147
2458
  case 'detach': state.attachedFiles = []; console.log(c.ok('Anexos removidos.')); refreshPrompt(); break;
2148
2459
 
2149
- case 'files':
2150
- if (!state.attachedFiles.length) console.log(c.muted('Nenhum arquivo anexado.'));
2151
- else state.attachedFiles.forEach((f) => console.log(` ${c.brand(f.path)} ${c.muted(tools.fmtBytes(f.content.length))}`));
2152
- break;
2153
2460
 
2154
2461
  // A lista vem de lib/catalogo.js, e o test/catalogo.test.js cruza aquela
2155
2462
  // lista com as tools que o tools.execute realmente atende. Ou seja: esta
2156
2463
  // tela não consegue prometer coisa que o programa não faz.
2157
- case 'all':
2158
- case 'tools': {
2159
- const cols = Math.max(40, Math.min(process.stdout.columns || 90, 110));
2160
- console.log('');
2161
- for (const g of catalogo.GRUPOS) {
2162
- console.log(' ' + c.bold(c.white(g.nome)) + ' ' + ui.truncate(c.dim('— ' + g.resumo), cols - 4 - ui.visibleWidth(g.nome)));
2163
- for (const i of g.itens) {
2164
- console.log(' ' + c.brand(ui.padRight(i.tool, 23)) + ui.truncate(c.muted(i.faz), cols - 28));
2165
- }
2166
- console.log('');
2167
- }
2168
- console.log(c.dim(` ${catalogo.TODAS.length} ferramentas. Você não precisa saber nenhum desses nomes — peça em português.`));
2169
- break;
2170
- }
2171
2464
 
2172
2465
  /* ── /desfazer ────────────────────────────────────────────────
2173
2466
  * Quem não sabe git não tem como voltar uma edição ruim. Aqui volta:
2174
2467
  * cada pedido tirou uma foto do projeto (com git) ou guardou o
2175
2468
  * original dos arquivos que mexeu (sem git). */
2176
- case 'desfazer': case 'undo': case 'rewind': {
2469
+ case 'undo': {
2177
2470
  const cps = checkpoint.lista(projectDir());
2178
- if (!cps.length) { console.log(c.muted(' Nada para desfazer nesta pasta.')); break; }
2471
+ const BK = require('../lib/backup-banco.js');
2472
+ const hora = (iso) => new Date(iso).toLocaleString('pt-BR', { dateStyle: 'short', timeStyle: 'short' });
2473
+ if (!cps.length) {
2474
+ // sem foto do pedido (a pasta está fora do git, ou o banco é ignorado), a cópia do banco ainda volta
2475
+ const sobra = BK.pendentes(projectDir()).slice(-1)[0];
2476
+ if (!sobra) { console.log(c.muted(' Nada para desfazer nesta pasta.')); break; }
2477
+ console.log(c.muted(` Tem uma cópia do banco de ${hora(sobra.criado)}: ${sobra.arquivos.join(', ')}`));
2478
+ if (!(await confirm('Voltar o banco para essa cópia?'))) { console.log(c.muted('Cancelado.')); break; }
2479
+ for (const f of BK.restaurar(projectDir(), sobra)) console.log(f.acao === 'falhou' ? c.err(` falhou: ${f.erro} ${f.arquivo}`) : c.ok(' banco voltou ') + f.arquivo);
2480
+ break;
2481
+ }
2179
2482
  const quando = (cp) => new Date(cp.quando).toLocaleString('pt-BR', { dateStyle: 'short', timeStyle: 'short' });
2180
2483
  if (/^(lista|list|ls)$/i.test(rest)) {
2181
2484
  cps.forEach((cp, i) => console.log(` ${c.brand(String(i + 1).padStart(2))} ${c.dim(quando(cp))} `
2182
2485
  + `${c.white(cp.pedido.slice(0, 50) + (cp.pedido.length > 50 ? '…' : ''))} `
2183
- + c.muted(`${cp.mudou.length} ${cp.mudou.length === 1 ? 'arquivo mudou' : 'arquivos mudaram'}`)));
2184
- console.log(c.muted('\n /desfazer N volta os N últimos pedidos.'));
2486
+ + c.muted(`${cp.mudou.length} ${cp.mudou.length === 1 ? 'arquivo mudou' : 'arquivos mudaram'}`)
2487
+ + (cp.funcionava ? ` ${c.ok('✓ funcionava')}${cp.funcionava_como ? c.dim(' · ' + cp.funcionava_como) : ''}` : '')));
2488
+ console.log(c.muted('\n /undo N volta os N últimos pedidos.'));
2185
2489
  if (checkpoint.modo(projectDir()) === 'arquivo') {
2186
2490
  console.log(c.muted(' Sem git aqui: só volta o que o agente escreveu com as ferramentas de arquivo (não o que um comando apagou).'));
2187
2491
  }
2188
2492
  break;
2189
2493
  }
2494
+ // /desfazer fora: só o que o último pedido mudou sem você ter citado (lib/escopo.js)
2495
+ if (/^(fora|extras?)$/i.test(rest)) {
2496
+ // tirado do checkpoint (o pedido fica no manifest), não da memória: vale depois de fechar e abrir o PrimoCode
2497
+ const ultimo = cps[0];
2498
+ const fora = ultimo ? require('../lib/escopo.js').foraDoPedido(ultimo.pedido, ultimo.mudou, projectDir()) : [];
2499
+ if (!fora.length) { console.log(c.muted(' O último pedido não mexeu em nada além do que você citou.')); break; }
2500
+ const feitos = checkpoint.desfazerArquivos(projectDir(), fora.map((f) => f.caminho));
2501
+ for (const f of feitos) console.log(f.acao === 'falhou' ? c.err(` ✗ ${shortPath(f.caminho)}: ${f.erro}`) : c.ok(` ↺ ${path.relative(projectDir(), f.caminho)}`) + c.dim(` (${f.acao})`));
2502
+ console.log(c.muted(' O que você pediu ficou. /undo volta o pedido inteiro.'));
2503
+ break;
2504
+ }
2190
2505
  const n = rest ? parseInt(rest, 10) : 1;
2191
- if (!(n >= 1)) { console.log(c.err('Uso: /desfazer · /desfazer lista · /desfazer N')); break; }
2506
+ if (!(n >= 1)) { console.log(c.err('Uso: /undo · /undo lista · /undo N · /undo fora')); break; }
2192
2507
  const alvo = cps.slice(0, n);
2193
2508
  console.log(c.muted(`\n Volta ${alvo.length === 1 ? 'o último pedido' : `os ${alvo.length} últimos pedidos`}:`));
2194
2509
  for (const cp of alvo) console.log(` ${c.dim(quando(cp))} ${c.white(cp.pedido.slice(0, 60))}`);
@@ -2196,15 +2511,388 @@ async function handleSlash(text) {
2196
2511
  if (!previa.length) console.log(c.muted(' (o disco já está como estava antes)'));
2197
2512
  for (const a of previa.slice(0, 40)) console.log(c.muted(` ${a.acao} `) + shortPath(a.caminho));
2198
2513
  if (previa.length > 40) console.log(c.muted(` … e mais ${previa.length - 40}`));
2514
+ // a cópia do banco feita durante esses pedidos: a MAIS VELHA é o banco de antes de tudo
2515
+ const copiaDoBanco = BK.desde(projectDir(), alvo[alvo.length - 1].quando).slice(-1)[0];
2516
+ if (copiaDoBanco) console.log(c.muted(' banco ') + `volta pra cópia de ${hora(copiaDoBanco.criado)} (${copiaDoBanco.arquivos.join(', ')})`);
2199
2517
  if (!(await confirm('Desfazer?'))) { console.log(c.muted('Cancelado.')); break; }
2518
+ try { require('../lib/placar.js').desfez(); } catch { /* placar é conveniência */ } // desfez logo depois do pedido: conta como perda do modelo
2200
2519
  for (const f of checkpoint.desfazer(projectDir(), n)) {
2201
2520
  const rotulo = f.acao === 'falhou' ? c.err(` falhou: ${f.erro} `) : c.ok(` ${f.acao} `);
2202
2521
  console.log(rotulo + shortPath(f.caminho));
2203
2522
  }
2523
+ if (copiaDoBanco) for (const f of BK.restaurar(projectDir(), copiaDoBanco)) console.log(f.acao === 'falhou' ? c.err(` falhou: ${f.erro} ${f.arquivo}`) : c.ok(' banco voltou ') + f.arquivo);
2524
+ if (checkpoint.refazerDisponivel(projectDir())) console.log(c.muted('\n Mudou de ideia? ') + c.brand('/redo') + c.muted(' devolve.'));
2525
+ break;
2526
+ }
2527
+
2528
+ /* /refazer: o arrependimento do /desfazer. Só o último, e só enquanto
2529
+ nenhum pedido novo mexeu nos arquivos (lib/checkpoint.js). */
2530
+ case 'redo': {
2531
+ const volta = checkpoint.refazerDisponivel(projectDir());
2532
+ if (!volta) { console.log(c.muted(' Nada para refazer: o /redo só volta o último /undo, antes de um pedido novo mudar os arquivos.')); break; }
2533
+ console.log(c.muted(`\n Refaz ${volta.pedidos.length === 1 ? 'o pedido' : `os ${volta.pedidos.length} pedidos`}:`));
2534
+ for (const p of volta.pedidos) console.log(` ${c.white(String(p || '').slice(0, 60))}`);
2535
+ if (!(await confirm('Refazer?'))) { console.log(c.muted('Cancelado.')); break; }
2536
+ for (const f of checkpoint.refazer(projectDir())) {
2537
+ const rotulo = f.acao === 'falhou' ? c.err(` falhou: ${f.erro} `) : c.ok(` ${f.acao} `);
2538
+ console.log(rotulo + shortPath(f.caminho));
2539
+ }
2540
+ break;
2541
+ }
2542
+
2543
+ /* /conferir: "funcionou / não funcionou" em português simples. Passou?
2544
+ O ponto fica marcado e o /restore sabe para onde ir. Falhou? Oferece
2545
+ a IA consertar com a saída do erro já na mão. */
2546
+ case 'check': {
2547
+ const achou = conferirLib.descobrir(projectDir());
2548
+ if (!achou && require('../lib/pipeline.js').acharEntrada(projectDir())) {
2549
+ // sem script de teste, mas é uma página: abrir escondido e olhar é o teste que existe
2550
+ const spP = new Spinner('abrindo a página escondido pra conferir').start();
2551
+ let m = null;
2552
+ try { m = await require('../lib/pipeline.js').medirNoNavegador(projectDir()); } catch (e) { m = { testou: false, relato: e.message }; }
2553
+ spP.stop();
2554
+ const exP = conferirLib.explicarPagina(m);
2555
+ if (exP.ok) {
2556
+ console.log(c.ok(` ✓ ${exP.titulo}`));
2557
+ if (checkpoint.marcarFuncionando(projectDir(), 'a página abriu sem erro')) console.log(c.muted(" Marquei este ponto como 'funcionava': /restore volta pra cá, e a /timeline mostra."));
2558
+ break;
2559
+ }
2560
+ console.log((exP.testou ? c.err : c.warn)(` ${exP.testou ? '✗' : '·'} ${exP.titulo}`));
2561
+ for (const l of exP.linhas) console.log(c.muted(` ${l}`));
2562
+ if (exP.testou && await confirm('Quero que a IA conserte?')) {
2563
+ await sendPrompt(`Abri a página escondido e ela tem problema:\n${m.relato}\nAche a causa, conserte e confira de novo.`);
2564
+ }
2565
+ break;
2566
+ }
2567
+ if (!achou) { console.log(c.muted(" Não achei como testar este projeto (sem script de test/build, e sem página pra abrir). Peça: 'cria testes pra isso'.")); break; }
2568
+ console.log(c.muted(` $ ${achou.comando}`));
2569
+ const sp = new Spinner(`rodando ${achou.rotulo}`).start();
2570
+ const r = await conferirLib.rodar(achou.comando, projectDir());
2571
+ sp.stop();
2572
+ if (r.semTeste) { console.log(c.muted(` O ${achou.comando} não achou teste pra rodar (ou o pytest não está instalado). Peça: 'cria testes pra isso'.`)); break; }
2573
+ const ex = conferirLib.explicar(r, achou);
2574
+ if (r.ok) {
2575
+ console.log(c.ok(` ✓ ${ex.titulo}`));
2576
+ if (checkpoint.marcarFuncionando(projectDir(), achou.comando)) {
2577
+ console.log(c.muted(" Marquei este ponto como 'funcionava': /restore volta pra cá, e a /timeline mostra."));
2578
+ } else {
2579
+ // sem pedido nenhum nesta pasta ainda, não há ponto pra marcar: dizer, em vez de calar
2580
+ console.log(c.muted(' Ainda não tem ponto pra marcar: o primeiro pedido que mexer nos arquivos cria um, e o próximo /check marca.'));
2581
+ }
2582
+ break;
2583
+ }
2584
+ console.log(c.err(` ✗ ${ex.titulo}`));
2585
+ for (const l of ex.linhas) console.log(c.muted(` ${l}`));
2586
+ if (await confirm('Quero que a IA conserte?')) {
2587
+ await sendPrompt(`Rodei \`${achou.comando}\` e falhou. A saída:\n${r.saida}\nAche a causa, conserte e rode \`${achou.comando}\` de novo até passar.`);
2588
+ }
2589
+ break;
2590
+ }
2591
+
2592
+ /* /voltar: o /desfazer com destino certo — o último ponto que o
2593
+ /check marcou como funcionando, em vez de "N pedidos" no chute. */
2594
+ case 'restore': {
2595
+ const ponto = checkpoint.ultimoQueFuncionava(projectDir());
2596
+ if (!ponto) { console.log(c.muted(' Nenhum ponto marcado ainda. Quando estiver funcionando, rode /check: ele marca.')); break; }
2597
+ if (ponto.indice === 0) { console.log(c.muted(' Você já está no último ponto que funcionava.')); break; }
2598
+ const quando = (cp) => new Date(cp.quando).toLocaleString('pt-BR', { dateStyle: 'short', timeStyle: 'short' });
2599
+ const alvo = checkpoint.lista(projectDir()).slice(0, ponto.indice);
2600
+ console.log(c.muted(`\n O último ponto que funcionava: ${quando(ponto.cp)}, "${String(ponto.cp.pedido || '').slice(0, 50)}"`)
2601
+ + (ponto.cp.funcionava_como ? c.dim(` (conferido: ${ponto.cp.funcionava_como})`) : ''));
2602
+ console.log(c.muted(`\n Volta ${alvo.length === 1 ? 'o pedido' : `os ${alvo.length} pedidos`} feito${alvo.length === 1 ? '' : 's'} depois do último ponto que funcionava:`));
2603
+ for (const cp of alvo) console.log(` ${c.dim(quando(cp))} ${c.white(cp.pedido.slice(0, 60))}`);
2604
+ const previa = checkpoint.previa(projectDir(), ponto.indice);
2605
+ if (!previa.length) console.log(c.muted(' (o disco já está como estava antes)'));
2606
+ for (const a of previa.slice(0, 40)) console.log(c.muted(` ${a.acao} `) + shortPath(a.caminho));
2607
+ if (previa.length > 40) console.log(c.muted(` … e mais ${previa.length - 40}`));
2608
+ if (!(await confirm('Voltar?'))) { console.log(c.muted('Cancelado.')); break; }
2609
+ for (const f of checkpoint.desfazer(projectDir(), ponto.indice)) {
2610
+ const rotulo = f.acao === 'falhou' ? c.err(` falhou: ${f.erro} `) : c.ok(` ${f.acao} `);
2611
+ console.log(rotulo + shortPath(f.caminho));
2612
+ }
2613
+ if (checkpoint.refazerDisponivel(projectDir())) console.log(c.muted('\n Mudou de ideia? ') + c.brand('/redo') + c.muted(' devolve.'));
2614
+ console.log(c.muted(' A história inteira do projeto, numa página: ') + c.brand('/timeline'));
2615
+ break;
2616
+ }
2617
+
2618
+ /* /linha-do-tempo: o /desfazer lista numa página que quem não sabe
2619
+ git consegue ler. Pedido explícito, então abre o navegador; se não
2620
+ abrir (app de voz), mostra onde o arquivo ficou. */
2621
+ /* /mostrar: o app no celular de alguém no mesmo Wi-Fi, com link de prazo, sem publicar (lib/mostrar.js). */
2622
+ case 'show': {
2623
+ const arg = String(rest || '').trim().toLowerCase();
2624
+ if (state.mostrando && (arg === 'parar' || arg === 'stop')) { await state.mostrando.fechar(); state.mostrando = null; console.log(c.ok(' Parei de mostrar. O link não abre mais.')); break; }
2625
+ if (arg === 'parar' || arg === 'stop') { console.log(c.muted(' Não estou mostrando nada agora.')); break; }
2626
+ const entradaMostrar = require('../lib/pipeline.js').acharEntrada(projectDir());
2627
+ if (!entradaMostrar) { console.log(c.muted(' Não achei uma página pra mostrar (um index.html). Esse projeto roda como servidor? Peça "roda o projeto".')); break; }
2628
+ if (state.mostrando) await state.mostrando.fechar();
2629
+ const minutos = Math.max(5, Math.min(240, Number(arg) || 60));
2630
+ const r = await require('../lib/mostrar.js').abrir(projectDir(), { minutos, entrada: entradaMostrar }); // lista.html sem index.html também abre
2631
+ if (!r.ok) { console.log(c.err(` Não consegui abrir: ${r.error}`)); break; }
2632
+ state.mostrando = r;
2633
+ console.log(c.ok(` Mostrando ${path.basename(projectDir())} por ${minutos} min, só pra quem está no mesmo Wi-Fi:`));
2634
+ console.log(' ' + c.white(r.url || r.urlLocal));
2635
+ console.log(c.muted(' Nada foi publicado: o link morre no prazo ou quando você fecha o PrimoCode. .env, .git e node_modules nunca saem. /show parar fecha agora.'));
2636
+ break;
2637
+ }
2638
+ /* /como-rodar: o bloco "Como rodar" do PRIMO.md, tirado do disco sem modelo (lib/como-rodar.js). */
2639
+ case 'howto': {
2640
+ const r = require('../lib/como-rodar.js').gravar(projectDir());
2641
+ if (!r.passos.length) { console.log(c.muted(' Ainda não deu pra saber como este projeto roda (sem package.json, index.html nem main.py).')); break; }
2642
+ console.log(c.ok(` ${r.criou ? 'Criei o PRIMO.md' : 'Atualizei o PRIMO.md'} com o "Como rodar":`));
2643
+ r.passos.forEach((p, i) => console.log(` ${c.brand(String(i + 1))} ${p.texto}${p.comando ? c.muted(': ') + c.white(p.comando) : ''}`));
2644
+ console.log(c.muted(' O PrimoCode lê o PRIMO.md em todo pedido. Rodar de novo atualiza o bloco.'));
2645
+ break;
2646
+ }
2647
+ /* /porta: "o app não abre" por causa da porta, dito em português (lib/porta.js). */
2648
+ case 'port': {
2649
+ const r = await require('../lib/porta.js').diagnostico(projectDir());
2650
+ r.linhas.forEach((l, i) => console.log(i === 0 ? ' ' + (r.url ? c.ok(l) : c.warn(l)) : /^Abra:|abra: http/.test(l) ? ' ' + c.white(l) : c.muted(' ' + l)));
2651
+ if (r.url) console.log(c.muted(` /open ${r.url} abre no navegador.`));
2652
+ break;
2653
+ }
2654
+ /* /regra: "nunca mexa em X" no topo do PRIMO.md, que entra em todo pedido e não vira resumo (lib/regras.js). */
2655
+ case 'rule': {
2656
+ const R = require('../lib/regras.js');
2657
+ const mostrar = (lista) => lista.forEach((r, i) => console.log(` ${c.brand(String(i + 1))} ${r}`));
2658
+ const tira = rest.match(/^(?:tirar|tira|apagar|remover)\s+(\d+)$/i);
2659
+ if (tira) {
2660
+ const r = R.tirar(projectDir(), tira[1]);
2661
+ if (!r) { console.log(c.err(` Não tem regra ${tira[1]}. /rule mostra a lista.`)); break; }
2662
+ console.log(c.ok(` Tirei: ${r.tirada}`));
2663
+ if (r.regras.length) mostrar(r.regras); else console.log(c.muted(' Não sobrou nenhuma regra.'));
2664
+ break;
2665
+ }
2666
+ if (!rest.trim()) {
2667
+ const lista = R.ler(projectDir());
2668
+ if (!lista.length) { console.log(c.muted(' Nenhuma regra ainda. Exemplo: /rule nunca mexa no style.css')); break; }
2669
+ console.log(c.white(` As regras de ${path.basename(projectDir())} (o PrimoCode segue em todo pedido):`));
2670
+ mostrar(lista);
2671
+ console.log(c.muted(' /rule tirar N tira uma.'));
2672
+ break;
2673
+ }
2674
+ const r = R.adicionar(projectDir(), rest);
2675
+ console.log(r.ja_tinha ? c.muted(' Essa regra já estava lá.') : c.ok(' Guardei no topo do PRIMO.md. Vale em todo pedido, mesmo depois de resumir a conversa:'));
2676
+ mostrar(r.regras);
2677
+ break;
2678
+ }
2679
+ /* /mapa: o que tem no projeto, em português, e o arquivo que é pedido mas não existe (lib/mapa.js). */
2680
+ case 'map': {
2681
+ const arvore = rest.match(/^(?:tree|arvore|árvore)\b\s*(\d*)/i);
2682
+ if (arvore) { console.log(tools.treeDir(projectDir(), parseInt(arvore[1], 10) || 2)); break; }
2683
+ const M = require('../lib/mapa.js');
2684
+ const m = M.montar(projectDir());
2685
+ for (const l of M.texto(m, path.basename(projectDir()))) console.log(/⚠/.test(l) ? c.warn(l) : /^\S/.test(l) ? ' ' + c.white(l) : c.muted(l));
2686
+ if (m.faltando.length) console.log(c.muted(' Peça: "cria o que está faltando", ou rode /check pra ver a página abrindo.'));
2687
+ break;
2688
+ }
2689
+ /* /mudou: o que mudou no projeto, em português simples (lib/mudou.js), e não um diff. */
2690
+ case 'changes': {
2691
+ const r = require('../lib/mudou.js').medir(projectDir());
2692
+ console.log(' ' + c.white(r.frase));
2693
+ for (const a of r.arquivos.slice(0, 15)) {
2694
+ const rotulo = r.git ? (a.novo ? c.ok('novo ') : a.apagado ? c.warn('apagado ') : c.muted('editado ')) : c.muted((a.acao || 'mudou').padEnd(8));
2695
+ const conta = r.git && !a.novo && !a.apagado ? c.dim(` +${a.mais} −${a.menos}`) : '';
2696
+ console.log(` ${rotulo}${a.arquivo}${conta}`);
2697
+ }
2698
+ if (r.arquivos.length > 15) console.log(c.dim(` … e mais ${r.arquivos.length - 15}`));
2699
+ if (r.arquivos.length) console.log(c.muted(' Quebrou algo? /restore volta pro último ponto que funcionava.'));
2700
+ break;
2701
+ }
2702
+ /* /explain: sem nada, o último pedido em 5 linhas; com uma palavra, uma linha; "projeto" é o comando de fábrica. */
2703
+ /* /review: duas passadas (lib/review.js) — achar e depois conferir cada achado. /review rápido = o comando de fábrica de uma passada. */
2704
+ case 'review': {
2705
+ if (/^(r[aá]pido|simples)\b/i.test(rest)) {
2706
+ const fabrica = comandosDaPessoa().find((x) => x.nome === 'review');
2707
+ if (fabrica) { await sendPrompt(comandosLib.expandir(fabrica, rest.replace(/^\S+\s*/, ''))); break; }
2708
+ }
2709
+ const R = require('../lib/review.js');
2710
+ const chamar = async (prompt) => {
2711
+ let resposta = '';
2712
+ await api.requestChat(state.config.server, { prompt, history: [], model: state.config.model, token: state.config.token },
2713
+ (evt) => { if (evt.delta) resposta += evt.delta; });
2714
+ return resposta;
2715
+ };
2716
+ const sp = new Spinner('revisando o que mudou (passada 1: achar)').start();
2717
+ let r;
2718
+ try { r = await R.revisar({ dir: projectDir(), foco: rest, chamar }); } catch (e) { r = { ok: false, erro: String((e && e.message) || e) }; }
2719
+ sp.stop();
2720
+ console.log('\n' + R.formatar(r).split('\n').map((l) => ' ' + l).join('\n') + '\n');
2721
+ break;
2722
+ }
2723
+ case 'explain': {
2724
+ const E = require('../lib/explicar.js');
2725
+ const m = E.modo(rest);
2726
+ if (m.tipo === 'projeto') {
2727
+ const fabrica = comandosDaPessoa().find((x) => x.nome === 'explain');
2728
+ if (!fabrica) { console.log(c.err(' Não achei o comando de fábrica (comandos/explain.md).')); break; }
2729
+ console.log(c.dim(` ⎿ /explain projeto · ${fabrica.origem}`));
2730
+ await sendPrompt(comandosLib.expandir(fabrica, ''));
2731
+ break;
2732
+ }
2733
+ if (m.tipo === 'termo') { await sendPrompt(E.pedidoDoTermo(m.termo)); break; }
2734
+ const ultimo = E.doUltimoPedido(projectDir());
2735
+ if (!ultimo) { console.log(c.muted(' Ainda não mudou nada por aqui. /explain projeto explica o projeto; /explain <palavra> explica uma palavra.')); break; }
2736
+ await sendPrompt(E.pedidoDoUltimo(ultimo));
2737
+ break;
2738
+ }
2739
+ /* /plan: 1ª fase no modo plano (só lê) mostra 3 a 5 passos; Enter começa, um número muda o passo (lib/plano-previo.js). */
2740
+ case 'plan': {
2741
+ const P = require('../lib/plano-previo.js');
2742
+ if (!rest) { console.log(c.muted(' Uso: /plan <pedido> — ele mostra os passos e só começa quando você aperta Enter.')); break; }
2743
+ const antes = state.config.permissoes, tamanho = state.history.length;
2744
+ state.config.permissoes = 'plano';
2745
+ try { await sendPrompt(P.pedidoDoPlano(rest)); } finally { state.config.permissoes = antes; }
2746
+ const ultima = state.history.length > tamanho ? state.history[state.history.length - 1] : null;
2747
+ const passos = ultima && ultima.role === 'assistant' ? P.extrairPassos(ultima.content) : [];
2748
+ if (passos.length < 2) { console.log(c.muted(' Não consegui montar uma lista de passos. Peça de novo, ou mande o pedido sem o /plan.')); break; }
2749
+ for (;;) {
2750
+ console.log(c.white('\n O plano:'));
2751
+ passos.forEach((p, i) => console.log(` ${c.brand(String(i + 1))} ${p}`));
2752
+ const r = P.resposta(await ask(`\n${c.brand('?')} ${c.muted('Enter começa · número muda o passo · n cancela')} `), passos);
2753
+ if (r.acao === 'cancelar') { console.log(c.muted(' Cancelado. Nada foi mexido.')); passos.length = 0; break; }
2754
+ if (r.acao === 'comecar') break;
2755
+ if (r.acao === 'editar') {
2756
+ const novo = (await ask(` ${c.muted(`Passo ${r.n}, com as suas palavras (vazio apaga):`)} `)).trim();
2757
+ if (novo) passos[r.n - 1] = novo; else if (passos.length > 1) passos.splice(r.n - 1, 1);
2758
+ } else console.log(c.muted(' Aperte Enter para começar, digite o número de um passo, ou n.'));
2759
+ }
2760
+ if (!passos.length) break;
2761
+ state.passosProntos = P.comoPassos(rest, passos);
2762
+ try { await sendPrompt(rest); } finally { state.passosProntos = null; }
2763
+ break;
2764
+ }
2765
+ /* /lock: arquivo que o agente só lê. A recusa mora no portão (lib/perigo.js → lib/trava.js). */
2766
+ case 'lock': {
2767
+ const T = require('../lib/trava.js');
2768
+ const palavras = (rest.match(/"[^"]+"|'[^']+'|\S+/g) || []).map((x) => x.replace(/^["']|["']$/g, ''));
2769
+ const lista = (ts) => ts.forEach((t, i) => console.log(` ${c.brand(String(i + 1))} ${t}`));
2770
+ if (/^(off|soltar|solta|destravar|unlock)$/i.test(palavras[0] || '')) {
2771
+ if (palavras.length < 2) { console.log(c.err(' Uso: /lock off <arquivo> (ou /lock off tudo)')); break; }
2772
+ const alvos = palavras.slice(1);
2773
+ for (const a of alvos) {
2774
+ const r = T.soltar(projectDir(), a);
2775
+ console.log(r.soltos.length ? c.ok(` Soltei ${r.soltos.join(', ')}. O agente volta a poder mexer.`) : c.muted(` ${a} não estava travado.`));
2776
+ }
2777
+ break;
2778
+ }
2779
+ if (!palavras.length) {
2780
+ const ts = T.ler(projectDir());
2781
+ if (!ts.length) { console.log(c.muted(' Nenhum arquivo travado. Exemplo: /lock login.js logo.png')); break; }
2782
+ console.log(c.white(` Travados em ${path.basename(projectDir())} (o agente só pode ler):`));
2783
+ lista(ts);
2784
+ console.log(c.muted(' /lock off <arquivo> solta um.'));
2785
+ break;
2786
+ }
2787
+ const r = T.travar(projectDir(), palavras);
2788
+ for (const f of r.fora) console.log(c.warn(` ${f} está fora da pasta do projeto: não travei.`));
2789
+ for (const n of r.novos) if (!fs.existsSync(path.join(projectDir(), n))) console.log(c.muted(` ${n} ainda não existe: travei mesmo assim.`));
2790
+ if (r.novos.length) console.log(c.ok(` Travei ${r.novos.join(', ')}. O agente só pode ler.`));
2791
+ else if (!r.fora.length) console.log(c.muted(' Esses já estavam travados.'));
2792
+ if (r.travados.length) { lista(r.travados); console.log(c.muted(' /lock off <arquivo> solta um.')); }
2793
+ break;
2794
+ }
2795
+ /* /save: guarda o projeto no GitHub, num repositório privado (lib/guardar.js). */
2796
+ case 'save': {
2797
+ const r = require('../lib/guardar.js').salvar(projectDir(), { log: (l) => console.log(c.muted(' ' + l)) });
2798
+ console.log(r.ok ? c.ok(` Seu trabalho está guardado fora do computador: ${r.url}`) : c.warn(` ${r.erro}`));
2799
+ break;
2800
+ }
2801
+ /* /secrets: nomes das chaves, nunca os valores; `add` pede o valor escondido (lib/segredos.js). */
2802
+ case 'secrets': {
2803
+ const S = require('../lib/segredos.js');
2804
+ const [sub, nomeDado] = rest.split(/\s+/).filter(Boolean);
2805
+ if (/^(add|adicionar|novo)$/i.test(sub || '')) {
2806
+ const n = S.nomeValido(nomeDado);
2807
+ if (!n) { console.log(c.warn(' Qual o nome? Exemplo: /secrets add OPENAI_API_KEY')); break; }
2808
+ console.log(c.warn(' Isto é uma chave, não mostre pra ninguém.') + c.muted(' O que você digitar não aparece na tela.'));
2809
+ const valor = (await askSecret(` Valor de ${n}: `)).trim();
2810
+ if (!valor) { console.log(c.muted(' Vazio: não guardei nada.')); break; }
2811
+ try {
2812
+ const r = S.gravar(projectDir(), n, valor);
2813
+ console.log(c.ok(` ${r.substituiu ? 'Troquei' : 'Guardei'} ${n} no .env${r.criou ? ' (criei o arquivo)' : ''}.`));
2814
+ if (r.gitignore) console.log(c.muted(' Pus .env no .gitignore: ele não vai pro GitHub.'));
2815
+ } catch (e) { console.log(c.warn(` ${e.message}`)); }
2816
+ break;
2817
+ }
2818
+ const lista = S.listar(projectDir());
2819
+ if (!lista.length) { console.log(c.muted(' Este projeto não usa nenhuma chave (ainda). Quando precisar: /secrets add NOME')); break; }
2820
+ console.log(c.white(' Chaves deste projeto (só os nomes, nunca o valor):'));
2821
+ for (const x of lista) {
2822
+ const estado = x.noEnv && !x.vazia ? c.ok('guardada') : x.noEnv ? c.warn('vazia no .env') : c.warn('falta guardar');
2823
+ console.log(` ${c.brand(ui.padRight(x.nome, 28))}${ui.padRight(estado, 16)}${c.dim(x.usadaEm.length ? 'usada em ' + x.usadaEm.join(', ') : '')}`);
2824
+ }
2825
+ console.log(c.muted(' /secrets add NOME guarda uma. Isto é uma chave, não mostre pra ninguém.'));
2826
+ break;
2827
+ }
2828
+ case 'testar-app': {
2829
+ const A = require('../lib/plugin/autoteste.js');
2830
+ const r = await A.testar({ dir: projectDir(), log: (l) => console.log(c.muted(' ' + l)), consertar: (erros, prints) => sendPrompt(A.pedidoDeConserto(erros, prints)) });
2831
+ console.log(r.ok ? c.ok(' O app passou no teste.') : c.warn(' ' + r.erro));
2832
+ break;
2833
+ }
2834
+ /* /placar: qual modelo grátis acerta mais em cada tipo de tarefa, neste computador (lib/placar.js). */
2835
+ case 'placar': {
2836
+ const P = require('../lib/placar.js');
2837
+ if (/^(zerar|limpar|reset)$/i.test(rest.trim())) { P.zerar(); console.log(c.ok(' Placar zerado. Ele começa a aprender de novo.')); break; }
2838
+ console.log(P.texto(P.ler()).split('\n').map((l) => ' ' + l.replace(/^ {2}/, '')).join('\n'));
2839
+ break;
2840
+ }
2841
+ case 'pesquisar': {
2842
+ if (!rest) { console.log(c.muted(' Uso: /pesquisar <tema>')); break; }
2843
+ const r = await require('../lib/plugin/pesquisar.js').pesquisar({ tema: rest, dir: projectDir(), log: (l) => console.log(c.muted(' ' + l)) });
2844
+ console.log(r.ok ? c.ok(` Relatório: ${r.arquivo}`) : c.warn(' ' + r.erro));
2845
+ break;
2846
+ }
2847
+ /* /schedule: pedido que roda sozinho no Mac, pelo launchd (lib/agendar.js). */
2848
+ case 'schedule': {
2849
+ const A = require('../lib/agendar.js');
2850
+ const off = rest.match(/^(?:off|tirar|remover|cancelar)\s+(\S+)/i);
2851
+ if (off) {
2852
+ const r = A.remover(projectDir(), off[1]);
2853
+ console.log(r.ok ? c.ok(` Tirei: ${r.item.quando} · ${r.item.pedido.slice(0, 60)}`) : c.warn(` ${r.erro}`));
2854
+ break;
2855
+ }
2856
+ if (!rest) {
2857
+ const lista = A.listar(projectDir());
2858
+ if (!lista.length) { console.log(c.muted(' Nada agendado. Exemplo: /schedule "toda segunda às 9h" resuma o que mudou na semana')); break; }
2859
+ console.log(c.white(' Agendados neste projeto:'));
2860
+ lista.forEach((x, i) => console.log(` ${c.brand(String(i + 1))} ${c.white(x.quando)} ${c.muted(x.pedido.slice(0, 60))}`));
2861
+ console.log(c.muted(' O resultado de cada dia fica em .primocode/agendados/<data>.md · /schedule off <número> tira um.'));
2862
+ break;
2863
+ }
2864
+ const { quando, pedido } = A.separar(rest);
2865
+ const r = A.criar(projectDir(), quando, pedido);
2866
+ if (!r.ok) { console.log(c.warn(` ${r.erro}`)); break; }
2867
+ console.log(c.ok(` Agendado: ${r.item.quando}. O resultado vai para .primocode/agendados/<data>.md`));
2868
+ console.log(c.muted(r.relogio ? ' Roda sozinho, mesmo com o PrimoCode fechado (o Mac precisa estar ligado). /schedule off ' + r.item.id + ' tira.'
2869
+ : ' Atenção: o relógio automático só existe no Mac. O pedido ficou salvo, mas não vai rodar sozinho neste computador.'));
2870
+ break;
2871
+ }
2872
+ /* /ship: site estático, Next e app Node simples vão pro ar de verdade (lib/publicar.js); o resto cai no guia
2873
+ de fábrica (comandos/ship.md), que também vale pro /ship.md que a pessoa escreveu. */
2874
+ case 'ship': {
2875
+ const guia = comandosDaPessoa().find((x) => x.nome === 'ship');
2876
+ if (guia && guia.origem !== 'primocode') { console.log(c.dim(` ⎿ /ship · ${guia.origem}`)); await sendPrompt(comandosLib.expandir(guia, rest)); break; }
2877
+ const r = await require('../lib/publicar.js').publicar(projectDir(), { log: (l) => console.log(c.muted(' ' + l)), confirmar: (q) => confirm(q) });
2878
+ if (r.guiado) {
2879
+ if (!guia) { console.log(c.err(' Não achei o guia de fábrica (comandos/ship.md).')); break; }
2880
+ console.log(c.muted(' Este projeto eu não publico sozinho: vou te guiar passo a passo.'));
2881
+ await sendPrompt(comandosLib.expandir(guia, rest));
2882
+ break;
2883
+ }
2884
+ if (r.recusou) console.log(c.muted(' Tudo bem, não enviei nada.'));
2885
+ else console.log(r.ok ? c.ok(` Seu projeto está no ar: ${r.url}`) : c.warn(` ${r.erro}`));
2886
+ break;
2887
+ }
2888
+ case 'timeline': {
2889
+ const arquivo = require('../lib/linha-do-tempo').gravar(projectDir());
2890
+ const r = await tools.openInBrowser(arquivo);
2891
+ if (r && r.ok === false) console.log(c.muted(' A página está em: ') + arquivo);
2892
+ else console.log(c.ok(' Abri a história do projeto no navegador.') + c.dim(' ' + shortPath(arquivo)));
2204
2893
  break;
2205
2894
  }
2206
2895
 
2207
- case 'tree': console.log(tools.treeDir(projectDir(), parseInt(rest, 10) || 2)); break;
2208
2896
 
2209
2897
  case 'read': {
2210
2898
  if (!rest) { console.log(c.err('Uso: /read <arquivo>')); break; }
@@ -2231,46 +2919,27 @@ async function handleSlash(text) {
2231
2919
  parece (findSimilarProject) — e quem quer começar do zero não tem
2232
2920
  como dizer isso. Aqui a pasta nasce antes, com nome que não colide,
2233
2921
  e o pedido roda preso nela. */
2234
- case 'novo': case 'new': {
2235
- if (!rest) { console.log(c.err('Uso: /novo <o que você quer criar>') + c.dim(' ex.: /novo site da padaria')); break; }
2236
- const nomes = cfg.listProjects();
2237
- const sp = new Spinner('escolhendo o nome da pasta').start();
2238
- const sugerido = await nomeProjeto.escolher({ pedido: rest, nomes, perguntar: perguntarNome }).catch(() => null);
2239
- sp.stop();
2240
- const nomeNovo = extra.nomeDoNovo({
2241
- descricao: rest, nomes, sugerido, derivar: deriveProjectName,
2242
- // A régua curta (lib/nome-curto.js) também no /novo.
2243
- slugify: (t) => nomeCurto(t) || cfg.slugify(t), semColisao: nomeProjeto.semColisao,
2244
- });
2245
- const dir = cfg.createProjectDir(nomeNovo);
2246
- entrarNoProjeto(dir, 'projeto');
2247
- // Conversa nova junto: o que se falou do projeto anterior puxaria o
2248
- // agente de volta para ele.
2249
- state.history = []; state.memoria = memoria.nova(); state.gravador.zerar();
2250
- console.log(c.ok(` Projeto novo: ${state.currentProject}`) + c.muted(` (${shortPath(dir)})`));
2251
- refreshPrompt();
2252
- const modoAntes = state.mode;
2253
- state.mode = 'primocode';
2254
- state.projetoFixo = true;
2255
- try { await sendPrompt(extra.pedidoDoNovo(rest, state.currentProject)); }
2256
- finally { state.mode = modoAntes; state.projetoFixo = false; }
2922
+ case 'new': {
2923
+ // sem nada: as 3 perguntas de quem nunca programou (era o /new)
2924
+ if (!rest) { await comecarPerguntas(); break; }
2925
+ await criarProjetoNovo(rest);
2257
2926
  break;
2258
2927
  }
2259
2928
 
2260
- /* /open sem nada (e /abrir) acha sozinho o que abrir: o servidor do
2929
+ /* /open sem nada (e /open) acha sozinho o que abrir: o servidor do
2261
2930
  projeto de pé, ou a index.html. Antes pedia o caminho, e quem não
2262
2931
  sabe que a página se chama index.html ficava parado aqui. */
2263
- case 'abrir': case 'open': {
2932
+ case 'open': {
2264
2933
  if (!rest) {
2265
2934
  const pastaAtual = projectDir();
2266
2935
  if (path.resolve(pastaAtual) === path.resolve(cfg.ROOT_DIR)) {
2267
- console.log(c.muted(' Nenhum projeto aberto.') + c.dim(' /projetos para escolher um'));
2936
+ console.log(c.muted(' Nenhum projeto aberto.') + c.dim(' /projects para escolher um'));
2268
2937
  break;
2269
2938
  }
2270
2939
  const alvo = await extra.acharAlvoAbrir(pastaAtual);
2271
2940
  if (!alvo) {
2272
2941
  console.log(c.muted(` Não achei página nem servidor em ${shortPath(pastaAtual)}.`));
2273
- console.log(c.dim(' Peça "roda o projeto" ao Primo, ou /open <arquivo>.'));
2942
+ console.log(c.dim(' Peça "roda o projeto" ao Primo, ou /open <arquivo>. O app devia estar rodando? /port diz por que não abre.'));
2274
2943
  break;
2275
2944
  }
2276
2945
  const r = await tools.openInBrowser(alvo.url || alvo.caminho);
@@ -2285,6 +2954,13 @@ async function handleSlash(text) {
2285
2954
  }
2286
2955
 
2287
2956
  case 'name': {
2957
+ // /name voz <Nome>: o nome do assistente de voz (o mesmo do /voice nome)
2958
+ const nomeVoz = rest.match(/^(?:voz|voice|assistente)\s+(.{2,20})$/i);
2959
+ if (nomeVoz) {
2960
+ const salvo = vozModo.definirNome(nomeVoz[1]);
2961
+ console.log(salvo ? c.ok(` Fechado: o assistente agora se chama ${salvo}. Vale na próxima vez que ligar o /voice.`) : c.err(' Nome inválido (1 ou 2 palavras, até 20 letras).'));
2962
+ break;
2963
+ }
2288
2964
  if (!rest) { console.log(c.muted(` Nome atual: ${state.config.userName || '(nenhum)'}`)); break; }
2289
2965
  state.config.userName = rest;
2290
2966
  cfg.saveConfig({ userName: rest });
@@ -2296,14 +2972,14 @@ async function handleSlash(text) {
2296
2972
  nome ou número — na hora, se há teclado; senão pelo /mascot <n>.
2297
2973
  Num pipe não pergunta: a "resposta" seria o próximo comando. */
2298
2974
  // O kit de marca (lib/marca-kit.js): /marca criar|listar|usar <nome> [aqui]|mostrar|apagar <nome>
2299
- case 'marca': {
2975
+ case 'brand': {
2300
2976
  const kit = require('../lib/marca-kit.js');
2301
2977
  const perguntar = async (t, p) => (String(await ask(`${c.brand('?')} ${t}${p ? c.muted(` [${p}]`) : ''}: `)).trim() || p || '');
2302
2978
  await kit.main((rest || 'mostrar').split(/\s+/), { perguntar, dizer: (t) => console.log(c.muted(t)), pasta: state.workDir || process.cwd() });
2303
2979
  break;
2304
2980
  }
2305
2981
 
2306
- case 'mascot': case 'mascote': {
2982
+ case 'mascot': {
2307
2983
  const reac = rest.match(/^(reac(?:oes|ões)?|rea[cç][aã]o|reactions?)\s*(on|off|liga[r]?|desliga[r]?|sim|n[aã]o)?$/i);
2308
2984
  if (reac) {
2309
2985
  const quer = reac[2] ? /^(on|liga|ligar|sim)$/i.test(reac[2]) : state.config.reacoes === false;
@@ -2381,7 +3057,8 @@ async function handleSlash(text) {
2381
3057
 
2382
3058
  /* O /status olha só o servidor. O /doctor olha tudo o que costuma
2383
3059
  ser o motivo de "não funciona" — e cada ✗ diz como consertar. */
2384
- case 'doctor': case 'doutor': case 'medico': case 'médico': {
3060
+ case 'doctor': {
3061
+ if (/^status$/i.test(rest)) { await mostrarStatus(); break; }
2385
3062
  const sp = new Spinner('conferindo').start();
2386
3063
  const linhas = await extra.diagnosticar({
2387
3064
  saude: () => api.getHealth(state.config.server, state.config.token),
@@ -2405,35 +3082,94 @@ async function handleSlash(text) {
2405
3082
  break;
2406
3083
  }
2407
3084
 
2408
- case 'custo': case 'cost': case 'tokens': {
3085
+ case 'usage': {
3086
+ const Lim = require('../lib/limite.js');
3087
+ const querLimite = /^(limite|limit)\b/i.exec(rest) && rest.replace(/^\S+\s*/, '').replace(/[.\s]/g, '').replace(/mil$/i, '000');
3088
+ if (querLimite) { // /usage limite 100000 ensina o limite do plano; sem número, mostra o uso de hoje
3089
+ console.log(Lim.definirLimite(querLimite) ? c.ok(` Anotei: ${Number(querLimite).toLocaleString('pt-BR')} tokens por dia. Agora os pedidos grandes dizem quantos % gastam.`) : c.warn(' Não entendi o número. Exemplo: /usage limite 100000'));
3090
+ break;
3091
+ }
3092
+ guardarUsoDeHoje();
2409
3093
  const { linhas, total } = extra.resumoCusto(contadorDaSessao);
2410
- if (!linhas.length) { console.log(c.muted(' Nenhum pedido ao modelo nesta sessão ainda.')); break; }
2411
- console.log('');
3094
+ const hojeL = Lim.resumoDeHoje({ tokens: Lim.usoDeHoje().tokens, limite: Lim.limiteConhecido() });
3095
+ if (!linhas.length) { console.log(c.muted(' Nenhum pedido ao modelo nesta sessão ainda.')); hojeL.forEach((l) => console.log(c.muted(' ' + l))); break; }
3096
+ const simples = extra.resumoSimples({ linhas, total });
3097
+ console.log('\n ' + c.white('Nesta conversa: ') + simples.frase);
3098
+ console.log(' ' + c.ok(simples.quemPaga));
3099
+ console.log(c.dim('\n Em tokens (a unidade que o modelo conta):'));
2412
3100
  for (const l of linhas) {
2413
3101
  console.log(` ${c.white(ui.padRight(l.provedor, 22))}${c.muted(ui.padRight(l.pedidos + (l.pedidos === 1 ? ' pedido' : ' pedidos'), 12))}`
2414
- + `${c.dim('enviou ')}${c.white(extra.fmtNumero(l.enviados))}${c.dim(' · recebeu ')}${c.white(extra.fmtNumero(l.recebidos))}${c.dim(' tokens' + (l.exato ? '' : ' (estimado)'))}`);
3102
+ + `${c.dim('enviou ')}${c.white(extra.fmtNumero(l.enviados))}${c.dim(' · recebeu ')}${c.white(extra.fmtNumero(l.recebidos))}${c.dim(' tokens' + (l.exato ? '' : ' (estimado)'))}${l.emCache ? c.dim(' · ') + c.ok(extra.fmtNumero(l.emCache) + ' do cache') : ''}`);
2415
3103
  }
2416
3104
  if (linhas.length > 1) {
2417
3105
  console.log(` ${c.white(ui.padRight('Total', 22))}${c.muted(ui.padRight(total.pedidos + ' pedidos', 12))}`
2418
3106
  + `${c.dim('enviou ')}${c.white(extra.fmtNumero(total.enviados))}${c.dim(' · recebeu ')}${c.white(extra.fmtNumero(total.recebidos))}`);
2419
3107
  }
2420
3108
  if (linhas.some((l) => !l.exato)) console.log(c.dim('\n Estimado = caracteres ÷ 4. Conta cada pedido inteiro, com a conversa que vai junto.'));
3109
+ console.log(''); hojeL.forEach((l) => console.log(c.white(' ' + l)));
2421
3110
  break;
2422
3111
  }
2423
3112
 
2424
- case 'videos': case 'vídeos': {
3113
+ /* O que o agente deixou de pé com run_background (lib/fundo.js). */
3114
+ case 'tasks': {
3115
+ const fundo = require('../lib/fundo.js');
3116
+ const [sub, alvo] = rest.split(/\s+/).filter(Boolean);
3117
+ if (/^(rodar|run)$/i.test(sub || '')) {
3118
+ // A pessoa também deixa coisa de pé, sem pedir ao agente (como o /run, mas sem travar).
3119
+ const cmd = rest.replace(/^\S+\s*/, '');
3120
+ if (!cmd) { console.log(c.warn(' Qual comando? /tasks rodar npm run dev')); break; }
3121
+ const r = fundo.iniciar(cmd, { projectDir: projectDir(), env: tools.ambienteLimpo(process.env, tools.permitidasNoShell()) });
3122
+ console.log(r.ok ? c.ok(` ${r.id} rodando em segundo plano.`) + c.muted(' /tasks mostra a saída e o endereço.') : c.warn(` ${r.error}`));
3123
+ break;
3124
+ }
3125
+ if (/^(abrir|open)$/i.test(sub || '')) {
3126
+ // Sem id: a primeira que anunciou endereço — quase sempre é a única.
3127
+ const t = fundo.listar().find((x) => x.url && x.rodando && (!alvo || x.id === alvo));
3128
+ if (!t) { console.log(c.warn(alvo ? ` ${alvo} não anunciou endereço (ou já parou).` : ' Nada rodando com endereço pra abrir.')); break; }
3129
+ const r = await tools.openInBrowser(t.url);
3130
+ console.log(r && r.ok === false ? c.warn(` Não abriu: ${r.error}. Abra você: ${t.url}`) : c.ok(` Abri ${t.url}`));
3131
+ break;
3132
+ }
3133
+ if (/^(parar|stop|kill)$/i.test(sub || '')) {
3134
+ if (!alvo) { console.log(c.warn(' Qual? /tasks parar <id>')); break; }
3135
+ const r = fundo.parar(alvo);
3136
+ console.log(r.ok ? c.ok(` Parei ${alvo}.`) : c.warn(` ${r.error}`));
3137
+ break;
3138
+ }
3139
+ const lista = fundo.listar();
3140
+ if (!lista.length) { console.log(c.muted(' Nada rodando em segundo plano.')); break; }
3141
+ console.log('');
3142
+ for (const t of lista) {
3143
+ const estado = t.rodando ? c.ok('rodando') : c.muted(`terminou${t.codigo === null ? '' : ' (código ' + t.codigo + ')'}`);
3144
+ const tempo = t.segundos >= 60 ? `${Math.floor(t.segundos / 60)}min${String(t.segundos % 60).padStart(2, '0')}s` : `${t.segundos}s`;
3145
+ console.log(` ${c.white(ui.padRight(t.id, 12))}${ui.padRight(estado, 28)}${c.dim(ui.padRight(tempo, 9))}${ui.truncate(c.muted(t.comando), Math.max(20, (process.stdout.columns || 80) - 52))}`);
3146
+ if (t.url && t.rodando) console.log(` ${' '.repeat(12)}${c.brand(t.url)}`);
3147
+ }
3148
+ break;
3149
+ }
3150
+
3151
+ case 'videos': {
2425
3152
  console.log(require('../lib/estudio/exportar.js').main(rest.split(/\s+/).filter(Boolean)).texto);
2426
3153
  break;
2427
3154
  }
2428
3155
 
2429
- case 'copiar': case 'copy': {
3156
+ /* /exportar: a conversa vira um .md local, com chave e senha escondidas (lib/exportar-conversa.js). */
3157
+ case 'export': {
3158
+ const conversa = state.history.filter((m) => m.role === 'user' || m.role === 'assistant');
3159
+ if (!conversa.length) { console.log(c.muted(' Ainda não tem conversa pra exportar: faça um pedido primeiro.')); break; }
3160
+ const arq = require('../lib/exportar-conversa.js').gravar(conversa, { projeto: path.basename(projectDir()) });
3161
+ console.log(c.ok(` Conversa salva (${conversa.length} mensagens): `) + shortPath(arq));
3162
+ console.log(c.muted(' Chave e senha saem trocadas por [chave escondida]. É um arquivo seu, sem link público.'));
3163
+ break;
3164
+ }
3165
+ case 'copy': {
2430
3166
  const r = extra.copiar(state.lastResponse);
2431
3167
  if (r.ok) console.log(c.ok(' Copiado.') + c.dim(` ${state.lastResponse.length} caracteres · é só colar`));
2432
3168
  else console.log(c.muted(` Não copiei: ${r.error}.`));
2433
3169
  break;
2434
3170
  }
2435
3171
 
2436
- case 'historico': case 'histórico': {
3172
+ case 'history': {
2437
3173
  const achados = extra.buscarHistorico(cfg.HISTORY_FILE, rest, 20);
2438
3174
  if (!achados.length) {
2439
3175
  console.log(c.muted(rest ? ` Nada com "${rest}" nos seus pedidos.` : ' Nenhum pedido guardado ainda.'));
@@ -2447,41 +3183,16 @@ async function handleSlash(text) {
2447
3183
  console.log(` ${c.dim(quando)} ${c.muted(ui.padRight(ui.truncate(e.project || e.mode || '', 14), 14))} `
2448
3184
  + ui.truncate(c.white(String(e.prompt).replace(/\s+/g, ' ')), largura));
2449
3185
  }
2450
- console.log(c.dim(`\n ${achados.length === 20 ? 'Os 20 mais recentes' : achados.length + ' pedido(s)'}${rest ? ` com "${rest}"` : ''} · /historico <termo> filtra · /chats abre conversas`));
3186
+ console.log(c.dim(`\n ${achados.length === 20 ? 'Os 20 mais recentes' : achados.length + ' pedido(s)'}${rest ? ` com "${rest}"` : ''} · /history <termo> filtra · /chats abre conversas`));
2451
3187
  break;
2452
3188
  }
2453
3189
 
2454
- case 'atalhos': case 'shortcuts': case 'teclas': {
3190
+ case 'keys': {
2455
3191
  console.log('');
2456
3192
  for (const [tecla, faz] of extra.ATALHOS) console.log(` ${c.brand(ui.padRight(tecla, 20))}${c.muted(faz)}`);
2457
3193
  break;
2458
3194
  }
2459
3195
 
2460
- case 'status': {
2461
- const sp = new Spinner('verificando').start();
2462
- try {
2463
- const h = await api.getHealth(state.config.server, state.config.token);
2464
- sp.stop();
2465
- console.log(c.ok(`Servidor: ${h.status || 'ok'}`));
2466
- if (h.version) console.log(c.muted(` Versão: ${h.version}`));
2467
- if (h.model) console.log(c.muted(` Modelo: ${h.model}`) + (h.gratis ? c.dim(' · grátis') : ''));
2468
- // A corrente inteira: é o que garante que um modelo no limite não
2469
- // vira erro na sua tela.
2470
- if (h.correntes && h.correntes[state.config.model || 'main']) {
2471
- const fila = h.correntes[state.config.model] || h.correntes.main;
2472
- console.log(c.dim(` Reservas: ${fila.length - 1}`));
2473
- }
2474
- } catch (e) { sp.stop(); console.log(c.err(`Indisponível: ${e.message}`)); }
2475
- // A memória da conversa: quanto ela está poupando por pedido.
2476
- if (state.history.length) {
2477
- const e = memoria.economia(state.memoria, state.history);
2478
- console.log(c.muted(` Conversa: ${state.history.length} mensagens`)
2479
- + (state.memoria.resumo
2480
- ? c.dim(` · resumida, ${e.enxuto} tokens por pedido em vez de ${e.cheio}`)
2481
- : c.dim(` · ${e.enxuto} tokens por pedido`)));
2482
- }
2483
- break;
2484
- }
2485
3196
 
2486
3197
  /* ── AS SKILLS ───────────────────────────────────────────────────
2487
3198
  * `/skills` lista, `/install-skill` traz de um arquivo, e
@@ -2492,6 +3203,21 @@ async function handleSlash(text) {
2492
3203
  * modelo — que o usuário vê acontecendo, ação por ação, na tela.
2493
3204
  */
2494
3205
  case 'skills': {
3206
+ const sub = rest.match(/^(store|loja|add|instalar)\b\s*(.*)$/i);
3207
+ if (sub && /^(store|loja)$/i.test(sub[1])) { await abrirMarketplace(); break; }
3208
+ if (sub) {
3209
+ const alvo = sub[2].trim();
3210
+ if (!alvo) {
3211
+ console.log(c.muted(' Uso: ') + c.brand('/skills add <caminho do SKILL.md>'));
3212
+ console.log(c.dim(' Ou abra o ') + c.brand('/skills store') + c.dim(' e escolha "New Skill" para escrever uma.'));
3213
+ break;
3214
+ }
3215
+ const r = await instalarComPortao(alvo);
3216
+ if (!r.ok) { console.log(c.err(` ${r.error}`)); break; }
3217
+ console.log(c.ok(` Skill instalada: ${r.nome}`) + c.muted(` (${shortPath(r.caminho)})`));
3218
+ console.log(c.dim(' Já está ligada. /skills mostra todas.'));
3219
+ break;
3220
+ }
2495
3221
  const lista = skills.listar();
2496
3222
  if (!lista.length) { console.log(c.muted(' Nenhuma skill instalada.')); break; }
2497
3223
  const ligadas = lista.filter((s) => s.ligada);
@@ -2504,29 +3230,17 @@ async function handleSlash(text) {
2504
3230
  + c.dim(ui.truncate(s.descricao, (process.stdout.columns || 80) - 36)));
2505
3231
  }
2506
3232
  console.log('');
2507
- console.log(c.dim(' /marketplace liga e desliga · o corpo da skill só entra no pedido'));
3233
+ console.log(c.dim(' /skills store liga e desliga · o corpo da skill só entra no pedido'));
2508
3234
  console.log(c.dim(' quando o assunto bate, para não gastar o teto de tokens à toa.'));
2509
3235
  break;
2510
3236
  }
2511
3237
 
2512
- case 'install-skill': case 'installskill': {
2513
- if (!rest) {
2514
- console.log(c.muted(' Uso: ') + c.brand('/install-skill <caminho do SKILL.md>'));
2515
- console.log(c.dim(' Ou abra o ') + c.brand('/marketplace') + c.dim(' e escolha "New Skill" para escrever uma.'));
2516
- break;
2517
- }
2518
- const r = await instalarComPortao(rest);
2519
- if (!r.ok) { console.log(c.err(` ${r.error}`)); break; }
2520
- console.log(c.ok(` Skill instalada: ${r.nome}`) + c.muted(` (${shortPath(r.caminho)})`));
2521
- console.log(c.dim(' Já está ligada. /skills mostra todas.'));
2522
- break;
2523
- }
2524
3238
 
2525
3239
  /* ── /voice ──────────────────────────────────────────────────────
2526
3240
  * O ouvido e a boca são Python (voz/primo_voz); o cérebro é este
2527
3241
  * terminal. Ver entradaDeVoz no main() e lib/voz.js.
2528
3242
  */
2529
- case 'voice': case 'voz': {
3243
+ case 'voice': {
2530
3244
  /* ── O MODO VOZ É UMA FORMA DE DIGITAR ─────────────────────────
2531
3245
  Você fala; o que foi dito entra aqui como se tivesse sido
2532
3246
  digitado — a mesma fila, o mesmo recado no meio da tarefa, o
@@ -2601,10 +3315,6 @@ async function handleSlash(text) {
2601
3315
  break;
2602
3316
  }
2603
3317
 
2604
- case 'marketplace': case 'market': {
2605
- await abrirMarketplace();
2606
- break;
2607
- }
2608
3318
 
2609
3319
  /* ── /connectors ─────────────────────────────────────────────────
2610
3320
  * Só mostra. Não há o que configurar — os conectores vivem no
@@ -2617,7 +3327,7 @@ async function handleSlash(text) {
2617
3327
  * dá para ver que o preferido está fora e outro assumiu — e essa é a
2618
3328
  * primeira pergunta de todo suporte.
2619
3329
  */
2620
- case 'connectors': case 'conectores': {
3330
+ case 'connectors': {
2621
3331
  const sp = new Spinner('lendo os conectores').start();
2622
3332
  let dados = null;
2623
3333
  try {
@@ -2694,7 +3404,7 @@ async function handleSlash(text) {
2694
3404
  }
2695
3405
  if (!r.ok) { console.log(c.err(` ${r.error}`)); break; }
2696
3406
  console.log(c.ok(' Conectado.')
2697
- + c.muted(r.pro ? ` Plano ${r.plano}.` : ' Sua conta ainda não tem plano: ') + (r.pro ? '' : c.brand('/planos')));
3407
+ + c.muted(r.pro ? ` Plano ${r.plano}.` : ' Sua conta ainda não tem plano: ') + (r.pro ? '' : c.brand('/account plans')));
2698
3408
  return r;
2699
3409
  }
2700
3410
 
@@ -2746,6 +3456,7 @@ async function handleSlash(text) {
2746
3456
  }
2747
3457
 
2748
3458
  case 'account': {
3459
+ if (/^(plans?|planos?)$/i.test(rest)) { await mostrarPlanos(); break; }
2749
3460
  const eu = conta.atual();
2750
3461
  if (!eu) {
2751
3462
  console.log(c.muted(' Não conectado. ') + c.brand('/login') + c.muted(' para entrar.'));
@@ -2758,7 +3469,7 @@ async function handleSlash(text) {
2758
3469
  console.log(c.white(' Conta ') + c.muted(eu.email || eu.uid));
2759
3470
  if (s.ok) {
2760
3471
  const ate = s.planoAte ? c.dim(` até ${new Date(s.planoAte).toLocaleDateString('pt-BR')}`) : '';
2761
- console.log(c.white(' Plano ') + (s.pro ? c.brand(s.plano) + ate : c.muted('sem plano ') + c.brand('/planos')));
3472
+ console.log(c.white(' Plano ') + (s.pro ? c.brand(s.plano) + ate : c.muted('sem plano ') + c.brand('/account plans')));
2762
3473
  } else if (s.offline) {
2763
3474
  console.log(c.white(' Plano ') + c.muted(eu.plano) + c.dim(' (sem rede — último conhecido)'));
2764
3475
  } else {
@@ -2768,14 +3479,6 @@ async function handleSlash(text) {
2768
3479
  break;
2769
3480
  }
2770
3481
 
2771
- case 'planos': {
2772
- const sp = new Spinner('buscando os planos').start();
2773
- const r = await planosTela.buscarPlanos(state.config.server);
2774
- sp.stop();
2775
- const eu = conta.atual();
2776
- for (const l of planosTela.desenhar(r, { cores: c, atual: eu && eu.pro ? eu.plano : null, site: conta.SITE })) console.log(l);
2777
- break;
2778
- }
2779
3482
 
2780
3483
  case 'uninstall': {
2781
3484
  if (await confirm('Remover o PrimoCode? Seus projetos em ~/primocode NÃO serão apagados.')) {
@@ -2787,7 +3490,7 @@ async function handleSlash(text) {
2787
3490
  case 'version': console.log(c.brand(`PrimoCode v${VERSION}`)); break;
2788
3491
  // rl.close() em vez de process.exit(): sair na marra descarta o que
2789
3492
  // ainda estava no buffer de saída.
2790
- case 'exit': case 'quit': if (rl) rl.close(); break;
3493
+ case 'exit': if (rl) rl.close(); break;
2791
3494
  /* ── OS COMANDOS APOSENTADOS ──────────────────────────────────────
2792
3495
  * `/claude`, `/gpt`, `/codex` e `/key` existiam quando o PrimoCode
2793
3496
  * rodava em cima da assinatura da própria pessoa: ela instalava o
@@ -2808,7 +3511,7 @@ async function handleSlash(text) {
2808
3511
  /* O servidor aqui, no computador da pessoa, até a sessão acabar
2809
3512
  (lib/offline.js). "Enquanto não tenho acesso ao Railway, eu testo
2810
3513
  com o projeto rodando localmente." (24/09/2026) */
2811
- case 'offline': case 'local': {
3514
+ case 'offline': {
2812
3515
  if (/^(off|sair|desligar|parar)$/i.test(rest)) {
2813
3516
  if (!state.servidorAntes) { console.log(c.muted(' O /offline não está ligado.')); break; }
2814
3517
  offline.desligar();
@@ -2845,7 +3548,60 @@ async function handleSlash(text) {
2845
3548
  }
2846
3549
 
2847
3550
  /* Os comandos da pessoa: lista, e explica como fazer o dela. */
2848
- case 'comandos': {
3551
+ case 'styles': {
3552
+ // Os kits de estilo de motion (lib/kits.js): a lista no terminal e a galeria (capa + preview + nome).
3553
+ const K = require('../lib/kits.js');
3554
+ const a = String(rest || '').trim();
3555
+ if (a && !/^(galeria|abrir|lista)$/i.test(a)) {
3556
+ const k = K.achar(a);
3557
+ if (!k) { console.log(c.warn(` Não achei o estilo "${a}". /styles mostra todos.`)); break; }
3558
+ console.log(` ${c.brand(k.nome)} ${c.muted(`(${k.slug} · ${k.familia})`)}`);
3559
+ console.log(` ${k.descricao}`);
3560
+ if (k.quando.length) console.log(c.muted(` Serve pra: ${k.quando.slice(0, 3).join('; ')}`));
3561
+ if (!K.previewPronto(k)) console.log(c.muted(' Renderizando o preview aqui (uma vez só)…'));
3562
+ const r = await K.main(['preview', k.slug], { aoFalar: (t) => process.stdout.write(c.muted(`\r ⎿ ${t}`.padEnd(60))) });
3563
+ process.stdout.write('\n');
3564
+ if (r.ok && r.video) { if (process.env.PRIMOCODE_APP !== '1') tools.openInBrowser(r.video); console.log(c.ok(` ${r.texto}`)); }
3565
+ else console.log(c.warn(` ${r.texto}`));
3566
+ console.log(c.muted(` Pra usar: peça o vídeo dizendo "estilo ${k.nome.split(' · ')[0].toLowerCase()}".`));
3567
+ break;
3568
+ }
3569
+ for (const l of K.listaParaPessoa()) console.log(/^\s/.test(l) ? c.muted(l) : ` ${c.brand(l)}`);
3570
+ if (a.toLowerCase() === 'lista') break;
3571
+ // a tela de estilos (os kits no carrossel da tela de gosto): no terminal abre no navegador, no app numa janela
3572
+ console.log(c.muted(` Abri a tela de estilos${process.env.PRIMOCODE_APP === '1' ? '' : ' no navegador'} (até 10 min). Escolha um estilo ou feche pra voltar.`));
3573
+ const r = await K.main(['galeria']);
3574
+ console.log((r.ok ? c.ok : c.muted)(` ${r.texto} · /styles <estilo> mostra o preview no terminal`));
3575
+ break;
3576
+ }
3577
+ case 'team': {
3578
+ const team = require('../lib/team.js');
3579
+ const achados = team.instalados();
3580
+ const o = team.entender(rest, achados);
3581
+ if (o.erro) { console.log(c.warn(` ${o.erro}`)); break; }
3582
+ if (o.acao === 'status') {
3583
+ const ligado = achados.some((x) => x.nome === state.config.team) ? state.config.team : null;
3584
+ team.status(achados, ligado).forEach((l, i) => console.log(i === 0 ? c.white(` ${l}`) : c.muted(` ${l}`)));
3585
+ break;
3586
+ }
3587
+ if (o.acao === 'desligar') {
3588
+ state.config.team = null;
3589
+ cfg.saveConfig({ team: null });
3590
+ console.log(c.ok(' O PrimoCode volta a trabalhar sozinho.'));
3591
+ break;
3592
+ }
3593
+ if (o.acao === 'ligar') {
3594
+ state.config.team = o.nome;
3595
+ cfg.saveConfig({ team: o.nome });
3596
+ console.log(c.ok(` ${team.PARCEIROS[o.nome].titulo} ligado: o PrimoCode faz e ele revisa, só lendo.`));
3597
+ console.log(c.dim(` /team ${o.nome} faz <pedido> deixa ele fazer · /team off desliga`));
3598
+ break;
3599
+ }
3600
+ await parceiroFaz(o.nome, o.pedido);
3601
+ break;
3602
+ }
3603
+
3604
+ case 'commands': {
2849
3605
  const novo = rest.match(/^(novo|new|criar)\s+(\S+)$/i);
2850
3606
  if (novo) {
2851
3607
  const r = comandosLib.criar(novo[2]);
@@ -2860,14 +3616,14 @@ async function handleSlash(text) {
2860
3616
  for (const x of lista) {
2861
3617
  console.log(` ${c.brand(ui.padRight('/' + x.nome, 14))}${c.dim(ui.padRight(x.origem, 11))}${c.muted(x.descricao)}`);
2862
3618
  }
2863
- console.log(c.dim('\n Um arquivo .md vira um comando: revisar.md é /revisar.'));
3619
+ console.log(c.dim('\n Um arquivo .md vira um comando: review.md é /review.'));
2864
3620
  console.log(c.dim(' ~/.primocode/comandos/ vale em todo projeto · <projeto>/.primocode/comandos/ só naquele.'));
2865
- console.log(c.dim(' $ARGUMENTOS no texto recebe o que você digitar depois: /revisar o login.'));
2866
- console.log(c.dim(' /comandos novo <nome> cria um para você editar.'));
3621
+ console.log(c.dim(' $ARGUMENTOS no texto recebe o que você digitar depois: /review o login.'));
3622
+ console.log(c.dim(' /commands novo <nome> cria um para você editar.'));
2867
3623
  break;
2868
3624
  }
2869
3625
 
2870
- case 'claude': case 'gpt': case 'codex': case 'key': case 'keys': {
3626
+ case 'claude': case 'gpt': case 'codex': case 'key': {
2871
3627
  console.log(c.muted(' Não existe mais provedor para configurar.'));
2872
3628
  console.log(c.muted(' A API já vem com o PrimoCode: entrou na conta, pode usar.'));
2873
3629
  console.log(c.dim(' /effort escolhe o esforço · /account mostra o seu plano'));
@@ -2889,7 +3645,9 @@ async function handleSlash(text) {
2889
3645
  await sendPrompt(comandosLib.expandir(proprio, rest));
2890
3646
  break;
2891
3647
  }
2892
- const casam = comandosDoMenu().map(([nome]) => nome.slice(1)).filter((n) => n.startsWith(cmd.toLowerCase()));
3648
+ let casam = comandosDoMenu().map(([nome]) => nome.slice(1)).filter((n) => n.startsWith(cmd.toLowerCase()));
3649
+ // Meio apelido antigo também serve: "/desf" chega no /undo.
3650
+ if (!casam.length) casam = nomes.porPrefixo(cmd).filter((n) => comandosDoMenu().some(([m]) => m === '/' + n));
2893
3651
  if (casam.length === 1) {
2894
3652
  console.log(c.dim(` → /${casam[0]}`));
2895
3653
  await handleSlash('/' + casam[0] + (rest ? ' ' + rest : ''));
@@ -2950,6 +3708,14 @@ function conferirServidor() {
2950
3708
  }
2951
3709
 
2952
3710
  async function main() {
3711
+ /* `primocode autoteste|preview|review|pesquisar`: entradas sem sessão (lib/cli/subcomandos.js). */
3712
+ if (require('../lib/cli/subcomandos.js').NOMES.includes(process.argv[2])) {
3713
+ process.exit(await require('../lib/cli/subcomandos.js').main(process.argv[2], process.argv.slice(3)));
3714
+ }
3715
+ /* `primocode --tentativas N "pedido"`: best of N em worktrees separados (lib/cli/tentativas.js). */
3716
+ if (process.argv.slice(2).some((a) => a === '--tentativas' || a.startsWith('--tentativas='))) {
3717
+ process.exit(await require('../lib/cli/tentativas.js').main(process.argv.slice(2)));
3718
+ }
2953
3719
  /* `primocode video <op>`: o editor de vídeo por linha do tempo
2954
3720
  (lib/video/). Sai ANTES de tudo — sem sessão, sem pasta padrão —
2955
3721
  porque quem chama é o agente pelo run_shell, na pasta da gravação. */
@@ -2962,6 +3728,52 @@ async function main() {
2962
3728
  if (process.argv[2] === 'editor') {
2963
3729
  process.exit(await require('../lib/editor-pro.js').main(process.argv.slice(3)));
2964
3730
  }
3731
+ /* `primocode gosto medir <video> [mais videos] [--salvar]`: os números do vídeo que a pessoa curtiu (lib/estudio/gosto-medir.js).
3732
+ Com --salvar, cada um entra no gosto como referência. (O /taste de dentro da sessão é outra entrada.) */
3733
+ // `primocode gosto` fora da sessão: o mesmo que o /gosto mostra (o que você escolheu, as referências, pra onde inclina)
3734
+ // `primocode porta`: o /porta fora da sessão, na pasta atual — é o que o agente roda pelo run_shell (lib/porta.js)
3735
+ if (process.argv[2] === 'porta') {
3736
+ const r = await require('../lib/porta.js').diagnostico(path.resolve(process.argv[3] || process.cwd()));
3737
+ for (const l of r.linhas) console.log(' ' + l);
3738
+ process.exit(0);
3739
+ }
3740
+ if (process.argv[2] === 'gosto' && process.argv[3] === 'provar') {
3741
+ const G = require('../lib/estudio/gosto.js'), P = require('../lib/estudio/gosto-prova.js');
3742
+ const assunto = process.argv.slice(4).join(' ').trim() || 'um vídeo de apresentação';
3743
+ for (const l of P.texto(P.provar(G.pesos(G.ler()), { assunto }), assunto)) console.log(' ' + l);
3744
+ process.exit(0);
3745
+ }
3746
+ if (process.argv[2] === 'gosto' && (!process.argv[3] || process.argv[3] === 'ver')) {
3747
+ const G = require('../lib/estudio/gosto.js');
3748
+ const linhas = G.listar(G.ler());
3749
+ if (!linhas.length) console.log(' Ainda não tem gosto salvo. Dentro do PrimoCode: /taste referencias recebe os vídeos que você curtiu.\n Daqui: primocode gosto medir <vídeo ou pasta> --salvar');
3750
+ else for (const l of linhas) console.log(' ' + l);
3751
+ process.exit(0);
3752
+ }
3753
+ if (process.argv[2] === 'gosto' && process.argv[3] === 'medir') {
3754
+ const salvar = process.argv.includes('--salvar'), json = process.argv.includes('--json');
3755
+ const { medir, explicar, videosDe } = require('../lib/estudio/gosto-medir.js');
3756
+ const pedidos = process.argv.slice(4).filter((x) => x !== '--salvar' && x !== '--json');
3757
+ const arquivos = videosDe(pedidos.map((x) => path.resolve(x)));
3758
+ if (!pedidos.length) { console.error('Uso: primocode gosto medir <vídeo ou pasta> [mais] [--salvar] [--json]'); process.exit(1); }
3759
+ if (!arquivos.length) { console.error('Não achei vídeo (mp4, mov, m4v ou webm) nessa pasta.'); process.exit(1); }
3760
+ if (salvar && arquivos.length > 5) console.log(' O gosto guarda até 5 vídeos: ficam os 5 últimos desta lista.\n');
3761
+ const G = require('../lib/estudio/gosto.js');
3762
+ let falhou = false;
3763
+ for (const f of arquivos) {
3764
+ const m = await medir(f);
3765
+ if (m.ok && salvar) G.adicionarReferencia(m, { nome: path.basename(f) });
3766
+ if (!m.ok) falhou = true;
3767
+ if (json) console.log(JSON.stringify(m, null, 2));
3768
+ else console.log(explicar(m, { cor: !!process.stdout.isTTY }).join('\n') + '\n');
3769
+ }
3770
+ if (!json) console.log(salvar ? ' Guardado no seu gosto. O próximo motion leva isso em conta (/taste mostra).' : ' Pra guardar como referência do seu gosto: --salvar');
3771
+ process.exit(falhou ? 1 : 0);
3772
+ }
3773
+ // `primocode motioncraft …`: o motion com o MotionCraft + a voz do PrimoCode.
3774
+ if (process.argv[2] === 'motioncraft') {
3775
+ process.exit(require('../lib/motioncraft.js').main(process.argv.slice(3)));
3776
+ }
2965
3777
  // `primocode mcp …`: os servidores MCP pelo run_shell (lib/mcp.js).
2966
3778
  if (process.argv[2] === 'videos') {
2967
3779
  const r = require('../lib/estudio/exportar.js').main(process.argv.slice(3));
@@ -2975,6 +3787,12 @@ async function main() {
2975
3787
  console.log(JSON.stringify({ ok: true, comandos: comandosDoMenu().map(([nome, descricao]) => ({ nome, descricao: ui.stripAnsi ? ui.stripAnsi(String(descricao)) : String(descricao), embutido: embutidos.has(nome) })) }));
2976
3788
  process.exit(0);
2977
3789
  }
3790
+ // `primocode kit …`: os kits de estilo de motion (lib/kits.js). Pelo run_shell do agente ele roda dentro do processo (lib/tools.js).
3791
+ if (process.argv[2] === 'kit' || process.argv[2] === 'kits') {
3792
+ const r = await require('../lib/kits.js').main(process.argv.slice(3), { projectDir: process.cwd(), aoFalar: (t) => process.stderr.write(` ⎿ ${t}\n`) });
3793
+ console.log(r.texto);
3794
+ process.exit(r.ok ? 0 : 1);
3795
+ }
2978
3796
  if (process.argv[2] === 'skill' || process.argv[2] === 'skills') {
2979
3797
  process.exit(require('../lib/skills.js').main(process.argv.slice(3)));
2980
3798
  }
@@ -3070,7 +3888,7 @@ async function main() {
3070
3888
  }
3071
3889
  if (args[0] === '--help' || args[0] === '-h') {
3072
3890
  console.log(welcomeBox(VERSION, null, { mascot: state.config.mascot, userName: state.config.userName, modo: state.mode }));
3073
- console.log(HELP);
3891
+ console.log(montarHelp());
3074
3892
  process.exit(0);
3075
3893
  }
3076
3894
 
@@ -3090,6 +3908,9 @@ async function main() {
3090
3908
  if (!pedido) { console.error('Uso: primocode -p "pedido" [--output-format json] [--permission-mode plan]'); process.exit(1); }
3091
3909
  if (typeof fl.resume === 'string') await retomarConversa(fl.resume);
3092
3910
  else if (continuar) await continuarUltima();
3911
+ // O script trabalha na pasta de onde rodou, não no último projeto (sem lembrar: é só nesta execução).
3912
+ const aqui = H.pastaDoScript({ cwd: process.cwd(), casa: os.homedir(), raiz: cfg.ROOT_DIR, app: process.env.PRIMOCODE_APP === '1' });
3913
+ if (aqui) { state.workDir = aqui; state.currentProject = path.basename(aqui); state.workDirOrigem = 'terminal'; }
3093
3914
  state.semTerminal = true;
3094
3915
  process.env.PRIMOCODE_SEM_TELA = '1'; // modo script: nenhuma tela de gosto abre no navegador (com PRIMOCODE_APP=1 o app abre pela linha `primocode:abrir-gosto`)
3095
3916
  if (process.env.PRIMOCODE_LOG_FERRAMENTAS === '1') { // o app do Primo registra cada ferramenta no log dele
@@ -3097,7 +3918,7 @@ async function main() {
3097
3918
  }
3098
3919
  let erro = null;
3099
3920
  const antes = state.history.length;
3100
- const comando = isSlash(pedido); // `-p "/tree"`: o comando roda como no terminal (o app usa isso)
3921
+ const comando = isSlash(pedido); // `-p "/map tree"`: o comando roda como no terminal (o app usa isso)
3101
3922
  const texto = await H.capturar(async () => {
3102
3923
  try { if (comando) await handleSlash(pedido); else await sendPrompt(pedido); } catch (e) { erro = e.message || String(e); }
3103
3924
  }, { calar: h.formato === 'json' });
@@ -3170,6 +3991,15 @@ async function main() {
3170
3991
  if (telaCheia && state.workDirOrigem === 'padrao') {
3171
3992
  console.log(c.warn(` pasta padrão: ${shortPath(state.workDir)}`) + c.dim(' · /dir <pasta> para trabalhar numa sua'));
3172
3993
  }
3994
+ /* A última conversa desta pasta, em uma linha (lib/passagem.js). Uma vez por abertura, só aqui (o -p já saiu
3995
+ antes) e só se a pessoa não abriu já retomando (-c / --resume). */
3996
+ if (!state.dicaRetomarMostrada && !continuar && !fl.resume && state.workDirOrigem !== 'padrao') {
3997
+ state.dicaRetomarMostrada = true;
3998
+ try {
3999
+ const linha = require('../lib/passagem.js').linhaDeAbertura(fs.readFileSync(path.join(state.workDir || process.cwd(), 'memory.md'), 'utf8').slice(-20000));
4000
+ if (linha) console.log(c.muted(' ' + linha));
4001
+ } catch { /* a dica nunca derruba a abertura */ }
4002
+ }
3173
4003
  // O spinner desenha dentro da caixa (lib/entrada.js mostrarSpinner).
3174
4004
  if (rl.tty) Spinner.caixa = rl;
3175
4005
  ui.titulo('PrimoCode');
@@ -3229,6 +4059,9 @@ async function main() {
3229
4059
  // solto, para não segurar o prompt. Fechar o terminal em cima dele
3230
4060
  // perderia justamente a resposta que a pessoa acabou de ler, e ela
3231
4061
  // não veria falta nenhuma até procurar no celular.
4062
+ // O que ficou de pé em segundo plano morre junto: o filho com a saída
4063
+ // ligada ao PrimoCode seguraria o processo vivo depois do "Até logo!".
4064
+ require('../lib/fundo.js').pararTodas();
3232
4065
  const fim = () => console.log(c.muted('\nAté logo!'));
3233
4066
  Promise.race([
3234
4067
  state.gravador.esperar(),
@@ -3258,7 +4091,7 @@ async function main() {
3258
4091
  if (ehBash(text)) await rodarBash(text);
3259
4092
  else if (isSlash(text)) await handleSlash(text);
3260
4093
  else {
3261
- await sendPrompt(text);
4094
+ await sendPrompt(text, { digitado: true });
3262
4095
  }
3263
4096
  } catch (e) {
3264
4097
  fala.problema(e);
@@ -3357,7 +4190,11 @@ async function main() {
3357
4190
  // o primocode-server, que tem a chave do provedor.
3358
4191
  state.liberado = !r || r.liberado !== false;
3359
4192
  state.motivoBloqueio = r && r.motivo;
3360
- }).catch(() => { state.liberado = true; })
4193
+ }).catch((e) => {
4194
+ // A abertura quebrou (rede, arquivo da conta). Não prende a pessoa, mas diz o que foi.
4195
+ state.liberado = true;
4196
+ console.log(c.muted(` (a abertura falhou: ${e && e.message ? e.message : e}. Se algo estranhar, rode /doctor)`));
4197
+ })
3361
4198
  // Depois da abertura, porque é nela que a pessoa entra na conta — e
3362
4199
  // sem conta não há conversa para achar.
3363
4200
  .then(() => (fl.resume === true ? escolherNaAbertura().catch(() => false)