@andrebuzeli/git-mcp 2.27.4 → 2.28.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.
Files changed (112) hide show
  1. package/dist/client.d.ts +306 -306
  2. package/dist/client.js +298 -298
  3. package/dist/config.d.ts +310 -310
  4. package/dist/config.js +392 -392
  5. package/dist/index.d.ts +22 -22
  6. package/dist/index.js +89 -89
  7. package/dist/providers/base-provider.d.ts +160 -156
  8. package/dist/providers/base-provider.d.ts.map +1 -1
  9. package/dist/providers/base-provider.js +274 -260
  10. package/dist/providers/base-provider.js.map +1 -1
  11. package/dist/providers/error-handler.d.ts +50 -50
  12. package/dist/providers/error-handler.js +175 -175
  13. package/dist/providers/gitea-provider.d.ts +97 -97
  14. package/dist/providers/gitea-provider.js +1001 -1001
  15. package/dist/providers/github-provider.d.ts +104 -104
  16. package/dist/providers/github-provider.js +1234 -1234
  17. package/dist/providers/index.d.ts +12 -12
  18. package/dist/providers/index.js +40 -40
  19. package/dist/providers/provider-factory.d.ts +74 -74
  20. package/dist/providers/provider-factory.js +311 -311
  21. package/dist/providers/types.d.ts +318 -298
  22. package/dist/providers/types.d.ts.map +1 -1
  23. package/dist/providers/types.js +6 -6
  24. package/dist/server.d.ts +76 -76
  25. package/dist/server.d.ts.map +1 -1
  26. package/dist/server.js +306 -305
  27. package/dist/server.js.map +1 -1
  28. package/dist/tools/gh-actions.d.ts +252 -252
  29. package/dist/tools/gh-actions.js +389 -389
  30. package/dist/tools/gh-analytics.d.ts +263 -263
  31. package/dist/tools/gh-analytics.js +401 -401
  32. package/dist/tools/gh-code-review.d.ts +304 -304
  33. package/dist/tools/gh-code-review.js +512 -512
  34. package/dist/tools/gh-codespaces.d.ts +138 -138
  35. package/dist/tools/gh-codespaces.js +282 -282
  36. package/dist/tools/gh-deployments.d.ts +300 -300
  37. package/dist/tools/gh-deployments.js +367 -367
  38. package/dist/tools/gh-gists.d.ts +174 -174
  39. package/dist/tools/gh-gists.js +321 -321
  40. package/dist/tools/gh-projects.d.ts +205 -205
  41. package/dist/tools/gh-projects.js +358 -358
  42. package/dist/tools/gh-security.d.ts +274 -274
  43. package/dist/tools/gh-security.js +395 -395
  44. package/dist/tools/gh-sync.d.ts +213 -213
  45. package/dist/tools/gh-sync.js +378 -378
  46. package/dist/tools/gh-workflows.d.ts +290 -290
  47. package/dist/tools/gh-workflows.js +432 -432
  48. package/dist/tools/git-archive.d.ts +165 -165
  49. package/dist/tools/git-archive.js +233 -233
  50. package/dist/tools/git-branches.d.ts +430 -430
  51. package/dist/tools/git-branches.d.ts.map +1 -1
  52. package/dist/tools/git-branches.js +627 -530
  53. package/dist/tools/git-branches.js.map +1 -1
  54. package/dist/tools/git-bundle.d.ts +171 -171
  55. package/dist/tools/git-bundle.js +241 -241
  56. package/dist/tools/git-cherry-pick.d.ts +158 -158
  57. package/dist/tools/git-cherry-pick.js +224 -224
  58. package/dist/tools/git-commits.d.ts +485 -485
  59. package/dist/tools/git-commits.d.ts.map +1 -1
  60. package/dist/tools/git-commits.js +735 -625
  61. package/dist/tools/git-commits.js.map +1 -1
  62. package/dist/tools/git-config.d.ts +140 -140
  63. package/dist/tools/git-config.js +268 -268
  64. package/dist/tools/git-files.d.ts +486 -486
  65. package/dist/tools/git-files.js +607 -607
  66. package/dist/tools/git-issues.d.ts +571 -571
  67. package/dist/tools/git-issues.d.ts.map +1 -1
  68. package/dist/tools/git-issues.js +740 -693
  69. package/dist/tools/git-issues.js.map +1 -1
  70. package/dist/tools/git-pulls.d.ts +694 -694
  71. package/dist/tools/git-pulls.js +732 -732
  72. package/dist/tools/git-rebase.d.ts +137 -137
  73. package/dist/tools/git-rebase.js +213 -213
  74. package/dist/tools/git-releases.d.ts +487 -487
  75. package/dist/tools/git-releases.js +557 -557
  76. package/dist/tools/git-remote.d.ts +138 -138
  77. package/dist/tools/git-remote.js +274 -274
  78. package/dist/tools/git-repositories.d.ts +483 -483
  79. package/dist/tools/git-repositories.js +640 -640
  80. package/dist/tools/git-reset.d.ts +130 -130
  81. package/dist/tools/git-reset.js +223 -223
  82. package/dist/tools/git-revert.d.ts +149 -149
  83. package/dist/tools/git-revert.js +198 -198
  84. package/dist/tools/git-stash.d.ts +140 -140
  85. package/dist/tools/git-stash.js +269 -269
  86. package/dist/tools/git-submodule.d.ts +152 -152
  87. package/dist/tools/git-submodule.js +289 -289
  88. package/dist/tools/git-sync.d.ts +178 -166
  89. package/dist/tools/git-sync.d.ts.map +1 -1
  90. package/dist/tools/git-sync.js +312 -117
  91. package/dist/tools/git-sync.js.map +1 -1
  92. package/dist/tools/git-tags.d.ts +411 -411
  93. package/dist/tools/git-tags.js +485 -485
  94. package/dist/tools/git-webhooks.d.ts +470 -482
  95. package/dist/tools/git-webhooks.d.ts.map +1 -1
  96. package/dist/tools/git-webhooks.js +543 -555
  97. package/dist/tools/git-webhooks.js.map +1 -1
  98. package/dist/tools/git-worktree.d.ts +159 -159
  99. package/dist/tools/git-worktree.js +269 -269
  100. package/dist/tools/repositories.d.ts +405 -405
  101. package/dist/tools/repositories.js +569 -569
  102. package/dist/tools/users.d.ts +372 -372
  103. package/dist/tools/users.js +499 -499
  104. package/dist/tools/validator.d.ts +170 -170
  105. package/dist/tools/validator.js +194 -194
  106. package/dist/tools/version-control.d.ts +136 -136
  107. package/dist/tools/version-control.js +164 -164
  108. package/dist/utils/terminal-controller.d.ts +80 -80
  109. package/dist/utils/terminal-controller.js +345 -345
  110. package/dist/utils/user-detection.d.ts +24 -24
  111. package/dist/utils/user-detection.js +53 -53
  112. package/package.json +59 -59
