@andrebuzeli/git-mcp 15.8.4 → 15.8.5
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 +39 -125
- package/package.json +27 -44
- package/src/index.js +146 -139
- package/src/providers/providerManager.js +203 -217
- package/src/tools/git-diff.js +137 -126
- package/src/tools/git-help.js +285 -285
- package/src/tools/git-remote.js +472 -472
- package/src/tools/git-workflow.js +403 -403
- package/src/utils/env.js +104 -104
- package/src/utils/errors.js +431 -431
- package/src/utils/gitAdapter.js +932 -951
- package/src/utils/hooks.js +255 -255
- package/src/utils/metrics.js +198 -198
- package/src/utils/providerExec.js +58 -58
- package/src/utils/repoHelpers.js +160 -160
- package/src/utils/retry.js +123 -123
- package/install.sh +0 -68
package/src/utils/env.js
CHANGED
|
@@ -1,104 +1,104 @@
|
|
|
1
|
-
// Suporte a arquivo .env
|
|
2
|
-
import fs from "node:fs";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Carrega variáveis de ambiente de um arquivo .env
|
|
7
|
-
* @param {string} envPath - Caminho para o arquivo .env (opcional)
|
|
8
|
-
*/
|
|
9
|
-
export function loadEnv(envPath = null) {
|
|
10
|
-
// Tenta encontrar .env no diretório do projeto ou no cwd
|
|
11
|
-
const possiblePaths = [
|
|
12
|
-
envPath,
|
|
13
|
-
path.join(process.cwd(), ".env"),
|
|
14
|
-
path.join(process.cwd(), ".env.local"),
|
|
15
|
-
// Para quando executado como pacote npm
|
|
16
|
-
path.resolve(import.meta.url.replace("file:///", "").replace(/\/[^/]+$/, ""), "../../.env")
|
|
17
|
-
].filter(Boolean);
|
|
18
|
-
|
|
19
|
-
for (const p of possiblePaths) {
|
|
20
|
-
try {
|
|
21
|
-
const normalizedPath = p.replace(/\\/g, "/").replace("file:///", "");
|
|
22
|
-
if (fs.existsSync(normalizedPath)) {
|
|
23
|
-
const content = fs.readFileSync(normalizedPath, "utf8");
|
|
24
|
-
parseEnvFile(content);
|
|
25
|
-
console.error(`[git-mcp] Loaded .env from: ${normalizedPath}`);
|
|
26
|
-
return true;
|
|
27
|
-
}
|
|
28
|
-
} catch (e) {
|
|
29
|
-
// Ignora erros de leitura
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
return false;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Parse do conteúdo de um arquivo .env
|
|
38
|
-
* @param {string} content - Conteúdo do arquivo
|
|
39
|
-
*/
|
|
40
|
-
function parseEnvFile(content) {
|
|
41
|
-
const lines = content.split("\n");
|
|
42
|
-
|
|
43
|
-
for (const line of lines) {
|
|
44
|
-
// Ignora linhas vazias e comentários
|
|
45
|
-
const trimmed = line.trim();
|
|
46
|
-
if (!trimmed || trimmed.startsWith("#")) continue;
|
|
47
|
-
|
|
48
|
-
// Parse KEY=VALUE
|
|
49
|
-
const match = trimmed.match(/^([^=]+)=(.*)$/);
|
|
50
|
-
if (match) {
|
|
51
|
-
const key = match[1].trim();
|
|
52
|
-
let value = match[2].trim();
|
|
53
|
-
|
|
54
|
-
// Remove aspas ao redor do valor
|
|
55
|
-
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
56
|
-
(value.startsWith("'") && value.endsWith("'"))) {
|
|
57
|
-
value = value.slice(1, -1);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Só define se não existir (variáveis de ambiente têm precedência)
|
|
61
|
-
if (!(key in process.env)) {
|
|
62
|
-
process.env[key] = value;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Retorna uma variável de ambiente com valor padrão opcional
|
|
70
|
-
* @param {string} key - Nome da variável
|
|
71
|
-
* @param {string} defaultValue - Valor padrão se não existir
|
|
72
|
-
*/
|
|
73
|
-
export function getEnvVar(key, defaultValue = "") {
|
|
74
|
-
return process.env[key] || defaultValue;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Verifica se todas as variáveis obrigatórias estão definidas
|
|
79
|
-
* @param {string[]} requiredVars - Lista de variáveis obrigatórias
|
|
80
|
-
* @returns {{ valid: boolean, missing: string[] }}
|
|
81
|
-
*/
|
|
82
|
-
export function validateEnv(requiredVars) {
|
|
83
|
-
const missing = requiredVars.filter(v => !process.env[v]);
|
|
84
|
-
return {
|
|
85
|
-
valid: missing.length === 0,
|
|
86
|
-
missing
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Configuração padrão do git-mcp
|
|
92
|
-
*/
|
|
93
|
-
export const ENV_CONFIG = {
|
|
94
|
-
// Providers
|
|
95
|
-
GITHUB_TOKEN: "Token de autenticação do GitHub",
|
|
96
|
-
GITEA_URL: "URL do servidor Gitea",
|
|
97
|
-
GITEA_TOKEN: "Token de autenticação do Gitea",
|
|
98
|
-
|
|
99
|
-
// Performance
|
|
100
|
-
GIT_TIMEOUT_MS: "Timeout para operações Git em ms (default: 60000)",
|
|
101
|
-
|
|
102
|
-
// Debug
|
|
103
|
-
DEBUG_AGENT_LOG: "Habilita logging de debug"
|
|
104
|
-
};
|
|
1
|
+
// Suporte a arquivo .env
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Carrega variáveis de ambiente de um arquivo .env
|
|
7
|
+
* @param {string} envPath - Caminho para o arquivo .env (opcional)
|
|
8
|
+
*/
|
|
9
|
+
export function loadEnv(envPath = null) {
|
|
10
|
+
// Tenta encontrar .env no diretório do projeto ou no cwd
|
|
11
|
+
const possiblePaths = [
|
|
12
|
+
envPath,
|
|
13
|
+
path.join(process.cwd(), ".env"),
|
|
14
|
+
path.join(process.cwd(), ".env.local"),
|
|
15
|
+
// Para quando executado como pacote npm
|
|
16
|
+
path.resolve(import.meta.url.replace("file:///", "").replace(/\/[^/]+$/, ""), "../../.env")
|
|
17
|
+
].filter(Boolean);
|
|
18
|
+
|
|
19
|
+
for (const p of possiblePaths) {
|
|
20
|
+
try {
|
|
21
|
+
const normalizedPath = p.replace(/\\/g, "/").replace("file:///", "");
|
|
22
|
+
if (fs.existsSync(normalizedPath)) {
|
|
23
|
+
const content = fs.readFileSync(normalizedPath, "utf8");
|
|
24
|
+
parseEnvFile(content);
|
|
25
|
+
console.error(`[git-mcp] Loaded .env from: ${normalizedPath}`);
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
} catch (e) {
|
|
29
|
+
// Ignora erros de leitura
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Parse do conteúdo de um arquivo .env
|
|
38
|
+
* @param {string} content - Conteúdo do arquivo
|
|
39
|
+
*/
|
|
40
|
+
function parseEnvFile(content) {
|
|
41
|
+
const lines = content.split("\n");
|
|
42
|
+
|
|
43
|
+
for (const line of lines) {
|
|
44
|
+
// Ignora linhas vazias e comentários
|
|
45
|
+
const trimmed = line.trim();
|
|
46
|
+
if (!trimmed || trimmed.startsWith("#")) continue;
|
|
47
|
+
|
|
48
|
+
// Parse KEY=VALUE
|
|
49
|
+
const match = trimmed.match(/^([^=]+)=(.*)$/);
|
|
50
|
+
if (match) {
|
|
51
|
+
const key = match[1].trim();
|
|
52
|
+
let value = match[2].trim();
|
|
53
|
+
|
|
54
|
+
// Remove aspas ao redor do valor
|
|
55
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
56
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
57
|
+
value = value.slice(1, -1);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Só define se não existir (variáveis de ambiente têm precedência)
|
|
61
|
+
if (!(key in process.env)) {
|
|
62
|
+
process.env[key] = value;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Retorna uma variável de ambiente com valor padrão opcional
|
|
70
|
+
* @param {string} key - Nome da variável
|
|
71
|
+
* @param {string} defaultValue - Valor padrão se não existir
|
|
72
|
+
*/
|
|
73
|
+
export function getEnvVar(key, defaultValue = "") {
|
|
74
|
+
return process.env[key] || defaultValue;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Verifica se todas as variáveis obrigatórias estão definidas
|
|
79
|
+
* @param {string[]} requiredVars - Lista de variáveis obrigatórias
|
|
80
|
+
* @returns {{ valid: boolean, missing: string[] }}
|
|
81
|
+
*/
|
|
82
|
+
export function validateEnv(requiredVars) {
|
|
83
|
+
const missing = requiredVars.filter(v => !process.env[v]);
|
|
84
|
+
return {
|
|
85
|
+
valid: missing.length === 0,
|
|
86
|
+
missing
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Configuração padrão do git-mcp
|
|
92
|
+
*/
|
|
93
|
+
export const ENV_CONFIG = {
|
|
94
|
+
// Providers
|
|
95
|
+
GITHUB_TOKEN: "Token de autenticação do GitHub",
|
|
96
|
+
GITEA_URL: "URL do servidor Gitea",
|
|
97
|
+
GITEA_TOKEN: "Token de autenticação do Gitea",
|
|
98
|
+
|
|
99
|
+
// Performance
|
|
100
|
+
GIT_TIMEOUT_MS: "Timeout para operações Git em ms (default: 60000)",
|
|
101
|
+
|
|
102
|
+
// Debug
|
|
103
|
+
DEBUG_AGENT_LOG: "Habilita logging de debug"
|
|
104
|
+
};
|