@semacode/cli 1.5.17 → 1.5.18
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 +104 -112
- package/SEMA_BRIEF.curto.txt +6 -6
- package/SEMA_BRIEF.md +17 -24
- package/SEMA_BRIEF.micro.txt +5 -5
- package/SEMA_INDEX.json +86 -224
- package/dist/drift.d.ts +3 -3
- package/dist/drift.js +5 -111
- package/dist/drift.js.map +1 -1
- package/dist/importador.d.ts +1 -1
- package/dist/importador.js +1 -200
- package/dist/importador.js.map +1 -1
- package/dist/index.js +59 -479
- package/dist/index.js.map +1 -1
- package/dist/projeto.js +0 -20
- package/dist/projeto.js.map +1 -1
- package/dist/tipos.d.ts +1 -1
- package/docs/AGENT_STARTER.md +9 -8
- package/docs/cli.md +106 -119
- package/docs/como-ensinar-a-sema-para-ia.md +4 -4
- package/docs/env.md +56 -56
- package/docs/fluxo-pratico-ia-sema.md +171 -167
- package/docs/integracao-com-ia.md +98 -96
- package/docs/mcp.md +51 -53
- package/docs/pagamento-ponta-a-ponta.md +11 -1
- package/docs/persistencia-vendor-first.md +1 -1
- package/docs/prompt-base-ia-sema.md +6 -5
- package/docs/rollback.md +1 -1
- package/docs/sintaxe.md +196 -394
- package/exemplos/agendamento.sema +0 -1
- package/exemplos/assinatura.sema +0 -3
- package/exemplos/auditoria.sema +2 -1
- package/exemplos/estoque.sema +2 -1
- package/exemplos/fila.sema +2 -3
- package/exemplos/multi_tenant.sema +2 -2
- package/exemplos/notificacao.sema +53 -2
- package/exemplos/operacao_estrategia.sema +231 -0
- package/exemplos/pagamento.sema +214 -2
- package/exemplos/pedido.sema +156 -20
- package/exemplos/replica_analitica_erp.sema +160 -0
- package/exemplos/webhook.sema +2 -4
- package/node_modules/@sema/gerador-css/package.json +1 -1
- package/node_modules/@sema/gerador-dart/package.json +1 -1
- package/node_modules/@sema/gerador-html/package.json +1 -1
- package/node_modules/@sema/gerador-javascript/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/dist/ast/tipos.d.ts +2 -4
- package/node_modules/@sema/nucleo/dist/formatador/index.js +14 -42
- package/node_modules/@sema/nucleo/dist/formatador/index.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.js +9 -204
- package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +3 -35
- package/node_modules/@sema/nucleo/dist/lexer/tokens.js +0 -21
- package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.js +0 -40
- package/node_modules/@sema/nucleo/dist/parser/parser.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +6 -5
- package/node_modules/@sema/nucleo/dist/semantico/analisador.js +76 -307
- package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/semantico/estruturas.d.ts +2 -0
- package/node_modules/@sema/nucleo/dist/semantico/estruturas.js +32 -2
- package/node_modules/@sema/nucleo/dist/semantico/estruturas.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 +14 -14
package/dist/drift.js
CHANGED
|
@@ -6,8 +6,6 @@ import { extrairSimbolosCpp } from "./cpp-symbols.js";
|
|
|
6
6
|
import { extrairRotasDotnet, extrairSimbolosDotnet } from "./dotnet-http.js";
|
|
7
7
|
import { extrairRotasGo, extrairSimbolosGo } from "./go-http.js";
|
|
8
8
|
import { extrairRotasJava, extrairSimbolosJava } from "./java-http.js";
|
|
9
|
-
import { extrairSimbolosLua } from "./lua-symbols.js";
|
|
10
|
-
import { extrairRotasPhp, extrairSimbolosPhp } from "./php-symbols.js";
|
|
11
9
|
import { contarIndentacaoPython, extrairRotasFlaskDecoradas, normalizarCaminhoFlask } from "./python-http.js";
|
|
12
10
|
import { extrairRotasRust, extrairSimbolosRust } from "./rust-http.js";
|
|
13
11
|
import { extrairRotasTypeScriptHttp } from "./typescript-http.js";
|
|
@@ -691,7 +689,7 @@ function extrairRecursosArquivoLocal(arquivo, codigo) {
|
|
|
691
689
|
const nomeBase = path.basename(literal, path.extname(literal));
|
|
692
690
|
registrarRecursoDrift(recursos, "arquivo", "arquivo_local", nomeBase, arquivo);
|
|
693
691
|
}
|
|
694
|
-
const nomeArquivo = path.basename(arquivo).replace(/\.(?:ts|tsx|js|jsx|mjs|cjs|py|dart|
|
|
692
|
+
const nomeArquivo = path.basename(arquivo).replace(/\.(?:ts|tsx|js|jsx|mjs|cjs|py|dart|cs|java|go|rs|cpp|cc|cxx|hpp|h)$/i, "");
|
|
695
693
|
const nomeStore = nomeArquivo
|
|
696
694
|
.replace(/(?:[_.-]?(?:repository|repositories|repo|store|storage|persistencia|persistence))$/i, "")
|
|
697
695
|
.trim();
|
|
@@ -1042,20 +1040,6 @@ async function listarArquivosRecursivos(diretorio, extensoes) {
|
|
|
1042
1040
|
}
|
|
1043
1041
|
return encontrados.sort((a, b) => a.localeCompare(b, "pt-BR"));
|
|
1044
1042
|
}
|
|
1045
|
-
const EXTENSOES_ARQUIVOS_CODIGO_DRIFT = [
|
|
1046
|
-
".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
|
|
1047
|
-
".py", ".dart", ".lua", ".php", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
|
|
1048
|
-
".sql", ".psql", ".ddl", ".prisma", ".json",
|
|
1049
|
-
];
|
|
1050
|
-
async function indexarArquivosCodigo(diretorios) {
|
|
1051
|
-
const arquivos = new Set();
|
|
1052
|
-
for (const diretorio of diretorios) {
|
|
1053
|
-
for (const arquivo of await listarArquivosRecursivos(diretorio, EXTENSOES_ARQUIVOS_CODIGO_DRIFT)) {
|
|
1054
|
-
arquivos.add(arquivo);
|
|
1055
|
-
}
|
|
1056
|
-
}
|
|
1057
|
-
return [...arquivos].sort((a, b) => a.localeCompare(b, "pt-BR"));
|
|
1058
|
-
}
|
|
1059
1043
|
function caminhosSimbolicos(baseDiretorio, arquivo) {
|
|
1060
1044
|
const relativo = path.relative(baseDiretorio, arquivo).replace(/\.[^.]+$/, "");
|
|
1061
1045
|
const semPrefixo = relativo
|
|
@@ -1894,57 +1878,6 @@ async function indexarDart(diretorios) {
|
|
|
1894
1878
|
|| a.arquivo.localeCompare(b.arquivo, "pt-BR")),
|
|
1895
1879
|
};
|
|
1896
1880
|
}
|
|
1897
|
-
async function indexarLua(diretorios) {
|
|
1898
|
-
const simbolos = new Map();
|
|
1899
|
-
const recursos = new Map();
|
|
1900
|
-
for (const diretorio of diretorios) {
|
|
1901
|
-
const arquivos = (await listarArquivosRecursivos(diretorio, [".lua"]))
|
|
1902
|
-
.filter((arquivo) => !/(^|[\\/])tests?([\\/]|$)|(?:^|[\\/])spec([\\/]|$)|(?:_spec|_test)\.lua$/i.test(arquivo));
|
|
1903
|
-
for (const arquivo of arquivos) {
|
|
1904
|
-
const codigo = await readFile(arquivo, "utf8");
|
|
1905
|
-
const basesSimbolicas = caminhosSimbolicos(diretorio, arquivo);
|
|
1906
|
-
for (const recurso of extrairRecursosPersistenciaCodigoVivo(arquivo, codigo)) {
|
|
1907
|
-
registrarRecursoDrift(recursos, recurso.origem, recurso.tipo, recurso.nome, recurso.arquivo, recurso.simbolo);
|
|
1908
|
-
}
|
|
1909
|
-
for (const simbolo of extrairSimbolosLua(codigo)) {
|
|
1910
|
-
registrarSimboloGenerico(simbolos, "lua", basesSimbolicas, arquivo, simbolo.simbolo);
|
|
1911
|
-
}
|
|
1912
|
-
}
|
|
1913
|
-
}
|
|
1914
|
-
return {
|
|
1915
|
-
simbolos: [...simbolos.values()],
|
|
1916
|
-
recursos: [...recursos.values()],
|
|
1917
|
-
};
|
|
1918
|
-
}
|
|
1919
|
-
async function indexarPhp(diretorios) {
|
|
1920
|
-
const simbolos = new Map();
|
|
1921
|
-
const rotas = [];
|
|
1922
|
-
const recursos = new Map();
|
|
1923
|
-
for (const diretorio of diretorios) {
|
|
1924
|
-
const arquivos = (await listarArquivosRecursivos(diretorio, [".php"]))
|
|
1925
|
-
.filter((arquivo) => !/(^|[\\/])tests?([\\/]|$)|(?:^|[\\/])spec([\\/]|$)|(?:Test|Spec)\.php$/i.test(arquivo));
|
|
1926
|
-
for (const arquivo of arquivos) {
|
|
1927
|
-
const codigo = await readFile(arquivo, "utf8");
|
|
1928
|
-
const basesSimbolicas = caminhosSimbolicos(diretorio, arquivo);
|
|
1929
|
-
for (const recurso of extrairRecursosPersistenciaCodigoVivo(arquivo, codigo)) {
|
|
1930
|
-
registrarRecursoDrift(recursos, recurso.origem, recurso.tipo, recurso.nome, recurso.arquivo, recurso.simbolo);
|
|
1931
|
-
}
|
|
1932
|
-
for (const simbolo of extrairSimbolosPhp(codigo)) {
|
|
1933
|
-
registrarSimboloPhp(simbolos, basesSimbolicas, arquivo, simbolo.simbolo);
|
|
1934
|
-
}
|
|
1935
|
-
for (const rota of extrairRotasPhp(codigo)) {
|
|
1936
|
-
rotas.push({
|
|
1937
|
-
origem: "php",
|
|
1938
|
-
metodo: rota.metodo,
|
|
1939
|
-
caminho: rota.caminho,
|
|
1940
|
-
arquivo,
|
|
1941
|
-
simbolo: rota.simbolo,
|
|
1942
|
-
});
|
|
1943
|
-
}
|
|
1944
|
-
}
|
|
1945
|
-
}
|
|
1946
|
-
return { simbolos: [...simbolos.values()], rotas, recursos: [...recursos.values()] };
|
|
1947
|
-
}
|
|
1948
1881
|
function registrarSimboloGenerico(simbolos, origem, basesSimbolicas, arquivo, simbolo) {
|
|
1949
1882
|
for (const baseSimbolica of basesSimbolicas) {
|
|
1950
1883
|
const caminho = `${baseSimbolica}.${simbolo}`;
|
|
@@ -1968,30 +1901,6 @@ function registrarSimboloGenerico(simbolos, origem, basesSimbolicas, arquivo, si
|
|
|
1968
1901
|
}
|
|
1969
1902
|
}
|
|
1970
1903
|
}
|
|
1971
|
-
function registrarSimboloPhp(simbolos, basesSimbolicas, arquivo, simbolo) {
|
|
1972
|
-
registrarSimboloGenerico(simbolos, "php", basesSimbolicas, arquivo, simbolo);
|
|
1973
|
-
const partes = simbolo.split(".").filter(Boolean);
|
|
1974
|
-
const aliases = new Set([simbolo]);
|
|
1975
|
-
const ultimo = partes.at(-1);
|
|
1976
|
-
const penultimo = partes.at(-2);
|
|
1977
|
-
if (ultimo) {
|
|
1978
|
-
aliases.add(ultimo);
|
|
1979
|
-
}
|
|
1980
|
-
if (penultimo && ultimo) {
|
|
1981
|
-
aliases.add(`${penultimo}.${ultimo}`);
|
|
1982
|
-
}
|
|
1983
|
-
for (const alias of aliases) {
|
|
1984
|
-
if (!alias || simbolos.has(alias)) {
|
|
1985
|
-
continue;
|
|
1986
|
-
}
|
|
1987
|
-
simbolos.set(alias, {
|
|
1988
|
-
origem: "php",
|
|
1989
|
-
caminho: alias,
|
|
1990
|
-
arquivo,
|
|
1991
|
-
simbolo,
|
|
1992
|
-
});
|
|
1993
|
-
}
|
|
1994
|
-
}
|
|
1995
1904
|
async function indexarDotnet(diretorios) {
|
|
1996
1905
|
const simbolos = new Map();
|
|
1997
1906
|
const rotas = [];
|
|
@@ -2134,7 +2043,7 @@ async function indexarPersistenciaDeclarativa(diretorios) {
|
|
|
2134
2043
|
const arquivos = await listarArquivosRecursivos(diretorio, [
|
|
2135
2044
|
".sql", ".psql", ".ddl", ".prisma",
|
|
2136
2045
|
".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
|
|
2137
|
-
".py", ".dart", ".
|
|
2046
|
+
".py", ".dart", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
|
|
2138
2047
|
]);
|
|
2139
2048
|
for (const arquivo of arquivos) {
|
|
2140
2049
|
const codigo = await readFile(arquivo, "utf8");
|
|
@@ -2338,7 +2247,7 @@ async function indexarPersistenciaDetalhada(diretorios) {
|
|
|
2338
2247
|
for (const diretorio of diretorios) {
|
|
2339
2248
|
const arquivos = await listarArquivosRecursivos(diretorio, [
|
|
2340
2249
|
".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
|
|
2341
|
-
".py", ".dart", ".
|
|
2250
|
+
".py", ".dart", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
|
|
2342
2251
|
".sql", ".psql", ".ddl", ".prisma",
|
|
2343
2252
|
]);
|
|
2344
2253
|
for (const arquivo of arquivos) {
|
|
@@ -2571,7 +2480,7 @@ function extrairFontesHttpTypeScript(fontesLegado) {
|
|
|
2571
2480
|
return fontesLegado.filter((fonte) => fonte === "nestjs" || fonte === "nextjs" || fonte === "firebase");
|
|
2572
2481
|
}
|
|
2573
2482
|
function extrairFontesHttpBackend(fontesLegado) {
|
|
2574
|
-
return fontesLegado.filter((fonte) => fonte === "
|
|
2483
|
+
return fontesLegado.filter((fonte) => fonte === "dotnet" || fonte === "java" || fonte === "go" || fonte === "rust");
|
|
2575
2484
|
}
|
|
2576
2485
|
function ultimoSegmentoSimbolico(caminho) {
|
|
2577
2486
|
const partes = caminho.split(".").filter(Boolean);
|
|
@@ -2717,10 +2626,6 @@ function escolherRotasEsperadas(task, fontesLegado) {
|
|
|
2717
2626
|
}
|
|
2718
2627
|
return ["fastapi", "flask"];
|
|
2719
2628
|
}
|
|
2720
|
-
const implPhp = task.implementacoesExternas.find((impl) => impl.origem === "php");
|
|
2721
|
-
if (implPhp) {
|
|
2722
|
-
return fontesBackend.includes("php") ? ["php"] : ["php"];
|
|
2723
|
-
}
|
|
2724
2629
|
const implCs = task.implementacoesExternas.find((impl) => impl.origem === "cs");
|
|
2725
2630
|
if (implCs) {
|
|
2726
2631
|
return fontesBackend.includes("dotnet") ? ["dotnet"] : ["dotnet"];
|
|
@@ -2925,12 +2830,9 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
2925
2830
|
diretoriosIgnoradosAtivos = resolverDiretoriosIgnoradosAtivos(opcoesResolvidas);
|
|
2926
2831
|
try {
|
|
2927
2832
|
const diretoriosCodigoAtivos = resolverDiretoriosCodigoEscopoReal(contexto, configuracaoEscopo);
|
|
2928
|
-
const arquivosCodigo = await indexarArquivosCodigo(diretoriosCodigoAtivos);
|
|
2929
2833
|
const indexTs = await indexarTypeScript(diretoriosCodigoAtivos);
|
|
2930
2834
|
const indexPy = await indexarPython(diretoriosCodigoAtivos);
|
|
2931
2835
|
const indexDart = await indexarDart(diretoriosCodigoAtivos);
|
|
2932
|
-
const indexLua = await indexarLua(diretoriosCodigoAtivos);
|
|
2933
|
-
const indexPhp = await indexarPhp(diretoriosCodigoAtivos);
|
|
2934
2836
|
const indexDotnet = await indexarDotnet(diretoriosCodigoAtivos);
|
|
2935
2837
|
const indexJava = await indexarJava(diretoriosCodigoAtivos);
|
|
2936
2838
|
const indexGo = await indexarGo(diretoriosCodigoAtivos);
|
|
@@ -2942,8 +2844,6 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
2942
2844
|
...indexTs.simbolos,
|
|
2943
2845
|
...indexPy.simbolos,
|
|
2944
2846
|
...indexDart.simbolos,
|
|
2945
|
-
...indexLua.simbolos,
|
|
2946
|
-
...indexPhp.simbolos,
|
|
2947
2847
|
...indexDotnet.simbolos,
|
|
2948
2848
|
...indexJava.simbolos,
|
|
2949
2849
|
...indexGo.simbolos,
|
|
@@ -2954,8 +2854,6 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
2954
2854
|
...indexTs.simbolos.map((item) => [item.caminho, item]),
|
|
2955
2855
|
...indexPy.simbolos.map((item) => [item.caminho, item]),
|
|
2956
2856
|
...indexDart.simbolos.map((item) => [item.caminho, item]),
|
|
2957
|
-
...indexLua.simbolos.map((item) => [item.caminho, item]),
|
|
2958
|
-
...indexPhp.simbolos.map((item) => [item.caminho, item]),
|
|
2959
2857
|
...indexDotnet.simbolos.map((item) => [item.caminho, item]),
|
|
2960
2858
|
...indexJava.simbolos.map((item) => [item.caminho, item]),
|
|
2961
2859
|
...indexGo.simbolos.map((item) => [item.caminho, item]),
|
|
@@ -2966,8 +2864,6 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
2966
2864
|
...indexTs.recursos,
|
|
2967
2865
|
...indexPy.recursos,
|
|
2968
2866
|
...indexDart.recursos,
|
|
2969
|
-
...indexLua.recursos,
|
|
2970
|
-
...indexPhp.recursos,
|
|
2971
2867
|
...indexDotnet.recursos,
|
|
2972
2868
|
...indexJava.recursos,
|
|
2973
2869
|
...indexGo.recursos,
|
|
@@ -2980,14 +2876,12 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
2980
2876
|
...indexTs.rotas,
|
|
2981
2877
|
...indexPy.rotas,
|
|
2982
2878
|
...indexDart.rotas,
|
|
2983
|
-
...indexPhp.rotas,
|
|
2984
2879
|
...indexDotnet.rotas,
|
|
2985
2880
|
...indexJava.rotas,
|
|
2986
2881
|
...indexGo.rotas,
|
|
2987
2882
|
...indexRust.rotas,
|
|
2988
2883
|
];
|
|
2989
2884
|
const todosArquivosConhecidos = [...new Set([
|
|
2990
|
-
...arquivosCodigo,
|
|
2991
2885
|
...todosSimbolos.map((item) => item.arquivo),
|
|
2992
2886
|
...todasRotasIndexadas.map((item) => item.arquivo),
|
|
2993
2887
|
...todosRecursos.map((item) => item.arquivo),
|
|
@@ -3614,7 +3508,7 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
3614
3508
|
const EXTENSOES_BUSCA_IMPACTO = [
|
|
3615
3509
|
".sema",
|
|
3616
3510
|
".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
|
|
3617
|
-
".py", ".dart", ".
|
|
3511
|
+
".py", ".dart", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
|
|
3618
3512
|
".sql", ".psql", ".ddl", ".prisma", ".json",
|
|
3619
3513
|
];
|
|
3620
3514
|
function construirVariantesSemanticas(valor) {
|