@semacode/cli 2.3.0 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +251 -228
  3. package/dist/agentEntryPoints.js +551 -550
  4. package/dist/angular-consumer-standalone.d.ts +3 -1
  5. package/dist/angular-consumer-standalone.js +12 -8
  6. package/dist/drift.part01.d.ts +32 -2
  7. package/dist/drift.part01.js +2 -0
  8. package/dist/drift.part04.d.ts +3 -2
  9. package/dist/drift.part04.js +6 -3
  10. package/dist/drift.part05.d.ts +2 -1
  11. package/dist/drift.part05.js +4 -3
  12. package/dist/drift.part06.d.ts +2 -1
  13. package/dist/drift.part06.js +9 -5
  14. package/dist/drift.part07.d.ts +11 -10
  15. package/dist/drift.part07.js +40 -30
  16. package/dist/drift.part08.d.ts +2 -1
  17. package/dist/drift.part08.js +4 -3
  18. package/dist/drift.part11.js +71 -6
  19. package/dist/drift.part12.js +14 -1
  20. package/dist/drift.part13.d.ts +42 -7
  21. package/dist/drift.part13.js +660 -36
  22. package/dist/driftCache.d.ts +49 -0
  23. package/dist/driftCache.js +311 -0
  24. package/dist/driftCacheIncremental.d.ts +98 -0
  25. package/dist/driftCacheIncremental.js +596 -0
  26. package/dist/driftCatalogo.d.ts +91 -0
  27. package/dist/driftCatalogo.js +657 -0
  28. package/dist/driftCatalogoPersistente.d.ts +8 -0
  29. package/dist/driftCatalogoPersistente.js +77 -0
  30. package/dist/driftEscopo.d.ts +23 -0
  31. package/dist/driftEscopo.js +563 -0
  32. package/dist/driftEscopoReferencias.d.ts +4 -0
  33. package/dist/driftEscopoReferencias.js +265 -0
  34. package/dist/driftOrcamento.d.ts +12 -0
  35. package/dist/driftOrcamento.js +19 -3
  36. package/dist/execucoesExternas.js +5 -19
  37. package/dist/iaPrompts.js +310 -310
  38. package/dist/index.part01.d.ts +16 -1
  39. package/dist/index.part01.js +80 -4
  40. package/dist/index.part02.js +21 -21
  41. package/dist/index.part03.d.ts +2 -2
  42. package/dist/index.part03.js +14 -3
  43. package/dist/index.part04.d.ts +2 -2
  44. package/dist/index.part04.js +113 -101
  45. package/dist/index.part05.d.ts +1 -1
  46. package/dist/index.part05.js +99 -22
  47. package/dist/index.part06.js +3 -2
  48. package/dist/index.part07.js +24 -24
  49. package/dist/index.part08.js +1 -1
  50. package/dist/init/templates.part01.js +393 -393
  51. package/dist/init/templates.part02.js +189 -189
  52. package/dist/initTemplatesBackend.js +73 -73
  53. package/dist/initTemplatesBase.js +81 -81
  54. package/dist/initTemplatesFlutter.js +137 -137
  55. package/dist/initTemplatesRuntime.js +350 -350
  56. package/dist/initTemplatesWeb.js +309 -309
  57. package/dist/pipelineConteudo/command.js +1 -36
  58. package/dist/projeto.d.ts +1 -1
  59. package/dist/projetoCarregar.d.ts +2 -2
  60. package/dist/projetoCarregar.js +47 -24
  61. package/dist/projetoCatalogo.d.ts +7 -0
  62. package/dist/projetoCatalogo.js +125 -0
  63. package/dist/projetoTipos.d.ts +14 -5
  64. package/dist/sync/index.js +35 -35
  65. package/docs/README.md +34 -34
  66. package/docs/ai-integration.md +1 -7
  67. package/docs/ai-onboarding.md +62 -62
  68. package/docs/ai-workflow.md +4 -0
  69. package/docs/auth.md +26 -26
  70. package/docs/cli.md +79 -79
  71. package/docs/commands.md +16 -13
  72. package/docs/database.md +15 -15
  73. package/docs/deploy.md +41 -41
  74. package/docs/descoberta-capacidades.md +106 -106
  75. package/docs/documentation.md +37 -46
  76. package/docs/env.md +16 -16
  77. package/docs/frontend.md +41 -41
  78. package/docs/getting-started.md +57 -57
  79. package/docs/i18n.md +15 -15
  80. package/docs/pipeline-conteudo.md +246 -246
  81. package/docs/profiles.md +54 -54
  82. package/docs/repositories.md +43 -43
  83. package/docs/rollback.md +31 -31
  84. package/docs/security.md +32 -32
  85. package/docs/sistemas-interativos.md +373 -378
  86. package/docs/support.md +8 -8
  87. package/docs/testing.md +51 -44
  88. package/docs/vocabulary.md +29 -29
  89. package/exemplos/agendamento.sema +1 -1
  90. package/exemplos/assinatura.sema +1 -1
  91. package/exemplos/auditoria.sema +1 -1
  92. package/exemplos/autenticacao.sema +1 -1
  93. package/exemplos/author_obra_comum.sema +1 -1
  94. package/exemplos/author_tema_sensivel.sema +1 -1
  95. package/exemplos/automacao.sema +1 -1
  96. package/exemplos/cadastro_usuario.sema +1 -1
  97. package/exemplos/calculadora.sema +1 -1
  98. package/exemplos/crud_simples.sema +1 -1
  99. package/exemplos/estoque.sema +1 -1
  100. package/exemplos/exportacao.sema +1 -1
  101. package/exemplos/fila.sema +1 -1
  102. package/exemplos/integracao_externa.sema +1 -1
  103. package/exemplos/multi_tenant.sema +1 -1
  104. package/exemplos/notificacao.sema +1 -1
  105. package/exemplos/operacao_estrategia.sema +132 -132
  106. package/exemplos/operacao_estrategia_discovery.sema +220 -220
  107. package/exemplos/operacao_estrategia_fluxo.sema +114 -114
  108. package/exemplos/operacao_estrategia_gates.sema +106 -106
  109. package/exemplos/operacao_estrategia_quarentena.sema +133 -133
  110. package/exemplos/operacao_estrategia_rollout.sema +124 -124
  111. package/exemplos/pagamento.sema +1 -1
  112. package/exemplos/pagamento_dominio.sema +1 -1
  113. package/exemplos/pedido.sema +1 -1
  114. package/exemplos/permissao.sema +1 -1
  115. package/exemplos/persistencia_vendor_first.sema +1 -1
  116. package/exemplos/pipeline-conteudo/README.md +44 -44
  117. package/exemplos/pipeline-conteudo/alvos.json +23 -23
  118. package/exemplos/pipeline-conteudo/definicao.json +136 -136
  119. package/exemplos/profile_conversas.sema +165 -165
  120. package/exemplos/profile_game.sema +1 -1
  121. package/exemplos/profile_legal.sema +1 -1
  122. package/exemplos/profile_ops.sema +1 -1
  123. package/exemplos/profile_research.sema +1 -1
  124. package/exemplos/profile_simulation.sema +211 -211
  125. package/exemplos/profile_software.sema +1 -1
  126. package/exemplos/profile_workflow_n8n.sema +1 -1
  127. package/exemplos/relatorio.sema +1 -1
  128. package/exemplos/replica_analitica_erp.sema +1 -1
  129. package/exemplos/sistemas-interativos/README.md +100 -100
  130. package/exemplos/sistemas-interativos/advanced/acceptance-context-evaluate-valid.json +5 -5
  131. package/exemplos/sistemas-interativos/advanced/acceptance-lock-valid.json +16 -16
  132. package/exemplos/sistemas-interativos/advanced/asset-provenance-valid.json +32 -32
  133. package/exemplos/sistemas-interativos/advanced/autonomy-repair-valid.json +93 -93
  134. package/exemplos/sistemas-interativos/advanced/control-run-definition-valid.json +78 -78
  135. package/exemplos/sistemas-interativos/advanced/control-run-valid.json +27 -27
  136. package/exemplos/sistemas-interativos/advanced/distributed-workers-valid.json +79 -79
  137. package/exemplos/sistemas-interativos/advanced/editor-state-valid.json +42 -42
  138. package/exemplos/sistemas-interativos/advanced/engine-snapshot-after-valid.json +32 -32
  139. package/exemplos/sistemas-interativos/advanced/engine-snapshot-before-valid.json +23 -23
  140. package/exemplos/sistemas-interativos/advanced/job-orchestration-valid.json +39 -39
  141. package/exemplos/sistemas-interativos/advanced/multimodal-evidence-valid.json +46 -46
  142. package/exemplos/sistemas-interativos/advanced/multiplayer-authority-valid.json +39 -39
  143. package/exemplos/sistemas-interativos/advanced/playtest-fuzz-valid.json +37 -37
  144. package/exemplos/sistemas-interativos/advanced/portability-valid.json +104 -104
  145. package/exemplos/sistemas-interativos/advanced/temporal-evidence-valid.json +27 -27
  146. package/exemplos/sistemas-interativos/advanced/temporal-valid.json +118 -118
  147. package/exemplos/sistemas-interativos/experience-ir-valid.json +459 -459
  148. package/exemplos/sistemas-interativos/game-2d.json +83 -83
  149. package/exemplos/sistemas-interativos/game-3d-human.json +81 -81
  150. package/exemplos/sistemas-interativos/game-pixel-16-bit.json +97 -97
  151. package/exemplos/sistemas-interativos/game-pixel-8-bit.json +94 -94
  152. package/exemplos/sistemas-interativos/game-xr-human.json +80 -80
  153. package/exemplos/sistemas-interativos/hybrid-2-5d.json +108 -108
  154. package/exemplos/sistemas-interativos/protocol-mutating-rollback-valid.json +75 -75
  155. package/exemplos/sistemas-interativos/protocol-read-only-valid.json +58 -58
  156. package/exemplos/sistemas-interativos/simulation-2d-controlled.json +97 -97
  157. package/exemplos/sistemas-interativos/simulation-3d-calibrated-autonomous.json +141 -141
  158. package/exemplos/sistemas-interativos/simulation-headless-autonomous-batch.json +112 -112
  159. package/exemplos/sistemas-interativos/simulation-pixel-16-bit.json +103 -103
  160. package/exemplos/sistemas-interativos/simulation-text-controlled.json +95 -95
  161. package/exemplos/testes_embutidos.sema +1 -1
  162. package/exemplos/tratamento_erro.sema +1 -1
  163. package/exemplos/upload_arquivo.sema +1 -1
  164. package/exemplos/webhook.sema +1 -1
  165. package/node_modules/@sema/gerador-cpp/dist/index.js +176 -176
  166. package/node_modules/@sema/gerador-cpp/package.json +1 -1
  167. package/node_modules/@sema/gerador-css/dist/index.part01.js +10 -10
  168. package/node_modules/@sema/gerador-css/dist/index.part02.js +460 -460
  169. package/node_modules/@sema/gerador-dotnet/dist/index.js +169 -169
  170. package/node_modules/@sema/gerador-dotnet/package.json +1 -1
  171. package/node_modules/@sema/gerador-html/dist/index.js +17 -17
  172. package/node_modules/@sema/gerador-lua/dist/index.js +51 -51
  173. package/node_modules/@sema/gerador-php/dist/index.js +113 -113
  174. package/node_modules/@sema/gerador-python/dist/index.part02.js +3 -3
  175. package/node_modules/@sema/gerador-typescript/dist/index.part02.js +11 -11
  176. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js +42 -42
  177. package/package.json +3 -3
