@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,558 +1,559 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.releasesTool = 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: releases
9
- *
10
- * DESCRIÇÃO:
11
- * Gerenciamento completo de releases com suporte multi-provider (GitHub e Gitea)
12
- *
13
- * FUNCIONALIDADES:
14
- * - Criação de novos releases
15
- * - Listagem e busca de releases
16
- * - Obtenção de detalhes específicos
17
- * - Atualização de releases existentes
18
- * - Publicação de releases
19
- * - Exclusão de releases
20
- * - Controle de versão
21
- *
22
- * USO:
23
- * - Para gerenciar versões do software
24
- * - Para controle de deploy
25
- * - Para documentação de mudanças
26
- * - Para distribuição de releases
27
- *
28
- * RECOMENDAÇÕES:
29
- * - Use versionamento semântico
30
- * - Documente mudanças detalhadamente
31
- * - Teste antes de publicar
32
- * - Mantenha histórico de versões
33
- */
34
- /**
35
- * Schema de validação para entrada da tool releases
36
- *
37
- * VALIDAÇÕES:
38
- * - action: Ação obrigatória (create, list, get, update, delete, publish)
39
- * - Parâmetros específicos por ação
40
- * - Validação de tipos e formatos
41
- *
42
- * RECOMENDAÇÕES:
43
- * - Sempre valide entrada antes de usar
44
- * - Use parâmetros opcionais adequadamente
45
- * - Documente parâmetros obrigatórios
46
- */
47
- const ReleasesInputSchema = zod_1.z.object({
48
- action: zod_1.z.enum(['create', 'list', 'get', 'update', 'delete', 'publish']),
49
- // Parâmetros comuns
50
- repo: zod_1.z.string(),
51
- // Para multi-provider
52
- provider: zod_1.z.enum(['gitea', 'github']).describe('Provider to use (gitea or github)'), // Provider específico: gitea, github ou both
53
- // Para create
54
- tag_name: zod_1.z.string().optional(),
55
- name: zod_1.z.string().optional(),
56
- body: zod_1.z.string().optional(),
57
- draft: zod_1.z.boolean().optional(),
58
- prerelease: zod_1.z.boolean().optional(),
59
- target_commitish: zod_1.z.string().optional(),
60
- // Para get/update/delete/publish
61
- release_id: zod_1.z.number().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 update
66
- new_tag_name: zod_1.z.string().optional(),
67
- new_name: zod_1.z.string().optional(),
68
- new_body: zod_1.z.string().optional(),
69
- new_draft: zod_1.z.boolean().optional(),
70
- new_prerelease: zod_1.z.boolean().optional(),
71
- new_target_commitish: zod_1.z.string().optional(),
72
- // Para publish
73
- latest: zod_1.z.boolean().optional(),
74
- });
75
- /**
76
- * Schema de saída padronizado
77
- *
78
- * ESTRUTURA:
79
- * - success: Status da operação
80
- * - action: Ação executada
81
- * - message: Mensagem descritiva
82
- * - data: Dados retornados (opcional)
83
- * - error: Detalhes do erro (opcional)
84
- */
85
- const ReleasesResultSchema = zod_1.z.object({
86
- success: zod_1.z.boolean(),
87
- action: zod_1.z.string(),
88
- message: zod_1.z.string(),
89
- data: zod_1.z.any().optional(),
90
- error: zod_1.z.string().optional()
91
- });
92
- /**
93
- * Tool: releases
94
- *
95
- * DESCRIÇÃO:
96
- * Gerenciamento completo de releases Gitea com múltiplas ações
97
- *
98
- * ACTIONS DISPONÍVEIS:
99
- *
100
- * 1. create - Criar novo release
101
- * Parâmetros:
102
- * - owner (obrigatório): Proprietário do repositório
103
- * - repo (obrigatório): Nome do repositório
104
- * - tag_name (obrigatório): Nome da tag do release
105
- * - name (opcional): Nome do release
106
- * - body (opcional): Descrição detalhada (changelog)
107
- * - draft (opcional): Se é um draft release (padrão: false)
108
- * - prerelease (opcional): Se é um prerelease (padrão: false)
109
- * - target_commitish (opcional): Branch ou commit alvo (padrão: branch padrão)
110
- *
111
- * 2. list - Listar releases
112
- * Parâmetros:
113
- * - owner (obrigatório): Proprietário do repositório
114
- * - repo (obrigatório): Nome do repositório
115
- * - page (opcional): Página da listagem (padrão: 1)
116
- * - limit (opcional): Itens por página (padrão: 30, máximo: 100)
117
- *
118
- * 3. get - Obter detalhes do release
119
- * Parâmetros:
120
- * - owner (obrigatório): Proprietário do repositório
121
- * - repo (obrigatório): Nome do repositório
122
- * - release_id (obrigatório): ID do release
123
- *
124
- * 4. update - Atualizar release existente
125
- * Parâmetros:
126
- * - owner (obrigatório): Proprietário do repositório
127
- * - repo (obrigatório): Nome do repositório
128
- * - release_id (obrigatório): ID do release
129
- * - new_tag_name (opcional): Nova tag
130
- * - new_name (opcional): Novo nome
131
- * - new_body (opcional): Nova descrição
132
- * - new_draft (opcional): Novo status de draft
133
- * - new_prerelease (opcional): Novo status de prerelease
134
- * - new_target_commitish (opcional): Nova branch/commit alvo
135
- *
136
- * 5. delete - Deletar release
137
- * Parâmetros:
138
- * - owner (obrigatório): Proprietário do repositório
139
- * - repo (obrigatório): Nome do repositório
140
- * - release_id (obrigatório): ID do release
141
- *
142
- * 6. publish - Publicar release
143
- * Parâmetros:
144
- * - owner (obrigatório): Proprietário do repositório
145
- * - repo (obrigatório): Nome do repositório
146
- * - release_id (obrigatório): ID do release
147
- *
148
- * RECOMENDAÇÕES DE USO:
149
- * - Use versionamento semântico (ex: v1.0.0, v2.1.3)
150
- * - Documente mudanças detalhadamente no body
151
- * - Use drafts para releases em preparação
152
- * - Marque prereleases adequadamente
153
- * - Teste releases antes de publicar
154
- * - Mantenha changelog organizado
155
- */
156
- exports.releasesTool = {
157
- name: 'git-releases',
158
- description: 'tool: Gerencia releases Git para distribuição de versões\n──────────────\naction create: cria nova release\naction create requires: repo, tag_name, name, body, draft, prerelease, target_commitish, provider\n───────────────\naction list: lista releases do repositório\naction list requires: repo, page, limit, provider\n───────────────\naction get: obtém detalhes de release\naction get requires: repo, release_id, provider\n───────────────\naction update: atualiza release existente\naction update requires: repo, release_id, new_tag_name, new_name, new_body, new_draft, new_prerelease, new_target_commitish, provider\n───────────────\naction delete: remove release\naction delete requires: repo, release_id, provider\n───────────────\naction publish: publica release\naction publish requires: repo, release_id, latest, provider',
159
- inputSchema: {
160
- type: 'object',
161
- properties: {
162
- action: {
163
- type: 'string',
164
- enum: ['create', 'list', 'get', 'update', 'delete', 'publish'],
165
- description: 'Action to perform on releases'
166
- },
167
- repo: { type: 'string', description: 'Repository name' },
168
- provider: { type: 'string', description: 'Provider to use (github, gitea, or omit for default)' },
169
- tag_name: { type: 'string', description: 'Release tag name' },
170
- name: { type: 'string', description: 'Release name' },
171
- body: { type: 'string', description: 'Release description/notes' },
172
- draft: { type: 'boolean', description: 'Create as draft release' },
173
- prerelease: { type: 'boolean', description: 'Mark as prerelease' },
174
- target_commitish: { type: 'string', description: 'Target branch or commit' },
175
- release_id: { type: 'number', description: 'Release ID' },
176
- page: { type: 'number', description: 'Page number', minimum: 1 },
177
- limit: { type: 'number', description: 'Items per page', minimum: 1, maximum: 100 },
178
- new_tag_name: { type: 'string', description: 'New tag name' },
179
- new_name: { type: 'string', description: 'New release name' },
180
- new_body: { type: 'string', description: 'New release description' },
181
- new_draft: { type: 'boolean', description: 'New draft status' },
182
- new_prerelease: { type: 'boolean', description: 'New prerelease status' },
183
- new_target_commitish: { type: 'string', description: 'New target branch or commit' },
184
- latest: { type: 'boolean', description: 'Get latest release' }
185
- },
186
- required: ['action', 'repo', 'provider']
187
- },
188
- /**
189
- * Handler principal da tool releases
190
- *
191
- * FUNCIONALIDADE:
192
- * - Valida entrada usando Zod schema
193
- * - Roteia para método específico baseado na ação
194
- * - Trata erros de forma uniforme
195
- * - Retorna resultado padronizado
196
- *
197
- * FLUXO:
198
- * 1. Validação de entrada
199
- * 2. Seleção do provider
200
- * 3. Roteamento por ação
201
- * 4. Execução do método específico
202
- * 5. Tratamento de erros
203
- * 6. Retorno de resultado
204
- *
205
- * TRATAMENTO DE ERROS:
206
- * - Validação: erro de schema
207
- * - Execução: erro da operação
208
- * - Roteamento: ação não suportada
209
- *
210
- * RECOMENDAÇÕES:
211
- * - Sempre valide entrada antes de processar
212
- * - Trate erros específicos adequadamente
213
- * - Log detalhes de erro para debug
214
- * - Retorne mensagens de erro úteis
215
- */
216
- async handler(input) {
217
- try {
218
- const validatedInput = ReleasesInputSchema.parse(input);
219
- // Aplicar auto-detecção apenas para owner dentro do provider especificado
220
- const processedInput = await (0, user_detection_js_1.applyAutoUserDetection)(validatedInput, validatedInput.provider);
221
- // Usar o provider especificado pelo usuário
222
- const provider = index_js_1.globalProviderFactory.getProvider(processedInput.provider);
223
- if (!provider) {
224
- throw new Error(`Provider '${processedInput.provider}' não encontrado`);
225
- }
226
- switch (processedInput.action) {
227
- case 'create':
228
- return await this.createRelease(processedInput, provider);
229
- case 'list':
230
- return await this.listReleases(processedInput, provider);
231
- case 'get':
232
- return await this.getRelease(processedInput, provider);
233
- case 'update':
234
- return await this.updateRelease(processedInput, provider);
235
- case 'delete':
236
- return await this.deleteRelease(processedInput, provider);
237
- case 'publish':
238
- return await this.publishRelease(processedInput, provider);
239
- default:
240
- throw new Error(`Ação não suportada: ${processedInput.action}`);
241
- }
242
- }
243
- catch (error) {
244
- return {
245
- success: false,
246
- action: input.action,
247
- message: 'Erro na operação de releases',
248
- error: error instanceof Error ? error.message : String(error)
249
- };
250
- }
251
- },
252
- /**
253
- * Cria um novo release no repositório
254
- *
255
- * FUNCIONALIDADE:
256
- * - Cria release com tag e descrição
257
- * - Suporta configuração de draft e prerelease
258
- * - Permite especificar branch/commit alvo
259
- *
260
- * PARÂMETROS OBRIGATÓRIOS:
261
- * - owner: Proprietário do repositório
262
- * - repo: Nome do repositório
263
- * - tag_name: Nome da tag do release
264
- *
265
- * PARÂMETROS OPCIONAIS:
266
- * - name: Nome do release
267
- * - body: Descrição detalhada (changelog)
268
- * - draft: Se é um draft release (padrão: false)
269
- * - prerelease: Se é um prerelease (padrão: false)
270
- * - target_commitish: Branch ou commit alvo (padrão: branch padrão)
271
- *
272
- * VALIDAÇÕES:
273
- * - Todos os parâmetros obrigatórios
274
- * - Tag deve ser única no repositório
275
- * - Target commitish deve existir
276
- * - Usuário deve ter permissão de escrita
277
- *
278
- * RECOMENDAÇÕES:
279
- * - Use versionamento semântico (ex: v1.0.0)
280
- * - Documente mudanças detalhadamente
281
- * - Use drafts para releases em preparação
282
- * - Marque prereleases adequadamente
283
- */
284
- async createRelease(params, provider) {
285
- try {
286
- if (!params.repo || !params.tag_name) {
287
- throw new Error('repo e tag_name são obrigatórios');
288
- }
289
- const releaseData = {
290
- tag_name: params.tag_name,
291
- name: params.name || params.tag_name,
292
- body: params.body || '',
293
- draft: params.draft || false,
294
- prerelease: params.prerelease || false,
295
- target_commitish: params.target_commitish || 'main'
296
- };
297
- const owner = (await provider.getCurrentUser()).login;
298
- const release = await provider.createRelease(owner, params.repo, {
299
- tag_name: params.tag_name,
300
- name: params.name || params.tag_name,
301
- body: params.body || '',
302
- draft: params.draft || false,
303
- prerelease: params.prerelease || false,
304
- target_commitish: params.target_commitish || 'main'
305
- });
306
- return {
307
- success: true,
308
- action: 'create',
309
- message: `Release '${params.tag_name}' criado com sucesso`,
310
- data: release
311
- };
312
- }
313
- catch (error) {
314
- throw new Error(`Falha ao criar release: ${error instanceof Error ? error.message : String(error)}`);
315
- }
316
- },
317
- /**
318
- * Lista releases do repositório
319
- *
320
- * FUNCIONALIDADE:
321
- * - Lista releases com paginação
322
- * - Retorna informações básicas de cada release
323
- * - Inclui status de draft e prerelease
324
- *
325
- * PARÂMETROS OBRIGATÓRIOS:
326
- * - owner: Proprietário do repositório
327
- * - repo: Nome do repositório
328
- *
329
- * PARÂMETROS OPCIONAIS:
330
- * - page: Página da listagem (padrão: 1)
331
- * - limit: Itens por página (padrão: 30, máximo: 100)
332
- *
333
- * VALIDAÇÕES:
334
- * - e repo obrigatórios
335
- * - Page deve ser >= 1
336
- * - Limit deve ser entre 1 e 100
337
- *
338
- * RECOMENDAÇÕES:
339
- * - Use paginação para repositórios com muitos releases
340
- * - Monitore número total de releases
341
- * - Verifique status de draft e prerelease
342
- * - Mantenha releases organizados
343
- */
344
- async listReleases(params, provider) {
345
- try {
346
- if (!params.repo) {
347
- throw new Error('e repo são obrigatórios');
348
- }
349
- const page = params.page || 1;
350
- const limit = params.limit || 30;
351
- const releases = await provider.listReleases((await provider.getCurrentUser()).login, params.repo, page, limit);
352
- return {
353
- success: true,
354
- action: 'list',
355
- message: `${releases.length} releases encontrados`,
356
- data: {
357
- releases,
358
- page,
359
- limit,
360
- total: releases.length
361
- }
362
- };
363
- }
364
- catch (error) {
365
- throw new Error(`Falha ao listar releases: ${error instanceof Error ? error.message : String(error)}`);
366
- }
367
- },
368
- /**
369
- * Obtém detalhes de um release específico
370
- *
371
- * FUNCIONALIDADE:
372
- * - Retorna informações completas do release
373
- * - Inclui tag, nome, descrição e status
374
- * - Mostra URLs de download
375
- *
376
- * PARÂMETROS OBRIGATÓRIOS:
377
- * - owner: Proprietário do repositório
378
- * - repo: Nome do repositório
379
- * - release_id: ID do release
380
- *
381
- * VALIDAÇÕES:
382
- * - Todos os parâmetros obrigatórios
383
- * - Release deve existir no repositório
384
- * - ID deve ser válido
385
- *
386
- * RECOMENDAÇÕES:
387
- * - Use para obter detalhes completos
388
- * - Verifique status de draft e prerelease
389
- * - Analise changelog e descrição
390
- * - Monitore URLs de download
391
- */
392
- async getRelease(params, provider) {
393
- try {
394
- if (!params.repo || !params.release_id) {
395
- throw new Error('repo e release_id são obrigatórios');
396
- }
397
- const release = await provider.getRelease((await provider.getCurrentUser()).login, params.repo, params.release_id);
398
- return {
399
- success: true,
400
- action: 'get',
401
- message: `Release #${params.release_id} obtido com sucesso`,
402
- data: release
403
- };
404
- }
405
- catch (error) {
406
- throw new Error(`Falha ao obter release: ${error instanceof Error ? error.message : String(error)}`);
407
- }
408
- },
409
- /**
410
- * Atualiza um release existente
411
- *
412
- * FUNCIONALIDADE:
413
- * - Atualiza campos do release
414
- * - Suporta mudança de tag e descrição
415
- * - Permite alteração de status
416
- *
417
- * PARÂMETROS OBRIGATÓRIOS:
418
- * - owner: Proprietário do repositório
419
- * - repo: Nome do repositório
420
- * - release_id: ID do release
421
- *
422
- * PARÂMETROS OPCIONAIS:
423
- * - new_tag_name: Nova tag
424
- * - new_name: Novo nome
425
- * - new_body: Nova descrição
426
- * - new_draft: Novo status de draft
427
- * - new_prerelease: Novo status de prerelease
428
- * - new_target_commitish: Nova branch/commit alvo
429
- *
430
- * VALIDAÇÕES:
431
- * - Todos os parâmetros obrigatórios
432
- * - Release deve existir
433
- * - Pelo menos um campo deve ser atualizado
434
- *
435
- * RECOMENDAÇÕES:
436
- * - Atualize apenas campos necessários
437
- * - Use mensagens de commit descritivas
438
- * - Documente mudanças importantes
439
- * - Notifique usuários sobre mudanças
440
- */
441
- async updateRelease(params, provider) {
442
- try {
443
- if (!params.repo || !params.release_id) {
444
- throw new Error('repo e release_id são obrigatórios');
445
- }
446
- const updateData = {};
447
- if (params.new_tag_name)
448
- updateData.tag_name = params.new_tag_name;
449
- if (params.new_name)
450
- updateData.name = params.new_name;
451
- if (params.new_body !== undefined)
452
- updateData.body = params.new_body;
453
- if (params.new_draft !== undefined)
454
- updateData.draft = params.new_draft;
455
- if (params.new_prerelease !== undefined)
456
- updateData.prerelease = params.new_prerelease;
457
- if (params.new_target_commitish)
458
- updateData.target_commitish = params.new_target_commitish;
459
- if (Object.keys(updateData).length === 0) {
460
- throw new Error('Nenhum campo para atualizar foi fornecido');
461
- }
462
- const release = await provider.updateRelease(params.release_id, updateData);
463
- return {
464
- success: true,
465
- action: 'update',
466
- message: `Release #${params.release_id} atualizado com sucesso`,
467
- data: release
468
- };
469
- }
470
- catch (error) {
471
- throw new Error(`Falha ao atualizar release: ${error instanceof Error ? error.message : String(error)}`);
472
- }
473
- },
474
- /**
475
- * Deleta um release do repositório
476
- *
477
- * FUNCIONALIDADE:
478
- * - Remove release especificado
479
- * - Mantém tag associada (se existir)
480
- * - Confirma exclusão bem-sucedida
481
- *
482
- * PARÂMETROS OBRIGATÓRIOS:
483
- * - owner: Proprietário do repositório
484
- * - repo: Nome do repositório
485
- * - release_id: ID do release
486
- *
487
- * VALIDAÇÕES:
488
- * - Todos os parâmetros obrigatórios
489
- * - Release deve existir
490
- * - Usuário deve ter permissão de exclusão
491
- *
492
- * RECOMENDAÇÕES:
493
- * - Confirme exclusão antes de executar
494
- * - Verifique se release não está sendo usado
495
- * - Mantenha backup se necessário
496
- * - Documente motivo da exclusão
497
- */
498
- async deleteRelease(params, provider) {
499
- try {
500
- if (!params.repo || !params.release_id) {
501
- throw new Error('repo e release_id são obrigatórios');
502
- }
503
- await provider.deleteRelease(params.release_id);
504
- return {
505
- success: true,
506
- action: 'delete',
507
- message: `Release #${params.release_id} deletado com sucesso`,
508
- data: { deleted: true }
509
- };
510
- }
511
- catch (error) {
512
- throw new Error(`Falha ao deletar release: ${error instanceof Error ? error.message : String(error)}`);
513
- }
514
- },
515
- /**
516
- * Publica um release draft
517
- *
518
- * FUNCIONALIDADE:
519
- * - Altera status do release de draft para publicado
520
- * - Mantém todas as outras configurações
521
- * - Permite download público
522
- *
523
- * PARÂMETROS OBRIGATÓRIOS:
524
- * - owner: Proprietário do repositório
525
- * - repo: Nome do repositório
526
- * - release_id: ID do release
527
- *
528
- * VALIDAÇÕES:
529
- * - Todos os parâmetros obrigatórios
530
- * - Release deve existir
531
- * - Release deve estar como draft
532
- *
533
- * RECOMENDAÇÕES:
534
- * - Confirme que release está pronto
535
- * - Teste antes de publicar
536
- * - Verifique se não há bugs conhecidos
537
- * - Notifique usuários sobre nova versão
538
- */
539
- async publishRelease(params, provider) {
540
- try {
541
- if (!params.repo || !params.release_id) {
542
- throw new Error('repo e release_id são obrigatórios');
543
- }
544
- // Publicar release alterando status de draft para false
545
- const release = await provider.updateRelease(params.release_id, { draft: false });
546
- return {
547
- success: true,
548
- action: 'publish',
549
- message: `Release #${params.release_id} publicado com sucesso`,
550
- data: release
551
- };
552
- }
553
- catch (error) {
554
- throw new Error(`Falha ao publicar release: ${error instanceof Error ? error.message : String(error)}`);
555
- }
556
- }
557
- };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.releasesTool = 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: releases
9
+ *
10
+ * DESCRIÇÃO:
11
+ * Gerenciamento completo de releases com suporte multi-provider (GitHub e Gitea)
12
+ *
13
+ * FUNCIONALIDADES:
14
+ * - Criação de novos releases
15
+ * - Listagem e busca de releases
16
+ * - Obtenção de detalhes específicos
17
+ * - Atualização de releases existentes
18
+ * - Publicação de releases
19
+ * - Exclusão de releases
20
+ * - Controle de versão
21
+ *
22
+ * USO:
23
+ * - Para gerenciar versões do software
24
+ * - Para controle de deploy
25
+ * - Para documentação de mudanças
26
+ * - Para distribuição de releases
27
+ *
28
+ * RECOMENDAÇÕES:
29
+ * - Use versionamento semântico
30
+ * - Documente mudanças detalhadamente
31
+ * - Teste antes de publicar
32
+ * - Mantenha histórico de versões
33
+ */
34
+ /**
35
+ * Schema de validação para entrada da tool releases
36
+ *
37
+ * VALIDAÇÕES:
38
+ * - action: Ação obrigatória (create, list, get, update, delete, publish)
39
+ * - Parâmetros específicos por ação
40
+ * - Validação de tipos e formatos
41
+ *
42
+ * RECOMENDAÇÕES:
43
+ * - Sempre valide entrada antes de usar
44
+ * - Use parâmetros opcionais adequadamente
45
+ * - Documente parâmetros obrigatórios
46
+ */
47
+ const ReleasesInputSchema = zod_1.z.object({
48
+ action: zod_1.z.enum(['create', 'list', 'get', 'update', 'delete', 'publish']),
49
+ // Parâmetros comuns
50
+ repo: zod_1.z.string(),
51
+ // Para multi-provider
52
+ provider: zod_1.z.enum(['gitea', 'github']).describe('Provider to use (gitea or github)'), // Provider específico: gitea, github ou both
53
+ projectPath: zod_1.z.string().describe('Local project path for git operations'),
54
+ // Para create
55
+ tag_name: zod_1.z.string().optional(),
56
+ name: zod_1.z.string().optional(),
57
+ body: zod_1.z.string().optional(),
58
+ draft: zod_1.z.boolean().optional(),
59
+ prerelease: zod_1.z.boolean().optional(),
60
+ target_commitish: zod_1.z.string().optional(),
61
+ // Para get/update/delete/publish
62
+ release_id: zod_1.z.number().optional(),
63
+ // Para list
64
+ page: zod_1.z.number().min(1).optional(),
65
+ limit: zod_1.z.number().min(1).max(100).optional(),
66
+ // Para update
67
+ new_tag_name: zod_1.z.string().optional(),
68
+ new_name: zod_1.z.string().optional(),
69
+ new_body: zod_1.z.string().optional(),
70
+ new_draft: zod_1.z.boolean().optional(),
71
+ new_prerelease: zod_1.z.boolean().optional(),
72
+ new_target_commitish: zod_1.z.string().optional(),
73
+ // Para publish
74
+ latest: zod_1.z.boolean().optional(),
75
+ });
76
+ /**
77
+ * Schema de saída padronizado
78
+ *
79
+ * ESTRUTURA:
80
+ * - success: Status da operação
81
+ * - action: Ação executada
82
+ * - message: Mensagem descritiva
83
+ * - data: Dados retornados (opcional)
84
+ * - error: Detalhes do erro (opcional)
85
+ */
86
+ const ReleasesResultSchema = zod_1.z.object({
87
+ success: zod_1.z.boolean(),
88
+ action: zod_1.z.string(),
89
+ message: zod_1.z.string(),
90
+ data: zod_1.z.any().optional(),
91
+ error: zod_1.z.string().optional()
92
+ });
93
+ /**
94
+ * Tool: releases
95
+ *
96
+ * DESCRIÇÃO:
97
+ * Gerenciamento completo de releases Gitea com múltiplas ações
98
+ *
99
+ * ACTIONS DISPONÍVEIS:
100
+ *
101
+ * 1. create - Criar novo release
102
+ * Parâmetros:
103
+ * - owner (obrigatório): Proprietário do repositório
104
+ * - repo (obrigatório): Nome do repositório
105
+ * - tag_name (obrigatório): Nome da tag do release
106
+ * - name (opcional): Nome do release
107
+ * - body (opcional): Descrição detalhada (changelog)
108
+ * - draft (opcional): Se é um draft release (padrão: false)
109
+ * - prerelease (opcional): Se é um prerelease (padrão: false)
110
+ * - target_commitish (opcional): Branch ou commit alvo (padrão: branch padrão)
111
+ *
112
+ * 2. list - Listar releases
113
+ * Parâmetros:
114
+ * - owner (obrigatório): Proprietário do repositório
115
+ * - repo (obrigatório): Nome do repositório
116
+ * - page (opcional): Página da listagem (padrão: 1)
117
+ * - limit (opcional): Itens por página (padrão: 30, máximo: 100)
118
+ *
119
+ * 3. get - Obter detalhes do release
120
+ * Parâmetros:
121
+ * - owner (obrigatório): Proprietário do repositório
122
+ * - repo (obrigatório): Nome do repositório
123
+ * - release_id (obrigatório): ID do release
124
+ *
125
+ * 4. update - Atualizar release existente
126
+ * Parâmetros:
127
+ * - owner (obrigatório): Proprietário do repositório
128
+ * - repo (obrigatório): Nome do repositório
129
+ * - release_id (obrigatório): ID do release
130
+ * - new_tag_name (opcional): Nova tag
131
+ * - new_name (opcional): Novo nome
132
+ * - new_body (opcional): Nova descrição
133
+ * - new_draft (opcional): Novo status de draft
134
+ * - new_prerelease (opcional): Novo status de prerelease
135
+ * - new_target_commitish (opcional): Nova branch/commit alvo
136
+ *
137
+ * 5. delete - Deletar release
138
+ * Parâmetros:
139
+ * - owner (obrigatório): Proprietário do repositório
140
+ * - repo (obrigatório): Nome do repositório
141
+ * - release_id (obrigatório): ID do release
142
+ *
143
+ * 6. publish - Publicar release
144
+ * Parâmetros:
145
+ * - owner (obrigatório): Proprietário do repositório
146
+ * - repo (obrigatório): Nome do repositório
147
+ * - release_id (obrigatório): ID do release
148
+ *
149
+ * RECOMENDAÇÕES DE USO:
150
+ * - Use versionamento semântico (ex: v1.0.0, v2.1.3)
151
+ * - Documente mudanças detalhadamente no body
152
+ * - Use drafts para releases em preparação
153
+ * - Marque prereleases adequadamente
154
+ * - Teste releases antes de publicar
155
+ * - Mantenha changelog organizado
156
+ */
157
+ exports.releasesTool = {
158
+ name: 'git-releases',
159
+ description: 'tool: Gerencia releases Git para distribuição de versões\n──────────────\naction create: cria nova release\naction create requires: repo, tag_name, name, body, draft, prerelease, target_commitish, provider\n───────────────\naction list: lista releases do repositório\naction list requires: repo, page, limit, provider\n───────────────\naction get: obtém detalhes de release\naction get requires: repo, release_id, provider\n───────────────\naction update: atualiza release existente\naction update requires: repo, release_id, new_tag_name, new_name, new_body, new_draft, new_prerelease, new_target_commitish, provider\n───────────────\naction delete: remove release\naction delete requires: repo, release_id, provider\n───────────────\naction publish: publica release\naction publish requires: repo, release_id, latest, provider',
160
+ inputSchema: {
161
+ type: 'object',
162
+ properties: {
163
+ action: {
164
+ type: 'string',
165
+ enum: ['create', 'list', 'get', 'update', 'delete', 'publish'],
166
+ description: 'Action to perform on releases'
167
+ },
168
+ repo: { type: 'string', description: 'Repository name' },
169
+ provider: { type: 'string', description: 'Provider to use (github, gitea, or omit for default)' },
170
+ tag_name: { type: 'string', description: 'Release tag name' },
171
+ name: { type: 'string', description: 'Release name' },
172
+ body: { type: 'string', description: 'Release description/notes' },
173
+ draft: { type: 'boolean', description: 'Create as draft release' },
174
+ prerelease: { type: 'boolean', description: 'Mark as prerelease' },
175
+ target_commitish: { type: 'string', description: 'Target branch or commit' },
176
+ release_id: { type: 'number', description: 'Release ID' },
177
+ page: { type: 'number', description: 'Page number', minimum: 1 },
178
+ limit: { type: 'number', description: 'Items per page', minimum: 1, maximum: 100 },
179
+ new_tag_name: { type: 'string', description: 'New tag name' },
180
+ new_name: { type: 'string', description: 'New release name' },
181
+ new_body: { type: 'string', description: 'New release description' },
182
+ new_draft: { type: 'boolean', description: 'New draft status' },
183
+ new_prerelease: { type: 'boolean', description: 'New prerelease status' },
184
+ new_target_commitish: { type: 'string', description: 'New target branch or commit' },
185
+ latest: { type: 'boolean', description: 'Get latest release' }
186
+ },
187
+ required: ['action', 'repo', 'provider', 'projectPath']
188
+ },
189
+ /**
190
+ * Handler principal da tool releases
191
+ *
192
+ * FUNCIONALIDADE:
193
+ * - Valida entrada usando Zod schema
194
+ * - Roteia para método específico baseado na ação
195
+ * - Trata erros de forma uniforme
196
+ * - Retorna resultado padronizado
197
+ *
198
+ * FLUXO:
199
+ * 1. Validação de entrada
200
+ * 2. Seleção do provider
201
+ * 3. Roteamento por ação
202
+ * 4. Execução do método específico
203
+ * 5. Tratamento de erros
204
+ * 6. Retorno de resultado
205
+ *
206
+ * TRATAMENTO DE ERROS:
207
+ * - Validação: erro de schema
208
+ * - Execução: erro da operação
209
+ * - Roteamento: ação não suportada
210
+ *
211
+ * RECOMENDAÇÕES:
212
+ * - Sempre valide entrada antes de processar
213
+ * - Trate erros específicos adequadamente
214
+ * - Log detalhes de erro para debug
215
+ * - Retorne mensagens de erro úteis
216
+ */
217
+ async handler(input) {
218
+ try {
219
+ const validatedInput = ReleasesInputSchema.parse(input);
220
+ // Aplicar auto-detecção apenas para owner dentro do provider especificado
221
+ const processedInput = await (0, user_detection_js_1.applyAutoUserDetection)(validatedInput, validatedInput.provider);
222
+ // Usar o provider especificado pelo usuário
223
+ const provider = index_js_1.globalProviderFactory.getProvider(processedInput.provider);
224
+ if (!provider) {
225
+ throw new Error(`Provider '${processedInput.provider}' não encontrado`);
226
+ }
227
+ switch (processedInput.action) {
228
+ case 'create':
229
+ return await this.createRelease(processedInput, provider);
230
+ case 'list':
231
+ return await this.listReleases(processedInput, provider);
232
+ case 'get':
233
+ return await this.getRelease(processedInput, provider);
234
+ case 'update':
235
+ return await this.updateRelease(processedInput, provider);
236
+ case 'delete':
237
+ return await this.deleteRelease(processedInput, provider);
238
+ case 'publish':
239
+ return await this.publishRelease(processedInput, provider);
240
+ default:
241
+ throw new Error(`Ação não suportada: ${processedInput.action}`);
242
+ }
243
+ }
244
+ catch (error) {
245
+ return {
246
+ success: false,
247
+ action: input.action,
248
+ message: 'Erro na operação de releases',
249
+ error: error instanceof Error ? error.message : String(error)
250
+ };
251
+ }
252
+ },
253
+ /**
254
+ * Cria um novo release no repositório
255
+ *
256
+ * FUNCIONALIDADE:
257
+ * - Cria release com tag e descrição
258
+ * - Suporta configuração de draft e prerelease
259
+ * - Permite especificar branch/commit alvo
260
+ *
261
+ * PARÂMETROS OBRIGATÓRIOS:
262
+ * - owner: Proprietário do repositório
263
+ * - repo: Nome do repositório
264
+ * - tag_name: Nome da tag do release
265
+ *
266
+ * PARÂMETROS OPCIONAIS:
267
+ * - name: Nome do release
268
+ * - body: Descrição detalhada (changelog)
269
+ * - draft: Se é um draft release (padrão: false)
270
+ * - prerelease: Se é um prerelease (padrão: false)
271
+ * - target_commitish: Branch ou commit alvo (padrão: branch padrão)
272
+ *
273
+ * VALIDAÇÕES:
274
+ * - Todos os parâmetros obrigatórios
275
+ * - Tag deve ser única no repositório
276
+ * - Target commitish deve existir
277
+ * - Usuário deve ter permissão de escrita
278
+ *
279
+ * RECOMENDAÇÕES:
280
+ * - Use versionamento semântico (ex: v1.0.0)
281
+ * - Documente mudanças detalhadamente
282
+ * - Use drafts para releases em preparação
283
+ * - Marque prereleases adequadamente
284
+ */
285
+ async createRelease(params, provider) {
286
+ try {
287
+ if (!params.repo || !params.tag_name) {
288
+ throw new Error('repo e tag_name são obrigatórios');
289
+ }
290
+ const releaseData = {
291
+ tag_name: params.tag_name,
292
+ name: params.name || params.tag_name,
293
+ body: params.body || '',
294
+ draft: params.draft || false,
295
+ prerelease: params.prerelease || false,
296
+ target_commitish: params.target_commitish || 'main'
297
+ };
298
+ const owner = (await provider.getCurrentUser()).login;
299
+ const release = await provider.createRelease(owner, params.repo, {
300
+ tag_name: params.tag_name,
301
+ name: params.name || params.tag_name,
302
+ body: params.body || '',
303
+ draft: params.draft || false,
304
+ prerelease: params.prerelease || false,
305
+ target_commitish: params.target_commitish || 'main'
306
+ });
307
+ return {
308
+ success: true,
309
+ action: 'create',
310
+ message: `Release '${params.tag_name}' criado com sucesso`,
311
+ data: release
312
+ };
313
+ }
314
+ catch (error) {
315
+ throw new Error(`Falha ao criar release: ${error instanceof Error ? error.message : String(error)}`);
316
+ }
317
+ },
318
+ /**
319
+ * Lista releases do repositório
320
+ *
321
+ * FUNCIONALIDADE:
322
+ * - Lista releases com paginação
323
+ * - Retorna informações básicas de cada release
324
+ * - Inclui status de draft e prerelease
325
+ *
326
+ * PARÂMETROS OBRIGATÓRIOS:
327
+ * - owner: Proprietário do repositório
328
+ * - repo: Nome do repositório
329
+ *
330
+ * PARÂMETROS OPCIONAIS:
331
+ * - page: Página da listagem (padrão: 1)
332
+ * - limit: Itens por página (padrão: 30, máximo: 100)
333
+ *
334
+ * VALIDAÇÕES:
335
+ * - e repo obrigatórios
336
+ * - Page deve ser >= 1
337
+ * - Limit deve ser entre 1 e 100
338
+ *
339
+ * RECOMENDAÇÕES:
340
+ * - Use paginação para repositórios com muitos releases
341
+ * - Monitore número total de releases
342
+ * - Verifique status de draft e prerelease
343
+ * - Mantenha releases organizados
344
+ */
345
+ async listReleases(params, provider) {
346
+ try {
347
+ if (!params.repo) {
348
+ throw new Error('e repo são obrigatórios');
349
+ }
350
+ const page = params.page || 1;
351
+ const limit = params.limit || 30;
352
+ const releases = await provider.listReleases((await provider.getCurrentUser()).login, params.repo, page, limit);
353
+ return {
354
+ success: true,
355
+ action: 'list',
356
+ message: `${releases.length} releases encontrados`,
357
+ data: {
358
+ releases,
359
+ page,
360
+ limit,
361
+ total: releases.length
362
+ }
363
+ };
364
+ }
365
+ catch (error) {
366
+ throw new Error(`Falha ao listar releases: ${error instanceof Error ? error.message : String(error)}`);
367
+ }
368
+ },
369
+ /**
370
+ * Obtém detalhes de um release específico
371
+ *
372
+ * FUNCIONALIDADE:
373
+ * - Retorna informações completas do release
374
+ * - Inclui tag, nome, descrição e status
375
+ * - Mostra URLs de download
376
+ *
377
+ * PARÂMETROS OBRIGATÓRIOS:
378
+ * - owner: Proprietário do repositório
379
+ * - repo: Nome do repositório
380
+ * - release_id: ID do release
381
+ *
382
+ * VALIDAÇÕES:
383
+ * - Todos os parâmetros obrigatórios
384
+ * - Release deve existir no repositório
385
+ * - ID deve ser válido
386
+ *
387
+ * RECOMENDAÇÕES:
388
+ * - Use para obter detalhes completos
389
+ * - Verifique status de draft e prerelease
390
+ * - Analise changelog e descrição
391
+ * - Monitore URLs de download
392
+ */
393
+ async getRelease(params, provider) {
394
+ try {
395
+ if (!params.repo || !params.release_id) {
396
+ throw new Error('repo e release_id são obrigatórios');
397
+ }
398
+ const release = await provider.getRelease((await provider.getCurrentUser()).login, params.repo, params.release_id);
399
+ return {
400
+ success: true,
401
+ action: 'get',
402
+ message: `Release #${params.release_id} obtido com sucesso`,
403
+ data: release
404
+ };
405
+ }
406
+ catch (error) {
407
+ throw new Error(`Falha ao obter release: ${error instanceof Error ? error.message : String(error)}`);
408
+ }
409
+ },
410
+ /**
411
+ * Atualiza um release existente
412
+ *
413
+ * FUNCIONALIDADE:
414
+ * - Atualiza campos do release
415
+ * - Suporta mudança de tag e descrição
416
+ * - Permite alteração de status
417
+ *
418
+ * PARÂMETROS OBRIGATÓRIOS:
419
+ * - owner: Proprietário do repositório
420
+ * - repo: Nome do repositório
421
+ * - release_id: ID do release
422
+ *
423
+ * PARÂMETROS OPCIONAIS:
424
+ * - new_tag_name: Nova tag
425
+ * - new_name: Novo nome
426
+ * - new_body: Nova descrição
427
+ * - new_draft: Novo status de draft
428
+ * - new_prerelease: Novo status de prerelease
429
+ * - new_target_commitish: Nova branch/commit alvo
430
+ *
431
+ * VALIDAÇÕES:
432
+ * - Todos os parâmetros obrigatórios
433
+ * - Release deve existir
434
+ * - Pelo menos um campo deve ser atualizado
435
+ *
436
+ * RECOMENDAÇÕES:
437
+ * - Atualize apenas campos necessários
438
+ * - Use mensagens de commit descritivas
439
+ * - Documente mudanças importantes
440
+ * - Notifique usuários sobre mudanças
441
+ */
442
+ async updateRelease(params, provider) {
443
+ try {
444
+ if (!params.repo || !params.release_id) {
445
+ throw new Error('repo e release_id são obrigatórios');
446
+ }
447
+ const updateData = {};
448
+ if (params.new_tag_name)
449
+ updateData.tag_name = params.new_tag_name;
450
+ if (params.new_name)
451
+ updateData.name = params.new_name;
452
+ if (params.new_body !== undefined)
453
+ updateData.body = params.new_body;
454
+ if (params.new_draft !== undefined)
455
+ updateData.draft = params.new_draft;
456
+ if (params.new_prerelease !== undefined)
457
+ updateData.prerelease = params.new_prerelease;
458
+ if (params.new_target_commitish)
459
+ updateData.target_commitish = params.new_target_commitish;
460
+ if (Object.keys(updateData).length === 0) {
461
+ throw new Error('Nenhum campo para atualizar foi fornecido');
462
+ }
463
+ const release = await provider.updateRelease(params.release_id, updateData);
464
+ return {
465
+ success: true,
466
+ action: 'update',
467
+ message: `Release #${params.release_id} atualizado com sucesso`,
468
+ data: release
469
+ };
470
+ }
471
+ catch (error) {
472
+ throw new Error(`Falha ao atualizar release: ${error instanceof Error ? error.message : String(error)}`);
473
+ }
474
+ },
475
+ /**
476
+ * Deleta um release do repositório
477
+ *
478
+ * FUNCIONALIDADE:
479
+ * - Remove release especificado
480
+ * - Mantém tag associada (se existir)
481
+ * - Confirma exclusão bem-sucedida
482
+ *
483
+ * PARÂMETROS OBRIGATÓRIOS:
484
+ * - owner: Proprietário do repositório
485
+ * - repo: Nome do repositório
486
+ * - release_id: ID do release
487
+ *
488
+ * VALIDAÇÕES:
489
+ * - Todos os parâmetros obrigatórios
490
+ * - Release deve existir
491
+ * - Usuário deve ter permissão de exclusão
492
+ *
493
+ * RECOMENDAÇÕES:
494
+ * - Confirme exclusão antes de executar
495
+ * - Verifique se release não está sendo usado
496
+ * - Mantenha backup se necessário
497
+ * - Documente motivo da exclusão
498
+ */
499
+ async deleteRelease(params, provider) {
500
+ try {
501
+ if (!params.repo || !params.release_id) {
502
+ throw new Error('repo e release_id são obrigatórios');
503
+ }
504
+ await provider.deleteRelease(params.release_id);
505
+ return {
506
+ success: true,
507
+ action: 'delete',
508
+ message: `Release #${params.release_id} deletado com sucesso`,
509
+ data: { deleted: true }
510
+ };
511
+ }
512
+ catch (error) {
513
+ throw new Error(`Falha ao deletar release: ${error instanceof Error ? error.message : String(error)}`);
514
+ }
515
+ },
516
+ /**
517
+ * Publica um release draft
518
+ *
519
+ * FUNCIONALIDADE:
520
+ * - Altera status do release de draft para publicado
521
+ * - Mantém todas as outras configurações
522
+ * - Permite download público
523
+ *
524
+ * PARÂMETROS OBRIGATÓRIOS:
525
+ * - owner: Proprietário do repositório
526
+ * - repo: Nome do repositório
527
+ * - release_id: ID do release
528
+ *
529
+ * VALIDAÇÕES:
530
+ * - Todos os parâmetros obrigatórios
531
+ * - Release deve existir
532
+ * - Release deve estar como draft
533
+ *
534
+ * RECOMENDAÇÕES:
535
+ * - Confirme que release está pronto
536
+ * - Teste antes de publicar
537
+ * - Verifique se não bugs conhecidos
538
+ * - Notifique usuários sobre nova versão
539
+ */
540
+ async publishRelease(params, provider) {
541
+ try {
542
+ if (!params.repo || !params.release_id) {
543
+ throw new Error('repo e release_id são obrigatórios');
544
+ }
545
+ // Publicar release alterando status de draft para false
546
+ const release = await provider.updateRelease(params.release_id, { draft: false });
547
+ return {
548
+ success: true,
549
+ action: 'publish',
550
+ message: `Release #${params.release_id} publicado com sucesso`,
551
+ data: release
552
+ };
553
+ }
554
+ catch (error) {
555
+ throw new Error(`Falha ao publicar release: ${error instanceof Error ? error.message : String(error)}`);
556
+ }
557
+ }
558
+ };
558
559
  //# sourceMappingURL=git-releases.js.map