@semacode/cli 2.3.0 → 3.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 (267) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +112 -41
  3. package/dist/agentContextPack.js +14 -10
  4. package/dist/agentEntryPoints.d.ts +5 -0
  5. package/dist/agentEntryPoints.js +102 -91
  6. package/dist/angular-consumer-standalone.d.ts +3 -1
  7. package/dist/angular-consumer-standalone.js +12 -8
  8. package/dist/bin.d.ts +6 -0
  9. package/dist/bin.js +130 -0
  10. package/dist/cliArgs.js +4 -4
  11. package/dist/cliControlError.d.ts +12 -0
  12. package/dist/cliControlError.js +47 -0
  13. package/dist/cliGrammar.d.ts +11 -0
  14. package/dist/cliGrammar.js +551 -0
  15. package/dist/cliHelp.d.ts +13 -0
  16. package/dist/cliHelp.js +19 -0
  17. package/dist/cliHelpTexto.d.ts +3 -0
  18. package/dist/cliHelpTexto.js +168 -0
  19. package/dist/cliRuntime.d.ts +2 -0
  20. package/dist/cliRuntime.js +31 -0
  21. package/dist/comandos.js +9 -22
  22. package/dist/contexto.js +5 -5
  23. package/dist/dev/index.d.ts +1 -0
  24. package/dist/dev/index.js +51 -9
  25. package/dist/discovery/catalog.js +3 -3
  26. package/dist/distribuicao/filesystemGlobal.d.ts +63 -0
  27. package/dist/distribuicao/filesystemGlobal.js +701 -0
  28. package/dist/distribuicao/index.d.ts +7 -0
  29. package/dist/distribuicao/index.js +227 -0
  30. package/dist/distribuicao/launcherGlobal.d.ts +53 -0
  31. package/dist/distribuicao/launcherGlobal.js +643 -0
  32. package/dist/distribuicao/launcherWindows.d.ts +28 -0
  33. package/dist/distribuicao/launcherWindows.js +326 -0
  34. package/dist/distribuicao/lockContextGlobal.d.ts +10 -0
  35. package/dist/distribuicao/lockContextGlobal.js +17 -0
  36. package/dist/distribuicao/lockGlobal.d.ts +6 -0
  37. package/dist/distribuicao/lockGlobal.js +520 -0
  38. package/dist/distribuicao/skillGlobal.d.ts +48 -0
  39. package/dist/distribuicao/skillGlobal.js +652 -0
  40. package/dist/distribuicao/skillIntentPolicy.d.ts +21 -0
  41. package/dist/distribuicao/skillIntentPolicy.js +115 -0
  42. package/dist/distribuicao/tipos.d.ts +50 -0
  43. package/dist/distribuicao/tipos.js +10 -0
  44. package/dist/distribuicao/versaoSemantica.d.ts +3 -0
  45. package/dist/distribuicao/versaoSemantica.js +62 -0
  46. package/dist/drift.part01.d.ts +34 -2
  47. package/dist/drift.part01.js +3 -0
  48. package/dist/drift.part04.d.ts +12 -2
  49. package/dist/drift.part04.js +89 -15
  50. package/dist/drift.part05.d.ts +2 -1
  51. package/dist/drift.part05.js +9 -6
  52. package/dist/drift.part06.d.ts +2 -1
  53. package/dist/drift.part06.js +115 -24
  54. package/dist/drift.part07.d.ts +11 -10
  55. package/dist/drift.part07.js +261 -255
  56. package/dist/drift.part08.d.ts +2 -1
  57. package/dist/drift.part08.js +35 -25
  58. package/dist/drift.part11.js +279 -32
  59. package/dist/drift.part12.d.ts +1 -1
  60. package/dist/drift.part12.js +196 -11
  61. package/dist/drift.part13.d.ts +18 -2
  62. package/dist/drift.part13.js +654 -76
  63. package/dist/drift.part14.js +21 -7
  64. package/dist/driftCacheCas.d.ts +43 -0
  65. package/dist/driftCacheCas.js +351 -0
  66. package/dist/driftCacheFilesystem.d.ts +64 -0
  67. package/dist/driftCacheFilesystem.js +313 -0
  68. package/dist/driftCacheModes.d.ts +38 -0
  69. package/dist/driftCacheModes.js +147 -0
  70. package/dist/driftCacheStore.d.ts +80 -0
  71. package/dist/driftCacheStore.js +603 -0
  72. package/dist/driftCatalogo.d.ts +65 -0
  73. package/dist/driftCatalogo.js +516 -0
  74. package/dist/driftEscopo.d.ts +21 -0
  75. package/dist/driftEscopo.js +647 -0
  76. package/dist/driftEscopoReferencias.d.ts +8 -0
  77. package/dist/driftEscopoReferencias.js +612 -0
  78. package/dist/driftOrcamento.d.ts +6 -0
  79. package/dist/driftOrcamento.js +20 -3
  80. package/dist/geracaoCore.js +4 -6
  81. package/dist/iaPrompts.d.ts +3 -3
  82. package/dist/iaPrompts.js +13 -14
  83. package/dist/index.d.ts +4 -1
  84. package/dist/index.js +6 -25
  85. package/dist/index.part01.d.ts +21 -14
  86. package/dist/index.part01.js +20 -165
  87. package/dist/index.part02.js +57 -43
  88. package/dist/index.part03.d.ts +23 -1
  89. package/dist/index.part03.js +83 -8
  90. package/dist/index.part04.d.ts +10 -2
  91. package/dist/index.part04.js +48 -14
  92. package/dist/index.part05.d.ts +1 -1
  93. package/dist/index.part05.js +109 -30
  94. package/dist/index.part06.js +34 -16
  95. package/dist/index.part07.js +31 -27
  96. package/dist/index.part08.d.ts +1 -1
  97. package/dist/index.part08.js +23 -28
  98. package/dist/init/templates.part01.js +393 -393
  99. package/dist/init/templates.part02.js +189 -189
  100. package/dist/initCommand.js +5 -1
  101. package/dist/initTemplatesBackend.js +73 -73
  102. package/dist/initTemplatesBase.js +7 -5
  103. package/dist/initTemplatesFlutter.js +137 -137
  104. package/dist/initTemplatesRuntime.js +350 -350
  105. package/dist/initTemplatesWeb.js +309 -309
  106. package/dist/pipelineConteudo/command.d.ts +1 -0
  107. package/dist/pipelineConteudo/command.js +4 -32
  108. package/dist/pipelineConteudo/help.d.ts +2 -0
  109. package/dist/pipelineConteudo/help.js +33 -0
  110. package/dist/profileAuthorCommand.js +3 -7
  111. package/dist/profileCommand.js +3 -7
  112. package/dist/projeto.d.ts +1 -1
  113. package/dist/projetoCarregar.d.ts +2 -2
  114. package/dist/projetoCarregar.js +69 -28
  115. package/dist/projetoCatalogo.d.ts +8 -0
  116. package/dist/projetoCatalogo.js +164 -0
  117. package/dist/projetoOrigens.d.ts +2 -0
  118. package/dist/projetoOrigens.js +65 -9
  119. package/dist/projetoTipos.d.ts +15 -5
  120. package/dist/resultadoCli.d.ts +20 -0
  121. package/dist/resultadoCli.js +57 -0
  122. package/dist/saidaCli.d.ts +35 -0
  123. package/dist/saidaCli.js +118 -0
  124. package/dist/sistemasInterativos/acceptanceEvidence.d.ts +22 -0
  125. package/dist/sistemasInterativos/acceptanceEvidence.js +345 -0
  126. package/dist/sistemasInterativos/engineObservation.d.ts +12 -0
  127. package/dist/sistemasInterativos/engineObservation.js +438 -0
  128. package/dist/sistemasInterativos/jobOrchestration.d.ts +2 -0
  129. package/dist/sistemasInterativos/jobOrchestration.js +204 -0
  130. package/dist/sistemasInterativos/operationPrimitives.d.ts +21 -0
  131. package/dist/sistemasInterativos/operationPrimitives.js +194 -0
  132. package/dist/sistemasInterativos/operations.d.ts +4 -39
  133. package/dist/sistemasInterativos/operations.js +5 -1164
  134. package/dist/skillCommand.d.ts +5 -0
  135. package/dist/skillCommand.js +88 -0
  136. package/dist/sync/index.js +35 -35
  137. package/docs/README.md +11 -7
  138. package/docs/ai-integration.md +18 -11
  139. package/docs/ai-onboarding.md +81 -62
  140. package/docs/ai-workflow.md +10 -4
  141. package/docs/auth.md +26 -26
  142. package/docs/cli.md +197 -79
  143. package/docs/commands.md +30 -6
  144. package/docs/database.md +15 -15
  145. package/docs/deploy.md +54 -41
  146. package/docs/documentation.md +11 -10
  147. package/docs/drift-cache.md +108 -0
  148. package/docs/env.md +16 -16
  149. package/docs/frontend.md +41 -41
  150. package/docs/getting-started.md +82 -57
  151. package/docs/i18n.md +15 -15
  152. package/docs/repositories.md +60 -43
  153. package/docs/rollback.md +38 -31
  154. package/docs/security.md +54 -32
  155. package/docs/sistemas-interativos.md +27 -27
  156. package/docs/support.md +8 -8
  157. package/docs/testing.md +123 -17
  158. package/docs/vocabulary.md +29 -29
  159. package/exemplos/agendamento.sema +1 -1
  160. package/exemplos/assinatura.sema +1 -1
  161. package/exemplos/auditoria.sema +1 -1
  162. package/exemplos/autenticacao.sema +1 -1
  163. package/exemplos/author_obra_comum.sema +1 -1
  164. package/exemplos/author_tema_sensivel.sema +1 -1
  165. package/exemplos/automacao.sema +1 -1
  166. package/exemplos/cadastro_usuario.sema +1 -1
  167. package/exemplos/calculadora.sema +1 -1
  168. package/exemplos/crud_simples.sema +1 -1
  169. package/exemplos/estoque.sema +1 -1
  170. package/exemplos/exportacao.sema +1 -1
  171. package/exemplos/fila.sema +1 -1
  172. package/exemplos/integracao_externa.sema +1 -1
  173. package/exemplos/multi_tenant.sema +1 -1
  174. package/exemplos/notificacao.sema +1 -1
  175. package/exemplos/operacao_estrategia.sema +132 -132
  176. package/exemplos/operacao_estrategia_discovery.sema +220 -220
  177. package/exemplos/operacao_estrategia_fluxo.sema +114 -114
  178. package/exemplos/operacao_estrategia_gates.sema +106 -106
  179. package/exemplos/operacao_estrategia_quarentena.sema +133 -133
  180. package/exemplos/operacao_estrategia_rollout.sema +124 -124
  181. package/exemplos/pagamento.sema +1 -1
  182. package/exemplos/pagamento_dominio.sema +1 -1
  183. package/exemplos/pedido.sema +1 -1
  184. package/exemplos/permissao.sema +1 -1
  185. package/exemplos/persistencia_vendor_first.sema +1 -1
  186. package/exemplos/profile_conversas.sema +165 -165
  187. package/exemplos/profile_game.sema +1 -1
  188. package/exemplos/profile_legal.sema +1 -1
  189. package/exemplos/profile_ops.sema +1 -1
  190. package/exemplos/profile_research.sema +1 -1
  191. package/exemplos/profile_software.sema +1 -1
  192. package/exemplos/profile_workflow_n8n.sema +1 -1
  193. package/exemplos/relatorio.sema +1 -1
  194. package/exemplos/replica_analitica_erp.sema +1 -1
  195. package/exemplos/testes_embutidos.sema +1 -1
  196. package/exemplos/tratamento_erro.sema +1 -1
  197. package/exemplos/upload_arquivo.sema +1 -1
  198. package/exemplos/webhook.sema +1 -1
  199. package/node_modules/@sema/gerador-cpp/dist/index.js +176 -176
  200. package/node_modules/@sema/gerador-css/dist/index.part01.js +10 -10
  201. package/node_modules/@sema/gerador-css/dist/index.part02.js +460 -460
  202. package/node_modules/@sema/gerador-dotnet/dist/index.js +169 -169
  203. package/node_modules/@sema/gerador-html/dist/index.js +17 -17
  204. package/node_modules/@sema/gerador-python/dist/index.part02.js +3 -3
  205. package/node_modules/@sema/gerador-typescript/dist/index.part02.js +11 -11
  206. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js +42 -42
  207. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +1 -0
  208. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +1 -0
  209. package/package.json +7 -2
  210. package/scripts/postinstall.mjs +148 -0
  211. package/skills/sema/SKILL.md +199 -0
  212. package/skills/sema/agents/openai.yaml +4 -0
  213. package/node_modules/@sema/gerador-cpp/dist/index.js.map +0 -1
  214. package/node_modules/@sema/gerador-css/dist/index.js.map +0 -1
  215. package/node_modules/@sema/gerador-css/dist/index.part01.js.map +0 -1
  216. package/node_modules/@sema/gerador-css/dist/index.part02.js.map +0 -1
  217. package/node_modules/@sema/gerador-dart/dist/index.js.map +0 -1
  218. package/node_modules/@sema/gerador-dotnet/dist/index.js.map +0 -1
  219. package/node_modules/@sema/gerador-html/dist/index.js.map +0 -1
  220. package/node_modules/@sema/gerador-javascript/dist/index.js.map +0 -1
  221. package/node_modules/@sema/gerador-lua/dist/index.js.map +0 -1
  222. package/node_modules/@sema/gerador-php/dist/index.js.map +0 -1
  223. package/node_modules/@sema/gerador-python/dist/index.js.map +0 -1
  224. package/node_modules/@sema/gerador-python/dist/index.part01.js.map +0 -1
  225. package/node_modules/@sema/gerador-python/dist/index.part02.js.map +0 -1
  226. package/node_modules/@sema/gerador-typescript/dist/index.js.map +0 -1
  227. package/node_modules/@sema/gerador-typescript/dist/index.part01.js.map +0 -1
  228. package/node_modules/@sema/gerador-typescript/dist/index.part02.js.map +0 -1
  229. package/node_modules/@sema/gerador-typescript/dist/index.part03.js.map +0 -1
  230. package/node_modules/@sema/nucleo/dist/ast/tipos.js.map +0 -1
  231. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js.map +0 -1
  232. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js.map +0 -1
  233. package/node_modules/@sema/nucleo/dist/diagnosticos/snippets.js.map +0 -1
  234. package/node_modules/@sema/nucleo/dist/formatador/index.js.map +0 -1
  235. package/node_modules/@sema/nucleo/dist/formatador/index.part01.js.map +0 -1
  236. package/node_modules/@sema/nucleo/dist/formatador/index.part02.js.map +0 -1
  237. package/node_modules/@sema/nucleo/dist/index.js.map +0 -1
  238. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +0 -1
  239. package/node_modules/@sema/nucleo/dist/ir/conversor.part01.js.map +0 -1
  240. package/node_modules/@sema/nucleo/dist/ir/conversor.part02.js.map +0 -1
  241. package/node_modules/@sema/nucleo/dist/ir/conversor.part03.js.map +0 -1
  242. package/node_modules/@sema/nucleo/dist/ir/modelos.js.map +0 -1
  243. package/node_modules/@sema/nucleo/dist/lexer/lexer.js.map +0 -1
  244. package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +0 -1
  245. package/node_modules/@sema/nucleo/dist/parser/parser.declaracoes.js.map +0 -1
  246. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +0 -1
  247. package/node_modules/@sema/nucleo/dist/parser/parser.modulo.js.map +0 -1
  248. package/node_modules/@sema/nucleo/dist/parser/parser.part01.js.map +0 -1
  249. package/node_modules/@sema/nucleo/dist/parser/parser.part02.js.map +0 -1
  250. package/node_modules/@sema/nucleo/dist/parser/parser.part03.js.map +0 -1
  251. package/node_modules/@sema/nucleo/dist/persistencia/contratos.js.map +0 -1
  252. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +0 -1
  253. package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.js.map +0 -1
  254. package/node_modules/@sema/nucleo/dist/semantico/analisador.part02.js.map +0 -1
  255. package/node_modules/@sema/nucleo/dist/semantico/analisador.part03.js.map +0 -1
  256. package/node_modules/@sema/nucleo/dist/semantico/analisador.part04.js.map +0 -1
  257. package/node_modules/@sema/nucleo/dist/semantico/analisador.part05.js.map +0 -1
  258. package/node_modules/@sema/nucleo/dist/semantico/analisador.part06.js.map +0 -1
  259. package/node_modules/@sema/nucleo/dist/semantico/analisador.part07.js.map +0 -1
  260. package/node_modules/@sema/nucleo/dist/semantico/analisador.part08.js.map +0 -1
  261. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +0 -1
  262. package/node_modules/@sema/nucleo/dist/semantico/estruturas.part01.js.map +0 -1
  263. package/node_modules/@sema/nucleo/dist/semantico/estruturas.part02.js.map +0 -1
  264. package/node_modules/@sema/nucleo/dist/semantico/orcamentoSemantico.js.map +0 -1
  265. package/node_modules/@sema/nucleo/dist/semantico/seguranca.js.map +0 -1
  266. package/node_modules/@sema/nucleo/dist/util/arquivos.js.map +0 -1
  267. package/node_modules/@sema/padroes/dist/index.js.map +0 -1
