@semacode/cli 1.5.28 → 1.5.29

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 (81) hide show
  1. package/AGENTS.md +279 -265
  2. package/AGENT_CONTEXT_PACK.json +164 -0
  3. package/README.md +144 -144
  4. package/SEMA_BRIEF.curto.txt +7 -7
  5. package/SEMA_BRIEF.md +464 -65
  6. package/SEMA_BRIEF.micro.txt +6 -6
  7. package/SEMA_INDEX.json +6723 -669
  8. package/dist/bridge.d.ts +52 -0
  9. package/dist/bridge.js +318 -0
  10. package/dist/bridge.js.map +1 -0
  11. package/dist/comandos.d.ts +11 -0
  12. package/dist/comandos.js +110 -0
  13. package/dist/comandos.js.map +1 -0
  14. package/dist/contexto.d.ts +34 -0
  15. package/dist/contexto.js +197 -0
  16. package/dist/contexto.js.map +1 -0
  17. package/dist/drift.d.ts +1 -1
  18. package/dist/drift.js +32 -5
  19. package/dist/drift.js.map +1 -1
  20. package/dist/index.js +391 -64
  21. package/dist/index.js.map +1 -1
  22. package/dist/lua-symbols.d.ts +0 -6
  23. package/dist/lua-symbols.js +11 -78
  24. package/dist/lua-symbols.js.map +1 -1
  25. package/dist/projeto.js +6 -0
  26. package/dist/projeto.js.map +1 -1
  27. package/dist/tipos.d.ts +1 -1
  28. package/docs/AGENT_STARTER.md +109 -109
  29. package/docs/api.md +82 -0
  30. package/docs/cli.md +175 -175
  31. package/docs/como-ensinar-a-sema-para-ia.md +155 -155
  32. package/docs/deploy.md +93 -93
  33. package/docs/documentacao.md +88 -88
  34. package/docs/env.md +105 -105
  35. package/docs/extensao-vscode.md +53 -53
  36. package/docs/fluxo-pratico-ia-sema.md +187 -187
  37. package/docs/instalacao-e-primeiro-uso.md +134 -134
  38. package/docs/integracao-com-ia.md +110 -110
  39. package/docs/mcp.md +292 -292
  40. package/docs/pagamento-ponta-a-ponta.md +171 -171
  41. package/docs/persistencia-vendor-first.md +151 -151
  42. package/docs/prompt-base-ia-sema.md +111 -111
  43. package/docs/repositories.md +54 -54
  44. package/docs/rollback.md +49 -49
  45. package/docs/seguranca.md +126 -126
  46. package/docs/sintaxe.md +218 -218
  47. package/exemplos/author_obra_comum.sema +294 -294
  48. package/exemplos/author_tema_sensivel.sema +264 -264
  49. package/exemplos/profile_game.sema +114 -114
  50. package/exemplos/profile_legal.sema +105 -105
  51. package/exemplos/profile_ops.sema +110 -110
  52. package/exemplos/profile_research.sema +104 -104
  53. package/exemplos/profile_software.sema +123 -123
  54. package/exemplos/profile_workflow_n8n.sema +99 -99
  55. package/llms-full.txt +10 -9
  56. package/llms.txt +8 -7
  57. package/node_modules/@sema/gerador-css/package.json +1 -1
  58. package/node_modules/@sema/gerador-dart/package.json +1 -1
  59. package/node_modules/@sema/gerador-html/package.json +1 -1
  60. package/node_modules/@sema/gerador-javascript/package.json +1 -1
  61. package/node_modules/@sema/gerador-lua/package.json +1 -1
  62. package/node_modules/@sema/gerador-python/package.json +1 -1
  63. package/node_modules/@sema/gerador-typescript/package.json +1 -1
  64. package/node_modules/@sema/nucleo/dist/ast/tipos.d.ts +1 -1
  65. package/node_modules/@sema/nucleo/dist/index.d.ts +17 -0
  66. package/node_modules/@sema/nucleo/dist/index.js +28 -0
  67. package/node_modules/@sema/nucleo/dist/index.js.map +1 -1
  68. package/node_modules/@sema/nucleo/dist/ir/conversor.js +4 -0
  69. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +1 -1
  70. package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +3 -3
  71. package/node_modules/@sema/nucleo/dist/parser/parser.js +2 -0
  72. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +1 -1
  73. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +2 -2
  74. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +3 -1
  75. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +1 -1
  76. package/node_modules/@sema/nucleo/package.json +1 -1
  77. package/node_modules/@sema/padroes/package.json +1 -1
  78. package/package.json +11 -10
  79. package/dist/php-symbols.d.ts +0 -24
  80. package/dist/php-symbols.js +0 -375
  81. package/dist/php-symbols.js.map +0 -1
