@semacode/cli 1.5.29 → 1.5.31
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/dist/comandos.js +69 -0
- package/dist/comandos.js.map +1 -1
- package/dist/dev/index.d.ts +18 -0
- package/dist/dev/index.js +143 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/guard.d.ts +35 -0
- package/dist/guard.js +164 -0
- package/dist/guard.js.map +1 -0
- package/dist/index.js.map +1 -1
- package/dist/init/index.d.ts +23 -0
- package/dist/init/index.js +112 -0
- package/dist/init/index.js.map +1 -0
- package/dist/init/templates.d.ts +11 -0
- package/dist/init/templates.js +660 -0
- package/dist/init/templates.js.map +1 -0
- package/dist/sync/index.d.ts +24 -0
- package/dist/sync/index.js +174 -0
- package/dist/sync/index.js.map +1 -0
- package/exemplos/.prepack-generated +1 -0
- package/node_modules/@sema/gerador-css/package.json +14 -7
- package/node_modules/@sema/gerador-css/src/index.ts +605 -0
- package/node_modules/@sema/gerador-css/tsconfig.json +13 -0
- package/node_modules/@sema/gerador-css/tsconfig.tsbuildinfo +1 -0
- package/node_modules/@sema/gerador-dart/package.json +14 -7
- package/node_modules/@sema/gerador-dart/src/index.ts +52 -0
- package/node_modules/@sema/gerador-dart/tsconfig.json +13 -0
- package/node_modules/@sema/gerador-dart/tsconfig.tsbuildinfo +1 -0
- package/node_modules/@sema/gerador-html/package.json +14 -7
- package/node_modules/@sema/gerador-html/src/index.ts +185 -0
- package/node_modules/@sema/gerador-html/tsconfig.json +13 -0
- package/node_modules/@sema/gerador-html/tsconfig.tsbuildinfo +1 -0
- package/node_modules/@sema/gerador-javascript/package.json +14 -7
- package/node_modules/@sema/gerador-javascript/src/index.ts +461 -0
- package/node_modules/@sema/gerador-javascript/tsconfig.json +13 -0
- package/node_modules/@sema/gerador-javascript/tsconfig.tsbuildinfo +1 -0
- package/node_modules/@sema/gerador-lua/package.json +14 -7
- package/node_modules/@sema/gerador-lua/src/index.ts +359 -0
- package/node_modules/@sema/gerador-lua/tsconfig.json +13 -0
- package/node_modules/@sema/gerador-lua/tsconfig.tsbuildinfo +1 -0
- package/node_modules/@sema/gerador-python/package.json +14 -7
- package/node_modules/@sema/gerador-python/src/index.ts +850 -0
- package/node_modules/@sema/gerador-python/tsconfig.json +13 -0
- package/node_modules/@sema/gerador-python/tsconfig.tsbuildinfo +1 -0
- package/node_modules/@sema/gerador-typescript/package.json +14 -7
- package/node_modules/@sema/gerador-typescript/src/index.ts +876 -0
- package/node_modules/@sema/gerador-typescript/tsconfig.json +13 -0
- package/node_modules/@sema/gerador-typescript/tsconfig.tsbuildinfo +1 -0
- package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.d.ts +22 -0
- package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js +97 -0
- package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js.map +1 -0
- 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/package.json +10 -7
- package/node_modules/@sema/nucleo/src/ast/tipos.ts +207 -0
- package/node_modules/@sema/nucleo/src/diagnosticos/index.ts +43 -0
- package/node_modules/@sema/nucleo/src/diagnosticos/melhorador.ts +130 -0
- package/node_modules/@sema/nucleo/src/formatador/index.ts +530 -0
- package/node_modules/@sema/nucleo/src/index.ts +184 -0
- package/node_modules/@sema/nucleo/src/ir/conversor.ts +1037 -0
- package/node_modules/@sema/nucleo/src/ir/modelos.ts +403 -0
- package/node_modules/@sema/nucleo/src/lexer/lexer.ts +166 -0
- package/node_modules/@sema/nucleo/src/lexer/tokens.ts +79 -0
- package/node_modules/@sema/nucleo/src/parser/gramatica.ebnf +41 -0
- package/node_modules/@sema/nucleo/src/parser/parser.ts +936 -0
- package/node_modules/@sema/nucleo/src/persistencia/contratos.ts +379 -0
- package/node_modules/@sema/nucleo/src/semantico/analisador.ts +3126 -0
- package/node_modules/@sema/nucleo/src/semantico/estruturas.ts +665 -0
- package/node_modules/@sema/nucleo/src/semantico/seguranca.ts +362 -0
- package/node_modules/@sema/nucleo/src/util/arquivos.ts +28 -0
- package/node_modules/@sema/nucleo/tsconfig.json +9 -0
- package/node_modules/@sema/nucleo/tsconfig.tsbuildinfo +1 -0
- package/node_modules/@sema/padroes/package.json +10 -7
- package/node_modules/@sema/padroes/src/index.ts +382 -0
- package/node_modules/@sema/padroes/tsconfig.json +9 -0
- package/node_modules/@sema/padroes/tsconfig.tsbuildinfo +1 -0
- package/package.json +74 -75
- package/AGENTS.md +0 -294
- package/AGENT_CONTEXT_PACK.json +0 -164
- package/LICENSE +0 -22
- package/SEMA_BRIEF.curto.txt +0 -11
- package/SEMA_BRIEF.md +0 -511
- package/SEMA_BRIEF.micro.txt +0 -9
- package/SEMA_INDEX.json +0 -7588
- package/docs/AGENT_STARTER.md +0 -109
- package/docs/api.md +0 -82
- package/docs/cli.md +0 -175
- package/docs/como-ensinar-a-sema-para-ia.md +0 -155
- package/docs/deploy.md +0 -93
- package/docs/documentacao.md +0 -88
- package/docs/env.md +0 -105
- package/docs/extensao-vscode.md +0 -53
- package/docs/fluxo-pratico-ia-sema.md +0 -187
- package/docs/instalacao-e-primeiro-uso.md +0 -134
- package/docs/integracao-com-ia.md +0 -110
- package/docs/mcp.md +0 -292
- package/docs/pagamento-ponta-a-ponta.md +0 -171
- package/docs/persistencia-vendor-first.md +0 -151
- package/docs/prompt-base-ia-sema.md +0 -111
- package/docs/repositories.md +0 -54
- package/docs/rollback.md +0 -49
- package/docs/seguranca.md +0 -126
- package/docs/sintaxe.md +0 -218
- package/llms-full.txt +0 -35
- package/llms.txt +0 -18
package/dist/comandos.js
CHANGED
|
@@ -9,6 +9,9 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { operarBridgeCliParaMcp, configurarBridgeLocal, obterTokenMcpAmbiente, } from "./bridge.js";
|
|
11
11
|
import { gerarPacoteContextoChat, } from "./contexto.js";
|
|
12
|
+
import { comandoInit } from "./init/index.js";
|
|
13
|
+
import { comandoDev } from "./dev/index.js";
|
|
14
|
+
import { comandoSyncPrisma } from "./sync/index.js";
|
|
12
15
|
// ---------------------------------------------------------------------------
|
|
13
16
|
// Handlers dos novos comandos (modulares, com contrato .sema)
|
|
14
17
|
// ---------------------------------------------------------------------------
|
|
@@ -100,11 +103,77 @@ async function comandoContextoChat(posicionais, args, emJson) {
|
|
|
100
103
|
return 0;
|
|
101
104
|
}
|
|
102
105
|
// ---------------------------------------------------------------------------
|
|
106
|
+
// Guarda de governança
|
|
107
|
+
// ---------------------------------------------------------------------------
|
|
108
|
+
async function comandoInitHandler(posicionais, args, emJson) {
|
|
109
|
+
try {
|
|
110
|
+
await comandoInit([...posicionais, ...args]);
|
|
111
|
+
return 0;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return 1;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async function comandoDevHandler(posicionais, args, emJson) {
|
|
118
|
+
try {
|
|
119
|
+
await comandoDev([...posicionais, ...args]);
|
|
120
|
+
return 0;
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return 1;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async function comandoSyncPrismaHandler(posicionais, args, emJson) {
|
|
127
|
+
try {
|
|
128
|
+
await comandoSyncPrisma([...posicionais, ...args]);
|
|
129
|
+
return 0;
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return 1;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
async function comandoGuard(posicionais, _args, emJson) {
|
|
136
|
+
const { ativarGuarda, desativarGuarda, statusGuarda } = await import("./guard.js");
|
|
137
|
+
const baseProjeto = process.cwd();
|
|
138
|
+
const subcomando = posicionais[0] ?? "status";
|
|
139
|
+
let resultado;
|
|
140
|
+
switch (subcomando) {
|
|
141
|
+
case "on":
|
|
142
|
+
resultado = await ativarGuarda(baseProjeto);
|
|
143
|
+
break;
|
|
144
|
+
case "off":
|
|
145
|
+
resultado = await desativarGuarda(baseProjeto);
|
|
146
|
+
break;
|
|
147
|
+
case "status":
|
|
148
|
+
default:
|
|
149
|
+
resultado = await statusGuarda(baseProjeto);
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
if (emJson) {
|
|
153
|
+
console.log(JSON.stringify(resultado, null, 2));
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
console.log(resultado.mensagem ?? `Guarda: ${resultado.sucesso ? "ok" : "falha"}`);
|
|
157
|
+
if (resultado.estado) {
|
|
158
|
+
console.log(` Ativo: ${resultado.estado.ativo ? "sim" : "nao"}`);
|
|
159
|
+
console.log(` Docs-impacto: ${resultado.estado.docsImpactoChamado ? "chamado" : "pendente"}`);
|
|
160
|
+
if (resultado.estado.intencao) {
|
|
161
|
+
console.log(` Intencao: ${resultado.estado.intencao}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return resultado.sucesso ? 0 : 1;
|
|
166
|
+
}
|
|
167
|
+
// ---------------------------------------------------------------------------
|
|
103
168
|
// Registro
|
|
104
169
|
// ---------------------------------------------------------------------------
|
|
105
170
|
export const REGISTRO_COMANDOS = {
|
|
106
171
|
"mcp-client": comandoMcpClient,
|
|
107
172
|
"bridge-config": comandoBridgeConfig,
|
|
108
173
|
"contexto-chat": comandoContextoChat,
|
|
174
|
+
"guard": comandoGuard,
|
|
175
|
+
"init": comandoInitHandler,
|
|
176
|
+
"dev": comandoDevHandler,
|
|
177
|
+
"sync": comandoSyncPrismaHandler,
|
|
109
178
|
};
|
|
110
179
|
//# sourceMappingURL=comandos.js.map
|
package/dist/comandos.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comandos.js","sourceRoot":"","sources":["../src/comandos.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,GAGtB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,uBAAuB,GAGxB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"comandos.js","sourceRoot":"","sources":["../src/comandos.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface SessaoDev {
|
|
2
|
+
id: string;
|
|
3
|
+
pastaObservada: string;
|
|
4
|
+
modo: 'rigoroso' | 'permissivo';
|
|
5
|
+
contratosEmDraft: string[];
|
|
6
|
+
ultimaValidacao: Date;
|
|
7
|
+
}
|
|
8
|
+
export declare function iniciarModoDev(pastaContratos: string, alvoCodigo?: string, modoInicial?: 'rigoroso' | 'permissivo'): Promise<{
|
|
9
|
+
sessao: SessaoDev;
|
|
10
|
+
arquivosObservados: number;
|
|
11
|
+
statusWatch: string;
|
|
12
|
+
}>;
|
|
13
|
+
export declare function promoverParaProduction(caminhoContrato: string, verificacoesPendentes?: string[]): Promise<{
|
|
14
|
+
promovido: boolean;
|
|
15
|
+
checksRestantes: string[];
|
|
16
|
+
scoreDrift: number;
|
|
17
|
+
}>;
|
|
18
|
+
export declare function comandoDev(args: string[]): Promise<void>;
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
// Modo dev --watch para paralelizacao
|
|
2
|
+
// Contrato: cli_dev_mode.sema
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import { spawn } from 'child_process';
|
|
6
|
+
const sessoes = new Map();
|
|
7
|
+
export async function iniciarModoDev(pastaContratos, alvoCodigo, modoInicial = 'permissivo') {
|
|
8
|
+
// Validar pasta
|
|
9
|
+
if (!fs.existsSync(pastaContratos)) {
|
|
10
|
+
throw new Error(`Diretorio nao existe: ${pastaContratos}`);
|
|
11
|
+
}
|
|
12
|
+
// Contar arquivos .sema
|
|
13
|
+
const arquivos = fs.readdirSync(pastaContratos);
|
|
14
|
+
const contratos = arquivos.filter(f => f.endsWith('.sema'));
|
|
15
|
+
if (contratos.length === 0) {
|
|
16
|
+
throw new Error(`Nenhum arquivo .sema encontrado em ${pastaContratos}`);
|
|
17
|
+
}
|
|
18
|
+
// Criar sessao
|
|
19
|
+
const sessao = {
|
|
20
|
+
id: `dev_${Date.now()}`,
|
|
21
|
+
pastaObservada: path.resolve(pastaContratos),
|
|
22
|
+
modo: modoInicial,
|
|
23
|
+
contratosEmDraft: contratos.map(c => path.join(pastaContratos, c)),
|
|
24
|
+
ultimaValidacao: new Date()
|
|
25
|
+
};
|
|
26
|
+
sessoes.set(sessao.id, sessao);
|
|
27
|
+
console.log(`\n🔍 Modo DEV iniciado (${modoInicial})`);
|
|
28
|
+
console.log(` 📁 Observando: ${sessao.pastaObservada}`);
|
|
29
|
+
console.log(` 📄 Contratos: ${contratos.length}`);
|
|
30
|
+
console.log(` 💡 Alteracoes serao validadas em tempo real\n`);
|
|
31
|
+
// Iniciar watcher simples
|
|
32
|
+
iniciarWatcher(sessao);
|
|
33
|
+
return {
|
|
34
|
+
sessao,
|
|
35
|
+
arquivosObservados: contratos.length,
|
|
36
|
+
statusWatch: 'ativo'
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function iniciarWatcher(sessao) {
|
|
40
|
+
let timeout = null;
|
|
41
|
+
fs.watch(sessao.pastaObservada, { recursive: true }, (evento, nomeArquivo) => {
|
|
42
|
+
if (!nomeArquivo || !nomeArquivo.endsWith('.sema'))
|
|
43
|
+
return;
|
|
44
|
+
// Debounce
|
|
45
|
+
if (timeout)
|
|
46
|
+
clearTimeout(timeout);
|
|
47
|
+
timeout = setTimeout(() => {
|
|
48
|
+
const caminhoCompleto = path.join(sessao.pastaObservada, nomeArquivo);
|
|
49
|
+
if (fs.existsSync(caminhoCompleto)) {
|
|
50
|
+
console.log(`\n📝 Alteracao detectada: ${nomeArquivo}`);
|
|
51
|
+
validarAlteracao(caminhoCompleto, sessao.modo);
|
|
52
|
+
}
|
|
53
|
+
}, 500);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
async function validarAlteracao(caminhoArquivo, modo) {
|
|
57
|
+
// Executar validacao via CLI
|
|
58
|
+
const semaPath = path.resolve('pacotes/cli/dist/index.js');
|
|
59
|
+
const args = ['validar', caminhoArquivo];
|
|
60
|
+
if (modo === 'permissivo') {
|
|
61
|
+
console.log(' 🟡 Modo permissivo: mostrando apenas warnings\n');
|
|
62
|
+
}
|
|
63
|
+
const processo = spawn('node', [semaPath, ...args], {
|
|
64
|
+
stdio: 'inherit',
|
|
65
|
+
shell: true
|
|
66
|
+
});
|
|
67
|
+
processo.on('close', (codigo) => {
|
|
68
|
+
if (codigo === 0) {
|
|
69
|
+
console.log(' ✅ Validacao OK\n');
|
|
70
|
+
}
|
|
71
|
+
else if (modo === 'permissivo') {
|
|
72
|
+
console.log(' ⚠️ Warnings encontrados (nao bloqueia no modo draft)\n');
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
console.log(' ❌ Erros encontrados\n');
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
export async function promoverParaProduction(caminhoContrato, verificacoesPendentes) {
|
|
80
|
+
console.log(`\n🚀 Promovendo ${path.basename(caminhoContrato)} para PRODUCTION...`);
|
|
81
|
+
// Validar rigorosamente
|
|
82
|
+
const semaPath = path.resolve('pacotes/cli/dist/index.js');
|
|
83
|
+
return new Promise((resolve) => {
|
|
84
|
+
const processo = spawn('node', [semaPath, 'validar', caminhoContrato, '--json'], {
|
|
85
|
+
shell: true
|
|
86
|
+
});
|
|
87
|
+
let saida = '';
|
|
88
|
+
processo.stdout?.on('data', (data) => { saida += data; });
|
|
89
|
+
processo.on('close', () => {
|
|
90
|
+
try {
|
|
91
|
+
const resultado = JSON.parse(saida);
|
|
92
|
+
const temErros = resultado.bloqueia_acao === true;
|
|
93
|
+
if (temErros) {
|
|
94
|
+
console.log(' ❌ Bloqueado: resolva os erros antes de promover\n');
|
|
95
|
+
resolve({
|
|
96
|
+
promovido: false,
|
|
97
|
+
checksRestantes: resultado.erros?.map((e) => e.codigo) || [],
|
|
98
|
+
scoreDrift: 50
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
console.log(' ✅ Promovido com sucesso!\n');
|
|
103
|
+
resolve({ promovido: true, checksRestantes: [], scoreDrift: 95 });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
console.log(' ⚠️ Erro ao verificar status\n');
|
|
108
|
+
resolve({ promovido: false, checksRestantes: ['erro_verificacao'], scoreDrift: 0 });
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
// Handler CLI
|
|
114
|
+
export async function comandoDev(args) {
|
|
115
|
+
const promoverFlag = args.includes('--promover') || args.includes('-p');
|
|
116
|
+
if (promoverFlag) {
|
|
117
|
+
const idx = args.findIndex(a => a === '--promover' || a === '-p');
|
|
118
|
+
const caminhoContrato = args[idx + 1];
|
|
119
|
+
if (!caminhoContrato) {
|
|
120
|
+
console.error('Uso: sema dev --promover <caminho-contrato>');
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
const resultado = await promoverParaProduction(caminhoContrato);
|
|
124
|
+
process.exit(resultado.promovido ? 0 : 1);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
// Modo watch normal
|
|
128
|
+
const pastaIdx = args.findIndex(a => a === '--pasta' || a === '-d');
|
|
129
|
+
const pasta = pastaIdx !== -1 ? args[pastaIdx + 1] : 'contratos/';
|
|
130
|
+
const modoIdx = args.findIndex(a => a === '--modo' || a === '-m');
|
|
131
|
+
const modo = modoIdx !== -1 ? args[modoIdx + 1] : 'permissivo';
|
|
132
|
+
try {
|
|
133
|
+
await iniciarModoDev(pasta, undefined, modo);
|
|
134
|
+
// Manter processo vivo
|
|
135
|
+
console.log('Pressione Ctrl+C para parar\n');
|
|
136
|
+
process.stdin.resume();
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
console.error(`Erro: ${err instanceof Error ? err.message : err}`);
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dev/index.ts"],"names":[],"mappings":"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"}
|
package/dist/guard.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guarda de governança Sema.
|
|
3
|
+
*
|
|
4
|
+
* Cria um bloqueio local que obriga a chamada de `docs-impacto`
|
|
5
|
+
* antes de operações destrutivas (compilar, publicar, validar pesado).
|
|
6
|
+
*
|
|
7
|
+
* Arquivo de estado: .sema/guard.json
|
|
8
|
+
*
|
|
9
|
+
* Contrato: contratos/sema/guard.sema
|
|
10
|
+
*/
|
|
11
|
+
export interface EstadoGuarda {
|
|
12
|
+
ativo: boolean;
|
|
13
|
+
sessaoId: string;
|
|
14
|
+
ativadoEm: string;
|
|
15
|
+
docsImpactoChamado: boolean;
|
|
16
|
+
intencao?: string;
|
|
17
|
+
docsLidas: string[];
|
|
18
|
+
ultimaAtualizacao: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ResultadoGuarda {
|
|
21
|
+
comando: string;
|
|
22
|
+
sucesso: boolean;
|
|
23
|
+
estado?: EstadoGuarda;
|
|
24
|
+
bloqueado?: boolean;
|
|
25
|
+
mensagem?: string;
|
|
26
|
+
}
|
|
27
|
+
export declare function ativarGuarda(baseProjeto: string): Promise<ResultadoGuarda>;
|
|
28
|
+
export declare function desativarGuarda(baseProjeto: string): Promise<ResultadoGuarda>;
|
|
29
|
+
export declare function statusGuarda(baseProjeto: string): Promise<ResultadoGuarda>;
|
|
30
|
+
export declare function registrarDocsImpacto(baseProjeto: string, intencao: string): Promise<ResultadoGuarda>;
|
|
31
|
+
export declare function registrarDocLida(baseProjeto: string, caminhoDoc: string): Promise<ResultadoGuarda>;
|
|
32
|
+
export declare function verificarSePodeProsseguir(baseProjeto: string, operacao: string): Promise<{
|
|
33
|
+
pode: boolean;
|
|
34
|
+
motivo?: string;
|
|
35
|
+
}>;
|
package/dist/guard.js
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guarda de governança Sema.
|
|
3
|
+
*
|
|
4
|
+
* Cria um bloqueio local que obriga a chamada de `docs-impacto`
|
|
5
|
+
* antes de operações destrutivas (compilar, publicar, validar pesado).
|
|
6
|
+
*
|
|
7
|
+
* Arquivo de estado: .sema/guard.json
|
|
8
|
+
*
|
|
9
|
+
* Contrato: contratos/sema/guard.sema
|
|
10
|
+
*/
|
|
11
|
+
import { readFile, writeFile, mkdir } from "node:fs/promises";
|
|
12
|
+
import path from "node:path";
|
|
13
|
+
import { randomUUID } from "node:crypto";
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Constantes
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
const ARQUIVO_GUARD = path.join(".sema", "guard.json");
|
|
18
|
+
function caminhoGuard(baseProjeto) {
|
|
19
|
+
return path.resolve(baseProjeto, ARQUIVO_GUARD);
|
|
20
|
+
}
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Estado padrão
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
function estadoVazio() {
|
|
25
|
+
return {
|
|
26
|
+
ativo: false,
|
|
27
|
+
sessaoId: "",
|
|
28
|
+
ativadoEm: "",
|
|
29
|
+
docsImpactoChamado: false,
|
|
30
|
+
docsLidas: [],
|
|
31
|
+
ultimaAtualizacao: "",
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// Ler / escrever estado do guarda
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
async function lerEstado(baseProjeto) {
|
|
38
|
+
try {
|
|
39
|
+
const conteudo = await readFile(caminhoGuard(baseProjeto), "utf8");
|
|
40
|
+
return JSON.parse(conteudo);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return estadoVazio();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async function escreverEstado(baseProjeto, estado) {
|
|
47
|
+
const dir = path.dirname(caminhoGuard(baseProjeto));
|
|
48
|
+
await mkdir(dir, { recursive: true });
|
|
49
|
+
estado.ultimaAtualizacao = new Date().toISOString();
|
|
50
|
+
await writeFile(caminhoGuard(baseProjeto), JSON.stringify(estado, null, 2), "utf8");
|
|
51
|
+
}
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
// Ações do guarda
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
export async function ativarGuarda(baseProjeto) {
|
|
56
|
+
const estado = await lerEstado(baseProjeto);
|
|
57
|
+
if (estado.ativo) {
|
|
58
|
+
return {
|
|
59
|
+
comando: "guard on",
|
|
60
|
+
sucesso: false,
|
|
61
|
+
estado,
|
|
62
|
+
mensagem: `Guarda ja esta ativo (sessao: ${estado.sessaoId}). Desative com 'sema guard off' primeiro.`,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const novoEstado = {
|
|
66
|
+
ativo: true,
|
|
67
|
+
sessaoId: randomUUID(),
|
|
68
|
+
ativadoEm: new Date().toISOString(),
|
|
69
|
+
docsImpactoChamado: false,
|
|
70
|
+
docsLidas: [],
|
|
71
|
+
ultimaAtualizacao: new Date().toISOString(),
|
|
72
|
+
};
|
|
73
|
+
await escreverEstado(baseProjeto, novoEstado);
|
|
74
|
+
return {
|
|
75
|
+
comando: "guard on",
|
|
76
|
+
sucesso: true,
|
|
77
|
+
estado: novoEstado,
|
|
78
|
+
mensagem: `Guarda ativado. Sessao: ${novoEstado.sessaoId.slice(0, 8)}...`,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export async function desativarGuarda(baseProjeto) {
|
|
82
|
+
const estado = await lerEstado(baseProjeto);
|
|
83
|
+
if (!estado.ativo) {
|
|
84
|
+
return {
|
|
85
|
+
comando: "guard off",
|
|
86
|
+
sucesso: false,
|
|
87
|
+
estado,
|
|
88
|
+
mensagem: "Guarda nao esta ativo.",
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
await escreverEstado(baseProjeto, estadoVazio());
|
|
92
|
+
return {
|
|
93
|
+
comando: "guard off",
|
|
94
|
+
sucesso: true,
|
|
95
|
+
estado: estadoVazio(),
|
|
96
|
+
mensagem: "Guarda desativado.",
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
export async function statusGuarda(baseProjeto) {
|
|
100
|
+
const estado = await lerEstado(baseProjeto);
|
|
101
|
+
return {
|
|
102
|
+
comando: "guard status",
|
|
103
|
+
sucesso: true,
|
|
104
|
+
estado,
|
|
105
|
+
bloqueado: estado.ativo && !estado.docsImpactoChamado,
|
|
106
|
+
mensagem: estado.ativo
|
|
107
|
+
? estado.docsImpactoChamado
|
|
108
|
+
? `Guarda ativo. Docs-impacto ja registrado. Sessao: ${estado.sessaoId.slice(0, 8)}...`
|
|
109
|
+
: `Guarda ativo. Docs-impacto pendente! Sessao: ${estado.sessaoId.slice(0, 8)}...`
|
|
110
|
+
: "Guarda inativo.",
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
export async function registrarDocsImpacto(baseProjeto, intencao) {
|
|
114
|
+
const estado = await lerEstado(baseProjeto);
|
|
115
|
+
if (!estado.ativo) {
|
|
116
|
+
// Guarda inativo: registrar mesmo assim (útil pra relatório)
|
|
117
|
+
return {
|
|
118
|
+
comando: "guard registrar-docs",
|
|
119
|
+
sucesso: true,
|
|
120
|
+
mensagem: "Guarda inativo. Docs-impacto registrado em cache leve.",
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
estado.docsImpactoChamado = true;
|
|
124
|
+
estado.intencao = intencao;
|
|
125
|
+
await escreverEstado(baseProjeto, estado);
|
|
126
|
+
return {
|
|
127
|
+
comando: "guard registrar-docs",
|
|
128
|
+
sucesso: true,
|
|
129
|
+
estado,
|
|
130
|
+
mensagem: `Docs-impacto registrado: "${intencao.slice(0, 60)}"`,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
export async function registrarDocLida(baseProjeto, caminhoDoc) {
|
|
134
|
+
const estado = await lerEstado(baseProjeto);
|
|
135
|
+
if (!estado.ativo) {
|
|
136
|
+
return { comando: "guard registrar-doc", sucesso: true };
|
|
137
|
+
}
|
|
138
|
+
if (!estado.docsLidas.includes(caminhoDoc)) {
|
|
139
|
+
estado.docsLidas.push(caminhoDoc);
|
|
140
|
+
}
|
|
141
|
+
await escreverEstado(baseProjeto, estado);
|
|
142
|
+
return {
|
|
143
|
+
comando: "guard registrar-doc",
|
|
144
|
+
sucesso: true,
|
|
145
|
+
estado,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
// ---------------------------------------------------------------------------
|
|
149
|
+
// Verificação: operação pode prosseguir?
|
|
150
|
+
// ---------------------------------------------------------------------------
|
|
151
|
+
export async function verificarSePodeProsseguir(baseProjeto, operacao) {
|
|
152
|
+
const estado = await lerEstado(baseProjeto);
|
|
153
|
+
if (!estado.ativo) {
|
|
154
|
+
return { pode: true }; // Guarda inativo: liberado
|
|
155
|
+
}
|
|
156
|
+
if (!estado.docsImpactoChamado) {
|
|
157
|
+
return {
|
|
158
|
+
pode: false,
|
|
159
|
+
motivo: `Guarda ativo bloqueou "${operacao}". Execute 'sema docs-impacto --intencao "${operacao}"' primeiro.`,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
return { pode: true };
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"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"}
|