@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.
Files changed (66) hide show
  1. package/README.md +104 -112
  2. package/SEMA_BRIEF.curto.txt +6 -6
  3. package/SEMA_BRIEF.md +17 -24
  4. package/SEMA_BRIEF.micro.txt +5 -5
  5. package/SEMA_INDEX.json +86 -224
  6. package/dist/drift.d.ts +3 -3
  7. package/dist/drift.js +5 -111
  8. package/dist/drift.js.map +1 -1
  9. package/dist/importador.d.ts +1 -1
  10. package/dist/importador.js +1 -200
  11. package/dist/importador.js.map +1 -1
  12. package/dist/index.js +59 -479
  13. package/dist/index.js.map +1 -1
  14. package/dist/projeto.js +0 -20
  15. package/dist/projeto.js.map +1 -1
  16. package/dist/tipos.d.ts +1 -1
  17. package/docs/AGENT_STARTER.md +9 -8
  18. package/docs/cli.md +106 -119
  19. package/docs/como-ensinar-a-sema-para-ia.md +4 -4
  20. package/docs/env.md +56 -56
  21. package/docs/fluxo-pratico-ia-sema.md +171 -167
  22. package/docs/integracao-com-ia.md +98 -96
  23. package/docs/mcp.md +51 -53
  24. package/docs/pagamento-ponta-a-ponta.md +11 -1
  25. package/docs/persistencia-vendor-first.md +1 -1
  26. package/docs/prompt-base-ia-sema.md +6 -5
  27. package/docs/rollback.md +1 -1
  28. package/docs/sintaxe.md +196 -394
  29. package/exemplos/agendamento.sema +0 -1
  30. package/exemplos/assinatura.sema +0 -3
  31. package/exemplos/auditoria.sema +2 -1
  32. package/exemplos/estoque.sema +2 -1
  33. package/exemplos/fila.sema +2 -3
  34. package/exemplos/multi_tenant.sema +2 -2
  35. package/exemplos/notificacao.sema +53 -2
  36. package/exemplos/operacao_estrategia.sema +231 -0
  37. package/exemplos/pagamento.sema +214 -2
  38. package/exemplos/pedido.sema +156 -20
  39. package/exemplos/replica_analitica_erp.sema +160 -0
  40. package/exemplos/webhook.sema +2 -4
  41. package/node_modules/@sema/gerador-css/package.json +1 -1
  42. package/node_modules/@sema/gerador-dart/package.json +1 -1
  43. package/node_modules/@sema/gerador-html/package.json +1 -1
  44. package/node_modules/@sema/gerador-javascript/package.json +1 -1
  45. package/node_modules/@sema/gerador-lua/package.json +1 -1
  46. package/node_modules/@sema/gerador-python/package.json +1 -1
  47. package/node_modules/@sema/gerador-typescript/package.json +1 -1
  48. package/node_modules/@sema/nucleo/dist/ast/tipos.d.ts +2 -4
  49. package/node_modules/@sema/nucleo/dist/formatador/index.js +14 -42
  50. package/node_modules/@sema/nucleo/dist/formatador/index.js.map +1 -1
  51. package/node_modules/@sema/nucleo/dist/ir/conversor.js +9 -204
  52. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +1 -1
  53. package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +3 -35
  54. package/node_modules/@sema/nucleo/dist/lexer/tokens.js +0 -21
  55. package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +1 -1
  56. package/node_modules/@sema/nucleo/dist/parser/parser.js +0 -40
  57. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +1 -1
  58. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +6 -5
  59. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +76 -307
  60. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +1 -1
  61. package/node_modules/@sema/nucleo/dist/semantico/estruturas.d.ts +2 -0
  62. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js +32 -2
  63. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +1 -1
  64. package/node_modules/@sema/nucleo/package.json +1 -1
  65. package/node_modules/@sema/padroes/package.json +1 -1
  66. 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|lua|cs|java|go|rs|cpp|cc|cxx|hpp|h)$/i, "");
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", ".lua", ".php", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
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", ".lua", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
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 === "php" || fonte === "dotnet" || fonte === "java" || fonte === "go" || fonte === "rust");
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", ".lua", ".php", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
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) {