@andrebuzeli/git-mcp 2.16.2 → 2.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/dist/tools/gh-actions.d.ts +0 -9
  2. package/dist/tools/gh-actions.d.ts.map +1 -1
  3. package/dist/tools/gh-actions.js +6 -10
  4. package/dist/tools/gh-actions.js.map +1 -1
  5. package/dist/tools/gh-analytics.d.ts +0 -4
  6. package/dist/tools/gh-analytics.d.ts.map +1 -1
  7. package/dist/tools/gh-analytics.js +6 -12
  8. package/dist/tools/gh-analytics.js.map +1 -1
  9. package/dist/tools/gh-code-review.d.ts +0 -4
  10. package/dist/tools/gh-code-review.d.ts.map +1 -1
  11. package/dist/tools/gh-code-review.js +11 -27
  12. package/dist/tools/gh-code-review.js.map +1 -1
  13. package/dist/tools/gh-codespaces.d.ts +0 -12
  14. package/dist/tools/gh-codespaces.d.ts.map +1 -1
  15. package/dist/tools/gh-codespaces.js +9 -11
  16. package/dist/tools/gh-codespaces.js.map +1 -1
  17. package/dist/tools/gh-deployments.d.ts +0 -8
  18. package/dist/tools/gh-deployments.d.ts.map +1 -1
  19. package/dist/tools/gh-deployments.js +6 -10
  20. package/dist/tools/gh-deployments.js.map +1 -1
  21. package/dist/tools/gh-gists.d.ts +0 -16
  22. package/dist/tools/gh-gists.d.ts.map +1 -1
  23. package/dist/tools/gh-gists.js +4 -9
  24. package/dist/tools/gh-gists.js.map +1 -1
  25. package/dist/tools/gh-projects.d.ts +0 -16
  26. package/dist/tools/gh-projects.d.ts.map +1 -1
  27. package/dist/tools/gh-projects.js +4 -9
  28. package/dist/tools/gh-projects.js.map +1 -1
  29. package/dist/tools/gh-security.d.ts +0 -4
  30. package/dist/tools/gh-security.d.ts.map +1 -1
  31. package/dist/tools/gh-security.js +6 -9
  32. package/dist/tools/gh-security.js.map +1 -1
  33. package/dist/tools/gh-sync.d.ts +0 -12
  34. package/dist/tools/gh-sync.d.ts.map +1 -1
  35. package/dist/tools/gh-sync.js +4 -8
  36. package/dist/tools/gh-sync.js.map +1 -1
  37. package/dist/tools/gh-workflows.d.ts +0 -4
  38. package/dist/tools/gh-workflows.d.ts.map +1 -1
  39. package/dist/tools/gh-workflows.js +6 -10
  40. package/dist/tools/gh-workflows.js.map +1 -1
  41. package/dist/tools/git-archive.d.ts +0 -3
  42. package/dist/tools/git-archive.d.ts.map +1 -1
  43. package/dist/tools/git-archive.js +2 -2
  44. package/dist/tools/git-archive.js.map +1 -1
  45. package/dist/tools/git-branches.d.ts +1 -1
  46. package/dist/tools/git-branches.js +5 -5
  47. package/dist/tools/git-branches.js.map +1 -1
  48. package/dist/tools/git-bundle.d.ts +0 -3
  49. package/dist/tools/git-bundle.d.ts.map +1 -1
  50. package/dist/tools/git-bundle.js +2 -2
  51. package/dist/tools/git-bundle.js.map +1 -1
  52. package/dist/tools/git-cherry-pick.d.ts +0 -3
  53. package/dist/tools/git-cherry-pick.d.ts.map +1 -1
  54. package/dist/tools/git-cherry-pick.js +2 -2
  55. package/dist/tools/git-cherry-pick.js.map +1 -1
  56. package/dist/tools/git-commits.d.ts +6 -9
  57. package/dist/tools/git-commits.d.ts.map +1 -1
  58. package/dist/tools/git-commits.js +31 -29
  59. package/dist/tools/git-commits.js.map +1 -1
  60. package/dist/tools/git-config.d.ts +0 -3
  61. package/dist/tools/git-config.d.ts.map +1 -1
  62. package/dist/tools/git-config.js +2 -2
  63. package/dist/tools/git-config.js.map +1 -1
  64. package/dist/tools/git-files.d.ts +8 -11
  65. package/dist/tools/git-files.d.ts.map +1 -1
  66. package/dist/tools/git-files.js +41 -39
  67. package/dist/tools/git-files.js.map +1 -1
  68. package/dist/tools/git-issues.d.ts +8 -15
  69. package/dist/tools/git-issues.d.ts.map +1 -1
  70. package/dist/tools/git-issues.js +38 -38
  71. package/dist/tools/git-issues.js.map +1 -1
  72. package/dist/tools/git-pulls.d.ts +9 -16
  73. package/dist/tools/git-pulls.d.ts.map +1 -1
  74. package/dist/tools/git-pulls.js +42 -42
  75. package/dist/tools/git-pulls.js.map +1 -1
  76. package/dist/tools/git-rebase.d.ts +0 -3
  77. package/dist/tools/git-rebase.d.ts.map +1 -1
  78. package/dist/tools/git-rebase.js +2 -2
  79. package/dist/tools/git-rebase.js.map +1 -1
  80. package/dist/tools/git-releases.d.ts +1 -8
  81. package/dist/tools/git-releases.d.ts.map +1 -1
  82. package/dist/tools/git-releases.js +16 -18
  83. package/dist/tools/git-releases.js.map +1 -1
  84. package/dist/tools/git-remote.d.ts +0 -3
  85. package/dist/tools/git-remote.d.ts.map +1 -1
  86. package/dist/tools/git-remote.js +2 -2
  87. package/dist/tools/git-remote.js.map +1 -1
  88. package/dist/tools/git-repositories.d.ts +6 -9
  89. package/dist/tools/git-repositories.d.ts.map +1 -1
  90. package/dist/tools/git-repositories.js +41 -30
  91. package/dist/tools/git-repositories.js.map +1 -1
  92. package/dist/tools/git-reset.d.ts +0 -3
  93. package/dist/tools/git-reset.d.ts.map +1 -1
  94. package/dist/tools/git-reset.js +2 -2
  95. package/dist/tools/git-reset.js.map +1 -1
  96. package/dist/tools/git-revert.d.ts +0 -3
  97. package/dist/tools/git-revert.d.ts.map +1 -1
  98. package/dist/tools/git-revert.js +2 -2
  99. package/dist/tools/git-revert.js.map +1 -1
  100. package/dist/tools/git-stash.d.ts +0 -3
  101. package/dist/tools/git-stash.d.ts.map +1 -1
  102. package/dist/tools/git-stash.js +2 -2
  103. package/dist/tools/git-stash.js.map +1 -1
  104. package/dist/tools/git-submodule.d.ts +0 -3
  105. package/dist/tools/git-submodule.d.ts.map +1 -1
  106. package/dist/tools/git-submodule.js +2 -2
  107. package/dist/tools/git-submodule.js.map +1 -1
  108. package/dist/tools/git-sync.d.ts +0 -10
  109. package/dist/tools/git-sync.d.ts.map +1 -1
  110. package/dist/tools/git-sync.js +8 -2
  111. package/dist/tools/git-sync.js.map +1 -1
  112. package/dist/tools/git-tags.d.ts +2 -2
  113. package/dist/tools/git-tags.js +6 -6
  114. package/dist/tools/git-tags.js.map +1 -1
  115. package/dist/tools/git-webhooks.d.ts +7 -14
  116. package/dist/tools/git-webhooks.d.ts.map +1 -1
  117. package/dist/tools/git-webhooks.js +34 -34
  118. package/dist/tools/git-webhooks.js.map +1 -1
  119. package/dist/tools/git-worktree.d.ts +0 -3
  120. package/dist/tools/git-worktree.d.ts.map +1 -1
  121. package/dist/tools/git-worktree.js +2 -2
  122. package/dist/tools/git-worktree.js.map +1 -1
  123. package/dist/tools/repositories.d.ts +9 -12
  124. package/dist/tools/repositories.d.ts.map +1 -1
  125. package/dist/tools/repositories.js +46 -44
  126. package/dist/tools/repositories.js.map +1 -1
  127. package/dist/utils/user-detection.d.ts.map +1 -1
  128. package/dist/utils/user-detection.js +2 -17
  129. package/dist/utils/user-detection.js.map +1 -1
  130. package/package.json +3 -3
  131. package/dist/tools/actions.d.ts +0 -272
  132. package/dist/tools/actions.d.ts.map +0 -1
  133. package/dist/tools/actions.js +0 -479
  134. package/dist/tools/actions.js.map +0 -1
  135. package/dist/tools/analytics.d.ts +0 -326
  136. package/dist/tools/analytics.d.ts.map +0 -1
  137. package/dist/tools/analytics.js +0 -524
  138. package/dist/tools/analytics.js.map +0 -1
  139. package/dist/tools/branches.d.ts +0 -438
  140. package/dist/tools/branches.d.ts.map +0 -1
  141. package/dist/tools/branches.js +0 -525
  142. package/dist/tools/branches.js.map +0 -1
  143. package/dist/tools/code-review.d.ts +0 -323
  144. package/dist/tools/code-review.d.ts.map +0 -1
  145. package/dist/tools/code-review.js +0 -577
  146. package/dist/tools/code-review.js.map +0 -1
  147. package/dist/tools/commits.d.ts +0 -497
  148. package/dist/tools/commits.d.ts.map +0 -1
  149. package/dist/tools/commits.js +0 -626
  150. package/dist/tools/commits.js.map +0 -1
  151. package/dist/tools/deployments.d.ts +0 -319
  152. package/dist/tools/deployments.d.ts.map +0 -1
  153. package/dist/tools/deployments.js +0 -384
  154. package/dist/tools/deployments.js.map +0 -1
  155. package/dist/tools/files.d.ts +0 -463
  156. package/dist/tools/files.d.ts.map +0 -1
  157. package/dist/tools/files.js +0 -555
  158. package/dist/tools/files.js.map +0 -1
  159. package/dist/tools/issues.d.ts +0 -579
  160. package/dist/tools/issues.d.ts.map +0 -1
  161. package/dist/tools/issues.js +0 -694
  162. package/dist/tools/issues.js.map +0 -1
  163. package/dist/tools/pulls.d.ts +0 -702
  164. package/dist/tools/pulls.d.ts.map +0 -1
  165. package/dist/tools/pulls.js +0 -733
  166. package/dist/tools/pulls.js.map +0 -1
  167. package/dist/tools/releases.d.ts +0 -495
  168. package/dist/tools/releases.d.ts.map +0 -1
  169. package/dist/tools/releases.js +0 -552
  170. package/dist/tools/releases.js.map +0 -1
  171. package/dist/tools/security.d.ts +0 -341
  172. package/dist/tools/security.d.ts.map +0 -1
  173. package/dist/tools/security.js +0 -427
  174. package/dist/tools/security.js.map +0 -1
  175. package/dist/tools/tags.d.ts +0 -419
  176. package/dist/tools/tags.d.ts.map +0 -1
  177. package/dist/tools/tags.js +0 -480
  178. package/dist/tools/tags.js.map +0 -1
  179. package/dist/tools/webhooks.d.ts +0 -490
  180. package/dist/tools/webhooks.d.ts.map +0 -1
  181. package/dist/tools/webhooks.js +0 -556
  182. package/dist/tools/webhooks.js.map +0 -1
  183. package/dist/tools/workflows.d.ts +0 -313
  184. package/dist/tools/workflows.d.ts.map +0 -1
  185. package/dist/tools/workflows.js +0 -462
  186. package/dist/tools/workflows.js.map +0 -1
