@semacode/cli 1.5.35 → 1.5.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1613,6 +1613,54 @@ function criarPoliticaTimeoutResumoAgentContext() {
1613
1613
  },
1614
1614
  };
1615
1615
  }
1616
+ function criarPoliticaDesignVisualAgentContext() {
1617
+ return {
1618
+ regra: "Quando a tarefa envolve interface, app, site, dashboard, painel, formulário, landing, jogo ou artefato visual, o Sema governa também qualidade visual. Modernidade, identidade, responsividade, estados e evidência visual não são extras opcionais.",
1619
+ modernoObrigatorio: true,
1620
+ aplicarQuando: "site, app, dashboard, painel, admin, onboarding, formulário, modal, jogo, material visual ou qualquer entrega com UI.",
1621
+ proibicoes: [
1622
+ "interface_generica_2010",
1623
+ "formularios_sem_hierarquia_visual",
1624
+ "cards_cinzas_sem_identidade",
1625
+ "layout_sem_responsividade_real",
1626
+ "texto_estourando_ou_sobreposto",
1627
+ "sem_estados_de_hover_focus_loading_erro_vazio",
1628
+ "sem_assets_quando_o_dominio_pede_visual",
1629
+ "copiar_estetica_do_contrato_para_ui",
1630
+ ],
1631
+ porCapacidade: {
1632
+ fraca: "Use um padrão moderno seguro: hierarquia clara, espaçamento consistente, paleta com contraste, estados básicos, responsivo mobile/desktop e nada de formulário cinza genérico. Se não conseguir validar visualmente, pare e peça revisão.",
1633
+ media: "Defina intenção visual antes de codar: público, domínio, densidade, tokens, componentes, estados, responsividade e anti-2010. Rode ou peça screenshot/browser check quando houver UI.",
1634
+ forte: "Crie direção visual específica do domínio, use assets reais/gerados quando fizer sentido, refine microinterações e faça verificação visual em desktop/mobile com screenshot e correção de overlap.",
1635
+ },
1636
+ evidencias: {
1637
+ fraca: [
1638
+ "descrever padrão visual escolhido",
1639
+ "confirmar responsividade básica",
1640
+ "listar estados essenciais",
1641
+ ],
1642
+ media: [
1643
+ "registrar tokens e componentes usados",
1644
+ "validar desktop e mobile",
1645
+ "corrigir texto sobreposto",
1646
+ ],
1647
+ forte: [
1648
+ "screenshot desktop/mobile",
1649
+ "verificação de assets e renderização",
1650
+ "auditoria de contraste, hierarquia e estado vazio",
1651
+ ],
1652
+ },
1653
+ criteriosMinimos: [
1654
+ "não parecer template de 2010",
1655
+ "hierarquia visual clara",
1656
+ "paleta com contraste e identidade do domínio",
1657
+ "responsividade mobile e desktop",
1658
+ "estados de hover, focus, loading, erro e vazio quando aplicáveis",
1659
+ "texto sem overlap ou estouro",
1660
+ "componentes coerentes com o workflow real",
1661
+ ],
1662
+ };
1663
+ }
1616
1664
  function criarEntrypointsClientesIa() {
1617
1665
  return [
1618
1666
  {
@@ -1656,6 +1704,7 @@ function criarFailClosedAgentContext() {
1656
1704
  "Se a resposta humana estiver em PT-BR, preserve acentos e símbolos mesmo que a DSL use ASCII.",
1657
1705
  "Se um arquivo de código tiver SEMA-GOVERNED, consulte Sema e o contrato aplicável antes de editar.",
1658
1706
  "Se uma chamada Sema estourar por timeout local, aumente o timeout e tente de novo; timeout do agente não libera ação sem Sema.",
1707
+ "Se a tarefa tiver UI e você não conseguir garantir um padrão visual moderno mínimo, pare e peça revisão em vez de entregar interface genérica.",
1659
1708
  ];
1660
1709
  }
1661
1710
  function criarAgentContextPack(guiaPorCapacidade) {
@@ -1767,7 +1816,7 @@ function criarAgentContextPack(guiaPorCapacidade) {
1767
1816
  ];
1768
1817
  return {
1769
1818
  nome: "Agent Context Pack",
1770
- versao: 3,
1819
+ versao: 4,
1771
1820
  objetivo: "Dar a agentes IA uma entrada curta, estruturada e auditável antes de abrir código cru ou inventar contexto.",
1772
1821
  ordemLeitura: [
1773
1822
  ARQUIVO_SEMA_BOOT,
@@ -1790,17 +1839,19 @@ function criarAgentContextPack(guiaPorCapacidade) {
1790
1839
  "Responda no idioma do usuário e preserve acentos, cedilha, pontuação e símbolos humanos.",
1791
1840
  "Mantenha o cabeçalho SEMA-GOVERNED em código gerado ou governado e volte ao contrato antes de editar.",
1792
1841
  "Se uma chamada Sema estourar por timeout local, aumente o timeout e tente novamente; não trate lentidão como sessão inativa.",
1842
+ "Se a tarefa tiver UI, trate design moderno como requisito governado por capacidade.",
1793
1843
  ],
1794
1844
  proibicoes: [
1795
1845
  "Não inventar sintaxe Sema fora da gramática e dos exemplos oficiais.",
1796
1846
  "Não tratar README, texto livre ou código como fonte superior ao contrato.",
1797
1847
  "Não sincronizar segredos, .env, node_modules, builds, caches, uploads ou artefatos privados fora do escopo.",
1798
1848
  "Não publicar, deployar ou remover capacidade sem contrato, drift e verificação.",
1799
- "Não misturar repositório público e privado sem conferir docs de repositórios e AGENTS.md.",
1849
+ "Não assumir repositório público, GitHub Release pública ou leitura local pelo MCP; confira docs de repositórios e AGENTS.md.",
1800
1850
  "Não usar a estética ASCII da DSL como desculpa para escrever PT-BR sem acentos.",
1801
1851
  "Não remover SEMA-GOVERNED nem substituir drift por comentário dentro do código.",
1802
1852
  "Não copiar o contrato inteiro para comentário de código; mantenha descrição humana curta.",
1803
1853
  "Não tratar timeout definido pelo agente como falha do Sema ou permissão para pular gate.",
1854
+ "Não entregar interface genérica, cinza, com cara de template antigo ou sem estados visuais quando a tarefa envolve UI.",
1804
1855
  ],
1805
1856
  prioridades: [
1806
1857
  "Menor artefato suficiente primeiro.",
@@ -1808,6 +1859,7 @@ function criarAgentContextPack(guiaPorCapacidade) {
1808
1859
  "Exemplos oficiais antes de nova sintaxe.",
1809
1860
  "Diagnóstico estruturado antes de opinião livre.",
1810
1861
  "Retry progressivo em timeout antes de declarar bloqueio.",
1862
+ "Design visual por capacidade quando houver UI.",
1811
1863
  "Se risco ou escopo estiver ambíguo, parar e pedir contrato/contexto.",
1812
1864
  ],
1813
1865
  fontes,
@@ -1825,6 +1877,7 @@ function criarAgentContextPack(guiaPorCapacidade) {
1825
1877
  politicaIdioma: criarPoliticaIdiomaAgentContext(),
1826
1878
  politicaCodigoGovernado: criarPoliticaCodigoGovernadoAgentContext(),
1827
1879
  politicaTimeoutResumo: criarPoliticaTimeoutResumoAgentContext(),
1880
+ politicaDesignVisual: criarPoliticaDesignVisualAgentContext(),
1828
1881
  failClosed: criarFailClosedAgentContext(),
1829
1882
  };
1830
1883
  }
@@ -1832,6 +1885,7 @@ function renderizarSemaBoot(agentContextPack) {
1832
1885
  const politica = agentContextPack.politicaIdioma;
1833
1886
  const politicaCodigo = agentContextPack.politicaCodigoGovernado;
1834
1887
  const politicaTimeout = agentContextPack.politicaTimeoutResumo;
1888
+ const politicaDesign = agentContextPack.politicaDesignVisual;
1835
1889
  return `# SEMA_BOOT
1836
1890
 
1837
1891
  Você está em um projeto governado por Sema. O contrato semântico vem antes de qualquer ação.
@@ -1859,6 +1913,16 @@ ${politicaCodigo.regra}
1859
1913
  - IA média: ${politicaCodigo.porCapacidade.media}
1860
1914
  - IA forte: ${politicaCodigo.porCapacidade.forte}
1861
1915
 
1916
+ ## Design visual quando houver UI
1917
+
1918
+ ${politicaDesign.regra}
1919
+
1920
+ - Aplicar quando: ${politicaDesign.aplicarQuando}
1921
+ - IA fraca: ${politicaDesign.porCapacidade.fraca}
1922
+ - IA média: ${politicaDesign.porCapacidade.media}
1923
+ - IA forte: ${politicaDesign.porCapacidade.forte}
1924
+ - Proibido: ${politicaDesign.proibicoes.slice(0, 5).join(", ")}.
1925
+
1862
1926
  ## Timeout e retry
1863
1927
 
1864
1928
  ${politicaTimeout.regra}
@@ -1886,6 +1950,7 @@ ${agentContextPack.failClosed.map((regra) => `- ${regra}`).join("\n")}
1886
1950
  }
1887
1951
  function renderizarSemaSmallModel(agentContextPack) {
1888
1952
  const politicaTimeout = agentContextPack.politicaTimeoutResumo;
1953
+ const politicaDesign = agentContextPack.politicaDesignVisual;
1889
1954
  return `# SEMA_SMALL_MODEL
1890
1955
 
1891
1956
  Leia isto primeiro se você tem pouco contexto, pouca memória, pouco tool use ou tendência a ignorar instruções longas.
@@ -1899,6 +1964,7 @@ Leia isto primeiro se você tem pouco contexto, pouca memória, pouco tool use o
1899
1964
  7. Responda no idioma do usuário. Em PT-BR, use acentos e símbolos normais.
1900
1965
  8. Se abrir código com \`${agentContextPack.politicaCodigoGovernado.marcador}\`: volte ao contrato, chame Sema e só então edite.
1901
1966
  9. Se Sema estourar por timeout local: aumente o timeout e tente de novo. Não trate isso como falha do Sema.
1967
+ 10. Se a tarefa tiver UI: aplique design moderno mínimo, responsivo, com hierarquia clara e estados visuais. Não entregue formulário cinza genérico.
1902
1968
 
1903
1969
  Ordem curta:
1904
1970
 
@@ -1916,12 +1982,20 @@ Timeout:
1916
1982
  - Se o projeto inteiro for lento, escopar para \`sema resumo <arquivo.sema> --micro --para mudanca\`.
1917
1983
  - ${politicaTimeout.ateQuandoTentar}
1918
1984
 
1985
+ Design visual:
1986
+
1987
+ - ${politicaDesign.regra}
1988
+ - IA fraca: ${politicaDesign.porCapacidade.fraca}
1989
+ - Evidência mínima: ${politicaDesign.evidencias.fraca.join(", ")}.
1990
+ - Proibido: ${politicaDesign.proibicoes.slice(0, 5).join(", ")}.
1991
+
1919
1992
  Fail-closed:
1920
1993
 
1921
1994
  ${agentContextPack.failClosed.map((regra) => `- ${regra}`).join("\n")}
1922
1995
  `;
1923
1996
  }
1924
1997
  function renderizarDocumentoAgentesPorCapacidade(agentContextPack) {
1998
+ const politicaDesign = agentContextPack.politicaDesignVisual;
1925
1999
  return `# Agentes por capacidade
1926
2000
 
1927
2001
  Sema deve funcionar em agentes fortes, médios e fracos. A diferença não é só tamanho de contexto; é disciplina operacional.
@@ -1934,6 +2008,19 @@ Arquivos gerados ou governados pela Sema devem manter o marcador \`${agentContex
1934
2008
  - Média: ${agentContextPack.politicaCodigoGovernado.porCapacidade.media}
1935
2009
  - Forte: ${agentContextPack.politicaCodigoGovernado.porCapacidade.forte}
1936
2010
 
2011
+ ## Design Visual
2012
+
2013
+ ${politicaDesign.regra}
2014
+
2015
+ - Fraca: ${politicaDesign.porCapacidade.fraca}
2016
+ Evidência: ${politicaDesign.evidencias.fraca.join(", ")}.
2017
+ - Média: ${politicaDesign.porCapacidade.media}
2018
+ Evidência: ${politicaDesign.evidencias.media.join(", ")}.
2019
+ - Forte: ${politicaDesign.porCapacidade.forte}
2020
+ Evidência: ${politicaDesign.evidencias.forte.join(", ")}.
2021
+ - Proibido: ${politicaDesign.proibicoes.join(", ")}.
2022
+ - Critérios mínimos: ${politicaDesign.criteriosMinimos.join(", ")}.
2023
+
1937
2024
  ## Fraca
1938
2025
 
1939
2026
  Use para Copilot em modo simples, Cline/Roo com pouco contexto, modelos locais pequenos e agentes que ignoram instrução longa.
@@ -1984,6 +2071,7 @@ ${agentContextPack.entrypointsClientes.map((cliente) => `- ${cliente.cliente}: $
1984
2071
  function renderizarInstrucaoClienteSema(cliente, capacidade, agentContextPack) {
1985
2072
  const guia = agentContextPack.guiaPorCapacidade[capacidade];
1986
2073
  const politicaTimeout = agentContextPack.politicaTimeoutResumo;
2074
+ const politicaDesign = agentContextPack.politicaDesignVisual;
1987
2075
  const tituloCliente = cliente === "generico" ? "agente" : cliente;
1988
2076
  return `# Sema para ${tituloCliente}
1989
2077
 
@@ -2013,6 +2101,12 @@ Código governado:
2013
2101
  - Ao encontrar esse marcador, volte ao contrato .sema aplicável e chame Sema antes de editar.
2014
2102
  - Comentário de código é lembrete curto; não substitui drift, docs-impacto nem finalizar-mudanca.
2015
2103
 
2104
+ Design visual:
2105
+ - Se houver UI, design moderno é requisito governado, não enfeite.
2106
+ - Capacidade ${capacidade}: ${politicaDesign.porCapacidade[capacidade]}
2107
+ - Evidências: ${politicaDesign.evidencias[capacidade].join(", ")}.
2108
+ - Proibido: ${politicaDesign.proibicoes.slice(0, 5).join(", ")}.
2109
+
2016
2110
  Idioma:
2017
2111
  - Responda no idioma do usuário.
2018
2112
  - Em PT-BR, use acentos, cedilha, pontuação e símbolos normais.
@@ -2396,6 +2490,15 @@ function renderizarResumoProjetoMarkdown(geradoEm, modulos, guiaPorCapacidade) {
2396
2490
  `- IA média: ${agentContextPack.politicaCodigoGovernado.porCapacidade.media}`,
2397
2491
  `- IA forte: ${agentContextPack.politicaCodigoGovernado.porCapacidade.forte}`,
2398
2492
  "",
2493
+ "## Design visual",
2494
+ "",
2495
+ `- Regra: ${agentContextPack.politicaDesignVisual.regra}`,
2496
+ `- Aplicar quando: ${agentContextPack.politicaDesignVisual.aplicarQuando}`,
2497
+ `- IA fraca: ${agentContextPack.politicaDesignVisual.porCapacidade.fraca}`,
2498
+ `- IA média: ${agentContextPack.politicaDesignVisual.porCapacidade.media}`,
2499
+ `- IA forte: ${agentContextPack.politicaDesignVisual.porCapacidade.forte}`,
2500
+ `- Proibido: ${agentContextPack.politicaDesignVisual.proibicoes.slice(0, 5).join(", ")}`,
2501
+ "",
2399
2502
  "## Timeout e retry",
2400
2503
  "",
2401
2504
  `- Regra: ${agentContextPack.politicaTimeoutResumo.regra}`,
@@ -2768,6 +2871,7 @@ async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escreverNaRaiz
2768
2871
  `ENTRADA_IA: ${entradaCanonica.porCapacidade.fraca.join(" -> ")}`,
2769
2872
  `TIMEOUT_SEMA: timeout local nao e falha; retry progressivo ${agentContextPack.politicaTimeoutResumo.escalonamentoSegundos.map((segundos) => `${segundos}s`).join(" -> ")}; escopar arquivo se projeto inteiro for lento`,
2770
2873
  `CODIGO_GOVERNADO: ${agentContextPack.politicaCodigoGovernado.marcador} -> chamar Sema antes de editar codigo gerado`,
2874
+ `DESIGN_VISUAL: se houver UI, moderno obrigatorio; fraca=padrao seguro responsivo; media=tokens+estados; forte=screenshot+assets+microinteracoes`,
2771
2875
  `TOP_MODULOS: ${resumirListaTexto(modulos.map((modulo) => modulo.modulo), 3)}`,
2772
2876
  `TOP_RISCOS: ${resumirListaTexto(unicosOrdenados(modulos.flatMap((modulo) => modulo.riscosPrincipais)), 3)}`,
2773
2877
  `TOP_LACUNAS: ${resumirListaTexto(unicosOrdenados(modulos.flatMap((modulo) => modulo.lacunas)), 3)}`,
@@ -2788,6 +2892,7 @@ async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escreverNaRaiz
2788
2892
  `ENTRADA_IA: ${entradaCanonica.porCapacidade.media.join(" -> ")}`,
2789
2893
  `TIMEOUT_SEMA: ${agentContextPack.politicaTimeoutResumo.regra} Escale ${agentContextPack.politicaTimeoutResumo.escalonamentoSegundos.map((segundos) => `${segundos}s`).join(" -> ")} antes de declarar bloqueio.`,
2790
2894
  `CODIGO_GOVERNADO: ${agentContextPack.politicaCodigoGovernado.marcador} -> docs-impacto e drift antes de alterar comportamento`,
2895
+ `DESIGN_VISUAL: ${agentContextPack.politicaDesignVisual.regra} Fraca=${agentContextPack.politicaDesignVisual.porCapacidade.fraca} Media=${agentContextPack.politicaDesignVisual.porCapacidade.media} Forte=${agentContextPack.politicaDesignVisual.porCapacidade.forte}`,
2791
2896
  `TOP_MODULOS: ${resumirListaTexto(modulos.map((modulo) => modulo.modulo), 6)}`,
2792
2897
  `TOP_RISCOS: ${resumirListaTexto(unicosOrdenados(modulos.flatMap((modulo) => modulo.riscosPrincipais)), 6)}`,
2793
2898
  `TOP_LACUNAS: ${resumirListaTexto(unicosOrdenados(modulos.flatMap((modulo) => modulo.lacunas)), 6)}`,