@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,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: tipa contexto e evidência de drift opcional sem fabricar métricas.
3
3
  import { readFile } from "node:fs/promises";
4
4
  import path from "node:path";
5
5
  import { LIMITE_AVISO_LINHAS_CODIGO_GOVERNADO, LIMITE_AVISO_LINHAS_CONTRATO_SEMA, LIMITE_BLOQUEIO_LINHAS_CODIGO_GOVERNADO, LIMITE_BLOQUEIO_LINHAS_CONTRATO_SEMA, } from "./driftOrcamento.js";
@@ -27,8 +27,13 @@ export function descreverFazModulo(ir, modulo) {
27
27
  }
28
28
  export function coletarResumoSemanticoModulo(contexto) {
29
29
  const { arquivo, modulo, geradoEm, ir, briefing, drift } = contexto;
30
- const modoVerificacaoCodigo = contexto.modoVerificacaoCodigo ?? "codigo_completo";
31
- const fontesConclusao = contexto.fontesConclusao ?? ["contrato", "codigo"];
30
+ const driftExecutado = drift.executada && drift.resumo !== null && drift.drift !== null;
31
+ const modoVerificacaoCodigo = driftExecutado
32
+ ? (contexto.modoVerificacaoCodigo ?? "codigo_completo")
33
+ : "contratos_apenas";
34
+ const fontesConclusao = driftExecutado
35
+ ? (contexto.fontesConclusao ?? ["contrato", "codigo"])
36
+ : ["contrato"];
32
37
  const tarefas = ir?.tasks ?? [];
33
38
  const rotas = ir?.routes ?? [];
34
39
  const superficies = ir?.superficies ?? [];
@@ -58,7 +63,7 @@ export function coletarResumoSemanticoModulo(contexto) {
58
63
  modulo,
59
64
  modoVerificacaoCodigo,
60
65
  avisoVerificacaoCodigo: modoVerificacaoCodigo === "contratos_apenas"
61
- ? "Somente contratos foram enviados; implementacao nao foi verificada neste modo."
66
+ ? "Somente contratos foram analisados; a implementação não foi verificada neste modo."
62
67
  : modoVerificacaoCodigo === "codigo_selecionado"
63
68
  ? "Codigo selecionado foi enviado; conclusoes de implementacao valem apenas para os arquivos do snapshot."
64
69
  : null,
@@ -66,7 +71,7 @@ export function coletarResumoSemanticoModulo(contexto) {
66
71
  perfilCompatibilidade: ir?.perfilCompatibilidade ?? briefing.perfilCompatibilidade,
67
72
  scoreSemantico: briefing.scoreSemantico,
68
73
  confiancaGeral: briefing.confiancaGeral,
69
- riscoOperacional: calcularRiscoOperacionalResumo(drift.resumo),
74
+ riscoOperacional: drift.resumo ? calcularRiscoOperacionalResumo(drift.resumo) : "nao_avaliado",
70
75
  faz: descreverFazModulo(ir, modulo),
71
76
  tarefasPrincipais: limitarLista(tarefas.map((task) => task.nome), 6),
72
77
  entradasChave: limitarLista(tarefas.map((task) => resumirCamposTask(task, "input", 4)), 4),
@@ -86,8 +91,8 @@ export function coletarResumoSemanticoModulo(contexto) {
86
91
  inferido: limitarLista(unicosOrdenados(briefing.oQueFoiInferido), 6),
87
92
  checksSugeridos: limitarLista(unicosOrdenados(briefing.oQueValidar), 6),
88
93
  testesMinimos: limitarLista(unicosOrdenados(briefing.testesMinimos), 6),
89
- consumerFramework: briefing.consumerFramework ?? drift.drift.consumerFramework ?? null,
90
- appRoutes: limitarLista(unicosOrdenados(briefing.appRoutes ?? drift.drift.appRoutes ?? []), 8),
94
+ consumerFramework: briefing.consumerFramework ?? drift.drift?.consumerFramework ?? null,
95
+ appRoutes: limitarLista(unicosOrdenados(briefing.appRoutes ?? drift.drift?.appRoutes ?? []), 8),
91
96
  consumerSurfaces: limitarLista(unicosOrdenados(briefing.consumerSurfaces ?? []), 8),
92
97
  consumerBridges: limitarLista(unicosOrdenados(briefing.consumerBridges ?? []), 8),
93
98
  ancoragensVinculo: limitarLista(unicosOrdenados(briefing.ancoragensVinculo ?? []), 8),
@@ -116,6 +121,10 @@ export function normalizarResumoModoContratosApenas(resumo) {
116
121
  .filter((check) => !/drift|vinculo/i.test(check));
117
122
  return {
118
123
  ...resumo,
124
+ appRoutes: modoContratosApenas ? null : resumo.appRoutes,
125
+ consumerSurfaces: modoContratosApenas ? null : resumo.consumerSurfaces,
126
+ consumerBridges: modoContratosApenas ? null : resumo.consumerBridges,
127
+ ancoragensVinculo: modoContratosApenas ? null : resumo.ancoragensVinculo,
119
128
  riscosPrincipais: limitarLista(unicosOrdenados([
120
129
  ...riscosPrincipais,
121
130
  ...(riscosCodigo || lacunasCodigo ? ["codigo_nao_verificado_neste_modo"] : []),
@@ -177,6 +186,8 @@ export function descreverFontesConclusao(fontes, modo) {
177
186
  }
178
187
  export function renderizarResumoModuloTexto(resumo, tamanho, modo) {
179
188
  const limite = tamanho === "micro" ? 2 : tamanho === "curto" ? 4 : 6;
189
+ const consumerAvaliado = resumo.modoVerificacaoCodigo !== "contratos_apenas";
190
+ const resumirEvidenciaLista = (itens) => itens === null ? "não avaliado" : resumirListaTexto(itens, limite);
180
191
  const linhas = [
181
192
  `MODO: ${modo}`,
182
193
  `MODULO: ${resumo.modulo}`,
@@ -185,11 +196,11 @@ export function renderizarResumoModuloTexto(resumo, tamanho, modo) {
185
196
  `MODO_CODIGO: ${resumo.modoVerificacaoCodigo}`,
186
197
  ...(resumo.avisoVerificacaoCodigo ? [`AVISO_CODIGO: ${resumo.avisoVerificacaoCodigo}`] : []),
187
198
  `FONTES_CONCLUSAO: ${resumirListaTexto(resumo.fontesConclusao, limite)}`,
188
- `CONSUMER_FRAMEWORK: ${resumo.consumerFramework ?? "nenhum"}`,
189
- `APP_ROUTES: ${resumirListaTexto(resumo.appRoutes, limite)}`,
190
- `CONSUMER_SURFACES: ${resumirListaTexto(resumo.consumerSurfaces, limite)}`,
191
- `CONSUMER_BRIDGES: ${resumirListaTexto(resumo.consumerBridges, limite)}`,
192
- `ANCORAGEM_VINCULO: ${resumirListaTexto(resumo.ancoragensVinculo, limite)}`,
199
+ `CONSUMER_FRAMEWORK: ${resumo.consumerFramework ?? (consumerAvaliado ? "nenhum" : "não avaliado")}`,
200
+ `APP_ROUTES: ${resumirEvidenciaLista(resumo.appRoutes)}`,
201
+ `CONSUMER_SURFACES: ${resumirEvidenciaLista(resumo.consumerSurfaces)}`,
202
+ `CONSUMER_BRIDGES: ${resumirEvidenciaLista(resumo.consumerBridges)}`,
203
+ `ANCORAGEM_VINCULO: ${resumirEvidenciaLista(resumo.ancoragensVinculo)}`,
193
204
  `PUBLICO: ${resumirListaTexto(resumo.superficiesPublicas, limite)}`,
194
205
  `TAREFAS: ${resumirListaTexto(resumo.tarefasPrincipais, limite)}`,
195
206
  `ENTRADAS: ${resumirListaTexto(resumo.entradasChave, limite)}`,
@@ -203,9 +214,9 @@ export function renderizarResumoModuloTexto(resumo, tamanho, modo) {
203
214
  `RISCOS: ${resumirListaTexto(resumo.riscosPrincipais, limite)}`,
204
215
  `LACUNAS: ${resumirListaTexto(resumo.lacunas, limite)}`,
205
216
  `INFERIDO: ${resumirListaTexto(resumo.inferido, limite)}`,
206
- `CONFIANCA: ${resumo.confiancaGeral}`,
217
+ `CONFIANCA: ${resumo.confiancaGeral ?? "não avaliada"}`,
207
218
  `RISCO_OPERACIONAL: ${resumo.riscoOperacional}`,
208
- `SCORE: ${resumo.scoreSemantico}`,
219
+ `SCORE: ${resumo.scoreSemantico ?? "não avaliado"}`,
209
220
  `GERADO_EM: ${resumo.geradoEm}`,
210
221
  ];
211
222
  if (tamanho === "micro") {
@@ -214,6 +225,9 @@ export function renderizarResumoModuloTexto(resumo, tamanho, modo) {
214
225
  return `${linhas.join("\n")}\n`;
215
226
  }
216
227
  export function renderizarResumoModuloMarkdown(resumo, modo, guiaPorCapacidade) {
228
+ const consumerAvaliado = resumo.modoVerificacaoCodigo !== "contratos_apenas";
229
+ const resumirEvidenciaLista = (itens) => itens === null ? "não avaliado" : resumirListaTexto(itens, 6);
230
+ const exibirConsumer = resumo.consumerFramework !== null || resumo.appRoutes === null;
217
231
  const linhas = [
218
232
  `# Resumo Sema para ${resumo.modulo}`,
219
233
  "",
@@ -224,8 +238,8 @@ export function renderizarResumoModuloMarkdown(resumo, modo, guiaPorCapacidade)
224
238
  `- Modo de codigo: \`${resumo.modoVerificacaoCodigo}\``,
225
239
  ...(resumo.avisoVerificacaoCodigo ? [`- Aviso de codigo: ${resumo.avisoVerificacaoCodigo}`] : []),
226
240
  `- Fontes de conclusao: ${resumirListaTexto(resumo.fontesConclusao, 6)}`,
227
- `- Score: \`${resumo.scoreSemantico}\``,
228
- `- Confianca: \`${resumo.confiancaGeral}\``,
241
+ `- Score: \`${resumo.scoreSemantico ?? "não avaliado"}\``,
242
+ `- Confiança: \`${resumo.confiancaGeral ?? "não avaliada"}\``,
229
243
  `- Risco operacional: \`${resumo.riscoOperacional}\``,
230
244
  "",
231
245
  "## O que este modulo faz",
@@ -243,14 +257,14 @@ export function renderizarResumoModuloMarkdown(resumo, modo, guiaPorCapacidade)
243
257
  `- Erros: ${resumirListaTexto(resumo.erros, 6)}`,
244
258
  `- Entidades afetadas: ${resumirListaTexto(resumo.entidadesAfetadas, 6)}`,
245
259
  "",
246
- ...(resumo.consumerFramework
260
+ ...(exibirConsumer
247
261
  ? [
248
262
  "## Consumer IA-first",
249
263
  "",
250
- `- Framework consumer: ${resumo.consumerFramework}`,
251
- `- Rotas de app: ${resumirListaTexto(resumo.appRoutes, 6)}`,
252
- `- Superficies consumer: ${resumirListaTexto(resumo.consumerSurfaces, 6)}`,
253
- `- Bridges consumer: ${resumirListaTexto(resumo.consumerBridges, 6)}`,
264
+ `- Framework consumer: ${resumo.consumerFramework ?? (consumerAvaliado ? "nenhum" : "não avaliado")}`,
265
+ `- Rotas de app: ${resumirEvidenciaLista(resumo.appRoutes)}`,
266
+ `- Superficies consumer: ${resumirEvidenciaLista(resumo.consumerSurfaces)}`,
267
+ `- Bridges consumer: ${resumirEvidenciaLista(resumo.consumerBridges)}`,
254
268
  "",
255
269
  ]
256
270
  : []),
@@ -320,27 +334,27 @@ export function criarBriefingMinimo(resumo, modo, tamanho) {
320
334
  }
321
335
  export function criarPromptCurtoModulo(resumo, modo, tamanho, capacidade) {
322
336
  const resumoTexto = renderizarResumoModuloTexto(resumo, tamanho, modo).trim();
323
- return `Você está operando Sema em modo IA-first.
324
-
325
- Esta linguagem existe para traduzir intenção operacional em contrato consumível por IA. Humanos aprovam; agentes operam.
326
-
327
- Capacidade alvo: ${capacidade}
328
- Modo da tarefa: ${modo}
329
-
330
- Regras:
331
- - não invente sintaxe nem bloco fora da gramática oficial
332
- - preserve a intenção do contrato
333
- - use este resumo como fonte compacta inicial
334
- - se a tarefa pedir mais contexto, rode \`sema contexto-ia <arquivo.sema> --saida <diretorio> --json\` e então abra \`briefing.min.json\`, \`drift.json\` e \`ir.json\` nessa saída
335
- - não saia editando software vivo sem olhar risco, lacuna e checks sugeridos
336
- - se abrir código com \`SEMA-GOVERNED\`, volte ao contrato e chame Sema antes de editar
337
- - não crie nem conclua código governado acima de ${LIMITE_BLOQUEIO_LINHAS_CODIGO_GOVERNADO} linhas; acima de ${LIMITE_AVISO_LINHAS_CODIGO_GOVERNADO}, planeje divisão; documentação Markdown não entra nesse limite de código
338
- - não crie nem edite contrato .sema acima de ${LIMITE_BLOQUEIO_LINHAS_CONTRATO_SEMA} linhas; acima de ${LIMITE_AVISO_LINHAS_CONTRATO_SEMA}, planeje split por domínio/capacidade, nunca parte_1/parte_2
339
- - vários contratos .sema podem governar o mesmo arquivo por vinculos; Sema Código deve preservar essa rastreabilidade
340
- ${resumo.consumerFramework ? "- se for tarefa visual consumer, priorize `appRoutes`, `consumerSurfaces` e `consumerBridges` antes de abrir arquivos aleatórios" : ""}
341
-
342
- Contexto compacto:
343
- ${resumoTexto}
337
+ return `Você está operando Sema em modo IA-first.
338
+
339
+ Esta linguagem existe para traduzir intenção operacional em contrato consumível por IA. Humanos aprovam; agentes operam.
340
+
341
+ Capacidade alvo: ${capacidade}
342
+ Modo da tarefa: ${modo}
343
+
344
+ Regras:
345
+ - não invente sintaxe nem bloco fora da gramática oficial
346
+ - preserve a intenção do contrato
347
+ - use este resumo como fonte compacta inicial
348
+ - se a tarefa pedir mais contexto, rode \`sema contexto-ia <arquivo.sema> --saida <diretorio> --json\` e então abra \`briefing.min.json\`, \`drift.json\` e \`ir.json\` nessa saída
349
+ - não saia editando software vivo sem olhar risco, lacuna e checks sugeridos
350
+ - se abrir código com \`SEMA-GOVERNED\`, volte ao contrato e chame Sema antes de editar
351
+ - não crie nem conclua código governado acima de ${LIMITE_BLOQUEIO_LINHAS_CODIGO_GOVERNADO} linhas; acima de ${LIMITE_AVISO_LINHAS_CODIGO_GOVERNADO}, planeje divisão; documentação Markdown não entra nesse limite de código
352
+ - não crie nem edite contrato .sema acima de ${LIMITE_BLOQUEIO_LINHAS_CONTRATO_SEMA} linhas; acima de ${LIMITE_AVISO_LINHAS_CONTRATO_SEMA}, planeje split por domínio/capacidade, nunca parte_1/parte_2
353
+ - vários contratos .sema podem governar o mesmo arquivo por vinculos; Sema Código deve preservar essa rastreabilidade
354
+ ${resumo.consumerFramework ? "- se for tarefa visual consumer, priorize `appRoutes`, `consumerSurfaces` e `consumerBridges` antes de abrir arquivos aleatórios" : ""}
355
+
356
+ Contexto compacto:
357
+ ${resumoTexto}
344
358
  `;
345
359
  }
346
360
  //# sourceMappingURL=index.part02.js.map
@@ -2,6 +2,7 @@ import { type IrModulo } from "@sema/nucleo";
2
2
  import { analisarDriftLegado } from "./drift.js";
3
3
  import { type GuiaCapacidadeIaMap } from './agentContextTipos.js';
4
4
  import { PacoteContextoModuloIa, ResumoSemanticoModuloIa } from "./index.part01.js";
5
+ import type { ResolucaoModoCacheDrift } from "./driftCacheModes.js";
5
6
  export declare function renderizarResumoProjetoMarkdown(geradoEm: string, modulos: ResumoSemanticoModuloIa[], guiaPorCapacidade: GuiaCapacidadeIaMap): string;
6
7
  export declare function falharContextoIa(mensagem: string): never;
7
8
  export declare function garantirArquivoSema(caminhoArquivo: string): void;
@@ -52,7 +53,28 @@ export declare function criarBriefingAgente(arquivo: string, modulo: string, ir:
52
53
  ancoragensVinculo: string[];
53
54
  testesMinimos: string[];
54
55
  };
55
- export declare function carregarContextoModuloIa(arquivoEntrada: string): Promise<PacoteContextoModuloIa>;
56
+ export declare function criarBriefingAgenteContratos(arquivo: string, modulo: string, ir: IrModulo | null): {
57
+ arquivo: string;
58
+ modulo: string;
59
+ perfilCompatibilidade: import("@sema/nucleo").PerfilCompatibilidade;
60
+ scoreSemantico: null;
61
+ confiancaGeral: null;
62
+ riscosPrincipais: string[];
63
+ oQueTocar: string[];
64
+ arquivosProvaveisEditar: string[];
65
+ oQueValidar: string[];
66
+ oQueEstaFrouxo: never[];
67
+ oQueFoiInferido: string[];
68
+ simbolosRelacionados: string[];
69
+ superficiesImpactadas: string[];
70
+ consumerFramework: null;
71
+ appRoutes: never[];
72
+ consumerSurfaces: never[];
73
+ consumerBridges: never[];
74
+ ancoragensVinculo: never[];
75
+ testesMinimos: string[];
76
+ };
77
+ export declare function carregarContextoModuloIa(arquivoEntrada: string, analiseDrift?: ResolucaoModoCacheDrift): Promise<PacoteContextoModuloIa>;
56
78
  export declare const ARQUIVOS_RESUMO_MODULO_IA: readonly ["SEMA_BOOT.md", "SEMA_SMALL_MODEL.md", "agent-context-pack.json", "resumo.micro.txt", "resumo.curto.txt", "resumo.md", "briefing.min.json", "prompt-curto.txt"];
57
79
  export declare function gerarArquivosResumoModuloIa(contexto: PacoteContextoModuloIa, pastaBase: string): Promise<{
58
80
  artefatosCompactos: string[];
@@ -82,7 +82,7 @@ export function renderizarResumoProjetoMarkdown(geradoEm, modulos, guiaPorCapaci
82
82
  linhas.push(`- Faz: ${modulo.faz}`);
83
83
  linhas.push(`- Publico: ${resumirListaTexto(modulo.superficiesPublicas, 4)}`);
84
84
  linhas.push(`- Tocar: ${resumirListaTexto(modulo.arquivosProvaveis, 4)}`);
85
- linhas.push(`- Score: ${modulo.scoreSemantico} | Confianca: ${modulo.confiancaGeral} | Risco: ${modulo.riscoOperacional}`);
85
+ linhas.push(`- Score: ${modulo.scoreSemantico ?? "não avaliado"} | Confiança: ${modulo.confiancaGeral ?? "não avaliada"} | Risco: ${modulo.riscoOperacional}`);
86
86
  linhas.push(`- Lacunas: ${resumirListaTexto(modulo.lacunas, 4)}`);
87
87
  linhas.push("");
88
88
  }
@@ -248,15 +248,74 @@ export function criarBriefingAgente(arquivo, modulo, ir, resumoDrift, resultadoD
248
248
  ancoragensVinculo: resumoDrift.ancoragensVinculo,
249
249
  testesMinimos: [
250
250
  "sema validar <arquivo> --json",
251
- "sema drift <arquivo> --json",
251
+ "sema drift <arquivo> --cache fresh --json",
252
252
  "sema verificar <arquivo-ou-pasta> --json",
253
253
  ],
254
254
  };
255
255
  }
256
- export async function carregarContextoModuloIa(arquivoEntrada) {
256
+ export function criarBriefingAgenteContratos(arquivo, modulo, ir) {
257
+ const vinculos = ir
258
+ ? [
259
+ ...ir.vinculos,
260
+ ...ir.tasks.flatMap((task) => task.vinculos),
261
+ ...ir.flows.flatMap((flow) => flow.vinculos),
262
+ ...ir.routes.flatMap((route) => route.vinculos),
263
+ ...ir.superficies.flatMap((superficie) => superficie.vinculos),
264
+ ]
265
+ : [];
266
+ const arquivosDeclarados = [...new Set(vinculos.flatMap((vinculo) => [
267
+ vinculo.arquivo,
268
+ vinculo.tipo === "arquivo" ? vinculo.valor : undefined,
269
+ ]).filter((valor) => Boolean(valor)))]
270
+ .sort((a, b) => a.localeCompare(b, "pt-BR"));
271
+ const simbolosDeclarados = [...new Set(vinculos
272
+ .map((vinculo) => vinculo.simbolo)
273
+ .filter((valor) => Boolean(valor)))]
274
+ .sort((a, b) => a.localeCompare(b, "pt-BR"));
275
+ return {
276
+ arquivo,
277
+ modulo,
278
+ perfilCompatibilidade: ir?.perfilCompatibilidade ?? "interno",
279
+ scoreSemantico: null,
280
+ confiancaGeral: null,
281
+ riscosPrincipais: [...new Set(ir?.resumoAgente.riscos ?? [])],
282
+ oQueTocar: arquivosDeclarados,
283
+ arquivosProvaveisEditar: arquivosDeclarados,
284
+ oQueValidar: [...new Set([
285
+ ...(ir?.resumoAgente.checks ?? []),
286
+ ...(ir?.tasks.flatMap((task) => task.resumoAgente.checks) ?? []),
287
+ "executar drift antes de concluir sobre a implementação",
288
+ ])],
289
+ oQueEstaFrouxo: [],
290
+ oQueFoiInferido: ["modo_contratos_apenas", "implementacao_nao_verificada"],
291
+ simbolosRelacionados: simbolosDeclarados,
292
+ superficiesImpactadas: [
293
+ ...(ir?.routes.map((route) => `${route.metodo ?? "?"} ${route.caminho ?? route.nome}`) ?? []),
294
+ ...(ir?.superficies.map((superficie) => `${superficie.tipo}:${superficie.nome}`) ?? []),
295
+ ],
296
+ consumerFramework: null,
297
+ appRoutes: [],
298
+ consumerSurfaces: [],
299
+ consumerBridges: [],
300
+ ancoragensVinculo: [],
301
+ testesMinimos: [
302
+ "sema validar <arquivo> --json",
303
+ "sema drift <arquivo> --cache fresh --json",
304
+ ],
305
+ };
306
+ }
307
+ const ANALISE_DRIFT_PADRAO_CONTEXTO = {
308
+ modo: "fresh",
309
+ executar: true,
310
+ avisos: [],
311
+ };
312
+ export async function carregarContextoModuloIa(arquivoEntrada, analiseDrift = ANALISE_DRIFT_PADRAO_CONTEXTO) {
257
313
  const arquivo = path.resolve(arquivoEntrada);
258
314
  garantirArquivoSema(arquivo);
259
- const contextoProjeto = await carregarProjeto(arquivo, process.cwd());
315
+ const contextoProjeto = await carregarProjeto(arquivo, process.cwd(), {
316
+ escopo: "modulo",
317
+ adiarDescobertaCodigo: true,
318
+ });
260
319
  const resultadoModulo = contextoProjeto.modulosSelecionados.find((item) => path.resolve(item.caminho) === arquivo)?.resultado;
261
320
  if (!resultadoModulo) {
262
321
  falharContextoIa(`Nao foi possivel encontrar o modulo correspondente ao arquivo ${arquivo}.`);
@@ -264,13 +323,27 @@ export async function carregarContextoModuloIa(arquivoEntrada) {
264
323
  const sucesso = !temErros(resultadoModulo.diagnosticos);
265
324
  const modulo = resultadoModulo.modulo?.nome ?? path.basename(arquivo, ".sema");
266
325
  const geradoEm = new Date().toISOString();
267
- const resultadoDrift = await analisarDriftLegado(contextoProjeto);
326
+ const resultadoDrift = analiseDrift.executar
327
+ ? await analisarDriftLegado(contextoProjeto, {
328
+ escopo: "modulo",
329
+ modoCache: analiseDrift.modo,
330
+ avisosModoCache: analiseDrift.avisos,
331
+ })
332
+ : null;
333
+ const resumoDrift = resultadoDrift
334
+ ? resumirDriftPorModulo(resultadoModulo.modulo?.nome ?? null, arquivo, resultadoDrift)
335
+ : null;
268
336
  const drift = {
269
337
  comando: "drift",
270
338
  caminho: arquivo,
271
339
  modulo: resultadoModulo.modulo?.nome ?? null,
272
- sucesso: resultadoDrift.sucesso,
273
- resumo: resumirDriftPorModulo(resultadoModulo.modulo?.nome ?? null, arquivo, resultadoDrift),
340
+ modo: analiseDrift.modo,
341
+ executada: analiseDrift.executar,
342
+ sucesso: resultadoDrift?.sucesso ?? null,
343
+ aviso: analiseDrift.executar
344
+ ? null
345
+ : "Análise de drift não executada; implementação, vínculos e rotas não foram verificados.",
346
+ resumo: resumoDrift,
274
347
  drift: resultadoDrift,
275
348
  };
276
349
  const validar = {
@@ -307,7 +380,9 @@ export async function carregarContextoModuloIa(arquivoEntrada) {
307
380
  diagnosticos: resultadoModulo.diagnosticos,
308
381
  ir: resultadoModulo.ir ?? null,
309
382
  };
310
- const briefing = criarBriefingAgente(arquivo, modulo, resultadoModulo.ir ?? null, drift.resumo, resultadoDrift);
383
+ const briefing = resultadoDrift && resumoDrift
384
+ ? criarBriefingAgente(arquivo, modulo, resultadoModulo.ir ?? null, resumoDrift, resultadoDrift)
385
+ : criarBriefingAgenteContratos(arquivo, modulo, resultadoModulo.ir ?? null);
311
386
  return {
312
387
  arquivo,
313
388
  modulo,
@@ -1,7 +1,8 @@
1
1
  import { type GuiaCapacidadeIaMap } from './agentContextTipos.js';
2
- import { ContextoIaGerado, ResumoSemanticoModuloIa } from "./index.part01.js";
2
+ import { ContextoIaGerado, ResumoSemanticoModuloIa, type ResultadoDriftIa } from "./index.part01.js";
3
+ import type { ResolucaoModoCacheDrift } from "./driftCacheModes.js";
3
4
  export declare const ARQUIVOS_RESUMO_PROJETO_IA: readonly ["SEMA_BOOT.md", "SEMA_SMALL_MODEL.md", "SEMA_BRIEF.md", "SEMA_BRIEF.micro.txt", "SEMA_BRIEF.curto.txt", "SEMA_INDEX.json", "AGENT_CONTEXT_PACK.json", "docs/ai-integration.md"];
4
- export declare function gerarResumoProjetoIa(entrada: string | undefined, pastaSaidaOpcional?: string, escreverNaRaiz?: boolean): Promise<{
5
+ export declare function gerarResumoProjetoIa(entrada: string | undefined, pastaSaidaOpcional?: string, escreverNaRaiz?: boolean, analiseDrift?: ResolucaoModoCacheDrift): Promise<{
5
6
  geradoEm: string;
6
7
  baseProjeto: string;
7
8
  pastaSaida: string;
@@ -9,6 +10,13 @@ export declare function gerarResumoProjetoIa(entrada: string | undefined, pastaS
9
10
  artefatos: string[];
10
11
  modulos: ResumoSemanticoModuloIa[];
11
12
  guiaPorCapacidade: GuiaCapacidadeIaMap;
13
+ analiseDrift: {
14
+ modo: ResolucaoModoCacheDrift["modo"];
15
+ executada: boolean;
16
+ sucesso: boolean | null;
17
+ aviso: string | null;
18
+ cache: ResultadoDriftIa["escopo_aplicado"]["cache"] | null;
19
+ };
12
20
  }>;
13
21
  export declare function gerarContextoIa(arquivoEntrada: string, pastaSaidaOpcional?: string): Promise<ContextoIaGerado>;
14
22
  export declare function resolverEntradaDocs(posicionais: string[], args: string[]): {
@@ -1,4 +1,4 @@
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";
@@ -18,7 +18,7 @@ import { resumirListaTexto, unicosOrdenados } from './textoListas.js';
18
18
  import { EXTENSOES_CODIGO, listarArquivosRecursivosLimitado } from './projetoBusca.js';
19
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,19 +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) {
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 modoVerificacaoCodigo = await detectarModoVerificacaoCodigo(contextoProjeto.baseProjeto, contextoProjeto.diretoriosCodigo);
63
- const fontesConclusao = await detectarFontesConclusaoSnapshot(contextoProjeto.baseProjeto);
64
- const resultadoDrift = await analisarDriftLegado(contextoProjeto);
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;
65
78
  const modulos = contextoProjeto.modulosSelecionados.map((item) => {
66
79
  const modulo = item.resultado.modulo?.nome ?? path.basename(item.caminho, ".sema");
67
- const driftResumo = resumirDriftPorModulo(modulo, item.caminho, resultadoDrift);
68
- 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);
69
86
  return coletarResumoSemanticoModulo({
70
87
  arquivo: item.caminho,
71
88
  modulo,
@@ -76,7 +93,12 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
76
93
  comando: "drift",
77
94
  caminho: item.caminho,
78
95
  modulo,
79
- sucesso: resultadoDrift.sucesso,
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.",
80
102
  resumo: driftResumo,
81
103
  drift: resultadoDrift,
82
104
  },
@@ -84,7 +106,7 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
84
106
  fontesConclusao,
85
107
  });
86
108
  });
87
- const arquivosCodigoDetectados = modoVerificacaoCodigo === "codigo_completo"
109
+ const arquivosCodigoDetectados = analiseDrift.executar && modoVerificacaoCodigo === "codigo_completo"
88
110
  ? await listarTopArquivosCodigoDetectados(contextoProjeto.diretoriosCodigo)
89
111
  : [];
90
112
  const topArquivosResumo = escolherTopArquivosResumo(modulos, arquivosCodigoDetectados);
@@ -105,6 +127,15 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
105
127
  cliVersao: VERSAO_CLI,
106
128
  baseProjeto,
107
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
+ },
108
139
  fontesConclusao,
109
140
  conclusoesPorFonte: descreverFontesConclusao(fontesConclusao, modoVerificacaoCodigo),
110
141
  totalModulos: modulos.length,
@@ -118,6 +149,7 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
118
149
  `PROJETO: ${path.basename(baseProjeto)}`,
119
150
  `MODULOS: ${modulos.length}`,
120
151
  `MODO_CODIGO: ${modoVerificacaoCodigo}`,
152
+ `RESULTADO_DRIFT: ${resultadoDrift ? (resultadoDrift.sucesso ? "sucesso" : "falha") : "não avaliado"}`,
121
153
  `FONTES_CONCLUSAO: ${resumirListaTexto(fontesConclusao, 4)}`,
122
154
  `ENTRADA_IA: ${entradaCanonica.porCapacidade.fraca.join(" -> ")}`,
123
155
  `POLITICA_PLATAFORMA: Sema governa projeto e nao contorna politicas da plataforma; se houver alerta externo, pare e explique sem burlar filtro`,
@@ -138,6 +170,7 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
138
170
  `BASE: ${baseProjeto}`,
139
171
  `MODULOS: ${modulos.length}`,
140
172
  `MODO_CODIGO: ${modoVerificacaoCodigo}`,
173
+ `RESULTADO_DRIFT: ${resultadoDrift ? (resultadoDrift.sucesso ? "sucesso" : "falha") : "não avaliado"}`,
141
174
  ...(modoVerificacaoCodigo === "contratos_apenas"
142
175
  ? ["AVISO_CODIGO: somente contratos enviados; implementacao nao verificada neste modo"]
143
176
  : modoVerificacaoCodigo === "codigo_selecionado"
@@ -181,6 +214,7 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
181
214
  artefatos: [...ARQUIVOS_RESUMO_PROJETO_IA],
182
215
  modulos,
183
216
  guiaPorCapacidade,
217
+ analiseDrift: indexJson.analiseDrift,
184
218
  };
185
219
  }
186
220
  export async function gerarContextoIa(arquivoEntrada, pastaSaidaOpcional) {
@@ -285,7 +319,7 @@ Antes de escolher arquivo de código, leia \`${ARQUIVO_SEMA_BOOT}\` e \`agent-co
285
319
 
286
320
  - Timeout local do agente não é falha do Sema.
287
321
  - Se uma chamada Sema estourar, aumente o timeout e tente de novo.
288
- - Se o projeto inteiro for lento, escopar para \`sema resumo "${contexto.arquivo}" --micro --para mudanca\`.
322
+ - Se o projeto inteiro for lento, escopar para \`sema resumo "${contexto.arquivo}" --micro --para mudanca --drift none\`.
289
323
  - Se o ambiente impedir continuar, pare bloqueado e não avance com código sem Sema.
290
324
 
291
325
  ## Fechamento
@@ -293,13 +327,13 @@ Antes de escolher arquivo de código, leia \`${ARQUIVO_SEMA_BOOT}\` e \`agent-co
293
327
  1. Editar o arquivo \`.sema\`.
294
328
  2. Rodar \`sema formatar "${contexto.arquivo}"\`.
295
329
  3. Rodar \`sema validar "${contexto.arquivo}" --json\`.
296
- 4. Rodar \`sema drift "${contexto.arquivo}" --json\`.
330
+ 4. Rodar \`sema drift "${contexto.arquivo}" --cache fresh --json\`.
297
331
  5. Fechar com \`sema verificar <arquivo-ou-pasta> --json --saida ./.tmp/verificacao-ia\`.
298
332
 
299
333
  ## Textos base para onboarding do agente
300
334
 
301
335
  - \`sema starter-ia\`
302
- - \`sema resumo "${contexto.arquivo}" --micro --para onboarding\`
336
+ - \`sema resumo "${contexto.arquivo}" --micro --para onboarding --drift none\`
303
337
  - \`sema prompt-curto "${contexto.arquivo}" --para mudanca\`
304
338
  - \`sema prompt-ia\`
305
339
  `;
@@ -1,5 +1,5 @@
1
1
  import { type FonteImportacao } from "./importador.js";
2
- export declare function comandoInspecionar(entrada: string | undefined, emJson: boolean, cwd?: string): Promise<number>;
2
+ export declare function comandoInspecionar(entrada: string | undefined, emJson: boolean, cwd?: string, args?: string[]): Promise<number>;
3
3
  export declare function comandoDrift(entrada: string | undefined, args: string[], emJson: boolean, cwd?: string): Promise<number>;
4
4
  export declare function comandoImpacto(entrada: string | undefined, args: string[], emJson: boolean, cwd?: string): Promise<number>;
5
5
  export declare function comandoRenomearSemantico(entrada: string | undefined, args: string[], emJson: boolean, cwd?: string): Promise<number>;