@semacode/cli 1.5.8 → 1.5.9
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 +1 -1
- package/README.md +5 -0
- package/SEMA_BRIEF.curto.txt +2 -2
- package/SEMA_BRIEF.md +4 -4
- package/SEMA_BRIEF.micro.txt +1 -1
- package/SEMA_INDEX.json +28 -18
- package/dist/docs.d.ts +56 -0
- package/dist/docs.js +407 -0
- package/dist/docs.js.map +1 -0
- package/dist/index.js +108 -0
- package/dist/index.js.map +1 -1
- package/docs/cli.md +5 -0
- package/docs/deploy.md +70 -0
- package/docs/documentacao.md +63 -0
- package/docs/env.md +56 -0
- package/docs/extensao-vscode.md +45 -0
- package/docs/instalacao-e-primeiro-uso.md +3 -0
- package/docs/integracao-com-ia.md +22 -0
- package/docs/mcp.md +51 -0
- package/docs/rollback.md +47 -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/package.json +1 -1
- package/node_modules/@sema/padroes/package.json +1 -1
- package/package.json +10 -10
package/dist/docs.js
ADDED
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
import { mkdir, readFile, readdir, stat, writeFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
const LIMITE_CONTEUDO_DOC = 16_000;
|
|
4
|
+
function normalizarTexto(valor) {
|
|
5
|
+
return valor
|
|
6
|
+
.normalize("NFD")
|
|
7
|
+
.replace(/[\u0300-\u036f]/g, "")
|
|
8
|
+
.toLowerCase();
|
|
9
|
+
}
|
|
10
|
+
function normalizarRelativo(valor) {
|
|
11
|
+
return valor.replace(/\\/g, "/").replace(/^\.\//, "");
|
|
12
|
+
}
|
|
13
|
+
function tituloDeRelativo(relativo) {
|
|
14
|
+
const base = path.basename(relativo, path.extname(relativo));
|
|
15
|
+
return base
|
|
16
|
+
.split(/[-_\s]+/)
|
|
17
|
+
.filter(Boolean)
|
|
18
|
+
.map((parte) => `${parte.charAt(0).toUpperCase()}${parte.slice(1)}`)
|
|
19
|
+
.join(" ");
|
|
20
|
+
}
|
|
21
|
+
async function caminhoExiste(caminho) {
|
|
22
|
+
try {
|
|
23
|
+
await stat(caminho);
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function caminhoEstaDentro(base, alvo) {
|
|
31
|
+
const relativo = path.relative(base, alvo);
|
|
32
|
+
return relativo === "" || (!relativo.startsWith("..") && !path.isAbsolute(relativo));
|
|
33
|
+
}
|
|
34
|
+
async function listarArquivosRecursivo(base, limite = 80) {
|
|
35
|
+
const encontrados = [];
|
|
36
|
+
async function visitar(pasta) {
|
|
37
|
+
if (encontrados.length >= limite || !(await caminhoExiste(pasta))) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const entradas = await readdir(pasta, { withFileTypes: true });
|
|
41
|
+
for (const entrada of entradas.sort((a, b) => a.name.localeCompare(b.name, "pt-BR"))) {
|
|
42
|
+
if (encontrados.length >= limite) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const caminho = path.join(pasta, entrada.name);
|
|
46
|
+
if (entrada.isDirectory()) {
|
|
47
|
+
if (!["node_modules", ".git", ".tmp", "dist"].includes(entrada.name)) {
|
|
48
|
+
await visitar(caminho);
|
|
49
|
+
}
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
encontrados.push(caminho);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
await visitar(base);
|
|
56
|
+
return encontrados;
|
|
57
|
+
}
|
|
58
|
+
const REGRAS_DOCUMENTACAO = [
|
|
59
|
+
{
|
|
60
|
+
categoria: "deploy",
|
|
61
|
+
padroes: [/deploy/, /publicar/, /producao/, /release/, /pipeline/, /\bci\b/, /\bcd\b/, /vercel/, /cloudflare/, /docker/],
|
|
62
|
+
docs: [
|
|
63
|
+
{ relativo: "docs/deploy.md", tipo: "runbook", motivo: "runbook de deploy antes de publicar ou alterar pipeline", permitirCriacao: true },
|
|
64
|
+
{ relativo: "docs/env.md", tipo: "runbook", motivo: "variaveis, secrets e ambientes usados no deploy", permitirCriacao: true },
|
|
65
|
+
{ relativo: "docs/rollback.md", tipo: "runbook", motivo: "plano de rollback obrigatorio antes de deploy", permitirCriacao: true },
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
categoria: "api",
|
|
70
|
+
padroes: [/rota/, /endpoint/, /\bapi\b/, /controller/, /webhook/, /http/],
|
|
71
|
+
docs: [
|
|
72
|
+
{ relativo: "docs/api.md", tipo: "documentacao", motivo: "contrato operacional de rotas e endpoints", permitirCriacao: true },
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
categoria: "auth",
|
|
77
|
+
padroes: [/auth/, /login/, /permiss/, /autoriz/, /token/, /oauth/, /seguranca/],
|
|
78
|
+
docs: [
|
|
79
|
+
{ relativo: "docs/auth.md", tipo: "documentacao", motivo: "regras de autenticacao, autorizacao e tokens", permitirCriacao: true },
|
|
80
|
+
{ relativo: "docs/seguranca.md", tipo: "documentacao", motivo: "politicas de seguranca afetadas pela mudanca", permitirCriacao: true },
|
|
81
|
+
],
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
categoria: "persistencia",
|
|
85
|
+
padroes: [/banco/, /database/, /persist/, /migration/, /migracao/, /prisma/, /postgres/, /redis/, /mongodb/],
|
|
86
|
+
docs: [
|
|
87
|
+
{ relativo: "docs/persistencia-vendor-first.md", tipo: "documentacao", motivo: "regras de persistencia vendor-first", permitirCriacao: false },
|
|
88
|
+
{ relativo: "docs/database.md", tipo: "runbook", motivo: "operacao de banco, migracoes e validacao de dados", permitirCriacao: true },
|
|
89
|
+
],
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
categoria: "mcp",
|
|
93
|
+
padroes: [/\bmcp\b/, /tool/, /ferramenta/, /server/, /stdio/],
|
|
94
|
+
docs: [
|
|
95
|
+
{ relativo: "pacotes/mcp/README.md", tipo: "pacote", motivo: "documentacao publica do pacote MCP", permitirCriacao: false },
|
|
96
|
+
{ relativo: "docs/integracao-com-ia.md", tipo: "documentacao", motivo: "integracao do Sema com agentes IA", permitirCriacao: false },
|
|
97
|
+
{ relativo: "docs/mcp.md", tipo: "documentacao", motivo: "runbook especifico de ferramentas MCP", permitirCriacao: true },
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
categoria: "cli",
|
|
102
|
+
padroes: [/\bcli\b/, /comando/, /terminal/],
|
|
103
|
+
docs: [
|
|
104
|
+
{ relativo: "pacotes/cli/README.md", tipo: "pacote", motivo: "documentacao publica da CLI", permitirCriacao: false },
|
|
105
|
+
{ relativo: "docs/cli.md", tipo: "documentacao", motivo: "guia operacional dos comandos da CLI", permitirCriacao: false },
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
categoria: "extensao",
|
|
110
|
+
padroes: [/vscode/, /extension/, /extensao/, /editor/, /\blsp\b/, /language server/],
|
|
111
|
+
docs: [
|
|
112
|
+
{ relativo: "pacotes/editor-vscode/README.md", tipo: "pacote", motivo: "documentacao publica da extensao VS Code", permitirCriacao: false },
|
|
113
|
+
{ relativo: "docs/extensao-vscode.md", tipo: "documentacao", motivo: "runbook da extensao VS Code", permitirCriacao: true },
|
|
114
|
+
],
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
categoria: "contrato",
|
|
118
|
+
padroes: [/contrato/, /\.sema/, /semant/, /\bsema\b/, /drift/, /governanca/],
|
|
119
|
+
docs: [
|
|
120
|
+
{ relativo: "docs/sintaxe.md", tipo: "documentacao", motivo: "sintaxe e blocos de contrato Sema", permitirCriacao: false },
|
|
121
|
+
{ relativo: "docs/fluxo-pratico-ia-sema.md", tipo: "documentacao", motivo: "fluxo IA-first antes de editar contratos", permitirCriacao: false },
|
|
122
|
+
],
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
categoria: "frontend",
|
|
126
|
+
padroes: [/frontend/, /\bui\b/, /react/, /vite/, /next/, /css/, /html/, /pagina/],
|
|
127
|
+
docs: [
|
|
128
|
+
{ relativo: "docs/frontend.md", tipo: "documentacao", motivo: "decisoes e validacoes de interface", permitirCriacao: true },
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
categoria: "testes",
|
|
133
|
+
padroes: [/teste/, /testar/, /qa/, /validacao/, /regressao/],
|
|
134
|
+
docs: [
|
|
135
|
+
{ relativo: "docs/testes.md", tipo: "runbook", motivo: "estrategia de testes e regressao", permitirCriacao: true },
|
|
136
|
+
],
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
categoria: "documentacao",
|
|
140
|
+
padroes: [/doc/, /readme/, /manual/, /runbook/, /onboarding/],
|
|
141
|
+
docs: [
|
|
142
|
+
{ relativo: "docs/README.md", tipo: "documentacao", motivo: "indice de documentacao do projeto", permitirCriacao: false },
|
|
143
|
+
{ relativo: "docs/documentacao.md", tipo: "documentacao", motivo: "politica de atualizacao documental", permitirCriacao: true },
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
];
|
|
147
|
+
function inferirCategorias(intencao, arquivosAlvo) {
|
|
148
|
+
const texto = normalizarTexto(`${intencao} ${arquivosAlvo.join(" ")}`);
|
|
149
|
+
const categorias = REGRAS_DOCUMENTACAO
|
|
150
|
+
.filter((regra) => regra.padroes.some((padrao) => padrao.test(texto)))
|
|
151
|
+
.map((regra) => regra.categoria);
|
|
152
|
+
return categorias.length > 0 ? [...new Set(categorias)] : ["mudanca"];
|
|
153
|
+
}
|
|
154
|
+
function criarTemplateDoc(doc, intencao, categorias, arquivosAlvo) {
|
|
155
|
+
const titulo = tituloDeRelativo(doc.relativo);
|
|
156
|
+
const linhas = [
|
|
157
|
+
`# ${titulo}`,
|
|
158
|
+
"",
|
|
159
|
+
"Documento criado pelo Sema porque uma IA declarou uma intencao que exige leitura operacional antes de agir.",
|
|
160
|
+
"",
|
|
161
|
+
"## Intencao",
|
|
162
|
+
"",
|
|
163
|
+
intencao || "Descrever a intencao operacional antes de executar a mudanca.",
|
|
164
|
+
"",
|
|
165
|
+
"## Escopo",
|
|
166
|
+
"",
|
|
167
|
+
arquivosAlvo.length > 0
|
|
168
|
+
? arquivosAlvo.map((arquivo) => `- ${arquivo}`).join("\n")
|
|
169
|
+
: "- Declarar os arquivos, servicos ou contratos afetados.",
|
|
170
|
+
"",
|
|
171
|
+
"## Leitura obrigatoria antes de agir",
|
|
172
|
+
"",
|
|
173
|
+
"- Ler este documento inteiro.",
|
|
174
|
+
"- Ler contratos .sema relacionados antes de editar codigo.",
|
|
175
|
+
"- Ler README, runbooks e docs de pacote envolvidos.",
|
|
176
|
+
"",
|
|
177
|
+
"## Procedimento",
|
|
178
|
+
"",
|
|
179
|
+
"- Descrever os comandos ou passos seguros.",
|
|
180
|
+
"- Declarar pre-condicoes, variaveis e dependencias.",
|
|
181
|
+
"- Registrar como validar sucesso.",
|
|
182
|
+
"",
|
|
183
|
+
"## Validacao",
|
|
184
|
+
"",
|
|
185
|
+
"- Listar comandos de build, teste, verificacao ou smoke test.",
|
|
186
|
+
"- Registrar evidencias esperadas.",
|
|
187
|
+
"",
|
|
188
|
+
"## Rollback",
|
|
189
|
+
"",
|
|
190
|
+
"- Descrever como desfazer a mudanca.",
|
|
191
|
+
"- Declarar sinais que exigem rollback.",
|
|
192
|
+
"",
|
|
193
|
+
"## Atualizacao documental",
|
|
194
|
+
"",
|
|
195
|
+
"- Atualizar este arquivo quando o fluxo operacional mudar.",
|
|
196
|
+
"- Atualizar docs e contratos relacionados na mesma mudanca.",
|
|
197
|
+
"",
|
|
198
|
+
`Categorias inferidas: ${categorias.join(", ")}`,
|
|
199
|
+
"",
|
|
200
|
+
];
|
|
201
|
+
return `${linhas.join("\n")}\n`;
|
|
202
|
+
}
|
|
203
|
+
function resumoConteudo(conteudo) {
|
|
204
|
+
if (conteudo.length <= LIMITE_CONTEUDO_DOC) {
|
|
205
|
+
return { conteudo, truncado: false };
|
|
206
|
+
}
|
|
207
|
+
return {
|
|
208
|
+
conteudo: `${conteudo.slice(0, LIMITE_CONTEUDO_DOC)}\n\n[TRUNCADO PELO SEMA: leia o arquivo completo antes de agir.]`,
|
|
209
|
+
truncado: true,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
async function adicionarDocsRaizExistentes(baseProjeto, registrar) {
|
|
213
|
+
const docsRaiz = [
|
|
214
|
+
{ relativo: "AGENTS.md", tipo: "raiz", motivo: "regras obrigatorias do agente no projeto" },
|
|
215
|
+
{ relativo: "SEMA_INDEX.json", tipo: "raiz", motivo: "indice IA-first do projeto" },
|
|
216
|
+
{ relativo: "README.md", tipo: "raiz", motivo: "visao geral publica do projeto" },
|
|
217
|
+
{ relativo: "docs/README.md", tipo: "documentacao", motivo: "indice de documentacao" },
|
|
218
|
+
];
|
|
219
|
+
for (const doc of docsRaiz) {
|
|
220
|
+
if (await caminhoExiste(path.join(baseProjeto, doc.relativo))) {
|
|
221
|
+
registrar({ ...doc, permitirCriacao: false });
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
async function adicionarReadmesDeArquivos(baseProjeto, arquivosAlvo, registrar) {
|
|
226
|
+
for (const arquivo of arquivosAlvo) {
|
|
227
|
+
const absoluto = path.resolve(baseProjeto, arquivo);
|
|
228
|
+
if (!caminhoEstaDentro(baseProjeto, absoluto)) {
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
let pasta = (await caminhoExiste(absoluto)) && (await stat(absoluto)).isDirectory()
|
|
232
|
+
? absoluto
|
|
233
|
+
: path.dirname(absoluto);
|
|
234
|
+
while (caminhoEstaDentro(baseProjeto, pasta)) {
|
|
235
|
+
const readme = path.join(pasta, "README.md");
|
|
236
|
+
if (await caminhoExiste(readme)) {
|
|
237
|
+
registrar({
|
|
238
|
+
relativo: normalizarRelativo(path.relative(baseProjeto, readme)),
|
|
239
|
+
tipo: "pacote",
|
|
240
|
+
motivo: `README mais proximo de ${normalizarRelativo(arquivo)}`,
|
|
241
|
+
permitirCriacao: false,
|
|
242
|
+
});
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
const proxima = path.dirname(pasta);
|
|
246
|
+
if (proxima === pasta) {
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
pasta = proxima;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
async function adicionarContratosRelacionados(baseProjeto, categorias, intencao, arquivosAlvo, registrar) {
|
|
254
|
+
const pastaContratos = path.join(baseProjeto, "contratos");
|
|
255
|
+
if (!(await caminhoExiste(pastaContratos))) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
const texto = normalizarTexto(`${intencao} ${arquivosAlvo.join(" ")} ${categorias.join(" ")}`);
|
|
259
|
+
const arquivos = (await listarArquivosRecursivo(pastaContratos)).filter((arquivo) => arquivo.endsWith(".sema"));
|
|
260
|
+
for (const arquivo of arquivos) {
|
|
261
|
+
const relativo = normalizarRelativo(path.relative(baseProjeto, arquivo));
|
|
262
|
+
const nome = normalizarTexto(relativo);
|
|
263
|
+
const relacionado = texto.split(/\W+/).filter((parte) => parte.length >= 4).some((parte) => nome.includes(parte))
|
|
264
|
+
|| (categorias.some((categoria) => ["mcp", "cli", "documentacao", "contrato"].includes(categoria)) && nome.includes("governanca_ia"));
|
|
265
|
+
if (relacionado) {
|
|
266
|
+
registrar({
|
|
267
|
+
relativo,
|
|
268
|
+
tipo: "contrato",
|
|
269
|
+
motivo: "contrato Sema relacionado a intencao declarada",
|
|
270
|
+
permitirCriacao: false,
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
function criarRegistrador(baseProjeto) {
|
|
276
|
+
const docs = [];
|
|
277
|
+
const vistos = new Set();
|
|
278
|
+
return {
|
|
279
|
+
docs,
|
|
280
|
+
registrar(doc) {
|
|
281
|
+
const relativo = normalizarRelativo(doc.relativo);
|
|
282
|
+
const absoluto = path.resolve(baseProjeto, relativo);
|
|
283
|
+
if (!caminhoEstaDentro(baseProjeto, absoluto) || vistos.has(relativo)) {
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
vistos.add(relativo);
|
|
287
|
+
docs.push({ ...doc, relativo });
|
|
288
|
+
},
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
export async function resolverDocumentacaoObrigatoria(opcoes) {
|
|
292
|
+
const baseProjeto = path.resolve(opcoes.baseProjeto ?? process.cwd());
|
|
293
|
+
const intencao = opcoes.intencao.trim();
|
|
294
|
+
const arquivosAlvo = [...new Set((opcoes.arquivosAlvo ?? []).map(normalizarRelativo).filter(Boolean))];
|
|
295
|
+
const categorias = inferirCategorias(intencao, arquivosAlvo);
|
|
296
|
+
const { docs, registrar } = criarRegistrador(baseProjeto);
|
|
297
|
+
await adicionarDocsRaizExistentes(baseProjeto, registrar);
|
|
298
|
+
for (const regra of REGRAS_DOCUMENTACAO.filter((item) => categorias.includes(item.categoria))) {
|
|
299
|
+
for (const doc of regra.docs) {
|
|
300
|
+
registrar(doc);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
await adicionarReadmesDeArquivos(baseProjeto, arquivosAlvo, registrar);
|
|
304
|
+
await adicionarContratosRelacionados(baseProjeto, categorias, intencao, arquivosAlvo, registrar);
|
|
305
|
+
const leituraObrigatoria = [];
|
|
306
|
+
for (const doc of docs) {
|
|
307
|
+
const caminho = path.resolve(baseProjeto, doc.relativo);
|
|
308
|
+
let existe = await caminhoExiste(caminho);
|
|
309
|
+
let criado = false;
|
|
310
|
+
const template = criarTemplateDoc(doc, intencao, categorias, arquivosAlvo);
|
|
311
|
+
if (!existe && opcoes.criarAusentes && doc.permitirCriacao) {
|
|
312
|
+
await mkdir(path.dirname(caminho), { recursive: true });
|
|
313
|
+
await writeFile(caminho, template, "utf8");
|
|
314
|
+
existe = true;
|
|
315
|
+
criado = true;
|
|
316
|
+
}
|
|
317
|
+
const item = {
|
|
318
|
+
caminho,
|
|
319
|
+
relativo: doc.relativo,
|
|
320
|
+
tipo: doc.tipo,
|
|
321
|
+
motivo: doc.motivo,
|
|
322
|
+
existe,
|
|
323
|
+
criado,
|
|
324
|
+
obrigatorio: true,
|
|
325
|
+
template: existe ? undefined : template,
|
|
326
|
+
};
|
|
327
|
+
if (existe) {
|
|
328
|
+
const conteudo = resumoConteudo(await readFile(caminho, "utf8"));
|
|
329
|
+
item.conteudo = conteudo.conteudo;
|
|
330
|
+
item.truncado = conteudo.truncado;
|
|
331
|
+
}
|
|
332
|
+
leituraObrigatoria.push(item);
|
|
333
|
+
}
|
|
334
|
+
const docsAusentes = leituraObrigatoria.filter((doc) => !doc.existe);
|
|
335
|
+
const docsCriadas = leituraObrigatoria.filter((doc) => doc.criado);
|
|
336
|
+
const bloqueios = docsAusentes.map((doc) => ({
|
|
337
|
+
tipo: "documentacao_ausente",
|
|
338
|
+
severidade: 4,
|
|
339
|
+
caminho: doc.relativo,
|
|
340
|
+
mensagem: `Documento obrigatorio ausente: ${doc.relativo}. Crie ou rode com --criar-ausentes antes de agir.`,
|
|
341
|
+
}));
|
|
342
|
+
return {
|
|
343
|
+
sucesso: bloqueios.length === 0,
|
|
344
|
+
baseProjeto,
|
|
345
|
+
intencao,
|
|
346
|
+
categorias,
|
|
347
|
+
arquivosAlvo,
|
|
348
|
+
leituraObrigatoria,
|
|
349
|
+
docsAusentes,
|
|
350
|
+
docsCriadas,
|
|
351
|
+
bloqueios,
|
|
352
|
+
instrucoes: [
|
|
353
|
+
"A IA deve ler todos os itens de leituraObrigatoria antes de executar a mudanca.",
|
|
354
|
+
"Se docsAusentes nao estiver vazio, crie ou preencha os documentos antes de editar codigo, contrato, deploy ou configuracao.",
|
|
355
|
+
"Antes de concluir, rode sema finalizar-mudanca informando as docs lidas.",
|
|
356
|
+
],
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
function normalizarDocLida(baseProjeto, valor) {
|
|
360
|
+
const semEspaco = valor.trim();
|
|
361
|
+
if (!semEspaco) {
|
|
362
|
+
return "";
|
|
363
|
+
}
|
|
364
|
+
const absoluto = path.isAbsolute(semEspaco) ? semEspaco : path.resolve(baseProjeto, semEspaco);
|
|
365
|
+
return normalizarRelativo(path.relative(baseProjeto, absoluto));
|
|
366
|
+
}
|
|
367
|
+
export async function verificarDocumentacaoMudanca(opcoes) {
|
|
368
|
+
const baseProjeto = path.resolve(opcoes.baseProjeto ?? process.cwd());
|
|
369
|
+
const impacto = await resolverDocumentacaoObrigatoria({
|
|
370
|
+
baseProjeto,
|
|
371
|
+
intencao: opcoes.intencao,
|
|
372
|
+
arquivosAlvo: opcoes.arquivosAlvo,
|
|
373
|
+
criarAusentes: false,
|
|
374
|
+
});
|
|
375
|
+
const docsLidas = [...new Set((opcoes.docsLidas ?? []).map((doc) => normalizarDocLida(baseProjeto, doc)).filter(Boolean))];
|
|
376
|
+
const setDocsLidas = new Set(docsLidas);
|
|
377
|
+
const docsNaoLidas = impacto.leituraObrigatoria.filter((doc) => doc.existe && !setDocsLidas.has(doc.relativo));
|
|
378
|
+
const diagnosticos = [
|
|
379
|
+
...impacto.docsAusentes.map((doc) => ({
|
|
380
|
+
tipo: "documentacao_ausente",
|
|
381
|
+
severidade: 4,
|
|
382
|
+
caminho: doc.relativo,
|
|
383
|
+
mensagem: `Documento obrigatorio ausente: ${doc.relativo}.`,
|
|
384
|
+
})),
|
|
385
|
+
...docsNaoLidas.map((doc) => ({
|
|
386
|
+
tipo: "leitura_obrigatoria_nao_comprovada",
|
|
387
|
+
severidade: 4,
|
|
388
|
+
caminho: doc.relativo,
|
|
389
|
+
mensagem: `Leitura obrigatoria nao comprovada: ${doc.relativo}.`,
|
|
390
|
+
})),
|
|
391
|
+
];
|
|
392
|
+
return {
|
|
393
|
+
sucesso: diagnosticos.length === 0,
|
|
394
|
+
baseProjeto,
|
|
395
|
+
intencao: opcoes.intencao,
|
|
396
|
+
categorias: impacto.categorias,
|
|
397
|
+
docsLidas,
|
|
398
|
+
leituraObrigatoria: impacto.leituraObrigatoria,
|
|
399
|
+
docsNaoLidas,
|
|
400
|
+
docsAusentes: impacto.docsAusentes,
|
|
401
|
+
diagnosticos,
|
|
402
|
+
instrucoes: diagnosticos.length === 0
|
|
403
|
+
? ["Leitura documental comprovada. Continue com validar, drift e testes conforme a mudanca."]
|
|
404
|
+
: ["Nao conclua a mudanca enquanto houver diagnosticos de severidade 4+."],
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
//# sourceMappingURL=docs.js.map
|
package/dist/docs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -17,6 +17,7 @@ import { gerarCss } from "@sema/gerador-css";
|
|
|
17
17
|
import { carregarConfiguracaoProjeto, carregarProjeto, resolverAlvoPadrao, resolverAlvosVerificacao, resolverEstruturaSaidaPadrao, resolverFrameworkPadrao, resolverSaidaPadrao, } from "./projeto.js";
|
|
18
18
|
import { importarProjetoLegado, resumoImportacao } from "./importador.js";
|
|
19
19
|
import { analisarDriftLegado, assistirRenomeacaoSemantica, gerarMapaImpactoSemantico, } from "./drift.js";
|
|
20
|
+
import { resolverDocumentacaoObrigatoria, verificarDocumentacaoMudanca, } from "./docs.js";
|
|
20
21
|
const STARTER_IA = `Voce esta trabalhando com Sema, um Protocolo de Governanca de Intencao para IA sobre software vivo em backend e front consumer.
|
|
21
22
|
|
|
22
23
|
Importante:
|
|
@@ -340,6 +341,12 @@ const DOCUMENTOS_SUPORTE_IA = [
|
|
|
340
341
|
"docs/persistencia-vendor-first.md",
|
|
341
342
|
"docs/sintaxe.md",
|
|
342
343
|
"docs/cli.md",
|
|
344
|
+
"docs/mcp.md",
|
|
345
|
+
"docs/documentacao.md",
|
|
346
|
+
"docs/deploy.md",
|
|
347
|
+
"docs/env.md",
|
|
348
|
+
"docs/rollback.md",
|
|
349
|
+
"docs/extensao-vscode.md",
|
|
343
350
|
];
|
|
344
351
|
function resolverImportadorNodeOpcional(especificador) {
|
|
345
352
|
try {
|
|
@@ -449,6 +456,7 @@ function ajuda() {
|
|
|
449
456
|
"sema resumo <arquivo-ou-pasta> --micro --para mudanca",
|
|
450
457
|
"sema drift <arquivo-ou-pasta> --escopo modulo --json",
|
|
451
458
|
"sema impacto <arquivo-ou-pasta> --alvo <token> --mudanca <descricao> --json",
|
|
459
|
+
"sema docs-impacto --intencao \"fazer deploy\" --criar-ausentes --json",
|
|
452
460
|
"sema contexto-ia <arquivo.sema> --saida ./.tmp/contexto --json",
|
|
453
461
|
"",
|
|
454
462
|
"[3] Adotar Sema em projeto que ainda nao usa",
|
|
@@ -491,6 +499,8 @@ function ajuda() {
|
|
|
491
499
|
"sema contexto-ia <arquivo.sema> [--saida <diretorio>] [--json]",
|
|
492
500
|
"sema sync-ai-entrypoints [--json]",
|
|
493
501
|
"sema instalar-exemplos [--json]",
|
|
502
|
+
"sema docs-impacto --intencao <acao> [--arquivo <caminho>] [--criar-ausentes] [--json]",
|
|
503
|
+
"sema finalizar-mudanca --intencao <acao> [--arquivo <caminho>] [--doc-lida <caminho>] [--json]",
|
|
494
504
|
]),
|
|
495
505
|
"",
|
|
496
506
|
renderizarSecaoAscii("Operacional", [
|
|
@@ -522,6 +532,16 @@ function obterOpcao(args, nome, padrao) {
|
|
|
522
532
|
function possuiFlag(args, nome) {
|
|
523
533
|
return args.includes(nome);
|
|
524
534
|
}
|
|
535
|
+
function obterOpcoesRepetidas(args, nome) {
|
|
536
|
+
const valores = [];
|
|
537
|
+
for (let indice = 0; indice < args.length; indice += 1) {
|
|
538
|
+
if (args[indice] === nome && args[indice + 1]) {
|
|
539
|
+
valores.push(args[indice + 1]);
|
|
540
|
+
indice += 1;
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
return valores;
|
|
544
|
+
}
|
|
525
545
|
const OPCOES_COM_VALOR = new Set([
|
|
526
546
|
"--template",
|
|
527
547
|
"--alvo", "-a",
|
|
@@ -533,6 +553,9 @@ const OPCOES_COM_VALOR = new Set([
|
|
|
533
553
|
"--mudanca",
|
|
534
554
|
"--de",
|
|
535
555
|
"--para",
|
|
556
|
+
"--intencao",
|
|
557
|
+
"--arquivo",
|
|
558
|
+
"--doc-lida",
|
|
536
559
|
]);
|
|
537
560
|
const ALIAS_OPCOES = {
|
|
538
561
|
"-a": "--alvo",
|
|
@@ -3268,6 +3291,83 @@ async function comandoInstalarExemplos(emJson) {
|
|
|
3268
3291
|
console.log(`- Preservados: ${resultado.preservados.length}`);
|
|
3269
3292
|
return 0;
|
|
3270
3293
|
}
|
|
3294
|
+
function resolverEntradaDocs(posicionais, args) {
|
|
3295
|
+
const intencao = obterOpcao(args, "--intencao") ?? posicionais[0] ?? "";
|
|
3296
|
+
const arquivosPorFlag = obterOpcoesRepetidas(args, "--arquivo");
|
|
3297
|
+
const arquivosPosicionais = obterOpcao(args, "--intencao") ? posicionais : posicionais.slice(1);
|
|
3298
|
+
return {
|
|
3299
|
+
intencao,
|
|
3300
|
+
arquivosAlvo: [...new Set([...arquivosPorFlag, ...arquivosPosicionais])],
|
|
3301
|
+
};
|
|
3302
|
+
}
|
|
3303
|
+
async function comandoDocsImpacto(posicionais, args, emJson) {
|
|
3304
|
+
const { intencao, arquivosAlvo } = resolverEntradaDocs(posicionais, args);
|
|
3305
|
+
if (!intencao.trim()) {
|
|
3306
|
+
console.error("Uso: sema docs-impacto --intencao <acao> [--arquivo <caminho>] [--criar-ausentes] [--json]");
|
|
3307
|
+
return 1;
|
|
3308
|
+
}
|
|
3309
|
+
const resultado = await resolverDocumentacaoObrigatoria({
|
|
3310
|
+
baseProjeto: process.cwd(),
|
|
3311
|
+
intencao,
|
|
3312
|
+
arquivosAlvo,
|
|
3313
|
+
criarAusentes: possuiFlag(args, "--criar-ausentes"),
|
|
3314
|
+
});
|
|
3315
|
+
const payload = {
|
|
3316
|
+
comando: "docs-impacto",
|
|
3317
|
+
...resultado,
|
|
3318
|
+
};
|
|
3319
|
+
if (emJson) {
|
|
3320
|
+
console.log(JSON.stringify(payload, null, 2));
|
|
3321
|
+
return resultado.sucesso ? 0 : 1;
|
|
3322
|
+
}
|
|
3323
|
+
console.log("Documentacao obrigatoria da mudanca");
|
|
3324
|
+
console.log(`- Intencao: ${resultado.intencao}`);
|
|
3325
|
+
console.log(`- Categorias: ${resumirListaTexto(resultado.categorias, 8)}`);
|
|
3326
|
+
console.log(`- Leitura obrigatoria: ${resultado.leituraObrigatoria.length}`);
|
|
3327
|
+
for (const doc of resultado.leituraObrigatoria) {
|
|
3328
|
+
console.log(` - ${doc.relativo} (${doc.existe ? "ok" : "ausente"}) - ${doc.motivo}`);
|
|
3329
|
+
}
|
|
3330
|
+
if (resultado.docsCriadas.length > 0) {
|
|
3331
|
+
console.log(`- Docs criadas: ${resultado.docsCriadas.map((doc) => doc.relativo).join(", ")}`);
|
|
3332
|
+
}
|
|
3333
|
+
if (resultado.bloqueios.length > 0) {
|
|
3334
|
+
console.error("Bloqueios:");
|
|
3335
|
+
for (const bloqueio of resultado.bloqueios) {
|
|
3336
|
+
console.error(`- [SEM DOC ${bloqueio.severidade}] ${bloqueio.mensagem}`);
|
|
3337
|
+
}
|
|
3338
|
+
}
|
|
3339
|
+
return resultado.sucesso ? 0 : 1;
|
|
3340
|
+
}
|
|
3341
|
+
async function comandoFinalizarMudanca(posicionais, args, emJson) {
|
|
3342
|
+
const { intencao, arquivosAlvo } = resolverEntradaDocs(posicionais, args);
|
|
3343
|
+
if (!intencao.trim()) {
|
|
3344
|
+
console.error("Uso: sema finalizar-mudanca --intencao <acao> [--arquivo <caminho>] [--doc-lida <caminho>] [--json]");
|
|
3345
|
+
return 1;
|
|
3346
|
+
}
|
|
3347
|
+
const resultado = await verificarDocumentacaoMudanca({
|
|
3348
|
+
baseProjeto: process.cwd(),
|
|
3349
|
+
intencao,
|
|
3350
|
+
arquivosAlvo,
|
|
3351
|
+
docsLidas: obterOpcoesRepetidas(args, "--doc-lida"),
|
|
3352
|
+
});
|
|
3353
|
+
const payload = {
|
|
3354
|
+
comando: "finalizar-mudanca",
|
|
3355
|
+
...resultado,
|
|
3356
|
+
};
|
|
3357
|
+
if (emJson) {
|
|
3358
|
+
console.log(JSON.stringify(payload, null, 2));
|
|
3359
|
+
return resultado.sucesso ? 0 : 1;
|
|
3360
|
+
}
|
|
3361
|
+
if (resultado.sucesso) {
|
|
3362
|
+
console.log("Leitura documental comprovada para a mudanca.");
|
|
3363
|
+
return 0;
|
|
3364
|
+
}
|
|
3365
|
+
console.error("Mudanca bloqueada por documentacao obrigatoria:");
|
|
3366
|
+
for (const diagnostico of resultado.diagnosticos) {
|
|
3367
|
+
console.error(`- [severidade ${diagnostico.severidade}] ${diagnostico.mensagem}`);
|
|
3368
|
+
}
|
|
3369
|
+
return 1;
|
|
3370
|
+
}
|
|
3271
3371
|
async function comandoValidar(entrada) {
|
|
3272
3372
|
const modulos = await carregarModulos(entrada);
|
|
3273
3373
|
const diagnosticos = modulos.flatMap((item) => item.resultado.diagnosticos);
|
|
@@ -3803,6 +3903,8 @@ async function comandoAjudaIa() {
|
|
|
3803
3903
|
"Use `sema exemplos-prompt-ia` para pegar modelos prontos de prompt.",
|
|
3804
3904
|
"Use `sema inspecionar` para descobrir base, codigo vivo e fontes legado.",
|
|
3805
3905
|
"Use `sema drift` para medir impls, vinculos, rotas, score e lacunas.",
|
|
3906
|
+
"Use `sema docs-impacto --intencao <acao>` para ler ou criar docs obrigatorias antes de agir.",
|
|
3907
|
+
"Use `sema finalizar-mudanca --intencao <acao>` para bloquear conclusao sem leitura documental comprovada.",
|
|
3806
3908
|
"Use `sema contexto-ia <arquivo.sema>` para gerar AST, IR, drift, `briefing.json` e `briefing.min.json`.",
|
|
3807
3909
|
"Use `sema compilar <arquivo-ou-pasta> --alvo <typescript|python|dart|lua> --saida <diretorio>` quando a tarefa pedir codigo derivado.",
|
|
3808
3910
|
]));
|
|
@@ -4311,6 +4413,12 @@ async function principal() {
|
|
|
4311
4413
|
case "instalar-exemplos":
|
|
4312
4414
|
codigoSaida = await comandoInstalarExemplos(possuiFlag(resto, "--json"));
|
|
4313
4415
|
break;
|
|
4416
|
+
case "docs-impacto":
|
|
4417
|
+
codigoSaida = await comandoDocsImpacto(posicionais, resto, possuiFlag(resto, "--json"));
|
|
4418
|
+
break;
|
|
4419
|
+
case "finalizar-mudanca":
|
|
4420
|
+
codigoSaida = await comandoFinalizarMudanca(posicionais, resto, possuiFlag(resto, "--json"));
|
|
4421
|
+
break;
|
|
4314
4422
|
case "resumo":
|
|
4315
4423
|
codigoSaida = await comandoResumo(posicionais[0], resto, possuiFlag(resto, "--json"));
|
|
4316
4424
|
break;
|