@@ -1,4 +1,5 @@
1
1
  import { compilarCodigo, type IrModulo } from "@sema/nucleo";
2
+ import { type ContextoProjetoCarregado } from "./projeto.js";
2
3
  import { analisarDriftLegado, type OpcoesDriftLegado } from "./drift.js";
3
4
  import { type GuiaCapacidadeIaMap } from './agentContextTipos.js';
4
5
  import { criarBriefingAgente, resumirDriftPorModulo } from "./index.part03.js";
@@ -29,6 +30,8 @@ export interface DescobertaDocsIa {
29
30
  }
30
31
  export type TamanhoResumoIa = "micro" | "curto" | "medio";
31
32
  export type ModoResumoIa = "resumo" | "onboarding" | "review" | "mudanca" | "bug" | "arquitetura";
33
+ export type ModoAnaliseDriftCli = "fresh" | "cache" | "none";
34
+ export type PoliticaCacheDriftCli = "auto" | "refresh" | "off";
32
35
  export type ResultadoDriftIa = Awaited<ReturnType<typeof analisarDriftLegado>>;
33
36
  export type ResumoModuloDrift = ReturnType<typeof resumirDriftPorModulo>;
34
37
  export interface PacoteContextoModuloIa {
@@ -75,10 +78,15 @@ export interface PacoteContextoModuloIa {
75
78
  caminho: string;
76
79
  modulo: string | null;
77
80
  sucesso: boolean;
81
+ modoAnalise?: ModoAnaliseDriftCli;
82
+ executado?: boolean;
83
+ aviso?: string | null;
78
84
  resumo: ResumoModuloDrift;
79
85
  drift: ResultadoDriftIa;
80
86
  };
81
87
  briefing: ReturnType<typeof criarBriefingAgente>;
88
+ modoVerificacaoCodigo?: ResumoSemanticoModuloIa["modoVerificacaoCodigo"];
89
+ fontesConclusao?: string[];
82
90
  }
