primocode 10.19.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/LICENSES/opencode-MIT.txt +24 -0
  2. package/LICENSES/pptxgenjs-MIT.txt +31 -0
  3. package/README.md +16 -3
  4. package/agentes/acessibilidade.md +10 -0
  5. package/agentes/ambiente.md +10 -0
  6. package/agentes/api.md +10 -0
  7. package/agentes/backend.md +10 -0
  8. package/agentes/copy.md +10 -0
  9. package/agentes/css-layout.md +10 -0
  10. package/agentes/dados.md +10 -0
  11. package/agentes/depuracao.md +10 -0
  12. package/agentes/design.md +10 -0
  13. package/agentes/docs.md +10 -0
  14. package/agentes/frontend.md +10 -0
  15. package/agentes/geral/capacidades/arquivos.json +132 -0
  16. package/agentes/geral/capacidades/codigo.json +132 -0
  17. package/agentes/geral/capacidades/dados.json +126 -0
  18. package/agentes/geral/capacidades/depuracao.json +126 -0
  19. package/agentes/geral/capacidades/escrita.json +126 -0
  20. package/agentes/geral/capacidades/git.json +126 -0
  21. package/agentes/geral/capacidades/pesquisa.json +126 -0
  22. package/agentes/geral/capacidades/seguranca.json +132 -0
  23. package/agentes/geral/capacidades/shell.json +132 -0
  24. package/agentes/geral/capacidades/web.json +126 -0
  25. package/agentes/git-pr.md +10 -0
  26. package/agentes/indice.md +86 -0
  27. package/agentes/nextjs.md +10 -0
  28. package/agentes/node.md +10 -0
  29. package/agentes/performance.md +10 -0
  30. package/agentes/pesquisa.md +10 -0
  31. package/agentes/python.md +10 -0
  32. package/agentes/react.md +10 -0
  33. package/agentes/refatoracao.md +10 -0
  34. package/agentes/revisor.md +10 -0
  35. package/agentes/seguranca.md +10 -0
  36. package/agentes/sql.md +10 -0
  37. package/agentes/testes.md +10 -0
  38. package/agentes/typescript.md +10 -0
  39. package/agentes/ux.md +10 -0
  40. package/bin/primocode.js +65 -8
  41. package/editor/helpers/camera_viva.py +28 -2
  42. package/lib/act.js +79 -10
  43. package/lib/agentes/index.js +146 -0
  44. package/lib/agentes/nucleo.js +18 -0
  45. package/lib/catalogo.js +12 -2
  46. package/lib/cli/review.js +64 -0
  47. package/lib/cli/subcomandos.js +34 -0
  48. package/lib/cli/tentativas.js +107 -0
  49. package/lib/cli/util.js +51 -0
  50. package/lib/comandos-extra.js +4 -2
  51. package/lib/editor-pro-maquina.js +165 -0
  52. package/lib/editor-pro.js +10 -7
  53. package/lib/entregaveis/cli.js +26 -0
  54. package/lib/entregaveis/especialistas.js +50 -0
  55. package/lib/entregaveis/nucleo.js +111 -0
  56. package/lib/entregaveis/slides.js +221 -0
  57. package/lib/estudio/materiais.js +172 -0
  58. package/lib/fundo.js +34 -1
  59. package/lib/kits.js +41 -2
  60. package/lib/nomes.js +6 -0
  61. package/lib/placar.js +173 -0
  62. package/lib/plugin/autoteste.js +99 -0
  63. package/lib/plugin/edicao-visual.js +133 -0
  64. package/lib/plugin/pesquisar.js +92 -0
  65. package/lib/plugin/preview-cli.js +38 -0
  66. package/lib/plugin/preview.js +89 -0
  67. package/lib/plugin/tunel.js +27 -0
  68. package/lib/review.js +134 -0
  69. package/lib/session/compactacao.js +124 -0
  70. package/lib/statusline.js +52 -0
  71. package/lib/tool/diagnostico.js +100 -0
  72. package/lib/tool/perguntar.js +60 -0
  73. package/lib/tool/reparar-entrada.js +66 -0
  74. package/lib/tool/web.js +102 -0
  75. package/lib/tools.js +20 -1
  76. package/lib/ui.js +1 -1
  77. package/materiais/saas-linear/base.ts +84 -0
  78. package/materiais/saas-linear/camera/Camera.tsx +38 -0
  79. package/materiais/saas-linear/fontes/OFL-Inter.txt +93 -0
  80. package/materiais/saas-linear/fontes/OFL-Newsreader.txt +93 -0
  81. package/materiais/saas-linear/fontes/inter-400.woff2 +0 -0
  82. package/materiais/saas-linear/fontes/inter-600.woff2 +0 -0
  83. package/materiais/saas-linear/fontes/newsreader-400.woff2 +0 -0
  84. package/materiais/saas-linear/formas/Agenda.tsx +46 -0
  85. package/materiais/saas-linear/formas/CaixaPrompt.tsx +41 -0
  86. package/materiais/saas-linear/formas/CartoesIntegracao.tsx +57 -0
  87. package/materiais/saas-linear/formas/Cursor.tsx +40 -0
  88. package/materiais/saas-linear/formas/Menu.tsx +46 -0
  89. package/materiais/saas-linear/formas/Monitor.tsx +28 -0
  90. package/materiais/saas-linear/paleta.json +18 -0
  91. package/materiais/saas-linear/pecas.json +590 -0
  92. package/materiais/saas-linear/regras.md +40 -0
  93. package/materiais/saas-linear/sons/Som.tsx +39 -0
  94. package/materiais/saas-linear/sons/assinatura.mp3 +0 -0
  95. package/materiais/saas-linear/sons/clique.mp3 +0 -0
  96. package/materiais/saas-linear/sons/impacto.mp3 +0 -0
  97. package/materiais/saas-linear/sons/pop-cartao.mp3 +0 -0
  98. package/materiais/saas-linear/sons/pop-palavra.mp3 +0 -0
  99. package/materiais/saas-linear/sons/subida.mp3 +0 -0
  100. package/materiais/saas-linear/sons/swoosh.mp3 +0 -0
  101. package/materiais/saas-linear/sons/trilha.mp3 +0 -0
  102. package/materiais/saas-linear/sons/whoosh-entra.mp3 +0 -0
  103. package/materiais/saas-linear/sons/whoosh-sai.mp3 +0 -0
  104. package/materiais/saas-linear/texturas/Fundo.tsx +18 -0
  105. package/materiais/saas-linear/texturas/Particulas.tsx +22 -0
  106. package/materiais/saas-linear/tipografia/FraseSerifa.tsx +25 -0
  107. package/materiais/saas-linear/tipografia/Marca.tsx +20 -0
  108. package/materiais/saas-linear/tipografia/MarcaFinal.tsx +22 -0
  109. package/materiais/saas-linear/tipografia/Saudacao.tsx +27 -0
  110. package/materiais/saas-linear/transicoes/Cena.tsx +38 -0
  111. package/materiais/saas-linear/transicoes/CorteImpacto.tsx +16 -0
  112. package/package.json +3 -1
  113. package/skills/deck-conferido/SKILL.md +29 -0
  114. package/vendor/pptxgenjs/carregar.js +12 -0
  115. package/vendor/pptxgenjs/jszip.min.js +13 -0
  116. package/vendor/pptxgenjs/pptxgen.cjs.js +7370 -0
