@semacode/cli 2.3.0 → 2.3.1

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 (177) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +251 -228
  3. package/dist/agentEntryPoints.js +551 -550
  4. package/dist/angular-consumer-standalone.d.ts +3 -1
  5. package/dist/angular-consumer-standalone.js +12 -8
  6. package/dist/drift.part01.d.ts +32 -2
  7. package/dist/drift.part01.js +2 -0
  8. package/dist/drift.part04.d.ts +3 -2
  9. package/dist/drift.part04.js +6 -3
  10. package/dist/drift.part05.d.ts +2 -1
  11. package/dist/drift.part05.js +4 -3
  12. package/dist/drift.part06.d.ts +2 -1
  13. package/dist/drift.part06.js +9 -5
  14. package/dist/drift.part07.d.ts +11 -10
  15. package/dist/drift.part07.js +40 -30
  16. package/dist/drift.part08.d.ts +2 -1
  17. package/dist/drift.part08.js +4 -3
  18. package/dist/drift.part11.js +71 -6
  19. package/dist/drift.part12.js +14 -1
  20. package/dist/drift.part13.d.ts +42 -7
  21. package/dist/drift.part13.js +660 -36
  22. package/dist/driftCache.d.ts +49 -0
  23. package/dist/driftCache.js +311 -0
  24. package/dist/driftCacheIncremental.d.ts +98 -0
  25. package/dist/driftCacheIncremental.js +596 -0
  26. package/dist/driftCatalogo.d.ts +91 -0
  27. package/dist/driftCatalogo.js +657 -0
  28. package/dist/driftCatalogoPersistente.d.ts +8 -0
  29. package/dist/driftCatalogoPersistente.js +77 -0
  30. package/dist/driftEscopo.d.ts +23 -0
  31. package/dist/driftEscopo.js +563 -0
  32. package/dist/driftEscopoReferencias.d.ts +4 -0
  33. package/dist/driftEscopoReferencias.js +265 -0
  34. package/dist/driftOrcamento.d.ts +12 -0
  35. package/dist/driftOrcamento.js +19 -3
  36. package/dist/execucoesExternas.js +5 -19
  37. package/dist/iaPrompts.js +310 -310
  38. package/dist/index.part01.d.ts +16 -1
  39. package/dist/index.part01.js +80 -4
  40. package/dist/index.part02.js +21 -21
  41. package/dist/index.part03.d.ts +2 -2
  42. package/dist/index.part03.js +14 -3
  43. package/dist/index.part04.d.ts +2 -2
  44. package/dist/index.part04.js +113 -101
  45. package/dist/index.part05.d.ts +1 -1
  46. package/dist/index.part05.js +99 -22
  47. package/dist/index.part06.js +3 -2
  48. package/dist/index.part07.js +24 -24
  49. package/dist/index.part08.js +1 -1
  50. package/dist/init/templates.part01.js +393 -393
  51. package/dist/init/templates.part02.js +189 -189
  52. package/dist/initTemplatesBackend.js +73 -73
  53. package/dist/initTemplatesBase.js +81 -81
  54. package/dist/initTemplatesFlutter.js +137 -137
  55. package/dist/initTemplatesRuntime.js +350 -350
  56. package/dist/initTemplatesWeb.js +309 -309
  57. package/dist/pipelineConteudo/command.js +1 -36
  58. package/dist/projeto.d.ts +1 -1
  59. package/dist/projetoCarregar.d.ts +2 -2
  60. package/dist/projetoCarregar.js +47 -24
  61. package/dist/projetoCatalogo.d.ts +7 -0
  62. package/dist/projetoCatalogo.js +125 -0
  63. package/dist/projetoTipos.d.ts +14 -5
  64. package/dist/sync/index.js +35 -35
  65. package/docs/README.md +34 -34
  66. package/docs/ai-integration.md +1 -7
  67. package/docs/ai-onboarding.md +62 -62
  68. package/docs/ai-workflow.md +4 -0
  69. package/docs/auth.md +26 -26
  70. package/docs/cli.md +79 -79
  71. package/docs/commands.md +16 -13
  72. package/docs/database.md +15 -15
  73. package/docs/deploy.md +41 -41
  74. package/docs/descoberta-capacidades.md +106 -106
  75. package/docs/documentation.md +37 -46
  76. package/docs/env.md +16 -16
  77. package/docs/frontend.md +41 -41
  78. package/docs/getting-started.md +57 -57
  79. package/docs/i18n.md +15 -15
  80. package/docs/pipeline-conteudo.md +246 -246
  81. package/docs/profiles.md +54 -54
  82. package/docs/repositories.md +43 -43
  83. package/docs/rollback.md +31 -31
  84. package/docs/security.md +32 -32
  85. package/docs/sistemas-interativos.md +373 -378
  86. package/docs/support.md +8 -8
  87. package/docs/testing.md +51 -44
  88. package/docs/vocabulary.md +29 -29
  89. package/exemplos/agendamento.sema +1 -1
  90. package/exemplos/assinatura.sema +1 -1
  91. package/exemplos/auditoria.sema +1 -1
  92. package/exemplos/autenticacao.sema +1 -1
  93. package/exemplos/author_obra_comum.sema +1 -1
  94. package/exemplos/author_tema_sensivel.sema +1 -1
  95. package/exemplos/automacao.sema +1 -1
  96. package/exemplos/cadastro_usuario.sema +1 -1
  97. package/exemplos/calculadora.sema +1 -1
  98. package/exemplos/crud_simples.sema +1 -1
  99. package/exemplos/estoque.sema +1 -1
  100. package/exemplos/exportacao.sema +1 -1
  101. package/exemplos/fila.sema +1 -1
  102. package/exemplos/integracao_externa.sema +1 -1
  103. package/exemplos/multi_tenant.sema +1 -1
  104. package/exemplos/notificacao.sema +1 -1
  105. package/exemplos/operacao_estrategia.sema +132 -132
  106. package/exemplos/operacao_estrategia_discovery.sema +220 -220
  107. package/exemplos/operacao_estrategia_fluxo.sema +114 -114
  108. package/exemplos/operacao_estrategia_gates.sema +106 -106
  109. package/exemplos/operacao_estrategia_quarentena.sema +133 -133
  110. package/exemplos/operacao_estrategia_rollout.sema +124 -124
  111. package/exemplos/pagamento.sema +1 -1
  112. package/exemplos/pagamento_dominio.sema +1 -1
  113. package/exemplos/pedido.sema +1 -1
  114. package/exemplos/permissao.sema +1 -1
  115. package/exemplos/persistencia_vendor_first.sema +1 -1
  116. package/exemplos/pipeline-conteudo/README.md +44 -44
  117. package/exemplos/pipeline-conteudo/alvos.json +23 -23
  118. package/exemplos/pipeline-conteudo/definicao.json +136 -136
  119. package/exemplos/profile_conversas.sema +165 -165
  120. package/exemplos/profile_game.sema +1 -1
  121. package/exemplos/profile_legal.sema +1 -1
  122. package/exemplos/profile_ops.sema +1 -1
  123. package/exemplos/profile_research.sema +1 -1
  124. package/exemplos/profile_simulation.sema +211 -211
  125. package/exemplos/profile_software.sema +1 -1
  126. package/exemplos/profile_workflow_n8n.sema +1 -1
  127. package/exemplos/relatorio.sema +1 -1
  128. package/exemplos/replica_analitica_erp.sema +1 -1
  129. package/exemplos/sistemas-interativos/README.md +100 -100
  130. package/exemplos/sistemas-interativos/advanced/acceptance-context-evaluate-valid.json +5 -5
  131. package/exemplos/sistemas-interativos/advanced/acceptance-lock-valid.json +16 -16
  132. package/exemplos/sistemas-interativos/advanced/asset-provenance-valid.json +32 -32
  133. package/exemplos/sistemas-interativos/advanced/autonomy-repair-valid.json +93 -93
  134. package/exemplos/sistemas-interativos/advanced/control-run-definition-valid.json +78 -78
  135. package/exemplos/sistemas-interativos/advanced/control-run-valid.json +27 -27
  136. package/exemplos/sistemas-interativos/advanced/distributed-workers-valid.json +79 -79
  137. package/exemplos/sistemas-interativos/advanced/editor-state-valid.json +42 -42
  138. package/exemplos/sistemas-interativos/advanced/engine-snapshot-after-valid.json +32 -32
  139. package/exemplos/sistemas-interativos/advanced/engine-snapshot-before-valid.json +23 -23
  140. package/exemplos/sistemas-interativos/advanced/job-orchestration-valid.json +39 -39
  141. package/exemplos/sistemas-interativos/advanced/multimodal-evidence-valid.json +46 -46
  142. package/exemplos/sistemas-interativos/advanced/multiplayer-authority-valid.json +39 -39
  143. package/exemplos/sistemas-interativos/advanced/playtest-fuzz-valid.json +37 -37
  144. package/exemplos/sistemas-interativos/advanced/portability-valid.json +104 -104
  145. package/exemplos/sistemas-interativos/advanced/temporal-evidence-valid.json +27 -27
  146. package/exemplos/sistemas-interativos/advanced/temporal-valid.json +118 -118
  147. package/exemplos/sistemas-interativos/experience-ir-valid.json +459 -459
  148. package/exemplos/sistemas-interativos/game-2d.json +83 -83
  149. package/exemplos/sistemas-interativos/game-3d-human.json +81 -81
  150. package/exemplos/sistemas-interativos/game-pixel-16-bit.json +97 -97
  151. package/exemplos/sistemas-interativos/game-pixel-8-bit.json +94 -94
  152. package/exemplos/sistemas-interativos/game-xr-human.json +80 -80
  153. package/exemplos/sistemas-interativos/hybrid-2-5d.json +108 -108
  154. package/exemplos/sistemas-interativos/protocol-mutating-rollback-valid.json +75 -75
  155. package/exemplos/sistemas-interativos/protocol-read-only-valid.json +58 -58
  156. package/exemplos/sistemas-interativos/simulation-2d-controlled.json +97 -97
  157. package/exemplos/sistemas-interativos/simulation-3d-calibrated-autonomous.json +141 -141
  158. package/exemplos/sistemas-interativos/simulation-headless-autonomous-batch.json +112 -112
  159. package/exemplos/sistemas-interativos/simulation-pixel-16-bit.json +103 -103
  160. package/exemplos/sistemas-interativos/simulation-text-controlled.json +95 -95
  161. package/exemplos/testes_embutidos.sema +1 -1
  162. package/exemplos/tratamento_erro.sema +1 -1
  163. package/exemplos/upload_arquivo.sema +1 -1
  164. package/exemplos/webhook.sema +1 -1
  165. package/node_modules/@sema/gerador-cpp/dist/index.js +176 -176
  166. package/node_modules/@sema/gerador-cpp/package.json +1 -1
  167. package/node_modules/@sema/gerador-css/dist/index.part01.js +10 -10
  168. package/node_modules/@sema/gerador-css/dist/index.part02.js +460 -460
  169. package/node_modules/@sema/gerador-dotnet/dist/index.js +169 -169
  170. package/node_modules/@sema/gerador-dotnet/package.json +1 -1
  171. package/node_modules/@sema/gerador-html/dist/index.js +17 -17
  172. package/node_modules/@sema/gerador-lua/dist/index.js +51 -51
  173. package/node_modules/@sema/gerador-php/dist/index.js +113 -113
  174. package/node_modules/@sema/gerador-python/dist/index.part02.js +3 -3
  175. package/node_modules/@sema/gerador-typescript/dist/index.part02.js +11 -11
  176. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js +42 -42
  177. package/package.json +3 -3