83
91
  export interface ResumoSemanticoModuloIa {
84
92
  geradoEm: string;
@@ -123,7 +131,14 @@ export declare function obterArgumentos(): {
123
131
  export declare function renderizarCaixaAscii(linhas: string[]): string;
124
132
  export declare function renderizarSecaoAscii(titulo: string, linhas: string[]): string;
125
133
  export declare function ajuda(): string;
126
- export declare function resolverOpcoesDriftCli(args: string[]): OpcoesDriftLegado;
134
+ export declare function normalizarModoAnaliseDriftCli(args: string[], padrao?: ModoAnaliseDriftCli): ModoAnaliseDriftCli;
135
+ export declare function normalizarPoliticaCacheDriftCli(args: string[]): PoliticaCacheDriftCli | undefined;
136
+ export declare function resolverOpcoesDriftCli(args: string[], cacheForcado?: PoliticaCacheDriftCli): OpcoesDriftLegado;
137
+ export declare function resolverAnaliseDriftCli(args: string[], padrao?: ModoAnaliseDriftCli): {
138
+ modo: ModoAnaliseDriftCli;
139
+ opcoes: OpcoesDriftLegado;
140
+ };
141
+ export declare function criarResultadoDriftNaoExecutado(contextoProjeto: ContextoProjetoCarregado, opcoes?: OpcoesDriftLegado): ResultadoDriftIa;
127
142
  export declare function normalizarTamanhoResumo(args: string[]): TamanhoResumoIa;
128
143
  export declare function normalizarModoResumo(valor?: string): ModoResumoIa;
129
144
  export declare function descobrirDocsIa(): Promise<DescobertaDocsIa>;
@@ -114,11 +114,11 @@ export function ajuda() {
114
114
  ]),
115
115
  "",
116
116
  renderizarSecaoAscii("Comandos principais", [
117
- "descoberta: sema inspecionar [arquivo-ou-pasta] [--json]",
117
+ "descoberta: sema inspecionar [arquivo-ou-pasta] [--drift <fresh|cache|none>|--com-drift] [--json] (padrão: none)",
118
118
  "catálogo: sema descobrir <catalogo|recomendar|explicar> [id] [--intencao <objetivo>] [--json]",
119
119
  "pipelines: sema pipeline <listar|descrever> [id] [--json]",
120
120
  "todas as capacidades: sema capabilities [--json]",
121
- "auditoria: sema drift <arquivo-ou-pasta> [--escopo <arquivo|modulo|projeto>] [--incluir-worktrees] [--incluir-consumidores-laterais] [--json]",
121
+ "auditoria: sema drift <arquivo-ou-pasta> [--escopo <arquivo|modulo|projeto>] [--cache <auto|refresh|off>] [--incluir-worktrees] [--incluir-consumidores-laterais] [--json]",
122
122
  "impacto: sema impacto <arquivo-ou-pasta> --alvo <token> [--mudanca <descricao>] [--escopo <arquivo|modulo|projeto>] [--json]",
123
123
  "renomeação: sema renomear-semantico <arquivo-ou-pasta> --de <nome-atual> --para <nome-novo> [--escopo <arquivo|modulo|projeto>] [--json]",
124
124
  "importação: 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]",
@@ -140,7 +140,7 @@ export function ajuda() {
140
140
  renderizarSecaoAscii("Ajuda IA-first", [
141
141
  "sema ajuda-ia",
142
142
  "sema starter-ia",
143
- "sema resumo <arquivo-ou-pasta> [--micro|--curto|--medio] [--para <resumo|onboarding|review|mudanca|bug|arquitetura>] [--saida <diretorio>] [--raiz] [--json]",
143
+ "sema resumo <arquivo-ou-pasta> [--micro|--curto|--medio] [--para <resumo|onboarding|review|mudanca|bug|arquitetura>] [--drift <fresh|cache|none>] [--saida <diretorio>] [--raiz] [--json]",
144
144
  "sema prompt-curto <arquivo-ou-pasta> [--micro|--curto|--medio] [--para <resumo|onboarding|review|mudanca|bug|arquitetura>] [--json]",
145
145
  "sema prompt-ia",
146
146
  "sema prompt-ia-ui",
@@ -172,12 +172,88 @@ export function ajuda() {
172
172
  ]),
173
173
  ].join("\n");
174
174
  }
175
- export function resolverOpcoesDriftCli(args) {
175
+ export function normalizarModoAnaliseDriftCli(args, padrao = "fresh") {
176
+ const valor = obterOpcao(args, "--drift");
177
+ if (valor === undefined)
178
+ return possuiFlag(args, "--com-drift") ? "fresh" : padrao;
179
+ if (valor === "fresh" || valor === "cache" || valor === "none")
180
+ return valor;
181
+ throw new Error("Use --drift fresh, --drift cache ou --drift none.");
182
+ }
183
+ export function normalizarPoliticaCacheDriftCli(args) {
184
+ const valor = obterOpcao(args, "--cache");
185
+ if (valor === undefined)
186
+ return undefined;
187
+ if (valor === "auto" || valor === "refresh" || valor === "off")
188
+ return valor;
189
+ throw new Error("Use --cache auto, --cache refresh ou --cache off.");
190
+ }
191
+ export function resolverOpcoesDriftCli(args, cacheForcado) {
176
192
  const escopo = obterOpcao(args, "--escopo");
193
+ const cache = cacheForcado ?? normalizarPoliticaCacheDriftCli(args);
177
194
  return {
178
195
  escopo: escopo === "arquivo" || escopo === "modulo" || escopo === "projeto" ? escopo : undefined,
179
196
  ignorarWorktrees: !possuiFlag(args, "--incluir-worktrees"),
180
197
  ignorarConsumidoresLaterais: !possuiFlag(args, "--incluir-consumidores-laterais"),
198
+ ...(cache ? { cache } : {}),
199
+ };
200
+ }
201
+ export function resolverAnaliseDriftCli(args, padrao = "fresh") {
202
+ const modo = normalizarModoAnaliseDriftCli(args, padrao);
203
+ const cache = modo === "fresh" ? "refresh" : modo === "cache" ? "auto" : undefined;
204
+ return {
205
+ modo,
206
+ opcoes: resolverOpcoesDriftCli(args, cache),
207
+ };
208
+ }
209
+ export function criarResultadoDriftNaoExecutado(contextoProjeto, opcoes) {
210
+ const escopo = opcoes?.escopo === "arquivo" || opcoes?.escopo === "projeto" ? opcoes.escopo : "modulo";
211
+ return {
212
+ comando: "drift",
213
+ sucesso: false,
214
+ escopo_aplicado: {
215
+ escopo,
216
+ ignorarWorktrees: opcoes?.ignorarWorktrees !== false,
217
+ ignorarConsumidoresLaterais: opcoes?.ignorarConsumidoresLaterais !== false,
218
+ termosEscopo: [],
219
+ },
220
+ consumerFramework: null,
221
+ appRoutes: [],
222
+ consumerSurfaces: [],
223
+ consumerBridges: [],
224
+ modulos: contextoProjeto.modulosSelecionados.map((item) => ({
225
+ caminho: item.caminho,
226
+ modulo: item.resultado.modulo?.nome ?? null,
227
+ tasks: item.resultado.ir?.tasks.length ?? 0,
228
+ routes: item.resultado.ir?.routes.length ?? 0,
229
+ })),
230
+ tasks: [],
231
+ impls_validos: [],
232
+ impls_quebrados: [],
233
+ vinculos_validos: [],
234
+ vinculos_quebrados: [],
235
+ rotas_divergentes: [],
236
+ recursos_validos: [],
237
+ recursos_divergentes: [],
238
+ persistencia_real: [],
239
+ resumo_operacional: {
240
+ scoreMedio: 0,
241
+ confiancaGeral: "baixa",
242
+ pontuacaoMinimaOperacional: 80,
243
+ pontuacaoAlvoAtual: 80,
244
+ pontuacaoAlvoFinal: 100,
245
+ passoEvolucaoPontuacao: 0.5,
246
+ proximaPontuacaoAlvo: 80,
247
+ pontuacaoAbaixoDoPiso: false,
248
+ pontuacaoAbaixoDoAlvo: false,
249
+ travasPontuacao: [],
250
+ riscosPrincipais: ["analise_drift_nao_executada"],
251
+ oQueTocar: [],
252
+ oQueValidar: ["executar sema drift antes de concluir sobre a implementação"],
253
+ oQueEstaFrouxo: ["codigo_nao_verificado_neste_modo"],
254
+ oQueFoiInferido: ["modo_contratos_apenas"],
255
+ },
256
+ diagnosticos: [],
181
257
  };
182
258
  }
183
259
  export function normalizarTamanhoResumo(args) {
@@ -320,27 +320,27 @@ export function criarBriefingMinimo(resumo, modo, tamanho) {
320
320
  }
321
321
  export function criarPromptCurtoModulo(resumo, modo, tamanho, capacidade) {
322
322
  const resumoTexto = renderizarResumoModuloTexto(resumo, tamanho, modo).trim();
323
- return `Você está operando Sema em modo IA-first.
324
-
325
- Esta linguagem existe para traduzir intenção operacional em contrato consumível por IA. Humanos aprovam; agentes operam.
326
-
327
- Capacidade alvo: ${capacidade}
328
- Modo da tarefa: ${modo}
329
-
330
- Regras:
331
- - não invente sintaxe nem bloco fora da gramática oficial
332
- - preserve a intenção do contrato
333
- - use este resumo como fonte compacta inicial
334
- - se a tarefa pedir mais contexto, rode \`sema contexto-ia <arquivo.sema> --saida <diretorio> --json\` e então abra \`briefing.min.json\`, \`drift.json\` e \`ir.json\` nessa saída
335
- - não saia editando software vivo sem olhar risco, lacuna e checks sugeridos
336
- - se abrir código com \`SEMA-GOVERNED\`, volte ao contrato e chame Sema antes de editar
337
- - não crie nem conclua código governado acima de ${LIMITE_BLOQUEIO_LINHAS_CODIGO_GOVERNADO} linhas; acima de ${LIMITE_AVISO_LINHAS_CODIGO_GOVERNADO}, planeje divisão; documentação Markdown não entra nesse limite de código
338
- - não crie nem edite contrato .sema acima de ${LIMITE_BLOQUEIO_LINHAS_CONTRATO_SEMA} linhas; acima de ${LIMITE_AVISO_LINHAS_CONTRATO_SEMA}, planeje split por domínio/capacidade, nunca parte_1/parte_2
339
- - vários contratos .sema podem governar o mesmo arquivo por vinculos; Sema Código deve preservar essa rastreabilidade
340
- ${resumo.consumerFramework ? "- se for tarefa visual consumer, priorize `appRoutes`, `consumerSurfaces` e `consumerBridges` antes de abrir arquivos aleatórios" : ""}
341
-
342
- Contexto compacto:
343
- ${resumoTexto}
323
+ return `Você está operando Sema em modo IA-first.
324
+
325
+ Esta linguagem existe para traduzir intenção operacional em contrato consumível por IA. Humanos aprovam; agentes operam.
326
+
327
+ Capacidade alvo: ${capacidade}
328
+ Modo da tarefa: ${modo}
329
+
330
+ Regras:
331
+ - não invente sintaxe nem bloco fora da gramática oficial
332
+ - preserve a intenção do contrato
333
+ - use este resumo como fonte compacta inicial
334
+ - se a tarefa pedir mais contexto, rode \`sema contexto-ia <arquivo.sema> --saida <diretorio> --json\` e então abra \`briefing.min.json\`, \`drift.json\` e \`ir.json\` nessa saída
335
+ - não saia editando software vivo sem olhar risco, lacuna e checks sugeridos
336
+ - se abrir código com \`SEMA-GOVERNED\`, volte ao contrato e chame Sema antes de editar
337
+ - não crie nem conclua código governado acima de ${LIMITE_BLOQUEIO_LINHAS_CODIGO_GOVERNADO} linhas; acima de ${LIMITE_AVISO_LINHAS_CODIGO_GOVERNADO}, planeje divisão; documentação Markdown não entra nesse limite de código
338
+ - não crie nem edite contrato .sema acima de ${LIMITE_BLOQUEIO_LINHAS_CONTRATO_SEMA} linhas; acima de ${LIMITE_AVISO_LINHAS_CONTRATO_SEMA}, planeje split por domínio/capacidade, nunca parte_1/parte_2
339
+ - vários contratos .sema podem governar o mesmo arquivo por vinculos; Sema Código deve preservar essa rastreabilidade
340
+ ${resumo.consumerFramework ? "- se for tarefa visual consumer, priorize `appRoutes`, `consumerSurfaces` e `consumerBridges` antes de abrir arquivos aleatórios" : ""}
341
+
342
+ Contexto compacto:
343
+ ${resumoTexto}
344
344
  `;
345
345
  }
346
346
  //# sourceMappingURL=index.part02.js.map
@@ -1,7 +1,7 @@
1
1
  import { type IrModulo } from "@sema/nucleo";
2
2
  import { analisarDriftLegado } from "./drift.js";
3
3
  import { type GuiaCapacidadeIaMap } from './agentContextTipos.js';
4
- import { PacoteContextoModuloIa, ResumoSemanticoModuloIa } from "./index.part01.js";
4
+ import { PacoteContextoModuloIa, ResumoSemanticoModuloIa, type ModoAnaliseDriftCli } from "./index.part01.js";
5
5
  export declare function renderizarResumoProjetoMarkdown(geradoEm: string, modulos: ResumoSemanticoModuloIa[], guiaPorCapacidade: GuiaCapacidadeIaMap): string;
6
6
  export declare function falharContextoIa(mensagem: string): never;
7
7
  export declare function garantirArquivoSema(caminhoArquivo: string): void;
@@ -52,7 +52,7 @@ export declare function criarBriefingAgente(arquivo: string, modulo: string, ir:
52
52
  ancoragensVinculo: string[];
53
53
  testesMinimos: string[];
54
54
  };
55
- export declare function carregarContextoModuloIa(arquivoEntrada: string): Promise<PacoteContextoModuloIa>;
55
+ export declare function carregarContextoModuloIa(arquivoEntrada: string, args?: string[], modoDriftPadrao?: ModoAnaliseDriftCli): Promise<PacoteContextoModuloIa>;
56
56
  export declare const ARQUIVOS_RESUMO_MODULO_IA: readonly ["SEMA_BOOT.md", "SEMA_SMALL_MODEL.md", "agent-context-pack.json", "resumo.micro.txt", "resumo.curto.txt", "resumo.md", "briefing.min.json", "prompt-curto.txt"];
57
57
  export declare function gerarArquivosResumoModuloIa(contexto: PacoteContextoModuloIa, pastaBase: string): Promise<{
58
58
  artefatosCompactos: string[];
@@ -8,6 +8,7 @@ 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";
11
12
  import { coletarResumoSemanticoModulo, criarBriefingMinimo, criarPromptCurtoModulo, renderizarResumoModuloMarkdown, renderizarResumoModuloTexto } from "./index.part02.js";
12
13
  export function renderizarResumoProjetoMarkdown(geradoEm, modulos, guiaPorCapacidade) {
13
14
  const entradaCanonica = criarEntradaCanonicaProjeto(guiaPorCapacidade);
@@ -253,10 +254,11 @@ export function criarBriefingAgente(arquivo, modulo, ir, resumoDrift, resultadoD
253
254
  ],
254
255
  };
255
256
  }
256
- export async function carregarContextoModuloIa(arquivoEntrada) {
257
+ export async function carregarContextoModuloIa(arquivoEntrada, args = [], modoDriftPadrao = "fresh") {
257
258
  const arquivo = path.resolve(arquivoEntrada);
258
259
  garantirArquivoSema(arquivo);
259
- const contextoProjeto = await carregarProjeto(arquivo, process.cwd());
260
+ const analiseDrift = resolverAnaliseDriftCli(args, modoDriftPadrao);
261
+ const contextoProjeto = await carregarProjeto(arquivo, process.cwd(), { escopo: analiseDrift.opcoes.escopo });
260
262
  const resultadoModulo = contextoProjeto.modulosSelecionados.find((item) => path.resolve(item.caminho) === arquivo)?.resultado;
261
263
  if (!resultadoModulo) {
262
264
  falharContextoIa(`Nao foi possivel encontrar o modulo correspondente ao arquivo ${arquivo}.`);
@@ -264,12 +266,19 @@ export async function carregarContextoModuloIa(arquivoEntrada) {
264
266
  const sucesso = !temErros(resultadoModulo.diagnosticos);
265
267
  const modulo = resultadoModulo.modulo?.nome ?? path.basename(arquivo, ".sema");
266
268
  const geradoEm = new Date().toISOString();
267
- const resultadoDrift = await analisarDriftLegado(contextoProjeto);
269
+ const resultadoDrift = analiseDrift.modo === "none"
270
+ ? criarResultadoDriftNaoExecutado(contextoProjeto, analiseDrift.opcoes)
271
+ : await analisarDriftLegado(contextoProjeto, analiseDrift.opcoes);
268
272
  const drift = {
269
273
  comando: "drift",
270
274
  caminho: arquivo,
271
275
  modulo: resultadoModulo.modulo?.nome ?? null,
272
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,
273
282
  resumo: resumirDriftPorModulo(resultadoModulo.modulo?.nome ?? null, arquivo, resultadoDrift),
274
283
  drift: resultadoDrift,
275
284
  };
@@ -321,6 +330,8 @@ export async function carregarContextoModuloIa(arquivoEntrada) {
321
330
  irJson: ir,
322
331
  drift,
323
332
  briefing,
333
+ modoVerificacaoCodigo: analiseDrift.modo === "none" ? "contratos_apenas" : undefined,
334
+ fontesConclusao: analiseDrift.modo === "none" ? ["contrato"] : undefined,
324
335
  };
325
336
  }
326
337
  export const ARQUIVOS_RESUMO_MODULO_IA = [
@@ -1,7 +1,7 @@
1
1
  import { type GuiaCapacidadeIaMap } from './agentContextTipos.js';
2
- import { ContextoIaGerado, ResumoSemanticoModuloIa } from "./index.part01.js";
2
+ import { ContextoIaGerado, ResumoSemanticoModuloIa, type ModoAnaliseDriftCli } from "./index.part01.js";
3
3
  export declare const ARQUIVOS_RESUMO_PROJETO_IA: readonly ["SEMA_BOOT.md", "SEMA_SMALL_MODEL.md", "SEMA_BRIEF.md", "SEMA_BRIEF.micro.txt", "SEMA_BRIEF.curto.txt", "SEMA_INDEX.json", "AGENT_CONTEXT_PACK.json", "docs/ai-integration.md"];
4
- export declare function gerarResumoProjetoIa(entrada: string | undefined, pastaSaidaOpcional?: string, escreverNaRaiz?: boolean): Promise<{
4
+ export declare function gerarResumoProjetoIa(entrada: string | undefined, pastaSaidaOpcional?: string, escreverNaRaiz?: boolean, args?: string[], modoDriftPadrao?: ModoAnaliseDriftCli): Promise<{
5
5
  geradoEm: string;
6
6
  baseProjeto: string;
7
7
  pastaSaida: string;
@@ -16,7 +16,7 @@ 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 } from "./index.part01.js";
19
+ import { VERSAO_CLI, criarResultadoDriftNaoExecutado, resolverAnaliseDriftCli, } from "./index.part01.js";
20
20
  import { coletarResumoSemanticoModulo, descreverFontesConclusao, detectarFontesConclusaoSnapshot, detectarModoVerificacaoCodigo } from "./index.part02.js";
21
21
  import { ARQUIVOS_RESUMO_MODULO_IA, carregarContextoModuloIa, criarBriefingAgente, gerarArquivosResumoModuloIa, renderizarResumoProjetoMarkdown, resumirDriftPorModulo } from "./index.part03.js";
22
22
  export const ARQUIVOS_RESUMO_PROJETO_IA = [
@@ -53,15 +53,22 @@ function escolherTopArquivosResumo(modulos, arquivosCodigoDetectados) {
53
53
  }
54
54
  return { arquivos: [], fonte: "nenhum" };
55
55
  }
56
- export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escreverNaRaiz = false) {
56
+ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escreverNaRaiz = false, args = [], modoDriftPadrao = "fresh") {
57
57
  const contextoProjeto = await carregarProjeto(entrada, process.cwd());
58
58
  const geradoEm = new Date().toISOString();
59
59
  const guiaPorCapacidade = criarGuiaCapacidadeIa();
60
60
  const entradaCanonica = criarEntradaCanonicaProjeto(guiaPorCapacidade);
61
61
  const agentContextPack = entradaCanonica.agentContextPack;
62
- const modoVerificacaoCodigo = await detectarModoVerificacaoCodigo(contextoProjeto.baseProjeto, contextoProjeto.diretoriosCodigo);
63
- const fontesConclusao = await detectarFontesConclusaoSnapshot(contextoProjeto.baseProjeto);
64
- const resultadoDrift = await analisarDriftLegado(contextoProjeto);
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
72
  const modulos = contextoProjeto.modulosSelecionados.map((item) => {
66
73
  const modulo = item.resultado.modulo?.nome ?? path.basename(item.caminho, ".sema");
67
74
  const driftResumo = resumirDriftPorModulo(modulo, item.caminho, resultadoDrift);
@@ -77,6 +84,11 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
77
84
  caminho: item.caminho,
78
85
  modulo,
79
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,
80
92
  resumo: driftResumo,
81
93
  drift: resultadoDrift,
82
94
  },
@@ -206,102 +218,102 @@ export async function gerarContextoIa(arquivoEntrada, pastaSaidaOpcional) {
206
218
  await escreverArquivoWorkspaceSeguro(pastaBase, artefato.caminhoRelativo, artefato.conteudo, { sobrescrever: true });
207
219
  }
208
220
  const resumoGerado = await gerarArquivosResumoModuloIa(contexto, pastaBase);
209
- const resumo = `# Contexto de IA para ${contexto.modulo}
210
-
211
- - Arquivo alvo: \`${contexto.arquivo}\`
212
- - Modulo: \`${contexto.modulo}\`
213
- - Sucesso em validar: \`${contexto.sucesso}\`
214
- - Quantidade de diagnosticos: \`${contexto.diagnosticos.length}\`
215
- - Gerado em: \`${contexto.geradoEm}\`
216
-
217
- ## Arquivos gerados neste pacote
218
-
219
- - \`agent-context-pack.json\`
220
- - \`${ARQUIVO_SEMA_BOOT}\`
221
- - \`${ARQUIVO_SEMA_SMALL_MODEL}\`
222
- - \`resumo.micro.txt\`
223
- - \`resumo.curto.txt\`
224
- - \`resumo.md\`
225
- - \`briefing.min.json\`
226
- - \`prompt-curto.txt\`
227
- - \`validar.json\`
228
- - \`diagnosticos.json\`
229
- - \`ast.json\`
230
- - \`ir.json\`
231
- - \`drift.json\`
232
- - \`briefing.json\`
233
-
234
- ## Fluxo recomendado para o agente
235
-
236
- 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.
237
-
238
- ## Políticas da plataforma
239
-
240
- - Sema governa contrato, escopo, drift, evidência e qualidade; não contorna políticas, termos, permissões, segurança ou leis.
241
- - Se houver alerta externo, trate como bloqueio da plataforma ou falso positivo possível, explique de forma neutra e não tente burlar filtro.
242
-
243
- ### IA fraca, gratuita ou com pouca disciplina
244
-
245
- 1. Ler \`${ARQUIVO_SEMA_BOOT}\`.
246
- 2. Ler \`${ARQUIVO_SEMA_SMALL_MODEL}\`.
247
- 3. Ler \`agent-context-pack.json\`.
248
- 4. Ler \`resumo.micro.txt\`.
249
- 5. Ler \`briefing.min.json\`.
250
- 6. Se ainda couber contexto, ler \`resumo.curto.txt\`.
251
-
252
- ### IA média
253
-
254
- 1. Ler \`${ARQUIVO_SEMA_BOOT}\`.
255
- 2. Ler \`agent-context-pack.json\`.
256
- 3. Ler \`resumo.curto.txt\`.
257
- 4. Ler \`briefing.min.json\`.
258
- 5. Ler \`drift.json\`.
259
- 6. Se precisar, subir para \`resumo.md\`.
260
-
261
- ### IA forte ou com tool use
262
-
263
- 1. Ler \`${ARQUIVO_SEMA_BOOT}\`.
264
- 2. Ler \`agent-context-pack.json\`.
265
- 3. Ler \`README.md\`.
266
- 4. Ler \`resumo.md\`.
267
- 5. Ler \`briefing.json\`.
268
- 6. Ler \`drift.json\`.
269
- 7. Só depois abrir \`ir.json\` e \`ast.json\`.
270
-
271
- ## Idioma humano
272
-
273
- - Responda no idioma do usuário.
274
- - Em PT-BR, use acentos, cedilha, pontuação e símbolos normais.
275
- - A DSL \`.sema\` pode ser ASCII; texto humano não precisa ser.
276
-
277
- ## Texto bruto sob demanda
278
-
279
- - Abra \`AGENTS.md\` antes de editar código, contrato, docs operacionais, release ou deploy.
280
- - Abra \`exemplos/\` antes de criar ou corrigir sintaxe \`.sema\`.
281
- - Abra \`docs/syntax.md\` quando exemplos não bastarem para resolver a gramática.
282
- - Abra \`contratos/\` antes de qualquer implementação ou mudança de comportamento.
283
-
284
- ## Timeout e retry
285
-
286
- - Timeout local do agente não é falha do Sema.
287
- - Se uma chamada Sema estourar, aumente o timeout e tente de novo.
288
- - Se o projeto inteiro for lento, escopar para \`sema resumo "${contexto.arquivo}" --micro --para mudanca\`.
289
- - Se o ambiente impedir continuar, pare bloqueado e não avance com código sem Sema.
290
-
291
- ## Fechamento
292
-
293
- 1. Editar o arquivo \`.sema\`.
294
- 2. Rodar \`sema formatar "${contexto.arquivo}"\`.
295
- 3. Rodar \`sema validar "${contexto.arquivo}" --json\`.
296
- 4. Rodar \`sema drift "${contexto.arquivo}" --json\`.
297
- 5. Fechar com \`sema verificar <arquivo-ou-pasta> --json --saida ./.tmp/verificacao-ia\`.
298
-
299
- ## Textos base para onboarding do agente
300
-
301
- - \`sema starter-ia\`
302
- - \`sema resumo "${contexto.arquivo}" --micro --para onboarding\`
303
- - \`sema prompt-curto "${contexto.arquivo}" --para mudanca\`
304
- - \`sema prompt-ia\`
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\`
305
317
  `;
306
318
  await escreverArquivoWorkspaceSeguro(pastaBase, "README.md", resumo, {
307
319
  sobrescrever: true,
@@ -1,5 +1,5 @@
1
1
  import { type FonteImportacao } from "./importador.js";
2
- export declare function comandoInspecionar(entrada: string | undefined, emJson: boolean, cwd?: string): Promise<number>;
2
+ export declare function comandoInspecionar(entrada: string | undefined, emJson: boolean, cwd?: string, args?: string[]): Promise<number>;
3
3
  export declare function comandoDrift(entrada: string | undefined, args: string[], emJson: boolean, cwd?: string): Promise<number>;
4
4
  export declare function comandoImpacto(entrada: string | undefined, args: string[], emJson: boolean, cwd?: string): Promise<number>;
5
5
  export declare function comandoRenomearSemantico(entrada: string | undefined, args: string[], emJson: boolean, cwd?: string): Promise<number>;