@@ -0,0 +1,24 @@
1
+ Ideias de projeto portadas do OpenCode (https://github.com/sst/opencode), licença MIT.
2
+ Código reescrito em JavaScript; nada foi copiado literalmente. Usado em: lib/casar.js, lib/tool/reparar-entrada.js.
3
+
4
+ MIT License
5
+
6
+ Copyright (c) 2025 opencode
7
+
8
+ Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ of this software and associated documentation files (the "Software"), to deal
10
+ in the Software without restriction, including without limitation the rights
11
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
+ copies of the Software, and to permit persons to whom the Software is
13
+ furnished to do so, subject to the following conditions:
14
+
15
+ The above copyright notice and this permission notice shall be included in all
16
+ copies or substantial portions of the Software.
17
+
18
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24
+ SOFTWARE.
@@ -0,0 +1,31 @@
1
+ Arquivos em vendor/pptxgenjs/: pptxgen.cjs.js (PptxGenJS 4.0.1) e jszip.min.js (JSZip 3.10.2, que embute pako).
2
+ Uso: gerar o .pptx editável em lib/entregaveis/slides.js. carregar.js é nosso (MIT, PrimoCode).
3
+
4
+ ===== PptxGenJS, licença MIT =====
5
+ The MIT License (MIT)
6
+
7
+ Copyright (c) 2015-2022 Brent Ely
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ of this software and associated documentation files (the "Software"), to deal
11
+ in the Software without restriction, including without limitation the rights
12
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ copies of the Software, and to permit persons to whom the Software is
14
+ furnished to do so, subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in all
17
+ copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
+ SOFTWARE.
26
+
27
+ ===== JSZip =====
28
+ Dupla licença: MIT ou GPL-3.0-or-later. Usado sob os termos da MIT.
29
+ Copyright (c) 2009-2016 Stuart Knightley, David Duponchel, Franz Buchinger, António Afonso.
30
+ Inclui pako (MIT e Zlib), Copyright (C) 2014-2017 Vitaly Puzrin e Andrey Tupitsin.
31
+ Texto da MIT: igual ao de PptxGenJS acima, com os titulares citados.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # PrimoCode v10.19.0
1
+ # PrimoCode v11.0.0
2
2
 
3
3
  Agente de engenharia brasileiro para o terminal, no estilo Claude Code.
4
4
  Cria arquivos de verdade, roda comandos, **controla o navegador e o desktop** —
@@ -9,7 +9,7 @@ OpenRouter, e cada apelido (`top`/`main`/`fast`) é uma **corrente**: se um mode
9
9
  está no limite de pedidos, o próximo atende. Você não vê o erro, e não paga nada.
10
10
 
11
11
  ```
12
- ▐▛███▜▌ Primo Code v10.19.0
12
+ ▐▛███▜▌ Primo Code v11.0.0
13
13
  ▝▜█████▛▘ Bem-vindo de volta, Joel
14
14
  ▘▘ ▝▝ ~/primocode · /dir <pasta> muda
15
15
  ```
@@ -21,6 +21,13 @@ veja `/mascot` e `/name`.
21
21
 
22
22
  `/voice` abre a tela do Primo: agenda, clima, música, máquina e um robô 3D no centro. Diga **"Primo"** para chamar; ele fala frase a frase e você pode interromper. Na primeira vez cria `~/.primocode/voz-venv` sozinho (`primocode doutor` mostra o estado). Robô offline: `"robo":"expressive"` em `~/.primocode/voz.json`.
23
23
 
24
+ ## Novidades da 11.0
25
+
26
+ - **O placar:** o PrimoCode aprende, neste computador, qual modelo grátis acerta mais em cada tipo de tarefa e passa a preferir esse (`/placar`). Nada sai da máquina.
27
+ - **Mais ferramentas:** `buscar_web`, `ler_url`, `perguntar`, `agentes_buscar` e `capacidade_buscar` (64 no total), diagnóstico depois de cada edição e `run_shell` em segundo plano.
28
+ - **Mais agentes:** 110 especialistas e 204 capacidades, `/review` em duas passadas, `/pesquisar` com fontes, `/testar-app`, `--tentativas N`, `primocode preview` e `primocode review --pr N`.
29
+ - **Motion, editor e documentos:** o kit de peças soltas, a câmera viva no editor de vídeo e o deck de ponta a ponta (.pptx e PDF). Detalhes em `RELEASE-11.0.md`.
30
+
24
31
  ## Novidades da 10.14
25
32
 
26
33
  - **Vídeo de motion de ponta a ponta** (EffectCraft, 68 receitas, voz, trilha, prévia e editor por comando). Detalhes no `CHANGELOG.md`.
@@ -272,6 +279,11 @@ mais.
272
279
  | `write_todos` | Plano de tarefas da sessão, visível no terminal |
273
280
  | `open_in_browser` | Abre HTML ou URL no navegador padrão |
274
281
  | `spawn_agent` | Delega uma sub-tarefa a outro agente |
282
+ | `buscar_web` · `ler_url` | Busca na internet (links com trecho) e lê uma página em markdown, sem chave |
283
+ | `perguntar` | Pergunta com 2 a 4 opções, só quando está bloqueado |
284
+ | `agentes_buscar` · `capacidade_buscar` | Acha o especialista (110) ou a receita pronta (204) certa |
285
+
286
+ Depois de cada edição, o verificador mais barato da linguagem roda e o erro volta junto. A lista completa: `/help all`.
275
287
 
276
288
  O `edit_file` é rigoroso de propósito: se o trecho não existe, ou aparece mais
277
289
  de uma vez sem `replace_all`, ele **recusa** e devolve as linhas reais do
@@ -422,7 +434,8 @@ primocode --worktree <nome> # worktree ../<repo>-<nome> em branch nov
422
434
  | `/attach <arquivo>` | Anexa arquivo ao próximo pedido |
423
435
  | `/detach` · `/attach` sem nada | Remove / lista anexos |
424
436
  | `/attach <url>` | Anexa o texto de uma página ao próximo pedido (sem menu, rodapé e script). `@https://…` no meio do pedido faz o mesmo, só pra aquele pedido |
425
- | `/help all` | Lista as 46 ferramentas que ele sabe usar, por grupo |
437
+ | `/help all` | Lista as 64 ferramentas que ele sabe usar, por grupo |
438
+ | `/placar` | Qual modelo grátis acerta mais em cada tipo de tarefa, aprendido neste computador (`/placar zerar` apaga) |
426
439
  | `/undo` | Volta o projeto para como estava antes do último pedido — inclusive o que um comando apagou, moveu ou gerou (com git instalado, cada pedido tira uma foto do projeto num git à parte, que não toca no seu `.git`; `node_modules`, `dist` e o que o `.gitignore` ignora ficam de fora). Sem git, volta o que o agente escreveu com as ferramentas de arquivo. `/undo lista` mostra os pedidos e quantos arquivos cada um mudou · `/undo N` volta os N últimos |
427
440
  | `/redo` | Volta o que o último `/undo` desfez — enquanto nenhum pedido novo mexeu nos arquivos |
428
441
  | `/check` | Acha sozinho como testar o projeto (os testes, senão o build, senão o lint) e responde em português: "Funcionou" ou "Não funcionou", com as linhas que explicam o erro. Se falhou, pergunta se a IA conserta. Se funcionou, marca o ponto como "funcionava" (aparece com ✓ no `/undo lista`) |
@@ -0,0 +1,10 @@
1
+ ---
2
+ id: acessibilidade
3
+ nome: Acessibilidade
4
+ area: frontend
5
+ quando_usar: teclado, leitor de tela, contraste e semântica
6
+ palavras: acessibilidade a11y aria contraste teclado foco wcag semantica leitor alt label
7
+ ferramentas: read_file grep edit_file run_shell
8
+ modelo_sugerido: sonnet
9
+ ---
10
+ Você é o especialista em ACESSIBILIDADE (WCAG 2.2 AA). Comece pelo HTML semântico (button é button, nav, main, h1 único, label ligado ao input) antes de qualquer aria. Cheque: tudo operável só com teclado e com foco visível; contraste mínimo 4.5:1 em texto; alt em imagem informativa e vazio em decorativa; erro de formulário anunciado; alvo de toque ≥ 44px; prefers-reduced-motion respeitado. Nunca coloque role/aria que contradiga a semântica, nem remova outline sem substituto. Prova: navegue com Tab pela página inteira, rode axe/Lighthouse se houver e cole as violações antes e depois.
@@ -0,0 +1,10 @@
1
+ ---
2
+ id: ambiente
3
+ nome: Ambiente
4
+ area: devops
5
+ quando_usar: instalar dependências, configurar e fazer rodar
6
+ palavras: instalar dependencias npm pip brew ffmpeg docker venv setup configurar node_modules
7
+ ferramentas: read_file grep edit_file run_shell
8
+ modelo_sugerido: sonnet
9
+ ---
10
+ Você é o especialista em AMBIENTE — dependências, instalação e execução. Descubra o que a máquina tem (node --version, python3 --version, qual gerenciador: npm/pnpm/yarn, pip/uv, brew/apt/winget) antes de mandar instalar; use o gerenciador que o projeto já usa (o lockfile diz). Instale só o que a tarefa pede, com a versão fixada no manifesto (package.json, requirements.txt), nunca global sem motivo. Se o comando fica de pé (servidor, watch), use run_background e leia com background_output para conferir que subiu; run_in_new_terminal só se a PESSOA quer ver o terminal. O resto em run_shell, lendo a saída inteira — "warning" não é erro, "ERR!" é. Falta algo no sistema (ffmpeg, git, python)? Instale pelo gerenciador do sistema e confira com --version. PROVE: o comando de rodar funcionando, e um LEIA.md com instalar e rodar que qualquer um siga.
package/agentes/api.md ADDED
@@ -0,0 +1,10 @@
1
+ ---
2
+ id: api
3
+ nome: Desenho de API REST
4
+ area: backend
5
+ quando_usar: contratos HTTP, status, paginação, erros e versionamento
6
+ palavras: api rest http json openapi status paginacao contrato swagger endpoint versionamento
7
+ ferramentas: read_file grep edit_file run_shell
8
+ modelo_sugerido: sonnet
9
+ ---
10
+ Você é o especialista em DESENHO DE API. Leia as rotas existentes e siga o padrão (nomes, envelope, erro). Recurso no plural, verbo vem do método HTTP; status certo (201 criou, 204 sem corpo, 400 entrada ruim, 401 sem login, 403 sem permissão, 404, 409 conflito, 422 validação); erro sempre no mesmo formato com código estável e mensagem útil. Lista paginada e ordenada com limite máximo; PUT/DELETE idempotente. Nunca devolva campo interno (senha, hash, id de outro tenant), nem mude contrato sem versão. Prova: curl de cada rota com caso feliz e caso de erro, colando status e corpo; atualize o OpenAPI se existir.
@@ -0,0 +1,10 @@
1
+ ---
2
+ id: backend
3
+ nome: Backend
4
+ area: backend
5
+ quando_usar: API, servidor, dados no servidor e autenticação
6
+ palavras: api servidor rotas endpoint autenticacao webhook middleware sessao token
7
+ ferramentas: read_file grep edit_file run_shell
8
+ modelo_sugerido: sonnet
9
+ ---
10
+ Você é o especialista em BACKEND. Leia o que existe (rotas, modelos, como o projeto trata erro e configuração) e siga o padrão dele. Regras: valide TODA entrada na borda (tipo, tamanho, faixa) e responda erro com o código HTTP certo e uma mensagem que diz o que corrigir; nunca segredo em código — variável de ambiente, e o .env.example atualizado; nunca concatene entrada do usuário em SQL, comando de shell ou caminho de arquivo; trate o que falha (rede, disco, dado ausente) sem catch vazio; separe rota, regra de negócio e acesso a dados; registre o que importa, sem dado pessoal no log. PROVE: rode o servidor ou o teste com run_shell e mostre a requisição respondendo.
@@ -0,0 +1,10 @@
1
+ ---
2
+ id: copy
3
+ nome: Copy e redação
4
+ area: escrita
5
+ quando_usar: texto de página, botão, e-mail, anúncio e microtexto
6
+ palavras: copy copywriting texto redacao headline titulo cta email anuncio landing marca tom
7
+ ferramentas: read_file grep edit_file run_shell
8
+ modelo_sugerido: sonnet
9
+ ---
10
+ Você é o especialista em COPY. Antes de escrever, diga: para quem, o que a pessoa faz depois de ler, e qual a única promessa. Título entrega o benefício concreto (número, prazo, resultado), não o nome do produto. Frase curta, verbo ativo, palavra do cliente, nada de "solução inovadora" ou "líder de mercado". Botão diz o que acontece ("Criar minha conta"). Nunca invente dado, depoimento ou garantia que o cliente não deu. Dê 3 variações do título com a lógica de cada. Prova: releia em voz alta cortando 20% das palavras, e cada afirmação rastreável a algo que o usuário disse.
@@ -0,0 +1,10 @@
1
+ ---
2
+ id: css-layout
3
+ nome: CSS e layout
4
+ area: frontend
5
+ quando_usar: grid, flexbox, responsividade e quebra de layout
6
+ palavras: quebra celular 390px css layout grid flexbox responsivo mobile media query tailwind alinhamento overflow z-index sass
7
+ ferramentas: read_file grep edit_file run_shell
8
+ modelo_sugerido: sonnet
9
+ ---
10
+ Você é o especialista em CSS E LAYOUT. Leia a folha existente e siga tokens e unidades. Desenhe mobile primeiro (390px), amplie com min-width. Grid para a página em duas dimensões, flex para uma linha; gap em vez de margem entre irmãos; clamp() para tipografia fluida; min-width: 0 em filho de flex que estoura. Nunca use !important, altura fixa em texto, z-index aleatório nem px para fonte. Bug de layout: inspecione o elemento, ache a regra que vence, conserte na origem. Prova: screenshot em 390px e 1280px sem rolagem horizontal, com os dois lados conferidos.
@@ -0,0 +1,10 @@
1
+ ---
2
+ id: dados
3
+ nome: Dados
4
+ area: dados
5
+ quando_usar: CSV, planilha, análise, modelagem e transformação de dados
6
+ palavras: csv planilha json dataset analise grafico pandas etl estatistica tabela
7
+ ferramentas: read_file grep edit_file run_shell
8
+ modelo_sugerido: sonnet
9
+ ---
10
+ Você é o especialista em DADOS. Antes de transformar, OLHE os dados de verdade (primeiras linhas, contagem, tipos, nulos, duplicatas) e escreva o que achou; hipótese sobre dado sem olhar é o erro mais caro desta área. Modele com nomes que dizem o que a coluna É, tipos certos (data é data, número é número), chaves e unicidade explícitas. Scripts idempotentes: rodar duas vezes dá o mesmo resultado. Toda conta que vai para tela ou relatório vem com a fórmula ao lado e uma conferência (o total bate com a soma das partes?). Planilha ou tabela para o usuário sai pelo Studio (grade), não por CSV solto, salvo pedido. Nunca invente número: o que não está nos dados fica em branco, e dito. PROVE: mostre a contagem antes e depois.
@@ -0,0 +1,10 @@
1
+ ---
2
+ id: depuracao
3
+ nome: Depuração
4
+ area: programacao
5
+ quando_usar: bug, erro, crash ou comportamento inesperado cuja causa não é óbvia
6
+ palavras: bug erro debug depurar crash excecao stacktrace falha travando quebrou reproduzir causa
7
+ ferramentas: read_file grep edit_file run_shell
8
+ modelo_sugerido: opus
9
+ ---
10
+ Você é o especialista em DEPURAÇÃO. Ordem fixa: 1) REPRODUZIR com o menor comando que falha e colar a saída; sem reprodução não há conserto. 2) LER o erro e a pilha inteiros, de cima a baixo. 3) HIPÓTESE escrita, com o que a refutaria; bisect (git bisect, comentar metade) em vez de adivinhar. 4) CAUSA RAIZ, não sintoma: pergunte "por que" até um fato. 5) Consertar uma coisa só. Nunca mude vários pontos de uma vez, nem silencie o erro, nem culpe o framework antes de excluir o seu código. Prova: o mesmo comando do passo 1 agora passa, mais um teste que falharia sem o conserto.
@@ -0,0 +1,10 @@
1
+ ---
2
+ id: design
3
+ nome: Design visual
4
+ area: design
5
+ quando_usar: identidade visual: paleta, tipografia, espaço, hierarquia
6
+ palavras: paleta tipografia identidade marca logo cores fontes icones tema estetica
7
+ ferramentas: read_file grep edit_file run_shell
8
+ modelo_sugerido: opus
9
+ ---
10
+ Você é o especialista em DESIGN VISUAL. Sua entrega é uma identidade que só este projeto poderia ter, escrita em tokens de CSS (cor, tipografia, espaço, raio, sombra) e aplicada. Decida a partir do assunto: quem usa, em que tela, com que sentimento. Uma paleta de 4 a 6 cores com valores (uma dominante, uma de destaque, neutros com leve viés da dominante) e um par de fontes com hierarquia clara (tamanhos numa escala, pesos com intenção). Fuja do genérico: gradiente roxo-azul, cinza puro, tudo centralizado, sombra em todo cartão, emoji como ícone. Espaço em branco é design; alinhe a uma grade. Ícone é SVG desenhado por você, no traço da marca, nunca emoji nem imagem baixada. PROVE: abra a página e descreva o que se vê em 390px e em 1280px.
@@ -0,0 +1,10 @@
1
+ ---
2
+ id: docs
3
+ nome: Documentação técnica
4
+ area: escrita
5
+ quando_usar: README, guias, comentários de API e changelog
6
+ palavras: documentacao docs readme guia tutorial changelog comentario jsdoc docstring
7
+ ferramentas: read_file grep edit_file run_shell
8
+ modelo_sugerido: sonnet
9
+ ---
10
+ Você é o especialista em DOCUMENTAÇÃO TÉCNICA. O leitor chega com pressa e um objetivo: o README abre com o que é, em uma frase, e o comando para rodar em 30 segundos. Toda instrução foi EXECUTADA por você; comando que você não rodou leva [não rodei]. Exemplo copiável e completo, com a saída esperada. Estrutura: o que é, instalar, usar, configurar, problemas comuns. Nunca documente o que o código não faz, nem copie o código em prosa, nem deixe link sem checar. Prova: siga o seu próprio guia do zero numa pasta limpa e cole onde travou.
@@ -0,0 +1,10 @@
1
+ ---
2
+ id: frontend
3
+ nome: Frontend
4
+ area: frontend
5
+ quando_usar: tela, HTML, CSS e o JavaScript do navegador
6
+ palavras: html css javascript navegador tela interface componente layout botao pagina formulario
7
+ ferramentas: read_file grep edit_file run_shell
8
+ modelo_sugerido: sonnet
9
+ ---
10
+ Você é o especialista em FRONTEND. Antes de escrever, leia o HTML/CSS que já existe e siga o padrão dele (nomes, unidades, como a paleta é declarada). O que separa interface de rascunho: HTML semântico (header/nav/main/section/button — nunca div clicável); CSS com variáveis para cor, espaço e tipo, escala de espaço consistente (4/8/12/16/24/32), grid/flex com gap em vez de margin solta; responsivo de 360px a 1440px sem rolagem horizontal; todo controle com hover, focus-visible e disabled; texto real, nunca lorem; contraste legível (4.5:1). JS sem framework quando vanilla resolve; nada de dependência nova sem o projeto já usar. PROVE antes de terminar: abra a página (browser_open) e leia o console — erro no console é tarefa inacabada.
@@ -0,0 +1,132 @@
1
+ {
2
+ "grupo": "arquivos",
3
+ "descricao": "Arquivos e documentos",
4
+ "itens": [
5
+ {
6
+ "id": "arq-ler-pdf",
7
+ "nome": "Ler PDF",
8
+ "receita": "pdftotext -layout arq.pdf - ; para escaneado, OCR (tesseract)",
9
+ "prova": "texto extraído amostrado"
10
+ },
11
+ {
12
+ "id": "arq-imagem-converter",
13
+ "nome": "Converter/redimensionar imagem",
14
+ "receita": "magick in.png -resize 1200x out.webp; sips no macOS",
15
+ "prova": "tamanho e dimensão conferidos"
16
+ },
17
+ {
18
+ "id": "arq-video-ffmpeg",
19
+ "nome": "Cortar/converter vídeo",
20
+ "receita": "ffmpeg -ss ini -to fim -i in.mp4 -c copy out.mp4; reencode: -c:v libx264 -crf 23",
21
+ "prova": "ffprobe da saída"
22
+ },
23
+ {
24
+ "id": "arq-audio-extrair",
25
+ "nome": "Extrair áudio",
26
+ "receita": "ffmpeg -i v.mp4 -vn -acodec libmp3lame a.mp3",
27
+ "prova": "duração igual à do vídeo"
28
+ },
29
+ {
30
+ "id": "arq-renomear-lote",
31
+ "nome": "Renomear em lote",
32
+ "receita": "simule antes (echo mv ...); padrão claro; sem sobrescrever",
33
+ "prova": "lista antes e depois"
34
+ },
35
+ {
36
+ "id": "arq-organizar",
37
+ "nome": "Organizar pasta",
38
+ "receita": "proponha a estrutura; mova (não apague); registre o que foi onde",
39
+ "prova": "árvore final"
40
+ },
41
+ {
42
+ "id": "arq-duplicados",
43
+ "nome": "Achar arquivos iguais",
44
+ "receita": "compare por hash (shasum), não por nome",
45
+ "prova": "grupos de hash iguais listados"
46
+ },
47
+ {
48
+ "id": "arq-docx",
49
+ "nome": "Ler/gerar Word",
50
+ "receita": "pandoc a.docx -t markdown; gerar: pandoc a.md -o a.docx",
51
+ "prova": "arquivo abre"
52
+ },
53
+ {
54
+ "id": "arq-xlsx",
55
+ "nome": "Ler/gerar Excel",
56
+ "receita": "pandas.read_excel / openpyxl; fórmulas só com openpyxl",
57
+ "prova": "abrir e conferir células"
58
+ },
59
+ {
60
+ "id": "arq-markdown-pdf",
61
+ "nome": "Markdown para PDF",
62
+ "receita": "pandoc a.md -o a.pdf (ou navegador headless imprimindo HTML)",
63
+ "prova": "PDF abre e páginas conferidas"
64
+ },
65
+ {
66
+ "id": "arq-zip-seguro",
67
+ "nome": "Descompactar com segurança",
68
+ "receita": "unzip -l antes; extraia numa pasta nova; cuidado com ../ nos caminhos",
69
+ "prova": "só arquivos esperados"
70
+ },
71
+ {
72
+ "id": "arq-encoding",
73
+ "nome": "Descobrir encoding",
74
+ "receita": "file -I arq; iconv -f latin1 -t utf-8",
75
+ "prova": "acentos corretos"
76
+ },
77
+ {
78
+ "id": "arq-json-editar",
79
+ "nome": "Editar JSON",
80
+ "receita": "jq '.a.b = 1' in.json > out.json; nunca sed em JSON",
81
+ "prova": "jq . valida"
82
+ },
83
+ {
84
+ "id": "arq-yaml",
85
+ "nome": "Validar YAML",
86
+ "receita": "python3 -c \"import yaml,sys;yaml.safe_load(open(sys.argv[1]))\" arq",
87
+ "prova": "sem exceção"
88
+ },
89
+ {
90
+ "id": "arq-env",
91
+ "nome": "Arquivo .env",
92
+ "receita": "nunca no git; .env.example com chaves vazias; carregue na entrada",
93
+ "prova": ".gitignore tem .env"
94
+ },
95
+ {
96
+ "id": "arq-log-grande",
97
+ "nome": "Ler log gigante",
98
+ "receita": "tail -n 2000; rg -c por tipo; rg -C em torno do erro",
99
+ "prova": "erro e contexto isolados"
100
+ },
101
+ {
102
+ "id": "arq-ocr-imagem",
103
+ "nome": "Texto de imagem",
104
+ "receita": "tesseract img.png - -l por+eng",
105
+ "prova": "texto amostrado"
106
+ },
107
+ {
108
+ "id": "arq-screenshot",
109
+ "nome": "Tirar print de página",
110
+ "receita": "navegador headless (playwright screenshot URL arq.png) em 390 e 1280",
111
+ "prova": "arquivos png vistos"
112
+ },
113
+ {
114
+ "id": "arq-svg",
115
+ "nome": "Otimizar SVG",
116
+ "receita": "svgo in.svg -o out.svg; viewBox presente; sem script",
117
+ "prova": "renderiza igual"
118
+ },
119
+ {
120
+ "id": "arq-hash",
121
+ "nome": "Conferir integridade",
122
+ "receita": "shasum -a 256 arq; compare com o publicado",
123
+ "prova": "hashes iguais"
124
+ },
125
+ {
126
+ "id": "arq-backup",
127
+ "nome": "Backup rápido",
128
+ "receita": "rsync -a origem/ destino/; teste restaurar um arquivo",
129
+ "prova": "arquivo restaurado abre"
130
+ }
131
+ ]
132
+ }
@@ -0,0 +1,132 @@
1
+ {
2
+ "grupo": "codigo",
3
+ "descricao": "Escrever e mudar código",
4
+ "itens": [
5
+ {
6
+ "id": "cod-entender-repo",
7
+ "nome": "Entender um repositório novo",
8
+ "receita": "README, package.json/pyproject, pasta principal, 1 teste; rg dos pontos de entrada",
9
+ "prova": "mapa de 5 linhas do projeto"
10
+ },
11
+ {
12
+ "id": "cod-seguir-padrao",
13
+ "nome": "Seguir o padrão da casa",
14
+ "receita": "leia 2 arquivos vizinhos; copie nomes, estrutura, tratamento de erro",
15
+ "prova": "diff parece escrito pelo mesmo autor"
16
+ },
17
+ {
18
+ "id": "cod-funcao-pura",
19
+ "nome": "Extrair função pura",
20
+ "receita": "tire efeito colateral para fora; entrada e saída; teste com 3 casos",
21
+ "prova": "teste da função passa"
22
+ },
23
+ {
24
+ "id": "cod-validar-entrada",
25
+ "nome": "Validar entrada de fora",
26
+ "receita": "na borda: tipo, tamanho, faixa, formato (zod/pydantic); falha cedo com mensagem útil",
27
+ "prova": "entrada ruim devolve erro claro"
28
+ },
29
+ {
30
+ "id": "cod-erro-bom",
31
+ "nome": "Tratar erro de verdade",
32
+ "receita": "capture onde dá pra agir; mensagem com contexto; nunca catch vazio",
33
+ "prova": "falha simulada mostra mensagem útil"
34
+ },
35
+ {
36
+ "id": "cod-config",
37
+ "nome": "Configuração sem hardcode",
38
+ "receita": "valor por ambiente em variável; padrão seguro; falha clara se faltar",
39
+ "prova": "rodar sem a variável dá erro explicando"
40
+ },
41
+ {
42
+ "id": "cod-feature-flag",
43
+ "nome": "Entregar mudança arriscada",
44
+ "receita": "atrás de flag; padrão desligado; remova depois",
45
+ "prova": "ligar e desligar funcionam"
46
+ },
47
+ {
48
+ "id": "cod-migrar-api",
49
+ "nome": "Trocar uma API por outra",
50
+ "receita": "ache todos os usos (rg); adaptador fino; migre um por vez com teste",
51
+ "prova": "rg do nome antigo vazio"
52
+ },
53
+ {
54
+ "id": "cod-renomear",
55
+ "nome": "Renomear com segurança",
56
+ "receita": "rg do nome em código, testes, docs, config e strings; troque tudo junto",
57
+ "prova": "rg vazio e teste verde"
58
+ },
59
+ {
60
+ "id": "cod-remover-codigo-morto",
61
+ "nome": "Apagar código morto",
62
+ "receita": "confirme com rg que ninguém usa (inclusive dinâmico); apague; rode testes",
63
+ "prova": "testes verdes e build ok"
64
+ },
65
+ {
66
+ "id": "cod-cli",
67
+ "nome": "Criar uma CLI",
68
+ "receita": "argumentos claros, --help, código de saída, erro no stderr, exemplo no README",
69
+ "prova": "--help e um caso de erro rodados"
70
+ },
71
+ {
72
+ "id": "cod-idempotente",
73
+ "nome": "Operação repetível",
74
+ "receita": "rodar duas vezes dá o mesmo resultado; chave de idempotência ou \"se não existe\"",
75
+ "prova": "segunda execução não muda nada"
76
+ },
77
+ {
78
+ "id": "cod-paginar",
79
+ "nome": "Paginar lista",
80
+ "receita": "limite máximo, cursor ou offset estável, ordem determinística",
81
+ "prova": "página 1, 2 e última conferidas"
82
+ },
83
+ {
84
+ "id": "cod-cache",
85
+ "nome": "Cache simples",
86
+ "receita": "chave clara, TTL, invalidação ao escrever; mede o ganho",
87
+ "prova": "taxa de acerto ou tempo medido"
88
+ },
89
+ {
90
+ "id": "cod-retry",
91
+ "nome": "Tentar de novo",
92
+ "receita": "só erro transitório; backoff exponencial com jitter; limite de tentativas",
93
+ "prova": "falha simulada recupera"
94
+ },
95
+ {
96
+ "id": "cod-logs",
97
+ "nome": "Logs úteis",
98
+ "receita": "nível, contexto (id), sem segredo, uma linha por evento",
99
+ "prova": "log legível sem dados sensíveis"
100
+ },
101
+ {
102
+ "id": "cod-upload",
103
+ "nome": "Receber arquivo",
104
+ "receita": "limite de tamanho, tipo por conteúdo, nome gerado por você, fora da raiz pública",
105
+ "prova": "arquivo grande e tipo errado rejeitados"
106
+ },
107
+ {
108
+ "id": "cod-formulario",
109
+ "nome": "Formulário completo",
110
+ "receita": "rótulos, validação ao sair, erro por campo, estado enviando, foco no 1º erro",
111
+ "prova": "envio válido e inválido testados"
112
+ },
113
+ {
114
+ "id": "cod-tema-escuro",
115
+ "nome": "Modo escuro",
116
+ "receita": "tokens de cor em variáveis; prefers-color-scheme; teste contraste nos dois",
117
+ "prova": "screenshot dos dois temas"
118
+ },
119
+ {
120
+ "id": "cod-i18n",
121
+ "nome": "Internacionalizar",
122
+ "receita": "tire strings para arquivos por idioma; plural e data pela biblioteca",
123
+ "prova": "troca de idioma funciona"
124
+ },
125
+ {
126
+ "id": "cod-teste-primeiro",
127
+ "nome": "Bug com teste primeiro",
128
+ "receita": "escreva teste que falha pelo motivo certo; conserte; veja verde",
129
+ "prova": "teste falhava e agora passa"
130
+ }
131
+ ]
132
+ }
@@ -0,0 +1,126 @@
1
+ {
2
+ "grupo": "dados",
3
+ "descricao": "Dados",
4
+ "itens": [
5
+ {
6
+ "id": "dad-olhar",
7
+ "nome": "Olhar um dado antes de usar",
8
+ "receita": "head, contagem, tipos, nulos, duplicatas, mín/máx por coluna",
9
+ "prova": "resumo escrito do que achou"
10
+ },
11
+ {
12
+ "id": "dad-limpar",
13
+ "nome": "Limpar tabela",
14
+ "receita": "padronize tipo, espaço, caixa, datas; trate nulo explicitamente; guarde o original",
15
+ "prova": "contagem antes e depois"
16
+ },
17
+ {
18
+ "id": "dad-juntar",
19
+ "nome": "Juntar duas tabelas",
20
+ "receita": "chave única dos dois lados? many-to-many multiplica linhas; confira contagem",
21
+ "prova": "linhas esperadas = linhas obtidas"
22
+ },
23
+ {
24
+ "id": "dad-duplicados",
25
+ "nome": "Achar duplicatas",
26
+ "receita": "group by chave having count>1; decida a regra de ficar com qual",
27
+ "prova": "0 duplicatas na chave"
28
+ },
29
+ {
30
+ "id": "dad-csv-grande",
31
+ "nome": "CSV maior que a memória",
32
+ "receita": "leia em blocos (chunksize) ou DuckDB direto no arquivo",
33
+ "prova": "resultado sem estourar memória"
34
+ },
35
+ {
36
+ "id": "dad-duckdb",
37
+ "nome": "Consultar arquivo com SQL",
38
+ "receita": "duckdb -c \"select ... from 'arq.csv'\" (também parquet/json)",
39
+ "prova": "resultado de consulta"
40
+ },
41
+ {
42
+ "id": "dad-agregar",
43
+ "nome": "Somar/contar por grupo",
44
+ "receita": "group by, defina a unidade; confira soma total com e sem grupo",
45
+ "prova": "total bate"
46
+ },
47
+ {
48
+ "id": "dad-datas",
49
+ "nome": "Séries por data",
50
+ "receita": "normalize fuso; agrupe por dia/semana; preencha dias sem dado",
51
+ "prova": "nenhum dia faltando"
52
+ },
53
+ {
54
+ "id": "dad-outlier",
55
+ "nome": "Valores fora da curva",
56
+ "receita": "boxplot/IQR; olhe os casos antes de apagar; pode ser erro ou fato",
57
+ "prova": "lista dos outliers e decisão"
58
+ },
59
+ {
60
+ "id": "dad-funil",
61
+ "nome": "Funil de conversão",
62
+ "receita": "etapas ordenadas; usuários únicos por etapa; taxa entre etapas",
63
+ "prova": "taxas somam com o topo"
64
+ },
65
+ {
66
+ "id": "dad-coorte",
67
+ "nome": "Retenção por coorte",
68
+ "receita": "agrupe por mês de entrada; % ativo nos meses seguintes",
69
+ "prova": "tabela triangular"
70
+ },
71
+ {
72
+ "id": "dad-amostra",
73
+ "nome": "Amostrar com honestidade",
74
+ "receita": "aleatória, semente fixa, tamanho dito; não generalize de amostra viesada",
75
+ "prova": "semente e n registrados"
76
+ },
77
+ {
78
+ "id": "dad-correlacao",
79
+ "nome": "Correlação não é causa",
80
+ "receita": "mostre o gráfico, o n e uma explicação alternativa",
81
+ "prova": "ressalva escrita"
82
+ },
83
+ {
84
+ "id": "dad-grafico-certo",
85
+ "nome": "Escolher gráfico",
86
+ "receita": "comparação: barras; tempo: linha; parte do todo: poucas fatias; relação: dispersão",
87
+ "prova": "gráfico com eixo e unidade"
88
+ },
89
+ {
90
+ "id": "dad-planilha-formula",
91
+ "nome": "Fórmula de planilha",
92
+ "receita": "PROCV/XLOOKUP, SOMASES, ÍNDICE+CORRESP; teste com 3 linhas",
93
+ "prova": "valores batem na mão"
94
+ },
95
+ {
96
+ "id": "dad-exportar",
97
+ "nome": "Exportar sem quebrar",
98
+ "receita": "UTF-8 com BOM para Excel; aspas em campos com vírgula",
99
+ "prova": "abrir no Excel sem erro"
100
+ },
101
+ {
102
+ "id": "dad-json-schema",
103
+ "nome": "Validar JSON",
104
+ "receita": "escreva o schema; valide na entrada; mensagens de erro por campo",
105
+ "prova": "exemplo ruim reprovado"
106
+ },
107
+ {
108
+ "id": "dad-migrar",
109
+ "nome": "Migrar dados",
110
+ "receita": "rode em cópia; contagem e checksum antes e depois; reversível",
111
+ "prova": "contagens iguais"
112
+ },
113
+ {
114
+ "id": "dad-anonimizar",
115
+ "nome": "Anonimizar para teste",
116
+ "receita": "troque nome/email/CPF por falsos; mantenha formato e relações",
117
+ "prova": "nenhum dado real restou"
118
+ },
119
+ {
120
+ "id": "dad-relatorio",
121
+ "nome": "Relatório recorrente",
122
+ "receita": "consulta versionada, parâmetros de data, saída datada",
123
+ "prova": "rodar duas vezes dá o mesmo"
124
+ }
125
+ ]
126
+ }