@semacode/cli 2.3.1 → 3.5.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 (281) hide show
  1. package/README.md +265 -217
  2. package/dist/agentContextPack.js +14 -10
  3. package/dist/agentEntryPoints.d.ts +5 -0
  4. package/dist/agentEntryPoints.js +592 -568
  5. package/dist/angular-consumer-standalone.js +1 -1
  6. package/dist/bin.d.ts +6 -0
  7. package/dist/bin.js +130 -0
  8. package/dist/cliArgs.js +4 -4
  9. package/dist/cliControlError.d.ts +12 -0
  10. package/dist/cliControlError.js +47 -0
  11. package/dist/cliGrammar.d.ts +11 -0
  12. package/dist/cliGrammar.js +551 -0
  13. package/dist/cliHelp.d.ts +13 -0
  14. package/dist/cliHelp.js +19 -0
  15. package/dist/cliHelpTexto.d.ts +3 -0
  16. package/dist/cliHelpTexto.js +168 -0
  17. package/dist/cliRuntime.d.ts +2 -0
  18. package/dist/cliRuntime.js +31 -0
  19. package/dist/comandos.js +9 -22
  20. package/dist/contexto.js +5 -5
  21. package/dist/dev/index.d.ts +1 -0
  22. package/dist/dev/index.js +51 -9
  23. package/dist/discovery/catalog.js +3 -3
  24. package/dist/distribuicao/filesystemGlobal.d.ts +63 -0
  25. package/dist/distribuicao/filesystemGlobal.js +701 -0
  26. package/dist/distribuicao/index.d.ts +7 -0
  27. package/dist/distribuicao/index.js +227 -0
  28. package/dist/distribuicao/launcherGlobal.d.ts +53 -0
  29. package/dist/distribuicao/launcherGlobal.js +643 -0
  30. package/dist/distribuicao/launcherWindows.d.ts +28 -0
  31. package/dist/distribuicao/launcherWindows.js +326 -0
  32. package/dist/distribuicao/lockContextGlobal.d.ts +10 -0
  33. package/dist/distribuicao/lockContextGlobal.js +17 -0
  34. package/dist/distribuicao/lockGlobal.d.ts +6 -0
  35. package/dist/distribuicao/lockGlobal.js +520 -0
  36. package/dist/distribuicao/skillGlobal.d.ts +48 -0
  37. package/dist/distribuicao/skillGlobal.js +652 -0
  38. package/dist/distribuicao/skillIntentPolicy.d.ts +21 -0
  39. package/dist/distribuicao/skillIntentPolicy.js +115 -0
  40. package/dist/distribuicao/tipos.d.ts +50 -0
  41. package/dist/distribuicao/tipos.js +10 -0
  42. package/dist/distribuicao/versaoSemantica.d.ts +3 -0
  43. package/dist/distribuicao/versaoSemantica.js +62 -0
  44. package/dist/docs.part01.d.ts +4 -1
  45. package/dist/docs.part01.js +8 -0
  46. package/dist/docs.part02.js +9 -1
  47. package/dist/drift.part01.d.ts +33 -25
  48. package/dist/drift.part01.js +2 -1
  49. package/dist/drift.part04.d.ts +26 -5
  50. package/dist/drift.part04.js +123 -19
  51. package/dist/drift.part05.d.ts +2 -2
  52. package/dist/drift.part05.js +8 -6
  53. package/dist/drift.part06.d.ts +2 -2
  54. package/dist/drift.part06.js +113 -26
  55. package/dist/drift.part07.d.ts +11 -11
  56. package/dist/drift.part07.js +261 -265
  57. package/dist/drift.part08.d.ts +2 -2
  58. package/dist/drift.part08.js +35 -26
  59. package/dist/drift.part09.d.ts +2 -2
  60. package/dist/drift.part09.js +10 -3
  61. package/dist/drift.part11.js +261 -58
  62. package/dist/drift.part12.d.ts +1 -1
  63. package/dist/drift.part12.js +193 -21
  64. package/dist/drift.part13.d.ts +20 -39
  65. package/dist/drift.part13.js +601 -647
  66. package/dist/drift.part14.js +23 -7
  67. package/dist/driftCacheCas.d.ts +43 -0
  68. package/dist/driftCacheCas.js +351 -0
  69. package/dist/driftCacheFilesystem.d.ts +64 -0
  70. package/dist/driftCacheFilesystem.js +313 -0
  71. package/dist/driftCacheModes.d.ts +38 -0
  72. package/dist/driftCacheModes.js +147 -0
  73. package/dist/driftCacheStore.d.ts +80 -0
  74. package/dist/driftCacheStore.js +603 -0
  75. package/dist/driftCatalogo.d.ts +2 -28
  76. package/dist/driftCatalogo.js +143 -284
  77. package/dist/driftEscopo.d.ts +1 -3
  78. package/dist/driftEscopo.js +235 -151
  79. package/dist/driftEscopoReferencias.d.ts +5 -1
  80. package/dist/driftEscopoReferencias.js +375 -28
  81. package/dist/driftOrcamento.d.ts +0 -6
  82. package/dist/driftOrcamento.js +2 -1
  83. package/dist/execucoesExternas.js +19 -5
  84. package/dist/exemplosOficiais.d.ts +2 -1
  85. package/dist/exemplosOficiais.js +9 -3
  86. package/dist/geracaoCore.d.ts +1 -0
  87. package/dist/geracaoCore.js +6 -6
  88. package/dist/iaPrompts.d.ts +3 -3
  89. package/dist/iaPrompts.js +312 -313
  90. package/dist/importador.part01.d.ts +1 -1
  91. package/dist/importador.part06.d.ts +2 -0
  92. package/dist/importador.part06.js +87 -1
  93. package/dist/importador.part09.js +7 -1
  94. package/dist/index.d.ts +4 -1
  95. package/dist/index.js +6 -25
  96. package/dist/index.part01.d.ts +20 -28
  97. package/dist/index.part01.js +16 -237
  98. package/dist/index.part02.js +36 -22
  99. package/dist/index.part03.d.ts +24 -2
  100. package/dist/index.part03.js +83 -19
  101. package/dist/index.part04.d.ts +10 -2
  102. package/dist/index.part04.js +152 -123
  103. package/dist/index.part05.js +80 -78
  104. package/dist/index.part06.js +34 -17
  105. package/dist/index.part07.d.ts +8 -2
  106. package/dist/index.part07.js +153 -7
  107. package/dist/index.part08.d.ts +1 -1
  108. package/dist/index.part08.js +25 -30
  109. package/dist/initCommand.d.ts +1 -0
  110. package/dist/initCommand.js +20 -4
  111. package/dist/initTemplatesBase.js +6 -4
  112. package/dist/pipelineConteudo/command.d.ts +1 -0
  113. package/dist/pipelineConteudo/command.js +9 -2
  114. package/dist/pipelineConteudo/help.d.ts +2 -0
  115. package/dist/pipelineConteudo/help.js +33 -0
  116. package/dist/profileAuthorCommand.js +3 -7
  117. package/dist/profileCommand.js +3 -7
  118. package/dist/projetoCarregar.js +35 -17
  119. package/dist/projetoCatalogo.d.ts +1 -0
  120. package/dist/projetoCatalogo.js +64 -25
  121. package/dist/projetoConfig.js +2 -0
  122. package/dist/projetoLegado.js +18 -0
  123. package/dist/projetoOrigens.d.ts +2 -0
  124. package/dist/projetoOrigens.js +65 -9
  125. package/dist/projetoTipos.d.ts +1 -0
  126. package/dist/resultadoCli.d.ts +20 -0
  127. package/dist/resultadoCli.js +57 -0
  128. package/dist/saidaCli.d.ts +35 -0
  129. package/dist/saidaCli.js +118 -0
  130. package/dist/sistemasInterativos/acceptanceEvidence.d.ts +22 -0
  131. package/dist/sistemasInterativos/acceptanceEvidence.js +345 -0
  132. package/dist/sistemasInterativos/engineObservation.d.ts +12 -0
  133. package/dist/sistemasInterativos/engineObservation.js +438 -0
  134. package/dist/sistemasInterativos/jobOrchestration.d.ts +2 -0
  135. package/dist/sistemasInterativos/jobOrchestration.js +204 -0
  136. package/dist/sistemasInterativos/operationPrimitives.d.ts +21 -0
  137. package/dist/sistemasInterativos/operationPrimitives.js +194 -0
  138. package/dist/sistemasInterativos/operations.d.ts +4 -39
  139. package/dist/sistemasInterativos/operations.js +5 -1164
  140. package/dist/skillCommand.d.ts +5 -0
  141. package/dist/skillCommand.js +88 -0
  142. package/dist/tipos.d.ts +1 -1
  143. package/dist/typescript-http-modelos.d.ts +1 -1
  144. package/dist/typescript-http-rotas.d.ts +1 -0
  145. package/dist/typescript-http-rotas.js +93 -0
  146. package/dist/typescript-http.d.ts +1 -1
  147. package/dist/typescript-http.js +1 -1
  148. package/dist/verificacaoCache.d.ts +25 -0
  149. package/dist/verificacaoCache.js +80 -0
  150. package/docs/README.md +34 -30
  151. package/docs/ai-integration.md +25 -12
  152. package/docs/ai-onboarding.md +37 -18
  153. package/docs/ai-workflow.md +9 -7
  154. package/docs/cli.md +125 -7
  155. package/docs/commands.md +41 -20
  156. package/docs/deploy.md +21 -8
  157. package/docs/descoberta-capacidades.md +106 -106
  158. package/docs/documentation.md +49 -39
  159. package/docs/drift-cache.md +108 -0
  160. package/docs/getting-started.md +43 -18
  161. package/docs/pipeline-conteudo.md +246 -246
  162. package/docs/profiles.md +54 -54
  163. package/docs/repositories.md +19 -2
  164. package/docs/rollback.md +15 -8
  165. package/docs/security.md +25 -3
  166. package/docs/sistemas-interativos.md +379 -374
  167. package/docs/syntax.md +14 -0
  168. package/docs/testing.md +139 -40
  169. package/exemplos/express_crud.sema +139 -0
  170. package/exemplos/fastify_crud.sema +146 -0
  171. package/exemplos/pipeline-conteudo/README.md +44 -44
  172. package/exemplos/pipeline-conteudo/alvos.json +23 -23
  173. package/exemplos/pipeline-conteudo/definicao.json +136 -136
  174. package/exemplos/profile_simulation.sema +211 -211
  175. package/exemplos/sistemas-interativos/README.md +100 -100
  176. package/exemplos/sistemas-interativos/advanced/acceptance-context-evaluate-valid.json +5 -5
  177. package/exemplos/sistemas-interativos/advanced/acceptance-lock-valid.json +16 -16
  178. package/exemplos/sistemas-interativos/advanced/asset-provenance-valid.json +32 -32
  179. package/exemplos/sistemas-interativos/advanced/autonomy-repair-valid.json +93 -93
  180. package/exemplos/sistemas-interativos/advanced/control-run-definition-valid.json +78 -78
  181. package/exemplos/sistemas-interativos/advanced/control-run-valid.json +27 -27
  182. package/exemplos/sistemas-interativos/advanced/distributed-workers-valid.json +79 -79
  183. package/exemplos/sistemas-interativos/advanced/editor-state-valid.json +42 -42
  184. package/exemplos/sistemas-interativos/advanced/engine-snapshot-after-valid.json +32 -32
  185. package/exemplos/sistemas-interativos/advanced/engine-snapshot-before-valid.json +23 -23
  186. package/exemplos/sistemas-interativos/advanced/job-orchestration-valid.json +39 -39
  187. package/exemplos/sistemas-interativos/advanced/multimodal-evidence-valid.json +46 -46
  188. package/exemplos/sistemas-interativos/advanced/multiplayer-authority-valid.json +39 -39
  189. package/exemplos/sistemas-interativos/advanced/playtest-fuzz-valid.json +37 -37
  190. package/exemplos/sistemas-interativos/advanced/portability-valid.json +104 -104
  191. package/exemplos/sistemas-interativos/advanced/temporal-evidence-valid.json +27 -27
  192. package/exemplos/sistemas-interativos/advanced/temporal-valid.json +118 -118
  193. package/exemplos/sistemas-interativos/experience-ir-valid.json +459 -459
  194. package/exemplos/sistemas-interativos/game-2d.json +83 -83
  195. package/exemplos/sistemas-interativos/game-3d-human.json +81 -81
  196. package/exemplos/sistemas-interativos/game-pixel-16-bit.json +97 -97
  197. package/exemplos/sistemas-interativos/game-pixel-8-bit.json +94 -94
  198. package/exemplos/sistemas-interativos/game-xr-human.json +80 -80
  199. package/exemplos/sistemas-interativos/hybrid-2-5d.json +108 -108
  200. package/exemplos/sistemas-interativos/protocol-mutating-rollback-valid.json +75 -75
  201. package/exemplos/sistemas-interativos/protocol-read-only-valid.json +58 -58
  202. package/exemplos/sistemas-interativos/simulation-2d-controlled.json +97 -97
  203. package/exemplos/sistemas-interativos/simulation-3d-calibrated-autonomous.json +141 -141
  204. package/exemplos/sistemas-interativos/simulation-headless-autonomous-batch.json +112 -112
  205. package/exemplos/sistemas-interativos/simulation-pixel-16-bit.json +103 -103
  206. package/exemplos/sistemas-interativos/simulation-text-controlled.json +95 -95
  207. package/node_modules/@sema/gerador-cpp/package.json +1 -1
  208. package/node_modules/@sema/gerador-dotnet/package.json +1 -1
  209. package/node_modules/@sema/gerador-lua/dist/index.js +51 -51
  210. package/node_modules/@sema/gerador-php/dist/index.js +113 -113
  211. package/node_modules/@sema/nucleo/dist/ir/conversor.part01.js +37 -38
  212. package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +1 -0
  213. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +1 -0
  214. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +1 -0
  215. package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.d.ts +7 -0
  216. package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.js +33 -10
  217. package/package.json +9 -4
  218. package/scripts/postinstall.mjs +148 -0
  219. package/skills/sema/SKILL.md +199 -0
  220. package/skills/sema/agents/openai.yaml +4 -0
  221. package/dist/driftCache.d.ts +0 -49
  222. package/dist/driftCache.js +0 -311
  223. package/dist/driftCacheIncremental.d.ts +0 -98
  224. package/dist/driftCacheIncremental.js +0 -596
  225. package/dist/driftCatalogoPersistente.d.ts +0 -8
  226. package/dist/driftCatalogoPersistente.js +0 -77
  227. package/node_modules/@sema/gerador-cpp/dist/index.js.map +0 -1
  228. package/node_modules/@sema/gerador-css/dist/index.js.map +0 -1
  229. package/node_modules/@sema/gerador-css/dist/index.part01.js.map +0 -1
  230. package/node_modules/@sema/gerador-css/dist/index.part02.js.map +0 -1
  231. package/node_modules/@sema/gerador-dart/dist/index.js.map +0 -1
  232. package/node_modules/@sema/gerador-dotnet/dist/index.js.map +0 -1
  233. package/node_modules/@sema/gerador-html/dist/index.js.map +0 -1
  234. package/node_modules/@sema/gerador-javascript/dist/index.js.map +0 -1
  235. package/node_modules/@sema/gerador-lua/dist/index.js.map +0 -1
  236. package/node_modules/@sema/gerador-php/dist/index.js.map +0 -1
  237. package/node_modules/@sema/gerador-python/dist/index.js.map +0 -1
  238. package/node_modules/@sema/gerador-python/dist/index.part01.js.map +0 -1
  239. package/node_modules/@sema/gerador-python/dist/index.part02.js.map +0 -1
  240. package/node_modules/@sema/gerador-typescript/dist/index.js.map +0 -1
  241. package/node_modules/@sema/gerador-typescript/dist/index.part01.js.map +0 -1
  242. package/node_modules/@sema/gerador-typescript/dist/index.part02.js.map +0 -1
  243. package/node_modules/@sema/gerador-typescript/dist/index.part03.js.map +0 -1
  244. package/node_modules/@sema/nucleo/dist/ast/tipos.js.map +0 -1
  245. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js.map +0 -1
  246. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js.map +0 -1
  247. package/node_modules/@sema/nucleo/dist/diagnosticos/snippets.js.map +0 -1
  248. package/node_modules/@sema/nucleo/dist/formatador/index.js.map +0 -1
  249. package/node_modules/@sema/nucleo/dist/formatador/index.part01.js.map +0 -1
  250. package/node_modules/@sema/nucleo/dist/formatador/index.part02.js.map +0 -1
  251. package/node_modules/@sema/nucleo/dist/index.js.map +0 -1
  252. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +0 -1
  253. package/node_modules/@sema/nucleo/dist/ir/conversor.part01.js.map +0 -1
  254. package/node_modules/@sema/nucleo/dist/ir/conversor.part02.js.map +0 -1
  255. package/node_modules/@sema/nucleo/dist/ir/conversor.part03.js.map +0 -1
  256. package/node_modules/@sema/nucleo/dist/ir/modelos.js.map +0 -1
  257. package/node_modules/@sema/nucleo/dist/lexer/lexer.js.map +0 -1
  258. package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +0 -1
  259. package/node_modules/@sema/nucleo/dist/parser/parser.declaracoes.js.map +0 -1
  260. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +0 -1
  261. package/node_modules/@sema/nucleo/dist/parser/parser.modulo.js.map +0 -1
  262. package/node_modules/@sema/nucleo/dist/parser/parser.part01.js.map +0 -1
  263. package/node_modules/@sema/nucleo/dist/parser/parser.part02.js.map +0 -1
  264. package/node_modules/@sema/nucleo/dist/parser/parser.part03.js.map +0 -1
  265. package/node_modules/@sema/nucleo/dist/persistencia/contratos.js.map +0 -1
  266. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +0 -1
  267. package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.js.map +0 -1
  268. package/node_modules/@sema/nucleo/dist/semantico/analisador.part02.js.map +0 -1
  269. package/node_modules/@sema/nucleo/dist/semantico/analisador.part03.js.map +0 -1
  270. package/node_modules/@sema/nucleo/dist/semantico/analisador.part04.js.map +0 -1
  271. package/node_modules/@sema/nucleo/dist/semantico/analisador.part05.js.map +0 -1
  272. package/node_modules/@sema/nucleo/dist/semantico/analisador.part06.js.map +0 -1
  273. package/node_modules/@sema/nucleo/dist/semantico/analisador.part07.js.map +0 -1
  274. package/node_modules/@sema/nucleo/dist/semantico/analisador.part08.js.map +0 -1
  275. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +0 -1
  276. package/node_modules/@sema/nucleo/dist/semantico/estruturas.part01.js.map +0 -1
  277. package/node_modules/@sema/nucleo/dist/semantico/estruturas.part02.js.map +0 -1
  278. package/node_modules/@sema/nucleo/dist/semantico/orcamentoSemantico.js.map +0 -1
  279. package/node_modules/@sema/nucleo/dist/semantico/seguranca.js.map +0 -1
  280. package/node_modules/@sema/nucleo/dist/util/arquivos.js.map +0 -1
  281. package/node_modules/@sema/padroes/dist/index.js.map +0 -1