@@ -7,10 +7,14 @@ import { escreverArquivos, formatarAvisoArtefatosGeradosAcimaDoLimite, } from '.
7
7
  import { carregarModulos } from './carregarModulos.js';
8
8
  import { obterOpcao } from './cliArgs.js';
9
9
  import { resumirDriftPorModulo } from "./index.part03.js";
10
- import { resolverOpcoesDriftCli } from "./index.part01.js";
11
- export async function comandoInspecionar(entrada, emJson, cwd = process.cwd()) {
12
- const contextoProjeto = await carregarProjeto(entrada, cwd);
13
- const resultadoDrift = await analisarDriftLegado(contextoProjeto);
10
+ import { criarResultadoDriftNaoExecutado, resolverAnaliseDriftCli, resolverOpcoesDriftCli } from "./index.part01.js";
11
+ 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
16
+ ? await analisarDriftLegado(contextoProjeto, analiseDrift.opcoes)
17
+ : criarResultadoDriftNaoExecutado(contextoProjeto, analiseDrift.opcoes);
14
18
  const framework = resolverFrameworkPadrao(undefined, contextoProjeto.configCarregada);
15
19
  const estruturaSaida = resolverEstruturaSaidaPadrao(undefined, framework, contextoProjeto.configCarregada);
16
20
  const alvos = resolverAlvosVerificacao(contextoProjeto.configCarregada);
@@ -29,22 +33,56 @@ export async function comandoInspecionar(entrada, emJson, cwd = process.cwd()) {
29
33
  diretoriosCodigo: contextoProjeto.diretoriosCodigo,
30
34
  fontesLegado: contextoProjeto.fontesLegado,
31
35
  modoAdocao: contextoProjeto.modoAdocao,
32
- scoreDrift: resultadoDrift.resumo_operacional.scoreMedio,
33
- confiancaGeral: resultadoDrift.resumo_operacional.confiancaGeral,
34
- consumerFramework: resultadoDrift.consumerFramework,
35
- appRoutes: resultadoDrift.appRoutes,
36
- consumerSurfaces: resultadoDrift.consumerSurfaces,
37
- consumerBridges: resultadoDrift.consumerBridges,
36
+ analiseDrift: {
37
+ modo: analiseDrift.modo,
38
+ executada: driftExecutado,
39
+ cache: analiseDrift.modo === "fresh" ? "refresh" : analiseDrift.modo === "cache" ? "auto" : null,
40
+ aviso: driftExecutado
41
+ ? null
42
+ : "Análise de drift não executada; código, rotas, vínculos e implementações não foram verificados.",
43
+ },
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,
38
50
  },
39
51
  projeto: {
40
52
  arquivos: contextoProjeto.arquivosProjeto,
53
+ arquivosDescobertos: contextoProjeto.arquivosDescobertos,
41
54
  modulos: contextoProjeto.modulosSelecionados.map((item) => ({
42
55
  caminho: item.caminho,
43
56
  modulo: item.resultado.modulo?.nome ?? null,
44
57
  sucesso: !temErros(item.resultado.diagnosticos),
45
58
  diagnosticos: item.resultado.diagnosticos.length,
46
59
  superficies: item.resultado.ir?.superficies.map((superficie) => `${superficie.tipo}:${superficie.nome}`) ?? [],
47
- implementacao: resumirDriftPorModulo(item.resultado.modulo?.nome ?? null, item.caminho, resultadoDrift),
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
84
+ ? resumirDriftPorModulo(item.resultado.modulo?.nome ?? null, item.caminho, resultadoDrift)
85
+ : null,
48
86
  })),
49
87
  },
50
88
  };
