@gilbert_oliveira/commit-wizard 1.0.26 → 1.1.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/README.md +208 -35
- package/dist/ai-service.d.ts +36 -0
- package/dist/ai-service.js +156 -0
- package/dist/ai-service.js.map +1 -0
- package/dist/config.d.ts +22 -0
- package/dist/config.js +84 -0
- package/dist/config.js.map +1 -0
- package/dist/diff-processor.d.ts +39 -0
- package/dist/diff-processor.js +156 -0
- package/dist/diff-processor.js.map +1 -0
- package/dist/git-utils.d.ts +52 -0
- package/dist/git-utils.js +156 -0
- package/dist/git-utils.js.map +1 -0
- package/dist/index.d.ts +2 -16
- package/dist/index.js +322 -207
- package/dist/index.js.map +1 -1
- package/package.json +40 -4
- package/src/index.ts +0 -279
- package/tsconfig.json +0 -24
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/usr/bin/env
|
|
1
|
+
#!/usr/bin/env node
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import inquirer from 'inquirer';
|
|
4
4
|
import os from 'os';
|
|
@@ -6,241 +6,356 @@ import path from 'path';
|
|
|
6
6
|
import fs from 'fs';
|
|
7
7
|
import { execSync } from 'child_process';
|
|
8
8
|
import ora from 'ora';
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
console.log(chalk.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
9
|
+
import { loadConfig, saveConfig, createConfigExample } from './config.js';
|
|
10
|
+
import { AIService } from './ai-service.js';
|
|
11
|
+
import { GitUtils } from './git-utils.js';
|
|
12
|
+
import { DiffProcessor } from './diff-processor.js';
|
|
13
|
+
// 🛑 Tratamento de interrupção (Ctrl+C)
|
|
14
|
+
process.on('SIGINT', () => {
|
|
15
|
+
console.log(chalk.yellow('\n\n👋 Processo interrompido pelo usuário. Até mais!'));
|
|
16
|
+
process.exit(0);
|
|
17
|
+
});
|
|
18
|
+
process.on('SIGTERM', () => {
|
|
19
|
+
console.log(chalk.yellow('\n\n🛑 Processo terminado. Até mais!'));
|
|
20
|
+
process.exit(0);
|
|
21
|
+
});
|
|
23
22
|
/**
|
|
24
|
-
*
|
|
25
|
-
* @param prompt Texto que será enviado como mensagem do usuário.
|
|
26
|
-
* @param mode Define o contexto: 'commit' para gerar mensagem de commit ou outro valor para resumo.
|
|
27
|
-
* @returns Resposta da API (string com a mensagem ou o resumo).
|
|
23
|
+
* Exibe informações sobre o sistema e configuração
|
|
28
24
|
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
temperature: 0.2
|
|
42
|
-
};
|
|
43
|
-
const response = await fetch(url, {
|
|
44
|
-
method: "POST",
|
|
45
|
-
headers: {
|
|
46
|
-
"Content-Type": "application/json",
|
|
47
|
-
"Authorization": `Bearer ${OPENAI_API_KEY}`
|
|
48
|
-
},
|
|
49
|
-
body: JSON.stringify(body)
|
|
50
|
-
});
|
|
51
|
-
if (!response.ok) {
|
|
52
|
-
throw new Error(`Erro na API OpenAI: ${response.statusText}`);
|
|
25
|
+
function displaySystemInfo(config, gitUtils) {
|
|
26
|
+
console.log(chalk.cyan.bold('\n📊 Informações do Sistema:'));
|
|
27
|
+
console.log(chalk.white(`• Modelo AI: ${config.model}`));
|
|
28
|
+
console.log(chalk.white(`• Linguagem: ${config.language}`));
|
|
29
|
+
console.log(chalk.white(`• Temperatura: ${config.temperature}`));
|
|
30
|
+
console.log(chalk.white(`• Tokens máximos: ${config.maxTokens}`));
|
|
31
|
+
console.log(chalk.white(`• Auto commit: ${config.autoCommit ? '✅' : '❌'}`));
|
|
32
|
+
console.log(chalk.white(`• Emojis: ${config.includeEmoji ? '✅' : '❌'}`));
|
|
33
|
+
if (gitUtils.isGitRepository()) {
|
|
34
|
+
const branches = gitUtils.getBranches();
|
|
35
|
+
console.log(chalk.white(`• Branch atual: ${branches.current}`));
|
|
36
|
+
console.log(chalk.white(`• Alterações pendentes: ${gitUtils.hasUncommittedChanges() ? '⚠️' : '✅'}`));
|
|
53
37
|
}
|
|
54
|
-
const data = await response.json();
|
|
55
|
-
// Retorna a resposta do primeiro "choice".
|
|
56
|
-
return data.choices[0].message.content.trim();
|
|
57
38
|
}
|
|
58
39
|
/**
|
|
59
|
-
*
|
|
60
|
-
* Utiliza o gpt-tokenizer para garantir que cada chunk não exceda o limite de tokens.
|
|
61
|
-
* @param diff O diff completo em formato de string.
|
|
62
|
-
* @param maxTokens Quantidade máxima de tokens permitida para cada chunk (padrão: 1000 tokens).
|
|
63
|
-
* @returns Array de strings, cada uma representando um chunk.
|
|
40
|
+
* Menu interativo para configuração
|
|
64
41
|
*/
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
42
|
+
async function configurationMenu() {
|
|
43
|
+
const currentConfig = loadConfig();
|
|
44
|
+
console.log(chalk.blue.bold('\n⚙️ Menu de Configuração'));
|
|
45
|
+
const { action } = await inquirer.prompt([
|
|
46
|
+
{
|
|
47
|
+
type: 'list',
|
|
48
|
+
name: 'action',
|
|
49
|
+
message: 'O que você gostaria de configurar?',
|
|
50
|
+
choices: [
|
|
51
|
+
{ name: '🤖 Modelo de IA', value: 'model' },
|
|
52
|
+
{ name: '🌍 Idioma', value: 'language' },
|
|
53
|
+
{ name: '🎛️ Temperatura', value: 'temperature' },
|
|
54
|
+
{ name: '📊 Tokens máximos', value: 'maxTokens' },
|
|
55
|
+
{ name: '😀 Incluir emojis', value: 'includeEmoji' },
|
|
56
|
+
{ name: '🚀 Auto commit', value: 'autoCommit' },
|
|
57
|
+
{ name: '🚫 Padrões de exclusão', value: 'excludePatterns' },
|
|
58
|
+
{ name: '📄 Criar arquivo exemplo', value: 'createExample' },
|
|
59
|
+
{ name: '💾 Salvar configuração global', value: 'saveGlobal' },
|
|
60
|
+
{ name: '🔙 Voltar', value: 'back' },
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
]);
|
|
64
|
+
if (action === 'back')
|
|
65
|
+
return;
|
|
66
|
+
if (action === 'createExample') {
|
|
67
|
+
createConfigExample();
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const newConfig = {};
|
|
71
|
+
switch (action) {
|
|
72
|
+
case 'model': {
|
|
73
|
+
const { model } = await inquirer.prompt([
|
|
74
|
+
{
|
|
75
|
+
type: 'list',
|
|
76
|
+
name: 'model',
|
|
77
|
+
message: 'Escolha o modelo de IA:',
|
|
78
|
+
choices: [
|
|
79
|
+
{ name: 'GPT-4o (Mais recente)', value: 'gpt-4o' },
|
|
80
|
+
{ name: 'GPT-4o Mini (Mais rápido e barato)', value: 'gpt-4o-mini' },
|
|
81
|
+
{ name: 'GPT-4 Turbo', value: 'gpt-4-turbo' },
|
|
82
|
+
{ name: 'GPT-3.5 Turbo', value: 'gpt-3.5-turbo' },
|
|
83
|
+
],
|
|
84
|
+
default: currentConfig.model,
|
|
85
|
+
},
|
|
86
|
+
]);
|
|
87
|
+
newConfig.model = model;
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
case 'language': {
|
|
91
|
+
const { language } = await inquirer.prompt([
|
|
92
|
+
{
|
|
93
|
+
type: 'list',
|
|
94
|
+
name: 'language',
|
|
95
|
+
message: 'Escolha o idioma:',
|
|
96
|
+
choices: [
|
|
97
|
+
{ name: 'Português', value: 'pt' },
|
|
98
|
+
{ name: 'English', value: 'en' },
|
|
99
|
+
],
|
|
100
|
+
default: currentConfig.language,
|
|
101
|
+
},
|
|
102
|
+
]);
|
|
103
|
+
newConfig.language = language;
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
case 'temperature': {
|
|
107
|
+
const { temperature } = await inquirer.prompt([
|
|
108
|
+
{
|
|
109
|
+
type: 'input',
|
|
110
|
+
name: 'temperature',
|
|
111
|
+
message: 'Digite a temperatura (0.0 - 1.0):',
|
|
112
|
+
default: currentConfig.temperature.toString(),
|
|
113
|
+
validate: (input) => {
|
|
114
|
+
const num = parseFloat(input);
|
|
115
|
+
return !isNaN(num) && num >= 0 && num <= 1 ? true : 'Digite um número entre 0.0 e 1.0';
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
]);
|
|
119
|
+
newConfig.temperature = parseFloat(temperature);
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
case 'maxTokens': {
|
|
123
|
+
const { maxTokens } = await inquirer.prompt([
|
|
124
|
+
{
|
|
125
|
+
type: 'input',
|
|
126
|
+
name: 'maxTokens',
|
|
127
|
+
message: 'Digite o número máximo de tokens:',
|
|
128
|
+
default: currentConfig.maxTokens.toString(),
|
|
129
|
+
validate: (input) => {
|
|
130
|
+
const num = parseInt(input);
|
|
131
|
+
return !isNaN(num) && num > 0 ? true : 'Digite um número positivo';
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
]);
|
|
135
|
+
newConfig.maxTokens = parseInt(maxTokens);
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
case 'includeEmoji': {
|
|
139
|
+
const { includeEmoji } = await inquirer.prompt([
|
|
140
|
+
{
|
|
141
|
+
type: 'confirm',
|
|
142
|
+
name: 'includeEmoji',
|
|
143
|
+
message: 'Incluir emojis nas mensagens de commit?',
|
|
144
|
+
default: currentConfig.includeEmoji,
|
|
145
|
+
},
|
|
146
|
+
]);
|
|
147
|
+
newConfig.includeEmoji = includeEmoji;
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
case 'autoCommit': {
|
|
151
|
+
const { autoCommit } = await inquirer.prompt([
|
|
152
|
+
{
|
|
153
|
+
type: 'confirm',
|
|
154
|
+
name: 'autoCommit',
|
|
155
|
+
message: 'Fazer commit automaticamente sem confirmação?',
|
|
156
|
+
default: currentConfig.autoCommit,
|
|
157
|
+
},
|
|
158
|
+
]);
|
|
159
|
+
newConfig.autoCommit = autoCommit;
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
case 'excludePatterns': {
|
|
163
|
+
const { excludePatterns } = await inquirer.prompt([
|
|
164
|
+
{
|
|
165
|
+
type: 'input',
|
|
166
|
+
name: 'excludePatterns',
|
|
167
|
+
message: 'Padrões de exclusão (separados por vírgula):',
|
|
168
|
+
default: currentConfig.excludePatterns.join(', '),
|
|
169
|
+
},
|
|
170
|
+
]);
|
|
171
|
+
newConfig.excludePatterns = excludePatterns.split(',').map((p) => p.trim());
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
case 'saveGlobal':
|
|
175
|
+
saveConfig(currentConfig, true);
|
|
176
|
+
return;
|
|
71
177
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const chunkTokens = tokens.slice(i, i + maxTokens);
|
|
76
|
-
const chunkText = decode(chunkTokens);
|
|
77
|
-
chunks.push(chunkText);
|
|
178
|
+
if (Object.keys(newConfig).length > 0) {
|
|
179
|
+
saveConfig(newConfig);
|
|
180
|
+
console.log(chalk.green('✅ Configuração atualizada com sucesso!'));
|
|
78
181
|
}
|
|
79
|
-
return chunks;
|
|
80
182
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
Caso o commit seja uma alteração significativa (breaking change), inclua um título com \`!\` após o tipo de commit e adicione a explicação em \`BREAKING CHANGE\`:
|
|
99
|
-
feat!(auth): reestruturar fluxo de login
|
|
100
|
-
BREAKING CHANGE: A API de login foi alterada e não é compatível com versões anteriores.
|
|
101
|
-
|
|
102
|
-
Gere também uma descrição mais detalhada do commit, se necessário.
|
|
103
|
-
|
|
104
|
-
Use sempre linguagem imperativa e primeira pessoa do singular, como:
|
|
105
|
-
- "adiciona recurso"
|
|
106
|
-
- "corrige bug"
|
|
107
|
-
- "remove arquivo"
|
|
108
|
-
|
|
109
|
-
Lembre-se: os textos fora do Conventional Commit devem ser em português.
|
|
110
|
-
`;
|
|
111
|
-
async function main() {
|
|
112
|
-
// Verifica se o diretório é um repositório git.
|
|
113
|
-
try {
|
|
114
|
-
execSync('git rev-parse --is-inside-work-tree', { stdio: 'ignore' });
|
|
183
|
+
/**
|
|
184
|
+
* Função principal do commit wizard
|
|
185
|
+
*/
|
|
186
|
+
async function runCommitWizard() {
|
|
187
|
+
const config = loadConfig();
|
|
188
|
+
if (!config.apiKey) {
|
|
189
|
+
console.log(chalk.redBright('\n🚨 Erro: A variável de ambiente ') +
|
|
190
|
+
chalk.yellow('OPENAI_API_KEY') +
|
|
191
|
+
chalk.redBright(' não está definida.\n'));
|
|
192
|
+
console.log(chalk.white('→ Defina sua chave com: ') +
|
|
193
|
+
chalk.cyan('export OPENAI_API_KEY="sua-chave"') +
|
|
194
|
+
chalk.white(' ou configure no seu ') +
|
|
195
|
+
chalk.cyan('.bashrc') +
|
|
196
|
+
chalk.white(' ou ') +
|
|
197
|
+
chalk.cyan('.zshrc\n'));
|
|
198
|
+
process.exit(1);
|
|
115
199
|
}
|
|
116
|
-
|
|
200
|
+
const gitUtils = new GitUtils(config.excludePatterns);
|
|
201
|
+
const aiService = new AIService(config);
|
|
202
|
+
const diffProcessor = new DiffProcessor(aiService, config.maxTokens);
|
|
203
|
+
// Verifica se é um repositório Git
|
|
204
|
+
if (!gitUtils.isGitRepository()) {
|
|
117
205
|
console.error(chalk.red('❌ Este diretório não é um repositório git.'));
|
|
118
206
|
process.exit(1);
|
|
119
207
|
}
|
|
120
|
-
//
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
208
|
+
// Obtém status dos arquivos staged
|
|
209
|
+
const gitStatus = gitUtils.getStagedStatus();
|
|
210
|
+
if (!gitStatus.hasStagedFiles) {
|
|
211
|
+
console.log(chalk.yellow('⚠️ Não há alterações staged para o commit.'));
|
|
212
|
+
console.log(chalk.cyan('💡 Dica: Use ') +
|
|
213
|
+
chalk.white('git add <arquivos>') +
|
|
214
|
+
chalk.cyan(' para adicionar arquivos ao stage.'));
|
|
215
|
+
process.exit(0);
|
|
128
216
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
217
|
+
// Analisa complexidade do diff
|
|
218
|
+
const complexity = diffProcessor.analyzeDiffComplexity(gitStatus.diff);
|
|
219
|
+
const stats = diffProcessor.extractDiffStats(gitStatus.diff);
|
|
220
|
+
const hasBreakingChanges = diffProcessor.detectBreakingChanges(gitStatus.diff);
|
|
221
|
+
console.log(chalk.cyan.bold('\n📈 Análise do Diff:'));
|
|
222
|
+
console.log(chalk.white(`• Arquivos alterados: ${stats.files.length}`));
|
|
223
|
+
console.log(chalk.white(`• Linhas adicionadas: ${chalk.green(`+${stats.additions}`)}`));
|
|
224
|
+
console.log(chalk.white(`• Linhas removidas: ${chalk.red(`-${stats.deletions}`)}`));
|
|
225
|
+
console.log(chalk.white(`• Tokens estimados: ${complexity.tokenCount}`));
|
|
226
|
+
console.log(chalk.white(`• Complexidade: ${complexity.complexity === 'simple' ? '🟢 Simples' : complexity.complexity === 'moderate' ? '🟡 Moderada' : '🔴 Complexa'}`));
|
|
227
|
+
if (hasBreakingChanges) {
|
|
228
|
+
console.log(chalk.yellow('⚠️ Possíveis breaking changes detectadas!'));
|
|
132
229
|
}
|
|
133
|
-
//
|
|
134
|
-
|
|
230
|
+
// Processa o diff
|
|
231
|
+
console.log(chalk.cyan('\n🔍 Iniciando análise...'));
|
|
135
232
|
try {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
//
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
233
|
+
const processedDiff = await diffProcessor.processLargeDiff(gitStatus.diff);
|
|
234
|
+
// Gera mensagem de commit
|
|
235
|
+
const generateSpinner = ora('🤖 Gerando mensagem de commit com IA...').start();
|
|
236
|
+
const response = await aiService.generateCommitMessage(processedDiff);
|
|
237
|
+
generateSpinner.succeed('✨ Mensagem de commit gerada com sucesso.');
|
|
238
|
+
if (response.usage) {
|
|
239
|
+
console.log(chalk.dim(`\n💰 Tokens utilizados: ${response.usage.totalTokens} (prompt: ${response.usage.promptTokens}, resposta: ${response.usage.completionTokens})`));
|
|
240
|
+
}
|
|
241
|
+
console.log(chalk.greenBright('\n✨ Mensagem de commit gerada:'));
|
|
242
|
+
console.log(chalk.yellowBright(response.content));
|
|
243
|
+
// Se auto commit estiver ativado, faz o commit diretamente
|
|
244
|
+
if (config.autoCommit) {
|
|
245
|
+
console.log(chalk.blue('\n🚀 Auto commit ativado, realizando commit...'));
|
|
246
|
+
gitUtils.commit(response.content);
|
|
247
|
+
console.log(chalk.green.bold('✅ Commit realizado com sucesso.'));
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
// Menu de ações
|
|
251
|
+
const { action } = await inquirer.prompt([
|
|
252
|
+
{
|
|
253
|
+
type: 'list',
|
|
254
|
+
name: 'action',
|
|
255
|
+
message: chalk.blue.bold('O que deseja fazer com a mensagem de commit?'),
|
|
256
|
+
choices: [
|
|
257
|
+
{ name: '📌 Confirmar e commitar', value: 'confirm' },
|
|
258
|
+
{ name: '📝 Editar a mensagem antes de commitar', value: 'edit' },
|
|
259
|
+
{ name: '🔄 Regenerar mensagem', value: 'regenerate' },
|
|
260
|
+
{ name: '📋 Copiar para clipboard', value: 'copy' },
|
|
261
|
+
{ name: '🚫 Cancelar o commit', value: 'cancel' },
|
|
262
|
+
],
|
|
263
|
+
},
|
|
264
|
+
]);
|
|
265
|
+
if (action === 'regenerate') {
|
|
266
|
+
// Recursão para regenerar
|
|
267
|
+
return runCommitWizard();
|
|
268
|
+
}
|
|
269
|
+
if (action === 'copy') {
|
|
270
|
+
try {
|
|
271
|
+
execSync(`echo "${response.content}" | pbcopy`, { stdio: 'ignore' });
|
|
272
|
+
console.log(chalk.green('📋 Mensagem copiada para o clipboard!'));
|
|
160
273
|
}
|
|
161
|
-
|
|
274
|
+
catch {
|
|
275
|
+
console.log(chalk.yellow('⚠️ Não foi possível copiar para o clipboard. Mensagem:'));
|
|
276
|
+
console.log(response.content);
|
|
277
|
+
}
|
|
278
|
+
return;
|
|
162
279
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
process.exit(1);
|
|
280
|
+
if (action === 'cancel') {
|
|
281
|
+
console.log(chalk.yellow('🚫 Commit cancelado pelo usuário.'));
|
|
282
|
+
return;
|
|
167
283
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
{ name: '📝 Editar a mensagem antes de commitar', value: 'edit' },
|
|
197
|
-
{ name: '🚫 Cancelar o commit', value: 'cancel' },
|
|
198
|
-
],
|
|
199
|
-
},
|
|
200
|
-
]);
|
|
201
|
-
// Cria um arquivo temporário para armazenar a mensagem (para edição se necessário).
|
|
202
|
-
const tempFilePath = path.join(os.tmpdir(), 'COMMIT_EDITMSG');
|
|
203
|
-
fs.writeFileSync(tempFilePath, generatedMessage);
|
|
204
|
-
if (action === 'edit') {
|
|
205
|
-
console.log(chalk.cyan('📝 Abrindo editor para edição da mensagem...'));
|
|
206
|
-
const editor = process.env.EDITOR || 'nano';
|
|
284
|
+
let finalMessage = response.content;
|
|
285
|
+
if (action === 'edit') {
|
|
286
|
+
const tempFilePath = path.join(os.tmpdir(), 'COMMIT_EDITMSG');
|
|
287
|
+
fs.writeFileSync(tempFilePath, response.content);
|
|
288
|
+
console.log(chalk.cyan('📝 Abrindo editor para edição da mensagem...'));
|
|
289
|
+
const editor = process.env.EDITOR || 'nano';
|
|
290
|
+
try {
|
|
291
|
+
execSync(`${editor} ${tempFilePath}`, { stdio: 'inherit' });
|
|
292
|
+
finalMessage = fs.readFileSync(tempFilePath, 'utf8').trim();
|
|
293
|
+
fs.unlinkSync(tempFilePath);
|
|
294
|
+
if (!finalMessage) {
|
|
295
|
+
console.error(chalk.red('❌ Nenhuma mensagem inserida, commit cancelado.'));
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
console.error(chalk.red('❌ Erro ao abrir o editor:'), error);
|
|
301
|
+
fs.unlinkSync(tempFilePath);
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
// Realiza o commit
|
|
306
|
+
const additionalArgs = process.argv
|
|
307
|
+
.slice(2)
|
|
308
|
+
.filter(arg => !['--config', '--info'].includes(arg));
|
|
309
|
+
gitUtils.commit(finalMessage, additionalArgs);
|
|
310
|
+
console.log(chalk.green.bold('✅ Commit realizado com sucesso.'));
|
|
311
|
+
// Mostra informações do commit criado
|
|
207
312
|
try {
|
|
208
|
-
|
|
313
|
+
const commitInfo = gitUtils.getLastCommitInfo();
|
|
314
|
+
console.log(chalk.dim(`\n📝 Commit ${commitInfo.hash.substring(0, 7)}: ${commitInfo.message}`));
|
|
209
315
|
}
|
|
210
|
-
catch
|
|
211
|
-
|
|
212
|
-
process.exit(1);
|
|
316
|
+
catch {
|
|
317
|
+
// Ignora erros ao obter info do commit
|
|
213
318
|
}
|
|
214
319
|
}
|
|
215
|
-
|
|
216
|
-
console.
|
|
217
|
-
fs.unlinkSync(tempFilePath);
|
|
218
|
-
process.exit(0);
|
|
219
|
-
}
|
|
220
|
-
// Lê a mensagem final (após eventual edição).
|
|
221
|
-
const finalMessage = fs.readFileSync(tempFilePath, 'utf8').trim();
|
|
222
|
-
if (!finalMessage) {
|
|
223
|
-
console.error(chalk.red('❌ Nenhuma mensagem inserida, commit cancelado.'));
|
|
224
|
-
fs.unlinkSync(tempFilePath);
|
|
320
|
+
catch (error) {
|
|
321
|
+
console.error(chalk.red('❌ Erro durante o commit:'), error);
|
|
225
322
|
process.exit(1);
|
|
226
323
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Função principal
|
|
327
|
+
*/
|
|
328
|
+
async function main() {
|
|
329
|
+
const args = process.argv.slice(2);
|
|
330
|
+
// Verifica argumentos de linha de comando
|
|
331
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
332
|
+
console.log(chalk.blue.bold('\n🧙♂️ Commit Wizard - Gerador de commits com IA\n'));
|
|
333
|
+
console.log(chalk.white('Uso: commit-wizard [opções]\n'));
|
|
334
|
+
console.log(chalk.white('Opções:'));
|
|
335
|
+
console.log(chalk.white(' --config, -c Abrir menu de configuração'));
|
|
336
|
+
console.log(chalk.white(' --info, -i Mostrar informações do sistema'));
|
|
337
|
+
console.log(chalk.white(' --help, -h Mostrar esta ajuda'));
|
|
338
|
+
console.log(chalk.white('\nExemplos:'));
|
|
339
|
+
console.log(chalk.cyan(' commit-wizard # Gerar commit normal'));
|
|
340
|
+
console.log(chalk.cyan(' commit-wizard --config # Configurar o wizard'));
|
|
341
|
+
console.log(chalk.cyan(' commit-wizard --info # Ver informações do sistema'));
|
|
342
|
+
return;
|
|
234
343
|
}
|
|
235
|
-
|
|
236
|
-
|
|
344
|
+
if (args.includes('--config') || args.includes('-c')) {
|
|
345
|
+
await configurationMenu();
|
|
346
|
+
return;
|
|
237
347
|
}
|
|
238
|
-
|
|
239
|
-
|
|
348
|
+
if (args.includes('--info') || args.includes('-i')) {
|
|
349
|
+
const config = loadConfig();
|
|
350
|
+
const gitUtils = new GitUtils(config.excludePatterns);
|
|
351
|
+
displaySystemInfo(config, gitUtils);
|
|
352
|
+
return;
|
|
240
353
|
}
|
|
354
|
+
// Executa o wizard principal
|
|
355
|
+
await runCommitWizard();
|
|
241
356
|
}
|
|
242
|
-
main().catch(
|
|
243
|
-
console.error(chalk.red('❌ Erro durante
|
|
357
|
+
main().catch(err => {
|
|
358
|
+
console.error(chalk.red('❌ Erro durante execução:'), err);
|
|
244
359
|
process.exit(1);
|
|
245
360
|
});
|
|
246
361
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|