@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.
Files changed (105) hide show
  1. package/dist/comandos.js +69 -0
  2. package/dist/comandos.js.map +1 -1
  3. package/dist/dev/index.d.ts +18 -0
  4. package/dist/dev/index.js +143 -0
  5. package/dist/dev/index.js.map +1 -0
  6. package/dist/guard.d.ts +35 -0
  7. package/dist/guard.js +164 -0
  8. package/dist/guard.js.map +1 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/init/index.d.ts +23 -0
  11. package/dist/init/index.js +112 -0
  12. package/dist/init/index.js.map +1 -0
  13. package/dist/init/templates.d.ts +11 -0
  14. package/dist/init/templates.js +660 -0
  15. package/dist/init/templates.js.map +1 -0
  16. package/dist/sync/index.d.ts +24 -0
  17. package/dist/sync/index.js +174 -0
  18. package/dist/sync/index.js.map +1 -0
  19. package/exemplos/.prepack-generated +1 -0
  20. package/node_modules/@sema/gerador-css/package.json +14 -7
  21. package/node_modules/@sema/gerador-css/src/index.ts +605 -0
  22. package/node_modules/@sema/gerador-css/tsconfig.json +13 -0
  23. package/node_modules/@sema/gerador-css/tsconfig.tsbuildinfo +1 -0
  24. package/node_modules/@sema/gerador-dart/package.json +14 -7
  25. package/node_modules/@sema/gerador-dart/src/index.ts +52 -0
  26. package/node_modules/@sema/gerador-dart/tsconfig.json +13 -0
  27. package/node_modules/@sema/gerador-dart/tsconfig.tsbuildinfo +1 -0
  28. package/node_modules/@sema/gerador-html/package.json +14 -7
  29. package/node_modules/@sema/gerador-html/src/index.ts +185 -0
  30. package/node_modules/@sema/gerador-html/tsconfig.json +13 -0
  31. package/node_modules/@sema/gerador-html/tsconfig.tsbuildinfo +1 -0
  32. package/node_modules/@sema/gerador-javascript/package.json +14 -7
  33. package/node_modules/@sema/gerador-javascript/src/index.ts +461 -0
  34. package/node_modules/@sema/gerador-javascript/tsconfig.json +13 -0
  35. package/node_modules/@sema/gerador-javascript/tsconfig.tsbuildinfo +1 -0
  36. package/node_modules/@sema/gerador-lua/package.json +14 -7
  37. package/node_modules/@sema/gerador-lua/src/index.ts +359 -0
  38. package/node_modules/@sema/gerador-lua/tsconfig.json +13 -0
  39. package/node_modules/@sema/gerador-lua/tsconfig.tsbuildinfo +1 -0
  40. package/node_modules/@sema/gerador-python/package.json +14 -7
  41. package/node_modules/@sema/gerador-python/src/index.ts +850 -0
  42. package/node_modules/@sema/gerador-python/tsconfig.json +13 -0
  43. package/node_modules/@sema/gerador-python/tsconfig.tsbuildinfo +1 -0
  44. package/node_modules/@sema/gerador-typescript/package.json +14 -7
  45. package/node_modules/@sema/gerador-typescript/src/index.ts +876 -0
  46. package/node_modules/@sema/gerador-typescript/tsconfig.json +13 -0
  47. package/node_modules/@sema/gerador-typescript/tsconfig.tsbuildinfo +1 -0
  48. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.d.ts +22 -0
  49. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js +97 -0
  50. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js.map +1 -0
  51. package/node_modules/@sema/nucleo/dist/index.d.ts +1 -0
  52. package/node_modules/@sema/nucleo/dist/index.js +1 -0
  53. package/node_modules/@sema/nucleo/dist/index.js.map +1 -1
  54. package/node_modules/@sema/nucleo/package.json +10 -7
  55. package/node_modules/@sema/nucleo/src/ast/tipos.ts +207 -0
  56. package/node_modules/@sema/nucleo/src/diagnosticos/index.ts +43 -0
  57. package/node_modules/@sema/nucleo/src/diagnosticos/melhorador.ts +130 -0
  58. package/node_modules/@sema/nucleo/src/formatador/index.ts +530 -0
  59. package/node_modules/@sema/nucleo/src/index.ts +184 -0
  60. package/node_modules/@sema/nucleo/src/ir/conversor.ts +1037 -0
  61. package/node_modules/@sema/nucleo/src/ir/modelos.ts +403 -0
  62. package/node_modules/@sema/nucleo/src/lexer/lexer.ts +166 -0
  63. package/node_modules/@sema/nucleo/src/lexer/tokens.ts +79 -0
  64. package/node_modules/@sema/nucleo/src/parser/gramatica.ebnf +41 -0
  65. package/node_modules/@sema/nucleo/src/parser/parser.ts +936 -0
  66. package/node_modules/@sema/nucleo/src/persistencia/contratos.ts +379 -0
  67. package/node_modules/@sema/nucleo/src/semantico/analisador.ts +3126 -0
  68. package/node_modules/@sema/nucleo/src/semantico/estruturas.ts +665 -0
  69. package/node_modules/@sema/nucleo/src/semantico/seguranca.ts +362 -0
  70. package/node_modules/@sema/nucleo/src/util/arquivos.ts +28 -0
  71. package/node_modules/@sema/nucleo/tsconfig.json +9 -0
  72. package/node_modules/@sema/nucleo/tsconfig.tsbuildinfo +1 -0
  73. package/node_modules/@sema/padroes/package.json +10 -7
  74. package/node_modules/@sema/padroes/src/index.ts +382 -0
  75. package/node_modules/@sema/padroes/tsconfig.json +9 -0
  76. package/node_modules/@sema/padroes/tsconfig.tsbuildinfo +1 -0
  77. package/package.json +74 -75
  78. package/AGENTS.md +0 -294
  79. package/AGENT_CONTEXT_PACK.json +0 -164
  80. package/LICENSE +0 -22
  81. package/SEMA_BRIEF.curto.txt +0 -11
  82. package/SEMA_BRIEF.md +0 -511
  83. package/SEMA_BRIEF.micro.txt +0 -9
  84. package/SEMA_INDEX.json +0 -7588
  85. package/docs/AGENT_STARTER.md +0 -109
  86. package/docs/api.md +0 -82
  87. package/docs/cli.md +0 -175
  88. package/docs/como-ensinar-a-sema-para-ia.md +0 -155
  89. package/docs/deploy.md +0 -93
  90. package/docs/documentacao.md +0 -88
  91. package/docs/env.md +0 -105
  92. package/docs/extensao-vscode.md +0 -53
  93. package/docs/fluxo-pratico-ia-sema.md +0 -187
  94. package/docs/instalacao-e-primeiro-uso.md +0 -134
  95. package/docs/integracao-com-ia.md +0 -110
  96. package/docs/mcp.md +0 -292
  97. package/docs/pagamento-ponta-a-ponta.md +0 -171
  98. package/docs/persistencia-vendor-first.md +0 -151
  99. package/docs/prompt-base-ia-sema.md +0 -111
  100. package/docs/repositories.md +0 -54
  101. package/docs/rollback.md +0 -49
  102. package/docs/seguranca.md +0 -126
  103. package/docs/sintaxe.md +0 -218
  104. package/llms-full.txt +0 -35
  105. 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