@@ -60,8 +98,14 @@ export async function comandoInspecionar(entrada, emJson, cwd = process.cwd()) {
60
98
  console.log(`- Estrutura de saida: ${payload.configuracao.estruturaSaida}`);
61
99
  console.log(`- Alvos: ${payload.configuracao.alvos.join(", ")}`);
62
100
  console.log(`- Modo de adocao: ${payload.configuracao.modoAdocao}`);
63
- console.log(`- Score medio de drift: ${payload.configuracao.scoreDrift}`);
64
- console.log(`- Confianca geral: ${payload.configuracao.confiancaGeral}`);
101
+ console.log(`- Análise de drift: ${payload.configuracao.analiseDrift.modo} (${payload.configuracao.analiseDrift.executada ? "executada" : "não executada"})`);
102
+ if (payload.configuracao.analiseDrift.executada) {
103
+ console.log(`- Score medio de drift: ${payload.configuracao.scoreDrift}`);
104
+ console.log(`- Confianca geral: ${payload.configuracao.confiancaGeral}`);
105
+ }
106
+ else {
107
+ console.log(`- Aviso: ${payload.configuracao.analiseDrift.aviso}`);
108
+ }
65
109
  console.log("- Saidas por alvo:");
66
110
  for (const [alvo, saida] of Object.entries(payload.configuracao.saidas)) {
67
111
  console.log(` - ${alvo}: ${saida}`);
@@ -75,25 +119,50 @@ export async function comandoInspecionar(entrada, emJson, cwd = process.cwd()) {
75
119
  console.log(` - ${diretorio}`);
76
120
  }
77
121
  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}`);
78
124
  console.log("- Modulos selecionados:");
79
125
  for (const modulo of payload.projeto.modulos) {
80
126
  console.log(` - ${modulo.modulo ?? "(sem modulo)"} :: ${modulo.caminho} :: diagnosticos=${modulo.diagnosticos}`);
81
- console.log(` impls validos=${modulo.implementacao.implsValidos} quebrados=${modulo.implementacao.implsQuebrados} recursos divergentes=${modulo.implementacao.recursosDivergentesCount} sem_impl=${modulo.implementacao.tasksSemImplementacao}`);
82
- for (const arquivoRelacionado of modulo.implementacao.arquivosRelacionados.slice(0, 5)) {
83
- console.log(` arquivo relacionado: ${arquivoRelacionado}`);
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
+ 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}`);
133
+ for (const arquivoRelacionado of modulo.implementacao.arquivosRelacionados.slice(0, 5)) {
134
+ console.log(` arquivo relacionado: ${arquivoRelacionado}`);
135
+ }
136
+ }
137
+ else {
138
+ console.log(" implementação: não verificada neste modo");
84
139
  }