@@ -1,11 +1,11 @@
1
- // SEMA-GOVERNED: sema.governanca_ia_contexto, sema.produto.escrita_segura_workspace
1
+ // SEMA-GOVERNED: sema.governanca_ia_contexto, sema.produto.escrita_segura_workspace, sema.produto.governanca_ia.drift.cache.modos
2
2
  // Descrição: gera contexto local e grava artefatos somente dentro da base validada.
3
3
  import { mkdir } from "node:fs/promises";
4
4
  import path from "node:path";
5
5
  import { formatarDiagnosticos, gerarRespostaValidacao, temErros, } from "@sema/nucleo";
6
6
  import { carregarProjeto, } from "./projeto.js";
7
7
  import { analisarDriftLegado, } from "./drift.js";
8
- import { resolverDocumentacaoObrigatoria, verificarDocumentacaoMudanca, } from "./docs.js";
8
+ import { compactarDocumentoObrigatorio, resolverDocumentacaoObrigatoria, verificarDocumentacaoMudanca, } from "./docs.js";
9
9
  import { LIMITE_AVISO_LINHAS_CODIGO_GOVERNADO, LIMITE_AVISO_LINHAS_CONTRATO_SEMA, LIMITE_BLOQUEIO_LINHAS_CODIGO_GOVERNADO, LIMITE_BLOQUEIO_LINHAS_CONTRATO_SEMA, } from "./driftOrcamento.js";
