@semacode/cli 1.5.47 → 1.5.52
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.
- package/LICENSE +39 -21
- package/README.md +47 -48
- package/dist/agentContext.d.ts +2 -2
- package/dist/agentContext.js +1 -1
- package/dist/agentContextPack.d.ts +1 -1
- package/dist/agentContextPack.js +70 -48
- package/dist/agentContextTipos.d.ts +2 -2
- package/dist/agentContextTipos.js +7 -13
- package/dist/agentEntryPoints.js +311 -271
- package/dist/billing/index.d.ts +1 -58
- package/dist/billing/index.js +17 -278
- package/dist/cliArgs.js +0 -3
- package/dist/comandos.js +15 -131
- package/dist/contexto.d.ts +0 -9
- package/dist/contexto.js +59 -109
- package/dist/docs.part01.js +30 -51
- package/dist/drift.part01.d.ts +1 -1
- package/dist/drift.part04.d.ts +1 -1
- package/dist/drift.part04.js +2 -2
- package/dist/drift.part05.d.ts +3 -3
- package/dist/drift.part05.js +8 -8
- package/dist/drift.part06.js +15 -8
- package/dist/drift.part09.js +11 -7
- package/dist/drift.part14.js +18 -3
- package/dist/driftOrcamento.d.ts +11 -1
- package/dist/driftOrcamento.js +49 -20
- package/dist/index.d.ts +0 -6
- package/dist/index.js +0 -6
- package/dist/index.part01.d.ts +1 -1
- package/dist/index.part01.js +1 -3
- package/dist/index.part02.js +4 -2
- package/dist/index.part04.js +7 -7
- package/dist/index.part08.js +1 -22
- package/dist/initTemplatesBase.js +5 -5
- package/dist/profileArtefatoValidadores.js +42 -0
- package/dist/profileI18nCatalogo.js +2 -0
- package/dist/projetoConfig.js +7 -0
- package/dist/projetoLegado.js +10 -3
- package/dist/sync/index.js +1 -1
- package/dist/tipos.d.ts +1 -1
- package/docs/README.md +19 -0
- package/docs/ai-integration.md +90 -0
- package/docs/ai-onboarding.md +33 -0
- package/docs/ai-workflow.md +62 -0
- package/docs/auth.md +16 -0
- package/docs/cli.md +36 -95
- package/docs/commands.md +90 -0
- package/docs/database.md +15 -0
- package/docs/deploy.md +6 -38
- package/docs/documentation.md +39 -0
- package/docs/env.md +8 -109
- package/docs/frontend.md +41 -0
- package/docs/getting-started.md +33 -0
- package/docs/i18n.md +15 -0
- package/docs/profiles.md +43 -0
- package/docs/repositories.md +19 -61
- package/docs/rollback.md +9 -20
- package/docs/security.md +24 -0
- package/docs/support.md +8 -0
- package/docs/syntax.md +128 -0
- package/docs/testing.md +17 -0
- package/docs/vocabulary.md +28 -0
- package/node_modules/@sema/gerador-css/dist/index.part01.js +1 -0
- package/node_modules/@sema/gerador-css/dist/index.part01.js.map +1 -1
- package/node_modules/@sema/gerador-css/package.json +1 -1
- package/node_modules/@sema/gerador-dart/dist/index.js +1 -0
- package/node_modules/@sema/gerador-dart/dist/index.js.map +1 -1
- package/node_modules/@sema/gerador-dart/package.json +1 -1
- package/node_modules/@sema/gerador-html/dist/index.js +1 -0
- package/node_modules/@sema/gerador-html/dist/index.js.map +1 -1
- package/node_modules/@sema/gerador-html/package.json +1 -1
- package/node_modules/@sema/gerador-javascript/dist/index.js +1 -0
- package/node_modules/@sema/gerador-javascript/dist/index.js.map +1 -1
- package/node_modules/@sema/gerador-javascript/package.json +1 -1
- package/node_modules/@sema/gerador-lua/dist/index.js +11 -0
- package/node_modules/@sema/gerador-lua/dist/index.js.map +1 -1
- package/node_modules/@sema/gerador-lua/package.json +1 -1
- package/node_modules/@sema/gerador-python/dist/index.part02.js +1 -0
- package/node_modules/@sema/gerador-python/dist/index.part02.js.map +1 -1
- package/node_modules/@sema/gerador-python/package.json +1 -1
- package/node_modules/@sema/gerador-typescript/dist/index.part02.js +1 -0
- package/node_modules/@sema/gerador-typescript/dist/index.part02.js.map +1 -1
- package/node_modules/@sema/gerador-typescript/package.json +1 -1
- package/node_modules/@sema/nucleo/dist/ast/tipos.d.ts +1 -1
- package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js +1 -1
- package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.part01.js +4 -0
- package/node_modules/@sema/nucleo/dist/ir/conversor.part01.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.part02.d.ts +1 -1
- package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +3 -3
- package/node_modules/@sema/nucleo/dist/parser/parser.declaracoes.js +3 -0
- package/node_modules/@sema/nucleo/dist/parser/parser.declaracoes.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.d.ts +2 -2
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.js +4 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/semantico/orcamentoSemantico.d.ts +2 -2
- package/node_modules/@sema/nucleo/dist/semantico/orcamentoSemantico.js +11 -5
- package/node_modules/@sema/nucleo/dist/semantico/orcamentoSemantico.js.map +1 -1
- package/node_modules/@sema/nucleo/package.json +1 -1
- package/node_modules/@sema/padroes/package.json +1 -1
- package/package.json +15 -22
- package/AGENTS.md +0 -324
- package/AGENT_CONTEXT_PACK.json +0 -470
- package/SEMA_BRIEF.curto.txt +0 -18
- package/SEMA_BRIEF.md +0 -705
- package/SEMA_BRIEF.micro.txt +0 -16
- package/SEMA_INDEX.json +0 -10759
- package/dist/agentContext.js.map +0 -1
- package/dist/agentContextPack.js.map +0 -1
- package/dist/agentContextTipos.js.map +0 -1
- package/dist/agentEntryPoints.js.map +0 -1
- package/dist/angular-consumer-standalone.js.map +0 -1
- package/dist/authorAnalise.js.map +0 -1
- package/dist/authorPoliticas.js.map +0 -1
- package/dist/billing/index.js.map +0 -1
- package/dist/bridge.d.ts +0 -52
- package/dist/bridge.js +0 -333
- package/dist/bridge.js.map +0 -1
- package/dist/carregarModulos.js.map +0 -1
- package/dist/cliArgs.js.map +0 -1
- package/dist/comandos.js.map +0 -1
- package/dist/contexto.js.map +0 -1
- package/dist/controleComercialSupabase.d.ts +0 -7
- package/dist/controleComercialSupabase.js +0 -6
- package/dist/controleComercialSupabase.js.map +0 -1
- package/dist/controleComercialSupabaseAdmin.d.ts +0 -7
- package/dist/controleComercialSupabaseAdmin.js +0 -138
- package/dist/controleComercialSupabaseAdmin.js.map +0 -1
- package/dist/controleComercialSupabaseCadastro.d.ts +0 -4
- package/dist/controleComercialSupabaseCadastro.js +0 -85
- package/dist/controleComercialSupabaseCadastro.js.map +0 -1
- package/dist/controleComercialSupabaseConstantes.d.ts +0 -28
- package/dist/controleComercialSupabaseConstantes.js +0 -44
- package/dist/controleComercialSupabaseConstantes.js.map +0 -1
- package/dist/controleComercialSupabaseConsumo.d.ts +0 -2
- package/dist/controleComercialSupabaseConsumo.js +0 -77
- package/dist/controleComercialSupabaseConsumo.js.map +0 -1
- package/dist/controleComercialSupabaseConta.d.ts +0 -11
- package/dist/controleComercialSupabaseConta.js +0 -157
- package/dist/controleComercialSupabaseConta.js.map +0 -1
- package/dist/controleComercialSupabaseProfiles.d.ts +0 -4
- package/dist/controleComercialSupabaseProfiles.js +0 -55
- package/dist/controleComercialSupabaseProfiles.js.map +0 -1
- package/dist/controleComercialSupabaseTipos.d.ts +0 -3
- package/dist/controleComercialSupabaseTipos.js +0 -2
- package/dist/controleComercialSupabaseTipos.js.map +0 -1
- package/dist/controleComercialSupabaseTiposAdmin.d.ts +0 -152
- package/dist/controleComercialSupabaseTiposAdmin.js +0 -2
- package/dist/controleComercialSupabaseTiposAdmin.js.map +0 -1
- package/dist/controleComercialSupabaseTiposBase.d.ts +0 -169
- package/dist/controleComercialSupabaseTiposBase.js +0 -2
- package/dist/controleComercialSupabaseTiposBase.js.map +0 -1
- package/dist/controleComercialSupabaseTiposConta.d.ts +0 -220
- package/dist/controleComercialSupabaseTiposConta.js +0 -2
- package/dist/controleComercialSupabaseTiposConta.js.map +0 -1
- package/dist/cpp-symbols.js.map +0 -1
- package/dist/dev/index.js.map +0 -1
- package/dist/dev/watcher.js.map +0 -1
- package/dist/docs/resolver.js.map +0 -1
- package/dist/docs.js.map +0 -1
- package/dist/docs.part01.js.map +0 -1
- package/dist/docs.part02.js.map +0 -1
- package/dist/doctorCommand.js.map +0 -1
- package/dist/dotnet-http.js.map +0 -1
- package/dist/drift.contrato.js.map +0 -1
- package/dist/drift.js.map +0 -1
- package/dist/drift.part01.js.map +0 -1
- package/dist/drift.part02.js.map +0 -1
- package/dist/drift.part03.js.map +0 -1
- package/dist/drift.part04.js.map +0 -1
- package/dist/drift.part05.js.map +0 -1
- package/dist/drift.part06.js.map +0 -1
- package/dist/drift.part07.js.map +0 -1
- package/dist/drift.part08.js.map +0 -1
- package/dist/drift.part09.js.map +0 -1
- package/dist/drift.part10.js.map +0 -1
- package/dist/drift.part11.js.map +0 -1
- package/dist/drift.part12.js.map +0 -1
- package/dist/drift.part13.js.map +0 -1
- package/dist/drift.part14.js.map +0 -1
- package/dist/driftOrcamento.js.map +0 -1
- package/dist/driftScore.js.map +0 -1
- package/dist/execucoesExternas.js.map +0 -1
- package/dist/exemplosOficiais.js.map +0 -1
- package/dist/fsGovernado.js.map +0 -1
- package/dist/geracaoCore.js.map +0 -1
- package/dist/go-http.js.map +0 -1
- package/dist/guard.js.map +0 -1
- package/dist/iaPrompts.js.map +0 -1
- package/dist/importador.js.map +0 -1
- package/dist/importador.part01.js.map +0 -1
- package/dist/importador.part02.js.map +0 -1
- package/dist/importador.part03.js.map +0 -1
- package/dist/importador.part04.js.map +0 -1
- package/dist/importador.part05.js.map +0 -1
- package/dist/importador.part06.js.map +0 -1
- package/dist/importador.part07.js.map +0 -1
- package/dist/importador.part08.js.map +0 -1
- package/dist/importador.part09.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.part01.js.map +0 -1
- package/dist/index.part02.js.map +0 -1
- package/dist/index.part03.js.map +0 -1
- package/dist/index.part04.js.map +0 -1
- package/dist/index.part05.js.map +0 -1
- package/dist/index.part06.js.map +0 -1
- package/dist/index.part07.js.map +0 -1
- package/dist/index.part08.js.map +0 -1
- package/dist/init/index.js.map +0 -1
- package/dist/init/templates.js.map +0 -1
- package/dist/init/templates.part01.js.map +0 -1
- package/dist/init/templates.part02.js.map +0 -1
- package/dist/initCommand.js.map +0 -1
- package/dist/initTemplatesBackend.js.map +0 -1
- package/dist/initTemplatesBase.js.map +0 -1
- package/dist/initTemplatesFlutter.js.map +0 -1
- package/dist/initTemplatesRuntime.js.map +0 -1
- package/dist/initTemplatesWeb.js.map +0 -1
- package/dist/java-http.js.map +0 -1
- package/dist/lua-symbols.js.map +0 -1
- package/dist/mcpInstalarChaveCommand.d.ts +0 -1
- package/dist/mcpInstalarChaveCommand.js +0 -168
- package/dist/mcpInstalarChaveCommand.js.map +0 -1
- package/dist/mcpRemoto.d.ts +0 -32
- package/dist/mcpRemoto.js +0 -61
- package/dist/mcpRemoto.js.map +0 -1
- package/dist/mcp_chave.d.ts +0 -1
- package/dist/mcp_chave.js +0 -4
- package/dist/mcp_chave.js.map +0 -1
- package/dist/profileArtefatoBase.js.map +0 -1
- package/dist/profileArtefatoValidadores.js.map +0 -1
- package/dist/profileAuthorCommand.js.map +0 -1
- package/dist/profileAuthorTipos.js.map +0 -1
- package/dist/profileCatalogo.js.map +0 -1
- package/dist/profileCommand.js.map +0 -1
- package/dist/profileI18nCatalogo.js.map +0 -1
- package/dist/profileI18nVisivel.js.map +0 -1
- package/dist/profileOrquestracao.js.map +0 -1
- package/dist/profileRegras.js.map +0 -1
- package/dist/profileRulePacks.js.map +0 -1
- package/dist/profiles/validate.js.map +0 -1
- package/dist/projeto.js.map +0 -1
- package/dist/projetoBusca.js.map +0 -1
- package/dist/projetoCarregar.js.map +0 -1
- package/dist/projetoConfig.js.map +0 -1
- package/dist/projetoLegado.js.map +0 -1
- package/dist/projetoOrigens.js.map +0 -1
- package/dist/projetoResolucao.js.map +0 -1
- package/dist/projetoTipos.js.map +0 -1
- package/dist/python-http.js.map +0 -1
- package/dist/runnerValidacaoRemota.d.ts +0 -9
- package/dist/runnerValidacaoRemota.js +0 -9
- package/dist/runnerValidacaoRemota.js.map +0 -1
- package/dist/runnerValidacaoRemotaBateria.d.ts +0 -10
- package/dist/runnerValidacaoRemotaBateria.js +0 -117
- package/dist/runnerValidacaoRemotaBateria.js.map +0 -1
- package/dist/runnerValidacaoRemotaCli.d.ts +0 -4
- package/dist/runnerValidacaoRemotaCli.js +0 -86
- package/dist/runnerValidacaoRemotaCli.js.map +0 -1
- package/dist/runnerValidacaoRemotaComandos.d.ts +0 -7
- package/dist/runnerValidacaoRemotaComandos.js +0 -123
- package/dist/runnerValidacaoRemotaComandos.js.map +0 -1
- package/dist/runnerValidacaoRemotaEscopo.d.ts +0 -4
- package/dist/runnerValidacaoRemotaEscopo.js +0 -79
- package/dist/runnerValidacaoRemotaEscopo.js.map +0 -1
- package/dist/runnerValidacaoRemotaExecucao.d.ts +0 -2
- package/dist/runnerValidacaoRemotaExecucao.js +0 -104
- package/dist/runnerValidacaoRemotaExecucao.js.map +0 -1
- package/dist/runnerValidacaoRemotaRelatorio.d.ts +0 -3
- package/dist/runnerValidacaoRemotaRelatorio.js +0 -95
- package/dist/runnerValidacaoRemotaRelatorio.js.map +0 -1
- package/dist/runnerValidacaoRemotaServidor.d.ts +0 -4
- package/dist/runnerValidacaoRemotaServidor.js +0 -185
- package/dist/runnerValidacaoRemotaServidor.js.map +0 -1
- package/dist/runnerValidacaoRemotaSnapshot.d.ts +0 -10
- package/dist/runnerValidacaoRemotaSnapshot.js +0 -219
- package/dist/runnerValidacaoRemotaSnapshot.js.map +0 -1
- package/dist/runnerValidacaoRemotaTipos.d.ts +0 -158
- package/dist/runnerValidacaoRemotaTipos.js +0 -35
- package/dist/runnerValidacaoRemotaTipos.js.map +0 -1
- package/dist/runnerValidacaoRemotaUtil.d.ts +0 -3
- package/dist/runnerValidacaoRemotaUtil.js +0 -18
- package/dist/runnerValidacaoRemotaUtil.js.map +0 -1
- package/dist/runnerValidacaoRemotaWorkspace.d.ts +0 -2
- package/dist/runnerValidacaoRemotaWorkspace.js +0 -112
- package/dist/runnerValidacaoRemotaWorkspace.js.map +0 -1
- package/dist/rust-http.js.map +0 -1
- package/dist/semaChatCommand.d.ts +0 -1
- package/dist/semaChatCommand.js +0 -43
- package/dist/semaChatCommand.js.map +0 -1
- package/dist/semaChatRuntime.d.ts +0 -23
- package/dist/semaChatRuntime.js +0 -202
- package/dist/semaChatRuntime.js.map +0 -1
- package/dist/sync/index.js.map +0 -1
- package/dist/textoListas.js.map +0 -1
- package/dist/tipos.js.map +0 -1
- package/dist/typescript-http-body.js.map +0 -1
- package/dist/typescript-http-expressoes.js.map +0 -1
- package/dist/typescript-http-modelos.js.map +0 -1
- package/dist/typescript-http-rotas.js.map +0 -1
- package/dist/typescript-http-semantica.js.map +0 -1
- package/dist/typescript-http.js.map +0 -1
- package/docs/AGENT_STARTER.md +0 -111
- package/docs/agentes-por-capacidade.md +0 -126
- package/docs/api.md +0 -82
- package/docs/comandos.md +0 -702
- package/docs/como-ensinar-a-sema-para-ia.md +0 -30
- package/docs/documentacao.md +0 -74
- package/docs/extensao-vscode.md +0 -49
- package/docs/fluxo-pratico-ia-sema.md +0 -215
- package/docs/instalacao-e-primeiro-uso.md +0 -60
- package/docs/integracao-com-ia.md +0 -44
- package/docs/mcp.md +0 -69
- package/docs/pagamento-ponta-a-ponta.md +0 -171
- package/docs/persistencia-vendor-first.md +0 -151
- package/docs/prompt-base-ia-sema.md +0 -111
- package/docs/seguranca.md +0 -126
- package/docs/sintaxe.md +0 -218
- package/llms-full.txt +0 -40
- package/llms.txt +0 -23
package/dist/drift.part09.js
CHANGED
|
@@ -96,7 +96,11 @@ export function ultimoSegmentoSimbolico(caminho) {
|
|
|
96
96
|
return paraIdentificadorModulo(partes[partes.length - 1] ?? caminho);
|
|
97
97
|
}
|
|
98
98
|
export function pontuarCandidatoDeclarado(candidato, origem, caminhoDeclarado) {
|
|
99
|
-
if (candidato.origem
|
|
99
|
+
if (candidato.origem === "sql") {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
const mesmaFamiliaTsJs = (origem === "ts" || origem === "js") && (candidato.origem === "ts" || candidato.origem === "js");
|
|
103
|
+
if (candidato.origem !== origem && !mesmaFamiliaTsJs) {
|
|
100
104
|
return undefined;
|
|
101
105
|
}
|
|
102
106
|
const caminhoNormalizado = paraIdentificadorModulo(caminhoDeclarado.replace(/\./g, "_"));
|
|
@@ -211,16 +215,16 @@ export function sugerirCandidatosParaTaskSemImpl(simbolos, nomeTask) {
|
|
|
211
215
|
export function escolherRotasEsperadas(task, fontesLegado) {
|
|
212
216
|
const fontesTs = extrairFontesHttpTypeScript(fontesLegado);
|
|
213
217
|
const fontesBackend = extrairFontesHttpBackend(fontesLegado);
|
|
214
|
-
const
|
|
215
|
-
if (
|
|
218
|
+
const implTsOuJs = task.implementacoesExternas.find((impl) => impl.origem === "ts" || impl.origem === "js");
|
|
219
|
+
if (implTsOuJs) {
|
|
216
220
|
const esperadas = new Set();
|
|
217
|
-
if (/\.route\.(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)$/i.test(
|
|
221
|
+
if (/\.route\.(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)$/i.test(implTsOuJs.caminho) || /\.route\./i.test(implTsOuJs.caminho)) {
|
|
218
222
|
esperadas.add("nextjs");
|
|
219
223
|
}
|
|
220
|
-
if (/\bcontroller\b/i.test(
|
|
224
|
+
if (/\bcontroller\b/i.test(implTsOuJs.caminho) && fontesTs.includes("nestjs")) {
|
|
221
225
|
esperadas.add("nestjs");
|
|
222
226
|
}
|
|
223
|
-
if (fontesTs.includes("firebase") && /(apps\.worker|worker|sema_contract_bridge|health)/i.test(
|
|
227
|
+
if (fontesTs.includes("firebase") && /(apps\.worker|worker|sema_contract_bridge|health)/i.test(implTsOuJs.caminho)) {
|
|
224
228
|
esperadas.add("firebase");
|
|
225
229
|
}
|
|
226
230
|
if (esperadas.size > 0) {
|
|
@@ -267,7 +271,7 @@ export function escolherRotasEsperadas(task, fontesLegado) {
|
|
|
267
271
|
return [];
|
|
268
272
|
}
|
|
269
273
|
export function taskEhBridgeFirebase(task) {
|
|
270
|
-
return task.implementacoesExternas.some((impl) => impl.origem === "ts" && /sema_contract_bridge|collections?|apps\.worker/i.test(impl.caminho));
|
|
274
|
+
return task.implementacoesExternas.some((impl) => (impl.origem === "ts" || impl.origem === "js") && /sema_contract_bridge|collections?|apps\.worker/i.test(impl.caminho));
|
|
271
275
|
}
|
|
272
276
|
export function tiposAceitosParaRecursoPersistencia(recurso) {
|
|
273
277
|
switch (recurso.resourceKind) {
|
package/dist/drift.part14.js
CHANGED
|
@@ -1,8 +1,23 @@
|
|
|
1
|
+
// SEMA-GOVERNED: sema.governanca_ia_contexto
|
|
2
|
+
// Descricao: analisa modulos selecionados no drift; consulte contratos/sema/governanca_ia_contexto.sema antes de editar.
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
1
5
|
import { escolherArquivoPorVinculo, escolherSimboloPorVinculo } from "./drift.part03.js";
|
|
2
6
|
import { calcularRiscoOperacional, encontrarAncoraSuperficie } from "./drift.part04.js";
|
|
3
7
|
import { resolverPersistenciaLocalPorTask } from "./drift.part08.js";
|
|
4
8
|
import { escolherRotasEsperadas, normalizarCaminhoRota, ordenarCandidatos, sugerirCandidatosParaImpl, sugerirCandidatosParaTaskSemImpl } from "./drift.part09.js";
|
|
5
9
|
import { coletarVinculosIr, extrairRecursosEsperados, resolverRecursoEsperado } from "./drift.part10.js";
|
|
10
|
+
function escolherArquivoDeclarado(contexto, arquivosConhecidos, valor) {
|
|
11
|
+
const resolucaoIndexada = escolherArquivoPorVinculo(arquivosConhecidos, valor);
|
|
12
|
+
if (resolucaoIndexada.status !== "nao_encontrado") {
|
|
13
|
+
return resolucaoIndexada;
|
|
14
|
+
}
|
|
15
|
+
const caminhoExplicito = path.resolve(contexto.baseProjeto, valor);
|
|
16
|
+
if (existsSync(caminhoExplicito)) {
|
|
17
|
+
return { arquivo: caminhoExplicito, confianca: "alta", status: "resolvido" };
|
|
18
|
+
}
|
|
19
|
+
return resolucaoIndexada;
|
|
20
|
+
}
|
|
6
21
|
export function analisarModulosSelecionadosDrift(estado) {
|
|
7
22
|
const { contexto, mapaImpl, todosSimbolos, mapaRecursos, todosRecursos, todasRotasIndexadas, todosArquivosConhecidos, implsValidos, implsQuebrados, vinculosValidos, vinculosQuebrados, rotasDivergentes, recursosValidos, recursosDivergentes, diagnosticos, tasksResumo, taskPorChave, guardrailsPorTask, resumoVinculosPorTask, arquivosAncoraHerdadosPorTask, } = estado;
|
|
8
23
|
for (const item of contexto.modulosSelecionados) {
|
|
@@ -292,7 +307,7 @@ export function analisarModulosSelecionadosDrift(estado) {
|
|
|
292
307
|
registro.simbolo = resolucaoSimbolo.simbolo?.simbolo;
|
|
293
308
|
}
|
|
294
309
|
else if (arquivoDeclarado) {
|
|
295
|
-
const resolucaoArquivo =
|
|
310
|
+
const resolucaoArquivo = escolherArquivoDeclarado(contexto, todosArquivosConhecidos, arquivoDeclarado);
|
|
296
311
|
registro.status = resolucaoArquivo.status;
|
|
297
312
|
registro.confianca = resolucaoArquivo.confianca;
|
|
298
313
|
registro.arquivo = resolucaoArquivo.arquivo;
|
|
@@ -319,14 +334,14 @@ export function analisarModulosSelecionadosDrift(estado) {
|
|
|
319
334
|
registro.simbolo = rota.simbolo;
|
|
320
335
|
}
|
|
321
336
|
else {
|
|
322
|
-
const resolucaoArquivo =
|
|
337
|
+
const resolucaoArquivo = escolherArquivoDeclarado(contexto, todosArquivosConhecidos, superficieDeclarada);
|
|
323
338
|
registro.status = resolucaoArquivo.status;
|
|
324
339
|
registro.confianca = resolucaoArquivo.confianca;
|
|
325
340
|
registro.arquivo = resolucaoArquivo.arquivo;
|
|
326
341
|
}
|
|
327
342
|
}
|
|
328
343
|
else {
|
|
329
|
-
const resolucaoArquivo =
|
|
344
|
+
const resolucaoArquivo = escolherArquivoDeclarado(contexto, todosArquivosConhecidos, itemVinculo.vinculo.valor);
|
|
330
345
|
registro.status = resolucaoArquivo.status;
|
|
331
346
|
registro.confianca = resolucaoArquivo.confianca;
|
|
332
347
|
registro.arquivo = resolucaoArquivo.arquivo;
|
package/dist/driftOrcamento.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
export declare const LIMITE_AVISO_LINHAS_CODIGO_GOVERNADO = 1000;
|
|
2
|
+
export declare const LIMITE_BLOQUEIO_LINHAS_CODIGO_GOVERNADO = 2000;
|
|
3
|
+
export declare const LIMITE_AVISO_LINHAS_CONTRATO_SEMA = 300;
|
|
4
|
+
export declare const LIMITE_BLOQUEIO_LINHAS_CONTRATO_SEMA = 500;
|
|
1
5
|
export declare const LIMITE_AVISO_LINHAS_ORCAMENTO_SEMANTICO = 1000;
|
|
2
6
|
export declare const LIMITE_BLOQUEIO_LINHAS_ORCAMENTO_SEMANTICO = 2000;
|
|
3
7
|
export type TipoArquivoOrcamento = "contrato" | "codigo" | "documentacao" | "gerado" | "migracao_historica";
|
|
@@ -31,8 +35,14 @@ export interface DiagnosticoOrcamentoArquivo {
|
|
|
31
35
|
limite_aviso_linhas: number;
|
|
32
36
|
limite_bloqueio_linhas: number;
|
|
33
37
|
}
|
|
38
|
+
export interface LimitesOrcamentoSemantico {
|
|
39
|
+
aviso: number;
|
|
40
|
+
bloqueio: number;
|
|
41
|
+
}
|
|
34
42
|
export declare function contarLinhasConteudo(conteudo: string): number;
|
|
35
|
-
export declare function
|
|
43
|
+
export declare function limitesOrcamentoSemantico(tipo?: TipoArquivoOrcamento | string): LimitesOrcamentoSemantico;
|
|
44
|
+
export declare function classificarLinhasOrcamentoSemantico(linhas: number, tipo?: TipoArquivoOrcamento | string): SeveridadeOrcamentoSemantico;
|
|
45
|
+
export declare function arquivoContratoSemaTemNomeArtificial(caminho: string): boolean;
|
|
36
46
|
export declare function arquivoEhArtefatoGeradoDeterministico(caminho: string): boolean;
|
|
37
47
|
export declare function arquivoEhMigracaoHistoricaImutavel(caminho: string): boolean;
|
|
38
48
|
export declare function tipoArquivoOrcamento(caminho: string): TipoArquivoOrcamento;
|
package/dist/driftOrcamento.js
CHANGED
|
@@ -4,8 +4,12 @@
|
|
|
4
4
|
// Descrição: centraliza os gates de linhas e cabeçalho Sema para drift, finalização e snapshots.
|
|
5
5
|
import { readFile } from "node:fs/promises";
|
|
6
6
|
import path from "node:path";
|
|
7
|
-
export const
|
|
8
|
-
export const
|
|
7
|
+
export const LIMITE_AVISO_LINHAS_CODIGO_GOVERNADO = 1000;
|
|
8
|
+
export const LIMITE_BLOQUEIO_LINHAS_CODIGO_GOVERNADO = 2000;
|
|
9
|
+
export const LIMITE_AVISO_LINHAS_CONTRATO_SEMA = 300;
|
|
10
|
+
export const LIMITE_BLOQUEIO_LINHAS_CONTRATO_SEMA = 500;
|
|
11
|
+
export const LIMITE_AVISO_LINHAS_ORCAMENTO_SEMANTICO = LIMITE_AVISO_LINHAS_CODIGO_GOVERNADO;
|
|
12
|
+
export const LIMITE_BLOQUEIO_LINHAS_ORCAMENTO_SEMANTICO = LIMITE_BLOQUEIO_LINHAS_CODIGO_GOVERNADO;
|
|
9
13
|
const EXTENSOES_CODIGO_GOVERNAVEL = new Set([
|
|
10
14
|
".ts",
|
|
11
15
|
".tsx",
|
|
@@ -65,15 +69,33 @@ export function contarLinhasConteudo(conteudo) {
|
|
|
65
69
|
? normalizado.slice(0, -1).split("\n").length
|
|
66
70
|
: normalizado.split("\n").length;
|
|
67
71
|
}
|
|
68
|
-
export function
|
|
69
|
-
if (
|
|
72
|
+
export function limitesOrcamentoSemantico(tipo) {
|
|
73
|
+
if (tipo === "contrato") {
|
|
74
|
+
return {
|
|
75
|
+
aviso: LIMITE_AVISO_LINHAS_CONTRATO_SEMA,
|
|
76
|
+
bloqueio: LIMITE_BLOQUEIO_LINHAS_CONTRATO_SEMA,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
aviso: LIMITE_AVISO_LINHAS_CODIGO_GOVERNADO,
|
|
81
|
+
bloqueio: LIMITE_BLOQUEIO_LINHAS_CODIGO_GOVERNADO,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export function classificarLinhasOrcamentoSemantico(linhas, tipo) {
|
|
85
|
+
const limites = limitesOrcamentoSemantico(tipo);
|
|
86
|
+
if (linhas > limites.bloqueio) {
|
|
70
87
|
return "erro";
|
|
71
88
|
}
|
|
72
|
-
if (linhas >
|
|
89
|
+
if (linhas > limites.aviso) {
|
|
73
90
|
return "aviso";
|
|
74
91
|
}
|
|
75
92
|
return "ok";
|
|
76
93
|
}
|
|
94
|
+
export function arquivoContratoSemaTemNomeArtificial(caminho) {
|
|
95
|
+
const nome = path.basename(caminho, ".sema").toLowerCase();
|
|
96
|
+
return /(^|[_-])(parte|part|p)[_-]?\d+($|[_-])/.test(nome)
|
|
97
|
+
|| /(^|[_-])\d+_de_\d+($|[_-])/.test(nome);
|
|
98
|
+
}
|
|
77
99
|
export function arquivoEhArtefatoGeradoDeterministico(caminho) {
|
|
78
100
|
const normalizado = caminho.replace(/\\/g, "/").toLowerCase();
|
|
79
101
|
const partes = normalizado.split("/").filter(Boolean);
|
|
@@ -90,8 +112,7 @@ export function arquivoEhMigracaoHistoricaImutavel(caminho) {
|
|
|
90
112
|
const normalizado = caminho.replace(/\\/g, "/").toLowerCase();
|
|
91
113
|
const partes = normalizado.split("/").filter(Boolean);
|
|
92
114
|
const nome = partes.at(-1) ?? "";
|
|
93
|
-
return partes.includes("
|
|
94
|
-
&& partes.includes("migrations")
|
|
115
|
+
return partes.includes("migrations")
|
|
95
116
|
&& /^\d{14}_.+\.sql$/.test(nome);
|
|
96
117
|
}
|
|
97
118
|
export function tipoArquivoOrcamento(caminho) {
|
|
@@ -163,26 +184,34 @@ export function exemploCabecalhoCodigoGovernado(arquivo) {
|
|
|
163
184
|
export function validarArquivoTocado(entrada) {
|
|
164
185
|
const linhas = Number(entrada.linhas ?? 0);
|
|
165
186
|
const tipo = entrada.tipo ?? tipoArquivoOrcamento(entrada.arquivo ?? "");
|
|
166
|
-
const
|
|
187
|
+
const arquivo = entrada.arquivo ?? "arquivo";
|
|
188
|
+
const limites = limitesOrcamentoSemantico(tipo);
|
|
189
|
+
const nomeContratoArtificial = tipo === "contrato" && arquivoContratoSemaTemNomeArtificial(arquivo);
|
|
190
|
+
const severidade = nomeContratoArtificial ? "erro" : classificarLinhasOrcamentoSemantico(linhas, tipo);
|
|
167
191
|
const tipoSemOrcamentoDeCodigo = tipo === "documentacao" || tipo === "gerado" || tipo === "migracao_historica";
|
|
168
192
|
const permitido = tipoSemOrcamentoDeCodigo || severidade !== "erro";
|
|
169
|
-
const arquivo = entrada.arquivo ?? "arquivo";
|
|
170
193
|
return {
|
|
171
194
|
permitido,
|
|
172
195
|
severidade: tipoSemOrcamentoDeCodigo ? "ok" : severidade,
|
|
173
|
-
limite_aviso_linhas:
|
|
174
|
-
limite_bloqueio_linhas:
|
|
196
|
+
limite_aviso_linhas: limites.aviso,
|
|
197
|
+
limite_bloqueio_linhas: limites.bloqueio,
|
|
175
198
|
mensagem: tipo === "gerado"
|
|
176
199
|
? `${arquivo} e artefato gerado deterministico; valide a fonte humana governada em vez de dividir o artefato.`
|
|
177
200
|
: tipo === "migracao_historica"
|
|
178
201
|
? `${arquivo} e migracao historica imutavel; novas migrations continuam obrigadas a passar pelo gate antes de serem criadas.`
|
|
179
202
|
: tipo === "documentacao"
|
|
180
203
|
? `${arquivo} e documentacao; nao entra no limite de codigo, mas continua governado por docs-impacto, limite de bytes e verificacao de segredos.`
|
|
181
|
-
:
|
|
182
|
-
? `${arquivo}
|
|
183
|
-
: severidade === "
|
|
184
|
-
? `${arquivo} (${tipo}) tem ${linhas} linhas;
|
|
185
|
-
:
|
|
204
|
+
: nomeContratoArtificial
|
|
205
|
+
? `${arquivo} usa nome artificial de parte numerada. Contratos .sema devem ser pequenos por dominio/capacidade, nunca parte_1/parte_2. Um mesmo arquivo de codigo pode ser governado por varios .sema via vinculos.`
|
|
206
|
+
: tipo === "contrato" && severidade === "erro"
|
|
207
|
+
? `${arquivo} (${tipo}) tem ${linhas} linhas; limite bloqueante para .sema e ${limites.bloqueio}. Divida por dominio/capacidade real, nunca em parte_1/parte_2. Preserve guarantees, tests, authz, dados e vinculos; varios .sema podem governar o mesmo arquivo de codigo.`
|
|
208
|
+
: tipo === "contrato" && severidade === "aviso"
|
|
209
|
+
? `${arquivo} (${tipo}) tem ${linhas} linhas; contrato .sema saudavel fica ate ${limites.aviso} linhas e bloqueia acima de ${limites.bloqueio}. Planeje split por capacidade antes de editar mais.`
|
|
210
|
+
: severidade === "erro"
|
|
211
|
+
? `${arquivo} (${tipo}) tem ${linhas} linhas; reorganize em arquivos com responsabilidade unica antes de concluir. Exemplo web: index.html, styles/*.css, js/state.js, js/render/*.js e data/*.json. Nao fatie em _p1/_p2 sem fronteira semantica.`
|
|
212
|
+
: severidade === "aviso"
|
|
213
|
+
? `${arquivo} (${tipo}) tem ${linhas} linhas; planeje modularizacao por responsabilidade antes de passar de ${limites.bloqueio}.`
|
|
214
|
+
: `${arquivo} (${tipo}) esta dentro do orcamento semantico.`,
|
|
186
215
|
};
|
|
187
216
|
}
|
|
188
217
|
export function emitirDiagnosticosCodigoMonolitico(entrada) {
|
|
@@ -228,8 +257,8 @@ export function avaliarOrcamentoArquivo(opcoes) {
|
|
|
228
257
|
severidade: validacao.severidade,
|
|
229
258
|
bloqueia: validacao.severidade === "erro",
|
|
230
259
|
mensagem: validacao.mensagem,
|
|
231
|
-
limite_aviso_linhas:
|
|
232
|
-
limite_bloqueio_linhas:
|
|
260
|
+
limite_aviso_linhas: validacao.limite_aviso_linhas,
|
|
261
|
+
limite_bloqueio_linhas: validacao.limite_bloqueio_linhas,
|
|
233
262
|
});
|
|
234
263
|
}
|
|
235
264
|
if (tipoArquivo === "codigo" && opcoes.exigirCabecalhoCodigoGovernado) {
|
|
@@ -245,8 +274,8 @@ export function avaliarOrcamentoArquivo(opcoes) {
|
|
|
245
274
|
severidade: "erro",
|
|
246
275
|
bloqueia: true,
|
|
247
276
|
mensagem: cabecalho.mensagem,
|
|
248
|
-
limite_aviso_linhas:
|
|
249
|
-
limite_bloqueio_linhas:
|
|
277
|
+
limite_aviso_linhas: validacao.limite_aviso_linhas,
|
|
278
|
+
limite_bloqueio_linhas: validacao.limite_bloqueio_linhas,
|
|
250
279
|
});
|
|
251
280
|
}
|
|
252
281
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
export * from "./index.part01.js";
|
|
3
|
-
export * from "./index.part02.js";
|
|
4
|
-
export * from "./index.part03.js";
|
|
5
|
-
export * from "./index.part04.js";
|
|
6
|
-
export * from "./index.part05.js";
|
|
7
|
-
export * from "./index.part06.js";
|
|
8
|
-
export * from "./index.part07.js";
|
|
9
3
|
export * from "./index.part08.js";
|
|
10
4
|
export { iniciarProfileAuthor, comandoAuthor, criarAuthorBriefing, revisarClichesAuthor } from "./profileAuthorCommand.js";
|
|
11
5
|
export { validarProfileSemantico } from "./profileCommand.js";
|
package/dist/index.js
CHANGED
|
@@ -3,12 +3,6 @@
|
|
|
3
3
|
// Descricao: CLI particionada; consulte contratos/sema/governanca_ia_contexto.sema antes de editar.
|
|
4
4
|
import { principal } from "./index.part08.js";
|
|
5
5
|
export * from "./index.part01.js";
|
|
6
|
-
export * from "./index.part02.js";
|
|
7
|
-
export * from "./index.part03.js";
|
|
8
|
-
export * from "./index.part04.js";
|
|
9
|
-
export * from "./index.part05.js";
|
|
10
|
-
export * from "./index.part06.js";
|
|
11
|
-
export * from "./index.part07.js";
|
|
12
6
|
export * from "./index.part08.js";
|
|
13
7
|
export { iniciarProfileAuthor, comandoAuthor, criarAuthorBriefing, revisarClichesAuthor } from "./profileAuthorCommand.js";
|
|
14
8
|
export { validarProfileSemantico } from "./profileCommand.js";
|
package/dist/index.part01.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { compilarCodigo, type IrModulo } from "@sema/nucleo";
|
|
|
2
2
|
import { analisarDriftLegado, type OpcoesDriftLegado } from "./drift.js";
|
|
3
3
|
import { type GuiaCapacidadeIaMap } from './agentContextTipos.js';
|
|
4
4
|
import { criarBriefingAgente, resumirDriftPorModulo } from "./index.part03.js";
|
|
5
|
-
export type Comando = "iniciar" | "init" | "dev" | "sync" | "
|
|
5
|
+
export type Comando = "iniciar" | "init" | "dev" | "sync" | "author" | "profile" | "validar" | "ast" | "ir" | "compilar" | "gerar" | "testar" | "diagnosticos" | "verificar" | "inspecionar" | "drift" | "impacto" | "renomear-semantico" | "importar" | "doctor" | "formatar" | "ajuda-ia" | "starter-ia" | "sync-ai-entrypoints" | "instalar-exemplos" | "preflight" | "rule-packs" | "docs-impacto" | "finalizar-mudanca" | "resumo" | "prompt-curto" | "prompt-ia" | "prompt-ia-ui" | "prompt-ia-react" | "prompt-ia-sema-primeiro" | "exemplos-prompt-ia" | "contexto-ia";
|
|
6
6
|
export interface ResultadoFormatacaoArquivo {
|
|
7
7
|
caminho: string;
|
|
8
8
|
alterado: boolean;
|
package/dist/index.part01.js
CHANGED
|
@@ -109,9 +109,7 @@ export function ajuda() {
|
|
|
109
109
|
"sema contexto-ia <arquivo.sema> [--saida <diretorio>] [--json]",
|
|
110
110
|
"sema sync-ai-entrypoints [--json]",
|
|
111
111
|
"sema instalar-exemplos [--json]",
|
|
112
|
-
"sema preflight [comando] [--operation-code <codigo>] [--
|
|
113
|
-
"sema mcp-instalar-chave --stdin [--endpoint <url>] [--control-plane-url <url>] [--dry-run] [--json]",
|
|
114
|
-
"sema chat doctor [--json]",
|
|
112
|
+
"sema preflight [comando] [--operation-code <codigo>] [--json]",
|
|
115
113
|
"sema docs-impacto --intencao <acao> [--arquivo <caminho>] [--criar-ausentes] [--json]",
|
|
116
114
|
"sema finalizar-mudanca --intencao <acao> [--arquivo <caminho>] [--doc-lida <caminho>] [--json]",
|
|
117
115
|
"sema author briefing <arquivo.sema> [--json]",
|
package/dist/index.part02.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Descricao: CLI particionada; consulte contratos/sema/governanca_ia_contexto.sema antes de editar.
|
|
3
3
|
import { readFile } from "node:fs/promises";
|
|
4
4
|
import path from "node:path";
|
|
5
|
-
import {
|
|
5
|
+
import { LIMITE_AVISO_LINHAS_CODIGO_GOVERNADO, LIMITE_AVISO_LINHAS_CONTRATO_SEMA, LIMITE_BLOQUEIO_LINHAS_CODIGO_GOVERNADO, LIMITE_BLOQUEIO_LINHAS_CONTRATO_SEMA, } from "./driftOrcamento.js";
|
|
6
6
|
import { CAPACIDADES_IA_OPERACIONAIS, } from './agentContextTipos.js';
|
|
7
7
|
import { limitarLista, resumirListaTexto, unicosOrdenados } from './textoListas.js';
|
|
8
8
|
import { VERSAO_CLI, calcularRiscoOperacionalResumo, formatarEfeitoSemanticoResumido, normalizarIdentificadorResumo, resumirCamposTask } from "./index.part01.js";
|
|
@@ -334,7 +334,9 @@ Regras:
|
|
|
334
334
|
- se a tarefa pedir mais contexto, suba para \`briefing.min.json\`, \`drift.json\` e depois \`ir.json\`
|
|
335
335
|
- não saia editando software vivo sem olhar risco, lacuna e checks sugeridos
|
|
336
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
|
|
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
|
|
338
340
|
${resumo.consumerFramework ? "- se for tarefa visual consumer, priorize `appRoutes`, `consumerSurfaces` e `consumerBridges` antes de abrir arquivos aleatórios" : ""}
|
|
339
341
|
|
|
340
342
|
Contexto compacto:
|
package/dist/index.part04.js
CHANGED
|
@@ -6,9 +6,9 @@ import { formatarDiagnosticos, gerarRespostaValidacao, temErros, } from "@sema/n
|
|
|
6
6
|
import { carregarProjeto, } from "./projeto.js";
|
|
7
7
|
import { analisarDriftLegado, } from "./drift.js";
|
|
8
8
|
import { resolverDocumentacaoObrigatoria, verificarDocumentacaoMudanca, } from "./docs.js";
|
|
9
|
-
import {
|
|
9
|
+
import { LIMITE_AVISO_LINHAS_CODIGO_GOVERNADO, LIMITE_AVISO_LINHAS_CONTRATO_SEMA, LIMITE_BLOQUEIO_LINHAS_CODIGO_GOVERNADO, LIMITE_BLOQUEIO_LINHAS_CONTRATO_SEMA, } from "./driftOrcamento.js";
|
|
10
10
|
import { ARQUIVO_AGENT_CONTEXT_PACK, ARQUIVO_DOC_AGENTES_CAPACIDADE, ARQUIVO_SEMA_BOOT, ARQUIVO_SEMA_SMALL_MODEL, } from './agentContextTipos.js';
|
|
11
|
-
import { criarGuiaCapacidadeIa,
|
|
11
|
+
import { criarGuiaCapacidadeIa, LIMITE_CARACTERES_PAYLOAD_INLINE } from './agentContextPack.js';
|
|
12
12
|
import { criarEntradaCanonicaProjeto } from './agentContext.js';
|
|
13
13
|
import { renderizarDocumentoAgentesPorCapacidade, renderizarSemaBoot, renderizarSemaSmallModel, } from './agentEntryPoints.js';
|
|
14
14
|
import { carregarModulos } from './carregarModulos.js';
|
|
@@ -112,8 +112,8 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
|
|
|
112
112
|
`POLITICA_PLATAFORMA: Sema governa projeto e nao contorna politicas da plataforma; se houver alerta externo, pare e explique sem burlar filtro`,
|
|
113
113
|
`TIMEOUT_SEMA: timeout local nao e falha; retry progressivo ${agentContextPack.politicaTimeoutResumo.escalonamentoSegundos.map((segundos) => `${segundos}s`).join(" -> ")}; escopar arquivo se projeto inteiro for lento`,
|
|
114
114
|
`CODIGO_GOVERNADO: ${agentContextPack.politicaCodigoGovernado.marcador} -> chamar Sema antes de editar codigo gerado; validacao inline nao dispensa cabecalho fisico`,
|
|
115
|
-
`ORCAMENTO_SEMANTICO: codigo
|
|
116
|
-
`
|
|
115
|
+
`ORCAMENTO_SEMANTICO: codigo aviso>${LIMITE_AVISO_LINHAS_CODIGO_GOVERNADO} bloqueio>${LIMITE_BLOQUEIO_LINHAS_CODIGO_GOVERNADO}; .sema aviso>${LIMITE_AVISO_LINHAS_CONTRATO_SEMA} bloqueio>${LIMITE_BLOQUEIO_LINHAS_CONTRATO_SEMA}; .sema por capacidade, nunca parte_1/parte_2; docs Markdown fora do limite de codigo`,
|
|
116
|
+
`PAYLOAD_INLINE: inline>${LIMITE_CARACTERES_PAYLOAD_INLINE} caracteres nao e timeout; modularize por responsabilidade ou use anexo/caminho autorizado`,
|
|
117
117
|
`SINAL_VS_RITUAL: score/achados/decisaoAgente sao triagem; exigir evidencia concreta alem de palavra-chave ou regex`,
|
|
118
118
|
`DESIGN_VISUAL: se houver UI, moderno obrigatorio; fraca=padrao seguro responsivo; media=tokens+estados; forte=screenshot+assets+microinteracoes`,
|
|
119
119
|
`TOP_MODULOS: ${resumirListaTexto(modulos.map((modulo) => modulo.modulo), 3)}`,
|
|
@@ -137,8 +137,8 @@ export async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escrever
|
|
|
137
137
|
`POLITICA_PLATAFORMA: ${agentContextPack.politicaPlataforma.regra} ${agentContextPack.politicaPlataforma.quandoHouverBloqueio}`,
|
|
138
138
|
`TIMEOUT_SEMA: ${agentContextPack.politicaTimeoutResumo.regra} Escale ${agentContextPack.politicaTimeoutResumo.escalonamentoSegundos.map((segundos) => `${segundos}s`).join(" -> ")} antes de declarar bloqueio.`,
|
|
139
139
|
`CODIGO_GOVERNADO: ${agentContextPack.politicaCodigoGovernado.marcador} -> docs-impacto e drift antes de alterar comportamento`,
|
|
140
|
-
`ORCAMENTO_SEMANTICO: codigo
|
|
141
|
-
`
|
|
140
|
+
`ORCAMENTO_SEMANTICO: codigo governado acima de ${LIMITE_AVISO_LINHAS_CODIGO_GOVERNADO} linhas exige refatoracao e acima de ${LIMITE_BLOQUEIO_LINHAS_CODIGO_GOVERNADO} bloqueia; .sema acima de ${LIMITE_AVISO_LINHAS_CONTRATO_SEMA} diagnostica e acima de ${LIMITE_BLOQUEIO_LINHAS_CONTRATO_SEMA} bloqueia criacao, edicao, drift, geracao e snapshot; varios .sema podem governar o mesmo arquivo via vinculos`,
|
|
141
|
+
`PAYLOAD_INLINE: conteudo inline acima de ${LIMITE_CARACTERES_PAYLOAD_INLINE} caracteres deve virar arquivos logicos, anexo, caminho de servidor autorizado ou manifesto; nao aumente timeout para empurrar o mesmo payload`,
|
|
142
142
|
`DESIGN_VISUAL: ${agentContextPack.politicaDesignVisual.regra} Fraca=${agentContextPack.politicaDesignVisual.porCapacidade.fraca} Media=${agentContextPack.politicaDesignVisual.porCapacidade.media} Forte=${agentContextPack.politicaDesignVisual.porCapacidade.forte}`,
|
|
143
143
|
`TOP_MODULOS: ${resumirListaTexto(modulos.map((modulo) => modulo.modulo), 6)}`,
|
|
144
144
|
`TOP_RISCOS: ${resumirListaTexto(unicosOrdenados(modulos.flatMap((modulo) => modulo.riscosPrincipais)), 6)}`,
|
|
@@ -252,7 +252,7 @@ Antes de escolher arquivo de código, leia \`${ARQUIVO_SEMA_BOOT}\` e \`agent-co
|
|
|
252
252
|
|
|
253
253
|
- Abra \`AGENTS.md\` antes de editar código, contrato, docs operacionais, release ou deploy.
|
|
254
254
|
- Abra \`exemplos/\` antes de criar ou corrigir sintaxe \`.sema\`.
|
|
255
|
-
- Abra \`docs/
|
|
255
|
+
- Abra \`docs/syntax.md\` quando exemplos não bastarem para resolver a gramática.
|
|
256
256
|
- Abra \`contratos/\` antes de qualquer implementação ou mudança de comportamento.
|
|
257
257
|
|
|
258
258
|
## Timeout e retry
|
package/dist/index.part08.js
CHANGED
|
@@ -4,12 +4,9 @@ import path from "node:path";
|
|
|
4
4
|
import { carregarConfiguracaoProjeto, resolverAlvoPadrao, resolverEstruturaSaidaPadrao, resolverFrameworkPadrao, resolverSaidaPadrao, } from "./projeto.js";
|
|
5
5
|
import { REGISTRO_COMANDOS } from "./comandos.js";
|
|
6
6
|
import * as billing from "./billing/index.js";
|
|
7
|
-
import { ajudaRunnerValidacaoRemota, comandoRunnerValidacaoRemota, } from "./runnerValidacaoRemotaCli.js";
|
|
8
|
-
import { comandoServidorRunnerValidacaoRemota } from "./runnerValidacaoRemotaServidor.js";
|
|
9
7
|
import { comandoIniciar, comandoInstalarExemplos } from './initCommand.js';
|
|
10
8
|
import { obterOpcao, obterPosicionais, possuiFlag } from './cliArgs.js';
|
|
11
9
|
import { comandoAuthor, comandoProfile, criarPayloadRulePacks, normalizarProfileGovernanca, renderizarRulePacksTexto } from './profileAuthorCommand.js';
|
|
12
|
-
import { comandoMcpInstalarChave } from './mcpInstalarChaveCommand.js';
|
|
13
10
|
import { comandoDoctor } from './doctorCommand.js';
|
|
14
11
|
import { normalizarFonteImportacao, normalizarTemplateIniciar, } from './geracaoCore.js';
|
|
15
12
|
import { VERSAO_CLI, ajuda, obterArgumentos } from "./index.part01.js";
|
|
@@ -31,7 +28,7 @@ export async function principal() {
|
|
|
31
28
|
const cwd = process.cwd();
|
|
32
29
|
const posicionais = obterPosicionais(resto);
|
|
33
30
|
let codigoSaida = 0;
|
|
34
|
-
// --- Comandos registrados via REGISTRO_COMANDOS (
|
|
31
|
+
// --- Comandos registrados via REGISTRO_COMANDOS (guard, init, dev, sync) ---
|
|
35
32
|
const handlerRegistrado = REGISTRO_COMANDOS[comando];
|
|
36
33
|
if (handlerRegistrado) {
|
|
37
34
|
codigoSaida = await handlerRegistrado(posicionais, resto, possuiFlag(resto, "--json"));
|
|
@@ -55,21 +52,6 @@ export async function principal() {
|
|
|
55
52
|
codigoSaida = 0;
|
|
56
53
|
}
|
|
57
54
|
break;
|
|
58
|
-
case "runner":
|
|
59
|
-
{
|
|
60
|
-
const subcomando = posicionais[0];
|
|
61
|
-
if (subcomando === "validar-remoto") {
|
|
62
|
-
codigoSaida = await comandoRunnerValidacaoRemota(resto, cwd);
|
|
63
|
-
}
|
|
64
|
-
else if (subcomando === "servidor") {
|
|
65
|
-
codigoSaida = await comandoServidorRunnerValidacaoRemota(resto, cwd);
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
console.log(ajudaRunnerValidacaoRemota());
|
|
69
|
-
codigoSaida = subcomando ? 1 : 0;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
break;
|
|
73
55
|
case "validar":
|
|
74
56
|
codigoSaida = possuiFlag(resto, "--json")
|
|
75
57
|
? await comandoValidarJson(posicionais[0])
|
|
@@ -167,9 +149,6 @@ export async function principal() {
|
|
|
167
149
|
case "preflight":
|
|
168
150
|
codigoSaida = await billing.comandoPreflightCli(resto, possuiFlag(resto, "--json"));
|
|
169
151
|
break;
|
|
170
|
-
case "mcp-instalar-chave":
|
|
171
|
-
codigoSaida = await comandoMcpInstalarChave(resto, possuiFlag(resto, "--json"));
|
|
172
|
-
break;
|
|
173
152
|
case "docs-impacto":
|
|
174
153
|
codigoSaida = await comandoDocsImpacto(posicionais, resto, possuiFlag(resto, "--json"));
|
|
175
154
|
break;
|
|
@@ -79,16 +79,16 @@ Antes de alterar codigo, contrato ou documentacao:
|
|
|
79
79
|
3. rode \`sema preflight resumo --json\`;
|
|
80
80
|
4. rode \`sema resumo\`;
|
|
81
81
|
5. rode \`sema docs-impacto --intencao "<acao>" --json\`;
|
|
82
|
-
6. leia \`docs/
|
|
83
|
-
7. use \`exemplos/\` e \`docs/
|
|
82
|
+
6. leia \`docs/commands.md\` antes de escolher comando ou interpretar \`--saida\`;
|
|
83
|
+
7. use \`exemplos/\` e \`docs/syntax.md\` antes de criar ou corrigir \`.sema\`.
|
|
84
84
|
|
|
85
85
|
## Estrutura criada
|
|
86
86
|
|
|
87
87
|
- \`contratos/\`: contratos semanticamente governados.
|
|
88
88
|
- \`exemplos/\`: exemplos oficiais da DSL Sema.
|
|
89
|
-
- \`docs/
|
|
90
|
-
- \`docs/
|
|
91
|
-
- \`docs/
|
|
89
|
+
- \`docs/commands.md\`: catalogo de comandos, gates e regra de \`--saida\`.
|
|
90
|
+
- \`docs/syntax.md\`: referencia curta para escrever \`.sema\`.
|
|
91
|
+
- \`docs/ai-workflow.md\`: fluxo minimo para agentes.
|
|
92
92
|
- \`SEMA_BOOT.md\`, \`SEMA_SMALL_MODEL.md\`, \`AGENT_CONTEXT_PACK.json\` e \`SEMA_INDEX.json\`: contexto IA-first.
|
|
93
93
|
|
|
94
94
|
## Geracao
|
|
@@ -5,6 +5,39 @@
|
|
|
5
5
|
import { contemArtefatoProfile, contratoProibeTermoProfile, criarAchadoArtefatoProfile, trechoRegexProfile } from "./profileRegras.js";
|
|
6
6
|
import { artefatoParecePagamentoWebhookProfile, artefatoPareceWebhookProfile, artefatoPareceMultiTenantProfile, avaliarPresencaPositivaArtefato, localizarIdempotenciaGlobalExternalEventProfile, presencaAutenticacaoWebhookProfile, presencaIdempotenciaWorkspaceScopedProfile, presencaWorkspaceWebhookProfile, validarTermosObrigatoriosArtefato, } from "./profileArtefatoBase.js";
|
|
7
7
|
import { avaliarI18nVisivelArtefato } from "./profileI18nVisivel.js";
|
|
8
|
+
function detectarOverflowHorizontalMobile(artefato) {
|
|
9
|
+
const comparacaoExplicita = /(?:document\.documentElement\.)?scrollWidth\s*>\s*(?:document\.documentElement\.)?clientWidth/i.exec(artefato);
|
|
10
|
+
if (comparacaoExplicita) {
|
|
11
|
+
return { trecho: comparacaoExplicita[0] };
|
|
12
|
+
}
|
|
13
|
+
const pares = [
|
|
14
|
+
{
|
|
15
|
+
regex: /scrollWidth[\s:=><a-zA-Z().-]{0,40}(\d+(?:\.\d+)?)[\s\S]{0,140}?clientWidth[\s:=><a-zA-Z().-]{0,40}(\d+(?:\.\d+)?)/i,
|
|
16
|
+
scrollIndex: 1,
|
|
17
|
+
clientIndex: 2,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
regex: /clientWidth[\s:=><a-zA-Z().-]{0,40}(\d+(?:\.\d+)?)[\s\S]{0,140}?scrollWidth[\s:=><a-zA-Z().-]{0,40}(\d+(?:\.\d+)?)/i,
|
|
21
|
+
scrollIndex: 2,
|
|
22
|
+
clientIndex: 1,
|
|
23
|
+
},
|
|
24
|
+
];
|
|
25
|
+
for (const par of pares) {
|
|
26
|
+
const match = par.regex.exec(artefato);
|
|
27
|
+
if (!match)
|
|
28
|
+
continue;
|
|
29
|
+
const scrollWidth = Number(match[par.scrollIndex]);
|
|
30
|
+
const clientWidth = Number(match[par.clientIndex]);
|
|
31
|
+
if (Number.isFinite(scrollWidth) && Number.isFinite(clientWidth) && scrollWidth > clientWidth) {
|
|
32
|
+
return {
|
|
33
|
+
trecho: match[0].replace(/\s+/g, " ").trim(),
|
|
34
|
+
scrollWidth,
|
|
35
|
+
clientWidth,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
8
41
|
export function avaliarArtefatoSoftwareProfile(contrato, artefato, maturidade, preset) {
|
|
9
42
|
const regras = [
|
|
10
43
|
{ id: "software_eval_proibido", termo: "eval", regex: /\beval\s*\(/i, descricao: "codigo usa eval, risco basico de execucao dinamica", sugestao: "troque por parser explicito, tabela de operacoes ou validacao estruturada." },
|
|
@@ -76,6 +109,15 @@ export function avaliarArtefatoSoftwareProfile(contrato, artefato, maturidade, p
|
|
|
76
109
|
if (eslintNextSemIgnore) {
|
|
77
110
|
achados.push(criarAchadoArtefatoProfile("software_lint_next_sem_ignore", "lint de Next.js parece varrer .next sem ignore explicito", false, "warning", trechoRegexProfile(artefato, /\.next/i), "adicione ignore para .next no flat config ou ajuste o script de lint.", undefined, { risco: "ruido_operacional_de_build" }));
|
|
78
111
|
}
|
|
112
|
+
const driftFalho = /\bdrift\b|vinculos_quebrados|rotas_divergentes/i.test(artefato) &&
|
|
113
|
+
/"?sucesso"?\s*:\s*false|sucesso:false|vinculos_quebrados[\s\S]{0,160}(?:nao_encontrado|\.\/|status|arquivo)|rotas_divergentes[\s\S]{0,160}(?:GET|POST|PUT|PATCH|DELETE|divergente|\/)/i.test(artefato);
|
|
114
|
+
if (driftFalho) {
|
|
115
|
+
achados.push(criarAchadoArtefatoProfile("software_drift_fechamento_falso", "evidencia de fechamento contem drift falho, vinculo quebrado ou rota divergente", false, "blocking", trechoRegexProfile(artefato, /"?sucesso"?\s*:\s*false|sucesso:false|vinculos_quebrados[\s\S]{0,160}(?:nao_encontrado|\.\/|status|arquivo)|rotas_divergentes[\s\S]{0,160}(?:GET|POST|PUT|PATCH|DELETE|divergente|\/)/i), "corrija os vinculos/rotas/impls, rode sema drift novamente e so conclua com sucesso:true.", undefined, { risco: "fechamento_com_drift_falho" }));
|
|
116
|
+
}
|
|
117
|
+
const overflowMobile = detectarOverflowHorizontalMobile(artefato);
|
|
118
|
+
if (overflowMobile && /ui|html|css|mobile|viewport|responsiv|interface|dashboard|formul/i.test(`${contrato}\n${artefato}`)) {
|
|
119
|
+
achados.push(criarAchadoArtefatoProfile("software_ui_overflow_horizontal_mobile", "evidencia visual indica overflow horizontal em viewport mobile", false, maturidade === "critical" ? "critical" : "blocking", overflowMobile.trecho, "ajuste CSS/layout e valide novamente em mobile; scrollWidth precisa ser menor ou igual a clientWidth.", undefined, { risco: "responsividade_mobile_nao_observada" }));
|
|
120
|
+
}
|
|
79
121
|
achados.push(...avaliarI18nVisivelArtefato(contrato, artefato, maturidade));
|
|
80
122
|
return achados;
|
|
81
123
|
}
|
|
@@ -16,6 +16,8 @@ export const VALIDADORES_I18N = {
|
|
|
16
16
|
{ regex: /\bEducacao\b/i, esperado: "Educação" },
|
|
17
17
|
{ regex: /\bSaude\b/i, esperado: "Saúde" },
|
|
18
18
|
{ regex: /\bAlimentacao\b/i, esperado: "Alimentação" },
|
|
19
|
+
{ regex: /\bLancamento\b/i, esperado: "Lançamento" },
|
|
20
|
+
{ regex: /\bLancamentos\b/i, esperado: "Lançamentos" },
|
|
19
21
|
{ regex: /\bOnibus\b/i, esperado: "Ônibus" },
|
|
20
22
|
{ regex: /\balmoco\b/i, esperado: "almoço" },
|
|
21
23
|
{ regex: /\brapido\b/i, esperado: "rápido" },
|
package/dist/projetoConfig.js
CHANGED
|
@@ -61,6 +61,12 @@ export function normalizarAlvo(valor) {
|
|
|
61
61
|
return undefined;
|
|
62
62
|
}
|
|
63
63
|
export function normalizarFonteLegado(valor) {
|
|
64
|
+
if (valor === "js") {
|
|
65
|
+
return "javascript";
|
|
66
|
+
}
|
|
67
|
+
if (valor === "ts") {
|
|
68
|
+
return "typescript";
|
|
69
|
+
}
|
|
64
70
|
if (valor === "nestjs"
|
|
65
71
|
|| valor === "fastapi"
|
|
66
72
|
|| valor === "flask"
|
|
@@ -71,6 +77,7 @@ export function normalizarFonteLegado(valor) {
|
|
|
71
77
|
|| valor === "flutter-consumer"
|
|
72
78
|
|| valor === "firebase"
|
|
73
79
|
|| valor === "typescript"
|
|
80
|
+
|| valor === "javascript"
|
|
74
81
|
|| valor === "python"
|
|
75
82
|
|| valor === "dart"
|
|
76
83
|
|| valor === "lua"
|
package/dist/projetoLegado.js
CHANGED
|
@@ -33,7 +33,9 @@ export async function inferirFontesLegado(diretoriosCodigo, baseProjeto, configC
|
|
|
33
33
|
encontrados.add("firebase");
|
|
34
34
|
}
|
|
35
35
|
for (const diretorio of diretoriosCodigo) {
|
|
36
|
-
const arquivosTs = await listarArquivosRecursivosLimitado(diretorio, [".ts", ".tsx"
|
|
36
|
+
const arquivosTs = await listarArquivosRecursivosLimitado(diretorio, [".ts", ".tsx"], 5, 40);
|
|
37
|
+
const arquivosJs = await listarArquivosRecursivosLimitado(diretorio, [".js", ".jsx", ".mjs", ".cjs"], 5, 40);
|
|
38
|
+
const arquivosTsJs = [...arquivosTs, ...arquivosJs];
|
|
37
39
|
const arquivosPy = await listarArquivosRecursivosLimitado(diretorio, [".py"], 5, 20);
|
|
38
40
|
const arquivosDart = await listarArquivosRecursivosLimitado(diretorio, [".dart"], 5, 20);
|
|
39
41
|
const arquivosLua = await listarArquivosRecursivosLimitado(diretorio, [".lua"], 5, 20);
|
|
@@ -45,14 +47,19 @@ export async function inferirFontesLegado(diretoriosCodigo, baseProjeto, configC
|
|
|
45
47
|
const arquivosCpp = arquivosCppBrutos.filter((arquivo) => !/(^|[\\/])(windows|linux|macos|runner|flutter|ephemeral|build|vendor)([\\/]|$)/i.test(arquivo));
|
|
46
48
|
if (arquivosTs.length > 0) {
|
|
47
49
|
encontrados.add("typescript");
|
|
50
|
+
}
|
|
51
|
+
if (arquivosJs.length > 0) {
|
|
52
|
+
encontrados.add("javascript");
|
|
53
|
+
}
|
|
54
|
+
if (arquivosTsJs.length > 0) {
|
|
48
55
|
const packageJsons = await procurarArquivosPorNome(diretorio, ["package.json"], 3);
|
|
49
56
|
const nextConfigs = await procurarArquivosPorNome(diretorio, ["next.config.js", "next.config.ts", "next.config.mjs"], 3);
|
|
50
57
|
const viteConfigs = await procurarArquivosPorNome(diretorio, ["vite.config.ts", "vite.config.js", "vite.config.mjs"], 3);
|
|
51
58
|
const angularConfigs = await procurarArquivosPorNome(diretorio, ["angular.json"], 3);
|
|
52
59
|
const firebaseLocais = await procurarArquivosPorNome(diretorio, ["firebase.json", "firestore.rules"], 3);
|
|
53
60
|
const textosPackage = await Promise.all(packageJsons.slice(0, 8).map((arquivo) => lerConteudoSeExistir(arquivo)));
|
|
54
|
-
const amostrasTs = await Promise.all(
|
|
55
|
-
const relacoesTs =
|
|
61
|
+
const amostrasTs = await Promise.all(arquivosTsJs.slice(0, 10).map((arquivo) => lerConteudoSeExistir(arquivo)));
|
|
62
|
+
const relacoesTs = arquivosTsJs.map((arquivo) => path.relative(diretorio, arquivo).replace(/\\/g, "/"));
|
|
56
63
|
const temNest = textosPackage.some((texto) => /@nestjs\/common|@nestjs\/core/.test(texto ?? ""))
|
|
57
64
|
|| amostrasTs.some((texto) => /@nestjs\/common|@nestjs\/core|@Controller\(|@Get\(|@Post\(|@Put\(|@Patch\(|@Delete\(/.test(texto ?? ""));
|
|
58
65
|
const temNext = textosPackage.some((texto) => /"next"\s*:/.test(texto ?? ""))
|
package/dist/sync/index.js
CHANGED
package/dist/tipos.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export type EstruturaSaida = "flat" | "modulos" | "backend";
|
|
2
|
-
export type FonteLegado = "nestjs" | "fastapi" | "flask" | "nextjs" | "nextjs-consumer" | "react-vite-consumer" | "angular-consumer" | "flutter-consumer" | "firebase" | "typescript" | "python" | "dart" | "lua" | "dotnet" | "java" | "go" | "rust" | "cpp";
|
|
2
|
+
export type FonteLegado = "nestjs" | "fastapi" | "flask" | "nextjs" | "nextjs-consumer" | "react-vite-consumer" | "angular-consumer" | "flutter-consumer" | "firebase" | "typescript" | "javascript" | "python" | "dart" | "lua" | "dotnet" | "java" | "go" | "rust" | "cpp";
|
|
3
3
|
export type ModoAdocao = "incremental";
|
package/docs/README.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Sema Documentation
|
|
2
|
+
|
|
3
|
+
These docs describe the public local CLI distribution of Sema.
|
|
4
|
+
|
|
5
|
+
Sema is local-first: agents run the CLI inside a project folder, read `.sema`
|
|
6
|
+
contracts, check drift, map impact, and close changes with documentation
|
|
7
|
+
evidence. Public docs are written in English.
|
|
8
|
+
|
|
9
|
+
Start here:
|
|
10
|
+
|
|
11
|
+
- [CLI](./cli.md)
|
|
12
|
+
- [Commands](./commands.md)
|
|
13
|
+
- [Syntax](./syntax.md)
|
|
14
|
+
- [Profiles](./profiles.md)
|
|
15
|
+
- [Documentation Governance](./documentation.md)
|
|
16
|
+
- [Repository Boundary](./repositories.md)
|
|
17
|
+
- [Security](./security.md)
|
|
18
|
+
|
|
19
|
+
Official support: [suporte@otimitare.online](mailto:suporte@otimitare.online)
|