@@ -1,486 +1,486 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.tagsTool = void 0;
4
- const zod_1 = require("zod");
5
- const index_js_1 = require("../providers/index.js");
6
- const user_detection_js_1 = require("../utils/user-detection.js");
7
- /**
8
- * Tool: tags
9
- *
10
- * DESCRIÇÃO:
11
- * Gerenciamento completo de tags com suporte multi-provider (GitHub e Gitea)
12
- *
13
- * FUNCIONALIDADES:
14
- * - Criação de novas tags
15
- * - Listagem e busca de tags
16
- * - Obtenção de detalhes específicos
17
- * - Exclusão de tags
18
- * - Controle de versão
19
- * - Busca por padrões
20
- *
21
- * USO:
22
- * - Para marcar versões específicas
23
- * - Para controle de release
24
- * - Para rollback de código
25
- * - Para identificação de commits
26
- *
27
- * RECOMENDAÇÕES:
28
- * - Use versionamento semântico
29
- * - Mantenha tags organizadas
30
- * - Documente propósito das tags
31
- * - Use para pontos de referência
32
- */
33
- /**
34
- * Schema de validação para entrada da tool tags
35
- *
36
- * VALIDAÇÕES:
37
- * - action: Ação obrigatória (create, list, get, delete, search)
38
- * - Parâmetros específicos por ação
39
- * - Validação de tipos e formatos
40
- *
41
- * RECOMENDAÇÕES:
42
- * - Sempre valide entrada antes de usar
43
- * - Use parâmetros opcionais adequadamente
44
- * - Documente parâmetros obrigatórios
45
- */
46
- const TagsInputSchema = zod_1.z.object({
47
- action: zod_1.z.enum(['create', 'list', 'get', 'delete', 'search']),
48
- // Parâmetros comuns
49
- repo: zod_1.z.string(),
50
- // Para multi-provider
51
- provider: zod_1.z.enum(['gitea', 'github']).describe('Provider to use (gitea or github)'), // Provider específico: gitea, github ou both
52
- // Para create
53
- tag_name: zod_1.z.string().optional(),
54
- message: zod_1.z.string().optional(),
55
- target: zod_1.z.string().optional(),
56
- type: zod_1.z.enum(['lightweight', 'annotated']).optional(),
57
- tagger_name: zod_1.z.string().optional(),
58
- tagger_email: zod_1.z.string().optional(),
59
- // Para get/delete
60
- tag: zod_1.z.string().optional(),
61
- // Para list
62
- page: zod_1.z.number().min(1).optional(),
63
- limit: zod_1.z.number().min(1).max(100).optional(),
64
- // Para search
65
- query: zod_1.z.string().optional(),
66
- pattern: zod_1.z.string().optional(),
67
- });
68
- /**
69
- * Schema de saída padronizado
70
- *
71
- * ESTRUTURA:
72
- * - success: Status da operação
73
- * - action: Ação executada
74
- * - message: Mensagem descritiva
75
- * - data: Dados retornados (opcional)
76
- * - error: Detalhes do erro (opcional)
77
- */
78
- const TagsResultSchema = zod_1.z.object({
79
- success: zod_1.z.boolean(),
80
- action: zod_1.z.string(),
81
- message: zod_1.z.string(),
82
- data: zod_1.z.any().optional(),
83
- error: zod_1.z.string().optional()
84
- });
85
- /**
86
- * Tool: tags
87
- *
88
- * DESCRIÇÃO:
89
- * Gerenciamento completo de tags Gitea com múltiplas ações
90
- *
91
- * ACTIONS DISPONÍVEIS:
92
- *
93
- * 1. create - Criar nova tag
94
- * Parâmetros:
95
- * - owner (obrigatório): Proprietário do repositório
96
- * - repo (obrigatório): Nome do repositório
97
- * - tag_name (obrigatório): Nome da tag
98
- * - message (opcional): Mensagem da tag (para tags anotadas)
99
- * - target (obrigatório): Commit, branch ou tag alvo
100
- * - type (opcional): Tipo de tag (lightweight, annotated) - padrão: lightweight
101
- * - tagger_name (opcional): Nome do tagger (para tags anotadas)
102
- * - tagger_email (opcional): Email do tagger (para tags anotadas)
103
- *
104
- * 2. list - Listar tags
105
- * Parâmetros:
106
- * - owner (obrigatório): Proprietário do repositório
107
- * - repo (obrigatório): Nome do repositório
108
- * - page (opcional): Página da listagem (padrão: 1)
109
- * - limit (opcional): Itens por página (padrão: 30, máximo: 100)
110
- *
111
- * 3. get - Obter detalhes da tag
112
- * Parâmetros:
113
- * - owner (obrigatório): Proprietário do repositório
114
- * - repo (obrigatório): Nome do repositório
115
- * - tag (obrigatório): Nome da tag
116
- *
117
- * 4. delete - Deletar tag
118
- * Parâmetros:
119
- * - owner (obrigatório): Proprietário do repositório
120
- * - repo (obrigatório): Nome do repositório
121
- * - tag (obrigatório): Nome da tag
122
- *
123
- * 5. search - Buscar tags
124
- * Parâmetros:
125
- * - owner (obrigatório): Proprietário do repositório
126
- * - repo (obrigatório): Nome do repositório
127
- * - query (opcional): Termo de busca
128
- * - pattern (opcional): Padrão de busca (ex: v*.*.*)
129
- *
130
- * RECOMENDAÇÕES DE USO:
131
- * - Use convenções de nomenclatura consistentes
132
- * - Documente propósito das tags
133
- * - Mantenha tags organizadas
134
- * - Use versionamento semântico
135
- * - Use tags anotadas para releases importantes
136
- * - Limpe tags antigas regularmente
137
- */
138
- exports.tagsTool = {
139
- name: 'git-tags',
140
- description: 'tool: Gerencia tags Git para versionamento e releases\n──────────────\naction create: cria nova tag\naction create requires: repo, tag_name, message, target, type, tagger_name, tagger_email, provider\n───────────────\naction list: lista tags do repositório\naction list requires: repo, page, limit, provider\n───────────────\naction get: obtém detalhes de tag\naction get requires: repo, tag, provider\n───────────────\naction delete: remove tag\naction delete requires: repo, tag, provider\n───────────────\naction search: busca tags por critérios\naction search requires: repo, query, pattern, provider',
141
- inputSchema: {
142
- type: 'object',
143
- properties: {
144
- action: {
145
- type: 'string',
146
- enum: ['create', 'list', 'get', 'delete', 'search'],
147
- description: 'Action to perform on tags'
148
- },
149
- repo: { type: 'string', description: 'Repository name' },
150
- provider: { type: 'string', description: 'Provider to use (github, gitea, or omit for default)' },
151
- tag_name: { type: 'string', description: 'Tag name' },
152
- message: { type: 'string', description: 'Tag message (for annotated tags)' },
153
- target: { type: 'string', description: 'Target commit SHA, branch or tag' },
154
- type: { type: 'string', enum: ['lightweight', 'annotated'], description: 'Tag type' },
155
- tagger_name: { type: 'string', description: 'Tagger name' },
156
- tagger_email: { type: 'string', description: 'Tagger email' },
157
- tag: { type: 'string', description: 'Tag name for get/delete operations' },
158
- page: { type: 'number', description: 'Page number', minimum: 1 },
159
- limit: { type: 'number', description: 'Items per page', minimum: 1, maximum: 100 },
160
- query: { type: 'string', description: 'Search query' },
161
- pattern: { type: 'string', description: 'Search pattern (e.g., v*.*.*)' }
162
- },
163
- required: ['action', 'repo', 'provider']
164
- },
165
- /**
166
- * Handler principal da tool tags
167
- *
168
- * FUNCIONALIDADE:
169
- * - Valida entrada usando Zod schema
170
- * - Roteia para método específico baseado na ação
171
- * - Trata erros de forma uniforme
172
- * - Retorna resultado padronizado
173
- *
174
- * FLUXO:
175
- * 1. Validação de entrada
176
- * 2. Seleção do provider
177
- * 3. Roteamento por ação
178
- * 4. Execução do método específico
179
- * 5. Tratamento de erros
180
- * 6. Retorno de resultado
181
- *
182
- * TRATAMENTO DE ERROS:
183
- * - Validação: erro de schema
184
- * - Execução: erro da operação
185
- * - Roteamento: ação não suportada
186
- *
187
- * RECOMENDAÇÕES:
188
- * - Sempre valide entrada antes de processar
189
- * - Trate erros específicos adequadamente
190
- * - Log detalhes de erro para debug
191
- * - Retorne mensagens de erro úteis
192
- */
193
- async handler(input) {
194
- try {
195
- const validatedInput = TagsInputSchema.parse(input);
196
- // Aplicar auto-detecção apenas para owner dentro do provider especificado
197
- const processedInput = await (0, user_detection_js_1.applyAutoUserDetection)(validatedInput, validatedInput.provider);
198
- // Usar o provider especificado pelo usuário
199
- const provider = index_js_1.globalProviderFactory.getProvider(processedInput.provider);
200
- if (!provider) {
201
- throw new Error(`Provider '${processedInput.provider}' não encontrado`);
202
- }
203
- switch (processedInput.action) {
204
- case 'create':
205
- return await this.createTag(processedInput, provider);
206
- case 'list':
207
- return await this.listTags(processedInput, provider);
208
- case 'get':
209
- return await this.getTag(processedInput, provider);
210
- case 'delete':
211
- return await this.deleteTag(processedInput, provider);
212
- case 'search':
213
- return await this.searchTags(processedInput, provider);
214
- default:
215
- throw new Error(`Ação não suportada: ${processedInput.action}`);
216
- }
217
- }
218
- catch (error) {
219
- return {
220
- success: false,
221
- action: input.action,
222
- message: 'Erro na operação de tags',
223
- error: error instanceof Error ? error.message : String(error)
224
- };
225
- }
226
- },
227
- /**
228
- * Cria uma nova tag no repositório
229
- *
230
- * FUNCIONALIDADE:
231
- * - Cria tag com nome e target especificados
232
- * - Suporta tags lightweight e anotadas
233
- * - Permite configuração de tagger
234
- *
235
- * PARÂMETROS OBRIGATÓRIOS:
236
- * - owner: Proprietário do repositório
237
- * - repo: Nome do repositório
238
- * - tag_name: Nome da tag
239
- * - target: Commit, branch ou tag alvo
240
- *
241
- * PARÂMETROS OPCIONAIS:
242
- * - message: Mensagem da tag (para tags anotadas)
243
- * - type: Tipo de tag (lightweight, annotated) - padrão: lightweight
244
- * - tagger_name: Nome do tagger (para tags anotadas)
245
- * - tagger_email: Email do tagger (para tags anotadas)
246
- *
247
- * VALIDAÇÕES:
248
- * - Todos os parâmetros obrigatórios
249
- * - Nome da tag deve ser único no repositório
250
- * - Target deve existir
251
- * - Usuário deve ter permissão de escrita
252
- *
253
- * RECOMENDAÇÕES:
254
- * - Use convenções de nomenclatura consistentes
255
- * - Use tags anotadas para releases importantes
256
- * - Documente propósito da tag
257
- * - Use versionamento semântico
258
- */
259
- async createTag(params, provider) {
260
- try {
261
- if (!params.repo || !params.tag_name || !params.target) {
262
- throw new Error('Repo, tag_name e target são obrigatórios');
263
- }
264
- const currentUser = await provider.getCurrentUser();
265
- const owner = currentUser.login;
266
- const tagData = {
267
- tag_name: params.tag_name,
268
- target: params.target
269
- };
270
- if (params.type === 'annotated') {
271
- if (params.message)
272
- tagData.message = params.message;
273
- if (params.tagger_name)
274
- tagData.tagger_name = params.tagger_name;
275
- if (params.tagger_email)
276
- tagData.tagger_email = params.tagger_email;
277
- }
278
- const tag = await provider.createTag(owner, params.repo, tagData);
279
- return {
280
- success: true,
281
- action: 'create',
282
- message: `Tag '${params.tag_name}' criada com sucesso`,
283
- data: tag
284
- };
285
- }
286
- catch (error) {
287
- throw new Error(`Falha ao criar tag: ${error instanceof Error ? error.message : String(error)}`);
288
- }
289
- },
290
- /**
291
- * Lista tags do repositório
292
- *
293
- * FUNCIONALIDADE:
294
- * - Lista tags com paginação
295
- * - Retorna informações básicas de cada tag
296
- * - Inclui commit alvo e URLs de download
297
- *
298
- * PARÂMETROS OBRIGATÓRIOS:
299
- * - owner: Proprietário do repositório
300
- * - repo: Nome do repositório
301
- *
302
- * PARÂMETROS OPCIONAIS:
303
- * - page: Página da listagem (padrão: 1)
304
- * - limit: Itens por página (padrão: 30, máximo: 100)
305
- *
306
- * VALIDAÇÕES:
307
- * - e repo obrigatórios
308
- * - Page deve ser >= 1
309
- * - Limit deve ser entre 1 e 100
310
- *
311
- * RECOMENDAÇÕES:
312
- * - Use paginação para repositórios com muitas tags
313
- * - Monitore número total de tags
314
- * - Verifique commit alvo de cada tag
315
- * - Mantenha tags organizadas
316
- */
317
- async listTags(params, provider) {
318
- try {
319
- if (!params.repo) {
320
- throw new Error('Repo é obrigatório');
321
- }
322
- const currentUser = await provider.getCurrentUser();
323
- const owner = currentUser.login;
324
- const page = params.page || 1;
325
- const limit = params.limit || 30;
326
- const tags = await provider.listTags((await provider.getCurrentUser()).login, params.repo, page, limit);
327
- return {
328
- success: true,
329
- action: 'list',
330
- message: `${tags.length} tags encontradas`,
331
- data: {
332
- tags,
333
- page,
334
- limit,
335
- total: tags.length
336
- }
337
- };
338
- }
339
- catch (error) {
340
- throw new Error(`Falha ao listar tags: ${error instanceof Error ? error.message : String(error)}`);
341
- }
342
- },
343
- /**
344
- * Obtém detalhes de uma tag específica
345
- *
346
- * FUNCIONALIDADE:
347
- * - Retorna informações completas da tag
348
- * - Inclui nome, commit alvo e URLs
349
- * - Mostra tipo da tag (lightweight/anotada)
350
- *
351
- * PARÂMETROS OBRIGATÓRIOS:
352
- * - owner: Proprietário do repositório
353
- * - repo: Nome do repositório
354
- * - tag: Nome da tag
355
- *
356
- * VALIDAÇÕES:
357
- * - Todos os parâmetros obrigatórios
358
- * - Tag deve existir no repositório
359
- * - Nome deve ser válido
360
- *
361
- * RECOMENDAÇÕES:
362
- * - Use para obter detalhes completos
363
- * - Verifique commit alvo da tag
364
- * - Analise URLs de download
365
- * - Monitore mudanças importantes
366
- */
367
- async getTag(params, provider) {
368
- try {
369
- if (!params.repo || !params.tag) {
370
- throw new Error('Repo e tag são obrigatórios');
371
- }
372
- const currentUser = await provider.getCurrentUser();
373
- const owner = currentUser.login;
374
- // Implementar obtenção de tag específica
375
- // Por enquanto, retorna mensagem de funcionalidade
376
- return {
377
- success: true,
378
- action: 'get',
379
- message: `Tag '${params.tag}' obtida com sucesso`,
380
- data: {
381
- tag: params.tag,
382
- note: 'Funcionalidade de obtenção de tag específica será implementada'
383
- }
384
- };
385
- }
386
- catch (error) {
387
- throw new Error(`Falha ao obter tag: ${error instanceof Error ? error.message : String(error)}`);
388
- }
389
- },
390
- /**
391
- * Deleta uma tag do repositório
392
- *
393
- * FUNCIONALIDADE:
394
- * - Remove tag especificada
395
- * - Mantém commit alvo intacto
396
- * - Confirma exclusão bem-sucedida
397
- *
398
- * PARÂMETROS OBRIGATÓRIOS:
399
- * - owner: Proprietário do repositório
400
- * - repo: Nome do repositório
401
- * - tag: Nome da tag
402
- *
403
- * VALIDAÇÕES:
404
- * - Todos os parâmetros obrigatórios
405
- * - Tag deve existir
406
- * - Usuário deve ter permissão de exclusão
407
- *
408
- * RECOMENDAÇÕES:
409
- * - Confirme exclusão antes de executar
410
- * - Verifique se tag não está sendo usada
411
- * - Mantenha backup se necessário
412
- * - Documente motivo da exclusão
413
- */
414
- async deleteTag(params, provider) {
415
- try {
416
- if (!params.repo || !params.tag) {
417
- throw new Error('Repo e tag são obrigatórios');
418
- }
419
- const currentUser = await provider.getCurrentUser();
420
- const owner = currentUser.login;
421
- await provider.deleteTag((await provider.getCurrentUser()).login, params.repo, params.tag);
422
- return {
423
- success: true,
424
- action: 'delete',
425
- message: `Tag '${params.tag}' deletada com sucesso`,
426
- data: { deleted: true }
427
- };
428
- }
429
- catch (error) {
430
- throw new Error(`Falha ao deletar tag: ${error instanceof Error ? error.message : String(error)}`);
431
- }
432
- },
433
- /**
434
- * Busca tags por critérios específicos
435
- *
436
- * FUNCIONALIDADE:
437
- * - Busca tags por nome ou padrão
438
- * - Suporta padrões glob (ex: v*.*.*)
439
- * - Retorna resultados relevantes
440
- *
441
- * PARÂMETROS OBRIGATÓRIOS:
442
- * - owner: Proprietário do repositório
443
- * - repo: Nome do repositório
444
- *
445
- * PARÂMETROS OPCIONAIS:
446
- * - query: Termo de busca
447
- * - pattern: Padrão de busca (ex: v*.*.*)
448
- *
449
- * VALIDAÇÕES:
450
- * - e repo obrigatórios
451
- * - Query ou pattern deve ser fornecido
452
- * - Repositório deve existir
453
- *
454
- * RECOMENDAÇÕES:
455
- * - Use padrões glob para busca eficiente
456
- * - Combine com filtros de nome
457
- * - Analise resultados para relevância
458
- * - Use para encontrar tags relacionadas
459
- */
460
- async searchTags(params, provider) {
461
- try {
462
- if (!params.repo) {
463
- throw new Error('Repo é obrigatório');
464
- }
465
- if (!params.query && !params.pattern) {
466
- throw new Error('Query ou pattern deve ser fornecido');
467
- }
468
- // Implementar busca de tags
469
- // Por enquanto, retorna mensagem de funcionalidade
470
- return {
471
- success: true,
472
- action: 'search',
473
- message: `Busca por tags solicitada`,
474
- data: {
475
- query: params.query || 'não fornecido',
476
- pattern: params.pattern || 'não fornecido',
477
- results: 'Funcionalidade de busca será implementada'
478
- }
479
- };
480
- }
481
- catch (error) {
482
- throw new Error(`Falha ao buscar tags: ${error instanceof Error ? error.message : String(error)}`);
483
- }
484
- }
485
- };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tagsTool = void 0;
4
+ const zod_1 = require("zod");
5
+ const index_js_1 = require("../providers/index.js");
6
+ const user_detection_js_1 = require("../utils/user-detection.js");
7
+ /**
8
+ * Tool: tags
9
+ *
10
+ * DESCRIÇÃO:
11
+ * Gerenciamento completo de tags com suporte multi-provider (GitHub e Gitea)
12
+ *
13
+ * FUNCIONALIDADES:
14
+ * - Criação de novas tags
15
+ * - Listagem e busca de tags
16
+ * - Obtenção de detalhes específicos
17
+ * - Exclusão de tags
18
+ * - Controle de versão
19
+ * - Busca por padrões
20
+ *
21
+ * USO:
22
+ * - Para marcar versões específicas
23
+ * - Para controle de release
24
+ * - Para rollback de código
25
+ * - Para identificação de commits
26
+ *
27
+ * RECOMENDAÇÕES:
28
+ * - Use versionamento semântico
29
+ * - Mantenha tags organizadas
30
+ * - Documente propósito das tags
31
+ * - Use para pontos de referência
32
+ */
33
+ /**
34
+ * Schema de validação para entrada da tool tags
35
+ *
36
+ * VALIDAÇÕES:
37
+ * - action: Ação obrigatória (create, list, get, delete, search)
38
+ * - Parâmetros específicos por ação
39
+ * - Validação de tipos e formatos
40
+ *
41
+ * RECOMENDAÇÕES:
42
+ * - Sempre valide entrada antes de usar
43
+ * - Use parâmetros opcionais adequadamente
44
+ * - Documente parâmetros obrigatórios
45
+ */
46
+ const TagsInputSchema = zod_1.z.object({
47
+ action: zod_1.z.enum(['create', 'list', 'get', 'delete', 'search']),
48
+ // Parâmetros comuns
49
+ repo: zod_1.z.string(),
50
+ // Para multi-provider
51
+ provider: zod_1.z.enum(['gitea', 'github']).describe('Provider to use (gitea or github)'), // Provider específico: gitea, github ou both
52
+ // Para create
53
+ tag_name: zod_1.z.string().optional(),
54
+ message: zod_1.z.string().optional(),
55
+ target: zod_1.z.string().optional(),
56
+ type: zod_1.z.enum(['lightweight', 'annotated']).optional(),
57
+ tagger_name: zod_1.z.string().optional(),
58
+ tagger_email: zod_1.z.string().optional(),
59
+ // Para get/delete
60
+ tag: zod_1.z.string().optional(),
61
+ // Para list
62
+ page: zod_1.z.number().min(1).optional(),
63
+ limit: zod_1.z.number().min(1).max(100).optional(),
64
+ // Para search
65
+ query: zod_1.z.string().optional(),
66
+ pattern: zod_1.z.string().optional(),
67
+ });
68
+ /**
69
+ * Schema de saída padronizado
70
+ *
71
+ * ESTRUTURA:
72
+ * - success: Status da operação
73
+ * - action: Ação executada
74
+ * - message: Mensagem descritiva
75
+ * - data: Dados retornados (opcional)
76
+ * - error: Detalhes do erro (opcional)
77
+ */
78
+ const TagsResultSchema = zod_1.z.object({
79
+ success: zod_1.z.boolean(),
80
+ action: zod_1.z.string(),
81
+ message: zod_1.z.string(),
82
+ data: zod_1.z.any().optional(),
83
+ error: zod_1.z.string().optional()
84
+ });
85
+ /**
86
+ * Tool: tags
87
+ *
88
+ * DESCRIÇÃO:
89
+ * Gerenciamento completo de tags Gitea com múltiplas ações
90
+ *
91
+ * ACTIONS DISPONÍVEIS:
92
+ *
93
+ * 1. create - Criar nova tag
94
+ * Parâmetros:
95
+ * - owner (obrigatório): Proprietário do repositório
96
+ * - repo (obrigatório): Nome do repositório
97
+ * - tag_name (obrigatório): Nome da tag
98
+ * - message (opcional): Mensagem da tag (para tags anotadas)
99
+ * - target (obrigatório): Commit, branch ou tag alvo
100
+ * - type (opcional): Tipo de tag (lightweight, annotated) - padrão: lightweight
101
+ * - tagger_name (opcional): Nome do tagger (para tags anotadas)
102
+ * - tagger_email (opcional): Email do tagger (para tags anotadas)
103
+ *
104
+ * 2. list - Listar tags
105
+ * Parâmetros:
106
+ * - owner (obrigatório): Proprietário do repositório
107
+ * - repo (obrigatório): Nome do repositório
108
+ * - page (opcional): Página da listagem (padrão: 1)
109
+ * - limit (opcional): Itens por página (padrão: 30, máximo: 100)
110
+ *
111
+ * 3. get - Obter detalhes da tag
112
+ * Parâmetros:
113
+ * - owner (obrigatório): Proprietário do repositório
114
+ * - repo (obrigatório): Nome do repositório
115
+ * - tag (obrigatório): Nome da tag
116
+ *
117
+ * 4. delete - Deletar tag
118
+ * Parâmetros:
119
+ * - owner (obrigatório): Proprietário do repositório
120
+ * - repo (obrigatório): Nome do repositório
121
+ * - tag (obrigatório): Nome da tag
122
+ *
123
+ * 5. search - Buscar tags
124
+ * Parâmetros:
125
+ * - owner (obrigatório): Proprietário do repositório
126
+ * - repo (obrigatório): Nome do repositório
127
+ * - query (opcional): Termo de busca
128
+ * - pattern (opcional): Padrão de busca (ex: v*.*.*)
129
+ *
130
+ * RECOMENDAÇÕES DE USO:
131
+ * - Use convenções de nomenclatura consistentes
132
+ * - Documente propósito das tags
133
+ * - Mantenha tags organizadas
134
+ * - Use versionamento semântico
135
+ * - Use tags anotadas para releases importantes
136
+ * - Limpe tags antigas regularmente
137
+ */
138
+ exports.tagsTool = {
139
+ name: 'git-tags',
140
+ description: 'tool: Gerencia tags Git para versionamento e releases\n──────────────\naction create: cria nova tag\naction create requires: repo, tag_name, message, target, type, tagger_name, tagger_email, provider\n───────────────\naction list: lista tags do repositório\naction list requires: repo, page, limit, provider\n───────────────\naction get: obtém detalhes de tag\naction get requires: repo, tag, provider\n───────────────\naction delete: remove tag\naction delete requires: repo, tag, provider\n───────────────\naction search: busca tags por critérios\naction search requires: repo, query, pattern, provider',
141
+ inputSchema: {
142
+ type: 'object',
143
+ properties: {
144
+ action: {
145
+ type: 'string',
146
+ enum: ['create', 'list', 'get', 'delete', 'search'],
147
+ description: 'Action to perform on tags'
148
+ },
149
+ repo: { type: 'string', description: 'Repository name' },
150
+ provider: { type: 'string', description: 'Provider to use (github, gitea, or omit for default)' },
151
+ tag_name: { type: 'string', description: 'Tag name' },
152
+ message: { type: 'string', description: 'Tag message (for annotated tags)' },
153
+ target: { type: 'string', description: 'Target commit SHA, branch or tag' },
154
+ type: { type: 'string', enum: ['lightweight', 'annotated'], description: 'Tag type' },
155
+ tagger_name: { type: 'string', description: 'Tagger name' },
156
+ tagger_email: { type: 'string', description: 'Tagger email' },
157
+ tag: { type: 'string', description: 'Tag name for get/delete operations' },
158
+ page: { type: 'number', description: 'Page number', minimum: 1 },
159
+ limit: { type: 'number', description: 'Items per page', minimum: 1, maximum: 100 },
160
+ query: { type: 'string', description: 'Search query' },
161
+ pattern: { type: 'string', description: 'Search pattern (e.g., v*.*.*)' }
162
+ },
163
+ required: ['action', 'repo', 'provider']
164
+ },
165
+ /**
166
+ * Handler principal da tool tags
167
+ *
168
+ * FUNCIONALIDADE:
169
+ * - Valida entrada usando Zod schema
170
+ * - Roteia para método específico baseado na ação
171
+ * - Trata erros de forma uniforme
172
+ * - Retorna resultado padronizado
173
+ *
174
+ * FLUXO:
175
+ * 1. Validação de entrada
176
+ * 2. Seleção do provider
177
+ * 3. Roteamento por ação
178
+ * 4. Execução do método específico
179
+ * 5. Tratamento de erros
180
+ * 6. Retorno de resultado
181
+ *
182
+ * TRATAMENTO DE ERROS:
183
+ * - Validação: erro de schema
184
+ * - Execução: erro da operação
185
+ * - Roteamento: ação não suportada
186
+ *
187
+ * RECOMENDAÇÕES:
188
+ * - Sempre valide entrada antes de processar
189
+ * - Trate erros específicos adequadamente
190
+ * - Log detalhes de erro para debug
191
+ * - Retorne mensagens de erro úteis
192
+ */
193
+ async handler(input) {
194
+ try {
195
+ const validatedInput = TagsInputSchema.parse(input);
196
+ // Aplicar auto-detecção apenas para owner dentro do provider especificado
197
+ const processedInput = await (0, user_detection_js_1.applyAutoUserDetection)(validatedInput, validatedInput.provider);
198
+ // Usar o provider especificado pelo usuário
199
+ const provider = index_js_1.globalProviderFactory.getProvider(processedInput.provider);
200
+ if (!provider) {
201
+ throw new Error(`Provider '${processedInput.provider}' não encontrado`);
202
+ }
203
+ switch (processedInput.action) {
204
+ case 'create':
205
+ return await this.createTag(processedInput, provider);
206
+ case 'list':
207
+ return await this.listTags(processedInput, provider);
208
+ case 'get':
209
+ return await this.getTag(processedInput, provider);
210
+ case 'delete':
211
+ return await this.deleteTag(processedInput, provider);
212
+ case 'search':
213
+ return await this.searchTags(processedInput, provider);
214
+ default:
215
+ throw new Error(`Ação não suportada: ${processedInput.action}`);
216
+ }
217
+ }
218
+ catch (error) {
219
+ return {
220
+ success: false,
221
+ action: input.action,
222
+ message: 'Erro na operação de tags',
223
+ error: error instanceof Error ? error.message : String(error)
224
+ };
225
+ }
226
+ },
227
+ /**
228
+ * Cria uma nova tag no repositório
229
+ *
230
+ * FUNCIONALIDADE:
231
+ * - Cria tag com nome e target especificados
232
+ * - Suporta tags lightweight e anotadas
233
+ * - Permite configuração de tagger
234
+ *
235
+ * PARÂMETROS OBRIGATÓRIOS:
236
+ * - owner: Proprietário do repositório
237
+ * - repo: Nome do repositório
238
+ * - tag_name: Nome da tag
239
+ * - target: Commit, branch ou tag alvo
240
+ *
241
+ * PARÂMETROS OPCIONAIS:
242
+ * - message: Mensagem da tag (para tags anotadas)
243
+ * - type: Tipo de tag (lightweight, annotated) - padrão: lightweight
244
+ * - tagger_name: Nome do tagger (para tags anotadas)
245
+ * - tagger_email: Email do tagger (para tags anotadas)
246
+ *
247
+ * VALIDAÇÕES:
248
+ * - Todos os parâmetros obrigatórios
249
+ * - Nome da tag deve ser único no repositório
250
+ * - Target deve existir
251
+ * - Usuário deve ter permissão de escrita
252
+ *
253
+ * RECOMENDAÇÕES:
254
+ * - Use convenções de nomenclatura consistentes
255
+ * - Use tags anotadas para releases importantes
256
+ * - Documente propósito da tag
257
+ * - Use versionamento semântico
258
+ */
259
+ async createTag(params, provider) {
260
+ try {
261
+ if (!params.repo || !params.tag_name || !params.target) {
262
+ throw new Error('Repo, tag_name e target são obrigatórios');
263
+ }
264
+ const currentUser = await provider.getCurrentUser();
265
+ const owner = currentUser.login;
266
+ const tagData = {
267
+ tag_name: params.tag_name,
268
+ target: params.target
269
+ };
270
+ if (params.type === 'annotated') {
271
+ if (params.message)
272
+ tagData.message = params.message;
273
+ if (params.tagger_name)
274
+ tagData.tagger_name = params.tagger_name;
275
+ if (params.tagger_email)
276
+ tagData.tagger_email = params.tagger_email;
277
+ }
278
+ const tag = await provider.createTag(owner, params.repo, tagData);
279
+ return {
280
+ success: true,
281
+ action: 'create',
282
+ message: `Tag '${params.tag_name}' criada com sucesso`,
283
+ data: tag
284
+ };
285
+ }
286
+ catch (error) {
287
+ throw new Error(`Falha ao criar tag: ${error instanceof Error ? error.message : String(error)}`);
288
+ }
289
+ },
290
+ /**
291
+ * Lista tags do repositório
292
+ *
293
+ * FUNCIONALIDADE:
294
+ * - Lista tags com paginação
295
+ * - Retorna informações básicas de cada tag
296
+ * - Inclui commit alvo e URLs de download
297
+ *
298
+ * PARÂMETROS OBRIGATÓRIOS:
299
+ * - owner: Proprietário do repositório
300
+ * - repo: Nome do repositório
301
+ *
302
+ * PARÂMETROS OPCIONAIS:
303
+ * - page: Página da listagem (padrão: 1)
304
+ * - limit: Itens por página (padrão: 30, máximo: 100)
305
+ *
306
+ * VALIDAÇÕES:
307
+ * - e repo obrigatórios
308
+ * - Page deve ser >= 1
309
+ * - Limit deve ser entre 1 e 100
310
+ *
311
+ * RECOMENDAÇÕES:
312
+ * - Use paginação para repositórios com muitas tags
313
+ * - Monitore número total de tags
314
+ * - Verifique commit alvo de cada tag
315
+ * - Mantenha tags organizadas
316
+ */
317
+ async listTags(params, provider) {
318
+ try {
319
+ if (!params.repo) {
320
+ throw new Error('Repo é obrigatório');
321
+ }
322
+ const currentUser = await provider.getCurrentUser();
323
+ const owner = currentUser.login;
324
+ const page = params.page || 1;
325
+ const limit = params.limit || 30;
326
+ const tags = await provider.listTags((await provider.getCurrentUser()).login, params.repo, page, limit);
327
+ return {
328
+ success: true,
329
+ action: 'list',
330
+ message: `${tags.length} tags encontradas`,
331
+ data: {
332
+ tags,
333
+ page,
334
+ limit,
335
+ total: tags.length
336
+ }
337
+ };
338
+ }
339
+ catch (error) {
340
+ throw new Error(`Falha ao listar tags: ${error instanceof Error ? error.message : String(error)}`);
341
+ }
342
+ },
343
+ /**
344
+ * Obtém detalhes de uma tag específica
345
+ *
346
+ * FUNCIONALIDADE:
347
+ * - Retorna informações completas da tag
348
+ * - Inclui nome, commit alvo e URLs
349
+ * - Mostra tipo da tag (lightweight/anotada)
350
+ *
351
+ * PARÂMETROS OBRIGATÓRIOS:
352
+ * - owner: Proprietário do repositório
353
+ * - repo: Nome do repositório
354
+ * - tag: Nome da tag
355
+ *
356
+ * VALIDAÇÕES:
357
+ * - Todos os parâmetros obrigatórios
358
+ * - Tag deve existir no repositório
359
+ * - Nome deve ser válido
360
+ *
361
+ * RECOMENDAÇÕES:
362
+ * - Use para obter detalhes completos
363
+ * - Verifique commit alvo da tag
364
+ * - Analise URLs de download
365
+ * - Monitore mudanças importantes
366
+ */
367
+ async getTag(params, provider) {
368
+ try {
369
+ if (!params.repo || !params.tag) {
370
+ throw new Error('Repo e tag são obrigatórios');
371
+ }
372
+ const currentUser = await provider.getCurrentUser();
373
+ const owner = currentUser.login;
374
+ // Implementar obtenção de tag específica
375
+ // Por enquanto, retorna mensagem de funcionalidade
376
+ return {
377
+ success: true,
378
+ action: 'get',
379
+ message: `Tag '${params.tag}' obtida com sucesso`,
380
+ data: {
381
+ tag: params.tag,
382
+ note: 'Funcionalidade de obtenção de tag específica será implementada'
383
+ }
384
+ };
385
+ }
386
+ catch (error) {
387
+ throw new Error(`Falha ao obter tag: ${error instanceof Error ? error.message : String(error)}`);
388
+ }
389
+ },
390
+ /**
391
+ * Deleta uma tag do repositório
392
+ *
393
+ * FUNCIONALIDADE:
394
+ * - Remove tag especificada
395
+ * - Mantém commit alvo intacto
396
+ * - Confirma exclusão bem-sucedida
397
+ *
398
+ * PARÂMETROS OBRIGATÓRIOS:
399
+ * - owner: Proprietário do repositório
400
+ * - repo: Nome do repositório
401
+ * - tag: Nome da tag
402
+ *
403
+ * VALIDAÇÕES:
404
+ * - Todos os parâmetros obrigatórios
405
+ * - Tag deve existir
406
+ * - Usuário deve ter permissão de exclusão
407
+ *
408
+ * RECOMENDAÇÕES:
409
+ * - Confirme exclusão antes de executar
410
+ * - Verifique se tag não está sendo usada
411
+ * - Mantenha backup se necessário
412
+ * - Documente motivo da exclusão
413
+ */
414
+ async deleteTag(params, provider) {
415
+ try {
416
+ if (!params.repo || !params.tag) {
417
+ throw new Error('Repo e tag são obrigatórios');
418
+ }
419
+ const currentUser = await provider.getCurrentUser();
420
+ const owner = currentUser.login;
421
+ await provider.deleteTag((await provider.getCurrentUser()).login, params.repo, params.tag);
422
+ return {
423
+ success: true,
424
+ action: 'delete',
425
+ message: `Tag '${params.tag}' deletada com sucesso`,
426
+ data: { deleted: true }
427
+ };
428
+ }
429
+ catch (error) {
430
+ throw new Error(`Falha ao deletar tag: ${error instanceof Error ? error.message : String(error)}`);
431
+ }
432
+ },
433
+ /**
434
+ * Busca tags por critérios específicos
435
+ *
436
+ * FUNCIONALIDADE:
437
+ * - Busca tags por nome ou padrão
438
+ * - Suporta padrões glob (ex: v*.*.*)
439
+ * - Retorna resultados relevantes
440
+ *
441
+ * PARÂMETROS OBRIGATÓRIOS:
442
+ * - owner: Proprietário do repositório
443
+ * - repo: Nome do repositório
444
+ *
445
+ * PARÂMETROS OPCIONAIS:
446
+ * - query: Termo de busca
447
+ * - pattern: Padrão de busca (ex: v*.*.*)
448
+ *
449
+ * VALIDAÇÕES:
450
+ * - e repo obrigatórios
451
+ * - Query ou pattern deve ser fornecido
452
+ * - Repositório deve existir
453
+ *
454
+ * RECOMENDAÇÕES:
455
+ * - Use padrões glob para busca eficiente
456
+ * - Combine com filtros de nome
457
+ * - Analise resultados para relevância
458
+ * - Use para encontrar tags relacionadas
459
+ */
460
+ async searchTags(params, provider) {
461
+ try {
462
+ if (!params.repo) {
463
+ throw new Error('Repo é obrigatório');
464
+ }
465
+ if (!params.query && !params.pattern) {
466
+ throw new Error('Query ou pattern deve ser fornecido');
467
+ }
468
+ // Implementar busca de tags
469
+ // Por enquanto, retorna mensagem de funcionalidade
470
+ return {
471
+ success: true,
472
+ action: 'search',
473
+ message: `Busca por tags solicitada`,
474
+ data: {
475
+ query: params.query || 'não fornecido',
476
+ pattern: params.pattern || 'não fornecido',
477
+ results: 'Funcionalidade de busca será implementada'
478
+ }
479
+ };
480
+ }
481
+ catch (error) {
482
+ throw new Error(`Falha ao buscar tags: ${error instanceof Error ? error.message : String(error)}`);
483
+ }
484
+ }
485
+ };
486
486
  //# sourceMappingURL=git-tags.js.map