85
140
  }
86
141
  return 0;
87
142
  }
88
143
  export async function comandoDrift(entrada, args, emJson, cwd = process.cwd()) {
89
- const contextoProjeto = await carregarProjeto(entrada, cwd);
90
- const resultado = await analisarDriftLegado(contextoProjeto, resolverOpcoesDriftCli(args));
144
+ const opcoes = resolverOpcoesDriftCli(args);
145
+ const contextoProjeto = await carregarProjeto(entrada, cwd, { escopo: opcoes.escopo });
146
+ const resultado = await analisarDriftLegado(contextoProjeto, opcoes);
91
147
  if (emJson) {
92
148
  console.log(JSON.stringify(resultado, null, 2));
93
149
  return resultado.sucesso ? 0 : 1;
94
150
  }
95
151
  console.log("Drift entre Sema e codigo legado");
96
152
  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"}`);
155
+ 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`);
165
+ }
97
166
  console.log(`- Ignorar worktrees: ${resultado.escopo_aplicado.ignorarWorktrees ? "sim" : "nao"}`);
98
167
  console.log(`- Ignorar consumidores laterais: ${resultado.escopo_aplicado.ignorarConsumidoresLaterais ? "sim" : "nao"}`);
99
168
  console.log(`- Modulos analisados: ${resultado.modulos.length}`);
@@ -181,8 +250,12 @@ export async function comandoImpacto(entrada, args, emJson, cwd = process.cwd())
181
250
  console.error("Uso: sema impacto <arquivo-ou-pasta> --alvo <token-semântico> [--mudanca <descricao>] [--escopo <arquivo|modulo|projeto>] [--incluir-worktrees] [--incluir-consumidores-laterais] [--json]");
182
251
  return 1;
183
252
  }
184
- const contextoProjeto = await carregarProjeto(entrada, cwd);
185
- const resultado = await gerarMapaImpactoSemantico(contextoProjeto, alvoSemantico, obterOpcao(args, "--mudanca", `avaliar impacto de ${alvoSemantico}`), resolverOpcoesDriftCli(args));
253
+ 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 });
258
+ const resultado = await gerarMapaImpactoSemantico(contextoProjeto, alvoSemantico, obterOpcao(args, "--mudanca", `avaliar impacto de ${alvoSemantico}`), opcoes);
186
259
  if (emJson) {
187
260
  console.log(JSON.stringify(resultado, null, 2));
188
261
  return resultado.sucesso ? 0 : 1;
@@ -215,8 +288,12 @@ export async function comandoRenomearSemantico(entrada, args, emJson, cwd = proc
215
288
  console.error("Uso: sema renomear-semantico <arquivo-ou-pasta> --de <nome-atual> --para <nome-novo> [--escopo <arquivo|modulo|projeto>] [--incluir-worktrees] [--incluir-consumidores-laterais] [--json]");
216
289
  return 1;
217
290
  }
218
- const contextoProjeto = await carregarProjeto(entrada, cwd);
219
- const resultado = await assistirRenomeacaoSemantica(contextoProjeto, nomeAtual, nomeNovo, resolverOpcoesDriftCli(args));
291
+ 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 });
296
+ const resultado = await assistirRenomeacaoSemantica(contextoProjeto, nomeAtual, nomeNovo, opcoes);
220
297
  if (emJson) {
221
298
  console.log(JSON.stringify(resultado, null, 2));
222
299
  return resultado.sucesso ? 0 : 1;
@@ -209,6 +209,7 @@ export async function comandoAjudaIa() {
209
209
  "Use `sema sync-codex` para regenerar o contexto governado do Codex na raiz.",
210
210
  "Use `sema instalar-exemplos` para materializar `exemplos/` oficiais sem sobrescrever arquivos locais.",
211
211
  "Use `sema resumo <arquivo> --micro --para onboarding --json` para IA fraca; o resumo vem no stdout.",
212
+ "Use `--drift fresh|cache|none` em `resumo` para escolher análise nova, cache válido ou somente contratos; `--micro` usa `none` por padrão e os demais usam `fresh`.",
212
213
  "Se `sema resumo` ou outro gate estourar timeout local, aumente o timeout e tente de novo; timeout do agente nao e falha do Sema.",
213
214
  "Use `sema prompt-curto <arquivo> --curto --para mudanca` para colar contexto em modelo gratuito.",
214
215
  "Use `sema prompt-ia`, `sema prompt-ia-ui`, `sema prompt-ia-react` e `sema prompt-ia-sema-primeiro` conforme a tarefa.",
@@ -287,7 +288,7 @@ export async function comandoResumo(entrada, args, emJson) {
287
288
  const escreverNaRaiz = possuiFlag(args, "--raiz");
288
289
  const alvo = entrada ? path.resolve(process.cwd(), entrada) : process.cwd();
289
290
  if (entrada && entrada.toLowerCase().endsWith(".sema")) {
290
- const contexto = await carregarContextoModuloIa(alvo);
291
+ const contexto = await carregarContextoModuloIa(alvo, args, tamanho === "micro" ? "none" : "fresh");
291
292
  const resumoSemantico = coletarResumoSemanticoModulo(contexto);
292
293
  const guiaPorCapacidade = criarGuiaCapacidadeIa();
293
294
  const texto = tamanho === "medio"
@@ -324,7 +325,7 @@ export async function comandoResumo(entrada, args, emJson) {
324
325
  console.log(texto);
325
326
  return 0;
326
327
  }
327
- const resumoProjeto = await gerarResumoProjetoIa(alvo, pastaSaida, escreverNaRaiz);
328
+ const resumoProjeto = await gerarResumoProjetoIa(alvo, pastaSaida, escreverNaRaiz, args, tamanho === "micro" ? "none" : "fresh");
328
329
  const arquivoResumo = tamanho === "micro"
329
330
  ? "SEMA_BRIEF.micro.txt"
330
331
  : tamanho === "curto"
@@ -45,30 +45,30 @@ export async function comandoPromptCurto(entrada, args, emJson) {
45
45
  : "SEMA_BRIEF.md";
46
46
  const contextoProjeto = await readFile(path.join(resumoProjeto.pastaSaida, arquivoResumo), "utf8");
47
47
  const capacidade = tamanho === "micro" ? "fraca" : tamanho === "curto" ? "media" : "forte";
48
- const prompt = `⚠️ REGRA OBRIGATÓRIA DE GOVERNANÇA:
49
-
50
- ANTES DE QUALQUER AÇÃO (editar, criar, deletar, executar, consultar ou modificar):
51
- 1. Rode \`sema docs-impacto --intencao "<ação>" --json\` com sua intenção declarada.
52
- 2. Aguarde a resposta com as docs obrigatórias.
53
- 3. Leia as docs antes de agir.
54
- 4. Antes de concluir, rode \`sema finalizar-mudanca --intencao "<ação>" --doc-lida <arquivo> --json\` com todas as docs lidas.
55
-
56
- Você está operando Sema em modo IA-first.
57
-
58
- Isto é contexto comprimido para IA operar contrato semântico antes de tocar código vivo.
59
-
60
- Capacidade alvo: ${capacidade}
61
- Modo da tarefa: ${modo}
62
-
63
- Regras:
64
- - ANTES DE TUDO: rode \`sema docs-impacto --intencao "<ação>" --json\`.
65
- - Comece pelo resumo compacto abaixo.
66
- - Se a tarefa pedir mais contexto, abra \`AGENT_CONTEXT_PACK.json\` e depois \`SEMA_INDEX.json\`.
67
- - Não tente ler o repositório inteiro se o resumo já disser onde tocar.
68
- - Preserve contrato, risco, lacuna e checks sugeridos.
69
-
70
- Contexto do projeto:
71
- ${contextoProjeto.trim()}
48
+ const prompt = `⚠️ REGRA OBRIGATÓRIA DE GOVERNANÇA:
49
+
50
+ ANTES DE QUALQUER AÇÃO (editar, criar, deletar, executar, consultar ou modificar):
51
+ 1. Rode \`sema docs-impacto --intencao "<ação>" --json\` com sua intenção declarada.
52
+ 2. Aguarde a resposta com as docs obrigatórias.
53
+ 3. Leia as docs antes de agir.
54
+ 4. Antes de concluir, rode \`sema finalizar-mudanca --intencao "<ação>" --doc-lida <arquivo> --json\` com todas as docs lidas.
55
+
56
+ Você está operando Sema em modo IA-first.
57
+
58
+ Isto é contexto comprimido para IA operar contrato semântico antes de tocar código vivo.
59
+
60
+ Capacidade alvo: ${capacidade}
61
+ Modo da tarefa: ${modo}
62
+
63
+ Regras:
64
+ - ANTES DE TUDO: rode \`sema docs-impacto --intencao "<ação>" --json\`.
65
+ - Comece pelo resumo compacto abaixo.
66
+ - Se a tarefa pedir mais contexto, abra \`AGENT_CONTEXT_PACK.json\` e depois \`SEMA_INDEX.json\`.
67
+ - Não tente ler o repositório inteiro se o resumo já disser onde tocar.
68
+ - Preserve contrato, risco, lacuna e checks sugeridos.
69
+
70
+ Contexto do projeto:
71
+ ${contextoProjeto.trim()}
72
72
  `;
73
73
  if (emJson) {
74
74
  console.log(JSON.stringify({
@@ -105,7 +105,7 @@ export async function principal() {
105
105
  : await comandoVerificar(posicionais[0], resolverSaidaPadrao(obterOpcao(resto, "--saida", "./.tmp/sema-verificar"), "typescript", await carregarConfiguracaoProjeto(posicionais[0] ? path.resolve(cwd, posicionais[0]) : cwd)), cwd);
106
106
  break;
107
107
  case "inspecionar":
108
- codigoSaida = await comandoInspecionar(posicionais[0], possuiFlag(resto, "--json"), cwd);
108
+ codigoSaida = await comandoInspecionar(posicionais[0], possuiFlag(resto, "--json"), cwd, resto);
109
109
  break;
110
110
  case "drift":
111
111
  codigoSaida = await comandoDrift(posicionais[0], resto, possuiFlag(resto, "--json"), cwd);