@gilbert_oliveira/commit-wizard 1.0.4 → 1.0.6

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,2 @@
1
+ #!/usr/bin/env ts-node
2
+ export {};
@@ -0,0 +1,215 @@
1
+ #!/usr/bin/env ts-node
2
+ import chalk from 'chalk';
3
+ import { execSync } from 'child_process';
4
+ import fs from 'fs';
5
+ import inquirer from 'inquirer';
6
+ import os from 'os';
7
+ import path from 'path';
8
+ // Função para verificar se o comando 'cody' está disponível
9
+ function isCodyInstalled() {
10
+ try {
11
+ execSync('cody --version', { stdio: 'ignore' });
12
+ return true;
13
+ }
14
+ catch (error) {
15
+ return false;
16
+ }
17
+ }
18
+ // Função para instalar o 'cody' automaticamente
19
+ function installCody() {
20
+ console.log(chalk.blue('🚀 Instalando o cody automaticamente...'));
21
+ try {
22
+ execSync('npm i -g @sourcegraph/cody', { stdio: 'inherit' });
23
+ console.log(chalk.green('✅ Cody instalado com sucesso!'));
24
+ }
25
+ catch (error) {
26
+ console.error(chalk.red('❌ Erro ao instalar o Cody:'), error.message);
27
+ process.exit(1);
28
+ }
29
+ }
30
+ // Verifica se o 'cody' está instalado, caso contrário, instala
31
+ if (!isCodyInstalled()) {
32
+ installCody();
33
+ }
34
+ // Função para verificar se está logado no Cody
35
+ function isCodyLoggedIn() {
36
+ try {
37
+ execSync('cody auth whoami', { stdio: 'ignore' });
38
+ return true;
39
+ }
40
+ catch (error) {
41
+ return false;
42
+ }
43
+ }
44
+ // Verificar se o usuário está logado no Cody, se não estiver, roda o comando para logar
45
+ if (!isCodyLoggedIn()) {
46
+ console.log(chalk.blue('🔑 Realize o login no Cody...'));
47
+ try {
48
+ execSync('cody auth login --web', { stdio: 'inherit' });
49
+ }
50
+ catch (error) {
51
+ console.error(chalk.red('❌ Erro ao realizar o login no Cody:'), error.message);
52
+ process.exit(1);
53
+ }
54
+ }
55
+ // Função para verificar arquivos no estado staged e unstaged
56
+ function getGitStatus() {
57
+ const staged = execSync('git diff --name-only --cached')
58
+ .toString()
59
+ .trim()
60
+ .split('\n')
61
+ .filter(Boolean);
62
+ const unstaged = execSync('git diff --name-only')
63
+ .toString()
64
+ .trim()
65
+ .split('\n')
66
+ .filter(Boolean);
67
+ return { staged, unstaged };
68
+ }
69
+ async function ccm() {
70
+ const CODY_PROMPT = `
71
+ Por favor, escreva a mensagem de commit para este diff usando a convenção de Conventional Commits...
72
+ `;
73
+ const prompt = inquirer.createPromptModule();
74
+ // Verifica se o diretório é um repositório Git
75
+ try {
76
+ console.log(chalk.blue('🔄 Verificando se o diretório é um repositório git...'));
77
+ execSync('git rev-parse --is-inside-work-tree', { stdio: 'ignore' });
78
+ }
79
+ catch (error) {
80
+ console.error(chalk.red('❌ Este diretório não é um repositório git.'));
81
+ return;
82
+ }
83
+ // Obtém status do git
84
+ const { staged, unstaged } = getGitStatus();
85
+ if (staged.length === 0 && unstaged.length === 0) {
86
+ console.log(chalk.yellow('⚠️ Nenhuma modificação detectada no repositório.'));
87
+ return;
88
+ }
89
+ if (staged.length === 0 && unstaged.length > 0) {
90
+ console.log(chalk.yellow('📂 Há arquivos modificados fora da staged:'));
91
+ console.log(unstaged.map((file) => ` - ${file}`).join('\n'));
92
+ const { addAll } = await prompt([
93
+ {
94
+ type: 'confirm',
95
+ name: 'addAll',
96
+ message: 'Deseja adicionar todos os arquivos ao staged?',
97
+ },
98
+ ]);
99
+ if (addAll) {
100
+ execSync('git add .');
101
+ console.log(chalk.green('✅ Todos os arquivos foram adicionados à staged.'));
102
+ }
103
+ else {
104
+ console.log(chalk.red('❌ Nenhum arquivo foi adicionado à staged. Operação cancelada.'));
105
+ return;
106
+ }
107
+ }
108
+ else if (staged.length > 0 && unstaged.length > 0) {
109
+ console.log(chalk.blue('📂 Arquivos na staged:'));
110
+ console.log(staged.map((file) => ` - ${file}`).join('\n'));
111
+ console.log(chalk.yellow('📂 Arquivos fora da staged:'));
112
+ console.log(unstaged.map((file) => ` - ${file}`).join('\n'));
113
+ const { addUnstaged } = await prompt([
114
+ {
115
+ type: 'confirm',
116
+ name: 'addUnstaged',
117
+ message: 'Deseja adicionar os arquivos fora da staged?',
118
+ },
119
+ ]);
120
+ if (addUnstaged) {
121
+ execSync('git add .');
122
+ console.log(chalk.green('✅ Todos os arquivos foram adicionados à staged.'));
123
+ }
124
+ }
125
+ // Confirma se há arquivos na staged após as alterações
126
+ const finalStatus = getGitStatus();
127
+ if (finalStatus.staged.length === 0) {
128
+ console.log(chalk.red('❌ Nenhum arquivo na staged. Operação cancelada.'));
129
+ return;
130
+ }
131
+ // Cria arquivos temporários para armazenar o prompt e o diff
132
+ const tempPromptPath = path.join(os.tmpdir(), 'CODY_PROMPT.txt');
133
+ const tempDiffPath = path.join(os.tmpdir(), 'CODY_DIFF.patch');
134
+ fs.writeFileSync(tempPromptPath, CODY_PROMPT);
135
+ fs.writeFileSync(tempDiffPath, execSync('git diff --cached').toString());
136
+ // Gera a mensagem do commit usando o diff salvo no arquivo temporário
137
+ let generatedMessage;
138
+ try {
139
+ console.log(chalk.blue.bold('⌛ Gerando mensagem de commit com o Cody...'));
140
+ const response = execSync(`cody chat --context-file ${tempDiffPath} --stdin -m "$(cat ${tempPromptPath})"`).toString();
141
+ // Extrai o bloco de código delimitado por ``` usando regex
142
+ const match = response.match(/```([\s\S]*?)```/);
143
+ generatedMessage = match ? match[1].trim() : response.trim();
144
+ console.log(chalk.greenBright('\n✨ Mensagem de commit gerada automaticamente:'));
145
+ console.log(chalk.yellowBright(generatedMessage));
146
+ }
147
+ catch (error) {
148
+ console.error(chalk.red('❌ Erro ao gerar mensagem de commit com o Cody:'), error.message);
149
+ return;
150
+ }
151
+ finally {
152
+ fs.unlinkSync(tempPromptPath); // Remove o arquivo temporário do prompt
153
+ fs.unlinkSync(tempDiffPath); // Remove o arquivo temporário do diff
154
+ }
155
+ // Pergunta ao usuário se ele quer editar, confirmar ou cancelar o commit
156
+ const { action } = await prompt([
157
+ {
158
+ type: 'list',
159
+ name: 'action',
160
+ message: chalk.blue.bold('O que deseja fazer com a mensagem de commit gerada?'),
161
+ choices: [
162
+ { name: '📌 Confirmar e commitar', value: 'confirm' },
163
+ { name: '📝 Editar a mensagem antes de commitar', value: 'edit' },
164
+ { name: '🚫 Cancelar o commit', value: 'cancel' },
165
+ ],
166
+ },
167
+ ]);
168
+ // Caminho temporário para salvar a mensagem gerada
169
+ const tempFilePath = path.join(os.tmpdir(), 'COMMIT_EDITMSG');
170
+ fs.writeFileSync(tempFilePath, generatedMessage);
171
+ if (action === 'edit') {
172
+ console.log(chalk.cyan('📝 Abrindo editor para edição da mensagem...'));
173
+ const editor = process.env.EDITOR || 'nano';
174
+ try {
175
+ execSync(`${editor} ${tempFilePath}`, { stdio: 'inherit' });
176
+ }
177
+ catch (error) {
178
+ console.error(chalk.red('❌ Erro ao abrir o editor:'), error.message);
179
+ return;
180
+ }
181
+ }
182
+ else if (action === 'cancel') {
183
+ console.log(chalk.yellow('🚫 Commit cancelado pelo usuário.'));
184
+ fs.unlinkSync(tempFilePath);
185
+ return;
186
+ }
187
+ // Lê a mensagem do arquivo temporário após a edição
188
+ const finalMessage = fs.readFileSync(tempFilePath, 'utf8').trim();
189
+ // Verifica se a mensagem está vazia
190
+ if (!finalMessage) {
191
+ console.log(chalk.red('❌ Nenhuma mensagem inserida, commit cancelado.'));
192
+ fs.unlinkSync(tempFilePath);
193
+ return;
194
+ }
195
+ // Realiza o commit com a mensagem final
196
+ try {
197
+ execSync(`git commit -F ${tempFilePath}`);
198
+ console.log(chalk.green.bold('✅ Commit realizado com sucesso.'));
199
+ }
200
+ catch (error) {
201
+ console.error(chalk.red('❌ Erro ao realizar o commit:'), error.message);
202
+ }
203
+ finally {
204
+ fs.unlinkSync(tempFilePath);
205
+ }
206
+ }
207
+ // Chama a função principal
208
+ ccm().catch((err) => console.error(chalk.red('❌ Erro durante o commit:'), err)).finally(() => {
209
+ // delete the temp files
210
+ fs.unlinkSync(path.join(os.tmpdir(), 'CODY_PROMPT.txt'));
211
+ fs.unlinkSync(path.join(os.tmpdir(), 'CODY_DIFF.patch'));
212
+ fs.unlinkSync(path.join(os.tmpdir(), 'COMMIT_EDITMSG'));
213
+ console.log(chalk.green('✅ Todos os arquivos temporários removidos.'));
214
+ });
215
+ //# sourceMappingURL=index%20copy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index copy.js","sourceRoot":"","sources":["../src/index copy.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ import path from 'path';
8
8
  // Função para verificar se o comando 'cody' está disponível
