@semacode/cli 1.5.10 → 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 +2 -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 +67 -4
- package/dist/drift.js.map +1 -1
- package/dist/importador.d.ts +1 -1
- package/dist/importador.js +144 -1
- package/dist/importador.js.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.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 +14 -0
- package/dist/projeto.js.map +1 -1
- package/dist/tipos.d.ts +1 -1
- package/docs/cli.md +3 -1
- package/docs/sintaxe.md +26 -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 +4 -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 +2 -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 +3 -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
|
@@ -5,6 +5,7 @@
|
|
|
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
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.
|
|
8
9
|
|
|
9
10
|
Tambem resolve documentacao obrigatoria por intencao para impedir IA de agir sem ler ou criar docs relacionadas.
|
|
10
11
|
|
|
@@ -63,7 +64,7 @@ sema drift ./contratos-importados --json
|
|
|
63
64
|
|
|
64
65
|
## Persistencia vendor-first
|
|
65
66
|
|
|
66
|
-
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.
|
|
67
68
|
|
|
68
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.
|
|
69
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" | "lua" | "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" | "lua" | "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" | "lua" | "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
|
@@ -7,6 +7,7 @@ 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
9
|
import { extrairSimbolosLua } from "./lua-symbols.js";
|
|
10
|
+
import { extrairRotasPhp, extrairSimbolosPhp } from "./php-symbols.js";
|
|
10
11
|
import { contarIndentacaoPython, extrairRotasFlaskDecoradas, normalizarCaminhoFlask } from "./python-http.js";
|
|
11
12
|
import { extrairRotasRust, extrairSimbolosRust } from "./rust-http.js";
|
|
12
13
|
import { extrairRotasTypeScriptHttp } from "./typescript-http.js";
|
|
@@ -1043,7 +1044,7 @@ async function listarArquivosRecursivos(diretorio, extensoes) {
|
|
|
1043
1044
|
}
|
|
1044
1045
|
const EXTENSOES_ARQUIVOS_CODIGO_DRIFT = [
|
|
1045
1046
|
".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
|
|
1046
|
-
".py", ".dart", ".lua", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
|
|
1047
|
+
".py", ".dart", ".lua", ".php", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
|
|
1047
1048
|
".sql", ".psql", ".ddl", ".prisma", ".json",
|
|
1048
1049
|
];
|
|
1049
1050
|
async function indexarArquivosCodigo(diretorios) {
|
|
@@ -1915,6 +1916,35 @@ async function indexarLua(diretorios) {
|
|
|
1915
1916
|
recursos: [...recursos.values()],
|
|
1916
1917
|
};
|
|
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
|
+
}
|
|
1918
1948
|
function registrarSimboloGenerico(simbolos, origem, basesSimbolicas, arquivo, simbolo) {
|
|
1919
1949
|
for (const baseSimbolica of basesSimbolicas) {
|
|
1920
1950
|
const caminho = `${baseSimbolica}.${simbolo}`;
|
|
@@ -1938,6 +1968,30 @@ function registrarSimboloGenerico(simbolos, origem, basesSimbolicas, arquivo, si
|
|
|
1938
1968
|
}
|
|
1939
1969
|
}
|
|
1940
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
|
+
}
|
|
1941
1995
|
async function indexarDotnet(diretorios) {
|
|
1942
1996
|
const simbolos = new Map();
|
|
1943
1997
|
const rotas = [];
|
|
@@ -2080,7 +2134,7 @@ async function indexarPersistenciaDeclarativa(diretorios) {
|
|
|
2080
2134
|
const arquivos = await listarArquivosRecursivos(diretorio, [
|
|
2081
2135
|
".sql", ".psql", ".ddl", ".prisma",
|
|
2082
2136
|
".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
|
|
2083
|
-
".py", ".dart", ".lua", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
|
|
2137
|
+
".py", ".dart", ".lua", ".php", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
|
|
2084
2138
|
]);
|
|
2085
2139
|
for (const arquivo of arquivos) {
|
|
2086
2140
|
const codigo = await readFile(arquivo, "utf8");
|
|
@@ -2517,7 +2571,7 @@ function extrairFontesHttpTypeScript(fontesLegado) {
|
|
|
2517
2571
|
return fontesLegado.filter((fonte) => fonte === "nestjs" || fonte === "nextjs" || fonte === "firebase");
|
|
2518
2572
|
}
|
|
2519
2573
|
function extrairFontesHttpBackend(fontesLegado) {
|
|
2520
|
-
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");
|
|
2521
2575
|
}
|
|
2522
2576
|
function ultimoSegmentoSimbolico(caminho) {
|
|
2523
2577
|
const partes = caminho.split(".").filter(Boolean);
|
|
@@ -2663,6 +2717,10 @@ function escolherRotasEsperadas(task, fontesLegado) {
|
|
|
2663
2717
|
}
|
|
2664
2718
|
return ["fastapi", "flask"];
|
|
2665
2719
|
}
|
|
2720
|
+
const implPhp = task.implementacoesExternas.find((impl) => impl.origem === "php");
|
|
2721
|
+
if (implPhp) {
|
|
2722
|
+
return fontesBackend.includes("php") ? ["php"] : ["php"];
|
|
2723
|
+
}
|
|
2666
2724
|
const implCs = task.implementacoesExternas.find((impl) => impl.origem === "cs");
|
|
2667
2725
|
if (implCs) {
|
|
2668
2726
|
return fontesBackend.includes("dotnet") ? ["dotnet"] : ["dotnet"];
|
|
@@ -2872,6 +2930,7 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
2872
2930
|
const indexPy = await indexarPython(diretoriosCodigoAtivos);
|
|
2873
2931
|
const indexDart = await indexarDart(diretoriosCodigoAtivos);
|
|
2874
2932
|
const indexLua = await indexarLua(diretoriosCodigoAtivos);
|
|
2933
|
+
const indexPhp = await indexarPhp(diretoriosCodigoAtivos);
|
|
2875
2934
|
const indexDotnet = await indexarDotnet(diretoriosCodigoAtivos);
|
|
2876
2935
|
const indexJava = await indexarJava(diretoriosCodigoAtivos);
|
|
2877
2936
|
const indexGo = await indexarGo(diretoriosCodigoAtivos);
|
|
@@ -2884,6 +2943,7 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
2884
2943
|
...indexPy.simbolos,
|
|
2885
2944
|
...indexDart.simbolos,
|
|
2886
2945
|
...indexLua.simbolos,
|
|
2946
|
+
...indexPhp.simbolos,
|
|
2887
2947
|
...indexDotnet.simbolos,
|
|
2888
2948
|
...indexJava.simbolos,
|
|
2889
2949
|
...indexGo.simbolos,
|
|
@@ -2895,6 +2955,7 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
2895
2955
|
...indexPy.simbolos.map((item) => [item.caminho, item]),
|
|
2896
2956
|
...indexDart.simbolos.map((item) => [item.caminho, item]),
|
|
2897
2957
|
...indexLua.simbolos.map((item) => [item.caminho, item]),
|
|
2958
|
+
...indexPhp.simbolos.map((item) => [item.caminho, item]),
|
|
2898
2959
|
...indexDotnet.simbolos.map((item) => [item.caminho, item]),
|
|
2899
2960
|
...indexJava.simbolos.map((item) => [item.caminho, item]),
|
|
2900
2961
|
...indexGo.simbolos.map((item) => [item.caminho, item]),
|
|
@@ -2906,6 +2967,7 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
2906
2967
|
...indexPy.recursos,
|
|
2907
2968
|
...indexDart.recursos,
|
|
2908
2969
|
...indexLua.recursos,
|
|
2970
|
+
...indexPhp.recursos,
|
|
2909
2971
|
...indexDotnet.recursos,
|
|
2910
2972
|
...indexJava.recursos,
|
|
2911
2973
|
...indexGo.recursos,
|
|
@@ -2918,6 +2980,7 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
2918
2980
|
...indexTs.rotas,
|
|
2919
2981
|
...indexPy.rotas,
|
|
2920
2982
|
...indexDart.rotas,
|
|
2983
|
+
...indexPhp.rotas,
|
|
2921
2984
|
...indexDotnet.rotas,
|
|
2922
2985
|
...indexJava.rotas,
|
|
2923
2986
|
...indexGo.rotas,
|
|
@@ -3551,7 +3614,7 @@ export async function analisarDriftLegado(contexto, opcoes) {
|
|
|
3551
3614
|
const EXTENSOES_BUSCA_IMPACTO = [
|
|
3552
3615
|
".sema",
|
|
3553
3616
|
".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
|
|
3554
|
-
".py", ".dart", ".lua", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
|
|
3617
|
+
".py", ".dart", ".lua", ".php", ".cs", ".java", ".go", ".rs", ".cpp", ".cc", ".cxx", ".hpp", ".h",
|
|
3555
3618
|
".sql", ".psql", ".ddl", ".prisma", ".json",
|
|
3556
3619
|
];
|
|
3557
3620
|
function construirVariantesSemanticas(valor) {
|