@@ -1,3 +1,6 @@
1
+ // SEMA-GOVERNED: sema.governanca_ia_contexto, sema.produto.governanca_ia.drift.cache.modos
2
+ // Descrição: executa drift sob modo explícito e mantém consultas honestas quando a análise é pulada.
3
+ import { stat } from "node:fs/promises";
1
4
  import path from "node:path";
2
5
  import { compilarCodigo, formatarDiagnosticos, lerArquivoTexto, temErros, } from "@sema/nucleo";
3
6
  import { carregarProjeto, resolverAlvosVerificacao, resolverEstruturaSaidaPadrao, resolverFrameworkPadrao, resolverSaidaPadrao, } from "./projeto.js";
@@ -7,10 +10,22 @@ import { escreverArquivos, formatarAvisoArtefatosGeradosAcimaDoLimite, } from '.
7
10
  import { carregarModulos } from './carregarModulos.js';
8
11
  import { obterOpcao } from './cliArgs.js';
9
12
  import { resumirDriftPorModulo } from "./index.part03.js";
10
- import { resolverOpcoesDriftCli } from "./index.part01.js";
11
- export async function comandoInspecionar(entrada, emJson, cwd = process.cwd()) {
12
- const contextoProjeto = await carregarProjeto(entrada, cwd);
13
- const resultadoDrift = await analisarDriftLegado(contextoProjeto);
13
+ import { resolverAnaliseDriftConsultaCli, resolverOpcoesDriftCli } from "./index.part01.js";
14
+ export async function comandoInspecionar(entrada, emJson, cwd = process.cwd(), args = []) {
15
+ const analiseDrift = resolverAnaliseDriftConsultaCli(args, "inspecionar");
16
+ const alvo = entrada ? path.resolve(cwd, entrada) : cwd;
17
+ const alvoEhArquivo = (await stat(alvo)).isFile();
18
+ const escopoEstreito = analiseDrift.opcoes.escopo === "arquivo"
19
+ || analiseDrift.opcoes.escopo === "modulo"
20
+ || (analiseDrift.opcoes.escopo === undefined
21
+ && alvoEhArquivo);
22
+ const contextoProjeto = await carregarProjeto(entrada, cwd, {
23
+ escopo: analiseDrift.opcoes.escopo,
24
+ adiarDescobertaCodigo: !analiseDrift.executar || escopoEstreito,
25
+ });
26
+ const resultadoDrift = analiseDrift.executar
27
+ ? await analisarDriftLegado(contextoProjeto, analiseDrift.opcoes)
28
+ : null;
14
29
  const framework = resolverFrameworkPadrao(undefined, contextoProjeto.configCarregada);
15
30
  const estruturaSaida = resolverEstruturaSaidaPadrao(undefined, framework, contextoProjeto.configCarregada);
16
31
  const alvos = resolverAlvosVerificacao(contextoProjeto.configCarregada);
@@ -29,12 +44,22 @@ export async function comandoInspecionar(entrada, emJson, cwd = process.cwd()) {
29
44
  diretoriosCodigo: contextoProjeto.diretoriosCodigo,
30
45
  fontesLegado: contextoProjeto.fontesLegado,
31
46
  modoAdocao: contextoProjeto.modoAdocao,
32
- scoreDrift: resultadoDrift.resumo_operacional.scoreMedio,
33
- confiancaGeral: resultadoDrift.resumo_operacional.confiancaGeral,
34
- consumerFramework: resultadoDrift.consumerFramework,
35
- appRoutes: resultadoDrift.appRoutes,
36
- consumerSurfaces: resultadoDrift.consumerSurfaces,
37
- consumerBridges: resultadoDrift.consumerBridges,
47
+ analiseDrift: {
48
+ modo: analiseDrift.modo,
49
+ executada: analiseDrift.executar,
50
+ sucesso: resultadoDrift?.sucesso ?? null,
51
+ aviso: analiseDrift.executar
52
+ ? null
53
+ : "Análise de drift não executada; implementação, vínculos e rotas não foram verificados.",
54
+ avisos: analiseDrift.avisos,
55
+ cache: resultadoDrift?.escopo_aplicado.cache ?? null,
56
+ },
57
+ scoreDrift: resultadoDrift?.resumo_operacional.scoreMedio ?? null,
58
+ confiancaGeral: resultadoDrift?.resumo_operacional.confiancaGeral ?? null,
59
+ consumerFramework: resultadoDrift?.consumerFramework ?? null,
60
+ appRoutes: resultadoDrift?.appRoutes ?? null,
61
+ consumerSurfaces: resultadoDrift?.consumerSurfaces ?? null,
62
+ consumerBridges: resultadoDrift?.consumerBridges ?? null,
38
63
  },
39
64
  projeto: {
40
65
  arquivos: contextoProjeto.arquivosProjeto,
@@ -44,25 +69,38 @@ export async function comandoInspecionar(entrada, emJson, cwd = process.cwd()) {
44
69
  sucesso: !temErros(item.resultado.diagnosticos),
45
70
  diagnosticos: item.resultado.diagnosticos.length,
46
71
  superficies: item.resultado.ir?.superficies.map((superficie) => `${superficie.tipo}:${superficie.nome}`) ?? [],
47
- implementacao: resumirDriftPorModulo(item.resultado.modulo?.nome ?? null, item.caminho, resultadoDrift),
72
+ implementacao: resultadoDrift
73
+ ? resumirDriftPorModulo(item.resultado.modulo?.nome ?? null, item.caminho, resultadoDrift)
74
+ : null,
48
75
  })),
49
76
  },
