@semacode/cli 1.3.7 → 1.5.0
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/AGENTS.md +2 -2
- package/README.md +61 -41
- package/dist/drift.d.ts +98 -4
- package/dist/drift.js +1881 -546
- package/dist/drift.js.map +1 -1
- package/dist/importador.d.ts +2 -0
- package/dist/importador.js +166 -7
- package/dist/importador.js.map +1 -1
- package/dist/index.js +108 -9
- package/dist/index.js.map +1 -1
- package/dist/projeto.d.ts +6 -1
- package/dist/projeto.js.map +1 -1
- package/docs/cli.md +101 -0
- package/docs/instalacao-e-primeiro-uso.md +109 -196
- package/docs/integracao-com-ia.md +47 -198
- package/docs/persistencia-vendor-first.md +145 -0
- package/docs/sintaxe.md +67 -251
- package/exemplos/persistencia_vendor_first.sema +86 -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 +2 -1
- package/node_modules/@sema/nucleo/dist/formatador/index.js +32 -17
- package/node_modules/@sema/nucleo/dist/formatador/index.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/index.d.ts +1 -0
- package/node_modules/@sema/nucleo/dist/index.js +1 -0
- package/node_modules/@sema/nucleo/dist/index.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.js +94 -0
- package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +60 -0
- package/node_modules/@sema/nucleo/dist/lexer/tokens.js +15 -0
- package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.js +98 -3
- package/node_modules/@sema/nucleo/dist/parser/parser.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/persistencia/contratos.d.ts +39 -0
- package/node_modules/@sema/nucleo/dist/persistencia/contratos.js +294 -0
- package/node_modules/@sema/nucleo/dist/persistencia/contratos.js.map +1 -0
- package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +1 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.js +118 -2
- 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 +11 -11
package/AGENTS.md
CHANGED
|
@@ -18,8 +18,8 @@ Pense como IA, nao como humano. Voce nao esta "programando" — esta consumindo
|
|
|
18
18
|
|
|
19
19
|
## MCP
|
|
20
20
|
|
|
21
|
-
O servidor MCP do Sema roda localmente via: npx -y @semacode/mcp
|
|
22
|
-
Use as ferramentas: sema_resumo, sema_validar, sema_drift, sema_inspecionar, sema_ir, sema_verificar, sema_contexto_ia, sema_prompt_ia.
|
|
21
|
+
O servidor MCP do Sema roda localmente via: npx -y @semacode/mcp
|
|
22
|
+
Use as ferramentas: sema_resumo, sema_validar, sema_drift, sema_impacto, sema_renomear_semantico, sema_inspecionar, sema_ir, sema_verificar, sema_contexto_ia, sema_prompt_ia.
|
|
23
23
|
|
|
24
24
|
## Contratos e exemplos
|
|
25
25
|
|
package/README.md
CHANGED
|
@@ -1,73 +1,93 @@
|
|
|
1
1
|
# Sema CLI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`@semacode/cli` e a interface publica principal da Sema.
|
|
4
4
|
|
|
5
|
-
Ela
|
|
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
|
+
## Instalar
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
- inspecionar projeto
|
|
11
|
-
- medir `drift` entre contrato e codigo vivo
|
|
12
|
-
- importar legado
|
|
13
|
-
- gerar resumo compacto por capacidade de IA
|
|
14
|
-
- preparar contexto para IA
|
|
15
|
-
|
|
16
|
-
Quando a CLI roda em projeto, a trilha IA-first recomendada fica assim:
|
|
17
|
-
|
|
18
|
-
- raiz do repo: `llms.txt`, `SEMA_BRIEF.*`, `SEMA_INDEX.json`, `AGENTS.md`, `README.md`
|
|
19
|
-
- modulo alvo: `resumo.micro.txt`, `briefing.min.json`, `prompt-curto.txt`, `drift.json`, `briefing.json`
|
|
20
|
-
|
|
21
|
-
Isto nao existe para agradar humano. Existe para a IA achar o contexto certo sem entupir a janela com lixo.
|
|
22
|
-
|
|
23
|
-
Para regenerar os entrypoints IA-first da raiz:
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
sema sync-ai-entrypoints --json
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## Instalacao pelo npm registry
|
|
9
|
+
Global:
|
|
30
10
|
|
|
31
11
|
```bash
|
|
32
12
|
npm install -g @semacode/cli
|
|
33
13
|
sema --help
|
|
14
|
+
sema doctor
|
|
34
15
|
```
|
|
35
16
|
|
|
36
|
-
|
|
17
|
+
Local ao projeto:
|
|
37
18
|
|
|
38
19
|
```bash
|
|
39
|
-
npm install
|
|
20
|
+
npm install @semacode/cli
|
|
21
|
+
npx sema --help
|
|
40
22
|
```
|
|
41
23
|
|
|
42
|
-
|
|
24
|
+
Tarball da release:
|
|
43
25
|
|
|
44
26
|
```bash
|
|
45
27
|
npm install -g https://github.com/gerlanss/Sema/releases/latest/download/sema-cli-latest.tgz
|
|
46
28
|
```
|
|
47
29
|
|
|
48
|
-
##
|
|
30
|
+
## Fluxos principais
|
|
31
|
+
|
|
32
|
+
Projeto novo:
|
|
49
33
|
|
|
50
34
|
```bash
|
|
51
|
-
|
|
52
|
-
|
|
35
|
+
sema iniciar
|
|
36
|
+
sema validar contratos/pedidos.sema --json
|
|
37
|
+
sema compilar contratos --alvo typescript --saida ./generated/typescript
|
|
38
|
+
sema verificar contratos --json
|
|
53
39
|
```
|
|
54
40
|
|
|
55
|
-
|
|
41
|
+
Projeto que ja usa Sema:
|
|
56
42
|
|
|
57
43
|
```bash
|
|
58
|
-
|
|
59
|
-
|
|
44
|
+
sema inspecionar . --json
|
|
45
|
+
sema resumo contratos/pedidos.sema --micro --para mudanca
|
|
46
|
+
sema drift contratos/pedidos.sema --json
|
|
47
|
+
sema contexto-ia contratos/pedidos.sema --saida ./.tmp/contexto --json
|
|
60
48
|
```
|
|
61
49
|
|
|
62
|
-
|
|
50
|
+
Adocao incremental em legado:
|
|
63
51
|
|
|
64
52
|
```bash
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
sema
|
|
68
|
-
sema
|
|
69
|
-
sema starter-ia
|
|
70
|
-
sema resumo contratos/pedidos.sema --micro --para onboarding
|
|
53
|
+
sema importar nextjs ./app --saida ./contratos-importados --json
|
|
54
|
+
sema formatar ./contratos-importados
|
|
55
|
+
sema validar ./contratos-importados --json
|
|
56
|
+
sema drift ./contratos-importados --json
|
|
71
57
|
```
|
|
72
58
|
|
|
73
|
-
|
|
59
|
+
## Persistencia vendor-first
|
|
60
|
+
|
|
61
|
+
A CLI 1.5.0 entende blocos `database` e recursos de persistencia no IR, no formatador, no semantico, na importacao, no drift, no impact map e na renomeacao semantica assistida. O objetivo nao e esconder diferencas entre bancos, e sim capturar essas diferencas no contrato.
|
|
62
|
+
|
|
63
|
+
Cobertura publica:
|
|
64
|
+
|
|
65
|
+
- `postgres`: tabela, relacao, query SQL, schema e capacidades relacionais
|
|
66
|
+
- `mysql`: tabela, indice e diferencas operacionais do engine
|
|
67
|
+
- `sqlite`: armazenamento local, retencao curta e modos de transacao simples
|
|
68
|
+
- `mongodb`: `collection`, `document`, pipeline e indices documentais
|
|
69
|
+
- `redis`: `keyspace`, `stream`, TTL e superficies de estado/cache
|
|
70
|
+
|
|
71
|
+
## Pacote publico
|
|
72
|
+
|
|
73
|
+
O tarball publico da CLI inclui:
|
|
74
|
+
|
|
75
|
+
- `dist/`
|
|
76
|
+
- docs IA-first e docs de operacao
|
|
77
|
+
- pasta `exemplos/`
|
|
78
|
+
- `AGENTS.md`, `llms.txt`, `SEMA_BRIEF.*` e `SEMA_INDEX.json`
|
|
79
|
+
|
|
80
|
+
## Comandos uteis
|
|
81
|
+
|
|
82
|
+
- `sema validar <arquivo-ou-pasta> --json`
|
|
83
|
+
- `sema drift <arquivo-ou-pasta> --json`
|
|
84
|
+
- `sema resumo <arquivo-ou-pasta> --micro --para onboarding`
|
|
85
|
+
- `sema prompt-curto <arquivo-ou-pasta> --curto --para mudanca`
|
|
86
|
+
- `sema contexto-ia <arquivo.sema> --saida <diretorio> --json`
|
|
87
|
+
- `sema compilar <arquivo-ou-pasta> --alvo <typescript|python|dart|lua> --saida <diretorio>`
|
|
88
|
+
- `sema verificar <arquivo-ou-pasta> --saida <diretorio>`
|
|
89
|
+
|
|
90
|
+
## Links
|
|
91
|
+
|
|
92
|
+
- repositorio: <https://github.com/gerlanss/Sema>
|
|
93
|
+
- docs: <https://github.com/gerlanss/Sema/tree/main/docs>
|
package/dist/drift.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { NivelConfiancaSemantica, NivelRiscoSemantico } from "@sema/nucleo";
|
|
1
|
+
import type { EngineBanco, NivelConfiancaSemantica, NivelRiscoSemantico, TipoRecursoPersistencia } from "@sema/nucleo";
|
|
2
2
|
import type { ContextoProjetoCarregado } from "./projeto.js";
|
|
3
3
|
type ConsumerFramework = "nextjs-consumer" | "react-vite-consumer" | "angular-consumer" | "flutter-consumer";
|
|
4
4
|
interface RegistroConsumerSurfaceDrift {
|
|
@@ -11,6 +11,12 @@ interface RegistroConsumerBridgeDrift {
|
|
|
11
11
|
arquivo: string;
|
|
12
12
|
simbolo: string;
|
|
13
13
|
}
|
|
14
|
+
export type EscopoDriftReal = "arquivo" | "modulo" | "projeto";
|
|
15
|
+
export interface OpcoesDriftLegado {
|
|
16
|
+
escopo?: EscopoDriftReal;
|
|
17
|
+
ignorarWorktrees?: boolean;
|
|
18
|
+
ignorarConsumidoresLaterais?: boolean;
|
|
19
|
+
}
|
|
14
20
|
export interface DiagnosticoDrift {
|
|
15
21
|
tipo: "impl_quebrado" | "task_sem_impl" | "rota_divergente" | "recurso_divergente" | "vinculo_quebrado" | "seguranca_frouxa";
|
|
16
22
|
modulo: string;
|
|
@@ -36,16 +42,36 @@ interface RegistroRotaDivergente {
|
|
|
36
42
|
caminho?: string;
|
|
37
43
|
motivo: string;
|
|
38
44
|
}
|
|
45
|
+
type OrigemRecursoDrift = "firebase" | EngineBanco;
|
|
46
|
+
type TipoRecursoDrift = "colecao" | TipoRecursoPersistencia;
|
|
47
|
+
interface RecursoResolvido {
|
|
48
|
+
origem: OrigemRecursoDrift;
|
|
49
|
+
nome: string;
|
|
50
|
+
arquivo: string;
|
|
51
|
+
simbolo?: string;
|
|
52
|
+
tipo: TipoRecursoDrift;
|
|
53
|
+
}
|
|
39
54
|
interface RegistroRecursoDrift {
|
|
40
55
|
modulo: string;
|
|
41
56
|
task: string;
|
|
42
57
|
categoria: "persistencia";
|
|
43
58
|
alvo: string;
|
|
44
59
|
arquivo: string;
|
|
45
|
-
origem:
|
|
46
|
-
tipo:
|
|
60
|
+
origem: OrigemRecursoDrift;
|
|
61
|
+
tipo: TipoRecursoDrift;
|
|
47
62
|
status: "resolvido" | "divergente";
|
|
48
63
|
}
|
|
64
|
+
interface RegistroColunaPersistenciaDrift {
|
|
65
|
+
engine: EngineBanco;
|
|
66
|
+
recurso: string;
|
|
67
|
+
coluna: string;
|
|
68
|
+
arquivo: string;
|
|
69
|
+
}
|
|
70
|
+
interface RegistroRepositorioPersistenciaDrift {
|
|
71
|
+
engine: EngineBanco;
|
|
72
|
+
recurso: string;
|
|
73
|
+
arquivo: string;
|
|
74
|
+
}
|
|
49
75
|
interface SimboloCandidatoDrift {
|
|
50
76
|
origem: "ts" | "py" | "dart" | "cs" | "java" | "go" | "rust" | "cpp";
|
|
51
77
|
caminho: string;
|
|
@@ -82,9 +108,69 @@ interface RegistroVinculoDrift {
|
|
|
82
108
|
status: "resolvido" | "parcial" | "nao_encontrado";
|
|
83
109
|
confianca: NivelConfiancaSemantica;
|
|
84
110
|
}
|
|
111
|
+
export interface RegistroPersistenciaRealDrift {
|
|
112
|
+
modulo: string;
|
|
113
|
+
task: string;
|
|
114
|
+
alvo: string;
|
|
115
|
+
engine: OrigemRecursoDrift | "desconhecido";
|
|
116
|
+
tipo: TipoRecursoDrift;
|
|
117
|
+
status: "materializado" | "parcial" | "divergente";
|
|
118
|
+
arquivos: string[];
|
|
119
|
+
colunas: string[];
|
|
120
|
+
repositorios: string[];
|
|
121
|
+
compatibilidade: "nativo" | "adaptado" | "parcial" | "invalido" | "desconhecida";
|
|
122
|
+
motivoCompatibilidade?: string;
|
|
123
|
+
}
|
|
124
|
+
export interface ConfiguracaoEscopoDriftAplicada {
|
|
125
|
+
escopo: EscopoDriftReal;
|
|
126
|
+
ignorarWorktrees: boolean;
|
|
127
|
+
ignorarConsumidoresLaterais: boolean;
|
|
128
|
+
termosEscopo: string[];
|
|
129
|
+
}
|
|
130
|
+
export interface RegistroImpactoSemanticoArquivo {
|
|
131
|
+
arquivo: string;
|
|
132
|
+
tipo: "contrato" | "persistencia" | "repositorio" | "rota" | "worker" | "ui" | "teste" | "codigo";
|
|
133
|
+
prioridade: "alta" | "media" | "baixa";
|
|
134
|
+
linhas: number[];
|
|
135
|
+
motivos: string[];
|
|
136
|
+
}
|
|
137
|
+
export interface ResultadoImpactoSemantico {
|
|
138
|
+
comando: "impacto";
|
|
139
|
+
sucesso: boolean;
|
|
140
|
+
escopo: EscopoDriftReal;
|
|
141
|
+
alvoSemantico: string;
|
|
142
|
+
mudancaProposta: string;
|
|
143
|
+
contratosAfetados: string[];
|
|
144
|
+
tasksAfetadas: string[];
|
|
145
|
+
routesAfetadas: string[];
|
|
146
|
+
superficiesAfetadas: string[];
|
|
147
|
+
persistenciaAfetada: string[];
|
|
148
|
+
arquivos: RegistroImpactoSemanticoArquivo[];
|
|
149
|
+
ordemOperacional: string[];
|
|
150
|
+
validacoes: string[];
|
|
151
|
+
}
|
|
152
|
+
export interface SugestaoRenomeacaoSemantica {
|
|
153
|
+
arquivo: string;
|
|
154
|
+
linha: number;
|
|
155
|
+
atual: string;
|
|
156
|
+
sugerido: string;
|
|
157
|
+
contexto: string;
|
|
158
|
+
}
|
|
159
|
+
export interface ResultadoRenomeacaoSemantica {
|
|
160
|
+
comando: "renomear-semantico";
|
|
161
|
+
sucesso: boolean;
|
|
162
|
+
escopo: EscopoDriftReal;
|
|
163
|
+
de: string;
|
|
164
|
+
para: string;
|
|
165
|
+
arquivos: RegistroImpactoSemanticoArquivo[];
|
|
166
|
+
sugestoes: SugestaoRenomeacaoSemantica[];
|
|
167
|
+
ordemOperacional: string[];
|
|
168
|
+
validacoes: string[];
|
|
169
|
+
}
|
|
85
170
|
export interface ResultadoDrift {
|
|
86
171
|
comando: "drift";
|
|
87
172
|
sucesso: boolean;
|
|
173
|
+
escopo_aplicado: ConfiguracaoEscopoDriftAplicada;
|
|
88
174
|
consumerFramework: ConsumerFramework | null;
|
|
89
175
|
appRoutes: string[];
|
|
90
176
|
consumerSurfaces: RegistroConsumerSurfaceDrift[];
|
|
@@ -103,6 +189,7 @@ export interface ResultadoDrift {
|
|
|
103
189
|
rotas_divergentes: RegistroRotaDivergente[];
|
|
104
190
|
recursos_validos: RegistroRecursoDrift[];
|
|
105
191
|
recursos_divergentes: RegistroRecursoDrift[];
|
|
192
|
+
persistencia_real: RegistroPersistenciaRealDrift[];
|
|
106
193
|
resumo_operacional: {
|
|
107
194
|
scoreMedio: number;
|
|
108
195
|
confiancaGeral: NivelConfiancaSemantica;
|
|
@@ -114,5 +201,12 @@ export interface ResultadoDrift {
|
|
|
114
201
|
};
|
|
115
202
|
diagnosticos: DiagnosticoDrift[];
|
|
116
203
|
}
|
|
117
|
-
|
|
204
|
+
declare function indexarPersistenciaDetalhada(diretorios: string[]): Promise<{
|
|
205
|
+
colunas: RegistroColunaPersistenciaDrift[];
|
|
206
|
+
repositorios: RegistroRepositorioPersistenciaDrift[];
|
|
207
|
+
}>;
|
|
208
|
+
export declare function analisarPersistenciaReal(contexto: ContextoProjetoCarregado, mapaRecursos?: Map<string, RecursoResolvido[]>, detalhesPersistencia?: Awaited<ReturnType<typeof indexarPersistenciaDetalhada>>, opcoes?: OpcoesDriftLegado): Promise<RegistroPersistenciaRealDrift[]>;
|
|
209
|
+
export declare function analisarDriftLegado(contexto: ContextoProjetoCarregado, opcoes?: OpcoesDriftLegado): Promise<ResultadoDrift>;
|
|
210
|
+
export declare function gerarMapaImpactoSemantico(contexto: ContextoProjetoCarregado, alvoSemantico: string, mudancaProposta: string, opcoes?: OpcoesDriftLegado): Promise<ResultadoImpactoSemantico>;
|
|
211
|
+
export declare function assistirRenomeacaoSemantica(contexto: ContextoProjetoCarregado, nomeAtual: string, nomeNovo: string, opcoes?: OpcoesDriftLegado): Promise<ResultadoRenomeacaoSemantica>;
|
|
118
212
|
export {};
|