10
10
  import { ARQUIVO_AGENT_CONTEXT_PACK, ARQUIVO_DOC_AGENTES_CAPACIDADE, ARQUIVO_SEMA_BOOT, ARQUIVO_SEMA_SMALL_MODEL, } from './agentContextTipos.js';
11
11
  import { criarGuiaCapacidadeIa, LIMITE_CARACTERES_PAYLOAD_INLINE } from './agentContextPack.js';
@@ -16,9 +16,9 @@ import { carregarModulos } from './carregarModulos.js';
16
16
  import { obterOpcao, obterOpcoesRepetidas, possuiFlag } from './cliArgs.js';
17
17
  import { resumirListaTexto, unicosOrdenados } from './textoListas.js';
18
18
  import { EXTENSOES_CODIGO, listarArquivosRecursivosLimitado } from './projetoBusca.js';
19
- import { VERSAO_CLI, criarResultadoDriftNaoExecutado, resolverAnaliseDriftCli, } from "./index.part01.js";
19
+ import { VERSAO_CLI } from "./index.part01.js";
20
20
  import { coletarResumoSemanticoModulo, descreverFontesConclusao, detectarFontesConclusaoSnapshot, detectarModoVerificacaoCodigo } from "./index.part02.js";
21
- import { ARQUIVOS_RESUMO_MODULO_IA, carregarContextoModuloIa, criarBriefingAgente, gerarArquivosResumoModuloIa, renderizarResumoProjetoMarkdown, resumirDriftPorModulo } from "./index.part03.js";
21
+ import { ARQUIVOS_RESUMO_MODULO_IA, carregarContextoModuloIa, criarBriefingAgente, criarBriefingAgenteContratos, gerarArquivosResumoModuloIa, renderizarResumoProjetoMarkdown, resumirDriftPorModulo } from "./index.part03.js";
22
22
  export const ARQUIVOS_RESUMO_PROJETO_IA = [
23
23
  ARQUIVO_SEMA_BOOT,
24
24
  ARQUIVO_SEMA_SMALL_MODEL,
@@ -53,26 +53,36 @@ function escolherTopArquivosResumo(modulos, arquivosCodigoDetectados) {
53
53
  }
54
54
  return { arquivos: [], fonte: "nenhum" };
55
55
  }
