@semacode/cli 2.3.1 → 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 (250) 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 +567 -557
  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/drift.part01.d.ts +26 -24
  45. package/dist/drift.part01.js +2 -1
  46. package/dist/drift.part04.d.ts +12 -3
  47. package/dist/drift.part04.js +88 -17
  48. package/dist/drift.part05.d.ts +2 -2
  49. package/dist/drift.part05.js +8 -6
  50. package/dist/drift.part06.d.ts +2 -2
  51. package/dist/drift.part06.js +113 -26
  52. package/dist/drift.part07.d.ts +11 -11
  53. package/dist/drift.part07.js +261 -265
  54. package/dist/drift.part08.d.ts +2 -2
  55. package/dist/drift.part08.js +35 -26
  56. package/dist/drift.part11.js +238 -56
  57. package/dist/drift.part12.d.ts +1 -1
  58. package/dist/drift.part12.js +193 -21
  59. package/dist/drift.part13.d.ts +20 -39
  60. package/dist/drift.part13.js +601 -647
  61. package/dist/drift.part14.js +21 -7
  62. package/dist/driftCacheCas.d.ts +43 -0
  63. package/dist/driftCacheCas.js +351 -0
  64. package/dist/driftCacheFilesystem.d.ts +64 -0
  65. package/dist/driftCacheFilesystem.js +313 -0
  66. package/dist/driftCacheModes.d.ts +38 -0
  67. package/dist/driftCacheModes.js +147 -0
  68. package/dist/driftCacheStore.d.ts +80 -0
  69. package/dist/driftCacheStore.js +603 -0
  70. package/dist/driftCatalogo.d.ts +2 -28
  71. package/dist/driftCatalogo.js +143 -284
  72. package/dist/driftEscopo.d.ts +1 -3
  73. package/dist/driftEscopo.js +235 -151
  74. package/dist/driftEscopoReferencias.d.ts +5 -1
  75. package/dist/driftEscopoReferencias.js +375 -28
  76. package/dist/driftOrcamento.d.ts +0 -6
  77. package/dist/driftOrcamento.js +2 -1
  78. package/dist/execucoesExternas.js +19 -5
  79. package/dist/geracaoCore.js +4 -6
  80. package/dist/iaPrompts.d.ts +3 -3
  81. package/dist/iaPrompts.js +312 -313
  82. package/dist/index.d.ts +4 -1
  83. package/dist/index.js +6 -25
  84. package/dist/index.part01.d.ts +20 -28
  85. package/dist/index.part01.js +16 -237
  86. package/dist/index.part02.js +36 -22
  87. package/dist/index.part03.d.ts +24 -2
  88. package/dist/index.part03.js +83 -19
  89. package/dist/index.part04.d.ts +10 -2
  90. package/dist/index.part04.js +142 -120
  91. package/dist/index.part05.js +80 -78
  92. package/dist/index.part06.js +34 -17
  93. package/dist/index.part07.js +7 -3
  94. package/dist/index.part08.d.ts +1 -1
  95. package/dist/index.part08.js +22 -27
  96. package/dist/initCommand.js +5 -1
  97. package/dist/initTemplatesBase.js +81 -79
  98. package/dist/pipelineConteudo/command.d.ts +1 -0
  99. package/dist/pipelineConteudo/command.js +9 -2
  100. package/dist/pipelineConteudo/help.d.ts +2 -0
  101. package/dist/pipelineConteudo/help.js +33 -0
  102. package/dist/profileAuthorCommand.js +3 -7
  103. package/dist/profileCommand.js +3 -7
  104. package/dist/projetoCarregar.js +35 -17
  105. package/dist/projetoCatalogo.d.ts +1 -0
  106. package/dist/projetoCatalogo.js +64 -25
  107. package/dist/projetoOrigens.d.ts +2 -0
  108. package/dist/projetoOrigens.js +65 -9
  109. package/dist/projetoTipos.d.ts +1 -0
  110. package/dist/resultadoCli.d.ts +20 -0
  111. package/dist/resultadoCli.js +57 -0
  112. package/dist/saidaCli.d.ts +35 -0
  113. package/dist/saidaCli.js +118 -0
  114. package/dist/sistemasInterativos/acceptanceEvidence.d.ts +22 -0
  115. package/dist/sistemasInterativos/acceptanceEvidence.js +345 -0
  116. package/dist/sistemasInterativos/engineObservation.d.ts +12 -0
  117. package/dist/sistemasInterativos/engineObservation.js +438 -0
  118. package/dist/sistemasInterativos/jobOrchestration.d.ts +2 -0
  119. package/dist/sistemasInterativos/jobOrchestration.js +204 -0
  120. package/dist/sistemasInterativos/operationPrimitives.d.ts +21 -0
  121. package/dist/sistemasInterativos/operationPrimitives.js +194 -0
  122. package/dist/sistemasInterativos/operations.d.ts +4 -39
  123. package/dist/sistemasInterativos/operations.js +5 -1164
  124. package/dist/skillCommand.d.ts +5 -0
  125. package/dist/skillCommand.js +88 -0
  126. package/docs/README.md +34 -30
  127. package/docs/ai-integration.md +25 -12
  128. package/docs/ai-onboarding.md +37 -18
  129. package/docs/ai-workflow.md +9 -7
  130. package/docs/cli.md +125 -7
  131. package/docs/commands.md +41 -20
  132. package/docs/deploy.md +21 -8
  133. package/docs/descoberta-capacidades.md +106 -106
  134. package/docs/documentation.md +49 -39
  135. package/docs/drift-cache.md +108 -0
  136. package/docs/getting-started.md +43 -18
  137. package/docs/pipeline-conteudo.md +246 -246
  138. package/docs/profiles.md +54 -54
  139. package/docs/repositories.md +19 -2
  140. package/docs/rollback.md +15 -8
  141. package/docs/security.md +25 -3
  142. package/docs/sistemas-interativos.md +379 -374
  143. package/docs/testing.md +139 -40
  144. package/exemplos/pipeline-conteudo/README.md +44 -44
  145. package/exemplos/pipeline-conteudo/alvos.json +23 -23
  146. package/exemplos/pipeline-conteudo/definicao.json +136 -136
  147. package/exemplos/profile_simulation.sema +211 -211
  148. package/exemplos/sistemas-interativos/README.md +100 -100
  149. package/exemplos/sistemas-interativos/advanced/acceptance-context-evaluate-valid.json +5 -5
  150. package/exemplos/sistemas-interativos/advanced/acceptance-lock-valid.json +16 -16
  151. package/exemplos/sistemas-interativos/advanced/asset-provenance-valid.json +32 -32
  152. package/exemplos/sistemas-interativos/advanced/autonomy-repair-valid.json +93 -93
  153. package/exemplos/sistemas-interativos/advanced/control-run-definition-valid.json +78 -78
  154. package/exemplos/sistemas-interativos/advanced/control-run-valid.json +27 -27
  155. package/exemplos/sistemas-interativos/advanced/distributed-workers-valid.json +79 -79
  156. package/exemplos/sistemas-interativos/advanced/editor-state-valid.json +42 -42
  157. package/exemplos/sistemas-interativos/advanced/engine-snapshot-after-valid.json +32 -32
  158. package/exemplos/sistemas-interativos/advanced/engine-snapshot-before-valid.json +23 -23
  159. package/exemplos/sistemas-interativos/advanced/job-orchestration-valid.json +39 -39
  160. package/exemplos/sistemas-interativos/advanced/multimodal-evidence-valid.json +46 -46
  161. package/exemplos/sistemas-interativos/advanced/multiplayer-authority-valid.json +39 -39
  162. package/exemplos/sistemas-interativos/advanced/playtest-fuzz-valid.json +37 -37
  163. package/exemplos/sistemas-interativos/advanced/portability-valid.json +104 -104
  164. package/exemplos/sistemas-interativos/advanced/temporal-evidence-valid.json +27 -27
  165. package/exemplos/sistemas-interativos/advanced/temporal-valid.json +118 -118
  166. package/exemplos/sistemas-interativos/experience-ir-valid.json +459 -459
  167. package/exemplos/sistemas-interativos/game-2d.json +83 -83
  168. package/exemplos/sistemas-interativos/game-3d-human.json +81 -81
  169. package/exemplos/sistemas-interativos/game-pixel-16-bit.json +97 -97
  170. package/exemplos/sistemas-interativos/game-pixel-8-bit.json +94 -94
  171. package/exemplos/sistemas-interativos/game-xr-human.json +80 -80
  172. package/exemplos/sistemas-interativos/hybrid-2-5d.json +108 -108
  173. package/exemplos/sistemas-interativos/protocol-mutating-rollback-valid.json +75 -75
  174. package/exemplos/sistemas-interativos/protocol-read-only-valid.json +58 -58
  175. package/exemplos/sistemas-interativos/simulation-2d-controlled.json +97 -97
  176. package/exemplos/sistemas-interativos/simulation-3d-calibrated-autonomous.json +141 -141
  177. package/exemplos/sistemas-interativos/simulation-headless-autonomous-batch.json +112 -112
  178. package/exemplos/sistemas-interativos/simulation-pixel-16-bit.json +103 -103
  179. package/exemplos/sistemas-interativos/simulation-text-controlled.json +95 -95
  180. package/node_modules/@sema/gerador-cpp/package.json +1 -1
  181. package/node_modules/@sema/gerador-dotnet/package.json +1 -1
  182. package/node_modules/@sema/gerador-lua/dist/index.js +51 -51
  183. package/node_modules/@sema/gerador-php/dist/index.js +113 -113
  184. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +1 -0
  185. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +1 -0
  186. package/package.json +9 -4
  187. package/scripts/postinstall.mjs +148 -0
  188. package/skills/sema/SKILL.md +199 -0
  189. package/skills/sema/agents/openai.yaml +4 -0
  190. package/dist/driftCache.d.ts +0 -49
  191. package/dist/driftCache.js +0 -311
  192. package/dist/driftCacheIncremental.d.ts +0 -98
  193. package/dist/driftCacheIncremental.js +0 -596
  194. package/dist/driftCatalogoPersistente.d.ts +0 -8
  195. package/dist/driftCatalogoPersistente.js +0 -77
  196. package/node_modules/@sema/gerador-cpp/dist/index.js.map +0 -1
  197. package/node_modules/@sema/gerador-css/dist/index.js.map +0 -1
  198. package/node_modules/@sema/gerador-css/dist/index.part01.js.map +0 -1
  199. package/node_modules/@sema/gerador-css/dist/index.part02.js.map +0 -1
  200. package/node_modules/@sema/gerador-dart/dist/index.js.map +0 -1
  201. package/node_modules/@sema/gerador-dotnet/dist/index.js.map +0 -1
  202. package/node_modules/@sema/gerador-html/dist/index.js.map +0 -1
  203. package/node_modules/@sema/gerador-javascript/dist/index.js.map +0 -1
  204. package/node_modules/@sema/gerador-lua/dist/index.js.map +0 -1
  205. package/node_modules/@sema/gerador-php/dist/index.js.map +0 -1
  206. package/node_modules/@sema/gerador-python/dist/index.js.map +0 -1
  207. package/node_modules/@sema/gerador-python/dist/index.part01.js.map +0 -1
  208. package/node_modules/@sema/gerador-python/dist/index.part02.js.map +0 -1
  209. package/node_modules/@sema/gerador-typescript/dist/index.js.map +0 -1
  210. package/node_modules/@sema/gerador-typescript/dist/index.part01.js.map +0 -1
  211. package/node_modules/@sema/gerador-typescript/dist/index.part02.js.map +0 -1
  212. package/node_modules/@sema/gerador-typescript/dist/index.part03.js.map +0 -1
  213. package/node_modules/@sema/nucleo/dist/ast/tipos.js.map +0 -1
  214. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js.map +0 -1
  215. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js.map +0 -1
  216. package/node_modules/@sema/nucleo/dist/diagnosticos/snippets.js.map +0 -1
  217. package/node_modules/@sema/nucleo/dist/formatador/index.js.map +0 -1
  218. package/node_modules/@sema/nucleo/dist/formatador/index.part01.js.map +0 -1
  219. package/node_modules/@sema/nucleo/dist/formatador/index.part02.js.map +0 -1
  220. package/node_modules/@sema/nucleo/dist/index.js.map +0 -1
  221. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +0 -1
  222. package/node_modules/@sema/nucleo/dist/ir/conversor.part01.js.map +0 -1
  223. package/node_modules/@sema/nucleo/dist/ir/conversor.part02.js.map +0 -1
  224. package/node_modules/@sema/nucleo/dist/ir/conversor.part03.js.map +0 -1
  225. package/node_modules/@sema/nucleo/dist/ir/modelos.js.map +0 -1
  226. package/node_modules/@sema/nucleo/dist/lexer/lexer.js.map +0 -1
  227. package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +0 -1
  228. package/node_modules/@sema/nucleo/dist/parser/parser.declaracoes.js.map +0 -1
  229. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +0 -1
  230. package/node_modules/@sema/nucleo/dist/parser/parser.modulo.js.map +0 -1
  231. package/node_modules/@sema/nucleo/dist/parser/parser.part01.js.map +0 -1
  232. package/node_modules/@sema/nucleo/dist/parser/parser.part02.js.map +0 -1
  233. package/node_modules/@sema/nucleo/dist/parser/parser.part03.js.map +0 -1
  234. package/node_modules/@sema/nucleo/dist/persistencia/contratos.js.map +0 -1
  235. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +0 -1
  236. package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.js.map +0 -1
  237. package/node_modules/@sema/nucleo/dist/semantico/analisador.part02.js.map +0 -1
  238. package/node_modules/@sema/nucleo/dist/semantico/analisador.part03.js.map +0 -1
  239. package/node_modules/@sema/nucleo/dist/semantico/analisador.part04.js.map +0 -1
  240. package/node_modules/@sema/nucleo/dist/semantico/analisador.part05.js.map +0 -1
  241. package/node_modules/@sema/nucleo/dist/semantico/analisador.part06.js.map +0 -1
  242. package/node_modules/@sema/nucleo/dist/semantico/analisador.part07.js.map +0 -1
  243. package/node_modules/@sema/nucleo/dist/semantico/analisador.part08.js.map +0 -1
  244. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +0 -1
  245. package/node_modules/@sema/nucleo/dist/semantico/estruturas.part01.js.map +0 -1
  246. package/node_modules/@sema/nucleo/dist/semantico/estruturas.part02.js.map +0 -1
  247. package/node_modules/@sema/nucleo/dist/semantico/orcamentoSemantico.js.map +0 -1
  248. package/node_modules/@sema/nucleo/dist/semantico/seguranca.js.map +0 -1
  249. package/node_modules/@sema/nucleo/dist/util/arquivos.js.map +0 -1
  250. package/node_modules/@sema/padroes/dist/index.js.map +0 -1