@@ -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;AAYvB,8EAA8E;AAC9E,8DAA8D;AAC9D,8EAA8E;AAE9E,KAAK,UAAU,gBAAgB,CAC7B,WAAqB,EACrB,IAAc,EACd,MAAe;IAEf,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,qBAAqB,EAAE,CAAC;IACpD,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC;IACrD,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,4EAA4E,CAAC,CAAC;QAC5F,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,OAAO,GAAkB;QAC7B,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACnD,QAAQ;QACR,WAAW,EAAE,QAAQ;QACrB,KAAK;QACL,IAAI,EAAE,WAAW;KAClB,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAExD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,qBAAqB,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,kBAAkB,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC;IACxD,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,SAAS,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,YAAsB,EACtB,IAAc,EACd,MAAe;IAEf,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,qBAAqB,EAAE,CAAC;IAEpD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,4EAA4E,CAAC,CAAC;QAC5F,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,qBAAqB,CAAC;QAC5C,WAAW,EAAE,QAAQ;QACrB,KAAK;QACL,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IAEH,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,uBAAuB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,UAAU,SAAS,CAAC,IAAI,IAAI,cAAc,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,WAAqB,EACrB,IAAc,EACd,MAAe;IAEf,MAAM,SAAS,GAAG,WAAW,CAAC;IAC9B,MAAM,OAAO,GAAyB,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAElE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;QAC/E,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,OAAO,GAAwB;QACnC,SAAS;QACT,YAAY,EAAE,OAAO;KACtB,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAEzD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACzB,OAAO,EAAE,eAAe;YACxB,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,cAAc,EAAE,SAAS,CAAC,cAAc;YACxC,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,eAAe,EAAE,SAAS,CAAC,eAAe;SAC3C,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACb,OAAO,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,SAAS,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,uBAAuB,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,kCAAkC,SAAS,CAAC,YAAY,0BAA0B,CAAC,CAAC;QAClG,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAED,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAAmC;IAC/D,YAAY,EAAE,gBAAgB;IAC9B,eAAe,EAAE,mBAAmB;IACpC,eAAe,EAAE,mBAAmB;CACrC,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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"}
@@ -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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"}