56
- export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escreverNaRaiz = false, args = [], modoDriftPadrao = "fresh") {
57
- const contextoProjeto = await carregarProjeto(entrada, process.cwd());
56
+ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escreverNaRaiz = false, analiseDrift = { modo: "none", executar: false, avisos: [] }) {
57
+ const contextoProjeto = await carregarProjeto(entrada, process.cwd(), {
58
+ escopo: "projeto",
59
+ adiarDescobertaCodigo: !analiseDrift.executar,
60
+ });
58
61
  const geradoEm = new Date().toISOString();
59
62
  const guiaPorCapacidade = criarGuiaCapacidadeIa();
60
63
  const entradaCanonica = criarEntradaCanonicaProjeto(guiaPorCapacidade);
61
64
  const agentContextPack = entradaCanonica.agentContextPack;
62
- const analiseDrift = resolverAnaliseDriftCli(args, modoDriftPadrao);
63
- const modoVerificacaoCodigo = analiseDrift.modo === "none"
64
- ? "contratos_apenas"
65
- : await detectarModoVerificacaoCodigo(contextoProjeto.baseProjeto, contextoProjeto.diretoriosCodigo);
66
- const fontesConclusao = analiseDrift.modo === "none"
67
- ? ["contrato"]
68
- : await detectarFontesConclusaoSnapshot(contextoProjeto.baseProjeto);
69
- const resultadoDrift = analiseDrift.modo === "none"
70
- ? criarResultadoDriftNaoExecutado(contextoProjeto, analiseDrift.opcoes)
71
- : await analisarDriftLegado(contextoProjeto, analiseDrift.opcoes);
65
+ const modoVerificacaoCodigo = analiseDrift.executar
66
+ ? await detectarModoVerificacaoCodigo(contextoProjeto.baseProjeto, contextoProjeto.diretoriosCodigo)
67
+ : "contratos_apenas";
68
+ const fontesConclusao = analiseDrift.executar
69
+ ? await detectarFontesConclusaoSnapshot(contextoProjeto.baseProjeto)
70
+ : ["contrato"];
71
+ const resultadoDrift = analiseDrift.executar
72
+ ? await analisarDriftLegado(contextoProjeto, {
73
+ escopo: "projeto",
74
+ modoCache: analiseDrift.modo,
75
+ avisosModoCache: analiseDrift.avisos,
76
+ })
77
+ : null;
72
78
  const modulos = contextoProjeto.modulosSelecionados.map((item) => {
73
79
  const modulo = item.resultado.modulo?.nome ?? path.basename(item.caminho, ".sema");
74
- const driftResumo = resumirDriftPorModulo(modulo, item.caminho, resultadoDrift);
75
- const briefing = criarBriefingAgente(item.caminho, modulo, item.resultado.ir ?? null, driftResumo, resultadoDrift);
80
+ const driftResumo = resultadoDrift
81
+ ? resumirDriftPorModulo(modulo, item.caminho, resultadoDrift)
82
+ : null;
83
+ const briefing = resultadoDrift && driftResumo
84
+ ? criarBriefingAgente(item.caminho, modulo, item.resultado.ir ?? null, driftResumo, resultadoDrift)
85
+ : criarBriefingAgenteContratos(item.caminho, modulo, item.resultado.ir ?? null);
76
86
  return coletarResumoSemanticoModulo({
77
87
  arquivo: item.caminho,
78
88
  modulo,
@@ -83,12 +93,12 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
83
93
  comando: "drift",
84
94
  caminho: item.caminho,
85
95
  modulo,
86
- sucesso: resultadoDrift.sucesso,
87
- modoAnalise: analiseDrift.modo,
88
- executado: analiseDrift.modo !== "none",
89
- aviso: analiseDrift.modo === "none"
90
- ? "Análise de drift não executada; nenhuma conclusão sobre o código foi produzida."
91
- : null,
96
+ modo: analiseDrift.modo,
97
+ executada: analiseDrift.executar,
98
+ sucesso: resultadoDrift?.sucesso ?? null,
99
+ aviso: analiseDrift.executar
100
+ ? null
101
+ : "Análise de drift não executada; implementação, vínculos e rotas não foram verificados.",
92
102
  resumo: driftResumo,
93
103
  drift: resultadoDrift,
94
104
  },
@@ -96,7 +106,7 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
96
106
  fontesConclusao,
97
107
  });
98
108
  });
99
- const arquivosCodigoDetectados = modoVerificacaoCodigo === "codigo_completo"
109
+ const arquivosCodigoDetectados = analiseDrift.executar && modoVerificacaoCodigo === "codigo_completo"
100
110
  ? await listarTopArquivosCodigoDetectados(contextoProjeto.diretoriosCodigo)
101
111
  : [];
102
112
  const topArquivosResumo = escolherTopArquivosResumo(modulos, arquivosCodigoDetectados);
@@ -117,6 +127,15 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
117
127
  cliVersao: VERSAO_CLI,
118
128
  baseProjeto,
119
129
  modoVerificacaoCodigo,
130
+ analiseDrift: {
131
+ modo: analiseDrift.modo,
132
+ executada: analiseDrift.executar,
133
+ sucesso: resultadoDrift?.sucesso ?? null,
134
+ aviso: analiseDrift.executar
135
+ ? null
136
+ : "Análise de drift não executada; o resumo contém somente evidência contratual.",
137
+ cache: resultadoDrift?.escopo_aplicado.cache ?? null,
138
+ },
120
139
  fontesConclusao,
121
140
  conclusoesPorFonte: descreverFontesConclusao(fontesConclusao, modoVerificacaoCodigo),
122
141
  totalModulos: modulos.length,
@@ -130,6 +149,7 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
130
149
  `PROJETO: ${path.basename(baseProjeto)}`,
131
150
  `MODULOS: ${modulos.length}`,
132
151
  `MODO_CODIGO: ${modoVerificacaoCodigo}`,
