@semacode/cli 2.3.1 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +265 -217
- package/dist/agentContextPack.js +14 -10
- package/dist/agentEntryPoints.d.ts +5 -0
- package/dist/agentEntryPoints.js +567 -557
- package/dist/angular-consumer-standalone.js +1 -1
- package/dist/bin.d.ts +6 -0
- package/dist/bin.js +130 -0
- package/dist/cliArgs.js +4 -4
- package/dist/cliControlError.d.ts +12 -0
- package/dist/cliControlError.js +47 -0
- package/dist/cliGrammar.d.ts +11 -0
- package/dist/cliGrammar.js +551 -0
- package/dist/cliHelp.d.ts +13 -0
- package/dist/cliHelp.js +19 -0
- package/dist/cliHelpTexto.d.ts +3 -0
- package/dist/cliHelpTexto.js +168 -0
- package/dist/cliRuntime.d.ts +2 -0
- package/dist/cliRuntime.js +31 -0
- package/dist/comandos.js +9 -22
- package/dist/contexto.js +5 -5
- package/dist/dev/index.d.ts +1 -0
- package/dist/dev/index.js +51 -9
- package/dist/discovery/catalog.js +3 -3
- package/dist/distribuicao/filesystemGlobal.d.ts +63 -0
- package/dist/distribuicao/filesystemGlobal.js +701 -0
- package/dist/distribuicao/index.d.ts +7 -0
- package/dist/distribuicao/index.js +227 -0
- package/dist/distribuicao/launcherGlobal.d.ts +53 -0
- package/dist/distribuicao/launcherGlobal.js +643 -0
- package/dist/distribuicao/launcherWindows.d.ts +28 -0
- package/dist/distribuicao/launcherWindows.js +326 -0
- package/dist/distribuicao/lockContextGlobal.d.ts +10 -0
- package/dist/distribuicao/lockContextGlobal.js +17 -0
- package/dist/distribuicao/lockGlobal.d.ts +6 -0
- package/dist/distribuicao/lockGlobal.js +520 -0
- package/dist/distribuicao/skillGlobal.d.ts +48 -0
- package/dist/distribuicao/skillGlobal.js +652 -0
- package/dist/distribuicao/skillIntentPolicy.d.ts +21 -0
- package/dist/distribuicao/skillIntentPolicy.js +115 -0
- package/dist/distribuicao/tipos.d.ts +50 -0
- package/dist/distribuicao/tipos.js +10 -0
- package/dist/distribuicao/versaoSemantica.d.ts +3 -0
- package/dist/distribuicao/versaoSemantica.js +62 -0
- package/dist/drift.part01.d.ts +26 -24
- package/dist/drift.part01.js +2 -1
- package/dist/drift.part04.d.ts +12 -3
- package/dist/drift.part04.js +88 -17
- package/dist/drift.part05.d.ts +2 -2
- package/dist/drift.part05.js +8 -6
- package/dist/drift.part06.d.ts +2 -2
- package/dist/drift.part06.js +113 -26
- package/dist/drift.part07.d.ts +11 -11
- package/dist/drift.part07.js +261 -265
- package/dist/drift.part08.d.ts +2 -2
- package/dist/drift.part08.js +35 -26
- package/dist/drift.part11.js +238 -56
- package/dist/drift.part12.d.ts +1 -1
- package/dist/drift.part12.js +193 -21
- package/dist/drift.part13.d.ts +20 -39
- package/dist/drift.part13.js +601 -647
- package/dist/drift.part14.js +21 -7
- package/dist/driftCacheCas.d.ts +43 -0
- package/dist/driftCacheCas.js +351 -0
- package/dist/driftCacheFilesystem.d.ts +64 -0
- package/dist/driftCacheFilesystem.js +313 -0
- package/dist/driftCacheModes.d.ts +38 -0
- package/dist/driftCacheModes.js +147 -0
- package/dist/driftCacheStore.d.ts +80 -0
- package/dist/driftCacheStore.js +603 -0
- package/dist/driftCatalogo.d.ts +2 -28
- package/dist/driftCatalogo.js +143 -284
- package/dist/driftEscopo.d.ts +1 -3
- package/dist/driftEscopo.js +235 -151
- package/dist/driftEscopoReferencias.d.ts +5 -1
- package/dist/driftEscopoReferencias.js +375 -28
- package/dist/driftOrcamento.d.ts +0 -6
- package/dist/driftOrcamento.js +2 -1
- package/dist/execucoesExternas.js +19 -5
- package/dist/geracaoCore.js +4 -6
- package/dist/iaPrompts.d.ts +3 -3
- package/dist/iaPrompts.js +312 -313
- package/dist/index.d.ts +4 -1
- package/dist/index.js +6 -25
- package/dist/index.part01.d.ts +20 -28
- package/dist/index.part01.js +16 -237
- package/dist/index.part02.js +36 -22
- package/dist/index.part03.d.ts +24 -2
- package/dist/index.part03.js +83 -19
- package/dist/index.part04.d.ts +10 -2
- package/dist/index.part04.js +142 -120
- package/dist/index.part05.js +80 -78
- package/dist/index.part06.js +34 -17
- package/dist/index.part07.js +7 -3
- package/dist/index.part08.d.ts +1 -1
- package/dist/index.part08.js +22 -27
- package/dist/initCommand.js +5 -1
- package/dist/initTemplatesBase.js +81 -79
- package/dist/pipelineConteudo/command.d.ts +1 -0
- package/dist/pipelineConteudo/command.js +9 -2
- package/dist/pipelineConteudo/help.d.ts +2 -0
- package/dist/pipelineConteudo/help.js +33 -0
- package/dist/profileAuthorCommand.js +3 -7
- package/dist/profileCommand.js +3 -7
- package/dist/projetoCarregar.js +35 -17
- package/dist/projetoCatalogo.d.ts +1 -0
- package/dist/projetoCatalogo.js +64 -25
- package/dist/projetoOrigens.d.ts +2 -0
- package/dist/projetoOrigens.js +65 -9
- package/dist/projetoTipos.d.ts +1 -0
- package/dist/resultadoCli.d.ts +20 -0
- package/dist/resultadoCli.js +57 -0
- package/dist/saidaCli.d.ts +35 -0
- package/dist/saidaCli.js +118 -0
- package/dist/sistemasInterativos/acceptanceEvidence.d.ts +22 -0
- package/dist/sistemasInterativos/acceptanceEvidence.js +345 -0
- package/dist/sistemasInterativos/engineObservation.d.ts +12 -0
- package/dist/sistemasInterativos/engineObservation.js +438 -0
- package/dist/sistemasInterativos/jobOrchestration.d.ts +2 -0
- package/dist/sistemasInterativos/jobOrchestration.js +204 -0
- package/dist/sistemasInterativos/operationPrimitives.d.ts +21 -0
- package/dist/sistemasInterativos/operationPrimitives.js +194 -0
- package/dist/sistemasInterativos/operations.d.ts +4 -39
- package/dist/sistemasInterativos/operations.js +5 -1164
- package/dist/skillCommand.d.ts +5 -0
- package/dist/skillCommand.js +88 -0
- package/docs/README.md +34 -30
- package/docs/ai-integration.md +25 -12
- package/docs/ai-onboarding.md +37 -18
- package/docs/ai-workflow.md +9 -7
- package/docs/cli.md +125 -7
- package/docs/commands.md +41 -20
- package/docs/deploy.md +21 -8
- package/docs/descoberta-capacidades.md +106 -106
- package/docs/documentation.md +49 -39
- package/docs/drift-cache.md +108 -0
- package/docs/getting-started.md +43 -18
- package/docs/pipeline-conteudo.md +246 -246
- package/docs/profiles.md +54 -54
- package/docs/repositories.md +19 -2
- package/docs/rollback.md +15 -8
- package/docs/security.md +25 -3
- package/docs/sistemas-interativos.md +379 -374
- package/docs/testing.md +139 -40
- package/exemplos/pipeline-conteudo/README.md +44 -44
- package/exemplos/pipeline-conteudo/alvos.json +23 -23
- package/exemplos/pipeline-conteudo/definicao.json +136 -136
- package/exemplos/profile_simulation.sema +211 -211
- package/exemplos/sistemas-interativos/README.md +100 -100
- package/exemplos/sistemas-interativos/advanced/acceptance-context-evaluate-valid.json +5 -5
- package/exemplos/sistemas-interativos/advanced/acceptance-lock-valid.json +16 -16
- package/exemplos/sistemas-interativos/advanced/asset-provenance-valid.json +32 -32
- package/exemplos/sistemas-interativos/advanced/autonomy-repair-valid.json +93 -93
- package/exemplos/sistemas-interativos/advanced/control-run-definition-valid.json +78 -78
- package/exemplos/sistemas-interativos/advanced/control-run-valid.json +27 -27
- package/exemplos/sistemas-interativos/advanced/distributed-workers-valid.json +79 -79
- package/exemplos/sistemas-interativos/advanced/editor-state-valid.json +42 -42
- package/exemplos/sistemas-interativos/advanced/engine-snapshot-after-valid.json +32 -32
- package/exemplos/sistemas-interativos/advanced/engine-snapshot-before-valid.json +23 -23
- package/exemplos/sistemas-interativos/advanced/job-orchestration-valid.json +39 -39
- package/exemplos/sistemas-interativos/advanced/multimodal-evidence-valid.json +46 -46
- package/exemplos/sistemas-interativos/advanced/multiplayer-authority-valid.json +39 -39
- package/exemplos/sistemas-interativos/advanced/playtest-fuzz-valid.json +37 -37
- package/exemplos/sistemas-interativos/advanced/portability-valid.json +104 -104
- package/exemplos/sistemas-interativos/advanced/temporal-evidence-valid.json +27 -27
- package/exemplos/sistemas-interativos/advanced/temporal-valid.json +118 -118
- package/exemplos/sistemas-interativos/experience-ir-valid.json +459 -459
- package/exemplos/sistemas-interativos/game-2d.json +83 -83
- package/exemplos/sistemas-interativos/game-3d-human.json +81 -81
- package/exemplos/sistemas-interativos/game-pixel-16-bit.json +97 -97
- package/exemplos/sistemas-interativos/game-pixel-8-bit.json +94 -94
- package/exemplos/sistemas-interativos/game-xr-human.json +80 -80
- package/exemplos/sistemas-interativos/hybrid-2-5d.json +108 -108
- package/exemplos/sistemas-interativos/protocol-mutating-rollback-valid.json +75 -75
- package/exemplos/sistemas-interativos/protocol-read-only-valid.json +58 -58
- package/exemplos/sistemas-interativos/simulation-2d-controlled.json +97 -97
- package/exemplos/sistemas-interativos/simulation-3d-calibrated-autonomous.json +141 -141
- package/exemplos/sistemas-interativos/simulation-headless-autonomous-batch.json +112 -112
- package/exemplos/sistemas-interativos/simulation-pixel-16-bit.json +103 -103
- package/exemplos/sistemas-interativos/simulation-text-controlled.json +95 -95
- package/node_modules/@sema/gerador-cpp/package.json +1 -1
- package/node_modules/@sema/gerador-dotnet/package.json +1 -1
- package/node_modules/@sema/gerador-lua/dist/index.js +51 -51
- package/node_modules/@sema/gerador-php/dist/index.js +113 -113
- package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +1 -0
- package/node_modules/@sema/nucleo/dist/semantico/analisador.js +1 -0
- package/package.json +9 -4
- package/scripts/postinstall.mjs +148 -0
- package/skills/sema/SKILL.md +199 -0
- package/skills/sema/agents/openai.yaml +4 -0
- package/dist/driftCache.d.ts +0 -49
- package/dist/driftCache.js +0 -311
- package/dist/driftCacheIncremental.d.ts +0 -98
- package/dist/driftCacheIncremental.js +0 -596
- package/dist/driftCatalogoPersistente.d.ts +0 -8
- package/dist/driftCatalogoPersistente.js +0 -77
- package/node_modules/@sema/gerador-cpp/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-css/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-css/dist/index.part01.js.map +0 -1
- package/node_modules/@sema/gerador-css/dist/index.part02.js.map +0 -1
- package/node_modules/@sema/gerador-dart/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-dotnet/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-html/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-javascript/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-lua/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-php/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-python/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-python/dist/index.part01.js.map +0 -1
- package/node_modules/@sema/gerador-python/dist/index.part02.js.map +0 -1
- package/node_modules/@sema/gerador-typescript/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-typescript/dist/index.part01.js.map +0 -1
- package/node_modules/@sema/gerador-typescript/dist/index.part02.js.map +0 -1
- package/node_modules/@sema/gerador-typescript/dist/index.part03.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ast/tipos.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/diagnosticos/index.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/diagnosticos/snippets.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/formatador/index.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/formatador/index.part01.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/formatador/index.part02.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/index.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.part01.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.part02.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.part03.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ir/modelos.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/lexer/lexer.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.declaracoes.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.modulo.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.part01.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.part02.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.part03.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/persistencia/contratos.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part02.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part03.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part04.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part05.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part06.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part07.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part08.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/estruturas.part01.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/estruturas.part02.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/orcamentoSemantico.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/seguranca.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/util/arquivos.js.map +0 -1
- package/node_modules/@sema/padroes/dist/index.js.map +0 -1
package/dist/drift.part08.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { IrBancoDados, IrModulo, IrTask } from "@sema/nucleo";
|
|
2
2
|
import { OrigemRecursoDrift, RecursoEsperadoDrift, RecursoResolvido, RegistroColunaPersistenciaDrift, RegistroPersistenciaRealDrift, RegistroRepositorioPersistenciaDrift, SimboloResolvido, TipoRecursoDrift } from "./drift.part01.js";
|
|
3
|
-
import type
|
|
3
|
+
import { type AdaptadorLeituraCompartilhadaDrift } from "./drift.part04.js";
|
|
4
4
|
export declare function registrarRepositorioPersistenciaDrift(repositorios: Map<string, RegistroRepositorioPersistenciaDrift>, origem: OrigemRecursoDrift, recurso: string, arquivo: string): void;
|
|
5
5
|
export declare function extrairColunasSqlDetalhadas(arquivo: string, codigo: string): RegistroColunaPersistenciaDrift[];
|
|
6
6
|
export declare function extrairColunasPrismaDetalhadas(arquivo: string, codigo: string): RegistroColunaPersistenciaDrift[];
|
|
@@ -8,7 +8,7 @@ export declare function extrairCamposMongoDetalhados(arquivo: string, codigo: st
|
|
|
8
8
|
export declare function extrairCamposRedisDetalhados(arquivo: string, codigo: string): RegistroColunaPersistenciaDrift[];
|
|
9
9
|
export declare function extrairCamposArquivoLocalDetalhados(arquivo: string, codigo: string): RegistroColunaPersistenciaDrift[];
|
|
10
10
|
export declare function registrarRepositoriosPorRecursos(repositorios: Map<string, RegistroRepositorioPersistenciaDrift>, arquivo: string, codigo: string, recursos: RecursoResolvido[]): void;
|
|
11
|
-
export declare function indexarPersistenciaDetalhada(diretorios: string[],
|
|
11
|
+
export declare function indexarPersistenciaDetalhada(diretorios: string[], adaptadorLeitura?: AdaptadorLeituraCompartilhadaDrift): Promise<{
|
|
12
12
|
colunas: RegistroColunaPersistenciaDrift[];
|
|
13
13
|
repositorios: RegistroRepositorioPersistenciaDrift[];
|
|
14
14
|
}>;
|
package/dist/drift.part08.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
// SEMA-GOVERNED: sema.
|
|
2
|
-
// Descricao:
|
|
1
|
+
// SEMA-GOVERNED: sema.produto.governanca_ia.drift
|
|
2
|
+
// Descricao: indexa persistencia detalhada reutilizando o catalogo fisico do drift.
|
|
3
3
|
import { readFile } from "node:fs/promises";
|
|
4
4
|
import { categorizarPersistenciaPorOrigem, normalizarFragmentoArquivo, quebrarTermosEscopo } from "./drift.part01.js";
|
|
5
5
|
import { fecharPrefixoRecurso, limparLiteralRecurso, normalizarNomeRecursoDrift } from "./drift.part02.js";
|
|
6
6
|
import { extrairRecursosArquivoLocal, extrairRecursosMongoDb, extrairRecursosPersistenciaCodigoVivo, extrairRecursosPrisma, inferirMotoresRelacionais, variantesNomeRecursoDrift } from "./drift.part03.js";
|
|
7
7
|
import { normalizarOrigemParaEngine, registrarColunaPersistenciaDrift } from "./drift.part07.js";
|
|
8
|
-
import { listarArquivosRecursivos } from "./drift.part04.js";
|
|
8
|
+
import { chaveCaminhoCanonicoDrift, deduplicarRaizesSobrepostasDrift, listarArquivosRecursivos, } from "./drift.part04.js";
|
|
9
9
|
import { recursoResolvidoCombinaEsperado } from "./drift.part10.js";
|
|
10
10
|
import { recursoPersistenciaCombinaAlvo } from "./drift.part09.js";
|
|
11
11
|
export function registrarRepositorioPersistenciaDrift(repositorios, origem, recurso, arquivo) {
|
|
@@ -172,39 +172,48 @@ export function registrarRepositoriosPorRecursos(repositorios, arquivo, codigo,
|
|
|
172
172
|
registrarRepositorioPersistenciaDrift(repositorios, recurso.origem, recurso.nome, arquivo);
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
|
-
export async function indexarPersistenciaDetalhada(diretorios,
|
|
176
|
-
|
|
175
|
+
export async function indexarPersistenciaDetalhada(diretorios, adaptadorLeitura) {
|
|
176
|
+
adaptadorLeitura?.emitir?.("extractor.run");
|
|
177
177
|
const colunas = new Map();
|
|
178
178
|
const repositorios = new Map();
|
|
179
|
-
|
|
179
|
+
const arquivosUnicos = new Map();
|
|
180
|
+
for (const diretorio of deduplicarRaizesSobrepostasDrift(diretorios)) {
|
|
180
181
|
const arquivos = await listarArquivosRecursivos(diretorio, [
|
|
181
182
|
".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
|
|
182
183
|
".py", ".dart", ".lua", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h", ".php",
|
|
183
184
|
".sql", ".psql", ".ddl", ".prisma",
|
|
184
|
-
],
|
|
185
|
+
], adaptadorLeitura);
|
|
185
186
|
for (const arquivo of arquivos) {
|
|
186
|
-
const
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
: extrairRecursosPersistenciaCodigoVivo(arquivo, codigo);
|
|
190
|
-
for (const coluna of extrairColunasSqlDetalhadas(arquivo, codigo)) {
|
|
191
|
-
registrarColunaPersistenciaDrift(colunas, coluna.origem, coluna.recurso, coluna.coluna, coluna.arquivo);
|
|
187
|
+
const chave = chaveCaminhoCanonicoDrift(arquivo);
|
|
188
|
+
if (!arquivosUnicos.has(chave)) {
|
|
189
|
+
arquivosUnicos.set(chave, arquivo);
|
|
192
190
|
}
|
|
193
|
-
for (const coluna of extrairColunasPrismaDetalhadas(arquivo, codigo)) {
|
|
194
|
-
registrarColunaPersistenciaDrift(colunas, coluna.origem, coluna.recurso, coluna.coluna, coluna.arquivo);
|
|
195
|
-
}
|
|
196
|
-
for (const coluna of extrairCamposMongoDetalhados(arquivo, codigo)) {
|
|
197
|
-
registrarColunaPersistenciaDrift(colunas, coluna.origem, coluna.recurso, coluna.coluna, coluna.arquivo);
|
|
198
|
-
}
|
|
199
|
-
for (const coluna of extrairCamposRedisDetalhados(arquivo, codigo)) {
|
|
200
|
-
registrarColunaPersistenciaDrift(colunas, coluna.origem, coluna.recurso, coluna.coluna, coluna.arquivo);
|
|
201
|
-
}
|
|
202
|
-
for (const coluna of extrairCamposArquivoLocalDetalhados(arquivo, codigo)) {
|
|
203
|
-
registrarColunaPersistenciaDrift(colunas, coluna.origem, coluna.recurso, coluna.coluna, coluna.arquivo);
|
|
204
|
-
}
|
|
205
|
-
registrarRepositoriosPorRecursos(repositorios, arquivo, codigo, recursos);
|
|
206
191
|
}
|
|
207
192
|
}
|
|
193
|
+
for (const arquivo of arquivosUnicos.values()) {
|
|
194
|
+
const codigo = adaptadorLeitura
|
|
195
|
+
? await adaptadorLeitura.lerTexto(arquivo)
|
|
196
|
+
: await readFile(arquivo, "utf8");
|
|
197
|
+
const recursos = arquivo.endsWith(".prisma")
|
|
198
|
+
? extrairRecursosPrisma(arquivo, codigo)
|
|
199
|
+
: extrairRecursosPersistenciaCodigoVivo(arquivo, codigo);
|
|
200
|
+
for (const coluna of extrairColunasSqlDetalhadas(arquivo, codigo)) {
|
|
201
|
+
registrarColunaPersistenciaDrift(colunas, coluna.origem, coluna.recurso, coluna.coluna, coluna.arquivo);
|
|
202
|
+
}
|
|
203
|
+
for (const coluna of extrairColunasPrismaDetalhadas(arquivo, codigo)) {
|
|
204
|
+
registrarColunaPersistenciaDrift(colunas, coluna.origem, coluna.recurso, coluna.coluna, coluna.arquivo);
|
|
205
|
+
}
|
|
206
|
+
for (const coluna of extrairCamposMongoDetalhados(arquivo, codigo)) {
|
|
207
|
+
registrarColunaPersistenciaDrift(colunas, coluna.origem, coluna.recurso, coluna.coluna, coluna.arquivo);
|
|
208
|
+
}
|
|
209
|
+
for (const coluna of extrairCamposRedisDetalhados(arquivo, codigo)) {
|
|
210
|
+
registrarColunaPersistenciaDrift(colunas, coluna.origem, coluna.recurso, coluna.coluna, coluna.arquivo);
|
|
211
|
+
}
|
|
212
|
+
for (const coluna of extrairCamposArquivoLocalDetalhados(arquivo, codigo)) {
|
|
213
|
+
registrarColunaPersistenciaDrift(colunas, coluna.origem, coluna.recurso, coluna.coluna, coluna.arquivo);
|
|
214
|
+
}
|
|
215
|
+
registrarRepositoriosPorRecursos(repositorios, arquivo, codigo, recursos);
|
|
216
|
+
}
|
|
208
217
|
return {
|
|
209
218
|
colunas: [...colunas.values()],
|
|
210
219
|
repositorios: [...repositorios.values()],
|
package/dist/drift.part11.js
CHANGED
|
@@ -1,16 +1,123 @@
|
|
|
1
|
-
// SEMA-GOVERNED: sema.governanca_ia_contexto
|
|
2
|
-
//
|
|
1
|
+
// SEMA-GOVERNED: sema.governanca_ia_contexto, sema.produto.governanca_ia.drift.cache.store
|
|
2
|
+
// Descrição: integra índices calculados ou reutilizados e sempre recalcula o resultado final do drift.
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { emitirDiagnosticosArquivosOrcamento, workspaceExigeCabecalhoCodigoGovernado, } from "./driftOrcamento.js";
|
|
5
5
|
import { definirDiretoriosIgnoradosAtivos, obterDiretoriosIgnoradosAtivos, extrairTermosEscopoDrift, resolverDiretoriosIgnoradosAtivos, resolverOpcoesDrift } from "./drift.part01.js";
|
|
6
6
|
import { construirContextoRelevanciaConsumer, filtrarConsumerSurfacesPorEscopo } from "./drift.part02.js";
|
|
7
7
|
import { inferirConsumerFrameworkPrincipal } from "./drift.part06.js";
|
|
8
|
-
import { calcularConfiancaTask, calcularRiscoOperacional, calcularScoreTask, resumirLacunasTask, resumirOperacional } from "./drift.part04.js";
|
|
9
|
-
import { analisarPersistenciaReal } from "./drift.part09.js";
|
|
8
|
+
import { calcularConfiancaTask, calcularRiscoOperacional, calcularScoreTask, chaveCaminhoCanonicoDrift, encontrarCandidatosFisicosImplementacaoDrift, resumirLacunasTask, resumirOperacional } from "./drift.part04.js";
|
|
9
|
+
import { analisarPersistenciaReal, ordenarCandidatos } from "./drift.part09.js";
|
|
10
10
|
import { simboloEhBridgeConsumer } from "./drift.part05.js";
|
|
11
11
|
import { prepararIndicesDrift } from "./drift.part13.js";
|
|
12
12
|
import { analisarModulosSelecionadosDrift } from "./drift.part14.js";
|
|
13
13
|
import { resolverPoliticaPontuacaoSemantica } from "./driftScore.js";
|
|
14
|
+
function arquivosVinculadosFisicamenteDrift(contexto, modulo, task) {
|
|
15
|
+
const arquivos = new Set();
|
|
16
|
+
for (const vinculo of [...modulo.vinculos, ...task.vinculos]) {
|
|
17
|
+
const arquivo = vinculo.arquivo
|
|
18
|
+
?? (vinculo.tipo === "arquivo" ? vinculo.valor : undefined);
|
|
19
|
+
if (arquivo) {
|
|
20
|
+
arquivos.add(chaveCaminhoCanonicoDrift(path.resolve(contexto.baseProjeto, arquivo)));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return arquivos;
|
|
24
|
+
}
|
|
25
|
+
function prepararMapaImplementacoesHonestoDrift(contexto, mapaImpl, todosSimbolos) {
|
|
26
|
+
const mapaImplHonesto = new Map(mapaImpl);
|
|
27
|
+
const usosPorOrigemECaminho = new Map();
|
|
28
|
+
for (const item of contexto.modulosSelecionados) {
|
|
29
|
+
const ir = item.resultado.ir;
|
|
30
|
+
if (!ir) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
for (const task of ir.tasks) {
|
|
34
|
+
const arquivosVinculados = arquivosVinculadosFisicamenteDrift(contexto, ir, task);
|
|
35
|
+
for (const impl of task.implementacoesExternas) {
|
|
36
|
+
const candidatos = encontrarCandidatosFisicosImplementacaoDrift(todosSimbolos, impl.origem, impl.caminho);
|
|
37
|
+
const candidatosVinculados = candidatos.filter((candidato) => arquivosVinculados.has(chaveCaminhoCanonicoDrift(candidato.arquivo)));
|
|
38
|
+
const resolvido = candidatos.length === 1
|
|
39
|
+
? candidatos[0]
|
|
40
|
+
: candidatosVinculados.length === 1
|
|
41
|
+
? candidatosVinculados[0]
|
|
42
|
+
: undefined;
|
|
43
|
+
const uso = {
|
|
44
|
+
modulo: ir.nome,
|
|
45
|
+
task: task.nome,
|
|
46
|
+
origem: impl.origem,
|
|
47
|
+
caminho: impl.caminho,
|
|
48
|
+
implementacao: impl,
|
|
49
|
+
candidatos,
|
|
50
|
+
resolvido,
|
|
51
|
+
ambiguo: candidatos.length > 1 && candidatosVinculados.length !== 1,
|
|
52
|
+
};
|
|
53
|
+
const chaveGrupo = `${impl.origem}\u0000${impl.caminho}`;
|
|
54
|
+
const usos = usosPorOrigemECaminho.get(chaveGrupo) ?? [];
|
|
55
|
+
usos.push(uso);
|
|
56
|
+
usosPorOrigemECaminho.set(chaveGrupo, usos);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const ambiguidades = [];
|
|
61
|
+
const gruposPorCaminho = new Map();
|
|
62
|
+
for (const usos of usosPorOrigemECaminho.values()) {
|
|
63
|
+
const caminho = usos[0].caminho;
|
|
64
|
+
const resolvidos = new Map();
|
|
65
|
+
for (const uso of usos) {
|
|
66
|
+
if (uso.resolvido) {
|
|
67
|
+
resolvidos.set(chaveCaminhoCanonicoDrift(uso.resolvido.arquivo), uso.resolvido);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const conflitoEntreUsos = resolvidos.size > 1;
|
|
71
|
+
const deveFalharFechado = usos.some((uso) => uso.ambiguo || !uso.resolvido)
|
|
72
|
+
|| conflitoEntreUsos;
|
|
73
|
+
if (deveFalharFechado && (usos.some((uso) => uso.ambiguo) || conflitoEntreUsos)) {
|
|
74
|
+
const candidatosDoGrupo = [...new Map(usos.flatMap((uso) => uso.candidatos).map((candidato) => [
|
|
75
|
+
chaveCaminhoCanonicoDrift(candidato.arquivo),
|
|
76
|
+
candidato,
|
|
77
|
+
])).values()];
|
|
78
|
+
for (const uso of usos) {
|
|
79
|
+
ambiguidades.push({
|
|
80
|
+
...uso,
|
|
81
|
+
candidatos: uso.candidatos.length > 1 ? uso.candidatos : candidatosDoGrupo,
|
|
82
|
+
ambiguo: true,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const grupos = gruposPorCaminho.get(caminho) ?? [];
|
|
87
|
+
grupos.push({
|
|
88
|
+
usos,
|
|
89
|
+
resolvido: deveFalharFechado ? undefined : resolvidos.values().next().value,
|
|
90
|
+
});
|
|
91
|
+
gruposPorCaminho.set(caminho, grupos);
|
|
92
|
+
}
|
|
93
|
+
const substituicoesCaminho = [];
|
|
94
|
+
let sequenciaCaminhoTemporario = 0;
|
|
95
|
+
for (const [caminho, grupos] of gruposPorCaminho) {
|
|
96
|
+
mapaImplHonesto.delete(caminho);
|
|
97
|
+
const gruposResolvidos = grupos.filter((grupo) => grupo.resolvido);
|
|
98
|
+
const resolucoesDistintas = new Map();
|
|
99
|
+
for (const grupo of gruposResolvidos) {
|
|
100
|
+
const resolvido = grupo.resolvido;
|
|
101
|
+
resolucoesDistintas.set(`${resolvido.origem}:${chaveCaminhoCanonicoDrift(resolvido.arquivo)}:${resolvido.caminho}`, resolvido);
|
|
102
|
+
}
|
|
103
|
+
if (gruposResolvidos.length === grupos.length && resolucoesDistintas.size === 1) {
|
|
104
|
+
mapaImplHonesto.set(caminho, resolucoesDistintas.values().next().value);
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
for (const grupo of gruposResolvidos) {
|
|
108
|
+
for (const uso of grupo.usos) {
|
|
109
|
+
const temporario = `__sema_impl_${sequenciaCaminhoTemporario++}`;
|
|
110
|
+
mapaImplHonesto.set(temporario, uso.resolvido);
|
|
111
|
+
substituicoesCaminho.push({
|
|
112
|
+
implementacao: uso.implementacao,
|
|
113
|
+
original: uso.caminho,
|
|
114
|
+
temporario,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return { mapaImplHonesto, ambiguidades, substituicoesCaminho };
|
|
120
|
+
}
|
|
14
121
|
export async function analisarDriftLegado(contexto, opcoes) {
|
|
15
122
|
const opcoesResolvidas = resolverOpcoesDrift(opcoes);
|
|
16
123
|
const configuracaoEscopo = {
|
|
@@ -23,14 +130,16 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
23
130
|
definirDiretoriosIgnoradosAtivos(resolverDiretoriosIgnoradosAtivos(opcoesResolvidas));
|
|
24
131
|
try {
|
|
25
132
|
const indicesPreparados = await prepararIndicesDrift(contexto, configuracaoEscopo, {
|
|
26
|
-
politicaCache: opcoesResolvidas.cache,
|
|
27
133
|
observador: opcoesResolvidas.observador,
|
|
134
|
+
modoCache: opcoesResolvidas.modoCache,
|
|
135
|
+
avisosModoCache: opcoesResolvidas.avisosModoCache,
|
|
28
136
|
});
|
|
29
|
-
const {
|
|
30
|
-
const leitorArquivosPlanejados = indicesPreparados.leitorArquivosPlanejados;
|
|
137
|
+
const { detalhesPersistencia, indexDart, indexTs, mapaImpl, mapaRecursos, todasRotasIndexadas, todosArquivosConhecidos, todosRecursos, todosSimbolos, planoEscopo, cache: estadoCache, catalogo: metricasCatalogo, leitorArquivosPlanejados, } = indicesPreparados;
|
|
31
138
|
const relativoEscopo = (arquivo) => {
|
|
32
139
|
const relativo = path.relative(contexto.baseProjeto, arquivo).replace(/\\/g, "/");
|
|
33
|
-
return relativo && !relativo.startsWith("../")
|
|
140
|
+
return relativo && !relativo.startsWith("../")
|
|
141
|
+
? relativo
|
|
142
|
+
: arquivo.replace(/\\/g, "/");
|
|
34
143
|
};
|
|
35
144
|
configuracaoEscopo.estrategia = planoEscopo.estrategia;
|
|
36
145
|
configuracaoEscopo.cobertura = planoEscopo.cobertura;
|
|
@@ -38,9 +147,11 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
38
147
|
configuracaoEscopo.arquivosDeclarados = planoEscopo.arquivosDeclarados.map(relativoEscopo);
|
|
39
148
|
configuracaoEscopo.arquivosInferidos = planoEscopo.arquivosInferidos.map(relativoEscopo);
|
|
40
149
|
configuracaoEscopo.arquivosAusentes = planoEscopo.arquivosAusentes.map(relativoEscopo);
|
|
41
|
-
|
|
42
|
-
configuracaoEscopo.
|
|
150
|
+
const bloqueiosAnalise = new Set(planoEscopo.bloqueios);
|
|
151
|
+
configuracaoEscopo.bloqueios = [...bloqueiosAnalise];
|
|
43
152
|
configuracaoEscopo.catalogo = metricasCatalogo;
|
|
153
|
+
configuracaoEscopo.cache = estadoCache;
|
|
154
|
+
const { mapaImplHonesto, ambiguidades, substituicoesCaminho } = prepararMapaImplementacoesHonestoDrift(contexto, mapaImpl, todosSimbolos);
|
|
44
155
|
const implsValidos = [];
|
|
45
156
|
const implsQuebrados = [];
|
|
46
157
|
const vinculosValidos = [];
|
|
@@ -49,12 +160,41 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
49
160
|
const recursosValidos = [];
|
|
50
161
|
const recursosDivergentes = [];
|
|
51
162
|
const diagnosticos = [];
|
|
163
|
+
const moduloDiagnostico = contexto.modulosSelecionados[0]?.resultado.ir?.nome
|
|
164
|
+
?? contexto.modulosSelecionados[0]?.resultado.modulo?.nome
|
|
165
|
+
?? "projeto";
|
|
166
|
+
for (const arquivoAusente of planoEscopo.arquivosAusentes) {
|
|
167
|
+
const arquivo = relativoEscopo(arquivoAusente);
|
|
168
|
+
diagnosticos.push({
|
|
169
|
+
tipo: "vinculo_quebrado",
|
|
170
|
+
modulo: moduloDiagnostico,
|
|
171
|
+
arquivo,
|
|
172
|
+
severidade: "erro",
|
|
173
|
+
mensagem: `O arquivo planejado "${arquivo}" não existe no workspace; a cobertura do drift ficou parcial.`,
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
if (planoEscopo.cobertura === "parcial" && planoEscopo.arquivosAusentes.length === 0) {
|
|
177
|
+
diagnosticos.push({
|
|
178
|
+
tipo: "vinculo_quebrado",
|
|
179
|
+
modulo: moduloDiagnostico,
|
|
180
|
+
severidade: "erro",
|
|
181
|
+
mensagem: "A cobertura do drift ficou parcial e não permite declarar a análise como bem-sucedida.",
|
|
182
|
+
});
|
|
183
|
+
}
|
|
52
184
|
if (planoEscopo.bloqueios.includes("escopo_estreito_sem_vinculos")) {
|
|
53
185
|
diagnosticos.push({
|
|
54
186
|
tipo: "escopo_estreito_sem_vinculos",
|
|
55
|
-
modulo:
|
|
187
|
+
modulo: moduloDiagnostico,
|
|
56
188
|
severidade: "erro",
|
|
57
|
-
mensagem: "Escopo arquivo
|
|
189
|
+
mensagem: "Escopo de arquivo ou módulo sem arquivo vinculado nem implementação resolvível. Declare `vinculos { arquivo: ... }` ou execute explicitamente com `--escopo projeto`.",
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
if (planoEscopo.bloqueios.includes("escopo_estreito_ambiguo")) {
|
|
193
|
+
diagnosticos.push({
|
|
194
|
+
tipo: "escopo_estreito_ambiguo",
|
|
195
|
+
modulo: moduloDiagnostico,
|
|
196
|
+
severidade: "erro",
|
|
197
|
+
mensagem: "Mais de um arquivo pode implementar o mesmo símbolo. Declare um vínculo de arquivo inequívoco antes do drift.",
|
|
58
198
|
});
|
|
59
199
|
}
|
|
60
200
|
const tasksResumo = [];
|
|
@@ -62,28 +202,79 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
62
202
|
const guardrailsPorTask = new Map();
|
|
63
203
|
const resumoVinculosPorTask = new Map();
|
|
64
204
|
const arquivosAncoraHerdadosPorTask = new Map();
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
205
|
+
// O analisador legado consulta implementações apenas pelo caminho. Chaves efêmeras
|
|
206
|
+
// mantêm resoluções de origens distintas isoladas durante essa chamada e são restauradas logo depois.
|
|
207
|
+
for (const substituicao of substituicoesCaminho) {
|
|
208
|
+
substituicao.implementacao.caminho = substituicao.temporario;
|
|
209
|
+
}
|
|
210
|
+
try {
|
|
211
|
+
analisarModulosSelecionadosDrift({
|
|
212
|
+
contexto,
|
|
213
|
+
mapaImpl: mapaImplHonesto,
|
|
214
|
+
todosSimbolos,
|
|
215
|
+
mapaRecursos,
|
|
216
|
+
todosRecursos,
|
|
217
|
+
todasRotasIndexadas,
|
|
218
|
+
todosArquivosConhecidos,
|
|
219
|
+
implsValidos,
|
|
220
|
+
implsQuebrados,
|
|
221
|
+
vinculosValidos,
|
|
222
|
+
vinculosQuebrados,
|
|
223
|
+
rotasDivergentes,
|
|
224
|
+
recursosValidos,
|
|
225
|
+
recursosDivergentes,
|
|
226
|
+
diagnosticos,
|
|
227
|
+
tasksResumo,
|
|
228
|
+
taskPorChave,
|
|
229
|
+
guardrailsPorTask,
|
|
230
|
+
resumoVinculosPorTask,
|
|
231
|
+
arquivosAncoraHerdadosPorTask,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
finally {
|
|
235
|
+
for (const substituicao of substituicoesCaminho) {
|
|
236
|
+
substituicao.implementacao.caminho = substituicao.original;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
const caminhoOriginalPorTemporario = new Map(substituicoesCaminho.map((substituicao) => [substituicao.temporario, substituicao.original]));
|
|
240
|
+
for (const registro of [...implsValidos, ...implsQuebrados]) {
|
|
241
|
+
registro.caminho = caminhoOriginalPorTemporario.get(registro.caminho) ?? registro.caminho;
|
|
242
|
+
}
|
|
243
|
+
for (const ambiguidade of ambiguidades) {
|
|
244
|
+
const candidatos = ambiguidade.candidatos.map((candidato) => ({
|
|
245
|
+
origem: candidato.origem,
|
|
246
|
+
caminho: candidato.caminho,
|
|
247
|
+
arquivo: candidato.arquivo,
|
|
248
|
+
simbolo: candidato.simbolo,
|
|
249
|
+
confianca: "alta",
|
|
250
|
+
motivo: `Arquivo físico candidato à implementação ambígua "${ambiguidade.origem}:${ambiguidade.caminho}".`,
|
|
251
|
+
}));
|
|
252
|
+
const registro = implsQuebrados.find((impl) => impl.modulo === ambiguidade.modulo
|
|
253
|
+
&& impl.task === ambiguidade.task
|
|
254
|
+
&& impl.origem === ambiguidade.origem
|
|
255
|
+
&& impl.caminho === ambiguidade.caminho);
|
|
256
|
+
if (registro) {
|
|
257
|
+
registro.candidatos = candidatos;
|
|
258
|
+
}
|
|
259
|
+
const resumo = tasksResumo.find((task) => task.modulo === ambiguidade.modulo && task.task === ambiguidade.task);
|
|
260
|
+
if (resumo) {
|
|
261
|
+
const arquivosCandidatos = new Set(candidatos.map((candidato) => chaveCaminhoCanonicoDrift(candidato.arquivo)));
|
|
262
|
+
const candidatosRestantes = resumo.candidatosImpl.filter((candidato) => !arquivosCandidatos.has(chaveCaminhoCanonicoDrift(candidato.arquivo)));
|
|
263
|
+
resumo.candidatosImpl = [
|
|
264
|
+
...candidatos,
|
|
265
|
+
...ordenarCandidatos(candidatosRestantes),
|
|
266
|
+
].slice(0, 5);
|
|
267
|
+
}
|
|
268
|
+
diagnosticos.push({
|
|
269
|
+
tipo: "escopo_estreito_ambiguo",
|
|
270
|
+
modulo: ambiguidade.modulo,
|
|
271
|
+
task: ambiguidade.task,
|
|
272
|
+
severidade: "erro",
|
|
273
|
+
mensagem: `A implementação "${ambiguidade.origem}:${ambiguidade.caminho}" é ambígua: ${candidatos.length} arquivos físicos correspondem ao mesmo caminho semântico. Declare um vínculo de arquivo inequívoco.`,
|
|
274
|
+
});
|
|
275
|
+
bloqueiosAnalise.add("escopo_estreito_ambiguo");
|
|
276
|
+
}
|
|
277
|
+
configuracaoEscopo.bloqueios = [...bloqueiosAnalise];
|
|
87
278
|
for (const resumo of tasksResumo) {
|
|
88
279
|
const chaveTask = `${resumo.modulo}:${resumo.task}`;
|
|
89
280
|
const task = taskPorChave.get(chaveTask);
|
|
@@ -230,7 +421,7 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
230
421
|
const appRoutes = [...new Set(consumerSurfaces.map((surface) => surface.rota))]
|
|
231
422
|
.sort((a, b) => a.localeCompare(b, "pt-BR"));
|
|
232
423
|
const consumerFramework = inferirConsumerFrameworkPrincipal(contexto.fontesLegado, consumerSurfaces, consumerBridges);
|
|
233
|
-
const persistenciaReal = await analisarPersistenciaReal(contexto, mapaRecursos, detalhesPersistencia, opcoesResolvidas,
|
|
424
|
+
const persistenciaReal = await analisarPersistenciaReal(contexto, mapaRecursos, detalhesPersistencia, opcoesResolvidas, mapaImplHonesto);
|
|
234
425
|
for (const item of persistenciaReal) {
|
|
235
426
|
if (item.status === "divergente") {
|
|
236
427
|
diagnosticos.push({
|
|
@@ -284,42 +475,31 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
284
475
|
chaveArquivoOrcamento(modulo.caminho),
|
|
285
476
|
modulo.codigo,
|
|
286
477
|
]));
|
|
287
|
-
const arquivosPlanejados = new Set((planoEscopo.estrategia === "projeto"
|
|
288
|
-
? todosArquivosConhecidos
|
|
289
|
-
: planoEscopo.arquivos).map(chaveArquivoOrcamento));
|
|
290
|
-
const arquivosAvaliados = new Set(arquivosOrcamentoAvaliados.map(chaveArquivoOrcamento));
|
|
291
|
-
const arquivosSolicitadosOrcamento = new Set([...arquivosOrcamento].map(chaveArquivoOrcamento));
|
|
292
478
|
const leitorArquivosOrcamento = {
|
|
293
479
|
contem: (arquivo) => {
|
|
294
480
|
const chave = chaveArquivoOrcamento(arquivo);
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
}
|
|
298
|
-
return arquivosPlanejados.has(chave)
|
|
299
|
-
&& leitorArquivosPlanejados?.contem(arquivo) === true;
|
|
481
|
+
return contratosJaCarregados.has(chave)
|
|
482
|
+
|| leitorArquivosPlanejados.contem(arquivo);
|
|
300
483
|
},
|
|
301
484
|
lerTexto: async (arquivo) => {
|
|
302
|
-
const
|
|
303
|
-
const contrato = contratosJaCarregados.get(chave);
|
|
485
|
+
const contrato = contratosJaCarregados.get(chaveArquivoOrcamento(arquivo));
|
|
304
486
|
if (contrato !== undefined) {
|
|
305
487
|
return contrato;
|
|
306
488
|
}
|
|
307
|
-
if (!
|
|
308
|
-
throw new Error(`Arquivo fora do
|
|
489
|
+
if (!leitorArquivosPlanejados.contem(arquivo)) {
|
|
490
|
+
throw new Error(`Arquivo fora do catálogo planejado do drift: ${arquivo}`);
|
|
309
491
|
}
|
|
310
492
|
return leitorArquivosPlanejados.lerTexto(arquivo);
|
|
311
493
|
},
|
|
312
494
|
};
|
|
313
|
-
const
|
|
495
|
+
const arquivosOrcamentoPlanejados = [...arquivosOrcamento]
|
|
496
|
+
.filter((arquivo) => leitorArquivosOrcamento.contem(arquivo));
|
|
497
|
+
const diagnosticosOrcamento = await emitirDiagnosticosArquivosOrcamento({
|
|
314
498
|
baseProjeto: contexto.baseProjeto,
|
|
315
|
-
arquivos:
|
|
499
|
+
arquivos: arquivosOrcamentoPlanejados,
|
|
316
500
|
exigirCabecalhoCodigoGovernado: exigeCabecalhoCodigoGovernado,
|
|
317
501
|
leitorArquivos: leitorArquivosOrcamento,
|
|
318
502
|
});
|
|
319
|
-
const diagnosticosOrcamento = [
|
|
320
|
-
...diagnosticosOrcamentoPrecalculados.filter((diagnostico) => arquivosSolicitadosOrcamento.has(chaveArquivoOrcamento(diagnostico.arquivo))),
|
|
321
|
-
...diagnosticosOrcamentoCalculadosAgora,
|
|
322
|
-
];
|
|
323
503
|
for (const diagnostico of diagnosticosOrcamento) {
|
|
324
504
|
diagnosticos.push({
|
|
325
505
|
tipo: diagnostico.tipo,
|
|
@@ -338,7 +518,9 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
338
518
|
&& recursosDivergentes.length === 0
|
|
339
519
|
&& vinculosQuebrados.length === 0
|
|
340
520
|
&& persistenciaReal.every((item) => item.status !== "divergente" && item.compatibilidade !== "invalido")
|
|
341
|
-
&& planoEscopo.
|
|
521
|
+
&& planoEscopo.cobertura === "completa"
|
|
522
|
+
&& planoEscopo.arquivosAusentes.length === 0
|
|
523
|
+
&& bloqueiosAnalise.size === 0
|
|
342
524
|
&& !possuiBloqueioOrcamento;
|
|
343
525
|
const payloadBase = {
|
|
344
526
|
comando: "drift",
|
package/dist/drift.part12.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export declare function classificarArquivoImpacto(arquivo: string): RegistroImpa
|
|
|
7
7
|
export declare function prioridadeArquivoImpacto(tipo: RegistroImpactoSemanticoArquivo["tipo"]): RegistroImpactoSemanticoArquivo["prioridade"];
|
|
8
8
|
export declare function textoIrCombinaTermos(texto: string, termos: string[]): boolean;
|
|
9
9
|
export declare function registrarArquivoImpactado(mapa: Map<string, RegistroImpactoSemanticoArquivo>, arquivo: string, linhas: number[], motivos: string[]): void;
|
|
10
|
-
export declare function listarArquivosImpacto(contexto: ContextoProjetoCarregado, opcoes?: OpcoesDriftLegado): Promise<string[]>;
|
|
10
|
+
export declare function listarArquivosImpacto(contexto: ContextoProjetoCarregado, opcoes?: OpcoesDriftLegado, arquivosPlanejados?: readonly string[]): Promise<string[]>;
|
|
11
11
|
export declare function extrairLinhasComVariantes(codigo: string, variantes: string[]): number[];
|
|
12
12
|
export declare function serializarTaskParaImpacto(task: IrTask): string;
|
|
13
13
|
export declare function serializarRouteParaImpacto(route: IrRoute): string;
|