@semacode/cli 1.5.9 → 1.5.11
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 +4 -1
- package/SEMA_BRIEF.curto.txt +3 -3
- package/SEMA_BRIEF.md +5 -5
- package/SEMA_BRIEF.micro.txt +2 -2
- package/SEMA_INDEX.json +50 -32
- package/dist/drift.d.ts +3 -3
- package/dist/drift.js +111 -5
- package/dist/drift.js.map +1 -1
- package/dist/importador.d.ts +1 -1
- package/dist/importador.js +200 -1
- package/dist/importador.js.map +1 -1
- package/dist/index.js +13 -5
- package/dist/index.js.map +1 -1
- package/dist/lua-symbols.d.ts +6 -4
- package/dist/lua-symbols.js +74 -54
- package/dist/lua-symbols.js.map +1 -1
- package/dist/php-symbols.d.ts +24 -0
- package/dist/php-symbols.js +375 -0
- package/dist/php-symbols.js.map +1 -0
- package/dist/projeto.js +20 -0
- package/dist/projeto.js.map +1 -1
- package/dist/tipos.d.ts +1 -1
- package/docs/AGENT_STARTER.md +3 -3
- package/docs/cli.md +5 -1
- package/docs/env.md +3 -3
- package/docs/fluxo-pratico-ia-sema.md +1 -1
- package/docs/integracao-com-ia.md +2 -0
- package/docs/mcp.md +2 -0
- package/docs/sintaxe.md +65 -0
- 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 +1 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.js +8 -0
- package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +3 -3
- package/node_modules/@sema/nucleo/dist/parser/parser.js +4 -0
- package/node_modules/@sema/nucleo/dist/parser/parser.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +2 -2
- package/node_modules/@sema/nucleo/dist/semantico/analisador.js +5 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.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 +10 -10
package/README.md
CHANGED
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
Ela valida contratos `.sema`, mede `drift` entre contrato e codigo vivo, importa legado, gera codigo derivado, produz contexto IA-first e agora governa persistencia vendor-first para `postgres`, `mysql`, `sqlite`, `mongodb` e `redis`.
|
|
6
6
|
|
|
7
|
+
Lua e suportado como alvo de geracao e como origem semantica de codigo vivo em `use`, `impl`, IR, `drift` e `sema importar`.
|
|
8
|
+
PHP tambem e suportado como origem semantica de codigo vivo em `use`, `impl`, IR, `drift` e `sema importar`, incluindo controllers, funcoes, rotas Laravel/Slim e atributos Symfony/PHP 8.
|
|
9
|
+
|
|
7
10
|
Tambem resolve documentacao obrigatoria por intencao para impedir IA de agir sem ler ou criar docs relacionadas.
|
|
8
11
|
|
|
9
12
|
## Instalar
|
|
@@ -61,7 +64,7 @@ sema drift ./contratos-importados --json
|
|
|
61
64
|
|
|
62
65
|
## Persistencia vendor-first
|
|
63
66
|
|
|
64
|
-
A CLI
|
|
67
|
+
A CLI atual entende blocos `database` e recursos de persistencia no IR, no formatador, no semantico, na importacao, no drift, no impact map, na renomeacao semantica assistida e no `verificar`. O objetivo nao e esconder diferencas entre bancos, e sim capturar essas diferencas no contrato.
|
|
65
68
|
|
|
66
69
|
Nesta linha, o `drift` tambem passa a resolver melhor metodos JS/TS browser-side definidos via `Object.assign(...prototype...)` e a entrada padrao da CLI para de tropeçar em `exemplos/` quando o projeto real ja tem `contratos/`, `sema/` ou arquivos `.sema` na raiz.
|
|
67
70
|
|
package/SEMA_BRIEF.curto.txt
CHANGED
|
@@ -3,7 +3,7 @@ BASE: C:\GitHub\Sema
|
|
|
3
3
|
MODULOS: 6
|
|
4
4
|
ENTRADA_IA: llms.txt -> SEMA_BRIEF.curto.txt -> SEMA_INDEX.json -> AGENTS.md -> README.md
|
|
5
5
|
TOP_MODULOS: app.pedidos, sema.produto.ergonomia_e_dominio, sema.produto.geradores_web, sema.produto.governanca_ia, sema.produto.linguagem_composta, sema.produto.persistencia_vendor_first
|
|
6
|
-
TOP_RISCOS: assistir_renomeacao_semantica:alto, carregar_configuracao_de_persistencia:medio, consultar_scorecard_compatibilidade:medio, converter_bloco_composto_para_ir:alto, converter_persistencia_para_ir_canonico:alto, criar_pedido:alto (+
|
|
6
|
+
TOP_RISCOS: assistir_renomeacao_semantica:alto, carregar_configuracao_de_persistencia:medio, consultar_scorecard_compatibilidade:medio, converter_bloco_composto_para_ir:alto, converter_persistencia_para_ir_canonico:alto, criar_pedido:alto (+23)
|
|
7
7
|
TOP_LACUNAS: sem_impl, vinculo_quebrado
|
|
8
|
-
TOP_ARQUIVOS: C:\GitHub\Sema\pacotes\cli\src\docs.ts, C:\GitHub\Sema\pacotes\cli\src\drift.ts, C:\GitHub\Sema\pacotes\cli\src\importador.ts, C:\GitHub\Sema\pacotes\cli\src\index.ts, C:\GitHub\Sema\pacotes\cli\src\
|
|
9
|
-
GERADO_EM: 2026-05-
|
|
8
|
+
TOP_ARQUIVOS: C:\GitHub\Sema\pacotes\cli\src\docs.ts, C:\GitHub\Sema\pacotes\cli\src\drift.ts, C:\GitHub\Sema\pacotes\cli\src\importador.ts, C:\GitHub\Sema\pacotes\cli\src\index.ts, C:\GitHub\Sema\pacotes\cli\src\lua-symbols.ts, C:\GitHub\Sema\pacotes\cli\src\php-symbols.ts (+15)
|
|
9
|
+
GERADO_EM: 2026-05-09T02:38:09.917Z
|
package/SEMA_BRIEF.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Sema e IA-first. Este arquivo existe para IA achar o ponto de entrada do projeto sem ter que catar o repo inteiro feito barata tonta.
|
|
4
4
|
|
|
5
|
-
- Gerado em: `2026-05-
|
|
5
|
+
- Gerado em: `2026-05-09T02:38:09.917Z`
|
|
6
6
|
- Modulos: `6`
|
|
7
7
|
|
|
8
8
|
## Entrada canonica para IA
|
|
@@ -28,10 +28,10 @@ Sema e IA-first. Este arquivo existe para IA achar o ponto de entrada do projeto
|
|
|
28
28
|
- Lacunas: sem_impl, vinculo_quebrado
|
|
29
29
|
|
|
30
30
|
### sema.produto.ergonomia_e_dominio
|
|
31
|
-
- Faz: governa 2 superficie(s),
|
|
31
|
+
- Faz: governa 2 superficie(s), 7 task(s) com foco em scorecard atualizado
|
|
32
32
|
- Publico: evento:scorecard_atualizado, policy:compatibilidade_publica
|
|
33
|
-
- Tocar: C:\GitHub\Sema\pacotes\cli\src\
|
|
34
|
-
- Score:
|
|
33
|
+
- Tocar: C:\GitHub\Sema\pacotes\cli\src\drift.ts, C:\GitHub\Sema\pacotes\cli\src\importador.ts, C:\GitHub\Sema\pacotes\cli\src\index.ts, C:\GitHub\Sema\pacotes\cli\src\lua-symbols.ts (+4)
|
|
34
|
+
- Score: 91 | Confianca: alta | Risco: alto
|
|
35
35
|
- Lacunas: sem_impl, vinculo_quebrado
|
|
36
36
|
|
|
37
37
|
### sema.produto.geradores_web
|
|
@@ -44,7 +44,7 @@ Sema e IA-first. Este arquivo existe para IA achar o ponto de entrada do projeto
|
|
|
44
44
|
### sema.produto.governanca_ia
|
|
45
45
|
- Faz: governa 2 superficie(s), 9 task(s) com foco em preparar briefing contextual
|
|
46
46
|
- Publico: webhook:confirmar_contexto_publico, worker:preparar_briefing_contextual
|
|
47
|
-
- Tocar: C:\GitHub\Sema\pacotes\cli\src\docs.ts, C:\GitHub\Sema\pacotes\cli\src\drift.ts, C:\GitHub\Sema\pacotes\cli\src\index.ts, C:\GitHub\Sema\pacotes\cli\src\
|
|
47
|
+
- Tocar: C:\GitHub\Sema\pacotes\cli\src\docs.ts, C:\GitHub\Sema\pacotes\cli\src\drift.ts, C:\GitHub\Sema\pacotes\cli\src\index.ts, C:\GitHub\Sema\pacotes\cli\src\lua-symbols.ts (+4)
|
|
48
48
|
- Score: 93 | Confianca: alta | Risco: alto
|
|
49
49
|
- Lacunas: sem_impl, vinculo_quebrado
|
|
50
50
|
|
package/SEMA_BRIEF.micro.txt
CHANGED
|
@@ -2,6 +2,6 @@ PROJETO: Sema
|
|
|
2
2
|
MODULOS: 6
|
|
3
3
|
ENTRADA_IA: llms.txt -> SEMA_BRIEF.micro.txt -> SEMA_INDEX.json -> AGENTS.md
|
|
4
4
|
TOP_MODULOS: app.pedidos, sema.produto.ergonomia_e_dominio, sema.produto.geradores_web (+3)
|
|
5
|
-
TOP_RISCOS: assistir_renomeacao_semantica:alto, carregar_configuracao_de_persistencia:medio, consultar_scorecard_compatibilidade:medio (+
|
|
5
|
+
TOP_RISCOS: assistir_renomeacao_semantica:alto, carregar_configuracao_de_persistencia:medio, consultar_scorecard_compatibilidade:medio (+26)
|
|
6
6
|
TOP_LACUNAS: sem_impl, vinculo_quebrado
|
|
7
|
-
GERADO_EM: 2026-05-
|
|
7
|
+
GERADO_EM: 2026-05-09T02:38:09.917Z
|
package/SEMA_INDEX.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"comando": "resumo-projeto",
|
|
3
|
-
"geradoEm": "2026-05-
|
|
4
|
-
"cliVersao": "1.5.
|
|
3
|
+
"geradoEm": "2026-05-09T02:38:09.917Z",
|
|
4
|
+
"cliVersao": "1.5.11",
|
|
5
5
|
"baseProjeto": "C:\\GitHub\\Sema",
|
|
6
6
|
"totalModulos": 6,
|
|
7
7
|
"entradaCanonica": {
|
|
@@ -170,7 +170,7 @@
|
|
|
170
170
|
},
|
|
171
171
|
"modulos": [
|
|
172
172
|
{
|
|
173
|
-
"geradoEm": "2026-05-
|
|
173
|
+
"geradoEm": "2026-05-09T02:38:09.917Z",
|
|
174
174
|
"arquivo": "C:\\GitHub\\Sema\\contratos\\pedidos.sema",
|
|
175
175
|
"modulo": "app.pedidos",
|
|
176
176
|
"perfilCompatibilidade": "publico",
|
|
@@ -243,32 +243,33 @@
|
|
|
243
243
|
]
|
|
244
244
|
},
|
|
245
245
|
{
|
|
246
|
-
"geradoEm": "2026-05-
|
|
246
|
+
"geradoEm": "2026-05-09T02:38:09.917Z",
|
|
247
247
|
"arquivo": "C:\\GitHub\\Sema\\contratos\\sema\\ergonomia_e_dominio.sema",
|
|
248
248
|
"modulo": "sema.produto.ergonomia_e_dominio",
|
|
249
249
|
"perfilCompatibilidade": "interno",
|
|
250
|
-
"scoreSemantico":
|
|
250
|
+
"scoreSemantico": 91,
|
|
251
251
|
"confiancaGeral": "alta",
|
|
252
252
|
"riscoOperacional": "alto",
|
|
253
|
-
"faz": "governa 2 superficie(s),
|
|
253
|
+
"faz": "governa 2 superficie(s), 7 task(s) com foco em scorecard atualizado",
|
|
254
254
|
"tarefasPrincipais": [
|
|
255
255
|
"reduzir_atrito_sintatico_em_contrato_rico",
|
|
256
256
|
"modelar_payload_com_mais_precisao",
|
|
257
257
|
"explicitar_variacao_e_compatibilidade",
|
|
258
|
-
"
|
|
259
|
-
"
|
|
258
|
+
"habilitar_impl_lua_completo",
|
|
259
|
+
"habilitar_impl_php_completo",
|
|
260
|
+
"separar_validacao_regra_e_poscondicao"
|
|
260
261
|
],
|
|
261
262
|
"entradasChave": [
|
|
262
263
|
"reduzir_atrito_sintatico_em_contrato_rico(contrato_atual, repeticao_detectada)",
|
|
263
264
|
"modelar_payload_com_mais_precisao(contrato_atual, payload_json_generico, exemplos_payload)",
|
|
264
265
|
"explicitar_variacao_e_compatibilidade(contrato_atual, perfil_atual)",
|
|
265
|
-
"
|
|
266
|
+
"habilitar_impl_lua_completo(contrato_atual, origem_lua_declarada)"
|
|
266
267
|
],
|
|
267
268
|
"saidasChave": [
|
|
268
269
|
"reduzir_atrito_sintatico_em_contrato_rico(leitura_mais_limpa, ambiguidade_controlada, perfil)",
|
|
269
270
|
"modelar_payload_com_mais_precisao(tipo_composto_explicito, cardinalidade_explicita, shape_rico)",
|
|
270
271
|
"explicitar_variacao_e_compatibilidade(versao_explicita, fallback_claro, contrato_publico_distinto)",
|
|
271
|
-
"
|
|
272
|
+
"habilitar_impl_lua_completo(impl_lua_validado, use_lua_validado, ir_lua_preservado, drift_lua_resolvido)"
|
|
272
273
|
],
|
|
273
274
|
"superficiesPublicas": [
|
|
274
275
|
"evento:scorecard_atualizado",
|
|
@@ -278,11 +279,11 @@
|
|
|
278
279
|
"ambiguidade_controlada existe",
|
|
279
280
|
"cardinalidade_explicita existe",
|
|
280
281
|
"contrato_publico_distinto existe",
|
|
281
|
-
"
|
|
282
|
-
"
|
|
283
|
-
"
|
|
284
|
-
"
|
|
285
|
-
"
|
|
282
|
+
"detector_lua_resolvido existe",
|
|
283
|
+
"detector_php_resolvido existe",
|
|
284
|
+
"drift_lua_resolvido existe",
|
|
285
|
+
"drift_php_resolvido existe",
|
|
286
|
+
"fallback_claro existe"
|
|
286
287
|
],
|
|
287
288
|
"efeitos": [],
|
|
288
289
|
"erros": [],
|
|
@@ -290,23 +291,30 @@
|
|
|
290
291
|
"PerfilCompatibilidade"
|
|
291
292
|
],
|
|
292
293
|
"arquivosProvaveis": [
|
|
294
|
+
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\drift.ts",
|
|
295
|
+
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\importador.ts",
|
|
296
|
+
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\index.ts",
|
|
297
|
+
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\lua-symbols.ts",
|
|
298
|
+
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\php-symbols.ts",
|
|
293
299
|
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\projeto.ts",
|
|
294
|
-
"C:\\GitHub\\Sema\\pacotes\\
|
|
295
|
-
"C:\\GitHub\\Sema\\pacotes\\nucleo\\src\\
|
|
296
|
-
"C:\\GitHub\\Sema\\pacotes\\nucleo\\src\\semantico\\analisador.ts"
|
|
300
|
+
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\tipos.ts",
|
|
301
|
+
"C:\\GitHub\\Sema\\pacotes\\nucleo\\src\\ast\\tipos.ts"
|
|
297
302
|
],
|
|
298
303
|
"simbolosRelacionados": [
|
|
304
|
+
"analisarDriftLegado",
|
|
299
305
|
"analisarSemantica",
|
|
300
306
|
"converterParaIr",
|
|
301
307
|
"formatarCodigo",
|
|
308
|
+
"importarProjetoLegado",
|
|
302
309
|
"resolverAlvosVerificacao"
|
|
303
310
|
],
|
|
304
311
|
"riscosPrincipais": [
|
|
305
312
|
"consultar_scorecard_compatibilidade:medio",
|
|
306
313
|
"explicitar_variacao_e_compatibilidade:medio",
|
|
314
|
+
"habilitar_impl_lua_completo:alto",
|
|
315
|
+
"habilitar_impl_php_completo:alto",
|
|
307
316
|
"modelar_payload_com_mais_precisao:alto",
|
|
308
|
-
"reduzir_atrito_sintatico_em_contrato_rico:medio"
|
|
309
|
-
"separar_validacao_regra_e_poscondicao:medio"
|
|
317
|
+
"reduzir_atrito_sintatico_em_contrato_rico:medio"
|
|
310
318
|
],
|
|
311
319
|
"lacunas": [
|
|
312
320
|
"sem_impl",
|
|
@@ -316,9 +324,9 @@
|
|
|
316
324
|
"consultar_scorecard_compatibilidade:pacotes/cli/src/projeto.ts",
|
|
317
325
|
"evento:scorecard_atualizado:scorecard_compatibilidade",
|
|
318
326
|
"explicitar_variacao_e_compatibilidade:pacotes/nucleo/src/ir/conversor.ts",
|
|
319
|
-
"
|
|
320
|
-
"
|
|
321
|
-
"
|
|
327
|
+
"habilitar_impl_lua_completo:pacotes/cli/src/drift.ts",
|
|
328
|
+
"habilitar_impl_lua_completo:pacotes/cli/src/importador.ts",
|
|
329
|
+
"habilitar_impl_lua_completo:pacotes/cli/src/index.ts"
|
|
322
330
|
],
|
|
323
331
|
"checksSugeridos": [
|
|
324
332
|
"confirmar proibicoes operacionais",
|
|
@@ -334,19 +342,27 @@
|
|
|
334
342
|
"sema verificar <arquivo-ou-pasta> --json"
|
|
335
343
|
],
|
|
336
344
|
"consumerFramework": "nextjs-consumer",
|
|
337
|
-
"appRoutes": [
|
|
338
|
-
|
|
345
|
+
"appRoutes": [
|
|
346
|
+
"/ranking"
|
|
347
|
+
],
|
|
348
|
+
"consumerSurfaces": [
|
|
349
|
+
"router:/ranking -> C:\\GitHub\\Sema\\pacotes\\cli\\src\\index.ts"
|
|
350
|
+
],
|
|
339
351
|
"consumerBridges": [],
|
|
340
352
|
"ancoragensVinculo": [],
|
|
341
353
|
"arquivosProvaveisEditar": [
|
|
354
|
+
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\drift.ts",
|
|
355
|
+
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\importador.ts",
|
|
356
|
+
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\index.ts",
|
|
357
|
+
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\lua-symbols.ts",
|
|
358
|
+
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\php-symbols.ts",
|
|
342
359
|
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\projeto.ts",
|
|
343
|
-
"C:\\GitHub\\Sema\\pacotes\\
|
|
344
|
-
"C:\\GitHub\\Sema\\pacotes\\nucleo\\src\\
|
|
345
|
-
"C:\\GitHub\\Sema\\pacotes\\nucleo\\src\\semantico\\analisador.ts"
|
|
360
|
+
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\tipos.ts",
|
|
361
|
+
"C:\\GitHub\\Sema\\pacotes\\nucleo\\src\\ast\\tipos.ts"
|
|
346
362
|
]
|
|
347
363
|
},
|
|
348
364
|
{
|
|
349
|
-
"geradoEm": "2026-05-
|
|
365
|
+
"geradoEm": "2026-05-09T02:38:09.917Z",
|
|
350
366
|
"arquivo": "C:\\GitHub\\Sema\\contratos\\sema\\geradores_web.sema",
|
|
351
367
|
"modulo": "sema.produto.geradores_web",
|
|
352
368
|
"perfilCompatibilidade": "interno",
|
|
@@ -443,7 +459,7 @@
|
|
|
443
459
|
]
|
|
444
460
|
},
|
|
445
461
|
{
|
|
446
|
-
"geradoEm": "2026-05-
|
|
462
|
+
"geradoEm": "2026-05-09T02:38:09.917Z",
|
|
447
463
|
"arquivo": "C:\\GitHub\\Sema\\contratos\\sema\\governanca_ia.sema",
|
|
448
464
|
"modulo": "sema.produto.governanca_ia",
|
|
449
465
|
"perfilCompatibilidade": "publico",
|
|
@@ -496,6 +512,7 @@
|
|
|
496
512
|
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\docs.ts",
|
|
497
513
|
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\drift.ts",
|
|
498
514
|
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\index.ts",
|
|
515
|
+
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\lua-symbols.ts",
|
|
499
516
|
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\projeto.ts",
|
|
500
517
|
"C:\\GitHub\\Sema\\pacotes\\editor-vscode\\extension.js",
|
|
501
518
|
"C:\\GitHub\\Sema\\pacotes\\mcp\\src\\index.ts",
|
|
@@ -557,6 +574,7 @@
|
|
|
557
574
|
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\docs.ts",
|
|
558
575
|
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\drift.ts",
|
|
559
576
|
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\index.ts",
|
|
577
|
+
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\lua-symbols.ts",
|
|
560
578
|
"C:\\GitHub\\Sema\\pacotes\\cli\\src\\projeto.ts",
|
|
561
579
|
"C:\\GitHub\\Sema\\pacotes\\editor-vscode\\extension.js",
|
|
562
580
|
"C:\\GitHub\\Sema\\pacotes\\mcp\\src\\index.ts",
|
|
@@ -564,7 +582,7 @@
|
|
|
564
582
|
]
|
|
565
583
|
},
|
|
566
584
|
{
|
|
567
|
-
"geradoEm": "2026-05-
|
|
585
|
+
"geradoEm": "2026-05-09T02:38:09.917Z",
|
|
568
586
|
"arquivo": "C:\\GitHub\\Sema\\contratos\\sema\\linguagem_composta.sema",
|
|
569
587
|
"modulo": "sema.produto.linguagem_composta",
|
|
570
588
|
"perfilCompatibilidade": "interno",
|
|
@@ -670,7 +688,7 @@
|
|
|
670
688
|
]
|
|
671
689
|
},
|
|
672
690
|
{
|
|
673
|
-
"geradoEm": "2026-05-
|
|
691
|
+
"geradoEm": "2026-05-09T02:38:09.917Z",
|
|
674
692
|
"arquivo": "C:\\GitHub\\Sema\\contratos\\sema\\persistencia_vendor_first.sema",
|
|
675
693
|
"modulo": "sema.produto.persistencia_vendor_first",
|
|
676
694
|
"perfilCompatibilidade": "interno",
|
package/dist/drift.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { EngineBanco, NivelConfiancaSemantica, NivelRiscoSemantico, TipoRecursoPersistencia } from "@sema/nucleo";
|
|
2
2
|
import type { ContextoProjetoCarregado } from "./projeto.js";
|
|
3
3
|
interface SimboloResolvido {
|
|
4
|
-
origem: "ts" | "py" | "dart" | "cs" | "java" | "go" | "rust" | "cpp";
|
|
4
|
+
origem: "ts" | "py" | "dart" | "lua" | "php" | "cs" | "java" | "go" | "rust" | "cpp";
|
|
5
5
|
caminho: string;
|
|
6
6
|
arquivo: string;
|
|
7
7
|
simbolo: string;
|
|
@@ -33,7 +33,7 @@ export interface DiagnosticoDrift {
|
|
|
33
33
|
interface RegistroImplDrift {
|
|
34
34
|
modulo: string;
|
|
35
35
|
task: string;
|
|
36
|
-
origem: "ts" | "py" | "dart" | "cs" | "java" | "go" | "rust" | "cpp";
|
|
36
|
+
origem: "ts" | "py" | "dart" | "lua" | "php" | "cs" | "java" | "go" | "rust" | "cpp";
|
|
37
37
|
caminho: string;
|
|
38
38
|
arquivo?: string;
|
|
39
39
|
simbolo?: string;
|
|
@@ -82,7 +82,7 @@ interface RegistroRepositorioPersistenciaDrift {
|
|
|
82
82
|
arquivo: string;
|
|
83
83
|
}
|
|
84
84
|
interface SimboloCandidatoDrift {
|
|
85
|
-
origem: "ts" | "py" | "dart" | "cs" | "java" | "go" | "rust" | "cpp";
|
|
85
|
+
origem: "ts" | "py" | "dart" | "lua" | "php" | "cs" | "java" | "go" | "rust" | "cpp";
|
|
86
86
|
caminho: string;
|
|
87
87
|
arquivo: string;
|
|
88
88
|
simbolo: string;
|
package/dist/drift.js
CHANGED
|
@@ -6,6 +6,8 @@ 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";
|
|
9
11
|
import { contarIndentacaoPython, extrairRotasFlaskDecoradas, normalizarCaminhoFlask } from "./python-http.js";
|
|
10
12
|
import { extrairRotasRust, extrairSimbolosRust } from "./rust-http.js";
|
|
11
13
|
import { extrairRotasTypeScriptHttp } from "./typescript-http.js";
|
|
@@ -689,7 +691,7 @@ function extrairRecursosArquivoLocal(arquivo, codigo) {
|
|
|
689
691
|
const nomeBase = path.basename(literal, path.extname(literal));
|
|
690
692
|
registrarRecursoDrift(recursos, "arquivo", "arquivo_local", nomeBase, arquivo);
|
|
691
693
|
}
|
|
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, "");
|
|
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, "");
|
|
693
695
|
const nomeStore = nomeArquivo
|
|
694
696
|
.replace(/(?:[_.-]?(?:repository|repositories|repo|store|storage|persistencia|persistence))$/i, "")
|
|
695
697
|
.trim();
|
|
@@ -1040,6 +1042,20 @@ async function listarArquivosRecursivos(diretorio, extensoes) {
|
|
|
1040
1042
|
}
|
|
1041
1043
|
return encontrados.sort((a, b) => a.localeCompare(b, "pt-BR"));
|
|
1042
1044
|
}
|
|
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
|
+
}
|
|
1043
1059
|
function caminhosSimbolicos(baseDiretorio, arquivo) {
|
|
1044
1060
|
const relativo = path.relative(baseDiretorio, arquivo).replace(/\.[^.]+$/, "");
|
|
1045
1061
|
const semPrefixo = relativo
|
|
@@ -1878,6 +1894,57 @@ async function indexarDart(diretorios) {
|
|
|
1878
1894
|
|| a.arquivo.localeCompare(b.arquivo, "pt-BR")),
|
|
1879
1895
|
};
|
|
1880
1896
|
}
|
|
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
|
+
}
|
|
1881
1948
|
function registrarSimboloGenerico(simbolos, origem, basesSimbolicas, arquivo, simbolo) {
|
|
1882
1949
|
for (const baseSimbolica of basesSimbolicas) {
|
|
1883
1950
|
const caminho = `${baseSimbolica}.${simbolo}`;
|
|
@@ -1901,6 +1968,30 @@ function registrarSimboloGenerico(simbolos, origem, basesSimbolicas, arquivo, si
|
|
|
1901
1968
|
}
|
|
1902
1969
|
}
|
|
1903
1970
|
}
|
|
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
|
+
}
|
|
1904
1995
|
async function indexarDotnet(diretorios) {
|
|
1905
1996
|
const simbolos = new Map();
|
|
1906
1997
|
const rotas = [];
|
|
@@ -2043,7 +2134,7 @@ async function indexarPersistenciaDeclarativa(diretorios) {
|
|
|
2043
2134
|
const arquivos = await listarArquivosRecursivos(diretorio, [
|
|
2044
2135
|
".sql", ".psql", ".ddl", ".prisma",
|
|
2045
2136
|
".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
|
|
2046
|
-
".py", ".dart", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
|
|
2137
|
+
".py", ".dart", ".lua", ".php", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
|
|
2047
2138
|
]);
|
|
2048
2139
|
for (const arquivo of arquivos) {
|
|
2049
2140
|
const codigo = await readFile(arquivo, "utf8");
|
|
@@ -2247,7 +2338,7 @@ async function indexarPersistenciaDetalhada(diretorios) {
|
|
|
2247
2338
|
for (const diretorio of diretorios) {
|
|
2248
2339
|
const arquivos = await listarArquivosRecursivos(diretorio, [
|
|
2249
2340
|
".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
|
|
2250
|
-
".py", ".dart", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
|
|
2341
|
+
".py", ".dart", ".lua", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
|
|
2251
2342
|
".sql", ".psql", ".ddl", ".prisma",
|
|
2252
2343
|
]);
|
|
2253
2344
|
for (const arquivo of arquivos) {
|
|
@@ -2480,7 +2571,7 @@ function extrairFontesHttpTypeScript(fontesLegado) {
|
|
|
2480
2571
|
return fontesLegado.filter((fonte) => fonte === "nestjs" || fonte === "nextjs" || fonte === "firebase");
|
|
2481
2572
|
}
|
|
2482
2573
|
function extrairFontesHttpBackend(fontesLegado) {
|
|
2483
|
-
return fontesLegado.filter((fonte) => fonte === "dotnet" || fonte === "java" || fonte === "go" || fonte === "rust");
|
|
2574
|
+
return fontesLegado.filter((fonte) => fonte === "php" || fonte === "dotnet" || fonte === "java" || fonte === "go" || fonte === "rust");
|
|
2484
2575
|
}
|
|
2485
2576
|
function ultimoSegmentoSimbolico(caminho) {
|
|
2486
2577
|
const partes = caminho.split(".").filter(Boolean);
|
|
@@ -2626,6 +2717,10 @@ function escolherRotasEsperadas(task, fontesLegado) {
|
|
|
2626
2717
|
}
|
|
2627
2718
|
return ["fastapi", "flask"];
|
|
2628
2719
|
}
|
|
2720
|
+
const implPhp = task.implementacoesExternas.find((impl) => impl.origem === "php");
|
|
2721
|
+
if (implPhp) {
|
|
2722
|
+
return fontesBackend.includes("php") ? ["php"] : ["php"];
|
|
2723
|
+
}
|
|
2629
2724
|
const implCs = task.implementacoesExternas.find((impl) => impl.origem === "cs");
|
|
2630
2725
|
if (implCs) {
|
|
2631
2726
|
return fontesBackend.includes("dotnet") ? ["dotnet"] : ["dotnet"];
|
|
@@ -2830,9 +2925,12 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
2830
2925
|
diretoriosIgnoradosAtivos = resolverDiretoriosIgnoradosAtivos(opcoesResolvidas);
|
|
2831
2926
|
try {
|
|
2832
2927
|
const diretoriosCodigoAtivos = resolverDiretoriosCodigoEscopoReal(contexto, configuracaoEscopo);
|
|
2928
|
+
const arquivosCodigo = await indexarArquivosCodigo(diretoriosCodigoAtivos);
|
|
2833
2929
|
const indexTs = await indexarTypeScript(diretoriosCodigoAtivos);
|
|
2834
2930
|
const indexPy = await indexarPython(diretoriosCodigoAtivos);
|
|
2835
2931
|
const indexDart = await indexarDart(diretoriosCodigoAtivos);
|
|
2932
|
+
const indexLua = await indexarLua(diretoriosCodigoAtivos);
|
|
2933
|
+
const indexPhp = await indexarPhp(diretoriosCodigoAtivos);
|
|
2836
2934
|
const indexDotnet = await indexarDotnet(diretoriosCodigoAtivos);
|
|
2837
2935
|
const indexJava = await indexarJava(diretoriosCodigoAtivos);
|
|
2838
2936
|
const indexGo = await indexarGo(diretoriosCodigoAtivos);
|
|
@@ -2844,6 +2942,8 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
2844
2942
|
...indexTs.simbolos,
|
|
2845
2943
|
...indexPy.simbolos,
|
|
2846
2944
|
...indexDart.simbolos,
|
|
2945
|
+
...indexLua.simbolos,
|
|
2946
|
+
...indexPhp.simbolos,
|
|
2847
2947
|
...indexDotnet.simbolos,
|
|
2848
2948
|
...indexJava.simbolos,
|
|
2849
2949
|
...indexGo.simbolos,
|
|
@@ -2854,6 +2954,8 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
2854
2954
|
...indexTs.simbolos.map((item) => [item.caminho, item]),
|
|
2855
2955
|
...indexPy.simbolos.map((item) => [item.caminho, item]),
|
|
2856
2956
|
...indexDart.simbolos.map((item) => [item.caminho, item]),
|
|
2957
|
+
...indexLua.simbolos.map((item) => [item.caminho, item]),
|
|
2958
|
+
...indexPhp.simbolos.map((item) => [item.caminho, item]),
|
|
2857
2959
|
...indexDotnet.simbolos.map((item) => [item.caminho, item]),
|
|
2858
2960
|
...indexJava.simbolos.map((item) => [item.caminho, item]),
|
|
2859
2961
|
...indexGo.simbolos.map((item) => [item.caminho, item]),
|
|
@@ -2864,6 +2966,8 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
2864
2966
|
...indexTs.recursos,
|
|
2865
2967
|
...indexPy.recursos,
|
|
2866
2968
|
...indexDart.recursos,
|
|
2969
|
+
...indexLua.recursos,
|
|
2970
|
+
...indexPhp.recursos,
|
|
2867
2971
|
...indexDotnet.recursos,
|
|
2868
2972
|
...indexJava.recursos,
|
|
2869
2973
|
...indexGo.recursos,
|
|
@@ -2876,12 +2980,14 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
2876
2980
|
...indexTs.rotas,
|
|
2877
2981
|
...indexPy.rotas,
|
|
2878
2982
|
...indexDart.rotas,
|
|
2983
|
+
...indexPhp.rotas,
|
|
2879
2984
|
...indexDotnet.rotas,
|
|
2880
2985
|
...indexJava.rotas,
|
|
2881
2986
|
...indexGo.rotas,
|
|
2882
2987
|
...indexRust.rotas,
|
|
2883
2988
|
];
|
|
2884
2989
|
const todosArquivosConhecidos = [...new Set([
|
|
2990
|
+
...arquivosCodigo,
|
|
2885
2991
|
...todosSimbolos.map((item) => item.arquivo),
|
|
2886
2992
|
...todasRotasIndexadas.map((item) => item.arquivo),
|
|
2887
2993
|
...todosRecursos.map((item) => item.arquivo),
|
|
@@ -3508,7 +3614,7 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
3508
3614
|
const EXTENSOES_BUSCA_IMPACTO = [
|
|
3509
3615
|
".sema",
|
|
3510
3616
|
".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
|
|
3511
|
-
".py", ".dart", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
|
|
3617
|
+
".py", ".dart", ".lua", ".php", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
|
|
3512
3618
|
".sql", ".psql", ".ddl", ".prisma", ".json",
|
|
3513
3619
|
];
|
|
3514
3620
|
function construirVariantesSemanticas(valor) {
|