152
+ `RESULTADO_DRIFT: ${resultadoDrift ? (resultadoDrift.sucesso ? "sucesso" : "falha") : "não avaliado"}`,
133
153
  `FONTES_CONCLUSAO: ${resumirListaTexto(fontesConclusao, 4)}`,
134
154
  `ENTRADA_IA: ${entradaCanonica.porCapacidade.fraca.join(" -> ")}`,
135
155
  `POLITICA_PLATAFORMA: Sema governa projeto e nao contorna politicas da plataforma; se houver alerta externo, pare e explique sem burlar filtro`,
@@ -150,6 +170,7 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
150
170
  `BASE: ${baseProjeto}`,
151
171
  `MODULOS: ${modulos.length}`,
152
172
  `MODO_CODIGO: ${modoVerificacaoCodigo}`,
173
+ `RESULTADO_DRIFT: ${resultadoDrift ? (resultadoDrift.sucesso ? "sucesso" : "falha") : "não avaliado"}`,
153
174
  ...(modoVerificacaoCodigo === "contratos_apenas"
154
175
  ? ["AVISO_CODIGO: somente contratos enviados; implementacao nao verificada neste modo"]
155
176
  : modoVerificacaoCodigo === "codigo_selecionado"
@@ -193,6 +214,7 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
193
214
  artefatos: [...ARQUIVOS_RESUMO_PROJETO_IA],
194
215
  modulos,
195
216
  guiaPorCapacidade,
217
+ analiseDrift: indexJson.analiseDrift,
196
218
  };
197
219
  }