50
77
  };
78
+ const codigoSaida = resultadoDrift?.sucesso === false ? 1 : 0;
51
79
  if (emJson) {
52
80
  console.log(JSON.stringify(payload, null, 2));
53
- return 0;
81
+ return codigoSaida;
54
82
  }
55
- console.log("Inspecao de projeto Sema");
83
+ console.log("Inspeção de projeto Sema");
56
84
  console.log(`- Entrada: ${payload.entrada}`);
57
- console.log(`- Configuracao: ${payload.configuracao.caminho ?? "nenhuma"}`);
85
+ console.log(`- Configuração: ${payload.configuracao.caminho ?? "nenhuma"}`);
58
86
  console.log(`- Base do projeto: ${payload.configuracao.baseProjeto}`);
59
87
  console.log(`- Framework: ${payload.configuracao.framework}`);
60
88
  console.log(`- Estrutura de saida: ${payload.configuracao.estruturaSaida}`);
61
89
  console.log(`- Alvos: ${payload.configuracao.alvos.join(", ")}`);
62
- console.log(`- Modo de adocao: ${payload.configuracao.modoAdocao}`);
63
- console.log(`- Score medio de drift: ${payload.configuracao.scoreDrift}`);
64
- console.log(`- Confianca geral: ${payload.configuracao.confiancaGeral}`);
65
- console.log("- Saidas por alvo:");
90
+ console.log(`- Modo de adoção: ${payload.configuracao.modoAdocao}`);
91
+ console.log(`- Análise de drift: ${payload.configuracao.analiseDrift.modo} (${payload.configuracao.analiseDrift.executada ? "executada" : "não executada"})`);
92
+ if (payload.configuracao.analiseDrift.executada) {
93
+ console.log(`- Resultado do drift: ${payload.configuracao.analiseDrift.sucesso ? "sucesso" : "falha"}`);
94
+ console.log(`- Score médio de drift: ${payload.configuracao.scoreDrift}`);
95
+ console.log(`- Confiança geral: ${payload.configuracao.confiancaGeral}`);
96
+ }
97
+ else {
98
+ console.log("- Resultado do drift: não avaliado");
99
+ console.log("- Score médio de drift: não avaliado");
100
+ console.log("- Confiança geral: não avaliada");
101
+ console.log(`- Aviso: ${payload.configuracao.analiseDrift.aviso}`);
102
+ }
103
+ console.log("- Saídas por alvo:");
66
104
  for (const [alvo, saida] of Object.entries(payload.configuracao.saidas)) {
67
105
  console.log(` - ${alvo}: ${saida}`);
68
106
  }