@@ -0,0 +1,197 @@
1
+ /**
2
+ * Gerador de pacote de contexto para chats web (ChatGPT, Lovable, etc.).
3
+ *
4
+ * A CLI lê contratos e código selecionado do disco local e gera um pacote
5
+ * compacto que o usuário cola no chat. Isso elimina o sync manual — a CLI
6
+ * faz o trabalho pesado de I/O local e entrega um payload pronto.
7
+ *
8
+ * Contrato: contratos/sema/mcp_client_bridge.sema — task gerar_pacote_contexto_para_chat
9
+ */
10
+ import { readFile, mkdir, writeFile } from "node:fs/promises";
11
+ import path from "node:path";
12
+ // ---------------------------------------------------------------------------
13
+ // Constantes
14
+ // ---------------------------------------------------------------------------
15
+ const LIMITE_TAMANHO_INLINE = 100_000; // 100KB
16
+ const PADROES_SEGREDO = [
17
+ /(?:api[_-]?key|secret|token|password|senha)\s*[:=]\s*["']?[A-Za-z0-9_\-]{16,}/gi,
18
+ /\bsk-[A-Za-z0-9_\-]{20,}\b/g,
19
+ /\beyJ[A-Za-z0-9_\-]+\.[A-Za-z0-9_\-]+\.[A-Za-z0-9_\-]+\b/g,
20
+ ];
21
+ // ---------------------------------------------------------------------------
22
+ // Gerar pacote de contexto para chat
23
+ // ---------------------------------------------------------------------------
24
+ export async function gerarPacoteContextoChat(entrada, cwd = process.cwd()) {
25
+ if (!entrada.contratos || entrada.contratos.length === 0) {
26
+ throw new Error("Nenhum contrato informado. Use --contratos <arquivo1.sema> <arquivo2.sema>");
27
+ }
28
+ // Ler contratos
29
+ const contratosConteudo = [];
30
+ for (const contrato of entrada.contratos) {
31
+ const absoluto = path.resolve(cwd, contrato);
32
+ const conteudo = await readFile(absoluto, "utf8");
33
+ contratosConteudo.push({ caminho: contrato, conteudo });
34
+ }
35
+ // Ler código selecionado (se houver)
36
+ const codigoConteudo = [];
37
+ if (entrada.codigoSelecionado) {
38
+ for (const arquivo of entrada.codigoSelecionado) {
39
+ try {
40
+ const absoluto = path.resolve(cwd, arquivo);
41
+ let conteudo = await readFile(absoluto, "utf8");
42
+ conteudo = sanitizarConteudo(conteudo);
43
+ codigoConteudo.push({ caminho: arquivo, conteudo });
44
+ }
45
+ catch {
46
+ // Arquivo não existe — ignora silenciosamente
47
+ }
48
+ }
49
+ }
50
+ // Montar resumo
51
+ const modulos = contratosConteudo.map((c) => extrairModulo(c.conteudo)).filter(Boolean);
52
+ const tarefas = contratosConteudo.flatMap((c) => extrairTarefas(c.conteudo));
53
+ const rotas = contratosConteudo.flatMap((c) => extrairRotas(c.conteudo));
54
+ const resumo = [
55
+ `# Contexto Sema para Chat`,
56
+ ``,
57
+ `**Módulos:** ${modulos.join(", ") || "nenhum"}`,
58
+ `**Tarefas:** ${tarefas.length}`,
59
+ `**Rotas:** ${rotas.length}`,
60
+ `**Arquivos de código:** ${codigoConteudo.length}`,
61
+ ``,
62
+ `## Contratos`,
63
+ ...contratosConteudo.map((c) => `### ${c.caminho}\n\`\`\`sema\n${c.conteudo}\n\`\`\``),
64
+ ``,
65
+ ].join("\n");
66
+ // Código selecionado (resumido)
67
+ const codigoResumido = codigoConteudo.length > 0
68
+ ? [
69
+ `## Código Selecionado`,
70
+ ...codigoConteudo.map((c) => {
71
+ const ext = path.extname(c.caminho).slice(1) || "txt";
72
+ return `### ${c.caminho}\n\`\`\`${ext}\n${c.conteudo}\n\`\`\``;
73
+ }),
74
+ ``,
75
+ ].join("\n")
76
+ : "";
77
+ // IR resumida
78
+ const irResumida = [
79
+ `## IR Resumida`,
80
+ `- Módulos: ${modulos.join(", ") || "nenhum"}`,
81
+ `- Tarefas: ${tarefas.map((t) => `\`${t}\``).join(", ") || "nenhuma"}`,
82
+ `- Rotas: ${rotas.map((r) => `\`${r}\``).join(", ") || "nenhuma"}`,
83
+ ``,
84
+ ].join("\n");
85
+ // Drift resumido (placeholder — a CLI faz drift real via `sema drift`)
86
+ const driftResumido = entrada.incluirDrift
87
+ ? [
88
+ `## Drift`,
89
+ `⚠️ Drift real requer \`sema drift\` CLI.`,
90
+ `Este pacote contém contratos e código para o MCP executar drift remoto.`,
91
+ ``,
92
+ ].join("\n")
93
+ : `## Drift\nNão incluído (use --drift para incluir).\n`;
94
+ // Impact map (placeholder)
95
+ const impactMap = entrada.incluirImpacto
96
+ ? tarefas.map((t) => `- \`${t}\`: contratos/${t}.sema → implementação`)
97
+ : [];
98
+ // Docs relevantes
99
+ const docsRelevantes = [
100
+ "AGENTS.md",
101
+ "docs/mcp.md",
102
+ "docs/cli.md",
103
+ "docs/sintaxe.md",
104
+ ];
105
+ // Checksum simples
106
+ const conteudoTotal = contratosConteudo.map((c) => c.conteudo).join("");
107
+ const checksum = checksumSimples(conteudoTotal);
108
+ const pacote = {
109
+ contratos: entrada.contratos,
110
+ resumo,
111
+ irResumida,
112
+ driftResumido,
113
+ impactMap,
114
+ docsRelevantes,
115
+ checksum,
116
+ };
117
+ // Montar texto inline completo
118
+ const inlineTexto = [
119
+ `<!-- SEMA_CONTEXT_PACK v1 checksum=${checksum} -->`,
120
+ resumo,
121
+ codigoResumido,
122
+ irResumida,
123
+ driftResumido,
124
+ impactMap.length > 0 ? `## Impact Map\n${impactMap.join("\n")}\n` : "",
125
+ `## Docs Relevantes`,
126
+ `Leia estes arquivos antes de agir:`,
127
+ ...docsRelevantes.map((d) => `- \`${d}\``),
128
+ ``,
129
+ `## Instruções para o Agente`,
130
+ `1. Leia os contratos acima — eles são a fonte da verdade`,
131
+ `2. Código selecionado é contexto adicional, não substitui o contrato`,
132
+ `3. Antes de qualquer ação: crie, edite ou remova o .sema aplicável`,
133
+ `4. Use \`sema_docs_impacto\` com sua intenção declarada`,
134
+ `5. Finalize com \`sema_finalizar_mudanca\``,
135
+ ].join("\n");
136
+ const tamanhoBytes = Buffer.byteLength(inlineTexto, "utf8");
137
+ const prontoParaChat = tamanhoBytes <= LIMITE_TAMANHO_INLINE;
138
+ // Gerar arquivos se solicitado
139
+ const arquivosGerados = [];
140
+ if (entrada.formatoSaida === "arquivo" || entrada.formatoSaida === "ambos") {
141
+ const pastaSaida = path.resolve(cwd, ".tmp", "sema-contexto-chat");
142
+ await mkdir(pastaSaida, { recursive: true });
143
+ const arquivoContexto = path.join(pastaSaida, "SEMA_CONTEXT_CHAT.md");
144
+ await writeFile(arquivoContexto, inlineTexto, "utf8");
145
+ arquivosGerados.push(arquivoContexto);
146
+ // Também gerar JSON estruturado
147
+ const arquivoJson = path.join(pastaSaida, "contexto-chat.json");
148
+ await writeFile(arquivoJson, JSON.stringify({ pacote, tamanhoBytes, prontoParaChat }, null, 2), "utf8");
149
+ arquivosGerados.push(arquivoJson);
150
+ }
151
+ return {
152
+ pacote,
153
+ prontoParaChat,
154
+ tamanhoBytes,
155
+ arquivosGerados,
156
+ inlineTexto: entrada.formatoSaida === "inline" || entrada.formatoSaida === "ambos" ? inlineTexto : undefined,
157
+ };
158
+ }
159
+ // ---------------------------------------------------------------------------
160
+ // Helpers de extração
161
+ // ---------------------------------------------------------------------------
162
+ function extrairModulo(conteudo) {
163
+ const match = conteudo.match(/^module\s+([\w.]+)\s*\{/m);
164
+ return match ? match[1] : null;
165
+ }
166
+ function extrairTarefas(conteudo) {
167
+ const tarefas = [];
168
+ const regex = /^\s*task\s+(\w+)\s*\{/gm;
169
+ let match;
170
+ while ((match = regex.exec(conteudo)) !== null) {
171
+ tarefas.push(match[1]);
172
+ }
173
+ return tarefas;
174
+ }
175
+ function extrairRotas(conteudo) {
176
+ const rotas = [];
177
+ const regex = /^\s*route\s+(\w+)\s*\{/gm;
178
+ let match;
179
+ while ((match = regex.exec(conteudo)) !== null) {
180
+ rotas.push(match[1]);
181
+ }
182
+ return rotas;
183
+ }
184
+ function sanitizarConteudo(conteudo) {
185
+ for (const padrao of PADROES_SEGREDO) {
186
+ conteudo = conteudo.replace(padrao, "[REDACTED]");
187
+ }
188
+ return conteudo;
189
+ }
190
+ function checksumSimples(texto) {
191
+ let hash = 0;
192
+ for (let i = 0; i < texto.length; i++) {
193
+ hash = ((hash << 5) - hash + texto.charCodeAt(i)) | 0;
194
+ }
195
+ return Math.abs(hash).toString(16).padStart(8, "0");
196
+ }
197
+ //# sourceMappingURL=contexto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contexto.js","sourceRoot":"","sources":["../src/contexto.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,IAAI,MAAM,WAAW,CAAC;AAkC7B,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,qBAAqB,GAAG,OAAO,CAAC,CAAC,QAAQ;AAE/C,MAAM,eAAe,GAAG;IACtB,iFAAiF;IACjF,6BAA6B;IAC7B,2DAA2D;CAC5D,CAAC;AAEF,8EAA8E;AAC9E,qCAAqC;AACrC,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAA4B,EAC5B,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAEnB,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;IAChG,CAAC;IAED,gBAAgB;IAChB,MAAM,iBAAiB,GAAiD,EAAE,CAAC;IAC3E,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClD,iBAAiB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,qCAAqC;IACrC,MAAM,cAAc,GAAiD,EAAE,CAAC;IACxE,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC9B,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAChD,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBAC5C,IAAI,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAChD,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBACvC,cAAc,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YACtD,CAAC;YAAC,MAAM,CAAC;gBACP,8CAA8C;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEzE,MAAM,MAAM,GAAG;QACb,2BAA2B;QAC3B,EAAE;QACF,gBAAgB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE;QAChD,gBAAgB,OAAO,CAAC,MAAM,EAAE;QAChC,cAAc,KAAK,CAAC,MAAM,EAAE;QAC5B,2BAA2B,cAAc,CAAC,MAAM,EAAE;QAClD,EAAE;QACF,cAAc;QACd,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,iBAAiB,CAAC,CAAC,QAAQ,UAAU,CAAC;QACtF,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,gCAAgC;IAChC,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC;QAC9C,CAAC,CAAC;YACE,uBAAuB;YACvB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;gBACtD,OAAO,OAAO,CAAC,CAAC,OAAO,WAAW,GAAG,KAAK,CAAC,CAAC,QAAQ,UAAU,CAAC;YACjE,CAAC,CAAC;YACF,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC;QACd,CAAC,CAAC,EAAE,CAAC;IAEP,cAAc;IACd,MAAM,UAAU,GAAG;QACjB,gBAAgB;QAChB,cAAc,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE;QAC9C,cAAc,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE;QACtE,YAAY,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE;QAClE,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,uEAAuE;IACvE,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY;QACxC,CAAC,CAAC;YACE,UAAU;YACV,0CAA0C;YAC1C,yEAAyE;YACzE,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC;QACd,CAAC,CAAC,sDAAsD,CAAC;IAE3D,2BAA2B;IAC3B,MAAM,SAAS,GAAa,OAAO,CAAC,cAAc;QAChD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,uBAAuB,CAAC;QACvE,CAAC,CAAC,EAAE,CAAC;IAEP,kBAAkB;IAClB,MAAM,cAAc,GAAG;QACrB,WAAW;QACX,aAAa;QACb,aAAa;QACb,iBAAiB;KAClB,CAAC;IAEF,mBAAmB;IACnB,MAAM,aAAa,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAuB;QACjC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM;QACN,UAAU;QACV,aAAa;QACb,SAAS;QACT,cAAc;QACd,QAAQ;KACT,CAAC;IAEF,+BAA+B;IAC/B,MAAM,WAAW,GAAG;QAClB,sCAAsC,QAAQ,MAAM;QACpD,MAAM;QACN,cAAc;QACd,UAAU;QACV,aAAa;QACb,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QACtE,oBAAoB;QACpB,oCAAoC;QACpC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAC1C,EAAE;QACF,6BAA6B;QAC7B,0DAA0D;QAC1D,sEAAsE;QACtE,oEAAoE;QACpE,yDAAyD;QACzD,4CAA4C;KAC7C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC5D,MAAM,cAAc,GAAG,YAAY,IAAI,qBAAqB,CAAC;IAE7D,+BAA+B;IAC/B,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,IAAI,OAAO,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;QAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC;QACnE,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC;QACtE,MAAM,SAAS,CAAC,eAAe,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QACtD,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAEtC,gCAAgC;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;QAChE,MAAM,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACxG,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IAED,OAAO;QACL,MAAM;QACN,cAAc;QACd,YAAY;QACZ,eAAe;QACf,WAAW,EAAE,OAAO,CAAC,YAAY,KAAK,QAAQ,IAAI,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;KAC7G,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACzD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB;IACtC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,yBAAyB,CAAC;IACxC,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IACpC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,0BAA0B,CAAC;IACzC,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACtD,CAAC"}
package/dist/drift.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { EngineBanco, NivelConfiancaSemantica, NivelRiscoSemantico, TipoRecursoPersistencia } from "@sema/nucleo";
2
2
  import type { ContextoProjetoCarregado } from "./projeto.js";
3
- type OrigemCodigoDrift = "ts" | "py" | "dart" | "cs" | "java" | "go" | "rust" | "cpp";
3
+ type OrigemCodigoDrift = "ts" | "py" | "dart" | "lua" | "cs" | "java" | "go" | "rust" | "cpp";
4
4
  type OrigemSimboloDrift = OrigemCodigoDrift | "sql";
5
5
  interface SimboloResolvido {
6
6
  origem: OrigemSimboloDrift;
package/dist/drift.js CHANGED
@@ -6,6 +6,7 @@ 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";
9
10
  import { contarIndentacaoPython, extrairRotasFlaskDecoradas, normalizarCaminhoFlask } from "./python-http.js";
10
11
  import { extrairRotasRust, extrairSimbolosRust } from "./rust-http.js";
11
12
  import { extrairRotasTypeScriptHttp } from "./typescript-http.js";
@@ -762,7 +763,7 @@ function extrairRecursosArquivoLocal(arquivo, codigo) {
762
763
  const nomeBase = path.basename(literal, path.extname(literal));
763
764
  registrarRecursoDrift(recursos, "arquivo", "arquivo_local", nomeBase, arquivo);
764
765
  }
765
- const nomeArquivo = path.basename(arquivo).replace(/\.(?:ts|tsx|js|jsx|mjs|cjs|py|dart|cs|java|go|rs|cpp|cc|cxx|hpp|h)$/i, "");
766
+ 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, "");
766
767
  const nomeStore = nomeArquivo
767
768
  .replace(/(?:[_.-]?(?:repository|repositories|repo|store|storage|persistencia|persistence))$/i, "")
768
769
  .trim();
@@ -1123,7 +1124,7 @@ async function listarArquivosRecursivos(diretorio, extensoes) {
1123
1124
  }
1124
1125
  const EXTENSOES_ARQUIVOS_RASTREAVEIS_DRIFT = [
1125
1126
  ".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
1126
- ".py", ".dart", ".cs", ".java", ".go", ".rs",
1127
+ ".py", ".dart", ".lua", ".cs", ".java", ".go", ".rs",
1127
1128
  ".cpp", ".cc", ".cxx", ".hpp", ".h",
1128
1129
  ".sql", ".psql", ".ddl", ".prisma",
1129
1130
  ".md", ".mdx", ".txt", ".json", ".jsonl",
@@ -2136,6 +2137,28 @@ async function indexarCpp(diretorios) {
2136
2137
  recursos: [...recursos.values()],
2137
2138
  };
2138
2139
  }
2140
+ async function indexarLua(diretorios) {
2141
+ const simbolos = new Map();
2142
+ const recursos = new Map();
2143
+ for (const diretorio of diretorios) {
2144
+ const arquivos = (await listarArquivosRecursivos(diretorio, [".lua"]))
2145
+ .filter((arquivo) => !/(^|[\\/])(vendor|build|dist|generated|tests?)([\\/]|$)/i.test(arquivo));
2146
+ for (const arquivo of arquivos) {
2147
+ const codigo = await readFile(arquivo, "utf8");
2148
+ const basesSimbolicas = caminhosSimbolicos(diretorio, arquivo);
2149
+ for (const recurso of extrairRecursosPersistenciaCodigoVivo(arquivo, codigo)) {
2150
+ registrarRecursoDrift(recursos, recurso.origem, recurso.tipo, recurso.nome, recurso.arquivo, recurso.simbolo);
2151
+ }
2152
+ for (const simbolo of extrairSimbolosLua(codigo)) {
2153
+ registrarSimboloGenerico(simbolos, "lua", basesSimbolicas, arquivo, simbolo.simbolo);
2154
+ }
2155
+ }
2156
+ }
2157
+ return {
2158
+ simbolos: [...simbolos.values()],
2159
+ recursos: [...recursos.values()],
2160
+ };
2161
+ }
2139
2162
  async function indexarPersistenciaDeclarativa(diretorios) {
2140
2163
  const recursos = new Map();
2141
2164
  const simbolos = new Map();
@@ -2143,7 +2166,7 @@ async function indexarPersistenciaDeclarativa(diretorios) {
2143
2166
  const arquivos = await listarArquivosRecursivos(diretorio, [
2144
2167
  ".sql", ".psql", ".ddl", ".prisma",
2145
2168
  ".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
2146
- ".py", ".dart", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
2169
+ ".py", ".dart", ".lua", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
2147
2170
  ]);
2148
2171
  for (const arquivo of arquivos) {
2149
2172
  const codigo = await readFile(arquivo, "utf8");
@@ -2350,7 +2373,7 @@ async function indexarPersistenciaDetalhada(diretorios) {
2350
2373
  for (const diretorio of diretorios) {
2351
2374
  const arquivos = await listarArquivosRecursivos(diretorio, [
2352
2375
  ".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
2353
- ".py", ".dart", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
2376
+ ".py", ".dart", ".lua", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
2354
2377
  ".sql", ".psql", ".ddl", ".prisma",
2355
2378
  ]);
2356
2379
  for (const arquivo of arquivos) {
@@ -2943,6 +2966,7 @@ export async function analisarDriftLegado(contexto, opcoes) {
2943
2966
  const indexJava = await indexarJava(diretoriosCodigoAtivos);
2944
2967
  const indexGo = await indexarGo(diretoriosCodigoAtivos);
2945
2968
  const indexRust = await indexarRust(diretoriosCodigoAtivos);
2969
+ const indexLua = await indexarLua(diretoriosCodigoAtivos);
2946
2970
  const indexPersistencia = await indexarPersistenciaDeclarativa(diretoriosCodigoAtivos);
2947
2971
  const detalhesPersistencia = await indexarPersistenciaDetalhada(diretoriosCodigoAtivos);
2948
2972
  const indexCpp = await indexarCpp(diretoriosCodigoAtivos);
@@ -2955,6 +2979,7 @@ export async function analisarDriftLegado(contexto, opcoes) {
2955
2979
  ...indexJava.simbolos,
2956
2980
  ...indexGo.simbolos,
2957
2981
  ...indexRust.simbolos,
2982
+ ...indexLua.simbolos,
2958
2983
  ...indexCpp.simbolos,
2959
2984
  ...indexPersistencia.simbolos,
2960
2985
  ];
@@ -2966,6 +2991,7 @@ export async function analisarDriftLegado(contexto, opcoes) {
2966
2991
  ...indexJava.simbolos.map((item) => [item.caminho, item]),
2967
2992
  ...indexGo.simbolos.map((item) => [item.caminho, item]),
2968
2993
  ...indexRust.simbolos.map((item) => [item.caminho, item]),
2994
+ ...indexLua.simbolos.map((item) => [item.caminho, item]),
2969
2995
  ...indexCpp.simbolos.map((item) => [item.caminho, item]),
2970
2996
  ]);
2971
2997
  const todosRecursos = [
@@ -2976,6 +3002,7 @@ export async function analisarDriftLegado(contexto, opcoes) {
2976
3002
  ...indexJava.recursos,
2977
3003
  ...indexGo.recursos,
2978
3004
  ...indexRust.recursos,
3005
+ ...indexLua.recursos,
2979
3006
  ...indexCpp.recursos,
2980
3007
  ...indexPersistencia.recursos,
2981
3008
  ];
@@ -3617,7 +3644,7 @@ export async function analisarDriftLegado(contexto, opcoes) {
3617
3644
  const EXTENSOES_BUSCA_IMPACTO = [
3618
3645
  ".sema",
3619
3646
  ".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
3620
- ".py", ".dart", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
3647
+ ".py", ".dart", ".lua", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
3621
3648
  ".sql", ".psql", ".ddl", ".prisma", ".json",
3622
3649
  ];
3623
3650
  function construirVariantesSemanticas(valor) {