@semacode/cli 1.2.11 → 1.2.17
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 +2 -2
- package/SEMA_BRIEF.curto.txt +9 -9
- package/SEMA_BRIEF.md +49 -49
- package/SEMA_BRIEF.micro.txt +7 -7
- package/SEMA_INDEX.json +546 -501
- package/dist/index.js +84 -23
- package/dist/index.js.map +1 -1
- package/docs/prompt-base-ia-sema.md +9 -6
- package/node_modules/@sema/gerador-dart/package.json +1 -1
- package/node_modules/@sema/gerador-lua/package.json +1 -1
- package/node_modules/@sema/gerador-python/package.json +1 -1
- package/node_modules/@sema/gerador-typescript/package.json +1 -1
- package/node_modules/@sema/nucleo/package.json +1 -1
- package/node_modules/@sema/padroes/package.json +1 -1
- package/package.json +7 -7
package/dist/index.js
CHANGED
|
@@ -97,21 +97,24 @@ Superficies que a IA deve enxergar como first-class:
|
|
|
97
97
|
|
|
98
98
|
Nao improvise quando faltar contexto.
|
|
99
99
|
`;
|
|
100
|
-
const PROMPT_BASE_IA = `Voce esta trabalhando com Sema, um Protocolo de Governanca de Intencao orientado a contrato, desenhado para operacao por IA.
|
|
101
|
-
|
|
102
|
-
Trate a Sema como camada semantica e linguagem de especificacao executavel feita para IA, nao para leitura humana confortavel. Nao invente sintaxe, palavras-chave ou blocos fora da gramatica e dos exemplos oficiais.
|
|
103
|
-
|
|
104
|
-
Fontes de verdade, em ordem:
|
|
105
|
-
1.
|
|
106
|
-
2.
|
|
107
|
-
3.
|
|
108
|
-
4.
|
|
109
|
-
5.
|
|
110
|
-
6.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
100
|
+
const PROMPT_BASE_IA = `Voce esta trabalhando com Sema, um Protocolo de Governanca de Intencao orientado a contrato, desenhado para operacao por IA.
|
|
101
|
+
|
|
102
|
+
Trate a Sema como camada semantica e linguagem de especificacao executavel feita para IA, nao para leitura humana confortavel. Nao invente sintaxe, palavras-chave ou blocos fora da gramatica e dos exemplos oficiais.
|
|
103
|
+
|
|
104
|
+
Fontes de verdade, em ordem:
|
|
105
|
+
1. se o projeto expuser \`SEMA_CONTEXT.md\`, comece por ele
|
|
106
|
+
2. \`SEMA_BRIEF.md\`
|
|
107
|
+
3. \`SEMA_INDEX.json\`
|
|
108
|
+
4. README do projeto
|
|
109
|
+
5. gramatica e documentacao de sintaxe da Sema
|
|
110
|
+
6. especificacao semantica da linguagem
|
|
111
|
+
7. exemplos oficiais, com prioridade para o vertical de pagamento
|
|
112
|
+
8. \`sema resumo\` e \`briefing.min.json\` quando a IA for pequena
|
|
113
|
+
9. AST, IR e diagnosticos exportados pela CLI em JSON quando a capacidade aguentar
|
|
114
|
+
|
|
115
|
+
Regras de operacao:
|
|
116
|
+
- preserve o significado semantico
|
|
117
|
+
- use o formatador oficial da Sema como fonte unica de estilo
|
|
115
118
|
- use diagnosticos estruturados como contrato de correcao
|
|
116
119
|
- use a IR como fonte de verdade semantica quando houver duvida
|
|
117
120
|
- nao conclua uma alteracao sem validar e verificar o modulo
|
|
@@ -766,6 +769,33 @@ function executarTestesGerados(alvo, baseSaida, arquivos, silencioso = false) {
|
|
|
766
769
|
saidaErro: typeof execucao.stderr === "string" ? execucao.stderr : "",
|
|
767
770
|
};
|
|
768
771
|
}
|
|
772
|
+
function resolverConfiguracaoVerificacaoPorAlvo(alvo, configCarregada) {
|
|
773
|
+
const framework = resolverFrameworkPadrao(undefined, configCarregada);
|
|
774
|
+
const incompatibilidade = validarCompatibilidadeFramework(alvo, framework);
|
|
775
|
+
const estrutura = resolverEstruturaSaidaPadrao(undefined, framework, configCarregada);
|
|
776
|
+
return {
|
|
777
|
+
framework,
|
|
778
|
+
estrutura,
|
|
779
|
+
incompatibilidade,
|
|
780
|
+
};
|
|
781
|
+
}
|
|
782
|
+
function executarTestesParaVerificacao(alvo, baseSaida, arquivos, framework, silencioso = false) {
|
|
783
|
+
if (framework !== "base") {
|
|
784
|
+
return {
|
|
785
|
+
execucao: {
|
|
786
|
+
codigoSaida: 0,
|
|
787
|
+
quantidadeTestes: 0,
|
|
788
|
+
saidaPadrao: "",
|
|
789
|
+
saidaErro: "",
|
|
790
|
+
},
|
|
791
|
+
testesExecutados: false,
|
|
792
|
+
};
|
|
793
|
+
}
|
|
794
|
+
return {
|
|
795
|
+
execucao: executarTestesGerados(alvo, baseSaida, arquivos, silencioso),
|
|
796
|
+
testesExecutados: true,
|
|
797
|
+
};
|
|
798
|
+
}
|
|
769
799
|
function nomeSubpastaModulo(caminhoArquivo) {
|
|
770
800
|
return path.basename(caminhoArquivo, ".sema");
|
|
771
801
|
}
|
|
@@ -3557,7 +3587,7 @@ function imprimirResumoVerificacao(resumos) {
|
|
|
3557
3587
|
totalArquivos += alvo.arquivosGerados;
|
|
3558
3588
|
totalTestes += alvo.quantidadeTestes;
|
|
3559
3589
|
totalAlvos += 1;
|
|
3560
|
-
console.log(` alvo=${alvo.alvo} status=${alvo.sucesso ? "ok" : "falhou"} arquivos=${alvo.arquivosGerados} testes=${alvo.quantidadeTestes} saida=${alvo.pastaSaida}`);
|
|
3590
|
+
console.log(` alvo=${alvo.alvo} framework=${alvo.framework} estrutura=${alvo.estrutura} status=${alvo.sucesso ? "ok" : "falhou"} arquivos=${alvo.arquivosGerados} testes=${alvo.quantidadeTestes}${alvo.testesExecutados ? "" : " (skip)"} saida=${alvo.pastaSaida}`);
|
|
3561
3591
|
}
|
|
3562
3592
|
}
|
|
3563
3593
|
console.log(`Totais: modulos=${resumos.length} alvos=${totalAlvos} arquivos=${totalArquivos} testes=${totalTestes}`);
|
|
@@ -3571,6 +3601,15 @@ async function comandoVerificar(entrada, baseSaida, cwd = process.cwd()) {
|
|
|
3571
3601
|
return 1;
|
|
3572
3602
|
}
|
|
3573
3603
|
const alvos = resolverAlvosVerificacao(contextoProjeto.configCarregada);
|
|
3604
|
+
const configuracoesAlvo = alvos.map((alvo) => ({
|
|
3605
|
+
alvo,
|
|
3606
|
+
...resolverConfiguracaoVerificacaoPorAlvo(alvo, contextoProjeto.configCarregada),
|
|
3607
|
+
}));
|
|
3608
|
+
const incompatibilidade = configuracoesAlvo.find((item) => item.incompatibilidade);
|
|
3609
|
+
if (incompatibilidade?.incompatibilidade) {
|
|
3610
|
+
console.error(incompatibilidade.incompatibilidade);
|
|
3611
|
+
return 1;
|
|
3612
|
+
}
|
|
3574
3613
|
const resumos = [];
|
|
3575
3614
|
for (const modulo of modulos) {
|
|
3576
3615
|
const ir = garantirIr(modulo.resultado, modulo.caminho);
|
|
@@ -3580,18 +3619,21 @@ async function comandoVerificar(entrada, baseSaida, cwd = process.cwd()) {
|
|
|
3580
3619
|
arquivoFonte: modulo.caminho,
|
|
3581
3620
|
alvos: [],
|
|
3582
3621
|
};
|
|
3583
|
-
for (const
|
|
3622
|
+
for (const configuracaoAlvo of configuracoesAlvo) {
|
|
3623
|
+
const { alvo, framework, estrutura } = configuracaoAlvo;
|
|
3584
3624
|
const pastaAlvo = path.join(baseSaida, alvo, nomeSubpastaModulo(modulo.caminho));
|
|
3585
|
-
const
|
|
3586
|
-
const arquivos = gerarArquivosPorAlvo(ir, alvo, framework);
|
|
3625
|
+
const arquivos = aplicarEstruturaSaida(gerarArquivosPorAlvo(ir, alvo, framework), ir, estrutura);
|
|
3587
3626
|
await escreverArquivos(pastaAlvo, arquivos);
|
|
3588
|
-
const execucao =
|
|
3627
|
+
const { execucao, testesExecutados } = executarTestesParaVerificacao(alvo, pastaAlvo, arquivos, framework);
|
|
3589
3628
|
resumoModulo.alvos.push({
|
|
3590
3629
|
alvo,
|
|
3591
3630
|
arquivosGerados: arquivos.length,
|
|
3592
3631
|
quantidadeTestes: execucao.quantidadeTestes,
|
|
3593
3632
|
pastaSaida: pastaAlvo,
|
|
3594
3633
|
sucesso: execucao.codigoSaida === 0,
|
|
3634
|
+
framework,
|
|
3635
|
+
estrutura,
|
|
3636
|
+
testesExecutados,
|
|
3595
3637
|
});
|
|
3596
3638
|
if (execucao.codigoSaida !== 0) {
|
|
3597
3639
|
imprimirResumoVerificacao([...resumos, resumoModulo]);
|
|
@@ -3620,6 +3662,21 @@ async function comandoVerificarJson(entrada, baseSaida, cwd = process.cwd()) {
|
|
|
3620
3662
|
return 1;
|
|
3621
3663
|
}
|
|
3622
3664
|
const alvos = resolverAlvosVerificacao(contextoProjeto.configCarregada);
|
|
3665
|
+
const configuracoesAlvo = alvos.map((alvo) => ({
|
|
3666
|
+
alvo,
|
|
3667
|
+
...resolverConfiguracaoVerificacaoPorAlvo(alvo, contextoProjeto.configCarregada),
|
|
3668
|
+
}));
|
|
3669
|
+
const incompatibilidade = configuracoesAlvo.find((item) => item.incompatibilidade);
|
|
3670
|
+
if (incompatibilidade?.incompatibilidade) {
|
|
3671
|
+
console.log(JSON.stringify({
|
|
3672
|
+
comando: "verificar",
|
|
3673
|
+
sucesso: false,
|
|
3674
|
+
erro: incompatibilidade.incompatibilidade,
|
|
3675
|
+
modulos: [],
|
|
3676
|
+
totais: { modulos: 0, alvos: 0, arquivos: 0, testes: 0 },
|
|
3677
|
+
}, null, 2));
|
|
3678
|
+
return 1;
|
|
3679
|
+
}
|
|
3623
3680
|
const resumos = [];
|
|
3624
3681
|
let codigoSaida = 0;
|
|
3625
3682
|
for (const modulo of modulos) {
|
|
@@ -3630,17 +3687,21 @@ async function comandoVerificarJson(entrada, baseSaida, cwd = process.cwd()) {
|
|
|
3630
3687
|
alvos: [],
|
|
3631
3688
|
saidaTestes: [],
|
|
3632
3689
|
};
|
|
3633
|
-
for (const
|
|
3690
|
+
for (const configuracaoAlvo of configuracoesAlvo) {
|
|
3691
|
+
const { alvo, framework, estrutura } = configuracaoAlvo;
|
|
3634
3692
|
const pastaAlvo = path.join(baseSaida, alvo, nomeSubpastaModulo(modulo.caminho));
|
|
3635
|
-
const arquivos = gerarArquivosPorAlvo(ir, alvo,
|
|
3693
|
+
const arquivos = aplicarEstruturaSaida(gerarArquivosPorAlvo(ir, alvo, framework), ir, estrutura);
|
|
3636
3694
|
await escreverArquivos(pastaAlvo, arquivos);
|
|
3637
|
-
const execucao =
|
|
3695
|
+
const { execucao, testesExecutados } = executarTestesParaVerificacao(alvo, pastaAlvo, arquivos, framework, true);
|
|
3638
3696
|
resumoModulo.alvos.push({
|
|
3639
3697
|
alvo,
|
|
3640
3698
|
arquivosGerados: arquivos.length,
|
|
3641
3699
|
quantidadeTestes: execucao.quantidadeTestes,
|
|
3642
3700
|
pastaSaida: pastaAlvo,
|
|
3643
3701
|
sucesso: execucao.codigoSaida === 0,
|
|
3702
|
+
framework,
|
|
3703
|
+
estrutura,
|
|
3704
|
+
testesExecutados,
|
|
3644
3705
|
});
|
|
3645
3706
|
resumoModulo.saidaTestes.push({ alvo, stdout: execucao.saidaPadrao, stderr: execucao.saidaErro });
|
|
3646
3707
|
if (execucao.codigoSaida !== 0) {
|