@@ -70,30 +108,63 @@ export async function comandoInspecionar(entrada, emJson, cwd = process.cwd()) {
70
108
  for (const origem of payload.configuracao.origens) {
71
109
  console.log(` - ${origem}`);
72
110
  }
73
- console.log("- Diretorios de codigo:");
111
+ console.log("- Diretórios de código:");
74
112
  for (const diretorio of payload.configuracao.diretoriosCodigo) {
75
113
  console.log(` - ${diretorio}`);
76
114
  }
77
115
  console.log(`- Fontes de legado detectadas: ${payload.configuracao.fontesLegado.join(", ") || "nenhuma"}`);
78
- console.log("- Modulos selecionados:");
116
+ console.log("- Módulos selecionados:");
79
117
  for (const modulo of payload.projeto.modulos) {
80
118
  console.log(` - ${modulo.modulo ?? "(sem modulo)"} :: ${modulo.caminho} :: diagnosticos=${modulo.diagnosticos}`);
81
- console.log(` impls validos=${modulo.implementacao.implsValidos} quebrados=${modulo.implementacao.implsQuebrados} recursos divergentes=${modulo.implementacao.recursosDivergentesCount} sem_impl=${modulo.implementacao.tasksSemImplementacao}`);
82
- for (const arquivoRelacionado of modulo.implementacao.arquivosRelacionados.slice(0, 5)) {
83
- console.log(` arquivo relacionado: ${arquivoRelacionado}`);
119
+ if (modulo.implementacao) {
120
+ console.log(` impls válidos=${modulo.implementacao.implsValidos} quebrados=${modulo.implementacao.implsQuebrados} recursos divergentes=${modulo.implementacao.recursosDivergentesCount} sem_impl=${modulo.implementacao.tasksSemImplementacao}`);
121
+ for (const arquivoRelacionado of modulo.implementacao.arquivosRelacionados.slice(0, 5)) {
122
+ console.log(` arquivo relacionado: ${arquivoRelacionado}`);
123
+ }
124
+ }
125
+ else {
126
+ console.log(" implementação: não verificada neste modo");
84
127
  }
85
128
  }
86
- return 0;
129
+ return codigoSaida;
87
130
  }
88
131
  export async function comandoDrift(entrada, args, emJson, cwd = process.cwd()) {
89
- const contextoProjeto = await carregarProjeto(entrada, cwd);
90
- const resultado = await analisarDriftLegado(contextoProjeto, resolverOpcoesDriftCli(args));
132
+ const opcoes = resolverOpcoesDriftCli(args);
133
+ const contextoProjeto = await carregarProjeto(entrada, cwd, {
134
+ escopo: opcoes.escopo,
135
+ adiarDescobertaCodigo: opcoes.escopo !== "projeto",
136
+ });
137
+ const resultado = await analisarDriftLegado(contextoProjeto, opcoes);
91
138
  if (emJson) {
92
139
  console.log(JSON.stringify(resultado, null, 2));
93
140
  return resultado.sucesso ? 0 : 1;
94
141
  }
95
142
  console.log("Drift entre Sema e codigo legado");
96
143
  console.log(`- Escopo aplicado: ${resultado.escopo_aplicado.escopo}`);
144
+ console.log(`- Estratégia física: ${resultado.escopo_aplicado.estrategia ?? "não informada"}`);
145
+ console.log(`- Cobertura: ${resultado.escopo_aplicado.cobertura ?? "não informada"}`);
146
+ console.log(`- Arquivos planejados: ${resultado.escopo_aplicado.arquivosPlanejados?.length ?? 0}`);
147
+ console.log(`- Arquivos declarados: ${resultado.escopo_aplicado.arquivosDeclarados?.length ?? 0}`);
148
+ console.log(`- Arquivos inferidos: ${resultado.escopo_aplicado.arquivosInferidos?.length ?? 0}`);
149
+ console.log(`- Arquivos ausentes: ${resultado.escopo_aplicado.arquivosAusentes?.length ?? 0}`);
150
+ console.log(`- Bloqueios do plano: ${resultado.escopo_aplicado.bloqueios?.length ?? 0}`);
151
+ for (const bloqueio of resultado.escopo_aplicado.bloqueios ?? []) {
152
+ console.log(` - ${bloqueio}`);
153
+ }
154
+ const metricasCatalogo = resultado.escopo_aplicado.catalogo;
155
+ if (metricasCatalogo) {
156
+ const origemCatalogo = metricasCatalogo.origem === "plano_explicito"
157
+ ? "plano explícito"
158
+ : "caminhada";
159
+ console.log(`- Catálogo: ${metricasCatalogo.arquivosCatalogados} arquivos, ${metricasCatalogo.diretoriosVisitados} diretórios visitados, ${metricasCatalogo.leiturasConteudo} leituras, ${metricasCatalogo.bytesLidos} bytes, ${metricasCatalogo.acertosMemoriaConteudo} reaproveitamentos em memória, origem ${origemCatalogo}`);
160
+ }
161
+ const estadoCache = resultado.escopo_aplicado.cache;
162
+ if (estadoCache) {
163
+ console.log(`- Cache: modo=${estadoCache.modo} origem=${estadoCache.origem} hits=${estadoCache.metricas.hits} misses=${estadoCache.metricas.misses} corrompidos=${estadoCache.metricas.corruptos} gravações=${estadoCache.metricas.gravacoes}`);
164
+ for (const aviso of estadoCache.avisos) {
165
+ console.log(` - Aviso: ${aviso.mensagem}`);
166
+ }
167
+ }
97
168
  console.log(`- Ignorar worktrees: ${resultado.escopo_aplicado.ignorarWorktrees ? "sim" : "nao"}`);
98
169
  console.log(`- Ignorar consumidores laterais: ${resultado.escopo_aplicado.ignorarConsumidoresLaterais ? "sim" : "nao"}`);
99
170
  console.log(`- Modulos analisados: ${resultado.modulos.length}`);
@@ -181,8 +252,12 @@ export async function comandoImpacto(entrada, args, emJson, cwd = process.cwd())
181
252
  console.error("Uso: sema impacto <arquivo-ou-pasta> --alvo <token-semântico> [--mudanca <descricao>] [--escopo <arquivo|modulo|projeto>] [--incluir-worktrees] [--incluir-consumidores-laterais] [--json]");
182
253
  return 1;
183
254
  }
184
- const contextoProjeto = await carregarProjeto(entrada, cwd);
185
- const resultado = await gerarMapaImpactoSemantico(contextoProjeto, alvoSemantico, obterOpcao(args, "--mudanca", `avaliar impacto de ${alvoSemantico}`), resolverOpcoesDriftCli(args));
255
+ const opcoes = resolverOpcoesDriftCli(args);
256
+ const contextoProjeto = await carregarProjeto(entrada, cwd, {
257
+ escopo: opcoes.escopo,
258
+ adiarDescobertaCodigo: opcoes.escopo !== "projeto",
259
+ });
260
+ const resultado = await gerarMapaImpactoSemantico(contextoProjeto, alvoSemantico, obterOpcao(args, "--mudanca", `avaliar impacto de ${alvoSemantico}`), opcoes);
186
261
  if (emJson) {
187
262
  console.log(JSON.stringify(resultado, null, 2));
188
263
  return resultado.sucesso ? 0 : 1;
@@ -215,8 +290,12 @@ export async function comandoRenomearSemantico(entrada, args, emJson, cwd = proc
215
290
  console.error("Uso: sema renomear-semantico <arquivo-ou-pasta> --de <nome-atual> --para <nome-novo> [--escopo <arquivo|modulo|projeto>] [--incluir-worktrees] [--incluir-consumidores-laterais] [--json]");
216
291
  return 1;
217
292
  }
218
- const contextoProjeto = await carregarProjeto(entrada, cwd);
219
- const resultado = await assistirRenomeacaoSemantica(contextoProjeto, nomeAtual, nomeNovo, resolverOpcoesDriftCli(args));
293
+ const opcoes = resolverOpcoesDriftCli(args);
294
+ const contextoProjeto = await carregarProjeto(entrada, cwd, {
295
+ escopo: opcoes.escopo,
296
+ adiarDescobertaCodigo: opcoes.escopo !== "projeto",
297
+ });
298
+ const resultado = await assistirRenomeacaoSemantica(contextoProjeto, nomeAtual, nomeNovo, opcoes);
220
299
  if (emJson) {
221
300
  console.log(JSON.stringify(resultado, null, 2));
222
301
  return resultado.sucesso ? 0 : 1;
@@ -1,5 +1,5 @@
1
- // SEMA-GOVERNED: sema.governanca_ia_contexto
2
- // Descricao: CLI particionada; consulte contratos/sema/governanca_ia_contexto.sema antes de editar.
1
+ // SEMA-GOVERNED: sema.governanca_ia_contexto, sema.produto.governanca_ia.drift.cache.modos
2
+ // Descrição: resume contrato ou projeto com política explícita de análise de drift.
3
3
  import { mkdir, readFile, stat, writeFile } from "node:fs/promises";
4
4
  import path from "node:path";
5
5
  import { compilarCodigo, formatarCodigo, formatarDiagnosticos, lerArquivoTexto, temErros, } from "@sema/nucleo";
@@ -13,7 +13,7 @@ import { carregarModulos } from './carregarModulos.js';
13
13
  import { obterOpcao, possuiFlag } from './cliArgs.js';
14
14
  import { EXEMPLOS_PROMPT_IA, PROMPT_BASE_IA, PROMPT_IA_REACT, PROMPT_IA_SEMA_PRIMEIRO, PROMPT_IA_UI, STARTER_IA } from './iaPrompts.js';
15
15
  import { aplicarEstruturaSaida, gerarArquivosPorAlvo, garantirIr, validarCompatibilidadeFramework, } from './geracaoCore.js';
16
- import { descobrirDocsIa, normalizarModoResumo, normalizarTamanhoResumo, renderizarCabecalhoDocsIa, renderizarCaixaAscii, renderizarSecaoAscii } from "./index.part01.js";
16
+ import { descobrirDocsIa, normalizarModoResumo, normalizarTamanhoResumo, renderizarCabecalhoDocsIa, renderizarCaixaAscii, renderizarSecaoAscii, resolverAnaliseDriftConsultaCli } from "./index.part01.js";
17
17
  import { gerarResumoProjetoIa } from "./index.part04.js";
18
18
  import { carregarContextoModuloIa, gerarArquivosResumoModuloIa } from "./index.part03.js";
19
19
  import { coletarResumoSemanticoModulo, renderizarResumoModuloMarkdown, renderizarResumoModuloTexto } from "./index.part02.js";
@@ -121,7 +121,11 @@ export async function comandoStarterIa() {
121
121
  return 0;
122
122
  }
123
123
  export async function comandoSyncCodex(emJson) {
124
- const resumoProjeto = await gerarResumoProjetoIa(process.cwd(), undefined, true);
124
+ const resumoProjeto = await gerarResumoProjetoIa(process.cwd(), undefined, true, {
125
+ modo: "fresh",
126
+ executar: true,
127
+ avisos: [],
128
+ });
125
129
  const exemplos = await materializarExemplosOficiais(resumoProjeto.baseProjeto, true);
126
130
  if (!exemplos.sucesso) {
127
131
  if (emJson) {
@@ -196,8 +200,8 @@ export async function comandoAjudaIa() {
196
200
  ]));
197
201
  console.log("");
198
202
  console.log(renderizarSecaoAscii("Capacidade de IA", [
199
- "fraca: `sema resumo <arquivo> --micro --json` usa stdout compacto",
200
- "média: `sema resumo <arquivo> --curto --json` + `sema drift <arquivo> --json`",
203
+ "fraca: `sema resumo <arquivo> --micro --drift none --json` usa stdout compacto sem inventar evidência de implementação",
204
+ "média: `sema resumo <arquivo> --curto --drift none --json` + `sema drift <arquivo> --cache fresh --json`",
201
205
  "forte: `sema contexto-ia <arquivo.sema> --saida <diretorio> --json` materializa o pacote completo",
202
206
  ]));
203
207
  console.log("");
@@ -208,13 +212,13 @@ export async function comandoAjudaIa() {
208
212
  "Use `sema interativo pipelines --json` para jogos, simulações e híbridos 3D, 2D, retro, texto, XR ou headless.",
209
213
  "Use `sema sync-codex` para regenerar o contexto governado do Codex na raiz.",
210
214
  "Use `sema instalar-exemplos` para materializar `exemplos/` oficiais sem sobrescrever arquivos locais.",
211
- "Use `sema resumo <arquivo> --micro --para onboarding --json` para IA fraca; o resumo vem no stdout.",
215
+ "Use `sema resumo <arquivo> --micro --para onboarding --drift none --json` para IA fraca; o resumo contratual vem no stdout e campos derivados ficam não avaliados.",
212
216
  "Se `sema resumo` ou outro gate estourar timeout local, aumente o timeout e tente de novo; timeout do agente nao e falha do Sema.",
213
217
  "Use `sema prompt-curto <arquivo> --curto --para mudanca` para colar contexto em modelo gratuito.",
214
218
  "Use `sema prompt-ia`, `sema prompt-ia-ui`, `sema prompt-ia-react` e `sema prompt-ia-sema-primeiro` conforme a tarefa.",
215
219
  "Use `sema exemplos-prompt-ia` para pegar modelos prontos de prompt.",
216
- "Use `sema inspecionar` para descobrir base, codigo vivo e fontes legado.",
217
- "Use `sema drift` para medir impls, vinculos, rotas, score e lacunas.",
220
+ "Use `sema inspecionar --drift none` para descobrir a superfície contratual sem executar drift implicitamente.",
221
+ "Use `sema drift --cache fresh` para medir impls, vínculos, rotas, score e lacunas no fechamento; cache é aceleração, não prova final.",
218
222
  "Use `sema docs-impacto --intencao <acao>` para ler ou criar docs obrigatorias antes de agir.",
219
223
  "Use `sema finalizar-mudanca --intencao <acao>` para bloquear conclusao sem leitura documental comprovada.",
220
224
  "Use `sema contexto-ia <arquivo.sema> --saida <diretorio> --json` para gerar AST, IR, drift, `briefing.json` e `briefing.min.json`.",
@@ -286,8 +290,10 @@ export async function comandoResumo(entrada, args, emJson) {
286
290
  const pastaSaida = obterOpcao(args, "--saida");
287
291
  const escreverNaRaiz = possuiFlag(args, "--raiz");
288
292
  const alvo = entrada ? path.resolve(process.cwd(), entrada) : process.cwd();
289
- if (entrada && entrada.toLowerCase().endsWith(".sema")) {
290
- const contexto = await carregarContextoModuloIa(alvo);
293
+ const analiseDrift = resolverAnaliseDriftConsultaCli(args, "resumo");
294
+ const alvoEhArquivo = (await stat(alvo)).isFile();
295
+ if (alvoEhArquivo) {
296
+ const contexto = await carregarContextoModuloIa(alvo, analiseDrift);
291
297
  const resumoSemantico = coletarResumoSemanticoModulo(contexto);
292
298
  const guiaPorCapacidade = criarGuiaCapacidadeIa();
293
299
  const texto = tamanho === "medio"
@@ -311,20 +317,28 @@ export async function comandoResumo(entrada, args, emJson) {
311
317
  modulo: contexto.modulo,
312
318
  pastaSaida: pastaResumo ?? null,
313
319
  artefatosCompactos,
320
+ analiseDrift: {
321
+ modo: contexto.drift.modo,
322
+ executada: contexto.drift.executada,
323
+ sucesso: contexto.drift.sucesso,
324
+ aviso: contexto.drift.aviso,
325
+ avisos: analiseDrift.avisos,
326
+ cache: contexto.drift.drift?.escopo_aplicado.cache ?? null,
327
+ },
314
328
  guiaPorCapacidade,
315
329
  resumo: resumoSemantico,
316
330
  texto,
317
331
  }, null, 2));
318
- return 0;
332
+ return contexto.drift.sucesso === false ? 1 : 0;
319
333
  }
320
334
  if (pastaResumo) {
321
335
  console.log(`Resumo IA-first gerado em ${pastaResumo}`);
322
336
  console.log("");
323
337
  }
324
338
  console.log(texto);
325
- return 0;
339
+ return contexto.drift.sucesso === false ? 1 : 0;
326
340
  }
327
- const resumoProjeto = await gerarResumoProjetoIa(alvo, pastaSaida, escreverNaRaiz);
341
+ const resumoProjeto = await gerarResumoProjetoIa(alvo, pastaSaida, escreverNaRaiz, analiseDrift);
328
342
  const arquivoResumo = tamanho === "micro"
329
343
  ? "SEMA_BRIEF.micro.txt"
330
344
  : tamanho === "curto"
@@ -340,15 +354,19 @@ export async function comandoResumo(entrada, args, emJson) {
340
354
  baseProjeto: resumoProjeto.baseProjeto,
341
355
  pastaSaida: resumoProjeto.pastaSaida,
342
356
  artefatos: resumoProjeto.artefatos,
357
+ analiseDrift: {
358
+ ...resumoProjeto.analiseDrift,
359
+ avisos: analiseDrift.avisos,
360
+ },
343
361
  guiaPorCapacidade: resumoProjeto.guiaPorCapacidade,
344
362
  modulos: resumoProjeto.modulos,
345
363
  texto,
346
364
  }, null, 2));
347
- return 0;
365
+ return resumoProjeto.analiseDrift.sucesso === false ? 1 : 0;
348
366
  }
349
367
  console.log(`Resumo IA-first do projeto gerado em ${resumoProjeto.pastaSaida}`);
350
368
  console.log("");
351
369
  console.log(texto);
352
- return 0;
370
+ return resumoProjeto.analiseDrift.sucesso === false ? 1 : 0;
353
371
  }
