@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,5 +1,5 @@
1
- // SEMA-GOVERNED: sema.governanca_ia_contexto
2
- // Descricao: CLI particionada; consulte contratos/sema/governanca_ia_contexto.sema antes de editar.
1
+ // SEMA-GOVERNED: sema.governanca_ia_contexto, sema.produto.governanca_ia.drift.cache.modos
2
+ // Descrição: resume contrato ou projeto com política explícita de análise de drift.
3
3
  import { mkdir, readFile, stat, writeFile } from "node:fs/promises";
4
4
  import path from "node:path";
5
5
  import { compilarCodigo, formatarCodigo, formatarDiagnosticos, lerArquivoTexto, temErros, } from "@sema/nucleo";
@@ -13,7 +13,7 @@ import { carregarModulos } from './carregarModulos.js';
13
13
  import { obterOpcao, possuiFlag } from './cliArgs.js';
14
14
  import { EXEMPLOS_PROMPT_IA, PROMPT_BASE_IA, PROMPT_IA_REACT, PROMPT_IA_SEMA_PRIMEIRO, PROMPT_IA_UI, STARTER_IA } from './iaPrompts.js';
15
15
  import { aplicarEstruturaSaida, gerarArquivosPorAlvo, garantirIr, validarCompatibilidadeFramework, } from './geracaoCore.js';
16
- import { descobrirDocsIa, normalizarModoResumo, normalizarTamanhoResumo, renderizarCabecalhoDocsIa, renderizarCaixaAscii, renderizarSecaoAscii } from "./index.part01.js";
16
+ import { descobrirDocsIa, normalizarModoResumo, normalizarTamanhoResumo, renderizarCabecalhoDocsIa, renderizarCaixaAscii, renderizarSecaoAscii, resolverAnaliseDriftConsultaCli } from "./index.part01.js";
17
17
  import { gerarResumoProjetoIa } from "./index.part04.js";
18
18
  import { carregarContextoModuloIa, gerarArquivosResumoModuloIa } from "./index.part03.js";
19
19
  import { coletarResumoSemanticoModulo, renderizarResumoModuloMarkdown, renderizarResumoModuloTexto } from "./index.part02.js";
@@ -121,7 +121,11 @@ export async function comandoStarterIa() {
121
121
  return 0;
122
122
  }
