@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/projetoOrigens.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// SEMA-GOVERNED: sema.produto.governanca_ia.contexto
|
|
2
2
|
// Descrição: resolve base, origens de contratos e diret?rios de c?digo do projeto.
|
|
3
|
-
import { readdir, stat } from 'node:fs/promises';
|
|
3
|
+
import { readdir, realpath, stat } from 'node:fs/promises';
|
|
4
4
|
import path from 'node:path';
|
|
5
5
|
import { listarArquivosSema } from '@sema/nucleo';
|
|
6
6
|
import { caminhoExiste, DIRETORIOS_CODIGO_IGNORADOS, EXTENSOES_CODIGO, listarDiretoriosFilhos, } from './projetoBusca.js';
|
|
@@ -10,7 +10,12 @@ const DIRETORIOS_CODIGO_FIXOS = [
|
|
|
10
10
|
"app",
|
|
11
11
|
"apps",
|
|
12
12
|
"backend",
|
|
13
|
+
"frontend",
|
|
14
|
+
"client",
|
|
15
|
+
"web",
|
|
13
16
|
"lib",
|
|
17
|
+
"packages",
|
|
18
|
+
"pacotes",
|
|
14
19
|
"api",
|
|
15
20
|
"server",
|
|
16
21
|
"services",
|
|
@@ -21,6 +26,59 @@ const DIRETORIOS_CODIGO_FIXOS = [
|
|
|
21
26
|
"functions",
|
|
22
27
|
"scripts",
|
|
23
28
|
];
|
|
29
|
+
export function resolverRaizesLogicasCodigoSemCaminhada(baseProjeto) {
|
|
30
|
+
return [path.resolve(baseProjeto), ...DIRETORIOS_CODIGO_FIXOS
|
|
31
|
+
.map((segmento) => path.resolve(baseProjeto, segmento))];
|
|
32
|
+
}
|
|
33
|
+
function caminhoEstaDentro(raiz, alvo) {
|
|
34
|
+
const relativo = path.relative(path.resolve(raiz), path.resolve(alvo));
|
|
35
|
+
return relativo === "" || (relativo !== ".."
|
|
36
|
+
&& !relativo.startsWith(`..${path.sep}`)
|
|
37
|
+
&& !path.isAbsolute(relativo));
|
|
38
|
+
}
|
|
39
|
+
function erroEhAusencia(erro) {
|
|
40
|
+
return ["ENOENT", "ENOTDIR"].includes(erro.code ?? "");
|
|
41
|
+
}
|
|
42
|
+
async function resolverDiretoriosConfiguradosConfinados(baseProjeto, baseConfiguracao, declarados, campo) {
|
|
43
|
+
const baseLogica = path.resolve(baseProjeto);
|
|
44
|
+
const baseReal = await realpath(baseLogica);
|
|
45
|
+
const resolvidos = new Map();
|
|
46
|
+
for (const [indice, declarado] of declarados.entries()) {
|
|
47
|
+
const identificadorSeguro = `${campo}[${indice}]`;
|
|
48
|
+
const absoluto = path.resolve(baseConfiguracao, declarado);
|
|
49
|
+
if (!caminhoEstaDentro(baseLogica, absoluto)) {
|
|
50
|
+
throw new Error(`${identificadorSeguro} aponta para fora da base do projeto`);
|
|
51
|
+
}
|
|
52
|
+
let canonico = absoluto;
|
|
53
|
+
try {
|
|
54
|
+
const [real, informacao] = await Promise.all([realpath(absoluto), stat(absoluto)]);
|
|
55
|
+
if (!informacao.isDirectory()) {
|
|
56
|
+
throw new Error(`${identificadorSeguro} nao e diretorio`);
|
|
57
|
+
}
|
|
58
|
+
if (!caminhoEstaDentro(baseReal, real)) {
|
|
59
|
+
throw new Error(`${identificadorSeguro} resolve fora da base do projeto`);
|
|
60
|
+
}
|
|
61
|
+
canonico = real;
|
|
62
|
+
}
|
|
63
|
+
catch (erro) {
|
|
64
|
+
if (!erroEhAusencia(erro)) {
|
|
65
|
+
throw erro;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const chave = process.platform === "win32" ? canonico.toLowerCase() : canonico;
|
|
69
|
+
if (!resolvidos.has(chave)) {
|
|
70
|
+
resolvidos.set(chave, canonico);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return [...resolvidos.values()].sort((a, b) => a.localeCompare(b, "pt-BR"));
|
|
74
|
+
}
|
|
75
|
+
export async function resolverDiretoriosCodigoConfigurados(baseProjeto, configCarregada) {
|
|
76
|
+
const declarados = configCarregada?.config.diretoriosCodigo ?? [];
|
|
77
|
+
if (declarados.length === 0) {
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
return resolverDiretoriosConfiguradosConfinados(baseProjeto, configCarregada.baseDiretorio, declarados, "diretoriosCodigo");
|
|
81
|
+
}
|
|
24
82
|
export async function resolverEntradaPadrao(cwd, configCarregada) {
|
|
25
83
|
if (configCarregada) {
|
|
26
84
|
return configCarregada.baseDiretorio;
|
|
@@ -100,18 +158,19 @@ async function descobrirOrigemPadrao(baseProjeto, entradaResolvida) {
|
|
|
100
158
|
}
|
|
101
159
|
export async function resolverOrigensProjeto(baseProjeto, entradaResolvida, configCarregada) {
|
|
102
160
|
if (configCarregada) {
|
|
161
|
+
const confinar = (origens) => resolverDiretoriosConfiguradosConfinados(baseProjeto, configCarregada.baseDiretorio, origens, "origens");
|
|
103
162
|
const infoEntrada = await stat(entradaResolvida);
|
|
104
163
|
if (infoEntrada.isFile()) {
|
|
105
|
-
return [path.
|
|
164
|
+
return confinar([path.dirname(entradaResolvida)]);
|
|
106
165
|
}
|
|
107
166
|
if (path.resolve(entradaResolvida) !== path.resolve(configCarregada.baseDiretorio)) {
|
|
108
|
-
return [
|
|
167
|
+
return confinar([entradaResolvida]);
|
|
109
168
|
}
|
|
110
169
|
const declaradas = configCarregada.config.origens ?? (configCarregada.config.origem ? [configCarregada.config.origem] : []);
|
|
111
170
|
if (declaradas.length > 0) {
|
|
112
|
-
return declaradas
|
|
171
|
+
return confinar(declaradas);
|
|
113
172
|
}
|
|
114
|
-
return [configCarregada.baseDiretorio];
|
|
173
|
+
return confinar([configCarregada.baseDiretorio]);
|
|
115
174
|
}
|
|
116
175
|
const infoEntrada = await stat(entradaResolvida);
|
|
117
176
|
if (infoEntrada.isFile()) {
|
|
@@ -149,10 +208,7 @@ async function diretorioTemArquivosCodigo(diretorioBase, profundidadeMaxima = 4)
|
|
|
149
208
|
}
|
|
150
209
|
export async function inferirDiretoriosCodigo(baseProjeto, configCarregada) {
|
|
151
210
|
if (configCarregada?.config.diretoriosCodigo?.length) {
|
|
152
|
-
return
|
|
153
|
-
.map((diretorio) => path.resolve(configCarregada.baseDiretorio, diretorio))
|
|
154
|
-
.filter(Boolean))]
|
|
155
|
-
.sort((a, b) => a.localeCompare(b, "pt-BR"));
|
|
211
|
+
return resolverDiretoriosCodigoConfigurados(baseProjeto, configCarregada);
|
|
156
212
|
}
|
|
157
213
|
const candidatosFixos = DIRETORIOS_CODIGO_FIXOS
|
|
158
214
|
.map((segmento) => path.join(baseProjeto, segmento));
|
package/dist/projetoTipos.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import type { EstruturaSaida, FonteLegado, ModoAdocao } from './tipos.js';
|
|
|
4
4
|
export type EscopoCarregamentoProjeto = "arquivo" | "modulo" | "projeto";
|
|
5
5
|
export interface OpcoesCarregarProjeto {
|
|
6
6
|
escopo?: EscopoCarregamentoProjeto;
|
|
7
|
+
adiarDescobertaCodigo?: boolean;
|
|
7
8
|
}
|
|
8
9
|
export interface ConfiguracaoPersistenciaProjeto {
|
|
9
10
|
enginesHabilitados?: EngineBanco[];
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const SCHEMA_RESULTADO_CLI_V1: "sema.cli.result/v1";
|
|
2
|
+
export declare const CODIGO_SAIDA_FATAL_RUNTIME_CLI: 70;
|
|
3
|
+
export type TipoResultadoCliV1 = "SUCCESS" | "DOMAIN_ERROR";
|
|
4
|
+
export interface EnvelopeResultadoCliV1 {
|
|
5
|
+
readonly schemaVersion: typeof SCHEMA_RESULTADO_CLI_V1;
|
|
6
|
+
readonly ok: boolean;
|
|
7
|
+
readonly kind: TipoResultadoCliV1;
|
|
8
|
+
readonly command: string;
|
|
9
|
+
readonly code: "CLI_SUCCESS" | "CLI_DOMAIN_ERROR";
|
|
10
|
+
readonly message: string | null;
|
|
11
|
+
readonly exitCode: number;
|
|
12
|
+
readonly payload: unknown;
|
|
13
|
+
}
|
|
14
|
+
export interface EntradaEnvelopeResultadoCliV1 {
|
|
15
|
+
readonly comando: string;
|
|
16
|
+
readonly codigoSaida: number;
|
|
17
|
+
readonly stdout: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function interpretarPayloadRuntimeCli(stdout: string): unknown;
|
|
20
|
+
export declare function criarEnvelopeResultadoCliV1(entrada: EntradaEnvelopeResultadoCliV1): EnvelopeResultadoCliV1;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// SEMA-GOVERNED: sema.produto.cli_invocacao_publica.resultados
|
|
2
|
+
// Descrição: modela o envelope único de resultados JSON da CLI pública 3.0.
|
|
3
|
+
export const SCHEMA_RESULTADO_CLI_V1 = "sema.cli.result/v1";
|
|
4
|
+
export const CODIGO_SAIDA_FATAL_RUNTIME_CLI = 70;
|
|
5
|
+
const COMANDO_CANONICO_VALIDO = /^[a-z][a-z0-9-]{0,63}$/u;
|
|
6
|
+
const MENSAGEM_PUBLICA_ERRO_DOMINIO = "O comando Sema não foi concluído.";
|
|
7
|
+
const SCHEMAS_ENVELOPE_CLI = new Set([
|
|
8
|
+
SCHEMA_RESULTADO_CLI_V1,
|
|
9
|
+
"sema.cli.control/v1",
|
|
10
|
+
]);
|
|
11
|
+
function validarComandoCanonico(comando) {
|
|
12
|
+
if (!COMANDO_CANONICO_VALIDO.test(comando)) {
|
|
13
|
+
throw new TypeError("Comando canônico inválido.");
|
|
14
|
+
}
|
|
15
|
+
return comando;
|
|
16
|
+
}
|
|
17
|
+
function validarCodigoSaida(codigoSaida) {
|
|
18
|
+
if (!Number.isSafeInteger(codigoSaida) || codigoSaida < 0 || codigoSaida > 255) {
|
|
19
|
+
throw new TypeError("Código de saída inválido.");
|
|
20
|
+
}
|
|
21
|
+
return codigoSaida;
|
|
22
|
+
}
|
|
23
|
+
export function interpretarPayloadRuntimeCli(stdout) {
|
|
24
|
+
if (stdout.trim().length === 0)
|
|
25
|
+
return null;
|
|
26
|
+
let payload;
|
|
27
|
+
try {
|
|
28
|
+
payload = JSON.parse(stdout);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return stdout;
|
|
32
|
+
}
|
|
33
|
+
if (payload !== null
|
|
34
|
+
&& typeof payload === "object"
|
|
35
|
+
&& !Array.isArray(payload)
|
|
36
|
+
&& Object.prototype.hasOwnProperty.call(payload, "schemaVersion")
|
|
37
|
+
&& SCHEMAS_ENVELOPE_CLI.has(payload.schemaVersion)) {
|
|
38
|
+
throw new TypeError("Payload não pode conter outro envelope público da CLI.");
|
|
39
|
+
}
|
|
40
|
+
return payload;
|
|
41
|
+
}
|
|
42
|
+
export function criarEnvelopeResultadoCliV1(entrada) {
|
|
43
|
+
const command = validarComandoCanonico(entrada.comando);
|
|
44
|
+
const exitCode = validarCodigoSaida(entrada.codigoSaida);
|
|
45
|
+
const sucesso = exitCode === 0;
|
|
46
|
+
return {
|
|
47
|
+
schemaVersion: SCHEMA_RESULTADO_CLI_V1,
|
|
48
|
+
ok: sucesso,
|
|
49
|
+
kind: sucesso ? "SUCCESS" : "DOMAIN_ERROR",
|
|
50
|
+
command,
|
|
51
|
+
code: sucesso ? "CLI_SUCCESS" : "CLI_DOMAIN_ERROR",
|
|
52
|
+
message: sucesso ? null : MENSAGEM_PUBLICA_ERRO_DOMINIO,
|
|
53
|
+
exitCode,
|
|
54
|
+
payload: interpretarPayloadRuntimeCli(entrada.stdout),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=resultadoCli.js.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type EntradaEnvelopeResultadoCliV1, type EnvelopeResultadoCliV1 } from "./resultadoCli.js";
|
|
2
|
+
export { CODIGO_SAIDA_FATAL_RUNTIME_CLI, SCHEMA_RESULTADO_CLI_V1, criarEnvelopeResultadoCliV1, interpretarPayloadRuntimeCli, type EntradaEnvelopeResultadoCliV1, type EnvelopeResultadoCliV1, type TipoResultadoCliV1, } from "./resultadoCli.js";
|
|
3
|
+
export declare const SCHEMA_CONTROLE_CLI_V1: "sema.cli.control/v1";
|
|
4
|
+
export type TipoControleCli = "HELP" | "UNKNOWN_COMMAND" | "ARGUMENT_ERROR" | "FATAL_ERROR";
|
|
5
|
+
export interface EnvelopeControleJsonV1 {
|
|
6
|
+
readonly schemaVersion: typeof SCHEMA_CONTROLE_CLI_V1;
|
|
7
|
+
readonly ok: boolean;
|
|
8
|
+
readonly kind: TipoControleCli;
|
|
9
|
+
readonly code: string;
|
|
10
|
+
readonly message: string;
|
|
11
|
+
readonly exitCode: number;
|
|
12
|
+
}
|
|
13
|
+
export interface EntradaEnvelopeControleJsonV1 {
|
|
14
|
+
readonly categoria: TipoControleCli;
|
|
15
|
+
readonly codigoPublico: string;
|
|
16
|
+
readonly mensagemPublica: string;
|
|
17
|
+
readonly codigoSaida: number;
|
|
18
|
+
}
|
|
19
|
+
export interface OpcoesInvocacaoPublica {
|
|
20
|
+
readonly resultado: TipoControleCli;
|
|
21
|
+
readonly modoJson: boolean;
|
|
22
|
+
readonly envelopeControle?: EnvelopeControleJsonV1;
|
|
23
|
+
readonly mensagemTexto?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface RelatorioInvocacaoPublica {
|
|
26
|
+
readonly codigoSaida: number;
|
|
27
|
+
readonly envelopeControleEmitido: boolean;
|
|
28
|
+
readonly stderrVazio: boolean;
|
|
29
|
+
readonly handlerExecutado: boolean;
|
|
30
|
+
readonly politicaControleJsonV1Respeitada: boolean;
|
|
31
|
+
readonly politicaHelpPuroRespeitada: boolean;
|
|
32
|
+
}
|
|
33
|
+
export declare function criarEnvelopeControleJsonV1(entrada: EntradaEnvelopeControleJsonV1): EnvelopeControleJsonV1;
|
|
34
|
+
export declare function emitirResultadoCliJsonV1(entrada: EntradaEnvelopeResultadoCliV1): EnvelopeResultadoCliV1;
|
|
35
|
+
export declare function executarInvocacaoPublica(opcoes: OpcoesInvocacaoPublica): RelatorioInvocacaoPublica;
|
package/dist/saidaCli.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// SEMA-GOVERNED: sema.produto.cli_invocacao_publica, sema.produto.cli_invocacao_publica.resultados
|
|
2
|
+
// Descrição: cria e emite os envelopes JSON públicos de controle v1 e resultado v1 da CLI.
|
|
3
|
+
import { criarEnvelopeResultadoCliV1, } from "./resultadoCli.js";
|
|
4
|
+
export { CODIGO_SAIDA_FATAL_RUNTIME_CLI, SCHEMA_RESULTADO_CLI_V1, criarEnvelopeResultadoCliV1, interpretarPayloadRuntimeCli, } from "./resultadoCli.js";
|
|
5
|
+
export const SCHEMA_CONTROLE_CLI_V1 = "sema.cli.control/v1";
|
|
6
|
+
const CODIGO_PADRAO = {
|
|
7
|
+
HELP: "CLI_HELP",
|
|
8
|
+
UNKNOWN_COMMAND: "CLI_UNKNOWN_COMMAND",
|
|
9
|
+
ARGUMENT_ERROR: "CLI_ARGUMENT_ERROR",
|
|
10
|
+
FATAL_ERROR: "CLI_FATAL_ERROR",
|
|
11
|
+
};
|
|
12
|
+
const MENSAGEM_PADRAO = {
|
|
13
|
+
HELP: "Ajuda da CLI Sema.",
|
|
14
|
+
UNKNOWN_COMMAND: "Comando Sema desconhecido.",
|
|
15
|
+
ARGUMENT_ERROR: "Argumentos inválidos. Consulte a ajuda do comando.",
|
|
16
|
+
FATAL_ERROR: "Falha ao executar a CLI da Sema.",
|
|
17
|
+
};
|
|
18
|
+
const CODIGO_PUBLICO_VALIDO = /^[A-Z][A-Z0-9_]{2,63}$/u;
|
|
19
|
+
const PREFIXO_ERRO_INTERNO = /\b(?:Aggregate|Eval|Internal|Range|Reference|Syntax|Type|URI)?Error\s*:/iu;
|
|
20
|
+
const TRECHO_STACK = /(?:^|[\s;|=(:,])at\s+(?:async\s+)?(?:new\s+)?[^\n]{0,240}?(?:\([^()\n]*:\d+:\d+\)|[^\s()\n]+:\d+:\d+)/iu;
|
|
21
|
+
function decodificarPercentAscii(valor) {
|
|
22
|
+
return valor.replace(/%([0-9a-f]{2})/giu, (_trecho, hexadecimal) => String.fromCharCode(Number.parseInt(hexadecimal, 16)));
|
|
23
|
+
}
|
|
24
|
+
function variantesTextoPublico(valor) {
|
|
25
|
+
const variantes = new Set([valor.normalize("NFC")]);
|
|
26
|
+
let atual = valor;
|
|
27
|
+
for (let tentativa = 0; tentativa < 3; tentativa += 1) {
|
|
28
|
+
const decodificado = decodificarPercentAscii(atual);
|
|
29
|
+
if (decodificado === atual) {
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
variantes.add(decodificado.normalize("NFC"));
|
|
33
|
+
atual = decodificado;
|
|
34
|
+
}
|
|
35
|
+
return [...variantes];
|
|
36
|
+
}
|
|
37
|
+
function contemCaminhoAbsoluto(valor) {
|
|
38
|
+
return variantesTextoPublico(valor).some((variante) => {
|
|
39
|
+
const normalizada = variante.replaceAll("\\", "/");
|
|
40
|
+
const semUrlsPublicas = normalizada.replace(/\b(?:https?|wss?):\/\/[^\s"'<>]+/giu, "");
|
|
41
|
+
return /(?:^|[^A-Za-z0-9])file:\/{1,3}/iu.test(semUrlsPublicas)
|
|
42
|
+
|| /(?:^|[^A-Za-z0-9])[A-Za-z]:\/(?:[^/\s"'<>]+(?:\/[^/\s"'<>]*)*)?/u.test(semUrlsPublicas)
|
|
43
|
+
|| /(?:^|[^A-Za-z0-9_./])\/\/[^/\s"'<>]+\/[^/\s"'<>]+/u.test(semUrlsPublicas)
|
|
44
|
+
|| /(?:^|[^A-Za-z0-9_./])\/(?!\/)[^/\s"'<>]+(?:\/[^/\s"'<>]*)*/u.test(semUrlsPublicas);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function normalizarCodigoPublico(categoria, codigo) {
|
|
48
|
+
const candidato = codigo.trim();
|
|
49
|
+
return CODIGO_PUBLICO_VALIDO.test(candidato) ? candidato : CODIGO_PADRAO[categoria];
|
|
50
|
+
}
|
|
51
|
+
function normalizarMensagemPublica(categoria, mensagem) {
|
|
52
|
+
if (categoria !== "HELP") {
|
|
53
|
+
return MENSAGEM_PADRAO[categoria];
|
|
54
|
+
}
|
|
55
|
+
const candidata = mensagem.trim();
|
|
56
|
+
if (!candidata
|
|
57
|
+
|| contemCaminhoAbsoluto(candidata)
|
|
58
|
+
|| TRECHO_STACK.test(candidata)
|
|
59
|
+
|| PREFIXO_ERRO_INTERNO.test(candidata)) {
|
|
60
|
+
return MENSAGEM_PADRAO[categoria];
|
|
61
|
+
}
|
|
62
|
+
return candidata;
|
|
63
|
+
}
|
|
64
|
+
export function criarEnvelopeControleJsonV1(entrada) {
|
|
65
|
+
const help = entrada.categoria === "HELP";
|
|
66
|
+
const exitCode = help
|
|
67
|
+
? 0
|
|
68
|
+
: entrada.codigoSaida === 0
|
|
69
|
+
? 1
|
|
70
|
+
: entrada.codigoSaida;
|
|
71
|
+
return {
|
|
72
|
+
schemaVersion: SCHEMA_CONTROLE_CLI_V1,
|
|
73
|
+
ok: help,
|
|
74
|
+
kind: entrada.categoria,
|
|
75
|
+
code: normalizarCodigoPublico(entrada.categoria, entrada.codigoPublico),
|
|
76
|
+
message: normalizarMensagemPublica(entrada.categoria, entrada.mensagemPublica),
|
|
77
|
+
exitCode,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export function emitirResultadoCliJsonV1(entrada) {
|
|
81
|
+
const envelope = criarEnvelopeResultadoCliV1(entrada);
|
|
82
|
+
// Uma única escrita lógica impede documentos JSON parciais no processo público.
|
|
83
|
+
console.log(JSON.stringify(envelope, null, 2));
|
|
84
|
+
return envelope;
|
|
85
|
+
}
|
|
86
|
+
function envelopeSeguroParaInvocacao(resultado, envelope, mensagemTexto) {
|
|
87
|
+
const coerente = envelope?.kind === resultado ? envelope : undefined;
|
|
88
|
+
return criarEnvelopeControleJsonV1({
|
|
89
|
+
categoria: resultado,
|
|
90
|
+
codigoPublico: coerente?.code ?? CODIGO_PADRAO[resultado],
|
|
91
|
+
mensagemPublica: resultado === "HELP"
|
|
92
|
+
? coerente?.message ?? mensagemTexto ?? MENSAGEM_PADRAO.HELP
|
|
93
|
+
: MENSAGEM_PADRAO[resultado],
|
|
94
|
+
codigoSaida: coerente?.exitCode ?? (resultado === "HELP" ? 0 : 1),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
export function executarInvocacaoPublica(opcoes) {
|
|
98
|
+
const envelope = envelopeSeguroParaInvocacao(opcoes.resultado, opcoes.envelopeControle, opcoes.mensagemTexto);
|
|
99
|
+
if (opcoes.modoJson) {
|
|
100
|
+
// Uma única escrita lógica mantém JSON de controle em um único documento no stdout.
|
|
101
|
+
console.log(JSON.stringify(envelope, null, 2));
|
|
102
|
+
}
|
|
103
|
+
else if (opcoes.resultado === "HELP") {
|
|
104
|
+
console.log(envelope.message);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
console.error(envelope.message);
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
codigoSaida: envelope.exitCode,
|
|
111
|
+
envelopeControleEmitido: opcoes.modoJson,
|
|
112
|
+
stderrVazio: opcoes.modoJson || opcoes.resultado === "HELP",
|
|
113
|
+
handlerExecutado: false,
|
|
114
|
+
politicaControleJsonV1Respeitada: true,
|
|
115
|
+
politicaHelpPuroRespeitada: true,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=saidaCli.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type AcceptanceLockV1, type AcceptanceOperationValue, type AcceptanceTimeRange, type MultimodalChannelType, type MultimodalEvidenceDescriptorV1, type OperationResult, type Sha256 } from "./operationsTypes.js";
|
|
2
|
+
export declare function validarAcceptanceLock(input: unknown): OperationResult<{
|
|
3
|
+
readonly lock: AcceptanceLockV1;
|
|
4
|
+
readonly lockDigest: Sha256;
|
|
5
|
+
}>;
|
|
6
|
+
export declare function operarAcceptanceLock(operation: unknown, lockInput: unknown, contextInput: unknown): OperationResult<AcceptanceOperationValue>;
|
|
7
|
+
export declare function digestVinculoClaimMultimodal(input: {
|
|
8
|
+
readonly claimId: string;
|
|
9
|
+
readonly runId: string;
|
|
10
|
+
readonly definitionDigest: Sha256;
|
|
11
|
+
readonly planDigest: Sha256;
|
|
12
|
+
readonly contractDigest: Sha256;
|
|
13
|
+
readonly artifactDigest: Sha256;
|
|
14
|
+
readonly sceneId: string;
|
|
15
|
+
readonly timeRange: AcceptanceTimeRange;
|
|
16
|
+
readonly requiredModalities: readonly MultimodalChannelType[];
|
|
17
|
+
}): Sha256;
|
|
18
|
+
export declare function validarEvidenciaMultimodal(input: unknown): OperationResult<{
|
|
19
|
+
readonly descriptor: MultimodalEvidenceDescriptorV1;
|
|
20
|
+
readonly descriptorDigest: Sha256;
|
|
21
|
+
readonly localDescriptorOnly: true;
|
|
22
|
+
}>;
|