vireum-spec-cli 0.4.2 → 0.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.
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.runEnrich = runEnrich;
40
+ const chalk_1 = __importDefault(require("chalk"));
41
+ const ora_1 = __importDefault(require("ora"));
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ async function runEnrich() {
45
+ console.log(chalk_1.default.hex('#2D7DD2').bold('\n Vireum Spec — Enrich\n'));
46
+ console.log(chalk_1.default.gray(' Gera um prompt para a IA identificar gaps no spec\n'));
47
+ const specDir = path.join(process.cwd(), '.spec');
48
+ if (!fs.existsSync(path.join(specDir, 'INDEX.md'))) {
49
+ console.log(chalk_1.default.red('\n❌ Spec não encontrado.'));
50
+ console.log(chalk_1.default.gray(' Execute primeiro: ') + chalk_1.default.white('vireum-spec retrofit') + chalk_1.default.gray(' ou ') + chalk_1.default.white('vireum-spec distill\n'));
51
+ process.exit(1);
52
+ }
53
+ const spinner = (0, ora_1.default)('Lendo spec...').start();
54
+ await sleep(600);
55
+ const arquivos = [
56
+ { nome: 'INDEX.md', path: path.join(specDir, 'INDEX.md') },
57
+ { nome: 'briefing.md', path: path.join(specDir, 'briefing.md') },
58
+ { nome: 'requirements.md', path: path.join(specDir, 'requirements.md') },
59
+ { nome: 'architecture.md', path: path.join(specDir, 'architecture.md') },
60
+ { nome: 'users.md', path: path.join(specDir, 'users.md') },
61
+ { nome: 'risks.md', path: path.join(specDir, 'risks.md') },
62
+ { nome: 'rules.md', path: path.join(specDir, 'rules.md') },
63
+ { nome: 'tasks/active.md', path: path.join(specDir, 'tasks', 'active.md') },
64
+ { nome: 'tasks/backlog.md', path: path.join(specDir, 'tasks', 'backlog.md') },
65
+ ];
66
+ const conteudos = [];
67
+ for (const arq of arquivos) {
68
+ if (fs.existsSync(arq.path)) {
69
+ const conteudo = fs.readFileSync(arq.path, 'utf-8');
70
+ conteudos.push(`### ${arq.nome}\n\`\`\`\n${conteudo}\n\`\`\``);
71
+ }
72
+ }
73
+ spinner.succeed('Spec lido');
74
+ const prompt = gerarPrompt(conteudos.join('\n\n'));
75
+ const promptPath = path.join(specDir, 'enrich-prompt.md');
76
+ const s2 = (0, ora_1.default)('Gerando prompt...').start();
77
+ await sleep(400);
78
+ fs.writeFileSync(promptPath, prompt, 'utf-8');
79
+ s2.succeed('.spec/enrich-prompt.md gerado');
80
+ console.log(chalk_1.default.green.bold('\n✅ Prompt pronto!\n'));
81
+ console.log(chalk_1.default.white(' Proximos passos:\n'));
82
+ console.log(chalk_1.default.gray(' 1. Abra o arquivo: ') + chalk_1.default.white('.spec/enrich-prompt.md'));
83
+ console.log(chalk_1.default.gray(' 2. Cole o conteudo no seu agente de IA (Claude Code, Cursor, Codex)'));
84
+ console.log(chalk_1.default.gray(' 3. Responda as perguntas que a IA fizer'));
85
+ console.log(chalk_1.default.gray(' 4. Salve as respostas nos arquivos de spec relevantes\n'));
86
+ console.log(chalk_1.default.hex('#2D7DD2')(' Dica: use o modo 4 do protocolo Vireum para garantir que as respostas\n sejam incorporadas corretamente ao spec.\n'));
87
+ }
88
+ // ─── GERADOR DE PROMPT ────────────────────────────────────────────────────────
89
+ function gerarPrompt(specConteudo) {
90
+ return `# Vireum Spec — Enrich Prompt
91
+
92
+ > Cole este prompt inteiro no seu agente de IA (Claude Code, Cursor, Codex CLI).
93
+ > O agente vai analisar o spec e fazer perguntas para preencher os gaps.
94
+ > Responda as perguntas e salve as respostas nos arquivos de spec relevantes.
95
+
96
+ ---
97
+
98
+ ## Instrucao para a IA
99
+
100
+ Voce e um especialista em desenvolvimento de software e analise de requisitos.
101
+ Analise o spec abaixo de um projeto em desenvolvimento e identifique:
102
+
103
+ 1. **Gaps de negocio** — informacoes sobre o negocio que estao faltando ou vagas
104
+ 2. **Gaps tecnicos** — decisoes arquiteturais nao documentadas ou ambiguas
105
+ 3. **Riscos nao mapeados** — situacoes de risco que nao foram identificadas
106
+ 4. **Regras de negocio implicitas** — comportamentos que provavelmente existem mas nao estao documentados
107
+ 5. **Ambiguidades** — partes do spec que podem ser interpretadas de formas diferentes
108
+
109
+ Para cada gap identificado, faca UMA pergunta clara e direta ao dev.
110
+ Organize as perguntas por prioridade — comece pelas mais criticas para o desenvolvimento.
111
+ Limite a no maximo 15 perguntas — foque no que realmente importa.
112
+
113
+ Apos o dev responder, indique em qual arquivo de spec cada resposta deve ser salva:
114
+ - Regras de negocio → .spec/requirements.md
115
+ - Decisoes tecnicas → .spec/architecture.md
116
+ - Riscos → .spec/risks.md
117
+ - Perfis de usuario → .spec/users.md
118
+ - Regras do projeto → .spec/rules.md
119
+
120
+ ---
121
+
122
+ ## Spec atual do projeto
123
+
124
+ ${specConteudo}
125
+
126
+ ---
127
+
128
+ ## Formato esperado da sua resposta
129
+
130
+ Comece com um resumo de 2-3 linhas do que voce entendeu sobre o projeto.
131
+ Depois liste as perguntas numeradas, cada uma com:
132
+ - A pergunta em si
133
+ - Por que essa informacao e importante
134
+ - Onde a resposta deve ser salva
135
+
136
+ Exemplo:
137
+ **Pergunta 1:** Como o sistema lida com usuarios inativos?
138
+ **Importancia:** Afeta logica de autenticacao e limpeza de dados
139
+ **Salvar em:** .spec/requirements.md e .spec/rules.md
140
+ `;
141
+ }
142
+ function sleep(ms) {
143
+ return new Promise(r => setTimeout(r, ms));
144
+ }
package/dist/index.js CHANGED
@@ -15,6 +15,7 @@ const brief_1 = require("./commands/brief");
15
15
  const verify_mcps_1 = require("./commands/verify-mcps");
16
16
  const skills_1 = require("./commands/skills");
17
17
  const retrofit_1 = require("./commands/retrofit");
18
+ const enrich_1 = require("./commands/enrich");
18
19
  const program = new commander_1.Command();
19
20
  program
20
21
  .name('vireum-spec')
@@ -56,5 +57,9 @@ program
56
57
  .command('retrofit')
57
58
  .description('Gera o spec a partir de um projeto ja em andamento')
58
59
  .action(async () => { await (0, retrofit_1.runRetrofit)(); });
60
+ program
61
+ .command('enrich')
62
+ .description('Gera prompt para a IA identificar gaps no spec')
63
+ .action(async () => { await (0, enrich_1.runEnrich)(); });
59
64
  console.log(chalk_1.default.hex('#2D7DD2').bold('\n Vireum Spec Framework\n'));
60
65
  program.parse(process.argv);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vireum-spec-cli",
3
- "version": "0.4.2",
3
+ "version": "0.5.0",
4
4
  "description": "Spec Driven Development framework by Vireum Desenvolvimento",
5
5
  "main": "dist/index.js",
6
6
  "bin": {