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