@andrebuzeli/git-mcp 2.28.2 → 2.29.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/dist/providers/error-handler.d.ts +24 -0
- package/dist/providers/error-handler.d.ts.map +1 -1
- package/dist/providers/error-handler.js +59 -0
- package/dist/providers/error-handler.js.map +1 -1
- package/dist/server.js +2 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/git-archive.d.ts +13 -9
- package/dist/tools/git-archive.d.ts.map +1 -1
- package/dist/tools/git-archive.js +34 -21
- package/dist/tools/git-archive.js.map +1 -1
- package/dist/tools/git-branches.d.ts +150 -146
- package/dist/tools/git-branches.d.ts.map +1 -1
- package/dist/tools/git-branches.js +184 -171
- package/dist/tools/git-branches.js.map +1 -1
- package/dist/tools/git-commits.d.ts +161 -157
- package/dist/tools/git-commits.d.ts.map +1 -1
- package/dist/tools/git-commits.js +200 -187
- package/dist/tools/git-commits.js.map +1 -1
- package/dist/tools/git-config.d.ts +18 -14
- package/dist/tools/git-config.d.ts.map +1 -1
- package/dist/tools/git-config.js +57 -44
- package/dist/tools/git-config.js.map +1 -1
- package/dist/tools/git-files.d.ts +204 -200
- package/dist/tools/git-files.d.ts.map +1 -1
- package/dist/tools/git-files.js +233 -220
- package/dist/tools/git-files.js.map +1 -1
- package/dist/tools/git-initialize.d.ts +46 -42
- package/dist/tools/git-initialize.d.ts.map +1 -1
- package/dist/tools/git-initialize.js +81 -68
- package/dist/tools/git-initialize.js.map +1 -1
- package/dist/tools/git-issues.d.ts +193 -189
- package/dist/tools/git-issues.d.ts.map +1 -1
- package/dist/tools/git-issues.js +238 -225
- package/dist/tools/git-issues.js.map +1 -1
- package/dist/tools/git-pulls.d.ts +212 -208
- package/dist/tools/git-pulls.d.ts.map +1 -1
- package/dist/tools/git-pulls.js +238 -225
- package/dist/tools/git-pulls.js.map +1 -1
- package/dist/tools/git-releases.d.ts +160 -156
- package/dist/tools/git-releases.d.ts.map +1 -1
- package/dist/tools/git-releases.js +183 -170
- package/dist/tools/git-releases.js.map +1 -1
- package/dist/tools/git-remote.d.ts +9 -5
- package/dist/tools/git-remote.d.ts.map +1 -1
- package/dist/tools/git-remote.js +26 -13
- package/dist/tools/git-remote.js.map +1 -1
- package/dist/tools/git-repositories.d.ts +179 -175
- package/dist/tools/git-repositories.d.ts.map +1 -1
- package/dist/tools/git-repositories.js +230 -217
- package/dist/tools/git-repositories.js.map +1 -1
- package/dist/tools/git-reset.d.ts +13 -9
- package/dist/tools/git-reset.d.ts.map +1 -1
- package/dist/tools/git-reset.js +27 -14
- package/dist/tools/git-reset.js.map +1 -1
- package/dist/tools/git-revert.d.ts +14 -10
- package/dist/tools/git-revert.d.ts.map +1 -1
- package/dist/tools/git-revert.js +30 -17
- package/dist/tools/git-revert.js.map +1 -1
- package/dist/tools/git-stash.d.ts +10 -6
- package/dist/tools/git-stash.d.ts.map +1 -1
- package/dist/tools/git-stash.js +23 -10
- package/dist/tools/git-stash.js.map +1 -1
- package/dist/tools/git-sync.d.ts +18 -14
- package/dist/tools/git-sync.d.ts.map +1 -1
- package/dist/tools/git-sync.js +46 -33
- package/dist/tools/git-sync.js.map +1 -1
- package/dist/tools/git-tags.d.ts +137 -133
- package/dist/tools/git-tags.d.ts.map +1 -1
- package/dist/tools/git-tags.js +164 -151
- package/dist/tools/git-tags.js.map +1 -1
- package/dist/tools/git-upload-project.d.ts +5 -1
- package/dist/tools/git-upload-project.d.ts.map +1 -1
- package/dist/tools/git-upload-project.js +21 -1
- package/dist/tools/git-upload-project.js.map +1 -1
- package/dist/tools/git-webhooks.d.ts +147 -143
- package/dist/tools/git-webhooks.d.ts.map +1 -1
- package/dist/tools/git-webhooks.js +174 -157
- package/dist/tools/git-webhooks.js.map +1 -1
- package/dist/utils/git-error-analyzer.d.ts +64 -0
- package/dist/utils/git-error-analyzer.d.ts.map +1 -0
- package/dist/utils/git-error-analyzer.js +286 -0
- package/dist/utils/git-error-analyzer.js.map +1 -0
- package/package.json +2 -2
|
@@ -8,116 +8,116 @@ const terminal_controller_js_1 = require("../utils/terminal-controller.js");
|
|
|
8
8
|
/**
|
|
9
9
|
* Tool: git-repositories
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
* Gerenciamento completo de
|
|
13
|
-
* Esta tool
|
|
11
|
+
* DESCRIÇÃO COMPLETA:
|
|
12
|
+
* Gerenciamento completo de repositórios Git com suporte multi-provider (GitHub e Gitea).
|
|
13
|
+
* Esta tool é 100% auto-suficiente e implementa TODAS as operações de repositório sem depender
|
|
14
14
|
* de outras tools ou comandos externos.
|
|
15
15
|
*
|
|
16
16
|
* FUNCIONALIDADES IMPLEMENTADAS:
|
|
17
17
|
*
|
|
18
|
-
* 1.
|
|
19
|
-
* - create: Cria novos
|
|
20
|
-
* - init: Inicializa
|
|
21
|
-
* - clone: Clona
|
|
22
|
-
* - update: Atualiza
|
|
18
|
+
* 1. CRIAÇÃO E CONFIGURAÇÃO:
|
|
19
|
+
* - create: Cria novos repositórios com configurações completas
|
|
20
|
+
* - init: Inicializa repositórios Git locais
|
|
21
|
+
* - clone: Clona repositórios remotos localmente
|
|
22
|
+
* - update: Atualiza configurações de repositórios existentes
|
|
23
23
|
*
|
|
24
24
|
* 2. LISTAGEM E BUSCA:
|
|
25
|
-
* - list: Lista
|
|
26
|
-
* - get:
|
|
27
|
-
* - search: Busca
|
|
25
|
+
* - list: Lista repositórios do usuário ou organização
|
|
26
|
+
* - get: Obtém detalhes especÃficos de um repositório
|
|
27
|
+
* - search: Busca repositórios por critérios especÃficos
|
|
28
28
|
*
|
|
29
|
-
* 3.
|
|
30
|
-
* - fork: Cria fork de
|
|
31
|
-
* - delete: Remove
|
|
32
|
-
* - archive: Arquivamento de
|
|
33
|
-
* - transfer:
|
|
29
|
+
* 3. OPERAÇÕES AVANÇADAS:
|
|
30
|
+
* - fork: Cria fork de repositórios existentes
|
|
31
|
+
* - delete: Remove repositórios permanentemente
|
|
32
|
+
* - archive: Arquivamento de repositórios
|
|
33
|
+
* - transfer: Transferência de propriedade
|
|
34
34
|
*
|
|
35
|
-
* 4.
|
|
36
|
-
* - Visibilidade (
|
|
37
|
-
* -
|
|
38
|
-
* -
|
|
39
|
-
* - Templates e
|
|
40
|
-
* -
|
|
35
|
+
* 4. CONFIGURAÇÕES E METADADOS:
|
|
36
|
+
* - Visibilidade (público/privado)
|
|
37
|
+
* - Descrições e documentação
|
|
38
|
+
* - Configurações de branch padrão
|
|
39
|
+
* - Templates e inicialização automática
|
|
40
|
+
* - Licenças e arquivos de configuração
|
|
41
41
|
*
|
|
42
|
-
*
|
|
43
|
-
* - action:
|
|
42
|
+
* PARÂMETROS OBRIGATÓRIOS:
|
|
43
|
+
* - action: Ação a executar (create, list, get, update, delete, fork, search, init, clone)
|
|
44
44
|
* - provider: Provedor a usar (gitea ou github)
|
|
45
|
-
* - owner:
|
|
46
|
-
* - repo: Nome do
|
|
47
|
-
* - projectPath: Caminho do projeto local (
|
|
45
|
+
* - owner: Proprietário do repositório (obrigatório para operações remotas)
|
|
46
|
+
* - repo: Nome do repositório (obrigatório para operações remotas)
|
|
47
|
+
* - projectPath: Caminho do projeto local (obrigatório para operações locais)
|
|
48
48
|
*
|
|
49
|
-
*
|
|
50
|
-
* - name: Nome do
|
|
51
|
-
* - description:
|
|
52
|
-
* - private: Visibilidade do
|
|
53
|
-
* - auto_init:
|
|
49
|
+
* PARÂMETROS OPCIONAIS:
|
|
50
|
+
* - name: Nome do repositório para criação
|
|
51
|
+
* - description: Descrição do repositório
|
|
52
|
+
* - private: Visibilidade do repositório
|
|
53
|
+
* - auto_init: Inicialização automática com README
|
|
54
54
|
* - gitignores: Template de .gitignore
|
|
55
|
-
* - license: Template de
|
|
56
|
-
* - readme:
|
|
57
|
-
* - default_branch: Branch
|
|
58
|
-
* - username:
|
|
59
|
-
* - page:
|
|
55
|
+
* - license: Template de licença
|
|
56
|
+
* - readme: Conteúdo do README
|
|
57
|
+
* - default_branch: Branch padrão
|
|
58
|
+
* - username: Usuário para listagem
|
|
59
|
+
* - page: Página para paginação
|
|
60
60
|
* - limit: Limite de resultados
|
|
61
|
-
* - new_name: Novo nome para
|
|
62
|
-
* - new_description: Nova
|
|
61
|
+
* - new_name: Novo nome para atualização
|
|
62
|
+
* - new_description: Nova descrição
|
|
63
63
|
* - new_private: Nova visibilidade
|
|
64
64
|
* - archived: Status de arquivamento
|
|
65
|
-
* - organization:
|
|
65
|
+
* - organization: Organização para fork
|
|
66
66
|
* - query: Termo de busca
|
|
67
67
|
*
|
|
68
68
|
* CASOS DE USO:
|
|
69
|
-
* 1.
|
|
70
|
-
* 2. Backup e
|
|
71
|
-
* 3.
|
|
72
|
-
* 4.
|
|
73
|
-
* 5. Gerenciamento de
|
|
74
|
-
* 6.
|
|
75
|
-
* 7.
|
|
69
|
+
* 1. Criação de repositórios para novos projetos
|
|
70
|
+
* 2. Backup e migração de código
|
|
71
|
+
* 3. Organização de projetos em equipe
|
|
72
|
+
* 4. Automação de workflows de desenvolvimento
|
|
73
|
+
* 5. Gerenciamento de repositórios em massa
|
|
74
|
+
* 6. Configuração de templates de projeto
|
|
75
|
+
* 7. Sincronização entre diferentes provedores
|
|
76
76
|
*
|
|
77
77
|
* EXEMPLOS DE USO:
|
|
78
|
-
* - Criar
|
|
79
|
-
* - Listar
|
|
80
|
-
* - Buscar
|
|
81
|
-
* - Clonar
|
|
78
|
+
* - Criar repositório: action=create, name=meu-projeto, description=Projeto incrÃvel
|
|
79
|
+
* - Listar repositórios: action=list, username=usuario
|
|
80
|
+
* - Buscar repositórios: action=search, query=react typescript
|
|
81
|
+
* - Clonar repositório: action=clone, url=https://github.com/user/repo.git
|
|
82
82
|
* - Inicializar local: action=init, projectPath=/path/to/project
|
|
83
83
|
*
|
|
84
|
-
*
|
|
84
|
+
* RECOMENDAÇÕES:
|
|
85
85
|
* - Use nomes descritivos e consistentes
|
|
86
86
|
* - Configure visibilidade adequada para cada projeto
|
|
87
|
-
* - Mantenha
|
|
88
|
-
* - Use templates para
|
|
89
|
-
* - Configure branches
|
|
90
|
-
* - Documente
|
|
91
|
-
* - Use
|
|
87
|
+
* - Mantenha descrições atualizadas e informativas
|
|
88
|
+
* - Use templates para padronização
|
|
89
|
+
* - Configure branches padrão apropriadas
|
|
90
|
+
* - Documente configurações importantes
|
|
91
|
+
* - Use licenças adequadas para cada projeto
|
|
92
92
|
*
|
|
93
|
-
*
|
|
94
|
-
* -
|
|
95
|
-
* -
|
|
96
|
-
* - Alguns provedores podem ter
|
|
93
|
+
* LIMITAÇÕES:
|
|
94
|
+
* - Operações de arquivamento dependem do provedor
|
|
95
|
+
* - Transferência de propriedade requer permissões especiais
|
|
96
|
+
* - Alguns provedores podem ter limitações de API
|
|
97
97
|
*
|
|
98
|
-
*
|
|
99
|
-
* - Tokens de acesso
|
|
100
|
-
* -
|
|
101
|
-
* - Logs detalhados de todas as
|
|
102
|
-
* - Tratamento seguro de
|
|
98
|
+
* SEGURANÇA:
|
|
99
|
+
* - Tokens de acesso são obrigatórios para operações remotas
|
|
100
|
+
* - Validação de permissões antes de operações destrutivas
|
|
101
|
+
* - Logs detalhados de todas as operações
|
|
102
|
+
* - Tratamento seguro de informações sensÃveis
|
|
103
103
|
*/
|
|
104
104
|
/**
|
|
105
|
-
* Schema de
|
|
105
|
+
* Schema de validação para entrada da tool git-repositories
|
|
106
106
|
*
|
|
107
|
-
*
|
|
108
|
-
* - action:
|
|
109
|
-
* - provider:
|
|
110
|
-
* -
|
|
111
|
-
* -
|
|
107
|
+
* VALIDAÇÕES:
|
|
108
|
+
* - action: Ação obrigatória (create, list, get, update, delete, fork, search, init, clone)
|
|
109
|
+
* - provider: Obrigatório (gitea ou github)
|
|
110
|
+
* - Parâmetros especÃficos por ação
|
|
111
|
+
* - Validação de tipos e formatos
|
|
112
112
|
*
|
|
113
|
-
*
|
|
113
|
+
* RECOMENDAÇÕES:
|
|
114
114
|
* - Sempre valide entrada antes de usar
|
|
115
|
-
* - Use
|
|
116
|
-
* - Documente
|
|
115
|
+
* - Use parâmetros opcionais adequadamente
|
|
116
|
+
* - Documente parâmetros obrigatórios
|
|
117
117
|
*/
|
|
118
118
|
const GitRepositoriesInputSchema = zod_1.z.object({
|
|
119
119
|
action: zod_1.z.enum(['create', 'list', 'get', 'update', 'delete', 'fork', 'search', 'init', 'clone']),
|
|
120
|
-
//
|
|
120
|
+
// Parâmetros comuns
|
|
121
121
|
repo: zod_1.z.string().optional(),
|
|
122
122
|
provider: zod_1.z.enum(['gitea', 'github']).describe('Provider to use (gitea or github)'),
|
|
123
123
|
projectPath: zod_1.z.string().describe('Local project path for git operations'),
|
|
@@ -143,7 +143,7 @@ const GitRepositoriesInputSchema = zod_1.z.object({
|
|
|
143
143
|
// Para search
|
|
144
144
|
query: zod_1.z.string().optional(),
|
|
145
145
|
});
|
|
146
|
-
// Schema de
|
|
146
|
+
// Schema de saÃda
|
|
147
147
|
const GitRepositoriesResultSchema = zod_1.z.object({
|
|
148
148
|
success: zod_1.z.boolean(),
|
|
149
149
|
action: zod_1.z.string(),
|
|
@@ -154,81 +154,81 @@ const GitRepositoriesResultSchema = zod_1.z.object({
|
|
|
154
154
|
/**
|
|
155
155
|
* Tool: git-repositories
|
|
156
156
|
*
|
|
157
|
-
*
|
|
158
|
-
* Gerenciamento completo de
|
|
157
|
+
* DESCRIÇÃO:
|
|
158
|
+
* Gerenciamento completo de repositórios Git (GitHub + Gitea) com múltiplas ações
|
|
159
159
|
*
|
|
160
|
-
* ACTIONS
|
|
160
|
+
* ACTIONS DISPONÃVEIS:
|
|
161
161
|
*
|
|
162
|
-
* 1. create - Criar novo
|
|
163
|
-
*
|
|
164
|
-
* - name (
|
|
165
|
-
* - description (opcional):
|
|
166
|
-
* - private (opcional):
|
|
167
|
-
* - auto_init (opcional): Inicializar com README (
|
|
162
|
+
* 1. create - Criar novo repositório
|
|
163
|
+
* Parâmetros:
|
|
164
|
+
* - name (obrigatório): Nome do repositório
|
|
165
|
+
* - description (opcional): Descrição do repositório
|
|
166
|
+
* - private (opcional): Repositório privado (padrão: false)
|
|
167
|
+
* - auto_init (opcional): Inicializar com README (padrão: false)
|
|
168
168
|
* - gitignores (opcional): Template de .gitignore
|
|
169
|
-
* - license (opcional): Template de
|
|
170
|
-
* - readme (opcional):
|
|
171
|
-
* - default_branch (opcional): Branch
|
|
169
|
+
* - license (opcional): Template de licença
|
|
170
|
+
* - readme (opcional): Conteúdo do README
|
|
171
|
+
* - default_branch (opcional): Branch padrão
|
|
172
172
|
*
|
|
173
|
-
* 2. list - Listar
|
|
174
|
-
*
|
|
175
|
-
* - username (opcional):
|
|
176
|
-
* - page (opcional):
|
|
177
|
-
* - limit (opcional): Itens por
|
|
173
|
+
* 2. list - Listar repositórios
|
|
174
|
+
* Parâmetros:
|
|
175
|
+
* - username (opcional): Usuário especÃfico (padrão: usuário atual)
|
|
176
|
+
* - page (opcional): Página da listagem (padrão: 1)
|
|
177
|
+
* - limit (opcional): Itens por página (padrão: 30)
|
|
178
178
|
*
|
|
179
|
-
* 3. get - Obter detalhes do
|
|
180
|
-
*
|
|
181
|
-
* - owner (
|
|
182
|
-
* - repo (
|
|
179
|
+
* 3. get - Obter detalhes do repositório
|
|
180
|
+
* Parâmetros:
|
|
181
|
+
* - owner (obrigatório): Proprietário do repositório
|
|
182
|
+
* - repo (obrigatório): Nome do repositório
|
|
183
183
|
*
|
|
184
|
-
* 4. update - Atualizar
|
|
185
|
-
*
|
|
186
|
-
* - owner (
|
|
187
|
-
* - repo (
|
|
184
|
+
* 4. update - Atualizar repositório
|
|
185
|
+
* Parâmetros:
|
|
186
|
+
* - owner (obrigatório): Proprietário do repositório
|
|
187
|
+
* - repo (obrigatório): Nome do repositório
|
|
188
188
|
* - new_name (opcional): Novo nome
|
|
189
|
-
* - new_description (opcional): Nova
|
|
189
|
+
* - new_description (opcional): Nova descrição
|
|
190
190
|
* - new_private (opcional): Nova visibilidade
|
|
191
191
|
* - archived (opcional): Status de arquivamento
|
|
192
192
|
*
|
|
193
|
-
* 5. delete - Deletar
|
|
194
|
-
*
|
|
195
|
-
* - owner (
|
|
196
|
-
* - repo (
|
|
193
|
+
* 5. delete - Deletar repositório
|
|
194
|
+
* Parâmetros:
|
|
195
|
+
* - owner (obrigatório): Proprietário do repositório
|
|
196
|
+
* - repo (obrigatório): Nome do repositório
|
|
197
197
|
*
|
|
198
|
-
* 6. fork - Fazer fork do
|
|
199
|
-
*
|
|
200
|
-
* - owner (
|
|
201
|
-
* - repo (
|
|
202
|
-
* - organization (opcional):
|
|
198
|
+
* 6. fork - Fazer fork do repositório
|
|
199
|
+
* Parâmetros:
|
|
200
|
+
* - owner (obrigatório): Proprietário do repositório original
|
|
201
|
+
* - repo (obrigatório): Nome do repositório original
|
|
202
|
+
* - organization (opcional): Organização de destino
|
|
203
203
|
*
|
|
204
|
-
* 7. search - Buscar
|
|
205
|
-
*
|
|
206
|
-
* - query (
|
|
207
|
-
* - page (opcional):
|
|
208
|
-
* - limit (opcional): Itens por
|
|
204
|
+
* 7. search - Buscar repositórios
|
|
205
|
+
* Parâmetros:
|
|
206
|
+
* - query (obrigatório): Termo de busca
|
|
207
|
+
* - page (opcional): Página da busca (padrão: 1)
|
|
208
|
+
* - limit (opcional): Itens por página (padrão: 30)
|
|
209
209
|
*
|
|
210
|
-
* 8. init - Inicializar
|
|
211
|
-
*
|
|
212
|
-
* - projectPath (
|
|
210
|
+
* 8. init - Inicializar repositório Git local
|
|
211
|
+
* Parâmetros:
|
|
212
|
+
* - projectPath (obrigatório): Caminho do projeto local
|
|
213
213
|
* - owner/repo (opcional): Para configurar remote
|
|
214
214
|
*
|
|
215
|
-
* 9. clone - Clonar
|
|
216
|
-
*
|
|
217
|
-
* - owner (
|
|
218
|
-
* - repo (
|
|
219
|
-
* - projectPath (
|
|
215
|
+
* 9. clone - Clonar repositório para local
|
|
216
|
+
* Parâmetros:
|
|
217
|
+
* - owner (obrigatório): Proprietário do repositório
|
|
218
|
+
* - repo (obrigatório): Nome do repositório
|
|
219
|
+
* - projectPath (obrigatório): Caminho local de destino
|
|
220
220
|
*
|
|
221
|
-
*
|
|
222
|
-
* - Use nomes descritivos para
|
|
221
|
+
* RECOMENDAÇÕES DE USO:
|
|
222
|
+
* - Use nomes descritivos para repositórios
|
|
223
223
|
* - Configure visibilidade adequada para o projeto
|
|
224
|
-
* - Mantenha
|
|
224
|
+
* - Mantenha descrições atualizadas
|
|
225
225
|
* - Use templates para projetos similares
|
|
226
|
-
* - Configure branch
|
|
227
|
-
* - Use
|
|
226
|
+
* - Configure branch padrão adequada
|
|
227
|
+
* - Use paginação para listas grandes
|
|
228
228
|
*/
|
|
229
229
|
exports.gitRepositoriesTool = {
|
|
230
230
|
name: 'git-repositories',
|
|
231
|
-
description: 'tool: Gerencia
|
|
231
|
+
description: 'tool: Gerencia repositórios Git completos, criação, configuração, busca e operações avançadas\n──────────────\naction create: cria repositório novo\naction create requires: name, description, private, auto_init, gitignores, license, readme, default_branch, provider\n───────────────\naction list: lista repositórios do usuário\naction list requires: page, limit, username, provider\n───────────────\naction get: obtém detalhes especÃficos\naction get requires: repo, provider\n───────────────\naction update: atualiza configurações\naction update requires: repo, new_name, new_description, new_private, archived, provider\n───────────────\naction delete: remove repositório\naction delete requires: repo, provider\n───────────────\naction fork: cria fork\naction fork requires: repo, organization, provider\n───────────────\naction search: busca repositórios\naction search requires: query, provider\n───────────────\naction init: inicializa repositório local\naction init requires: projectPath, provider\n───────────────\naction clone: clona repositório\naction clone requires: repo, projectPath, provider',
|
|
232
232
|
inputSchema: {
|
|
233
233
|
type: 'object',
|
|
234
234
|
properties: {
|
|
@@ -265,37 +265,37 @@ exports.gitRepositoriesTool = {
|
|
|
265
265
|
*
|
|
266
266
|
* FUNCIONALIDADE:
|
|
267
267
|
* - Valida entrada usando Zod schema
|
|
268
|
-
* - Roteia para
|
|
268
|
+
* - Roteia para método especÃfico baseado na ação
|
|
269
269
|
* - Trata erros de forma uniforme
|
|
270
270
|
* - Retorna resultado padronizado
|
|
271
271
|
*
|
|
272
272
|
* FLUXO:
|
|
273
|
-
* 1.
|
|
274
|
-
* 2. Roteamento por
|
|
275
|
-
* 3.
|
|
273
|
+
* 1. Validação de entrada
|
|
274
|
+
* 2. Roteamento por ação
|
|
275
|
+
* 3. Execução do método especÃfico
|
|
276
276
|
* 4. Tratamento de erros
|
|
277
277
|
* 5. Retorno de resultado
|
|
278
278
|
*
|
|
279
279
|
* TRATAMENTO DE ERROS:
|
|
280
|
-
* -
|
|
281
|
-
* -
|
|
282
|
-
* - Roteamento:
|
|
280
|
+
* - Validação: erro de schema
|
|
281
|
+
* - Execução: erro da operação
|
|
282
|
+
* - Roteamento: ação não suportada
|
|
283
283
|
*
|
|
284
|
-
*
|
|
284
|
+
* RECOMENDAÇÕES:
|
|
285
285
|
* - Sempre valide entrada antes de processar
|
|
286
|
-
* - Trate erros
|
|
286
|
+
* - Trate erros especÃficos adequadamente
|
|
287
287
|
* - Log detalhes de erro para debug
|
|
288
|
-
* - Retorne mensagens de erro
|
|
288
|
+
* - Retorne mensagens de erro úteis
|
|
289
289
|
*/
|
|
290
290
|
async handler(input) {
|
|
291
291
|
try {
|
|
292
292
|
const validatedInput = GitRepositoriesInputSchema.parse(input);
|
|
293
|
-
// Aplicar auto-
|
|
293
|
+
// Aplicar auto-detecção apenas para owner/username dentro do provider especificado
|
|
294
294
|
const processedInput = await (0, user_detection_js_1.applyAutoUserDetection)(validatedInput, validatedInput.provider);
|
|
295
|
-
// Usar o provider especificado pelo
|
|
295
|
+
// Usar o provider especificado pelo usuário
|
|
296
296
|
const provider = index_js_1.globalProviderFactory.getProvider(processedInput.provider);
|
|
297
297
|
if (!provider) {
|
|
298
|
-
throw new Error(`Provider '${processedInput.provider}'
|
|
298
|
+
throw new Error(`Provider '${processedInput.provider}' não encontrado`);
|
|
299
299
|
}
|
|
300
300
|
switch (processedInput.action) {
|
|
301
301
|
case 'create':
|
|
@@ -317,65 +317,65 @@ exports.gitRepositoriesTool = {
|
|
|
317
317
|
case 'clone':
|
|
318
318
|
return await this.cloneRepository(processedInput, provider);
|
|
319
319
|
default:
|
|
320
|
-
throw new Error(`
|
|
320
|
+
throw new Error(`Ação não suportada: ${processedInput.action}`);
|
|
321
321
|
}
|
|
322
322
|
}
|
|
323
323
|
catch (error) {
|
|
324
324
|
return {
|
|
325
325
|
success: false,
|
|
326
326
|
action: input.action,
|
|
327
|
-
message: 'Erro na
|
|
327
|
+
message: 'Erro na operação de repositórios',
|
|
328
328
|
error: error instanceof Error ? error.message : String(error)
|
|
329
329
|
};
|
|
330
330
|
}
|
|
331
331
|
},
|
|
332
332
|
/**
|
|
333
|
-
* Cria um novo
|
|
333
|
+
* Cria um novo repositório
|
|
334
334
|
*
|
|
335
335
|
* FUNCIONALIDADE:
|
|
336
|
-
* - Valida
|
|
337
|
-
* - Configura dados
|
|
338
|
-
* - Chama API do provider para
|
|
336
|
+
* - Valida parâmetros obrigatórios
|
|
337
|
+
* - Configura dados padrão
|
|
338
|
+
* - Chama API do provider para criação
|
|
339
339
|
* - Retorna resultado formatado
|
|
340
340
|
*
|
|
341
|
-
*
|
|
342
|
-
* - name: Nome do
|
|
341
|
+
* PARÂMETROS OBRIGATÓRIOS:
|
|
342
|
+
* - name: Nome do repositório
|
|
343
343
|
*
|
|
344
|
-
*
|
|
345
|
-
* - description:
|
|
346
|
-
* - private: Visibilidade (
|
|
347
|
-
* - auto_init: Inicializar com README (
|
|
344
|
+
* PARÂMETROS OPCIONAIS:
|
|
345
|
+
* - description: Descrição do repositório
|
|
346
|
+
* - private: Visibilidade (padrão: false)
|
|
347
|
+
* - auto_init: Inicializar com README (padrão: false)
|
|
348
348
|
* - gitignores: Template de .gitignore
|
|
349
|
-
* - license: Template de
|
|
350
|
-
* - readme:
|
|
351
|
-
* - default_branch: Branch
|
|
349
|
+
* - license: Template de licença
|
|
350
|
+
* - readme: Conteúdo do README
|
|
351
|
+
* - default_branch: Branch padrão (padrão: main)
|
|
352
352
|
*
|
|
353
|
-
*
|
|
354
|
-
* - Nome
|
|
355
|
-
* - Nome
|
|
356
|
-
* -
|
|
353
|
+
* VALIDAÇÕES:
|
|
354
|
+
* - Nome obrigatório
|
|
355
|
+
* - Nome único no usuário/organização
|
|
356
|
+
* - Permissões adequadas
|
|
357
357
|
*
|
|
358
|
-
*
|
|
359
|
-
* - Use nomes descritivos e
|
|
358
|
+
* RECOMENDAÇÕES:
|
|
359
|
+
* - Use nomes descritivos e únicos
|
|
360
360
|
* - Configure visibilidade adequada
|
|
361
361
|
* - Inicialize com README para projetos novos
|
|
362
|
-
* - Use templates para
|
|
362
|
+
* - Use templates para consistência
|
|
363
363
|
*/
|
|
364
364
|
async createRepository(params, provider) {
|
|
365
365
|
try {
|
|
366
366
|
if (!params.name) {
|
|
367
|
-
throw new Error('Nome do
|
|
367
|
+
throw new Error('Nome do repositório é obrigatório');
|
|
368
368
|
}
|
|
369
369
|
const repository = await provider.createRepository(params.name, params.description, params.private || false);
|
|
370
370
|
return {
|
|
371
371
|
success: true,
|
|
372
372
|
action: 'create',
|
|
373
|
-
message: `
|
|
373
|
+
message: `Repositório '${params.name}' criado com sucesso`,
|
|
374
374
|
data: repository
|
|
375
375
|
};
|
|
376
376
|
}
|
|
377
377
|
catch (error) {
|
|
378
|
-
throw new Error(`Falha ao criar
|
|
378
|
+
throw new Error(`Falha ao criar repositório: ${error instanceof Error ? error.message : String(error)}`);
|
|
379
379
|
}
|
|
380
380
|
},
|
|
381
381
|
async listRepositories(params, provider) {
|
|
@@ -386,7 +386,7 @@ exports.gitRepositoriesTool = {
|
|
|
386
386
|
return {
|
|
387
387
|
success: true,
|
|
388
388
|
action: 'list',
|
|
389
|
-
message: `${repositories.length}
|
|
389
|
+
message: `${repositories.length} repositórios encontrados`,
|
|
390
390
|
data: {
|
|
391
391
|
repositories,
|
|
392
392
|
page,
|
|
@@ -396,13 +396,13 @@ exports.gitRepositoriesTool = {
|
|
|
396
396
|
};
|
|
397
397
|
}
|
|
398
398
|
catch (error) {
|
|
399
|
-
throw new Error(`Falha ao listar
|
|
399
|
+
throw new Error(`Falha ao listar repositórios: ${error instanceof Error ? error.message : String(error)}`);
|
|
400
400
|
}
|
|
401
401
|
},
|
|
402
402
|
async getRepository(params, provider) {
|
|
403
403
|
try {
|
|
404
404
|
if (!params.repo) {
|
|
405
|
-
throw new Error('Nome do
|
|
405
|
+
throw new Error('Nome do repositório é obrigatório');
|
|
406
406
|
}
|
|
407
407
|
const currentUser = await provider.getCurrentUser();
|
|
408
408
|
const owner = currentUser.login;
|
|
@@ -410,18 +410,18 @@ exports.gitRepositoriesTool = {
|
|
|
410
410
|
return {
|
|
411
411
|
success: true,
|
|
412
412
|
action: 'get',
|
|
413
|
-
message: `
|
|
413
|
+
message: `Repositório '${owner}/${params.repo}' obtido com sucesso`,
|
|
414
414
|
data: repository
|
|
415
415
|
};
|
|
416
416
|
}
|
|
417
417
|
catch (error) {
|
|
418
|
-
throw new Error(`Falha ao obter
|
|
418
|
+
throw new Error(`Falha ao obter repositório: ${error instanceof Error ? error.message : String(error)}`);
|
|
419
419
|
}
|
|
420
420
|
},
|
|
421
421
|
async updateRepository(params, provider) {
|
|
422
422
|
try {
|
|
423
423
|
if (!params.repo) {
|
|
424
|
-
throw new Error('Nome do
|
|
424
|
+
throw new Error('Nome do repositório é obrigatório');
|
|
425
425
|
}
|
|
426
426
|
const currentUser = await provider.getCurrentUser();
|
|
427
427
|
const owner = currentUser.login;
|
|
@@ -441,18 +441,18 @@ exports.gitRepositoriesTool = {
|
|
|
441
441
|
return {
|
|
442
442
|
success: true,
|
|
443
443
|
action: 'update',
|
|
444
|
-
message: `
|
|
444
|
+
message: `Repositório '${owner}/${params.repo}' atualizado com sucesso`,
|
|
445
445
|
data: repository
|
|
446
446
|
};
|
|
447
447
|
}
|
|
448
448
|
catch (error) {
|
|
449
|
-
throw new Error(`Falha ao atualizar
|
|
449
|
+
throw new Error(`Falha ao atualizar repositório: ${error instanceof Error ? error.message : String(error)}`);
|
|
450
450
|
}
|
|
451
451
|
},
|
|
452
452
|
async deleteRepository(params, provider) {
|
|
453
453
|
try {
|
|
454
454
|
if (!params.repo) {
|
|
455
|
-
throw new Error('Nome do
|
|
455
|
+
throw new Error('Nome do repositório é obrigatório');
|
|
456
456
|
}
|
|
457
457
|
const currentUser = await provider.getCurrentUser();
|
|
458
458
|
const owner = currentUser.login;
|
|
@@ -460,18 +460,18 @@ exports.gitRepositoriesTool = {
|
|
|
460
460
|
return {
|
|
461
461
|
success: true,
|
|
462
462
|
action: 'delete',
|
|
463
|
-
message: `
|
|
463
|
+
message: `Repositório '${owner}/${params.repo}' deletado com sucesso`,
|
|
464
464
|
data: { deleted: true }
|
|
465
465
|
};
|
|
466
466
|
}
|
|
467
467
|
catch (error) {
|
|
468
|
-
throw new Error(`Falha ao deletar
|
|
468
|
+
throw new Error(`Falha ao deletar repositório: ${error instanceof Error ? error.message : String(error)}`);
|
|
469
469
|
}
|
|
470
470
|
},
|
|
471
471
|
async forkRepository(params, provider) {
|
|
472
472
|
try {
|
|
473
473
|
if (!params.repo) {
|
|
474
|
-
throw new Error('Nome do
|
|
474
|
+
throw new Error('Nome do repositório é obrigatório');
|
|
475
475
|
}
|
|
476
476
|
const currentUser = await provider.getCurrentUser();
|
|
477
477
|
const owner = currentUser.login;
|
|
@@ -479,18 +479,18 @@ exports.gitRepositoriesTool = {
|
|
|
479
479
|
return {
|
|
480
480
|
success: true,
|
|
481
481
|
action: 'fork',
|
|
482
|
-
message: `Fork do
|
|
482
|
+
message: `Fork do repositório '${owner}/${params.repo}' criado com sucesso`,
|
|
483
483
|
data: repository
|
|
484
484
|
};
|
|
485
485
|
}
|
|
486
486
|
catch (error) {
|
|
487
|
-
throw new Error(`Falha ao fazer fork do
|
|
487
|
+
throw new Error(`Falha ao fazer fork do repositório: ${error instanceof Error ? error.message : String(error)}`);
|
|
488
488
|
}
|
|
489
489
|
},
|
|
490
490
|
async searchRepositories(params, provider) {
|
|
491
491
|
try {
|
|
492
492
|
if (!params.query) {
|
|
493
|
-
throw new Error('Query de busca
|
|
493
|
+
throw new Error('Query de busca é obrigatória');
|
|
494
494
|
}
|
|
495
495
|
const page = params.page || 1;
|
|
496
496
|
const limit = params.limit || 30;
|
|
@@ -498,7 +498,7 @@ exports.gitRepositoriesTool = {
|
|
|
498
498
|
return {
|
|
499
499
|
success: true,
|
|
500
500
|
action: 'search',
|
|
501
|
-
message: `${repositories.length}
|
|
501
|
+
message: `${repositories.length} repositórios encontrados para '${params.query}'`,
|
|
502
502
|
data: {
|
|
503
503
|
repositories,
|
|
504
504
|
query: params.query,
|
|
@@ -509,48 +509,48 @@ exports.gitRepositoriesTool = {
|
|
|
509
509
|
};
|
|
510
510
|
}
|
|
511
511
|
catch (error) {
|
|
512
|
-
throw new Error(`Falha ao buscar
|
|
512
|
+
throw new Error(`Falha ao buscar repositórios: ${error instanceof Error ? error.message : String(error)}`);
|
|
513
513
|
}
|
|
514
514
|
},
|
|
515
515
|
/**
|
|
516
|
-
* Inicializa um
|
|
516
|
+
* Inicializa um repositório Git local
|
|
517
517
|
*
|
|
518
518
|
* FUNCIONALIDADE:
|
|
519
|
-
* - Executa 'git init' no
|
|
520
|
-
* - Cria estrutura
|
|
519
|
+
* - Executa 'git init' no diretório especificado
|
|
520
|
+
* - Cria estrutura básica do Git
|
|
521
521
|
* - Adiciona remote se especificado
|
|
522
522
|
*
|
|
523
|
-
*
|
|
523
|
+
* PARÂMETROS OBRIGATÓRIOS:
|
|
524
524
|
* - projectPath: Caminho do projeto local
|
|
525
525
|
*
|
|
526
|
-
*
|
|
526
|
+
* PARÂMETROS OPCIONAIS:
|
|
527
527
|
* - owner/repo: Para configurar remote
|
|
528
528
|
* - provider: Para determinar URL do remote
|
|
529
529
|
*
|
|
530
|
-
*
|
|
531
|
-
* - Verifique se
|
|
530
|
+
* RECOMENDAÇÕES:
|
|
531
|
+
* - Verifique se diretório existe
|
|
532
532
|
* - Use caminhos absolutos
|
|
533
|
-
* - Configure remote
|
|
533
|
+
* - Configure remote após inicialização
|
|
534
534
|
*/
|
|
535
535
|
async initRepository(params, provider) {
|
|
536
536
|
try {
|
|
537
537
|
if (!params.projectPath) {
|
|
538
|
-
throw new Error('projectPath
|
|
538
|
+
throw new Error('projectPath é obrigatório para inicialização do repositório');
|
|
539
539
|
}
|
|
540
|
-
// Executa git init no
|
|
540
|
+
// Executa git init no diretório especificado
|
|
541
541
|
const initResult = await (0, terminal_controller_js_1.runTerminalCmd)({
|
|
542
542
|
command: `git init "${params.projectPath}"`,
|
|
543
543
|
is_background: false,
|
|
544
|
-
explanation: 'Inicializando
|
|
544
|
+
explanation: 'Inicializando repositório Git local'
|
|
545
545
|
});
|
|
546
546
|
if (initResult.exitCode !== 0) {
|
|
547
|
-
throw new Error(`Falha ao inicializar
|
|
547
|
+
throw new Error(`Falha ao inicializar repositório: ${initResult.output}`);
|
|
548
548
|
}
|
|
549
549
|
// Se owner/repo foram especificados, configura remote
|
|
550
550
|
if (params.repo && provider) {
|
|
551
551
|
const currentUser = await provider.getCurrentUser();
|
|
552
552
|
const owner = currentUser.login;
|
|
553
|
-
//
|
|
553
|
+
// Obtém URL base do provider
|
|
554
554
|
const providerConfig = provider.getConfig ? provider.getConfig() : null;
|
|
555
555
|
const baseUrl = providerConfig?.apiUrl || (params.provider === 'gitea' ? 'http://nas-ubuntu:3000' : 'https://github.com');
|
|
556
556
|
const remoteUrl = params.provider === 'gitea'
|
|
@@ -562,13 +562,13 @@ exports.gitRepositoriesTool = {
|
|
|
562
562
|
explanation: 'Configurando remote origin'
|
|
563
563
|
});
|
|
564
564
|
if (remoteResult.exitCode !== 0) {
|
|
565
|
-
console.warn(`Aviso:
|
|
565
|
+
console.warn(`Aviso: Não foi possÃvel configurar remote: ${remoteResult.output}`);
|
|
566
566
|
}
|
|
567
567
|
}
|
|
568
568
|
return {
|
|
569
569
|
success: true,
|
|
570
570
|
action: 'init',
|
|
571
|
-
message: `
|
|
571
|
+
message: `Repositório Git inicializado com sucesso em '${params.projectPath}'`,
|
|
572
572
|
data: {
|
|
573
573
|
path: params.projectPath,
|
|
574
574
|
initialized: true,
|
|
@@ -577,36 +577,36 @@ exports.gitRepositoriesTool = {
|
|
|
577
577
|
};
|
|
578
578
|
}
|
|
579
579
|
catch (error) {
|
|
580
|
-
throw new Error(`Falha ao inicializar
|
|
580
|
+
throw new Error(`Falha ao inicializar repositório: ${error instanceof Error ? error.message : String(error)}`);
|
|
581
581
|
}
|
|
582
582
|
},
|
|
583
583
|
/**
|
|
584
|
-
* Clona um
|
|
584
|
+
* Clona um repositório para o diretório local
|
|
585
585
|
*
|
|
586
586
|
* FUNCIONALIDADE:
|
|
587
|
-
* - Clona
|
|
587
|
+
* - Clona repositório remoto para diretório local
|
|
588
588
|
* - Suporta diferentes protocolos (HTTPS, SSH)
|
|
589
|
-
* -
|
|
589
|
+
* - Mantém estrutura de diretórios
|
|
590
590
|
*
|
|
591
|
-
*
|
|
592
|
-
* - owner:
|
|
593
|
-
* - repo: Nome do
|
|
591
|
+
* PARÂMETROS OBRIGATÓRIOS:
|
|
592
|
+
* - owner: Proprietário do repositório
|
|
593
|
+
* - repo: Nome do repositório
|
|
594
594
|
* - projectPath: Caminho local de destino
|
|
595
595
|
* - provider: Provider a ser usado
|
|
596
596
|
*
|
|
597
|
-
*
|
|
598
|
-
* - Verifique
|
|
597
|
+
* RECOMENDAÇÕES:
|
|
598
|
+
* - Verifique espaço em disco disponÃvel
|
|
599
599
|
* - Use caminhos absolutos
|
|
600
|
-
* - Considere profundidade de clone para
|
|
600
|
+
* - Considere profundidade de clone para repositórios grandes
|
|
601
601
|
*/
|
|
602
602
|
async cloneRepository(params, provider) {
|
|
603
603
|
try {
|
|
604
604
|
if (!params.repo || !params.projectPath) {
|
|
605
|
-
throw new Error('repo e projectPath
|
|
605
|
+
throw new Error('repo e projectPath são obrigatórios para clonagem');
|
|
606
606
|
}
|
|
607
607
|
const currentUser = await provider.getCurrentUser();
|
|
608
608
|
const owner = currentUser.login;
|
|
609
|
-
//
|
|
609
|
+
// Obtém URL do repositório
|
|
610
610
|
const providerConfig = provider.getConfig ? provider.getConfig() : null;
|
|
611
611
|
const baseUrl = providerConfig?.apiUrl || (params.provider === 'gitea' ? 'http://nas-ubuntu:3000' : 'https://github.com');
|
|
612
612
|
const repoUrl = params.provider === 'gitea'
|
|
@@ -616,15 +616,15 @@ exports.gitRepositoriesTool = {
|
|
|
616
616
|
const cloneResult = await (0, terminal_controller_js_1.runTerminalCmd)({
|
|
617
617
|
command: `git clone "${repoUrl}" "${params.projectPath}"`,
|
|
618
618
|
is_background: false,
|
|
619
|
-
explanation: 'Clonando
|
|
619
|
+
explanation: 'Clonando repositório remoto'
|
|
620
620
|
});
|
|
621
621
|
if (cloneResult.exitCode !== 0) {
|
|
622
|
-
throw new Error(`Falha ao clonar
|
|
622
|
+
throw new Error(`Falha ao clonar repositório: ${cloneResult.output}`);
|
|
623
623
|
}
|
|
624
624
|
return {
|
|
625
625
|
success: true,
|
|
626
626
|
action: 'clone',
|
|
627
|
-
message: `
|
|
627
|
+
message: `Repositório '${owner}/${params.repo}' clonado com sucesso para '${params.projectPath}'`,
|
|
628
628
|
data: {
|
|
629
629
|
source: `${owner}/${params.repo}`,
|
|
630
630
|
destination: params.projectPath,
|
|
@@ -634,8 +634,21 @@ exports.gitRepositoriesTool = {
|
|
|
634
634
|
};
|
|
635
635
|
}
|
|
636
636
|
catch (error) {
|
|
637
|
-
throw new Error(`Falha ao clonar
|
|
637
|
+
throw new Error(`Falha ao clonar repositório: ${error instanceof Error ? error.message : String(error)}`);
|
|
638
638
|
}
|
|
639
|
+
},
|
|
640
|
+
/**
|
|
641
|
+
* Verifica se erro é relacionado a Git
|
|
642
|
+
*/
|
|
643
|
+
isGitRelatedError(errorMessage) {
|
|
644
|
+
const gitKeywords = [
|
|
645
|
+
'git', 'commit', 'push', 'pull', 'merge', 'conflict', 'branch',
|
|
646
|
+
'remote', 'repository', 'authentication', 'permission', 'unauthorized',
|
|
647
|
+
'divergent', 'non-fast-forward', 'fetch first', 'working tree',
|
|
648
|
+
'uncommitted', 'stash', 'rebase', 'reset', 'checkout'
|
|
649
|
+
];
|
|
650
|
+
const errorLower = errorMessage.toLowerCase();
|
|
651
|
+
return gitKeywords.some(keyword => errorLower.includes(keyword));
|
|
639
652
|
}
|
|
640
653
|
};
|
|
641
654
|
//# sourceMappingURL=git-repositories.js.map
|