@@ -8,7 +8,6 @@ import { criarEntradaCanonicaProjeto } from './agentContext.js';
8
8
  import { renderizarSemaBoot, renderizarSemaSmallModel, } from './agentEntryPoints.js';
9
9
  import { escreverArquivoWorkspaceSeguro, validarDestinosEscritaWorkspace } from './workspaceWrite.js';
10
10
  import { resumirListaTexto } from './textoListas.js';
11
- import { criarResultadoDriftNaoExecutado, resolverAnaliseDriftCli, } from "./index.part01.js";
12
11
  import { coletarResumoSemanticoModulo, criarBriefingMinimo, criarPromptCurtoModulo, renderizarResumoModuloMarkdown, renderizarResumoModuloTexto } from "./index.part02.js";
13
12
  export function renderizarResumoProjetoMarkdown(geradoEm, modulos, guiaPorCapacidade) {
14
13
  const entradaCanonica = criarEntradaCanonicaProjeto(guiaPorCapacidade);
@@ -83,7 +82,7 @@ export function renderizarResumoProjetoMarkdown(geradoEm, modulos, guiaPorCapaci
83
82
  linhas.push(`- Faz: ${modulo.faz}`);
84
83
  linhas.push(`- Publico: ${resumirListaTexto(modulo.superficiesPublicas, 4)}`);
85
84
  linhas.push(`- Tocar: ${resumirListaTexto(modulo.arquivosProvaveis, 4)}`);
86
- 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}`);
87
86
  linhas.push(`- Lacunas: ${resumirListaTexto(modulo.lacunas, 4)}`);
88
87
  linhas.push("");
89
88
  }
@@ -249,16 +248,74 @@ export function criarBriefingAgente(arquivo, modulo, ir, resumoDrift, resultadoD
249
248
  ancoragensVinculo: resumoDrift.ancoragensVinculo,
250
249
  testesMinimos: [
251
250
  "sema validar <arquivo> --json",
252
- "sema drift <arquivo> --json",
251
+ "sema drift <arquivo> --cache fresh --json",
253
252
  "sema verificar <arquivo-ou-pasta> --json",
254
253
  ],
255
254
  };
256
255
  }
257
- export async function carregarContextoModuloIa(arquivoEntrada, args = [], modoDriftPadrao = "fresh") {
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) {
258
313
  const arquivo = path.resolve(arquivoEntrada);
259
314
  garantirArquivoSema(arquivo);
260
- const analiseDrift = resolverAnaliseDriftCli(args, modoDriftPadrao);
261
- const contextoProjeto = await carregarProjeto(arquivo, process.cwd(), { escopo: analiseDrift.opcoes.escopo });
315
+ const contextoProjeto = await carregarProjeto(arquivo, process.cwd(), {
316
+ escopo: "modulo",
317
+ adiarDescobertaCodigo: true,
318
+ });
262
319
  const resultadoModulo = contextoProjeto.modulosSelecionados.find((item) => path.resolve(item.caminho) === arquivo)?.resultado;
263
320
  if (!resultadoModulo) {
264
321
  falharContextoIa(`Nao foi possivel encontrar o modulo correspondente ao arquivo ${arquivo}.`);
@@ -266,20 +323,27 @@ export async function carregarContextoModuloIa(arquivoEntrada, args = [], modoDr
266
323
  const sucesso = !temErros(resultadoModulo.diagnosticos);
267
324
  const modulo = resultadoModulo.modulo?.nome ?? path.basename(arquivo, ".sema");
268
325
  const geradoEm = new Date().toISOString();
269
- const resultadoDrift = analiseDrift.modo === "none"
270
- ? criarResultadoDriftNaoExecutado(contextoProjeto, analiseDrift.opcoes)
271
- : await analisarDriftLegado(contextoProjeto, analiseDrift.opcoes);
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;
272
336
  const drift = {
273
337
  comando: "drift",
274
338
  caminho: arquivo,
275
339
  modulo: resultadoModulo.modulo?.nome ?? null,
276
- sucesso: resultadoDrift.sucesso,
277
- modoAnalise: analiseDrift.modo,
278
- executado: analiseDrift.modo !== "none",
279
- aviso: analiseDrift.modo === "none"
280
- ? "Análise de drift não executada; nenhuma conclusão sobre o código foi produzida."
281
- : null,
282
- 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,
283
347
  drift: resultadoDrift,
284
348
  };
285
349
  const validar = {
@@ -316,7 +380,9 @@ export async function carregarContextoModuloIa(arquivoEntrada, args = [], modoDr
316
380
  diagnosticos: resultadoModulo.diagnosticos,
317
381
  ir: resultadoModulo.ir ?? null,
318
382
  };
319
- 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);
320
386
  return {
321
387
  arquivo,
322
388
  modulo,
@@ -330,8 +396,6 @@ export async function carregarContextoModuloIa(arquivoEntrada, args = [], modoDr
330
396
  irJson: ir,
331
397
  drift,
332
398
  briefing,
333
- modoVerificacaoCodigo: analiseDrift.modo === "none" ? "contratos_apenas" : undefined,
334
- fontesConclusao: analiseDrift.modo === "none" ? ["contrato"] : undefined,
335
399
  };
336
400
  }
337
401
  export const ARQUIVOS_RESUMO_MODULO_IA = [
@@ -1,7 +1,8 @@
1
1
  import { type GuiaCapacidadeIaMap } from './agentContextTipos.js';
2
- import { ContextoIaGerado, ResumoSemanticoModuloIa, type ModoAnaliseDriftCli } 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, args?: string[], modoDriftPadrao?: ModoAnaliseDriftCli): 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";
@@ -16,9 +16,9 @@ import { carregarModulos } from './carregarModulos.js';
16
16
  import { obterOpcao, obterOpcoesRepetidas, possuiFlag } from './cliArgs.js';
17
17
  import { resumirListaTexto, unicosOrdenados } from './textoListas.js';
18
18
  import { EXTENSOES_CODIGO, listarArquivosRecursivosLimitado } from './projetoBusca.js';
19
- import { VERSAO_CLI, criarResultadoDriftNaoExecutado, resolverAnaliseDriftCli, } from "./index.part01.js";
19
+ import { VERSAO_CLI } from "./index.part01.js";
20
20
  import { coletarResumoSemanticoModulo, descreverFontesConclusao, detectarFontesConclusaoSnapshot, detectarModoVerificacaoCodigo } from "./index.part02.js";
21
- import { ARQUIVOS_RESUMO_MODULO_IA, carregarContextoModuloIa, criarBriefingAgente, gerarArquivosResumoModuloIa, renderizarResumoProjetoMarkdown, resumirDriftPorModulo } from "./index.part03.js";
21
+ import { ARQUIVOS_RESUMO_MODULO_IA, carregarContextoModuloIa, criarBriefingAgente, criarBriefingAgenteContratos, gerarArquivosResumoModuloIa, renderizarResumoProjetoMarkdown, resumirDriftPorModulo } from "./index.part03.js";
22
22
  export const ARQUIVOS_RESUMO_PROJETO_IA = [
23
23
  ARQUIVO_SEMA_BOOT,
24
24
  ARQUIVO_SEMA_SMALL_MODEL,
@@ -53,26 +53,36 @@ function escolherTopArquivosResumo(modulos, arquivosCodigoDetectados) {
53
53
  }
54
54
  return { arquivos: [], fonte: "nenhum" };
55
55
  }
56
- export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escreverNaRaiz = false, args = [], modoDriftPadrao = "fresh") {
57
- const contextoProjeto = await carregarProjeto(entrada, process.cwd());
56
+ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escreverNaRaiz = false, analiseDrift = { modo: "none", executar: false, avisos: [] }) {
57
+ const contextoProjeto = await carregarProjeto(entrada, process.cwd(), {
58
+ escopo: "projeto",
59
+ adiarDescobertaCodigo: !analiseDrift.executar,
60
+ });
58
61
  const geradoEm = new Date().toISOString();
59
62
  const guiaPorCapacidade = criarGuiaCapacidadeIa();
60
63
  const entradaCanonica = criarEntradaCanonicaProjeto(guiaPorCapacidade);
61
64
  const agentContextPack = entradaCanonica.agentContextPack;
62
- const analiseDrift = resolverAnaliseDriftCli(args, modoDriftPadrao);
63
- const modoVerificacaoCodigo = analiseDrift.modo === "none"
64
- ? "contratos_apenas"
65
- : await detectarModoVerificacaoCodigo(contextoProjeto.baseProjeto, contextoProjeto.diretoriosCodigo);
66
- const fontesConclusao = analiseDrift.modo === "none"
67
- ? ["contrato"]
68
- : await detectarFontesConclusaoSnapshot(contextoProjeto.baseProjeto);
69
- const resultadoDrift = analiseDrift.modo === "none"
70
- ? criarResultadoDriftNaoExecutado(contextoProjeto, analiseDrift.opcoes)
71
- : await analisarDriftLegado(contextoProjeto, analiseDrift.opcoes);
65
+ const modoVerificacaoCodigo = analiseDrift.executar
66
+ ? await detectarModoVerificacaoCodigo(contextoProjeto.baseProjeto, contextoProjeto.diretoriosCodigo)
67
+ : "contratos_apenas";
68
+ const fontesConclusao = analiseDrift.executar
69
+ ? await detectarFontesConclusaoSnapshot(contextoProjeto.baseProjeto)
70
+ : ["contrato"];
71
+ const resultadoDrift = analiseDrift.executar
72
+ ? await analisarDriftLegado(contextoProjeto, {
73
+ escopo: "projeto",
74
+ modoCache: analiseDrift.modo,
75
+ avisosModoCache: analiseDrift.avisos,
76
+ })
77
+ : null;
72
78
  const modulos = contextoProjeto.modulosSelecionados.map((item) => {
73
79
  const modulo = item.resultado.modulo?.nome ?? path.basename(item.caminho, ".sema");
74
- const driftResumo = resumirDriftPorModulo(modulo, item.caminho, resultadoDrift);
75
- const briefing = criarBriefingAgente(item.caminho, modulo, item.resultado.ir ?? null, driftResumo, resultadoDrift);
80
+ const driftResumo = resultadoDrift
81
+ ? resumirDriftPorModulo(modulo, item.caminho, resultadoDrift)
82
+ : null;
83
+ const briefing = resultadoDrift && driftResumo
84
+ ? criarBriefingAgente(item.caminho, modulo, item.resultado.ir ?? null, driftResumo, resultadoDrift)
85
+ : criarBriefingAgenteContratos(item.caminho, modulo, item.resultado.ir ?? null);
76
86
  return coletarResumoSemanticoModulo({
77
87
  arquivo: item.caminho,
78
88
  modulo,
@@ -83,12 +93,12 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
83
93
  comando: "drift",
84
94
  caminho: item.caminho,
85
95
  modulo,
86
- sucesso: resultadoDrift.sucesso,
87
- modoAnalise: analiseDrift.modo,
88
- executado: analiseDrift.modo !== "none",
89
- aviso: analiseDrift.modo === "none"
90
- ? "Análise de drift não executada; nenhuma conclusão sobre o código foi produzida."
91
- : null,
96
+ modo: analiseDrift.modo,
97
+ executada: analiseDrift.executar,
98
+ sucesso: resultadoDrift?.sucesso ?? null,
99
+ aviso: analiseDrift.executar
100
+ ? null
101
+ : "Análise de drift não executada; implementação, vínculos e rotas não foram verificados.",
92
102
  resumo: driftResumo,
93
103
  drift: resultadoDrift,
94
104
  },
@@ -96,7 +106,7 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
96
106
  fontesConclusao,
97
107
  });
98
108
  });
99
- const arquivosCodigoDetectados = modoVerificacaoCodigo === "codigo_completo"
109
+ const arquivosCodigoDetectados = analiseDrift.executar && modoVerificacaoCodigo === "codigo_completo"
100
110
  ? await listarTopArquivosCodigoDetectados(contextoProjeto.diretoriosCodigo)
101
111
  : [];
102
112
  const topArquivosResumo = escolherTopArquivosResumo(modulos, arquivosCodigoDetectados);
@@ -117,6 +127,15 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
117
127
  cliVersao: VERSAO_CLI,
118
128
  baseProjeto,
119
129
  modoVerificacaoCodigo,
130
+ analiseDrift: {
131
+ modo: analiseDrift.modo,
132
+ executada: analiseDrift.executar,
133
+ sucesso: resultadoDrift?.sucesso ?? null,
134
+ aviso: analiseDrift.executar
135
+ ? null
136
+ : "Análise de drift não executada; o resumo contém somente evidência contratual.",
137
+ cache: resultadoDrift?.escopo_aplicado.cache ?? null,
138
+ },
120
139
  fontesConclusao,
121
140
  conclusoesPorFonte: descreverFontesConclusao(fontesConclusao, modoVerificacaoCodigo),
122
141
  totalModulos: modulos.length,
@@ -130,6 +149,7 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
130
149
  `PROJETO: ${path.basename(baseProjeto)}`,
131
150
  `MODULOS: ${modulos.length}`,
132
151
  `MODO_CODIGO: ${modoVerificacaoCodigo}`,
152
+ `RESULTADO_DRIFT: ${resultadoDrift ? (resultadoDrift.sucesso ? "sucesso" : "falha") : "não avaliado"}`,
133
153
  `FONTES_CONCLUSAO: ${resumirListaTexto(fontesConclusao, 4)}`,
134
154
  `ENTRADA_IA: ${entradaCanonica.porCapacidade.fraca.join(" -> ")}`,
135
155
  `POLITICA_PLATAFORMA: Sema governa projeto e nao contorna politicas da plataforma; se houver alerta externo, pare e explique sem burlar filtro`,
@@ -150,6 +170,7 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
150
170
  `BASE: ${baseProjeto}`,
151
171
  `MODULOS: ${modulos.length}`,
152
172
  `MODO_CODIGO: ${modoVerificacaoCodigo}`,
173
+ `RESULTADO_DRIFT: ${resultadoDrift ? (resultadoDrift.sucesso ? "sucesso" : "falha") : "não avaliado"}`,
153
174
  ...(modoVerificacaoCodigo === "contratos_apenas"
154
175
  ? ["AVISO_CODIGO: somente contratos enviados; implementacao nao verificada neste modo"]
155
176
  : modoVerificacaoCodigo === "codigo_selecionado"
@@ -193,6 +214,7 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
193
214
  artefatos: [...ARQUIVOS_RESUMO_PROJETO_IA],
194
215
  modulos,
195
216
  guiaPorCapacidade,
217
+ analiseDrift: indexJson.analiseDrift,
196
218
  };
197
219
  }
198
220
  export async function gerarContextoIa(arquivoEntrada, pastaSaidaOpcional) {
@@ -218,102 +240,102 @@ export async function gerarContextoIa(arquivoEntrada, pastaSaidaOpcional) {
218
240
  await escreverArquivoWorkspaceSeguro(pastaBase, artefato.caminhoRelativo, artefato.conteudo, { sobrescrever: true });
219
241
  }
220
242
  const resumoGerado = await gerarArquivosResumoModuloIa(contexto, pastaBase);
221
- const resumo = `# Contexto de IA para ${contexto.modulo}
222
-
223
- - Arquivo alvo: \`${contexto.arquivo}\`
224
- - Modulo: \`${contexto.modulo}\`
225
- - Sucesso em validar: \`${contexto.sucesso}\`
226
- - Quantidade de diagnosticos: \`${contexto.diagnosticos.length}\`
227
- - Gerado em: \`${contexto.geradoEm}\`
228
-
229
- ## Arquivos gerados neste pacote
230
-
231
- - \`agent-context-pack.json\`
232
- - \`${ARQUIVO_SEMA_BOOT}\`
233
- - \`${ARQUIVO_SEMA_SMALL_MODEL}\`
234
- - \`resumo.micro.txt\`
235
- - \`resumo.curto.txt\`
236
- - \`resumo.md\`
237
- - \`briefing.min.json\`
238
- - \`prompt-curto.txt\`
239
- - \`validar.json\`
240
- - \`diagnosticos.json\`
241
- - \`ast.json\`
242
- - \`ir.json\`
243
- - \`drift.json\`
244
- - \`briefing.json\`
245
-
246
- ## Fluxo recomendado para o agente
247
-
248
- Antes de escolher arquivo de código, leia \`${ARQUIVO_SEMA_BOOT}\` e \`agent-context-pack.json\`. Eles declaram regras obrigatórias, proibições, prioridades, idioma humano e quando abrir texto bruto como \`AGENTS.md\`, \`exemplos/\`, docs e contratos.
249
-
250
- ## Políticas da plataforma
251
-
252
- - Sema governa contrato, escopo, drift, evidência e qualidade; não contorna políticas, termos, permissões, segurança ou leis.
253
- - Se houver alerta externo, trate como bloqueio da plataforma ou falso positivo possível, explique de forma neutra e não tente burlar filtro.
254
-
255
- ### IA fraca, gratuita ou com pouca disciplina
256
-
257
- 1. Ler \`${ARQUIVO_SEMA_BOOT}\`.
258
- 2. Ler \`${ARQUIVO_SEMA_SMALL_MODEL}\`.
259
- 3. Ler \`agent-context-pack.json\`.
260
- 4. Ler \`resumo.micro.txt\`.
261
- 5. Ler \`briefing.min.json\`.
262
- 6. Se ainda couber contexto, ler \`resumo.curto.txt\`.
263
-
264
- ### IA média
265
-
266
- 1. Ler \`${ARQUIVO_SEMA_BOOT}\`.
267
- 2. Ler \`agent-context-pack.json\`.
268
- 3. Ler \`resumo.curto.txt\`.
269
- 4. Ler \`briefing.min.json\`.
270
- 5. Ler \`drift.json\`.
271
- 6. Se precisar, subir para \`resumo.md\`.
272
-
273
- ### IA forte ou com tool use
274
-
275
- 1. Ler \`${ARQUIVO_SEMA_BOOT}\`.
276
- 2. Ler \`agent-context-pack.json\`.
277
- 3. Ler \`README.md\`.
278
- 4. Ler \`resumo.md\`.
279
- 5. Ler \`briefing.json\`.
280
- 6. Ler \`drift.json\`.
281
- 7. Só depois abrir \`ir.json\` e \`ast.json\`.
282
-
283
- ## Idioma humano
284
-
285
- - Responda no idioma do usuário.
286
- - Em PT-BR, use acentos, cedilha, pontuação e símbolos normais.
287
- - A DSL \`.sema\` pode ser ASCII; texto humano não precisa ser.
288
-
289
- ## Texto bruto sob demanda
290
-
291
- - Abra \`AGENTS.md\` antes de editar código, contrato, docs operacionais, release ou deploy.
292
- - Abra \`exemplos/\` antes de criar ou corrigir sintaxe \`.sema\`.
293
- - Abra \`docs/syntax.md\` quando exemplos não bastarem para resolver a gramática.
294
- - Abra \`contratos/\` antes de qualquer implementação ou mudança de comportamento.
295
-
296
- ## Timeout e retry
297
-
298
- - Timeout local do agente não é falha do Sema.
299
- - Se uma chamada Sema estourar, aumente o timeout e tente de novo.
300
- - Se o projeto inteiro for lento, escopar para \`sema resumo "${contexto.arquivo}" --micro --para mudanca\`.
301
- - Se o ambiente impedir continuar, pare bloqueado e não avance com código sem Sema.
302
-
303
- ## Fechamento
304
-
305
- 1. Editar o arquivo \`.sema\`.
306
- 2. Rodar \`sema formatar "${contexto.arquivo}"\`.
307
- 3. Rodar \`sema validar "${contexto.arquivo}" --json\`.
308
- 4. Rodar \`sema drift "${contexto.arquivo}" --json\`.
309
- 5. Fechar com \`sema verificar <arquivo-ou-pasta> --json --saida ./.tmp/verificacao-ia\`.
310
-
311
- ## Textos base para onboarding do agente
312
-
313
- - \`sema starter-ia\`
314
- - \`sema resumo "${contexto.arquivo}" --micro --para onboarding\`
315
- - \`sema prompt-curto "${contexto.arquivo}" --para mudanca\`
316
- - \`sema prompt-ia\`
243
+ const resumo = `# Contexto de IA para ${contexto.modulo}
244
+
245
+ - Arquivo alvo: \`${contexto.arquivo}\`
246
+ - Modulo: \`${contexto.modulo}\`
247
+ - Sucesso em validar: \`${contexto.sucesso}\`
248
+ - Quantidade de diagnosticos: \`${contexto.diagnosticos.length}\`
249
+ - Gerado em: \`${contexto.geradoEm}\`
250
+
251
+ ## Arquivos gerados neste pacote
252
+
253
+ - \`agent-context-pack.json\`
254
+ - \`${ARQUIVO_SEMA_BOOT}\`
255
+ - \`${ARQUIVO_SEMA_SMALL_MODEL}\`
256
+ - \`resumo.micro.txt\`
257
+ - \`resumo.curto.txt\`
258
+ - \`resumo.md\`
259
+ - \`briefing.min.json\`
260
+ - \`prompt-curto.txt\`
261
+ - \`validar.json\`
262
+ - \`diagnosticos.json\`
263
+ - \`ast.json\`
264
+ - \`ir.json\`
265
+ - \`drift.json\`
266
+ - \`briefing.json\`
267
+
268
+ ## Fluxo recomendado para o agente
269
+
270
+ Antes de escolher arquivo de código, leia \`${ARQUIVO_SEMA_BOOT}\` e \`agent-context-pack.json\`. Eles declaram regras obrigatórias, proibições, prioridades, idioma humano e quando abrir texto bruto como \`AGENTS.md\`, \`exemplos/\`, docs e contratos.
271
+
272
+ ## Políticas da plataforma
273
+
274
+ - Sema governa contrato, escopo, drift, evidência e qualidade; não contorna políticas, termos, permissões, segurança ou leis.
275
+ - Se houver alerta externo, trate como bloqueio da plataforma ou falso positivo possível, explique de forma neutra e não tente burlar filtro.
276
+
277
+ ### IA fraca, gratuita ou com pouca disciplina
278
+
279
+ 1. Ler \`${ARQUIVO_SEMA_BOOT}\`.
280
+ 2. Ler \`${ARQUIVO_SEMA_SMALL_MODEL}\`.
281
+ 3. Ler \`agent-context-pack.json\`.
282
+ 4. Ler \`resumo.micro.txt\`.
283
+ 5. Ler \`briefing.min.json\`.
284
+ 6. Se ainda couber contexto, ler \`resumo.curto.txt\`.
285
+
286
+ ### IA média
287
+
288
+ 1. Ler \`${ARQUIVO_SEMA_BOOT}\`.
289
+ 2. Ler \`agent-context-pack.json\`.
290
+ 3. Ler \`resumo.curto.txt\`.
291
+ 4. Ler \`briefing.min.json\`.
292
+ 5. Ler \`drift.json\`.
293
+ 6. Se precisar, subir para \`resumo.md\`.
294
+
295
+ ### IA forte ou com tool use
296
+
297
+ 1. Ler \`${ARQUIVO_SEMA_BOOT}\`.
298
+ 2. Ler \`agent-context-pack.json\`.
299
+ 3. Ler \`README.md\`.
300
+ 4. Ler \`resumo.md\`.
301
+ 5. Ler \`briefing.json\`.
302
+ 6. Ler \`drift.json\`.
303
+ 7. Só depois abrir \`ir.json\` e \`ast.json\`.
304
+
305
+ ## Idioma humano
306
+
307
+ - Responda no idioma do usuário.
308
+ - Em PT-BR, use acentos, cedilha, pontuação e símbolos normais.
309
+ - A DSL \`.sema\` pode ser ASCII; texto humano não precisa ser.
310
+
311
+ ## Texto bruto sob demanda
312
+
313
+ - Abra \`AGENTS.md\` antes de editar código, contrato, docs operacionais, release ou deploy.
314
+ - Abra \`exemplos/\` antes de criar ou corrigir sintaxe \`.sema\`.
315
+ - Abra \`docs/syntax.md\` quando exemplos não bastarem para resolver a gramática.
316
+ - Abra \`contratos/\` antes de qualquer implementação ou mudança de comportamento.
317
+
318
+ ## Timeout e retry
319
+
320
+ - Timeout local do agente não é falha do Sema.
321
+ - Se uma chamada Sema estourar, aumente o timeout e tente de novo.
322
+ - Se o projeto inteiro for lento, escopar para \`sema resumo "${contexto.arquivo}" --micro --para mudanca --drift none\`.
323
+ - Se o ambiente impedir continuar, pare bloqueado e não avance com código sem Sema.
324
+
325
+ ## Fechamento
326
+
327
+ 1. Editar o arquivo \`.sema\`.
328
+ 2. Rodar \`sema formatar "${contexto.arquivo}"\`.
329
+ 3. Rodar \`sema validar "${contexto.arquivo}" --json\`.
330
+ 4. Rodar \`sema drift "${contexto.arquivo}" --cache fresh --json\`.
331
+ 5. Fechar com \`sema verificar <arquivo-ou-pasta> --json --saida ./.tmp/verificacao-ia\`.
332
+
333
+ ## Textos base para onboarding do agente
334
+
335
+ - \`sema starter-ia\`
336
+ - \`sema resumo "${contexto.arquivo}" --micro --para onboarding --drift none\`
337
+ - \`sema prompt-curto "${contexto.arquivo}" --para mudanca\`
338
+ - \`sema prompt-ia\`
317
339
  `;
318
340
  await escreverArquivoWorkspaceSeguro(pastaBase, "README.md", resumo, {
319
341
  sobrescrever: true,