@andrebuzeli/git-mcp 2.28.1 → 2.28.2

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