9
9
  function isCodyInstalled() {
10
10
  try {
11
- execSync('cody --version', { stdio: 'ignore' }); // Tentando rodar o comando `cody --version`
11
+ execSync('cody --version', { stdio: 'ignore' });
12
12
  return true;
13
13
  }
14
14
  catch (error) {
@@ -19,37 +19,37 @@ function isCodyInstalled() {
19
19
  function installCody() {
20
20
  console.log(chalk.blue('🚀 Instalando o cody automaticamente...'));
21
21
  try {
22
- execSync('npm i -g @sourcegraph/cody', { stdio: 'inherit' }); // Instalando globalmente com npm
22
+ execSync('npm i -g @sourcegraph/cody', { stdio: 'inherit' });
23
23
  console.log(chalk.green('✅ Cody instalado com sucesso!'));
24
24
  }
25
25
  catch (error) {
26
26
  console.error(chalk.red('❌ Erro ao instalar o Cody:'), error.message);
27
- process.exit(1); // Finaliza o processo em caso de erro
27
+ process.exit(1);
28
28
  }
29
29
  }
30
30
  // Verifica se o 'cody' está instalado, caso contrário, instala
31
31
  if (!isCodyInstalled()) {
32
32
  installCody();
33
33
  }
34
- // Função para verificar se esta logado no cody
34
+ // Função para verificar se está logado no cody
35
35
  function isCodyLoggedIn() {
36
36
  try {
37
- execSync('cody auth whoami', { stdio: 'ignore' }); // Tentando rodar o comando `cody auth whoami`
37
+ execSync('cody auth whoami', { stdio: 'ignore' });
38
38
  return true;
39
39
  }
40
40
  catch (error) {
41
41
  return false;
42
42
  }
43
43
  }
44
- // Verificar se o usuário está logado no Cody se nao estiver roda o comando para logar
44
+ // Verificar se o usuário está logado no Cody, se não estiver, roda o comando para logar
45
45
  if (!isCodyLoggedIn()) {
46
46
  console.log(chalk.blue('🔑 Realize o login no Cody...'));
47
47
  try {
48
- execSync('cody auth login --web', { stdio: 'inherit' }); // Rodando o comando `cody auth login`
48
+ execSync('cody auth login --web', { stdio: 'inherit' });
49
49
  }
50
50
  catch (error) {
51
51
  console.error(chalk.red('❌ Erro ao realizar o login no Cody:'), error.message);
52
- process.exit(1); // Finaliza o processo em caso de erro
52
+ process.exit(1);
53
53
  }
54
54
  }
55
55
  // Define o prompt do Cody para geração da mensagem de commit
@@ -84,7 +84,7 @@ Lembre-se: os textos fora do Conventional Commit devem ser em português.
84
84
  `;
85
85
  async function ccm() {
86
86
  const prompt = inquirer.createPromptModule();
87
- // verifica se o repositório git está inicializado
87
+ // Verifica se o repositório git está inicializado
88
88
  try {
89
89
  console.log(chalk.blue('🔄 Verificando se o diretório é um repositório git...'));
90
90
  execSync('git rev-parse --is-inside-work-tree', { stdio: 'ignore' });
@@ -93,16 +93,22 @@ async function ccm() {
93
93
  console.error(chalk.red('❌ Este diretório não é um repositório git.'));
94
94
  return;
95
95
  }
96
- // Adiciona todos os arquivos modificados ao índice
97
- execSync('git add .');
98
- // Cria um arquivo temporário para armazenar o prompt
96
+ // Verifica se alterações staged
97
+ const stagedChanges = execSync('git diff --cached --name-only').toString().trim();
98
+ if (!stagedChanges) {
99
+ console.log(chalk.yellow('⚠️ Não há alterações staged para o commit.'));
100
+ return;
101
+ }
102
+ // Cria arquivos temporários para armazenar o prompt e o diff
99
103
  const tempPromptPath = path.join(os.tmpdir(), 'CODY_PROMPT.txt');
104
+ const tempDiffPath = path.join(os.tmpdir(), 'CODY_DIFF.patch');
100
105
  fs.writeFileSync(tempPromptPath, CODY_PROMPT);
101
- // Gera a mensagem do commit usando o diff com o cody chat
106
+ fs.writeFileSync(tempDiffPath, execSync('git diff --cached').toString());
107
+ // Gera a mensagem do commit usando o diff salvo no arquivo temporário
102
108
  let generatedMessage;
103
109
  try {
104
110
  console.log(chalk.blue.bold('⌛ Gerando mensagem de commit com o Cody...'));
105
- const response = execSync(`git diff --cached | cody chat --stdin -m "$(cat ${tempPromptPath})"`).toString();
111
+ const response = execSync(`cody chat --context-file ${tempDiffPath} --stdin -m "$(cat ${tempPromptPath})"`).toString();
106
112
  // Extrai o bloco de código delimitado por ``` usando regex
107
113
  const match = response.match(/```([\s\S]*?)```/);
108
114
  generatedMessage = match ? match[1].trim() : response.trim();
@@ -114,7 +120,8 @@ async function ccm() {
114
120
  return;
115
121
  }
116
122
  finally {
117
- fs.unlinkSync(tempPromptPath); // Remove o arquivo temporário após o uso
123
+ fs.unlinkSync(tempPromptPath); // Remove o arquivo temporário do prompt
124
+ fs.unlinkSync(tempDiffPath); // Remove o arquivo temporário do diff
118
125
  }
119
126
  // Pergunta ao usuário se ele quer editar, confirmar ou cancelar o commit
120
127
  const { action } = await prompt([
@@ -131,7 +138,6 @@ async function ccm() {
131
138
  ]);
132
139
  // Caminho temporário para salvar a mensagem gerada
133
140
  const tempFilePath = path.join(os.tmpdir(), 'COMMIT_EDITMSG');
134
- // Salva a mensagem gerada no arquivo temporário
135
141
  fs.writeFileSync(tempFilePath, generatedMessage);
136
142
  if (action === 'edit') {
137
143
  console.log(chalk.cyan('📝 Abrindo editor para edição da mensagem...'));
@@ -146,7 +152,7 @@ async function ccm() {
146
152
  }
147
153
  else if (action === 'cancel') {
148
154
  console.log(chalk.yellow('🚫 Commit cancelado pelo usuário.'));
149
- fs.unlinkSync(tempFilePath); // Remove o arquivo temporário
155
+ fs.unlinkSync(tempFilePath);
150
156
  return;
151
157
  }
152
158
  // Lê a mensagem do arquivo temporário após a edição
@@ -154,7 +160,7 @@ async function ccm() {
154
160
  // Verifica se a mensagem está vazia
155
161
  if (!finalMessage) {
156
162
  console.log(chalk.red('❌ Nenhuma mensagem inserida, commit cancelado.'));
157
- fs.unlinkSync(tempFilePath); // Remove o arquivo temporário
163
+ fs.unlinkSync(tempFilePath);
158
164
  return;
159
165
  }
160
166
  // Realiza o commit com a mensagem final
@@ -166,7 +172,7 @@ async function ccm() {
166
172
  console.error(chalk.red('❌ Erro ao realizar o commit:'), error.message);
167
173
  }
168
174
  finally {
169
- fs.unlinkSync(tempFilePath); // Remove o arquivo temporário
175
+ fs.unlinkSync(tempFilePath);
170
176
  }
171
177
  }
172
178
  // Chama a função principal
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":";AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,4DAA4D;AAC5D,SAAS,eAAe;IACtB,IAAI,CAAC;QACH,QAAQ,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,gDAAgD;AAChD,SAAS,WAAW;IAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC;QACH,QAAQ,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;IACvB,WAAW,EAAE,CAAC;AAChB,CAAC;AAED,+CAA+C;AAC/C,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,QAAQ,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,wFAAwF;AACxF,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,QAAQ,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,6DAA6D;AAC7D,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BnB,CAAC;AAMF,KAAK,UAAU,GAAG;IAChB,MAAM,MAAM,GAAG,QAAQ,CAAC,kBAAkB,EAAE,CAAC;IAE7C,kDAAkD;IAClD,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,CAAC;QACjF,QAAQ,CAAC,qCAAqC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACvE,OAAO;IACT,CAAC;IAED,mCAAmC;IACnC,MAAM,aAAa,GAAG,QAAQ,CAAC,+BAA+B,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;IAClF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACxE,OAAO;IACT,CAAC;IAED,6DAA6D;IAC7D,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAC/D,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAC9C,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEzE,sEAAsE;IACtE,IAAI,gBAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,QAAQ,CACvB,4BAA4B,YAAY,sBAAsB,cAAc,IAAI,CACjF,CAAC,QAAQ,EAAE,CAAC;QAEb,2DAA2D;QAC3D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACjD,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,gDAAgD,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QACrG,OAAO;IACT,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,wCAAwC;QACvE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,sCAAsC;IACrE,CAAC;IAED,yEAAyE;IACzE,MAAM,EAAE,MAAM,EAAE,GAAiB,MAAM,MAAM,CAAC;QAC5C;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qDAAqD,CAAC;YAC/E,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,SAAS,EAAE;gBACrD,EAAE,IAAI,EAAE,wCAAwC,EAAE,KAAK,EAAE,MAAM,EAAE;gBACjE,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,QAAQ,EAAE;aAClD;SACF;KACF,CAAC,CAAC;IAEH,mDAAmD;IACnD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC9D,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;IAEjD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC;QAC5C,IAAI,CAAC;YACH,QAAQ,CAAC,GAAG,MAAM,IAAI,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;YAChF,OAAO;QACT,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC/D,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,oDAAoD;IACpD,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAElE,oCAAoC;IACpC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;QACzE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,wCAAwC;IACxC,IAAI,CAAC;QACH,QAAQ,CAAC,iBAAiB,YAAY,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;IACrF,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,2BAA2B;AAC3B,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gilbert_oliveira/commit-wizard",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "O **Commit Wizard** é uma ferramenta automatizada para geração de mensagens de commit com base na convenção de **Conventional Commits**. Ele ajuda a garantir que suas mensagens de commit sigam um padrão consistente e facilite a comunicação de mudanças no código.",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
package/src/index.ts CHANGED
@@ -1,57 +1,57 @@
1
1
  #!/usr/bin/env ts-node
2
2
 
3
- import chalk from 'chalk'
4
- import { execSync } from 'child_process'
5
- import fs from 'fs'
6
- import inquirer from 'inquirer'
7
- import os from 'os'
8
- import path from 'path'
3
+ import chalk from 'chalk';
4
+ import { execSync } from 'child_process';
5
+ import fs from 'fs';
6
+ import inquirer from 'inquirer';
7
+ import os from 'os';
8
+ import path from 'path';
9
9
 
10
10
  // Função para verificar se o comando 'cody' está disponível
11
11
  function isCodyInstalled(): boolean {
12
12
  try {
13
- execSync('cody --version', { stdio: 'ignore' }) // Tentando rodar o comando `cody --version`
14
- return true
13
+ execSync('cody --version', { stdio: 'ignore' });
14
+ return true;
15
15
  } catch (error) {
16
- return false
16
+ return false;
17
17
  }
18
18
  }
19
19
 
20
20
  // Função para instalar o 'cody' automaticamente
21
21
  function installCody(): void {
22
- console.log(chalk.blue('🚀 Instalando o cody automaticamente...'))
22
+ console.log(chalk.blue('🚀 Instalando o cody automaticamente...'));
23
23
  try {
24
- execSync('npm i -g @sourcegraph/cody', { stdio: 'inherit' }) // Instalando globalmente com npm
25
- console.log(chalk.green('✅ Cody instalado com sucesso!'))
24
+ execSync('npm i -g @sourcegraph/cody', { stdio: 'inherit' });
25
+ console.log(chalk.green('✅ Cody instalado com sucesso!'));
26
26
  } catch (error) {
27
- console.error(chalk.red('❌ Erro ao instalar o Cody:'), (error as Error).message)
28
- process.exit(1) // Finaliza o processo em caso de erro
27
+ console.error(chalk.red('❌ Erro ao instalar o Cody:'), (error as Error).message);
28
+ process.exit(1);
29
29
  }
30
30
  }
31
31
 
32
32
  // Verifica se o 'cody' está instalado, caso contrário, instala
33
33
  if (!isCodyInstalled()) {
34
- installCody()
34
+ installCody();
35
35
  }
36
36
 
37
- // Função para verificar se esta logado no cody
37
+ // Função para verificar se está logado no cody
38
38
  function isCodyLoggedIn(): boolean {
39
39
  try {
40
- execSync('cody auth whoami', { stdio: 'ignore' }) // Tentando rodar o comando `cody auth whoami`
41
- return true
40
+ execSync('cody auth whoami', { stdio: 'ignore' });
41
+ return true;
42
42
  } catch (error) {
43
- return false
43
+ return false;
44
44
  }
45
45
  }
46
46
 
47
- // Verificar se o usuário está logado no Cody se nao estiver roda o comando para logar
47
+ // Verificar se o usuário está logado no Cody, se não estiver, roda o comando para logar
48
48
  if (!isCodyLoggedIn()) {
49
- console.log(chalk.blue('🔑 Realize o login no Cody...'))
49
+ console.log(chalk.blue('🔑 Realize o login no Cody...'));
50
50
  try {
51
- execSync('cody auth login --web', { stdio: 'inherit' }) // Rodando o comando `cody auth login`
51
+ execSync('cody auth login --web', { stdio: 'inherit' });
52
52
  } catch (error) {
53
- console.error(chalk.red('❌ Erro ao realizar o login no Cody:'), (error as Error).message)
54
- process.exit(1) // Finaliza o processo em caso de erro
53
+ console.error(chalk.red('❌ Erro ao realizar o login no Cody:'), (error as Error).message);
54
+ process.exit(1);
55
55
  }
56
56
  }
57
57
 
@@ -84,55 +84,57 @@ Use sempre linguagem imperativa e primeira pessoa do singular, como:
84
84
  - "remove arquivo"
85
85
 
86
86
  Lembre-se: os textos fora do Conventional Commit devem ser em português.
87
- `
87
+ `;
88
88
 
89
89
  interface CommitAction {
90
- action: 'confirm' | 'edit' | 'cancel'
90
+ action: 'confirm' | 'edit' | 'cancel';
91
91
  }
92
92
 
93
93
  async function ccm(): Promise<void> {
94
- const prompt = inquirer.createPromptModule()
94
+ const prompt = inquirer.createPromptModule();
95
95
 
96
- // verifica se o repositório git está inicializado
96
+ // Verifica se o repositório git está inicializado
97
97
  try {
98
- console.log(chalk.blue('🔄 Verificando se o diretório é um repositório git...'))
99
- execSync('git rev-parse --is-inside-work-tree', { stdio: 'ignore' })
98
+ console.log(chalk.blue('🔄 Verificando se o diretório é um repositório git...'));
99
+ execSync('git rev-parse --is-inside-work-tree', { stdio: 'ignore' });
100
100
  } catch (error) {
101
- console.error(chalk.red('❌ Este diretório não é um repositório git.'))
102
- return
101
+ console.error(chalk.red('❌ Este diretório não é um repositório git.'));
102
+ return;
103
103
  }
104
104
 
105
- // Adiciona todos os arquivos modificados ao índice
106
- execSync('git add .')
105
+ // Verifica se alterações staged
106
+ const stagedChanges = execSync('git diff --cached --name-only').toString().trim();
107
+ if (!stagedChanges) {
108
+ console.log(chalk.yellow('⚠️ Não há alterações staged para o commit.'));
109
+ return;
110
+ }
107
111
 
108
- // Cria um arquivo temporário para armazenar o prompt
109
- const tempPromptPath = path.join(os.tmpdir(), 'CODY_PROMPT.txt')
110
- fs.writeFileSync(tempPromptPath, CODY_PROMPT)
112
+ // Cria arquivos temporários para armazenar o prompt e o diff
113
+ const tempPromptPath = path.join(os.tmpdir(), 'CODY_PROMPT.txt');
114
+ const tempDiffPath = path.join(os.tmpdir(), 'CODY_DIFF.patch');
115
+ fs.writeFileSync(tempPromptPath, CODY_PROMPT);
116
+ fs.writeFileSync(tempDiffPath, execSync('git diff --cached').toString());
111
117
 
112
- // Gera a mensagem do commit usando o diff com o cody chat
113
- let generatedMessage: string
118
+ // Gera a mensagem do commit usando o diff salvo no arquivo temporário
119
+ let generatedMessage: string;
114
120
  try {
115
- console.log(chalk.blue.bold('⌛ Gerando mensagem de commit com o Cody...'))
121
+ console.log(chalk.blue.bold('⌛ Gerando mensagem de commit com o Cody...'));
116
122
  const response = execSync(
117
- `git diff --cached | cody chat --stdin -m "$(cat ${tempPromptPath})"`,
118
- ).toString()
123
+ `cody chat --context-file ${tempDiffPath} --stdin -m "$(cat ${tempPromptPath})"`
124
+ ).toString();
119
125
 
120
126
  // Extrai o bloco de código delimitado por ``` usando regex
121
- const match = response.match(/```([\s\S]*?)```/)
122
- generatedMessage = match ? match[1].trim() : response.trim()
127
+ const match = response.match(/```([\s\S]*?)```/);
128
+ generatedMessage = match ? match[1].trim() : response.trim();
123
129
 
124
- console.log(
125
- chalk.greenBright('\n✨ Mensagem de commit gerada automaticamente:'),
126
- )
127
- console.log(chalk.yellowBright(generatedMessage))
130
+ console.log(chalk.greenBright('\n✨ Mensagem de commit gerada automaticamente:'));
131
+ console.log(chalk.yellowBright(generatedMessage));
128
132
  } catch (error) {
129
- console.error(
130
- chalk.red('❌ Erro ao gerar mensagem de commit com o Cody:'),
131
- (error as Error).message,
132
- )
133
- return
133
+ console.error(chalk.red('❌ Erro ao gerar mensagem de commit com o Cody:'), (error as Error).message);
134
+ return;
134
135
  } finally {
135
- fs.unlinkSync(tempPromptPath) // Remove o arquivo temporário após o uso
136
+ fs.unlinkSync(tempPromptPath); // Remove o arquivo temporário do prompt
137
+ fs.unlinkSync(tempDiffPath); // Remove o arquivo temporário do diff
136
138
  }
137
139
 
138
140
  // Pergunta ao usuário se ele quer editar, confirmar ou cancelar o commit
@@ -140,58 +142,54 @@ async function ccm(): Promise<void> {
140
142
  {
141
143
  type: 'list',
142
144
  name: 'action',
143
- message: chalk.blue.bold(
144
- 'O que deseja fazer com a mensagem de commit gerada?',
145
- ),
145
+ message: chalk.blue.bold('O que deseja fazer com a mensagem de commit gerada?'),
146
146
  choices: [
147
147
  { name: '📌 Confirmar e commitar', value: 'confirm' },
148
148
  { name: '📝 Editar a mensagem antes de commitar', value: 'edit' },
149
149
  { name: '🚫 Cancelar o commit', value: 'cancel' },
150
150
  ],
151
151
  },
152
- ])
152
+ ]);
153
153
 
154
154
  // Caminho temporário para salvar a mensagem gerada
155
- const tempFilePath = path.join(os.tmpdir(), 'COMMIT_EDITMSG')
156
-
157
- // Salva a mensagem gerada no arquivo temporário
158
- fs.writeFileSync(tempFilePath, generatedMessage)
155
+ const tempFilePath = path.join(os.tmpdir(), 'COMMIT_EDITMSG');
156
+ fs.writeFileSync(tempFilePath, generatedMessage);
159
157
 
160
158
  if (action === 'edit') {
161
- console.log(chalk.cyan('📝 Abrindo editor para edição da mensagem...'))
162
- const editor = process.env.EDITOR || 'nano'
159
+ console.log(chalk.cyan('📝 Abrindo editor para edição da mensagem...'));
160
+ const editor = process.env.EDITOR || 'nano';
163
161
  try {
164
- execSync(`${editor} ${tempFilePath}`, { stdio: 'inherit' })
162
+ execSync(`${editor} ${tempFilePath}`, { stdio: 'inherit' });
165
163
  } catch (error) {
166
- console.error(chalk.red('❌ Erro ao abrir o editor:'), (error as Error).message)
167
- return
164
+ console.error(chalk.red('❌ Erro ao abrir o editor:'), (error as Error).message);
165
+ return;
168
166
  }
169
167
  } else if (action === 'cancel') {
170
- console.log(chalk.yellow('🚫 Commit cancelado pelo usuário.'))
171
- fs.unlinkSync(tempFilePath) // Remove o arquivo temporário
172
- return
168
+ console.log(chalk.yellow('🚫 Commit cancelado pelo usuário.'));
169
+ fs.unlinkSync(tempFilePath);
170
+ return;
173
171
  }
174
172
 
175
173
  // Lê a mensagem do arquivo temporário após a edição
176
- const finalMessage = fs.readFileSync(tempFilePath, 'utf8').trim()
174
+ const finalMessage = fs.readFileSync(tempFilePath, 'utf8').trim();
177
175
 
178
176
  // Verifica se a mensagem está vazia
179
177
  if (!finalMessage) {
180
- console.log(chalk.red('❌ Nenhuma mensagem inserida, commit cancelado.'))
181
- fs.unlinkSync(tempFilePath) // Remove o arquivo temporário
182
- return
178
+ console.log(chalk.red('❌ Nenhuma mensagem inserida, commit cancelado.'));
179
+ fs.unlinkSync(tempFilePath);
180
+ return;
183
181
  }
184
182
 
185
183
  // Realiza o commit com a mensagem final
186
184
  try {
187
- execSync(`git commit -F ${tempFilePath}`)
188
- console.log(chalk.green.bold('✅ Commit realizado com sucesso.'))
185
+ execSync(`git commit -F ${tempFilePath}`);
186
+ console.log(chalk.green.bold('✅ Commit realizado com sucesso.'));
189
187
  } catch (error) {
190
- console.error(chalk.red('❌ Erro ao realizar o commit:'), (error as Error).message)
188
+ console.error(chalk.red('❌ Erro ao realizar o commit:'), (error as Error).message);
191
189
  } finally {
192
- fs.unlinkSync(tempFilePath) // Remove o arquivo temporário
190
+ fs.unlinkSync(tempFilePath);
193
191
  }
194
192
  }
195
193
 
196
194
  // Chama a função principal
197
- ccm().catch((err) => console.error(chalk.red('❌ Erro durante o commit:'), err))
195
+ ccm().catch((err) => console.error(chalk.red('❌ Erro durante o commit:'), err));