354
372
  //# sourceMappingURL=index.part06.js.map
@@ -1,5 +1,5 @@
1
- // SEMA-GOVERNED: sema.governanca_ia_contexto
2
- // Descricao: CLI particionada; consulte contratos/sema/governanca_ia_contexto.sema antes de editar.
1
+ // SEMA-GOVERNED: sema.governanca_ia_contexto, sema.produto.governanca_ia.drift.cache.modos
2
+ // Descrição: preserva modos explícitos nas superfícies auxiliares de contexto.
3
3
  import { readFile } from "node:fs/promises";
4
4
  import path from "node:path";
5
5
  import { compilarCodigo, formatarDiagnosticos, lerArquivoTexto, temErros, } from "@sema/nucleo";
@@ -17,7 +17,11 @@ export async function comandoPromptCurto(entrada, args, emJson) {
17
17
  const modo = normalizarModoResumo(obterOpcao(args, "--para"));
18
18
  const alvo = entrada ? path.resolve(process.cwd(), entrada) : process.cwd();
19
19
  if (entrada && entrada.toLowerCase().endsWith(".sema")) {
20
- const contexto = await carregarContextoModuloIa(alvo);
20
+ const contexto = await carregarContextoModuloIa(alvo, {
21
+ modo: "none",
22
+ executar: false,
23
+ avisos: [],
24
+ });
21
25
  const resumoSemantico = coletarResumoSemanticoModulo(contexto);
22
26
  const capacidade = tamanho === "micro" ? "fraca" : tamanho === "curto" ? "media" : "forte";
23
27
  const prompt = criarPromptCurtoModulo(resumoSemantico, modo, tamanho, capacidade);
@@ -45,30 +49,30 @@ export async function comandoPromptCurto(entrada, args, emJson) {
45
49
  : "SEMA_BRIEF.md";
46
50
  const contextoProjeto = await readFile(path.join(resumoProjeto.pastaSaida, arquivoResumo), "utf8");
47
51
  const capacidade = tamanho === "micro" ? "fraca" : tamanho === "curto" ? "media" : "forte";
48
- const prompt = `⚠️ REGRA OBRIGATÓRIA DE GOVERNANÇA:
49
-
50
- ANTES DE QUALQUER AÇÃO (editar, criar, deletar, executar, consultar ou modificar):
51
- 1. Rode \`sema docs-impacto --intencao "<ação>" --json\` com sua intenção declarada.
52
- 2. Aguarde a resposta com as docs obrigatórias.
53
- 3. Leia as docs antes de agir.
54
- 4. Antes de concluir, rode \`sema finalizar-mudanca --intencao "<ação>" --doc-lida <arquivo> --json\` com todas as docs lidas.
55
-
56
- Você está operando Sema em modo IA-first.
57
-
58
- Isto é contexto comprimido para IA operar contrato semântico antes de tocar código vivo.
59
-
60
- Capacidade alvo: ${capacidade}
61
- Modo da tarefa: ${modo}
62
-
63
- Regras:
64
- - ANTES DE TUDO: rode \`sema docs-impacto --intencao "<ação>" --json\`.
65
- - Comece pelo resumo compacto abaixo.
66
- - Se a tarefa pedir mais contexto, abra \`AGENT_CONTEXT_PACK.json\` e depois \`SEMA_INDEX.json\`.
67
- - Não tente ler o repositório inteiro se o resumo já disser onde tocar.
68
- - Preserve contrato, risco, lacuna e checks sugeridos.
69
-
70
- Contexto do projeto:
71
- ${contextoProjeto.trim()}
52
+ const prompt = `⚠️ REGRA OBRIGATÓRIA DE GOVERNANÇA:
53
+
54
+ ANTES DE QUALQUER AÇÃO (editar, criar, deletar, executar, consultar ou modificar):
55
+ 1. Rode \`sema docs-impacto --intencao "<ação>" --json\` com sua intenção declarada.
56
+ 2. Aguarde a resposta com as docs obrigatórias.
57
+ 3. Leia as docs antes de agir.
58
+ 4. Antes de concluir, rode \`sema finalizar-mudanca --intencao "<ação>" --doc-lida <arquivo> --json\` com todas as docs lidas.
59
+
60
+ Você está operando Sema em modo IA-first.
61
+
62
+ Isto é contexto comprimido para IA operar contrato semântico antes de tocar código vivo.
63
+
64
+ Capacidade alvo: ${capacidade}
65
+ Modo da tarefa: ${modo}
66
+
67
+ Regras:
68
+ - ANTES DE TUDO: rode \`sema docs-impacto --intencao "<ação>" --json\`.
69
+ - Comece pelo resumo compacto abaixo.
70
+ - Se a tarefa pedir mais contexto, abra \`AGENT_CONTEXT_PACK.json\` e depois \`SEMA_INDEX.json\`.
71
+ - Não tente ler o repositório inteiro se o resumo já disser onde tocar.
72
+ - Preserve contrato, risco, lacuna e checks sugeridos.
73
+
74
+ Contexto do projeto:
75
+ ${contextoProjeto.trim()}
72
76
  `;
73
77
  if (emJson) {
74
78
  console.log(JSON.stringify({
@@ -1 +1 @@
1
- export declare function principal(): Promise<void>;
1
+ export declare function principal(): Promise<number>;
@@ -1,5 +1,5 @@
1
- // SEMA-GOVERNED: sema.governanca_ia_contexto
2
- // Descricao: CLI particionada; consulte contratos/sema/governanca_ia_contexto.sema antes de editar.
1
+ // SEMA-GOVERNED: sema.governanca_ia_contexto, sema.produto.governanca_ia.drift.cache.modos, sema.produto.cli_invocacao_publica, sema.produto.cli_invocacao_publica.argumentos
2
+ // Descrição: encaminha argumentos validados para as consultas e o comando de drift.
3
3
  import path from "node:path";
4
4
  import { carregarConfiguracaoProjeto, resolverAlvoPadrao, resolverEstruturaSaidaPadrao, resolverFrameworkPadrao, resolverSaidaPadrao, } from "./projeto.js";
5
5
  import { REGISTRO_COMANDOS } from "./comandos.js";
@@ -7,32 +7,31 @@ import { comandoIniciar, comandoInstalarExemplos } from './initCommand.js';
7
7
  import { obterOpcao, obterPosicionais, possuiFlag } from './cliArgs.js';
8
8
  import { comandoAuthor, comandoProfile, criarPayloadRulePacks, normalizarProfileGovernanca, renderizarRulePacksTexto } from './profileAuthorCommand.js';
9
9
  import { comandoDoctor } from './doctorCommand.js';
10
+ import { erroArgumentoInvalido, erroComandoDesconhecido } from './cliControlError.js';
11
+ import { validarSintaxeInvocacaoPublica } from './cliGrammar.js';
10
12
  import { normalizarFonteImportacao, normalizarTemplateIniciar, } from './geracaoCore.js';
11
- import { VERSAO_CLI, ajuda, obterArgumentos } from "./index.part01.js";
13
+ import { obterArgumentos } from "./index.part01.js";
12
14
  import { comandoDocsImpacto, comandoFinalizarMudanca, comandoValidar, comandoValidarJson } from "./index.part04.js";
13
15
  import { comandoAst, comandoAstJson, comandoDrift, comandoImpacto, comandoImportar, comandoInspecionar, comandoIr, comandoIrJson, comandoRenomearSemantico } from "./index.part05.js";
14
16
  import { comandoAjudaIa, comandoCompilar, comandoDiagnosticos, comandoExemplosPromptIa, comandoFormatar, comandoPromptIa, comandoPromptIaReact, comandoPromptIaSemaPrimeiro, comandoPromptIaUi, comandoResumo, comandoStarterIa, comandoSyncCodex } from "./index.part06.js";
15
17
  import { comandoContextoIa, comandoPromptCurto, comandoTestar, comandoVerificar, comandoVerificarJson } from "./index.part07.js";
16
18
  export async function principal() {
19
+ const argvPublico = process.argv.slice(2);
20
+ const sintaxe = validarSintaxeInvocacaoPublica(argvPublico);
21
+ if (!sintaxe.dispatchPermitido)
22
+ return 0;
17
23
  const { comando, resto } = obterArgumentos();
18
- const comandoCru = process.argv[2];
19
- if (comandoCru === "--versao" || comandoCru === "--version" || comandoCru === "-v") {
20
- console.log(VERSAO_CLI);
21
- process.exit(0);
22
- }
23
- if (!comando || comandoCru === "--help" || comandoCru === "-h") {
24
- console.log(ajuda());
25
- process.exit(0);
26
- }
27
- const cwd = process.cwd();
24
+ if (!comando)
25
+ return 0;
28
26
  const posicionais = obterPosicionais(resto);
29
- let codigoSaida = 0;
27
+ const modoJson = argvPublico.includes("--json");
28
+ const cwd = process.cwd();
30
29
  // --- Comandos registrados via REGISTRO_COMANDOS (guard, init, dev, sync) ---
31
30
  const handlerRegistrado = REGISTRO_COMANDOS[comando];
32
31
  if (handlerRegistrado) {
33
- codigoSaida = await handlerRegistrado(posicionais, resto, possuiFlag(resto, "--json"));
34
- process.exit(codigoSaida);
32
+ return handlerRegistrado(posicionais, resto, modoJson);
35
33
  }
34
+ let codigoSaida = 0;
36
35
  switch (comando) {
37
36
  case "iniciar":
38
37
  codigoSaida = await comandoIniciar(cwd, normalizarTemplateIniciar(obterOpcao(resto, "--template")), { force: possuiFlag(resto, "--force") });
@@ -58,13 +57,13 @@ export async function principal() {
58
57
  break;
59
58
  case "ast":
60
59
  codigoSaida = possuiFlag(resto, "--json")
61
- ? await comandoAstJson(resto[0] ?? "")
62
- : await comandoAst(resto[0] ?? "");
60
+ ? await comandoAstJson(posicionais[0] ?? "")
61
+ : await comandoAst(posicionais[0] ?? "");
63
62
  break;
64
63
  case "ir":
65
64
  codigoSaida = possuiFlag(resto, "--json")
66
- ? await comandoIrJson(resto[0] ?? "")
67
- : await comandoIr(resto[0] ?? "");
65
+ ? await comandoIrJson(posicionais[0] ?? "")
66
+ : await comandoIr(posicionais[0] ?? "");
68
67
  break;
69
68
  case "compilar":
70
69
  {
@@ -105,7 +104,7 @@ export async function principal() {
105
104
  : await comandoVerificar(posicionais[0], resolverSaidaPadrao(obterOpcao(resto, "--saida", "./.tmp/sema-verificar"), "typescript", await carregarConfiguracaoProjeto(posicionais[0] ? path.resolve(cwd, posicionais[0]) : cwd)), cwd);
106
105
  break;
107
106
  case "inspecionar":
108
- codigoSaida = await comandoInspecionar(posicionais[0], possuiFlag(resto, "--json"), cwd);
107
+ codigoSaida = await comandoInspecionar(posicionais[0], possuiFlag(resto, "--json"), cwd, resto);
109
108
  break;
110
109
  case "drift":
111
110
  codigoSaida = await comandoDrift(posicionais[0], resto, possuiFlag(resto, "--json"), cwd);
@@ -120,9 +119,7 @@ export async function principal() {
120
119
  {
121
120
  const fonte = normalizarFonteImportacao(posicionais[0]);
122
121
  if (!fonte || !posicionais[1]) {
123
- console.error("Uso: sema importar <nestjs|fastapi|flask|nextjs|nextjs-consumer|react-vite-consumer|angular-consumer|flutter-consumer|firebase|dotnet|java|go|rust|cpp|php|typescript|python|dart> <diretorio> [--saida <diretorio>] [--namespace <base>] [--json]");
124
- codigoSaida = 1;
125
- break;
122
+ throw erroArgumentoInvalido();
126
123
  }
127
124
  codigoSaida = await comandoImportar(fonte, path.resolve(cwd, posicionais[1]), path.resolve(cwd, obterOpcao(resto, "--saida", "./sema/importado")), obterOpcao(resto, "--namespace"), possuiFlag(resto, "--json"));
128
125
  }
@@ -176,10 +173,8 @@ export async function principal() {
176
173
  codigoSaida = await comandoContextoIa(posicionais[0] ?? "", obterOpcao(resto, "--saida"), possuiFlag(resto, "--json"));
177
174
  break;
178
175
  default:
179
- console.log(ajuda());
180
- codigoSaida = 1;
181
- break;
176
+ throw erroComandoDesconhecido();
182
177
  }
183
- process.exit(codigoSaida);
178
+ return codigoSaida;
184
179
  }
185
180
  //# sourceMappingURL=index.part08.js.map