@@ -1,694 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.issuesTool = 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: issues
9
- *
10
- * DESCRIÇÃO:
11
- * Gerenciamento completo de issues com suporte multi-provider (GitHub e Gitea)
12
- *
13
- * FUNCIONALIDADES:
14
- * - Criação de novas issues
15
- * - Listagem e busca de issues
16
- * - Obtenção de detalhes específicos
17
- * - Atualização de issues existentes
18
- * - Fechamento de issues
19
- * - Adição de comentários
20
- * - Busca por conteúdo e status
21
- *
22
- * USO:
23
- * - Para gerenciar bugs e features
24
- * - Para acompanhar progresso de desenvolvimento
25
- * - Para comunicação entre equipe
26
- * - Para controle de qualidade
27
- *
28
- * RECOMENDAÇÕES:
29
- * - Use títulos descritivos
30
- * - Documente detalhes completos
31
- * - Atualize status regularmente
32
- * - Use labels adequadamente
33
- */
34
- /**
35
- * Schema de validação para entrada da tool issues
36
- *
37
- * VALIDAÇÕES:
38
- * - action: Ação obrigatória (create, list, get, update, close, comment, search)
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 IssuesInputSchema = zod_1.z.object({
48
- action: zod_1.z.enum(['create', 'list', 'get', 'update', 'close', 'comment', 'search']),
49
- // Parâmetros comuns
50
- owner: zod_1.z.string(),
51
- repo: zod_1.z.string(),
52
- // Para multi-provider
53
- provider: zod_1.z.enum(['gitea', 'github']).describe('Provider to use (gitea or github)'), // Provider específico: gitea, github ou both
54
- // Para create
55
- title: zod_1.z.string().optional(),
56
- body: zod_1.z.string().optional(),
57
- labels: zod_1.z.array(zod_1.z.string()).optional(),
58
- assignees: zod_1.z.array(zod_1.z.string()).optional(),
59
- milestone: zod_1.z.number().optional(),
60
- // Para get/update/close/comment
61
- issue_number: zod_1.z.number().optional(),
62
- // Para list
63
- state: zod_1.z.enum(['open', 'closed', 'all']).optional(),
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_title: zod_1.z.string().optional(),
68
- new_body: zod_1.z.string().optional(),
69
- new_state: zod_1.z.enum(['open', 'closed']).optional(),
70
- new_labels: zod_1.z.array(zod_1.z.string()).optional(),
71
- new_assignees: zod_1.z.array(zod_1.z.string()).optional(),
72
- new_milestone: zod_1.z.number().optional(),
73
- // Para comment
74
- comment_body: zod_1.z.string().optional(),
75
- // Para search
76
- query: zod_1.z.string().optional(),
77
- author: zod_1.z.string().optional(),
78
- assignee: zod_1.z.string().optional(),
79
- label: zod_1.z.string().optional(),
80
- });
81
- /**
82
- * Schema de saída padronizado
83
- *
84
- * ESTRUTURA:
85
- * - success: Status da operação
86
- * - action: Ação executada
87
- * - message: Mensagem descritiva
88
- * - data: Dados retornados (opcional)
89
- * - error: Detalhes do erro (opcional)
90
- */
91
- const IssuesResultSchema = zod_1.z.object({
92
- success: zod_1.z.boolean(),
93
- action: zod_1.z.string(),
94
- message: zod_1.z.string(),
95
- data: zod_1.z.any().optional(),
96
- error: zod_1.z.string().optional()
97
- });
98
- /**
99
- * Tool: issues
100
- *
101
- * DESCRIÇÃO:
102
- * Gerenciamento completo de issues Gitea com múltiplas ações
103
- *
104
- * ACTIONS DISPONÍVEIS:
105
- *
106
- * 1. create - Criar nova issue
107
- * Parâmetros:
108
- * - owner (obrigatório): Proprietário do repositório
109
- * - repo (obrigatório): Nome do repositório
110
- * - title (obrigatório): Título da issue
111
- * - body (opcional): Descrição detalhada
112
- * - labels (opcional): Array de labels
113
- * - assignees (opcional): Array de usuários responsáveis
114
- * - milestone (opcional): ID do milestone
115
- *
116
- * 2. list - Listar issues
117
- * Parâmetros:
118
- * - owner (obrigatório): Proprietário do repositório
119
- * - repo (obrigatório): Nome do repositório
120
- * - state (opcional): Estado das issues (open, closed, all) - padrão: open
121
- * - page (opcional): Página da listagem (padrão: 1)
122
- * - limit (opcional): Itens por página (padrão: 30, máximo: 100)
123
- *
124
- * 3. get - Obter detalhes da issue
125
- * Parâmetros:
126
- * - owner (obrigatório): Proprietário do repositório
127
- * - repo (obrigatório): Nome do repositório
128
- * - issue_number (obrigatório): Número da issue
129
- *
130
- * 4. update - Atualizar issue existente
131
- * Parâmetros:
132
- * - owner (obrigatório): Proprietário do repositório
133
- * - repo (obrigatório): Nome do repositório
134
- * - issue_number (obrigatório): Número da issue
135
- * - new_title (opcional): Novo título
136
- * - new_body (opcional): Nova descrição
137
- * - new_state (opcional): Novo estado
138
- * - new_labels (opcional): Novos labels
139
- * - new_assignees (opcional): Novos responsáveis
140
- * - new_milestone (opcional): Novo milestone
141
- *
142
- * 5. close - Fechar issue
143
- * Parâmetros:
144
- * - owner (obrigatório): Proprietário do repositório
145
- * - repo (obrigatório): Nome do repositório
146
- * - issue_number (obrigatório): Número da issue
147
- *
148
- * 6. comment - Adicionar comentário
149
- * Parâmetros:
150
- * - owner (obrigatório): Proprietário do repositório
151
- * - repo (obrigatório): Nome do repositório
152
- * - issue_number (obrigatório): Número da issue
153
- * - comment_body (obrigatório): Conteúdo do comentário
154
- *
155
- * 7. search - Buscar issues
156
- * Parâmetros:
157
- * - owner (obrigatório): Proprietário do repositório
158
- * - repo (obrigatório): Nome do repositório
159
- * - query (obrigatório): Termo de busca
160
- * - author (opcional): Autor das issues
161
- * - assignee (opcional): Responsável pelas issues
162
- * - label (opcional): Label específico
163
- *
164
- * RECOMENDAÇÕES DE USO:
165
- * - Use títulos descritivos e claros
166
- * - Documente detalhes completos na descrição
167
- * - Atualize status regularmente
168
- * - Use labels para categorização
169
- * - Atribua responsáveis adequadamente
170
- * - Mantenha issues organizadas
171
- */
172
- exports.issuesTool = {
173
- name: 'issues',
174
- description: 'Manage issues with multi-provider support (GitHub and Gitea): create, list, get, update, close, comment, search. Boas práticas (solo): use issues como notas/tarefas pesquisáveis; títulos descritivos; corpo objetivo; labels para prioridade/categoria; feche com comentários de conclusão e aprendizado.',
175
- inputSchema: {
176
- type: 'object',
177
- properties: {
178
- action: {
179
- type: 'string',
180
- enum: ['create', 'list', 'get', 'update', 'close', 'comment', 'search'],
181
- description: 'Action to perform on issues'
182
- },
183
- owner: { type: 'string', description: 'Repository owner' },
184
- repo: { type: 'string', description: 'Repository name' },
185
- provider: { type: 'string', description: 'Provider to use (github, gitea, or omit for default)' },
186
- title: { type: 'string', description: 'Issue title' },
187
- body: { type: 'string', description: 'Issue body/description' },
188
- labels: { type: 'array', items: { type: 'string' }, description: 'Issue labels' },
189
- assignees: { type: 'array', items: { type: 'string' }, description: 'Issue assignees' },
190
- milestone: { type: 'number', description: 'Milestone ID' },
191
- issue_number: { type: 'number', description: 'Issue number' },
192
- state: { type: 'string', enum: ['open', 'closed', 'all'], description: 'Issue state' },
193
- page: { type: 'number', description: 'Page number', minimum: 1 },
194
- limit: { type: 'number', description: 'Items per page', minimum: 1, maximum: 100 },
195
- new_title: { type: 'string', description: 'New issue title' },
196
- new_body: { type: 'string', description: 'New issue body' },
197
- new_state: { type: 'string', enum: ['open', 'closed'], description: 'New issue state' },
198
- new_labels: { type: 'array', items: { type: 'string' }, description: 'New issue labels' },
199
- new_assignees: { type: 'array', items: { type: 'string' }, description: 'New issue assignees' },
200
- new_milestone: { type: 'number', description: 'New milestone ID' },
201
- comment_body: { type: 'string', description: 'Comment content' },
202
- query: { type: 'string', description: 'Search query' },
203
- author: { type: 'string', description: 'Issue author filter' },
204
- assignee: { type: 'string', description: 'Issue assignee filter' },
205
- label: { type: 'string', description: 'Issue label filter' }
206
- },
207
- required: ['action', 'owner', 'repo', 'provider']
208
- },
209
- /**
210
- * Handler principal da tool issues
211
- *
212
- * FUNCIONALIDADE:
213
- * - Valida entrada usando Zod schema
214
- * - Roteia para método específico baseado na ação
215
- * - Trata erros de forma uniforme
216
- * - Retorna resultado padronizado
217
- *
218
- * FLUXO:
219
- * 1. Validação de entrada
220
- * 2. Seleção do provider
221
- * 3. Roteamento por ação
222
- * 4. Execução do método específico
223
- * 5. Tratamento de erros
224
- * 6. Retorno de resultado
225
- *
226
- * TRATAMENTO DE ERROS:
227
- * - Validação: erro de schema
228
- * - Execução: erro da operação
229
- * - Roteamento: ação não suportada
230
- *
231
- * RECOMENDAÇÕES:
232
- * - Sempre valide entrada antes de processar
233
- * - Trate erros específicos adequadamente
234
- * - Log detalhes de erro para debug
235
- * - Retorne mensagens de erro úteis
236
- */
237
- async handler(input) {
238
- try {
239
- const validatedInput = IssuesInputSchema.parse(input);
240
- // Aplicar auto-detecção de usuário/owner
241
- const processedInput = await (0, user_detection_js_1.applyAutoUserDetection)(validatedInput, validatedInput.provider);
242
- // Obter o provider correto
243
- let provider;
244
- try {
245
- if (processedInput.provider) {
246
- const requestedProvider = index_js_1.globalProviderFactory.getProvider(processedInput.provider);
247
- if (!requestedProvider) {
248
- console.warn(`[ISSUES] Provider '${processedInput.provider}' não encontrado, usando padrão`);
249
- provider = index_js_1.globalProviderFactory.getDefaultProvider();
250
- }
251
- else {
252
- provider = requestedProvider;
253
- }
254
- }
255
- else {
256
- provider = index_js_1.globalProviderFactory.getDefaultProvider();
257
- }
258
- if (!provider) {
259
- throw new Error('Nenhum provider disponível');
260
- }
261
- }
262
- catch (providerError) {
263
- console.error('[ISSUES] Erro ao obter provider:', providerError);
264
- throw new Error(`Erro de configuração do provider: ${providerError instanceof Error ? providerError.message : 'Provider não disponível'}`);
265
- }
266
- switch (processedInput.action) {
267
- case 'create':
268
- return await this.createIssue(processedInput, provider);
269
- case 'list':
270
- return await this.listIssues(processedInput, provider);
271
- case 'get':
272
- return await this.getIssue(processedInput, provider);
273
- case 'update':
274
- return await this.updateIssue(processedInput, provider);
275
- case 'close':
276
- return await this.closeIssue(processedInput, provider);
277
- case 'comment':
278
- return await this.addComment(processedInput, provider);
279
- case 'search':
280
- return await this.searchIssues(processedInput, provider);
281
- default:
282
- throw new Error(`Ação não suportada: ${processedInput.action}`);
283
- }
284
- }
285
- catch (error) {
286
- return {
287
- success: false,
288
- action: input.action,
289
- message: 'Erro na operação de issues',
290
- error: error instanceof Error ? error.message : String(error)
291
- };
292
- }
293
- },
294
- /**
295
- * Cria uma nova issue no repositório
296
- *
297
- * FUNCIONALIDADE:
298
- * - Cria issue com título e descrição
299
- * - Suporta labels, assignees e milestone
300
- * - Retorna detalhes da issue criada
301
- *
302
- * PARÂMETROS OBRIGATÓRIOS:
303
- * - owner: Proprietário do repositório
304
- * - repo: Nome do repositório
305
- * - title: Título da issue
306
- *
307
- * PARÂMETROS OPCIONAIS:
308
- * - body: Descrição detalhada
309
- * - labels: Array de labels para categorização
310
- * - assignees: Array de usuários responsáveis
311
- * - milestone: ID do milestone associado
312
- *
313
- * VALIDAÇÕES:
314
- * - Todos os parâmetros obrigatórios
315
- * - Título deve ser único no repositório
316
- * - Labels devem existir no repositório
317
- * - Assignees devem ser usuários válidos
318
- *
319
- * RECOMENDAÇÕES:
320
- * - Use títulos descritivos e claros
321
- * - Documente detalhes completos
322
- * - Use labels para categorização
323
- * - Atribua responsáveis adequadamente
324
- */
325
- async createIssue(params, provider) {
326
- try {
327
- if (!params.owner) {
328
- throw new Error('Owner é obrigatório');
329
- }
330
- if (!params.repo) {
331
- throw new Error('Repo é obrigatório');
332
- }
333
- if (!params.title) {
334
- throw new Error('Title é obrigatório');
335
- }
336
- const issue = await provider.createIssue(params.owner, params.repo, params.title, params.body, params.assignees, params.labels);
337
- return {
338
- success: true,
339
- action: 'create',
340
- message: `Issue '${params.title}' criada com sucesso`,
341
- data: issue
342
- };
343
- }
344
- catch (error) {
345
- throw new Error(`Falha ao criar issue: ${error instanceof Error ? error.message : String(error)}`);
346
- }
347
- },
348
- /**
349
- * Lista issues do repositório
350
- *
351
- * FUNCIONALIDADE:
352
- * - Lista issues com filtros de estado
353
- * - Suporta paginação
354
- * - Retorna informações básicas de cada issue
355
- *
356
- * PARÂMETROS OBRIGATÓRIOS:
357
- * - owner: Proprietário do repositório
358
- * - repo: Nome do repositório
359
- *
360
- * PARÂMETROS OPCIONAIS:
361
- * - state: Estado das issues (open, closed, all) - padrão: open
362
- * - page: Página da listagem (padrão: 1)
363
- * - limit: Itens por página (padrão: 30, máximo: 100)
364
- *
365
- * VALIDAÇÕES:
366
- * - Owner e repo obrigatórios
367
- * - State deve ser um dos valores válidos
368
- * - Page deve ser >= 1
369
- * - Limit deve ser entre 1 e 100
370
- *
371
- * RECOMENDAÇÕES:
372
- * - Use paginação para repositórios com muitas issues
373
- * - Monitore número total de issues
374
- * - Filtre por estado para organização
375
- * - Mantenha issues organizadas
376
- */
377
- async listIssues(params, provider) {
378
- try {
379
- if (!params.owner) {
380
- throw new Error('Owner é obrigatório');
381
- }
382
- if (!params.repo) {
383
- throw new Error('Repo é obrigatório');
384
- }
385
- const state = params.state || 'open';
386
- const page = params.page || 1;
387
- const limit = params.limit || 30;
388
- const issues = await provider.listIssues(params.owner, params.repo, state, page, limit);
389
- return {
390
- success: true,
391
- action: 'list',
392
- message: `${issues.length} issues ${state} encontradas`,
393
- data: {
394
- issues,
395
- state,
396
- page,
397
- limit,
398
- total: issues.length
399
- }
400
- };
401
- }
402
- catch (error) {
403
- throw new Error(`Falha ao listar issues: ${error instanceof Error ? error.message : String(error)}`);
404
- }
405
- },
406
- /**
407
- * Obtém detalhes de uma issue específica
408
- *
409
- * FUNCIONALIDADE:
410
- * - Retorna informações completas da issue
411
- * - Inclui título, descrição, labels, assignees
412
- * - Mostra histórico de comentários
413
- *
414
- * PARÂMETROS OBRIGATÓRIOS:
415
- * - owner: Proprietário do repositório
416
- * - repo: Nome do repositório
417
- * - issue_number: Número da issue
418
- *
419
- * VALIDAÇÕES:
420
- * - Todos os parâmetros obrigatórios
421
- * - Issue deve existir no repositório
422
- * - Número deve ser válido
423
- *
424
- * RECOMENDAÇÕES:
425
- * - Use para obter detalhes completos
426
- * - Verifique status e labels
427
- * - Analise comentários e histórico
428
- * - Monitore mudanças importantes
429
- */
430
- async getIssue(params, provider) {
431
- try {
432
- // Aplicar auto-detecção se necessário
433
- if (!params.owner) {
434
- throw new Error('Owner é obrigatório');
435
- }
436
- if (!params.repo) {
437
- throw new Error('Repo é obrigatório');
438
- }
439
- if (!params.issue_number) {
440
- throw new Error('Issue_number é obrigatório');
441
- }
442
- const issue = await provider.getIssue(params.owner, params.repo, params.issue_number);
443
- return {
444
- success: true,
445
- action: 'get',
446
- message: `Issue #${params.issue_number} obtida com sucesso`,
447
- data: issue
448
- };
449
- }
450
- catch (error) {
451
- throw new Error(`Falha ao obter issue: ${error instanceof Error ? error.message : String(error)}`);
452
- }
453
- },
454
- /**
455
- * Atualiza uma issue existente
456
- *
457
- * FUNCIONALIDADE:
458
- * - Atualiza campos da issue
459
- * - Suporta mudança de estado
460
- * - Permite alteração de labels e assignees
461
- *
462
- * PARÂMETROS OBRIGATÓRIOS:
463
- * - owner: Proprietário do repositório
464
- * - repo: Nome do repositório
465
- * - issue_number: Número da issue
466
- *
467
- * PARÂMETROS OPCIONAIS:
468
- * - new_title: Novo título
469
- * - new_body: Nova descrição
470
- * - new_state: Novo estado
471
- * - new_labels: Novos labels
472
- * - new_assignees: Novos responsáveis
473
- * - new_milestone: Novo milestone
474
- *
475
- * VALIDAÇÕES:
476
- * - Todos os parâmetros obrigatórios
477
- * - Issue deve existir
478
- * - Pelo menos um campo deve ser atualizado
479
- *
480
- * RECOMENDAÇÕES:
481
- * - Atualize apenas campos necessários
482
- * - Use mensagens de commit descritivas
483
- * - Documente mudanças importantes
484
- * - Notifique responsáveis sobre mudanças
485
- */
486
- async updateIssue(params, provider) {
487
- try {
488
- if (!params.owner) {
489
- throw new Error('Owner é obrigatório');
490
- }
491
- if (!params.repo) {
492
- throw new Error('Repo é obrigatório');
493
- }
494
- if (!params.issue_number) {
495
- throw new Error('Issue_number é obrigatório');
496
- }
497
- const updateData = {};
498
- if (params.new_title)
499
- updateData.title = params.new_title;
500
- if (params.new_body !== undefined)
501
- updateData.body = params.new_body;
502
- if (params.new_state)
503
- updateData.state = params.new_state;
504
- if (params.new_labels)
505
- updateData.labels = params.new_labels;
506
- if (params.new_assignees)
507
- updateData.assignees = params.new_assignees;
508
- if (params.new_milestone !== undefined)
509
- updateData.milestone = params.new_milestone;
510
- if (Object.keys(updateData).length === 0) {
511
- throw new Error('Nenhum campo para atualizar foi fornecido');
512
- }
513
- const issue = await provider.updateIssue(params.owner, params.repo, params.issue_number, updateData);
514
- return {
515
- success: true,
516
- action: 'update',
517
- message: `Issue #${params.issue_number} atualizada com sucesso`,
518
- data: issue
519
- };
520
- }
521
- catch (error) {
522
- throw new Error(`Falha ao atualizar issue: ${error instanceof Error ? error.message : String(error)}`);
523
- }
524
- },
525
- /**
526
- * Fecha uma issue
527
- *
528
- * FUNCIONALIDADE:
529
- * - Altera estado da issue para closed
530
- * - Mantém histórico e comentários
531
- * - Permite reabertura posterior
532
- *
533
- * PARÂMETROS OBRIGATÓRIOS:
534
- * - owner: Proprietário do repositório
535
- * - repo: Nome do repositório
536
- * - issue_number: Número da issue
537
- *
538
- * VALIDAÇÕES:
539
- * - Todos os parâmetros obrigatórios
540
- * - Issue deve existir
541
- * - Issue deve estar aberta
542
- *
543
- * RECOMENDAÇÕES:
544
- * - Confirme que issue foi resolvida
545
- * - Documente solução aplicada
546
- * - Use comentário explicativo
547
- * - Verifique se não há dependências
548
- */
549
- async closeIssue(params, provider) {
550
- try {
551
- if (!params.owner) {
552
- throw new Error('Owner é obrigatório');
553
- }
554
- if (!params.repo) {
555
- throw new Error('Repo é obrigatório');
556
- }
557
- if (!params.issue_number) {
558
- throw new Error('Issue_number é obrigatório');
559
- }
560
- const issue = await provider.updateIssue(params.owner, params.repo, params.issue_number, { state: 'closed' });
561
- return {
562
- success: true,
563
- action: 'close',
564
- message: `Issue #${params.issue_number} fechada com sucesso`,
565
- data: issue
566
- };
567
- }
568
- catch (error) {
569
- throw new Error(`Falha ao fechar issue: ${error instanceof Error ? error.message : String(error)}`);
570
- }
571
- },
572
- /**
573
- * Adiciona comentário a uma issue
574
- *
575
- * FUNCIONALIDADE:
576
- * - Cria novo comentário na issue
577
- * - Mantém histórico de discussão
578
- * - Suporta formatação Markdown
579
- *
580
- * PARÂMETROS OBRIGATÓRIOS:
581
- * - owner: Proprietário do repositório
582
- * - repo: Nome do repositório
583
- * - issue_number: Número da issue
584
- * - comment_body: Conteúdo do comentário
585
- *
586
- * VALIDAÇÕES:
587
- * - Todos os parâmetros obrigatórios
588
- * - Issue deve existir
589
- * - Comentário não pode estar vazio
590
- *
591
- * RECOMENDAÇÕES:
592
- * - Use comentários para atualizações
593
- * - Documente progresso e decisões
594
- * - Use formatação Markdown adequadamente
595
- * - Mantenha comentários relevantes
596
- */
597
- async addComment(params, provider) {
598
- try {
599
- if (!params.owner) {
600
- throw new Error('Owner é obrigatório');
601
- }
602
- if (!params.repo) {
603
- throw new Error('Repo é obrigatório');
604
- }
605
- if (!params.issue_number) {
606
- throw new Error('Issue_number é obrigatório');
607
- }
608
- if (!params.comment_body) {
609
- throw new Error('Comment_body é obrigatório');
610
- }
611
- // Implementar criação de comentário
612
- // Por enquanto, retorna mensagem de funcionalidade
613
- const comment = {
614
- id: Date.now(),
615
- body: params.comment_body,
616
- user: { login: 'usuário atual', id: 1 },
617
- created_at: new Date().toISOString(),
618
- note: 'Funcionalidade de comentário será implementada'
619
- };
620
- return {
621
- success: true,
622
- action: 'comment',
623
- message: `Comentário adicionado à issue #${params.issue_number} com sucesso`,
624
- data: comment
625
- };
626
- }
627
- catch (error) {
628
- throw new Error(`Falha ao adicionar comentário: ${error instanceof Error ? error.message : String(error)}`);
629
- }
630
- },
631
- /**
632
- * Busca issues por critérios específicos
633
- *
634
- * FUNCIONALIDADE:
635
- * - Busca issues por conteúdo
636
- * - Filtra por autor, assignee e label
637
- * - Retorna resultados relevantes
638
- *
639
- * PARÂMETROS OBRIGATÓRIOS:
640
- * - owner: Proprietário do repositório
641
- * - repo: Nome do repositório
642
- * - query: Termo de busca
643
- *
644
- * PARÂMETROS OPCIONAIS:
645
- * - author: Autor das issues
646
- * - assignee: Responsável pelas issues
647
- * - label: Label específico
648
- *
649
- * VALIDAÇÕES:
650
- * - Todos os parâmetros obrigatórios
651
- * - Query deve ter pelo menos 3 caracteres
652
- * - Repositório deve existir
653
- *
654
- * RECOMENDAÇÕES:
655
- * - Use termos de busca específicos
656
- * - Combine filtros para resultados precisos
657
- * - Analise relevância dos resultados
658
- * - Use para encontrar issues relacionadas
659
- */
660
- async searchIssues(params, provider) {
661
- try {
662
- if (!params.owner) {
663
- throw new Error('Owner é obrigatório');
664
- }
665
- if (!params.repo) {
666
- throw new Error('Repo é obrigatório');
667
- }
668
- if (!params.query) {
669
- throw new Error('Query é obrigatório');
670
- }
671
- if (params.query.length < 3) {
672
- throw new Error('Query deve ter pelo menos 3 caracteres');
673
- }
674
- // Implementar busca de issues
675
- // Por enquanto, retorna mensagem de funcionalidade
676
- return {
677
- success: true,
678
- action: 'search',
679
- message: `Busca por issues com '${params.query}' solicitada`,
680
- data: {
681
- query: params.query,
682
- author: params.author || 'todos',
683
- assignee: params.assignee || 'todos',
684
- label: params.label || 'todos',
685
- results: 'Funcionalidade de busca será implementada'
686
- }
687
- };
688
- }
689
- catch (error) {
690
- throw new Error(`Falha ao buscar issues: ${error instanceof Error ? error.message : String(error)}`);
691
- }
692
- }
693
- };
694
- //# sourceMappingURL=issues.js.map