123
123
  export async function comandoSyncCodex(emJson) {
124
- const resumoProjeto = await gerarResumoProjetoIa(process.cwd(), undefined, true);
124
+ const resumoProjeto = await gerarResumoProjetoIa(process.cwd(), undefined, true, {
125
+ modo: "fresh",
126
+ executar: true,
127
+ avisos: [],
128
+ });
125
129
  const exemplos = await materializarExemplosOficiais(resumoProjeto.baseProjeto, true);
126
130
  if (!exemplos.sucesso) {
127
131
  if (emJson) {
@@ -196,8 +200,8 @@ export async function comandoAjudaIa() {
196
200
  ]));
197
201
  console.log("");
198
202
  console.log(renderizarSecaoAscii("Capacidade de IA", [
199
- "fraca: `sema resumo <arquivo> --micro --json` usa stdout compacto",
200
- "média: `sema resumo <arquivo> --curto --json` + `sema drift <arquivo> --json`",
203
+ "fraca: `sema resumo <arquivo> --micro --drift none --json` usa stdout compacto sem inventar evidência de implementação",
204
+ "média: `sema resumo <arquivo> --curto --drift none --json` + `sema drift <arquivo> --cache fresh --json`",
201
205
  "forte: `sema contexto-ia <arquivo.sema> --saida <diretorio> --json` materializa o pacote completo",
202
206
  ]));
203
207
  console.log("");
@@ -208,14 +212,13 @@ export async function comandoAjudaIa() {
208
212
  "Use `sema interativo pipelines --json` para jogos, simulações e híbridos 3D, 2D, retro, texto, XR ou headless.",
209
213
  "Use `sema sync-codex` para regenerar o contexto governado do Codex na raiz.",
210
214
  "Use `sema instalar-exemplos` para materializar `exemplos/` oficiais sem sobrescrever arquivos locais.",
211
- "Use `sema resumo <arquivo> --micro --para onboarding --json` para IA fraca; o resumo vem no stdout.",
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`.",
215
+ "Use `sema resumo <arquivo> --micro --para onboarding --drift none --json` para IA fraca; o resumo contratual vem no stdout e campos derivados ficam não avaliados.",
213
216
  "Se `sema resumo` ou outro gate estourar timeout local, aumente o timeout e tente de novo; timeout do agente nao e falha do Sema.",
214
217
  "Use `sema prompt-curto <arquivo> --curto --para mudanca` para colar contexto em modelo gratuito.",
215
218
  "Use `sema prompt-ia`, `sema prompt-ia-ui`, `sema prompt-ia-react` e `sema prompt-ia-sema-primeiro` conforme a tarefa.",
216
219
  "Use `sema exemplos-prompt-ia` para pegar modelos prontos de prompt.",
217
- "Use `sema inspecionar` para descobrir base, codigo vivo e fontes legado.",
218
- "Use `sema drift` para medir impls, vinculos, rotas, score e lacunas.",
220
+ "Use `sema inspecionar --drift none` para descobrir a superfície contratual sem executar drift implicitamente.",
221
+ "Use `sema drift --cache fresh` para medir impls, vínculos, rotas, score e lacunas no fechamento; cache é aceleração, não prova final.",
219
222
  "Use `sema docs-impacto --intencao <acao>` para ler ou criar docs obrigatorias antes de agir.",
220
223
  "Use `sema finalizar-mudanca --intencao <acao>` para bloquear conclusao sem leitura documental comprovada.",
221
224
  "Use `sema contexto-ia <arquivo.sema> --saida <diretorio> --json` para gerar AST, IR, drift, `briefing.json` e `briefing.min.json`.",
@@ -287,8 +290,10 @@ export async function comandoResumo(entrada, args, emJson) {
287
290
  const pastaSaida = obterOpcao(args, "--saida");
288
291
  const escreverNaRaiz = possuiFlag(args, "--raiz");
289
292
  const alvo = entrada ? path.resolve(process.cwd(), entrada) : process.cwd();
290
- if (entrada && entrada.toLowerCase().endsWith(".sema")) {
291
- const contexto = await carregarContextoModuloIa(alvo, args, tamanho === "micro" ? "none" : "fresh");
293
+ const analiseDrift = resolverAnaliseDriftConsultaCli(args, "resumo");
294
+ const alvoEhArquivo = (await stat(alvo)).isFile();
295
+ if (alvoEhArquivo) {
296
+ const contexto = await carregarContextoModuloIa(alvo, analiseDrift);
292
297
  const resumoSemantico = coletarResumoSemanticoModulo(contexto);
293
298
  const guiaPorCapacidade = criarGuiaCapacidadeIa();
294
299
  const texto = tamanho === "medio"
@@ -312,20 +317,28 @@ export async function comandoResumo(entrada, args, emJson) {
312
317
  modulo: contexto.modulo,
313
318
  pastaSaida: pastaResumo ?? null,
314
319
  artefatosCompactos,
320
+ analiseDrift: {
321
+ modo: contexto.drift.modo,
322
+ executada: contexto.drift.executada,
323
+ sucesso: contexto.drift.sucesso,
324
+ aviso: contexto.drift.aviso,
325
+ avisos: analiseDrift.avisos,
326
+ cache: contexto.drift.drift?.escopo_aplicado.cache ?? null,
327
+ },
315
328
  guiaPorCapacidade,
316
329
  resumo: resumoSemantico,
317
330
  texto,
318
331
  }, null, 2));
319
- return 0;
332
+ return contexto.drift.sucesso === false ? 1 : 0;
320
333
  }
321
334
  if (pastaResumo) {
322
335
  console.log(`Resumo IA-first gerado em ${pastaResumo}`);
323
336
  console.log("");
324
337
  }
325
338
  console.log(texto);
326
- return 0;
339
+ return contexto.drift.sucesso === false ? 1 : 0;
327
340
  }
328
- const resumoProjeto = await gerarResumoProjetoIa(alvo, pastaSaida, escreverNaRaiz, args, tamanho === "micro" ? "none" : "fresh");
341
+ const resumoProjeto = await gerarResumoProjetoIa(alvo, pastaSaida, escreverNaRaiz, analiseDrift);
329
342
  const arquivoResumo = tamanho === "micro"
330
343
  ? "SEMA_BRIEF.micro.txt"
331
344
  : tamanho === "curto"
@@ -341,15 +354,19 @@ export async function comandoResumo(entrada, args, emJson) {
341
354
  baseProjeto: resumoProjeto.baseProjeto,
342
355
  pastaSaida: resumoProjeto.pastaSaida,
343
356
  artefatos: resumoProjeto.artefatos,
357
+ analiseDrift: {
358
+ ...resumoProjeto.analiseDrift,
359
+ avisos: analiseDrift.avisos,
360
+ },
344
361
  guiaPorCapacidade: resumoProjeto.guiaPorCapacidade,
345
362
  modulos: resumoProjeto.modulos,
346
363
  texto,
347
364
  }, null, 2));
348
- return 0;
365
+ return resumoProjeto.analiseDrift.sucesso === false ? 1 : 0;
349
366
  }
350
367
  console.log(`Resumo IA-first do projeto gerado em ${resumoProjeto.pastaSaida}`);
351
368
  console.log("");
352
369
  console.log(texto);
353
- return 0;
370
+ return resumoProjeto.analiseDrift.sucesso === false ? 1 : 0;
354
371
  }
355
372
  //# sourceMappingURL=index.part06.js.map
@@ -1,9 +1,15 @@
1
1
  import { type AlvoGeracao, type FrameworkGeracao } from "@sema/padroes";
2
2
  import type { EstruturaSaida } from "./tipos.js";
3
+ export interface OpcoesVerificar {
4
+ alvo?: string;
5
+ semCache?: boolean;
6
+ }
7
+ export declare function alvosSuportadosPelaStack(fontesLegado: string[] | undefined): AlvoGeracao[] | undefined;
8
+ export declare function avisoEscopoStackVerificacao(fontesLegado: string[] | undefined, alvosEfetivos: AlvoGeracao[]): string | undefined;
3
9
  import { type ResumoModuloVerificacao } from './geracaoCore.js';
4
10
  export declare function comandoPromptCurto(entrada: string | undefined, args: string[], emJson: boolean): Promise<number>;
5
11
  export declare function comandoContextoIa(arquivo: string, pastaSaida: string | undefined, emJson: boolean): Promise<number>;
6
12
  export declare function comandoTestar(arquivo: string, alvo: AlvoGeracao, saida: string, estrutura: EstruturaSaida, framework: FrameworkGeracao): Promise<number>;
7
13
  export declare function imprimirResumoVerificacao(resumos: ResumoModuloVerificacao[]): void;
8
- export declare function comandoVerificar(entrada: string | undefined, baseSaida: string, cwd?: string): Promise<number>;
9
- export declare function comandoVerificarJson(entrada: string | undefined, baseSaida: string, cwd?: string): Promise<number>;
14
+ export declare function comandoVerificar(entrada: string | undefined, baseSaida: string, cwd?: string, opcoes?: OpcoesVerificar): Promise<number>;
15
+ export declare function comandoVerificarJson(entrada: string | undefined, baseSaida: string, cwd?: string, opcoes?: OpcoesVerificar): Promise<number>;
@@ -1,9 +1,56 @@
1
- // SEMA-GOVERNED: sema.governanca_ia_contexto
2
- // Descricao: CLI particionada; consulte contratos/sema/governanca_ia_contexto.sema antes de editar.
1
+ // SEMA-GOVERNED: sema.governanca_ia_contexto, sema.produto.governanca_ia.drift.cache.modos
2
+ // Descrição: preserva modos explícitos nas superfícies auxiliares de contexto.
3
3
  import { readFile } from "node:fs/promises";
4
4
  import path from "node:path";
5
+ import pacoteCli from "../package.json" with { type: "json" };
5
6
  import { compilarCodigo, formatarDiagnosticos, lerArquivoTexto, temErros, } from "@sema/nucleo";
6
7
  import { carregarProjeto, resolverAlvosVerificacao, } from "./projeto.js";
8
+ import { SCHEMA_CACHE_VERIFICACAO, calcularChaveVerificacao, carregarCacheVerificacao, gravarCacheVerificacao, } from "./verificacaoCache.js";
9
+ const FONTES_POR_ALVO_SUPORTADO = {
10
+ typescript: ["typescript", "javascript"],
11
+ javascript: ["typescript", "javascript"],
12
+ nestjs: ["typescript", "javascript"],
13
+ express: ["typescript", "javascript"],
14
+ fastify: ["typescript", "javascript"],
15
+ nextjs: ["typescript", "javascript"],
16
+ "nextjs-consumer": ["typescript", "javascript"],
17
+ "react-vite-consumer": ["typescript", "javascript"],
18
+ "angular-consumer": ["typescript", "javascript"],
19
+ firebase: ["typescript", "javascript"],
20
+ python: ["python"],
21
+ fastapi: ["python"],
22
+ flask: ["python"],
23
+ dart: ["dart"],
24
+ "flutter-consumer": ["dart"],
25
+ dotnet: ["dotnet"],
26
+ java: ["javascript"],
27
+ lua: ["lua"],
28
+ php: ["php"],
29
+ cpp: ["cpp"],
30
+ };
31
+ export function alvosSuportadosPelaStack(fontesLegado) {
32
+ if (!fontesLegado?.length) {
33
+ return undefined;
34
+ }
35
+ const suportados = new Set();
36
+ for (const fonte of fontesLegado) {
37
+ for (const alvo of FONTES_POR_ALVO_SUPORTADO[fonte] ?? []) {
38
+ suportados.add(alvo);
39
+ }
40
+ }
41
+ return suportados.size > 0 ? [...suportados] : undefined;
42
+ }
43
+ export function avisoEscopoStackVerificacao(fontesLegado, alvosEfetivos) {
44
+ const suportados = alvosSuportadosPelaStack(fontesLegado);
45
+ if (!suportados) {
46
+ return undefined;
47
+ }
48
+ const foraDaStack = alvosEfetivos.filter((alvo) => alvo !== "html" && alvo !== "css" && !suportados.includes(alvo));
49
+ if (foraDaStack.length === 0) {
50
+ return undefined;
51
+ }
52
+ return `Alvos fora da stack detectada (${(fontesLegado ?? []).join(", ")}): ${foraDaStack.join(", ")}. Considere reduzir "alvos" no sema.config.json, remover "fontesLegado" auto-declaradas ou usar --alvo unico.`;
53
+ }
7
54
  import { escreverArquivos, formatarAvisoArtefatosGeradosAcimaDoLimite, } from './fsGovernado.js';
8
55
  import { obterOpcao } from './cliArgs.js';
9
56
  import { avaliarDependenciasVerificacao, imprimirFalhaDependenciasVerificacao } from './doctorCommand.js';
@@ -17,7 +64,11 @@ export async function comandoPromptCurto(entrada, args, emJson) {
17
64
  const modo = normalizarModoResumo(obterOpcao(args, "--para"));
18
65
  const alvo = entrada ? path.resolve(process.cwd(), entrada) : process.cwd();
19
66
  if (entrada && entrada.toLowerCase().endsWith(".sema")) {
20
- const contexto = await carregarContextoModuloIa(alvo);
67
+ const contexto = await carregarContextoModuloIa(alvo, {
68
+ modo: "none",
69
+ executar: false,
70
+ avisos: [],
71
+ });
21
72
  const resumoSemantico = coletarResumoSemanticoModulo(contexto);
22
73
  const capacidade = tamanho === "micro" ? "fraca" : tamanho === "curto" ? "media" : "forte";
23
74
  const prompt = criarPromptCurtoModulo(resumoSemantico, modo, tamanho, capacidade);
@@ -150,7 +201,7 @@ export function imprimirResumoVerificacao(resumos) {
150
201
  }
151
202
  console.log(`Totais: modulos=${resumos.length} alvos=${totalAlvos} arquivos=${totalArquivos} testes=${totalTestes}`);
152
203
  }
153
- export async function comandoVerificar(entrada, baseSaida, cwd = process.cwd()) {
204
+ export async function comandoVerificar(entrada, baseSaida, cwd = process.cwd(), opcoes = {}) {
154
205
  const contextoProjeto = await carregarProjeto(entrada, cwd);
155
206
  const modulos = contextoProjeto.modulosSelecionados;
156
207
  const diagnosticos = modulos.flatMap((item) => item.resultado.diagnosticos);
@@ -158,7 +209,13 @@ export async function comandoVerificar(entrada, baseSaida, cwd = process.cwd())
158
209
  console.error(formatarDiagnosticos(diagnosticos));
159
210
  return 1;
160
211
  }
161
- const alvos = resolverAlvosVerificacao(contextoProjeto.configCarregada);
212
+ const alvos = opcoes.alvo
213
+ ? [opcoes.alvo]
214
+ : resolverAlvosVerificacao(contextoProjeto.configCarregada);
215
+ const avisoEscopo = avisoEscopoStackVerificacao(contextoProjeto.configCarregada?.config.fontesLegado, alvos);
216
+ if (avisoEscopo) {
217
+ console.warn(avisoEscopo);
218
+ }
162
219
  const configuracoesAlvo = alvos.map((alvo) => ({
163
220
  alvo,
164
221
  ...resolverConfiguracaoVerificacaoPorAlvo(alvo, contextoProjeto.configCarregada),
@@ -183,13 +240,55 @@ export async function comandoVerificar(entrada, baseSaida, cwd = process.cwd())
183
240
  arquivoFonte: modulo.caminho,
184
241
  alvos: [],
185
242
  };
243
+ const conteudoContrato = await readFile(modulo.caminho, "utf8").catch(() => "");
186
244
  for (const configuracaoAlvo of configuracoesAlvo) {
187
245
  const { alvo, framework, estrutura } = configuracaoAlvo;
188
246
  const pastaAlvo = path.join(baseSaida, alvo, nomeSubpastaModulo(modulo.caminho));
247
+ const chave = calcularChaveVerificacao({
248
+ versaoCli: pacoteCli.version,
249
+ versaoNode: process.versions.node ?? "",
250
+ modulo: ir.nome,
251
+ alvo,
252
+ framework: framework ?? "",
253
+ estrutura,
254
+ conteudoContrato,
255
+ });
256
+ const emCache = opcoes.semCache ? undefined : await carregarCacheVerificacao(chave, pastaAlvo);
257
+ if (emCache) {
258
+ resumoModulo.alvos.push({
259
+ alvo,
260
+ arquivosGerados: emCache.arquivosGerados.length,
261
+ quantidadeTestes: emCache.quantidadeTestes,
262
+ pastaSaida: pastaAlvo,
263
+ sucesso: emCache.sucesso,
264
+ framework,
265
+ estrutura,
266
+ testesExecutados: false,
267
+ origem: "cache",
268
+ });
269
+ if (!emCache.sucesso) {
270
+ imprimirResumoVerificacao([...resumos, resumoModulo]);
271
+ console.error(`Falha registrada em cache na verificacao do modulo ${modulo.caminho} para o alvo ${alvo}.`);
272
+ return 1;
273
+ }
274
+ continue;
275
+ }
189
276
  const arquivos = aplicarEstruturaSaida(gerarArquivosPorAlvo(ir, alvo, framework), ir, estrutura);
190
277
  const escrita = await escreverArquivos(pastaAlvo, arquivos, { artefatoGerado: true });
191
278
  artefatosGeradosAcimaDoLimite.push(...escrita.artefatosGeradosAcimaDoLimite);
192
279
  const { execucao, testesExecutados } = executarTestesParaVerificacao(alvo, pastaAlvo, arquivos, framework);
280
+ await gravarCacheVerificacao({
281
+ schemaVersion: SCHEMA_CACHE_VERIFICACAO,
282
+ chave,
283
+ versaoCli: pacoteCli.version,
284
+ alvo,
285
+ modulo: ir.nome,
286
+ sucesso: execucao.codigoSaida === 0,
287
+ quantidadeTestes: execucao.quantidadeTestes,
288
+ testesExecutados,
289
+ arquivosGerados: arquivos.map((arquivo) => arquivo.caminhoRelativo),
290
+ geradoEm: new Date().toISOString(),
291
+ });
193
292
  resumoModulo.alvos.push({
194
293
  alvo,
195
294
  arquivosGerados: arquivos.length,
@@ -199,6 +298,7 @@ export async function comandoVerificar(entrada, baseSaida, cwd = process.cwd())
199
298
  framework,
200
299
  estrutura,
201
300
  testesExecutados,
301
+ origem: "executado",
202
302
  });
203
303
  if (execucao.codigoSaida !== 0) {
204
304
  imprimirResumoVerificacao([...resumos, resumoModulo]);
@@ -216,7 +316,7 @@ export async function comandoVerificar(entrada, baseSaida, cwd = process.cwd())
216
316
  console.log("Verificacao completa concluida com sucesso.");
217
317
  return 0;
218
318
  }
219
- export async function comandoVerificarJson(entrada, baseSaida, cwd = process.cwd()) {
319
+ export async function comandoVerificarJson(entrada, baseSaida, cwd = process.cwd(), opcoes = {}) {
220
320
  const contextoProjeto = await carregarProjeto(entrada, cwd);
221
321
  const modulos = contextoProjeto.modulosSelecionados;
222
322
  const diagnosticos = modulos.flatMap((item) => item.resultado.diagnosticos);
@@ -230,7 +330,10 @@ export async function comandoVerificarJson(entrada, baseSaida, cwd = process.cwd
230
330
  }, null, 2));
231
331
  return 1;
232
332
  }
233
- const alvos = resolverAlvosVerificacao(contextoProjeto.configCarregada);
333
+ const alvos = opcoes.alvo
334
+ ? [opcoes.alvo]
335
+ : resolverAlvosVerificacao(contextoProjeto.configCarregada);
336
+ const avisoEscopo = avisoEscopoStackVerificacao(contextoProjeto.configCarregada?.config.fontesLegado, alvos);
234
337
  const configuracoesAlvo = alvos.map((alvo) => ({
235
338
  alvo,
236
339
  ...resolverConfiguracaoVerificacaoPorAlvo(alvo, contextoProjeto.configCarregada),
@@ -269,13 +372,54 @@ export async function comandoVerificarJson(entrada, baseSaida, cwd = process.cwd
269
372
  alvos: [],
270
373
  saidaTestes: [],
271
374
  };
375
+ const conteudoContrato = await readFile(modulo.caminho, "utf8").catch(() => "");
272
376
  for (const configuracaoAlvo of configuracoesAlvo) {
273
377
  const { alvo, framework, estrutura } = configuracaoAlvo;
274
378
  const pastaAlvo = path.join(baseSaida, alvo, nomeSubpastaModulo(modulo.caminho));
379
+ const chave = calcularChaveVerificacao({
380
+ versaoCli: pacoteCli.version,
381
+ versaoNode: process.versions.node ?? "",
382
+ modulo: ir.nome,
383
+ alvo,
384
+ framework: framework ?? "",
385
+ estrutura,
386
+ conteudoContrato,
387
+ });
388
+ const emCache = opcoes.semCache ? undefined : await carregarCacheVerificacao(chave, pastaAlvo);
389
+ if (emCache) {
390
+ resumoModulo.alvos.push({
391
+ alvo,
392
+ arquivosGerados: emCache.arquivosGerados.length,
393
+ quantidadeTestes: emCache.quantidadeTestes,
394
+ pastaSaida: pastaAlvo,
395
+ sucesso: emCache.sucesso,
396
+ framework,
397
+ estrutura,
398
+ testesExecutados: false,
399
+ origem: "cache",
400
+ });
401
+ resumoModulo.saidaTestes.push({ alvo, stdout: "", stderr: `resultado reutilizado do cache de verificacao (chave ${chave.slice(0, 12)})` });
402
+ if (!emCache.sucesso) {
403
+ codigoSaida = 1;
404
+ }
405
+ continue;
406
+ }
275
407
  const arquivos = aplicarEstruturaSaida(gerarArquivosPorAlvo(ir, alvo, framework), ir, estrutura);
276
408
  const escrita = await escreverArquivos(pastaAlvo, arquivos, { artefatoGerado: true });
277
409
  artefatosGeradosAcimaDoLimite.push(...escrita.artefatosGeradosAcimaDoLimite);
278
410
  const { execucao, testesExecutados } = executarTestesParaVerificacao(alvo, pastaAlvo, arquivos, framework, true);
411
+ await gravarCacheVerificacao({
412
+ schemaVersion: SCHEMA_CACHE_VERIFICACAO,
413
+ chave,
414
+ versaoCli: pacoteCli.version,
415
+ alvo,
416
+ modulo: ir.nome,
417
+ sucesso: execucao.codigoSaida === 0,
418
+ quantidadeTestes: execucao.quantidadeTestes,
419
+ testesExecutados,
420
+ arquivosGerados: arquivos.map((arquivo) => arquivo.caminhoRelativo),
421
+ geradoEm: new Date().toISOString(),
422
+ });
279
423
  resumoModulo.alvos.push({
280
424
  alvo,
281
425
  arquivosGerados: arquivos.length,
@@ -285,6 +429,7 @@ export async function comandoVerificarJson(entrada, baseSaida, cwd = process.cwd
285
429
  framework,
286
430
  estrutura,
287
431
  testesExecutados,
432
+ origem: "executado",
288
433
  });
289
434
  resumoModulo.saidaTestes.push({ alvo, stdout: execucao.saidaPadrao, stderr: execucao.saidaErro });
290
435
  if (execucao.codigoSaida !== 0) {
@@ -302,6 +447,7 @@ export async function comandoVerificarJson(entrada, baseSaida, cwd = process.cwd
302
447
  console.log(JSON.stringify({
303
448
  comando: "verificar",
304
449
  sucesso: codigoSaida === 0,
450
+ avisoEscopo,
305
451
  modulos: resumos,
306
452
  totais,
307
453
  artefatosGeradosAcimaDoLimite,
@@ -1 +1 @@
1
- export declare function principal(): Promise<void>;
1
+ export declare function principal(): Promise<number>;
@@ -1,5 +1,5 @@
1
- // SEMA-GOVERNED: sema.governanca_ia_contexto
2
- // Descricao: CLI particionada; consulte contratos/sema/governanca_ia_contexto.sema antes de editar.
1
+ // SEMA-GOVERNED: sema.governanca_ia_contexto, sema.produto.governanca_ia.drift.cache.modos, sema.produto.cli_invocacao_publica, sema.produto.cli_invocacao_publica.argumentos
2
+ // Descrição: encaminha argumentos validados para as consultas e o comando de drift.
3
3
  import path from "node:path";
4
4
  import { carregarConfiguracaoProjeto, resolverAlvoPadrao, resolverEstruturaSaidaPadrao, resolverFrameworkPadrao, resolverSaidaPadrao, } from "./projeto.js";
5
5
  import { REGISTRO_COMANDOS } from "./comandos.js";
@@ -7,35 +7,34 @@ import { comandoIniciar, comandoInstalarExemplos } from './initCommand.js';
7
7
  import { obterOpcao, obterPosicionais, possuiFlag } from './cliArgs.js';
8
8
  import { comandoAuthor, comandoProfile, criarPayloadRulePacks, normalizarProfileGovernanca, renderizarRulePacksTexto } from './profileAuthorCommand.js';
9
9
  import { comandoDoctor } from './doctorCommand.js';
10
+ import { erroArgumentoInvalido, erroComandoDesconhecido } from './cliControlError.js';
11
+ import { validarSintaxeInvocacaoPublica } from './cliGrammar.js';
10
12
  import { normalizarFonteImportacao, normalizarTemplateIniciar, } from './geracaoCore.js';
11
- import { VERSAO_CLI, ajuda, obterArgumentos } from "./index.part01.js";
13
+ import { obterArgumentos } from "./index.part01.js";
12
14
  import { comandoDocsImpacto, comandoFinalizarMudanca, comandoValidar, comandoValidarJson } from "./index.part04.js";
13
15
  import { comandoAst, comandoAstJson, comandoDrift, comandoImpacto, comandoImportar, comandoInspecionar, comandoIr, comandoIrJson, comandoRenomearSemantico } from "./index.part05.js";
14
16
  import { comandoAjudaIa, comandoCompilar, comandoDiagnosticos, comandoExemplosPromptIa, comandoFormatar, comandoPromptIa, comandoPromptIaReact, comandoPromptIaSemaPrimeiro, comandoPromptIaUi, comandoResumo, comandoStarterIa, comandoSyncCodex } from "./index.part06.js";
15
17
  import { comandoContextoIa, comandoPromptCurto, comandoTestar, comandoVerificar, comandoVerificarJson } from "./index.part07.js";
16
18
  export async function principal() {
19
+ const argvPublico = process.argv.slice(2);
20
+ const sintaxe = validarSintaxeInvocacaoPublica(argvPublico);
21
+ if (!sintaxe.dispatchPermitido)
22
+ return 0;
17
23
  const { comando, resto } = obterArgumentos();
18
- const comandoCru = process.argv[2];
19
- if (comandoCru === "--versao" || comandoCru === "--version" || comandoCru === "-v") {
20
- console.log(VERSAO_CLI);
21
- process.exit(0);
22
- }
23
- if (!comando || comandoCru === "--help" || comandoCru === "-h") {
24
- console.log(ajuda());
25
- process.exit(0);
26
- }
27
- const cwd = process.cwd();
24
+ if (!comando)
25
+ return 0;
28
26
  const posicionais = obterPosicionais(resto);
29
- let codigoSaida = 0;
27
+ const modoJson = argvPublico.includes("--json");
28
+ const cwd = process.cwd();
30
29
  // --- Comandos registrados via REGISTRO_COMANDOS (guard, init, dev, sync) ---
31
30
  const handlerRegistrado = REGISTRO_COMANDOS[comando];
32
31
  if (handlerRegistrado) {
33
- codigoSaida = await handlerRegistrado(posicionais, resto, possuiFlag(resto, "--json"));
34
- process.exit(codigoSaida);
32
+ return handlerRegistrado(posicionais, resto, modoJson);
35
33
  }
34
+ let codigoSaida = 0;
36
35
  switch (comando) {
37
36
  case "iniciar":
38
- codigoSaida = await comandoIniciar(cwd, normalizarTemplateIniciar(obterOpcao(resto, "--template")), { force: possuiFlag(resto, "--force") });
37
+ codigoSaida = await comandoIniciar(cwd, normalizarTemplateIniciar(obterOpcao(resto, "--template")), { force: possuiFlag(resto, "--force"), exemplosCompletos: possuiFlag(resto, "--com-exemplos") });
39
38
  break;
40
39
  case "author":
41
40
  codigoSaida = await comandoAuthor(posicionais, resto, possuiFlag(resto, "--json"));
@@ -58,13 +57,13 @@ export async function principal() {
58
57
  break;
59
58
  case "ast":
60
59
  codigoSaida = possuiFlag(resto, "--json")
61
- ? await comandoAstJson(resto[0] ?? "")
62
- : await comandoAst(resto[0] ?? "");
60
+ ? await comandoAstJson(posicionais[0] ?? "")
61
+ : await comandoAst(posicionais[0] ?? "");
63
62
  break;
64
63
  case "ir":
65
64
  codigoSaida = possuiFlag(resto, "--json")
66
- ? await comandoIrJson(resto[0] ?? "")
67
- : await comandoIr(resto[0] ?? "");
65
+ ? await comandoIrJson(posicionais[0] ?? "")
66
+ : await comandoIr(posicionais[0] ?? "");
68
67
  break;
69
68
  case "compilar":
70
69
  {
@@ -101,8 +100,8 @@ export async function principal() {
101
100
  break;
102
101
  case "verificar":
103
102
  codigoSaida = possuiFlag(resto, "--json")
104
- ? await comandoVerificarJson(posicionais[0], resolverSaidaPadrao(obterOpcao(resto, "--saida", "./.tmp/sema-verificar"), "typescript", await carregarConfiguracaoProjeto(posicionais[0] ? path.resolve(cwd, posicionais[0]) : cwd)), cwd)
105
- : await comandoVerificar(posicionais[0], resolverSaidaPadrao(obterOpcao(resto, "--saida", "./.tmp/sema-verificar"), "typescript", await carregarConfiguracaoProjeto(posicionais[0] ? path.resolve(cwd, posicionais[0]) : cwd)), cwd);
103
+ ? await comandoVerificarJson(posicionais[0], resolverSaidaPadrao(obterOpcao(resto, "--saida", "./.tmp/sema-verificar"), "typescript", await carregarConfiguracaoProjeto(posicionais[0] ? path.resolve(cwd, posicionais[0]) : cwd)), cwd, { alvo: obterOpcao(resto, "--alvo"), semCache: possuiFlag(resto, "--sem-cache") })
104
+ : await comandoVerificar(posicionais[0], resolverSaidaPadrao(obterOpcao(resto, "--saida", "./.tmp/sema-verificar"), "typescript", await carregarConfiguracaoProjeto(posicionais[0] ? path.resolve(cwd, posicionais[0]) : cwd)), cwd, { alvo: obterOpcao(resto, "--alvo"), semCache: possuiFlag(resto, "--sem-cache") });
106
105
  break;
107
106
  case "inspecionar":
108
107
  codigoSaida = await comandoInspecionar(posicionais[0], possuiFlag(resto, "--json"), cwd, resto);
@@ -120,9 +119,7 @@ export async function principal() {
120
119
  {
121
120
  const fonte = normalizarFonteImportacao(posicionais[0]);
122
121
  if (!fonte || !posicionais[1]) {
123
- console.error("Uso: sema importar <nestjs|fastapi|flask|nextjs|nextjs-consumer|react-vite-consumer|angular-consumer|flutter-consumer|firebase|dotnet|java|go|rust|cpp|php|typescript|python|dart> <diretorio> [--saida <diretorio>] [--namespace <base>] [--json]");
124
- codigoSaida = 1;
125
- break;
122
+ throw erroArgumentoInvalido();
126
123
  }
127
124
  codigoSaida = await comandoImportar(fonte, path.resolve(cwd, posicionais[1]), path.resolve(cwd, obterOpcao(resto, "--saida", "./sema/importado")), obterOpcao(resto, "--namespace"), possuiFlag(resto, "--json"));
128
125
  }
@@ -176,10 +173,8 @@ export async function principal() {
176
173
  codigoSaida = await comandoContextoIa(posicionais[0] ?? "", obterOpcao(resto, "--saida"), possuiFlag(resto, "--json"));
177
174
  break;
178
175
  default:
179
- console.log(ajuda());
180
- codigoSaida = 1;
181
- break;
176
+ throw erroComandoDesconhecido();
182
177
  }
183
- process.exit(codigoSaida);
178
+ return codigoSaida;
184
179
  }
185
180
  //# sourceMappingURL=index.part08.js.map
@@ -1,5 +1,6 @@
1
1
  import { type TemplateIniciar } from "./initTemplatesBase.js";
2
2
  export declare function comandoIniciar(cwd: string, template: TemplateIniciar, opcoes?: {
3
3
  force?: boolean;
4
+ exemplosCompletos?: boolean;
4
5
  }): Promise<number>;
5
6
  export declare function comandoInstalarExemplos(emJson: boolean): Promise<number>;
@@ -4,14 +4,18 @@ import * as fs from "node:fs";
4
4
  import path from "node:path";
5
5
  import { escreverArquivos } from "./fsGovernado.js";
6
6
  import { arquivosTemplateIniciar } from "./initTemplatesBase.js";
7
- import { materializarExemplosOficiais, planejarExemplosOficiais } from "./exemplosOficiais.js";
7
+ import { materializarExemplosOficiais, normalizarCaminhoExemplo, planejarExemplosOficiais } from "./exemplosOficiais.js";
8
8
  import { validarDestinosEscritaWorkspace } from "./workspaceWrite.js";
9
9
  async function sincronizarKitIaInicial(cwd) {
10
10
  const [{ gerarResumoProjetoIa }, { sincronizarEntrypointCodex }] = await Promise.all([
11
11
  import("./index.part04.js"),
12
12
  import("./agentEntryPoints.js"),
13
13
  ]);
14
- const resumoProjeto = await gerarResumoProjetoIa(cwd, undefined, true);
14
+ const resumoProjeto = await gerarResumoProjetoIa(cwd, undefined, true, {
15
+ modo: "fresh",
16
+ executar: true,
17
+ avisos: [],
18
+ });
15
19
  const indexJson = JSON.parse(fs.readFileSync(path.join(resumoProjeto.pastaSaida, "SEMA_INDEX.json"), "utf8"));
16
20
  const codex = await sincronizarEntrypointCodex(resumoProjeto.baseProjeto, indexJson.agentContextPack);
17
21
  return {
@@ -22,6 +26,12 @@ async function sincronizarKitIaInicial(cwd) {
22
26
  codex,
23
27
  };
24
28
  }
29
+ const EXEMPLOS_STARTER_INICIAR = new Set([
30
+ "exemplos/crud_simples.sema",
31
+ "exemplos/cadastro_usuario.sema",
32
+ "exemplos/pedido.sema",
33
+ "exemplos/autenticacao.sema",
34
+ ]);
25
35
  export async function comandoIniciar(cwd, template, opcoes = {}) {
26
36
  const arquivos = arquivosTemplateIniciar(template);
27
37
  const planoExemplos = await planejarExemplosOficiais();
@@ -29,6 +39,9 @@ export async function comandoIniciar(cwd, template, opcoes = {}) {
29
39
  console.error("Diretorio de exemplos oficiais nao foi encontrado no pacote da CLI.");
30
40
  return 1;
31
41
  }
42
+ const exemplosIniciar = opcoes.exemplosCompletos
43
+ ? planoExemplos.arquivos
44
+ : planoExemplos.arquivos.filter((arquivo) => EXEMPLOS_STARTER_INICIAR.has(normalizarCaminhoExemplo(arquivo.caminhoRelativo)));
32
45
  const [{ ARQUIVOS_RESUMO_PROJETO_IA }, { listarDestinosEntrypointCodex }] = await Promise.all([
33
46
  import("./index.part04.js"),
34
47
  import("./agentEntryPoints.js"),
@@ -36,7 +49,7 @@ export async function comandoIniciar(cwd, template, opcoes = {}) {
36
49
  const caminhosTemplate = new Set(arquivos.map((arquivo) => arquivo.caminhoRelativo));
37
50
  const destinos = await validarDestinosEscritaWorkspace(cwd, [
38
51
  ...caminhosTemplate,
39
- ...planoExemplos.arquivos.map((arquivo) => arquivo.caminhoRelativo),
52
+ ...exemplosIniciar.map((arquivo) => arquivo.caminhoRelativo),
40
53
  ...ARQUIVOS_RESUMO_PROJETO_IA,
41
54
  ...listarDestinosEntrypointCodex("AGENTS.md"),
42
55
  ]);
@@ -47,7 +60,7 @@ export async function comandoIniciar(cwd, template, opcoes = {}) {
47
60
  ? arquivos
48
61
  : arquivos.filter((arquivo) => !existentes.has(arquivo.caminhoRelativo));
49
62
  await escreverArquivos(cwd, arquivosParaEscrever, { inserirCabecalhoGovernado: true });
50
- const exemplos = await materializarExemplosOficiais(cwd, true);
63
+ const exemplos = await materializarExemplosOficiais(cwd, true, opcoes.exemplosCompletos ? undefined : EXEMPLOS_STARTER_INICIAR);
51
64
  if (!exemplos.sucesso) {
52
65
  console.error(exemplos.erro);
53
66
  return 1;
@@ -63,6 +76,9 @@ export async function comandoIniciar(cwd, template, opcoes = {}) {
63
76
  console.log(`Projeto Sema inicializado com template ${template}.`);
64
77
  console.log(`Arquivos do projeto: ${arquivosParaEscrever.length} escritos, ${opcoes.force ? 0 : existentes.size} preservados.`);
65
78
  console.log(`Exemplos oficiais sincronizados em ${exemplos.destino} (${exemplos.criados.length} criados, ${exemplos.preservados.length} preservados).`);
79
+ if (!opcoes.exemplosCompletos) {
80
+ console.log("Starter de exemplos instalado; rode sema instalar-exemplos ou sema iniciar --com-exemplos para o pacote completo.");
81
+ }
66
82
  console.log(`Kit IA Codex-native sincronizado (${kitIa.artefatos.length} artefatos; entrypoint ${kitIa.codex.entrypointCodex}; ${kitIa.codex.criados.length} criados, ${kitIa.codex.atualizados.length} atualizados, ${kitIa.codex.preservados.length} preservados).`);
67
83
  return 0;
68
84
  }
@@ -1,4 +1,4 @@
1
- // SEMA-GOVERNED: sema.produto.cli_init_templates
1
+ // SEMA-GOVERNED: sema.produto.cli_init_templates, sema.produto.governanca_ia.drift.cache.modos
2
2
  // Descrição: contrato base e dispatcher dos templates Codex-native de inicialização.
3
3
  import { arquivosInitTemplatesBackend } from "./initTemplatesBackend.js";
4
4
  import { arquivosInitTemplatesWeb } from "./initTemplatesWeb.js";
@@ -73,13 +73,15 @@ Este projeto foi inicializado com Sema.
73
73
  Antes de alterar codigo, contrato ou documentacao:
74
74
 
75
75
  1. leia \`AGENTS.md\`;
76
- 2. rode \`sema --version\`;
77
- 3. rode \`sema resumo\`;
76
+ 2. rode \`sema --version\`; se o shell não localizar o comando, use \`$HOME/.sema/bin/sema\` no macOS/Linux; no Windows, PowerShell usa \`sema.ps1\` no PATH, cmd.exe usa \`sema.cmd\`, e o fallback absoluto é \`& "$env:SystemRoot\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Bypass -File "$HOME\\.sema\\bin\\sema-managed.ps1" --version\`;
77
+ 3. rode \`sema resumo --drift none\` para contexto contratual; score, confiança e implementação ficam não avaliados;
78
78
  4. rode \`sema docs-impacto --intencao "<acao>" --json\`;
79
79
  5. leia \`docs/commands.md\` antes de escolher comando ou interpretar \`--saida\`;
80
80
  6. use \`sema descobrir recomendar --intencao "<objetivo>" --json\` quando não souber qual capacidade ou pipeline aplicar;
81
81
  7. use \`exemplos/\` e \`docs/syntax.md\` antes de criar ou corrigir \`.sema\`.
82
82
 
83
+ Quando precisar comprovar o código vivo, rode \`sema drift <contrato.sema> --escopo modulo --cache fresh --json\`. Cache acelera navegação, mas não é prova final de fechamento.
84
+
83
85
  ## Estrutura criada
84
86
 
85
87
  - \`contratos/\`: contratos semanticamente governados.
@@ -117,7 +119,7 @@ export function arquivosTemplateIniciar(template) {
117
119
  ?? [
118
120
  {
119
121
  caminhoRelativo: "sema.config.json",
120
- conteudo: "{\n \"origens\": [\"./contratos\"],\n \"saida\": \"./generated\",\n \"alvos\": [\"typescript\", \"javascript\", \"python\", \"php\", \"dart\", \"lua\", \"html\", \"css\"],\n \"alvoPadrao\": \"typescript\",\n \"estruturaSaida\": \"modulos\",\n \"framework\": \"base\",\n \"modoEstrito\": true,\n \"diretoriosSaidaPorAlvo\": {\n \"typescript\": \"./generated/typescript\",\n \"javascript\": \"./generated/javascript\",\n \"python\": \"./generated/python\",\n \"php\": \"./generated/php\",\n \"dart\": \"./generated/dart\",\n \"lua\": \"./generated/lua\",\n \"html\": \"./generated/html\",\n \"css\": \"./generated/css\",\n \"dotnet\": \"./generated/dotnet\",\n \"cpp\": \"./generated/cpp\"\n },\n \"convencoesGeracaoPorProjeto\": \"base\"\n}\n",
122
+ conteudo: "{\n \"origens\": [\"./contratos\"],\n \"saida\": \"./generated\",\n \"alvos\": [\"typescript\", \"javascript\"],\n \"alvoPadrao\": \"typescript\",\n \"estruturaSaida\": \"modulos\",\n \"framework\": \"base\",\n \"modoEstrito\": true,\n \"diretoriosSaidaPorAlvo\": {\n \"typescript\": \"./generated/typescript\",\n \"javascript\": \"./generated/javascript\",\n \"python\": \"./generated/python\",\n \"php\": \"./generated/php\",\n \"dart\": \"./generated/dart\",\n \"lua\": \"./generated/lua\",\n \"html\": \"./generated/html\",\n \"css\": \"./generated/css\",\n \"dotnet\": \"./generated/dotnet\",\n \"cpp\": \"./generated/cpp\"\n },\n \"convencoesGeracaoPorProjeto\": \"base\"\n}\n",
121
123
  },
122
124
  ...arquivosBase,
123
125
  ];
@@ -1,3 +1,4 @@
1
+ export { criarAjudaPipelineConteudo } from "./help.js";
1
2
  import { HEAD_GENESIS_LEDGER_CONTEUDO } from "./ledger.js";
2
3
  export declare function comandoPipelineConteudo(_posicionaisGlobais: string[], args: string[], emJson: boolean): Promise<number>;
3
4
  export { HEAD_GENESIS_LEDGER_CONTEUDO };