198
220
  export async function gerarContextoIa(arquivoEntrada, pastaSaidaOpcional) {
@@ -218,102 +240,102 @@ export async function gerarContextoIa(arquivoEntrada, pastaSaidaOpcional) {
218
240
  await escreverArquivoWorkspaceSeguro(pastaBase, artefato.caminhoRelativo, artefato.conteudo, { sobrescrever: true });
219
241
  }
220
242
  const resumoGerado = await gerarArquivosResumoModuloIa(contexto, pastaBase);
221
- const resumo = `# Contexto de IA para ${contexto.modulo}
222
-
223
- - Arquivo alvo: \`${contexto.arquivo}\`
224
- - Modulo: \`${contexto.modulo}\`
225
- - Sucesso em validar: \`${contexto.sucesso}\`
226
- - Quantidade de diagnosticos: \`${contexto.diagnosticos.length}\`
227
- - Gerado em: \`${contexto.geradoEm}\`
228
-
229
- ## Arquivos gerados neste pacote
230
-
231
- - \`agent-context-pack.json\`
232
- - \`${ARQUIVO_SEMA_BOOT}\`
233
- - \`${ARQUIVO_SEMA_SMALL_MODEL}\`
234
- - \`resumo.micro.txt\`
235
- - \`resumo.curto.txt\`
236
- - \`resumo.md\`
237
- - \`briefing.min.json\`
238
- - \`prompt-curto.txt\`
239
- - \`validar.json\`
240
- - \`diagnosticos.json\`
241
- - \`ast.json\`
242
- - \`ir.json\`
243
- - \`drift.json\`
244
- - \`briefing.json\`
245
-
246
- ## Fluxo recomendado para o agente
247
-
248
- Antes de escolher arquivo de código, leia \`${ARQUIVO_SEMA_BOOT}\` e \`agent-context-pack.json\`. Eles declaram regras obrigatórias, proibições, prioridades, idioma humano e quando abrir texto bruto como \`AGENTS.md\`, \`exemplos/\`, docs e contratos.
249
-
250
- ## Políticas da plataforma
251
-
252
- - Sema governa contrato, escopo, drift, evidência e qualidade; não contorna políticas, termos, permissões, segurança ou leis.
253
- - Se houver alerta externo, trate como bloqueio da plataforma ou falso positivo possível, explique de forma neutra e não tente burlar filtro.
254
-
255
- ### IA fraca, gratuita ou com pouca disciplina
256
-
257
- 1. Ler \`${ARQUIVO_SEMA_BOOT}\`.
258
- 2. Ler \`${ARQUIVO_SEMA_SMALL_MODEL}\`.
259
- 3. Ler \`agent-context-pack.json\`.
260
- 4. Ler \`resumo.micro.txt\`.
261
- 5. Ler \`briefing.min.json\`.
262
- 6. Se ainda couber contexto, ler \`resumo.curto.txt\`.
263
-
264
- ### IA média
265
-
266
- 1. Ler \`${ARQUIVO_SEMA_BOOT}\`.
267
- 2. Ler \`agent-context-pack.json\`.
268
- 3. Ler \`resumo.curto.txt\`.
269
- 4. Ler \`briefing.min.json\`.
270
- 5. Ler \`drift.json\`.
271
- 6. Se precisar, subir para \`resumo.md\`.
272
-
273
- ### IA forte ou com tool use
274
-
275
- 1. Ler \`${ARQUIVO_SEMA_BOOT}\`.
276
- 2. Ler \`agent-context-pack.json\`.
277
- 3. Ler \`README.md\`.
278
- 4. Ler \`resumo.md\`.
279
- 5. Ler \`briefing.json\`.
280
- 6. Ler \`drift.json\`.
281
- 7. Só depois abrir \`ir.json\` e \`ast.json\`.
282
-
283
- ## Idioma humano
284
-
285
- - Responda no idioma do usuário.
286
- - Em PT-BR, use acentos, cedilha, pontuação e símbolos normais.
287
- - A DSL \`.sema\` pode ser ASCII; texto humano não precisa ser.
288
-
289
- ## Texto bruto sob demanda
290
-
291
- - Abra \`AGENTS.md\` antes de editar código, contrato, docs operacionais, release ou deploy.
292
- - Abra \`exemplos/\` antes de criar ou corrigir sintaxe \`.sema\`.
293
- - Abra \`docs/syntax.md\` quando exemplos não bastarem para resolver a gramática.
294
- - Abra \`contratos/\` antes de qualquer implementação ou mudança de comportamento.
295
-
296
- ## Timeout e retry
297
-
298
- - Timeout local do agente não é falha do Sema.
299
- - Se uma chamada Sema estourar, aumente o timeout e tente de novo.
300
- - Se o projeto inteiro for lento, escopar para \`sema resumo "${contexto.arquivo}" --micro --para mudanca\`.
301
- - Se o ambiente impedir continuar, pare bloqueado e não avance com código sem Sema.
302
-
303
- ## Fechamento
304
-
305
- 1. Editar o arquivo \`.sema\`.
306
- 2. Rodar \`sema formatar "${contexto.arquivo}"\`.
307
- 3. Rodar \`sema validar "${contexto.arquivo}" --json\`.
308
- 4. Rodar \`sema drift "${contexto.arquivo}" --json\`.
309
- 5. Fechar com \`sema verificar <arquivo-ou-pasta> --json --saida ./.tmp/verificacao-ia\`.
310
-
311
- ## Textos base para onboarding do agente
312
-
313
- - \`sema starter-ia\`
314
- - \`sema resumo "${contexto.arquivo}" --micro --para onboarding\`
315
- - \`sema prompt-curto "${contexto.arquivo}" --para mudanca\`
316
- - \`sema prompt-ia\`
243
+ const resumo = `# Contexto de IA para ${contexto.modulo}
244
+
245
+ - Arquivo alvo: \`${contexto.arquivo}\`
246
+ - Modulo: \`${contexto.modulo}\`
247
+ - Sucesso em validar: \`${contexto.sucesso}\`
248
+ - Quantidade de diagnosticos: \`${contexto.diagnosticos.length}\`
249
+ - Gerado em: \`${contexto.geradoEm}\`
250
+
251
+ ## Arquivos gerados neste pacote
252
+
253
+ - \`agent-context-pack.json\`
254
+ - \`${ARQUIVO_SEMA_BOOT}\`
255
+ - \`${ARQUIVO_SEMA_SMALL_MODEL}\`
256
+ - \`resumo.micro.txt\`
257
+ - \`resumo.curto.txt\`
258
+ - \`resumo.md\`
259
+ - \`briefing.min.json\`
260
+ - \`prompt-curto.txt\`
261
+ - \`validar.json\`
262
+ - \`diagnosticos.json\`
263
+ - \`ast.json\`
264
+ - \`ir.json\`
265
+ - \`drift.json\`
266
+ - \`briefing.json\`
267
+
268
+ ## Fluxo recomendado para o agente
269
+
270
+ Antes de escolher arquivo de código, leia \`${ARQUIVO_SEMA_BOOT}\` e \`agent-context-pack.json\`. Eles declaram regras obrigatórias, proibições, prioridades, idioma humano e quando abrir texto bruto como \`AGENTS.md\`, \`exemplos/\`, docs e contratos.
271
+
272
+ ## Políticas da plataforma
273
+
274
+ - Sema governa contrato, escopo, drift, evidência e qualidade; não contorna políticas, termos, permissões, segurança ou leis.
275
+ - Se houver alerta externo, trate como bloqueio da plataforma ou falso positivo possível, explique de forma neutra e não tente burlar filtro.
276
+
277
+ ### IA fraca, gratuita ou com pouca disciplina
278
+
279
+ 1. Ler \`${ARQUIVO_SEMA_BOOT}\`.
280
+ 2. Ler \`${ARQUIVO_SEMA_SMALL_MODEL}\`.
281
+ 3. Ler \`agent-context-pack.json\`.
282
+ 4. Ler \`resumo.micro.txt\`.
283
+ 5. Ler \`briefing.min.json\`.
284
+ 6. Se ainda couber contexto, ler \`resumo.curto.txt\`.
285
+
286
+ ### IA média
287
+
288
+ 1. Ler \`${ARQUIVO_SEMA_BOOT}\`.
289
+ 2. Ler \`agent-context-pack.json\`.
290
+ 3. Ler \`resumo.curto.txt\`.
291
+ 4. Ler \`briefing.min.json\`.
292
+ 5. Ler \`drift.json\`.
293
+ 6. Se precisar, subir para \`resumo.md\`.
294
+
295
+ ### IA forte ou com tool use
296
+
297
+ 1. Ler \`${ARQUIVO_SEMA_BOOT}\`.
298
+ 2. Ler \`agent-context-pack.json\`.
299
+ 3. Ler \`README.md\`.
300
+ 4. Ler \`resumo.md\`.
301
+ 5. Ler \`briefing.json\`.
302
+ 6. Ler \`drift.json\`.
303
+ 7. Só depois abrir \`ir.json\` e \`ast.json\`.
304
+
305
+ ## Idioma humano
306
+
307
+ - Responda no idioma do usuário.
308
+ - Em PT-BR, use acentos, cedilha, pontuação e símbolos normais.
309
+ - A DSL \`.sema\` pode ser ASCII; texto humano não precisa ser.
310
+
311
+ ## Texto bruto sob demanda
312
+
313
+ - Abra \`AGENTS.md\` antes de editar código, contrato, docs operacionais, release ou deploy.
314
+ - Abra \`exemplos/\` antes de criar ou corrigir sintaxe \`.sema\`.
315
+ - Abra \`docs/syntax.md\` quando exemplos não bastarem para resolver a gramática.
316
+ - Abra \`contratos/\` antes de qualquer implementação ou mudança de comportamento.
317
+
318
+ ## Timeout e retry
319
+
320
+ - Timeout local do agente não é falha do Sema.
321
+ - Se uma chamada Sema estourar, aumente o timeout e tente de novo.
322
+ - Se o projeto inteiro for lento, escopar para \`sema resumo "${contexto.arquivo}" --micro --para mudanca --drift none\`.
323
+ - Se o ambiente impedir continuar, pare bloqueado e não avance com código sem Sema.
324
+
325
+ ## Fechamento
326
+
327
+ 1. Editar o arquivo \`.sema\`.
328
+ 2. Rodar \`sema formatar "${contexto.arquivo}"\`.
329
+ 3. Rodar \`sema validar "${contexto.arquivo}" --json\`.
330
+ 4. Rodar \`sema drift "${contexto.arquivo}" --cache fresh --json\`.
331
+ 5. Fechar com \`sema verificar <arquivo-ou-pasta> --json --saida ./.tmp/verificacao-ia\`.
332
+
333
+ ## Textos base para onboarding do agente
334
+
335
+ - \`sema starter-ia\`
336
+ - \`sema resumo "${contexto.arquivo}" --micro --para onboarding --drift none\`
337
+ - \`sema prompt-curto "${contexto.arquivo}" --para mudanca\`
338
+ - \`sema prompt-ia\`
317
339
  `;
318
340
  await escreverArquivoWorkspaceSeguro(pastaBase, "README.md", resumo, {
319
341
  sobrescrever: true,
@@ -350,7 +372,7 @@ export function resolverEntradaDocs(posicionais, args) {
350
372
  export async function comandoDocsImpacto(posicionais, args, emJson) {
351
373
  const { intencao, arquivosAlvo } = resolverEntradaDocs(posicionais, args);
352
374
  if (!intencao.trim()) {
353
- console.error("Uso: sema docs-impacto --intencao <acao> [--arquivo <caminho>] [--criar-ausentes] [--json]");
375
+ console.error("Uso: sema docs-impacto --intencao <acao> [--arquivo <caminho>] [--criar-ausentes] [--completo] [--json]");
354
376
  return 1;
355
377
  }
356
378
  const resultado = await resolverDocumentacaoObrigatoria({
@@ -359,9 +381,16 @@ export async function comandoDocsImpacto(posicionais, args, emJson) {
359
381
  arquivosAlvo,
360
382
  criarAusentes: possuiFlag(args, "--criar-ausentes"),
361
383
  });
384
+ const completo = possuiFlag(args, "--completo");
362
385
  const payload = {
363
386
  comando: "docs-impacto",
364
- ...resultado,
387
+ ...(completo ? resultado : {
388
+ ...resultado,
389
+ leituraObrigatoria: resultado.leituraObrigatoria.map(compactarDocumentoObrigatorio),
390
+ docsAusentes: resultado.docsAusentes.map(compactarDocumentoObrigatorio),
391
+ docsCriadas: resultado.docsCriadas.map(compactarDocumentoObrigatorio),
392
+ modoDocumentos: "compacto",
393
+ }),
365
394
  };
366
395
  if (emJson) {
367
396
  console.log(JSON.stringify(payload, null, 2));
@@ -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,14 +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 { criarResultadoDriftNaoExecutado, resolverAnaliseDriftCli, resolverOpcoesDriftCli } from "./index.part01.js";
13
+ import { resolverAnaliseDriftConsultaCli, resolverOpcoesDriftCli } from "./index.part01.js";
11
14
  export async function comandoInspecionar(entrada, emJson, cwd = process.cwd(), args = []) {
12
- const analiseDrift = resolverAnaliseDriftCli(args, "none");
13
- const contextoProjeto = await carregarProjeto(entrada, cwd, { escopo: analiseDrift.opcoes.escopo });
14
- const driftExecutado = analiseDrift.modo !== "none";
15
- const resultadoDrift = driftExecutado
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
16
27
  ? await analisarDriftLegado(contextoProjeto, analiseDrift.opcoes)
17
- : criarResultadoDriftNaoExecutado(contextoProjeto, analiseDrift.opcoes);
28
+ : null;
18
29
  const framework = resolverFrameworkPadrao(undefined, contextoProjeto.configCarregada);
19
30
  const estruturaSaida = resolverEstruturaSaidaPadrao(undefined, framework, contextoProjeto.configCarregada);
20
31
  const alvos = resolverAlvosVerificacao(contextoProjeto.configCarregada);
@@ -35,78 +46,61 @@ export async function comandoInspecionar(entrada, emJson, cwd = process.cwd(), a
35
46
  modoAdocao: contextoProjeto.modoAdocao,
36
47
  analiseDrift: {
37
48
  modo: analiseDrift.modo,
38
- executada: driftExecutado,
39
- cache: analiseDrift.modo === "fresh" ? "refresh" : analiseDrift.modo === "cache" ? "auto" : null,
40
- aviso: driftExecutado
49
+ executada: analiseDrift.executar,
50
+ sucesso: resultadoDrift?.sucesso ?? null,
51
+ aviso: analiseDrift.executar
41
52
  ? null
42
- : "Análise de drift não executada; código, rotas, vínculos e implementações não foram verificados.",
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,
43
56
  },
44
- scoreDrift: driftExecutado ? resultadoDrift.resumo_operacional.scoreMedio : null,
45
- confiancaGeral: driftExecutado ? resultadoDrift.resumo_operacional.confiancaGeral : null,
46
- consumerFramework: driftExecutado ? resultadoDrift.consumerFramework : null,
47
- appRoutes: driftExecutado ? resultadoDrift.appRoutes : null,
48
- consumerSurfaces: driftExecutado ? resultadoDrift.consumerSurfaces : null,
49
- consumerBridges: driftExecutado ? resultadoDrift.consumerBridges : null,
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,
50
63
  },
51
64
  projeto: {
52
65
  arquivos: contextoProjeto.arquivosProjeto,
53
- arquivosDescobertos: contextoProjeto.arquivosDescobertos,
54
66
  modulos: contextoProjeto.modulosSelecionados.map((item) => ({
55
67
  caminho: item.caminho,
56
68
  modulo: item.resultado.modulo?.nome ?? null,
57
69
  sucesso: !temErros(item.resultado.diagnosticos),
58
70
  diagnosticos: item.resultado.diagnosticos.length,
59
71
  superficies: item.resultado.ir?.superficies.map((superficie) => `${superficie.tipo}:${superficie.nome}`) ?? [],
60
- tasks: item.resultado.ir?.tasks.map((task) => task.nome) ?? [],
61
- vinculos: item.resultado.ir
62
- ? [
63
- ...item.resultado.ir.vinculos,
64
- ...item.resultado.ir.tasks.flatMap((task) => task.vinculos),
65
- ...item.resultado.ir.flows.flatMap((flow) => flow.vinculos),
66
- ...item.resultado.ir.routes.flatMap((route) => route.vinculos),
67
- ...item.resultado.ir.superficies.flatMap((superficie) => superficie.vinculos),
68
- ]
69
- : [],
70
- arquivosEsperados: item.resultado.ir
71
- ? [...new Set([
72
- ...item.resultado.ir.vinculos,
73
- ...item.resultado.ir.tasks.flatMap((task) => task.vinculos),
74
- ...item.resultado.ir.flows.flatMap((flow) => flow.vinculos),
75
- ...item.resultado.ir.routes.flatMap((route) => route.vinculos),
76
- ...item.resultado.ir.superficies.flatMap((superficie) => superficie.vinculos),
77
- ].flatMap((vinculo) => [
78
- vinculo.arquivo,
79
- vinculo.tipo === "arquivo" ? vinculo.valor : undefined,
80
- ]).filter((arquivo) => Boolean(arquivo)))]
81
- .sort((a, b) => a.localeCompare(b, "pt-BR"))
82
- : [],
83
- implementacao: driftExecutado
72
+ implementacao: resultadoDrift
84
73
  ? resumirDriftPorModulo(item.resultado.modulo?.nome ?? null, item.caminho, resultadoDrift)
85
74
  : null,
86
75
  })),
87
76
  },
88
77
  };
78
+ const codigoSaida = resultadoDrift?.sucesso === false ? 1 : 0;
89
79
  if (emJson) {
90
80
  console.log(JSON.stringify(payload, null, 2));
91
- return 0;
81
+ return codigoSaida;
92
82
  }
93
- console.log("Inspecao de projeto Sema");
83
+ console.log("Inspeção de projeto Sema");
94
84
  console.log(`- Entrada: ${payload.entrada}`);
95
- console.log(`- Configuracao: ${payload.configuracao.caminho ?? "nenhuma"}`);
85
+ console.log(`- Configuração: ${payload.configuracao.caminho ?? "nenhuma"}`);
96
86
  console.log(`- Base do projeto: ${payload.configuracao.baseProjeto}`);
97
87
  console.log(`- Framework: ${payload.configuracao.framework}`);
98
88
  console.log(`- Estrutura de saida: ${payload.configuracao.estruturaSaida}`);
99
89
  console.log(`- Alvos: ${payload.configuracao.alvos.join(", ")}`);
100
- console.log(`- Modo de adocao: ${payload.configuracao.modoAdocao}`);
90
+ console.log(`- Modo de adoção: ${payload.configuracao.modoAdocao}`);
101
91
  console.log(`- Análise de drift: ${payload.configuracao.analiseDrift.modo} (${payload.configuracao.analiseDrift.executada ? "executada" : "não executada"})`);
102
92
  if (payload.configuracao.analiseDrift.executada) {
103
- console.log(`- Score medio de drift: ${payload.configuracao.scoreDrift}`);
104
- console.log(`- Confianca geral: ${payload.configuracao.confiancaGeral}`);
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}`);
105
96
  }
106
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");
107
101
  console.log(`- Aviso: ${payload.configuracao.analiseDrift.aviso}`);
108
102
  }
109
- console.log("- Saidas por alvo:");
103
+ console.log("- Saídas por alvo:");
110
104
  for (const [alvo, saida] of Object.entries(payload.configuracao.saidas)) {
111
105
  console.log(` - ${alvo}: ${saida}`);
112
106
  }
@@ -114,22 +108,16 @@ export async function comandoInspecionar(entrada, emJson, cwd = process.cwd(), a
114
108
  for (const origem of payload.configuracao.origens) {
115
109
  console.log(` - ${origem}`);
116
110
  }
117
- console.log("- Diretorios de codigo:");
111
+ console.log("- Diretórios de código:");
118
112
  for (const diretorio of payload.configuracao.diretoriosCodigo) {
119
113
  console.log(` - ${diretorio}`);
120
114
  }
121
115
  console.log(`- Fontes de legado detectadas: ${payload.configuracao.fontesLegado.join(", ") || "nenhuma"}`);
122
- console.log(`- Contratos carregados: ${payload.projeto.arquivos.length}`);
123
- console.log(`- Contratos descobertos: ${payload.projeto.arquivosDescobertos.length}`);
124
- console.log("- Modulos selecionados:");
116
+ console.log("- Módulos selecionados:");
125
117
  for (const modulo of payload.projeto.modulos) {
126
118
  console.log(` - ${modulo.modulo ?? "(sem modulo)"} :: ${modulo.caminho} :: diagnosticos=${modulo.diagnosticos}`);
127
- console.log(` tasks=${modulo.tasks.length} vinculos=${modulo.vinculos.length} arquivos esperados=${modulo.arquivosEsperados.length}`);
128
- for (const arquivoEsperado of modulo.arquivosEsperados.slice(0, 8)) {
129
- console.log(` arquivo esperado: ${arquivoEsperado}`);
130
- }
131
119
  if (modulo.implementacao) {
132
- console.log(` impls validos=${modulo.implementacao.implsValidos} quebrados=${modulo.implementacao.implsQuebrados} recursos divergentes=${modulo.implementacao.recursosDivergentesCount} sem_impl=${modulo.implementacao.tasksSemImplementacao}`);
120
+ console.log(` impls válidos=${modulo.implementacao.implsValidos} quebrados=${modulo.implementacao.implsQuebrados} recursos divergentes=${modulo.implementacao.recursosDivergentesCount} sem_impl=${modulo.implementacao.tasksSemImplementacao}`);
133
121
  for (const arquivoRelacionado of modulo.implementacao.arquivosRelacionados.slice(0, 5)) {
134
122
  console.log(` arquivo relacionado: ${arquivoRelacionado}`);
135
123
  }
@@ -138,11 +126,14 @@ export async function comandoInspecionar(entrada, emJson, cwd = process.cwd(), a
138
126
  console.log(" implementação: não verificada neste modo");
139
127
  }
140
128
  }
141
- return 0;
129
+ return codigoSaida;
142
130
  }
143
131
  export async function comandoDrift(entrada, args, emJson, cwd = process.cwd()) {
144
132
  const opcoes = resolverOpcoesDriftCli(args);
145
- const contextoProjeto = await carregarProjeto(entrada, cwd, { escopo: opcoes.escopo });
133
+ const contextoProjeto = await carregarProjeto(entrada, cwd, {
134
+ escopo: opcoes.escopo,
135
+ adiarDescobertaCodigo: opcoes.escopo !== "projeto",
136
+ });
146
137
  const resultado = await analisarDriftLegado(contextoProjeto, opcoes);
147
138
  if (emJson) {
148
139
  console.log(JSON.stringify(resultado, null, 2));
@@ -150,18 +141,29 @@ export async function comandoDrift(entrada, args, emJson, cwd = process.cwd()) {
150
141
  }
151
142
  console.log("Drift entre Sema e codigo legado");
152
143
  console.log(`- Escopo aplicado: ${resultado.escopo_aplicado.escopo}`);
153
- console.log(`- Estrategia fisica: ${resultado.escopo_aplicado.estrategia ?? "legado"}`);
154
- console.log(`- Cobertura: ${resultado.escopo_aplicado.cobertura ?? "nao informada"}`);
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"}`);
155
146
  console.log(`- Arquivos planejados: ${resultado.escopo_aplicado.arquivosPlanejados?.length ?? 0}`);
156
- console.log(`- Cache: ${resultado.escopo_aplicado.cache?.politica ?? "nao informado"} (${resultado.escopo_aplicado.cache?.origem ?? "nao informado"})`);
157
- console.log(`- Catálogo: ${resultado.escopo_aplicado.catalogo?.arquivosCatalogados ?? 0} arquivos, ${resultado.escopo_aplicado.catalogo?.diretoriosVisitados ?? 0} diretórios visitados, ${resultado.escopo_aplicado.catalogo?.leiturasConteudo ?? 0} leituras`);
158
- const cacheIncremental = resultado.escopo_aplicado.cache?.incremental;
159
- if (cacheIncremental) {
160
- console.log(`- Cache incremental: ${cacheIncremental.metadataHits} metadata hits, ${cacheIncremental.contentHits} content hits, ${cacheIncremental.groupHits} grupos reutilizados, ${cacheIncremental.groupMisses} grupos recalculados`);
161
- }
162
- const fases = resultado.escopo_aplicado.cache?.fasesMs;
163
- if (fases) {
164
- console.log(`- Fases: plano ${fases.planejamento}ms, catálogo ${fases.catalogacao}ms, dependências ${fases.dependencias}ms, assinaturas ${fases.assinaturas}ms, índices ${fases.indexacao}ms, total ${fases.total}ms`);
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
+ }
165
167
  }
166
168
  console.log(`- Ignorar worktrees: ${resultado.escopo_aplicado.ignorarWorktrees ? "sim" : "nao"}`);
167
169
  console.log(`- Ignorar consumidores laterais: ${resultado.escopo_aplicado.ignorarConsumidoresLaterais ? "sim" : "nao"}`);
@@ -251,10 +253,10 @@ export async function comandoImpacto(entrada, args, emJson, cwd = process.cwd())
251
253
  return 1;
252
254
  }
253
255
  const opcoes = resolverOpcoesDriftCli(args);
254
- if (!obterOpcao(args, "--escopo")) {
255
- opcoes.escopo = entrada?.toLowerCase().endsWith(".sema") ? "modulo" : "projeto";
256
- }
257
- const contextoProjeto = await carregarProjeto(entrada, cwd, { escopo: opcoes.escopo });
256
+ const contextoProjeto = await carregarProjeto(entrada, cwd, {
257
+ escopo: opcoes.escopo,
258
+ adiarDescobertaCodigo: opcoes.escopo !== "projeto",
259
+ });
258
260
  const resultado = await gerarMapaImpactoSemantico(contextoProjeto, alvoSemantico, obterOpcao(args, "--mudanca", `avaliar impacto de ${alvoSemantico}`), opcoes);
259
261
  if (emJson) {
260
262
  console.log(JSON.stringify(resultado, null, 2));
@@ -289,10 +291,10 @@ export async function comandoRenomearSemantico(entrada, args, emJson, cwd = proc
289
291
  return 1;
290
292
  }
291
293
  const opcoes = resolverOpcoesDriftCli(args);
292
- if (!obterOpcao(args, "--escopo")) {
293
- opcoes.escopo = entrada?.toLowerCase().endsWith(".sema") ? "modulo" : "projeto";
294
- }
295
- const contextoProjeto = await carregarProjeto(entrada, cwd, { escopo: opcoes.escopo });
294
+ const contextoProjeto = await carregarProjeto(entrada, cwd, {
295
+ escopo: opcoes.escopo,
296
+ adiarDescobertaCodigo: opcoes.escopo !== "projeto",
297
+ });
296
298
  const resultado = await assistirRenomeacaoSemantica(contextoProjeto, nomeAtual, nomeNovo, opcoes);
297
299
  if (emJson) {
298
300
  console.log(JSON.stringify(resultado, null, 2));