@andrebuzeli/git-mcp 2.27.4 → 2.28.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/client.d.ts +306 -306
  2. package/dist/client.js +298 -298
  3. package/dist/config.d.ts +310 -310
  4. package/dist/config.js +392 -392
  5. package/dist/index.d.ts +22 -22
  6. package/dist/index.js +89 -89
  7. package/dist/providers/base-provider.d.ts +160 -156
  8. package/dist/providers/base-provider.d.ts.map +1 -1
  9. package/dist/providers/base-provider.js +274 -260
  10. package/dist/providers/base-provider.js.map +1 -1
  11. package/dist/providers/error-handler.d.ts +50 -50
  12. package/dist/providers/error-handler.js +175 -175
  13. package/dist/providers/gitea-provider.d.ts +97 -97
  14. package/dist/providers/gitea-provider.js +1001 -1001
  15. package/dist/providers/github-provider.d.ts +104 -104
  16. package/dist/providers/github-provider.js +1234 -1234
  17. package/dist/providers/index.d.ts +12 -12
  18. package/dist/providers/index.js +40 -40
  19. package/dist/providers/provider-factory.d.ts +74 -74
  20. package/dist/providers/provider-factory.js +311 -311
  21. package/dist/providers/types.d.ts +318 -298
  22. package/dist/providers/types.d.ts.map +1 -1
  23. package/dist/providers/types.js +6 -6
  24. package/dist/server.d.ts +76 -76
  25. package/dist/server.d.ts.map +1 -1
  26. package/dist/server.js +306 -305
  27. package/dist/server.js.map +1 -1
  28. package/dist/tools/gh-actions.d.ts +252 -252
  29. package/dist/tools/gh-actions.js +389 -389
  30. package/dist/tools/gh-analytics.d.ts +263 -263
  31. package/dist/tools/gh-analytics.js +401 -401
  32. package/dist/tools/gh-code-review.d.ts +304 -304
  33. package/dist/tools/gh-code-review.js +512 -512
  34. package/dist/tools/gh-codespaces.d.ts +138 -138
  35. package/dist/tools/gh-codespaces.js +282 -282
  36. package/dist/tools/gh-deployments.d.ts +300 -300
  37. package/dist/tools/gh-deployments.js +367 -367
  38. package/dist/tools/gh-gists.d.ts +174 -174
  39. package/dist/tools/gh-gists.js +321 -321
  40. package/dist/tools/gh-projects.d.ts +205 -205
  41. package/dist/tools/gh-projects.js +358 -358
  42. package/dist/tools/gh-security.d.ts +274 -274
  43. package/dist/tools/gh-security.js +395 -395
  44. package/dist/tools/gh-sync.d.ts +213 -213
  45. package/dist/tools/gh-sync.js +378 -378
  46. package/dist/tools/gh-workflows.d.ts +290 -290
  47. package/dist/tools/gh-workflows.js +432 -432
  48. package/dist/tools/git-archive.d.ts +165 -165
  49. package/dist/tools/git-archive.js +233 -233
  50. package/dist/tools/git-branches.d.ts +430 -430
  51. package/dist/tools/git-branches.d.ts.map +1 -1
  52. package/dist/tools/git-branches.js +627 -530
  53. package/dist/tools/git-branches.js.map +1 -1
  54. package/dist/tools/git-bundle.d.ts +171 -171
  55. package/dist/tools/git-bundle.js +241 -241
  56. package/dist/tools/git-cherry-pick.d.ts +158 -158
  57. package/dist/tools/git-cherry-pick.js +224 -224
  58. package/dist/tools/git-commits.d.ts +485 -485
  59. package/dist/tools/git-commits.d.ts.map +1 -1
  60. package/dist/tools/git-commits.js +735 -625
  61. package/dist/tools/git-commits.js.map +1 -1
  62. package/dist/tools/git-config.d.ts +140 -140
  63. package/dist/tools/git-config.js +268 -268
  64. package/dist/tools/git-files.d.ts +486 -486
  65. package/dist/tools/git-files.js +607 -607
  66. package/dist/tools/git-issues.d.ts +571 -571
  67. package/dist/tools/git-issues.d.ts.map +1 -1
  68. package/dist/tools/git-issues.js +740 -693
  69. package/dist/tools/git-issues.js.map +1 -1
  70. package/dist/tools/git-pulls.d.ts +694 -694
  71. package/dist/tools/git-pulls.js +732 -732
  72. package/dist/tools/git-rebase.d.ts +137 -137
  73. package/dist/tools/git-rebase.js +213 -213
  74. package/dist/tools/git-releases.d.ts +487 -487
  75. package/dist/tools/git-releases.js +557 -557
  76. package/dist/tools/git-remote.d.ts +138 -138
  77. package/dist/tools/git-remote.js +274 -274
  78. package/dist/tools/git-repositories.d.ts +483 -483
  79. package/dist/tools/git-repositories.js +640 -640
  80. package/dist/tools/git-reset.d.ts +130 -130
  81. package/dist/tools/git-reset.js +223 -223
  82. package/dist/tools/git-revert.d.ts +149 -149
  83. package/dist/tools/git-revert.js +198 -198
  84. package/dist/tools/git-stash.d.ts +140 -140
  85. package/dist/tools/git-stash.js +269 -269
  86. package/dist/tools/git-submodule.d.ts +152 -152
  87. package/dist/tools/git-submodule.js +289 -289
  88. package/dist/tools/git-sync.d.ts +178 -166
  89. package/dist/tools/git-sync.d.ts.map +1 -1
  90. package/dist/tools/git-sync.js +312 -117
  91. package/dist/tools/git-sync.js.map +1 -1
  92. package/dist/tools/git-tags.d.ts +411 -411
  93. package/dist/tools/git-tags.js +485 -485
  94. package/dist/tools/git-webhooks.d.ts +470 -482
  95. package/dist/tools/git-webhooks.d.ts.map +1 -1
  96. package/dist/tools/git-webhooks.js +543 -555
  97. package/dist/tools/git-webhooks.js.map +1 -1
  98. package/dist/tools/git-worktree.d.ts +159 -159
  99. package/dist/tools/git-worktree.js +269 -269
  100. package/dist/tools/repositories.d.ts +405 -405
  101. package/dist/tools/repositories.js +569 -569
  102. package/dist/tools/users.d.ts +372 -372
  103. package/dist/tools/users.js +499 -499
  104. package/dist/tools/validator.d.ts +170 -170
  105. package/dist/tools/validator.js +194 -194
  106. package/dist/tools/version-control.d.ts +136 -136
  107. package/dist/tools/version-control.js +164 -164
  108. package/dist/utils/terminal-controller.d.ts +80 -80
  109. package/dist/utils/terminal-controller.js +345 -345
  110. package/dist/utils/user-detection.d.ts +24 -24
  111. package/dist/utils/user-detection.js +53 -53
  112. package/package.json +59 -59
@@ -1,500 +1,500 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.usersTool = void 0;
4
- const zod_1 = require("zod");
5
- const index_js_1 = require("../providers/index.js");
6
- /**
7
- * Tool: users
8
- *
9
- * DESCRIÇÃO:
10
- * Gerenciamento de usuários com suporte multi-provider (GitHub e Gitea)
11
- *
12
- * FUNCIONALIDADES:
13
- * - Obtenção de usuário atual
14
- * - Obtenção de usuário específico
15
- * - Busca de usuários
16
- * - Listagem de organizações
17
- * - Listagem de repositórios
18
- * - Informações de perfil
19
- *
20
- * USO:
21
- * - Para autenticação e perfil
22
- * - Para busca de usuários
23
- * - Para gerenciamento de acesso
24
- * - Para colaboração
25
- *
26
- * RECOMENDAÇÕES:
27
- * - Use apenas permissões necessárias
28
- * - Evite expor dados sensíveis
29
- * - Monitore uso da API
30
- * - Respeite limites de rate
31
- */
32
- /**
33
- * Schema de validação para entrada da tool users
34
- *
35
- * VALIDAÇÕES:
36
- * - action: Ação obrigatória (get, list, search, orgs, repos)
37
- * - Parâmetros específicos por ação
38
- * - Validação de tipos e formatos
39
- *
40
- * RECOMENDAÇÕES:
41
- * - Sempre valide entrada antes de usar
42
- * - Use parâmetros opcionais adequadamente
43
- * - Documente parâmetros obrigatórios
44
- */
45
- const UsersInputSchema = zod_1.z.object({
46
- action: zod_1.z.enum(['get', 'list', 'search', 'orgs', 'repos']),
47
- // Para multi-provider
48
- provider: zod_1.z.enum(['gitea', 'github', 'both']), // Provider específico: gitea, github ou both
49
- // Para get específico
50
- username: zod_1.z.string().optional(),
51
- // Para search
52
- query: zod_1.z.string().optional(),
53
- page: zod_1.z.number().min(1).optional(),
54
- limit: zod_1.z.number().min(1).max(100).optional(),
55
- // Para repos
56
- repo_type: zod_1.z.enum(['all', 'owner', 'member', 'collaborator']).optional(),
57
- sort: zod_1.z.enum(['created', 'updated', 'pushed', 'full_name']).optional(),
58
- direction: zod_1.z.enum(['asc', 'desc']).optional(),
59
- });
60
- /**
61
- * Schema de saída padronizado
62
- *
63
- * ESTRUTURA:
64
- * - success: Status da operação
65
- * - action: Ação executada
66
- * - message: Mensagem descritiva
67
- * - data: Dados retornados (opcional)
68
- * - error: Detalhes do erro (opcional)
69
- */
70
- const UsersResultSchema = zod_1.z.object({
71
- success: zod_1.z.boolean(),
72
- action: zod_1.z.string(),
73
- message: zod_1.z.string(),
74
- data: zod_1.z.any().optional(),
75
- error: zod_1.z.string().optional()
76
- });
77
- /**
78
- * Tool: users
79
- *
80
- * DESCRIÇÃO:
81
- * Gerenciamento completo de usuários Gitea com múltiplas ações
82
- *
83
- * ACTIONS DISPONÍVEIS:
84
- *
85
- * 1. get - Obter informações de usuário
86
- * Parâmetros:
87
- * - username (opcional): Nome de usuário específico (se não fornecido, usa usuário atual das env vars)
88
- *
89
- * 2. list - Listar usuários
90
- * Parâmetros:
91
- * - page (opcional): Página da listagem (padrão: 1)
92
- * - limit (opcional): Itens por página (padrão: 30, máximo: 100)
93
- *
94
- * 3. search - Buscar usuários
95
- * Parâmetros:
96
- * - query (obrigatório): Termo de busca
97
- * - page (opcional): Página da busca (padrão: 1)
98
- * - limit (opcional): Itens por página (padrão: 30, máximo: 100)
99
- *
100
- * 4. orgs - Obter organizações do usuário
101
- * Parâmetros:
102
- * - username (obrigatório): Nome de usuário
103
- * - page (opcional): Página da listagem (padrão: 1)
104
- * - limit (opcional): Itens por página (padrão: 30, máximo: 100)
105
- *
106
- * 5. repos - Listar repositórios do usuário
107
- * Parâmetros:
108
- * - username (obrigatório): Nome de usuário
109
- * - repo_type (opcional): Tipo de repositório (all, owner, member, collaborator) - padrão: all
110
- * - sort (opcional): Ordenação (created, updated, pushed, full_name) - padrão: created
111
- * - direction (opcional): Direção (asc, desc) - padrão: desc
112
- * - page (opcional): Página da listagem (padrão: 1)
113
- * - limit (opcional): Itens por página (padrão: 30, máximo: 100)
114
- *
115
- * RECOMENDAÇÕES DE USO:
116
- * - Respeite privacidade dos usuários
117
- * - Use apenas para operações necessárias
118
- * - Monitore uso de permissões
119
- * - Mantenha logs de acesso
120
- * - Use filtros adequados para listagens
121
- * - Verifique permissões antes de acessar dados
122
- */
123
- exports.usersTool = {
124
- name: 'users',
125
- description: 'Manage users with multi-provider support (GitHub and Gitea): get, list, search, orgs, repos. Dicas (solo): útil para automações pessoais, conferência rápida de acesso e organizações; use apenas permissões necessárias e evite expor dados sensíveis.',
126
- inputSchema: {
127
- type: 'object',
128
- properties: {
129
- action: {
130
- type: 'string',
131
- enum: ['get', 'list', 'search', 'orgs', 'repos'],
132
- description: 'Action to perform on users'
133
- },
134
- provider: { type: 'string', description: 'Provider to use (github, gitea, or omit for default)' },
135
- username: { type: 'string', description: 'Username (optional - if not provided, uses current user from env vars)' },
136
- query: { type: 'string', description: 'Search query' },
137
- page: { type: 'number', description: 'Page number', minimum: 1 },
138
- limit: { type: 'number', description: 'Items per page', minimum: 1, maximum: 100 },
139
- repo_type: { type: 'string', enum: ['all', 'owner', 'member', 'collaborator'], description: 'Repository type filter' },
140
- sort: { type: 'string', enum: ['created', 'updated', 'pushed', 'full_name'], description: 'Sort order' },
141
- direction: { type: 'string', enum: ['asc', 'desc'], description: 'Sort direction' }
142
- },
143
- required: ['action', 'provider']
144
- },
145
- /**
146
- * Handler principal da tool users
147
- *
148
- * FUNCIONALIDADE:
149
- * - Valida entrada usando Zod schema
150
- * - Roteia para método específico baseado na ação
151
- * - Trata erros de forma uniforme
152
- * - Retorna resultado padronizado
153
- *
154
- * FLUXO:
155
- * 1. Validação de entrada
156
- * 2. Seleção do provider
157
- * 3. Roteamento por ação
158
- * 4. Execução do método específico
159
- * 5. Tratamento de erros
160
- * 6. Retorno de resultado
161
- *
162
- * TRATAMENTO DE ERROS:
163
- * - Validação: erro de schema
164
- * - Execução: erro da operação
165
- * - Roteamento: ação não suportada
166
- *
167
- * RECOMENDAÇÕES:
168
- * - Sempre valide entrada antes de processar
169
- * - Trate erros específicos adequadamente
170
- * - Log detalhes de erro para debug
171
- * - Retorne mensagens de erro úteis
172
- */
173
- async handler(input) {
174
- try {
175
- const validatedInput = UsersInputSchema.parse(input);
176
- // Seleciona o provider baseado na entrada ou usa o padrão
177
- const provider = validatedInput.provider
178
- ? index_js_1.globalProviderFactory.getProvider(validatedInput.provider)
179
- : index_js_1.globalProviderFactory.getDefaultProvider();
180
- if (!provider) {
181
- throw new Error('Provider não encontrado ou não configurado');
182
- }
183
- switch (validatedInput.action) {
184
- case 'get':
185
- return await this.getUser(validatedInput, provider);
186
- case 'list':
187
- return await this.listUsers(validatedInput, provider);
188
- case 'search':
189
- return await this.searchUsers(validatedInput, provider);
190
- case 'orgs':
191
- return await this.getUserOrganizations(validatedInput, provider);
192
- case 'repos':
193
- return await this.getUserRepositories(validatedInput, provider);
194
- default:
195
- throw new Error(`Ação não suportada: ${validatedInput.action}`);
196
- }
197
- }
198
- catch (error) {
199
- return {
200
- success: false,
201
- action: input.action,
202
- message: 'Erro na operação de usuários',
203
- error: error instanceof Error ? error.message : String(error)
204
- };
205
- }
206
- },
207
- /**
208
- * Obtém informações de um usuário específico
209
- *
210
- * FUNCIONALIDADE:
211
- * - Retorna informações completas do usuário
212
- * - Suporta usuário atual ou específico
213
- * - Inclui perfil, estatísticas e metadados
214
- *
215
- * PARÂMETROS OBRIGATÓRIOS:
216
- * - Nenhum (usa usuário atual das variáveis de ambiente)
217
- *
218
- * PARÂMETROS OPCIONAIS:
219
- * - username: Nome de usuário específico (se não fornecido, usa usuário atual das env vars)
220
- *
221
- * VALIDAÇÕES:
222
- * - Username deve existir se fornecido
223
- * - Usuário deve ter permissão de acesso
224
- * - Usuário deve existir (se username fornecido)
225
- * - Usuário deve ter permissão de acesso
226
- *
227
- * RECOMENDAÇÕES:
228
- * - Use para obter informações de perfil
229
- * - Verifique permissões antes de acessar
230
- * - Respeite configurações de privacidade
231
- * - Monitore uso de dados sensíveis
232
- */
233
- async getUser(params, provider) {
234
- try {
235
- let user;
236
- let message;
237
- if (params.username) {
238
- // Obter usuário específico
239
- user = await provider.getUser(params.username);
240
- message = `Usuário '${params.username}' obtido com sucesso`;
241
- }
242
- else {
243
- // Usar usuário atual das variáveis de ambiente
244
- user = await provider.getCurrentUser();
245
- message = 'Usuário atual obtido com sucesso (das variáveis de ambiente)';
246
- }
247
- return {
248
- success: true,
249
- action: 'get',
250
- message,
251
- data: user
252
- };
253
- }
254
- catch (error) {
255
- throw new Error(`Falha ao obter usuário: ${error instanceof Error ? error.message : String(error)}`);
256
- }
257
- },
258
- /**
259
- * Lista usuários do sistema
260
- *
261
- * FUNCIONALIDADE:
262
- * - Lista usuários com paginação
263
- * - Retorna informações básicas de cada usuário
264
- * - Suporta filtros de paginação
265
- *
266
- * PARÂMETROS OPCIONAIS:
267
- * - page: Página da listagem (padrão: 1)
268
- * - limit: Itens por página (padrão: 30, máximo: 100)
269
- *
270
- * VALIDAÇÕES:
271
- * - Page deve ser >= 1
272
- * - Limit deve ser entre 1 e 100
273
- * - Usuário deve ter permissão de listagem
274
- *
275
- * RECOMENDAÇÕES:
276
- * - Use paginação para sistemas grandes
277
- * - Monitore número total de usuários
278
- * - Verifique permissões de acesso
279
- * - Mantenha logs de listagem
280
- */
281
- async listUsers(params, provider) {
282
- try {
283
- const page = params.page || 1;
284
- const limit = params.limit || 30;
285
- // Listar usuários do sistema
286
- const users = await provider.listUsers(page, limit);
287
- return {
288
- success: true,
289
- action: 'list',
290
- message: `${users.length} usuários listados com sucesso`,
291
- data: {
292
- users,
293
- page,
294
- limit,
295
- total: users.length
296
- }
297
- };
298
- }
299
- catch (error) {
300
- throw new Error(`Falha ao listar usuários: ${error instanceof Error ? error.message : String(error)}`);
301
- }
302
- },
303
- /**
304
- * Busca usuários por critérios específicos
305
- *
306
- * FUNCIONALIDADE:
307
- * - Busca usuários por nome ou email
308
- * - Suporta paginação
309
- * - Retorna resultados relevantes
310
- *
311
- * PARÂMETROS OBRIGATÓRIOS:
312
- * - query: Termo de busca
313
- *
314
- * PARÂMETROS OPCIONAIS:
315
- * - page: Página da busca (padrão: 1)
316
- * - limit: Itens por página (padrão: 30, máximo: 100)
317
- *
318
- * VALIDAÇÕES:
319
- * - Query deve ser fornecido
320
- * - Query deve ter pelo menos 3 caracteres
321
- * - Usuário deve ter permissão de busca
322
- *
323
- * RECOMENDAÇÕES:
324
- * - Use termos de busca específicos
325
- * - Combine com filtros de paginação
326
- * - Analise relevância dos resultados
327
- * - Respeite configurações de privacidade
328
- */
329
- async searchUsers(params, provider) {
330
- try {
331
- if (!params.query) {
332
- throw new Error('Query é obrigatória');
333
- }
334
- if (params.query.length < 3) {
335
- throw new Error('Query deve ter pelo menos 3 caracteres');
336
- }
337
- const page = params.page || 1;
338
- const limit = params.limit || 30;
339
- try {
340
- const users = await provider.searchUsers(params.query, page, limit);
341
- return {
342
- success: true,
343
- action: 'search',
344
- message: `${users.length} usuários encontrados para '${params.query}'`,
345
- data: {
346
- users,
347
- query: params.query,
348
- page,
349
- limit,
350
- total: users.length
351
- }
352
- };
353
- }
354
- catch (error) {
355
- // Se houver erro específico no provider, retornar resultado vazio
356
- if (error.message && (error.message.includes('data.map') || error.message.includes('not a function'))) {
357
- console.warn('[USERS] Busca não suportada pelo provider, retornando lista vazia');
358
- return {
359
- success: true,
360
- action: 'search',
361
- message: `Busca de usuários não suportada pelo provider atual`,
362
- data: {
363
- users: [],
364
- query: params.query,
365
- page,
366
- limit,
367
- total: 0,
368
- note: 'Funcionalidade não suportada pelo provider'
369
- }
370
- };
371
- }
372
- throw error;
373
- }
374
- }
375
- catch (error) {
376
- throw new Error(`Falha ao buscar usuários: ${error instanceof Error ? error.message : String(error)}`);
377
- }
378
- },
379
- /**
380
- * Obtém organizações de um usuário específico
381
- *
382
- * FUNCIONALIDADE:
383
- * - Lista organizações do usuário
384
- * - Suporta paginação
385
- * - Retorna informações básicas das organizações
386
- *
387
- * PARÂMETROS OBRIGATÓRIOS:
388
- * - username: Nome de usuário
389
- *
390
- * PARÂMETROS OPCIONAIS:
391
- * - page: Página da listagem (padrão: 1)
392
- * - limit: Itens por página (padrão: 30, máximo: 100)
393
- *
394
- * VALIDAÇÕES:
395
- * - Username deve ser fornecido
396
- * - Usuário deve existir
397
- * - Usuário deve ter permissão de acesso
398
- *
399
- * RECOMENDAÇÕES:
400
- * - Use para gerenciar membros de organizações
401
- * - Verifique permissões antes de acessar
402
- * - Monitore acesso a dados organizacionais
403
- * - Mantenha logs de consulta
404
- */
405
- async getUserOrganizations(params, provider) {
406
- try {
407
- // Se não fornecer username, usar o usuário atual das variáveis de ambiente
408
- const username = params.username || await this.getCurrentUsername(provider);
409
- const page = params.page || 1;
410
- const limit = params.limit || 30;
411
- // Obter organizações do usuário
412
- const organizations = await provider.getUserOrganizations(username, page, limit);
413
- return {
414
- success: true,
415
- action: 'orgs',
416
- message: `${organizations.length} organizações encontradas para '${username}'`,
417
- data: {
418
- username,
419
- organizations,
420
- page,
421
- limit,
422
- total: organizations.length
423
- }
424
- };
425
- }
426
- catch (error) {
427
- throw new Error(`Falha ao obter organizações do usuário: ${error instanceof Error ? error.message : String(error)}`);
428
- }
429
- },
430
- /**
431
- * Obtém o nome de usuário atual das variáveis de ambiente baseado no provider
432
- */
433
- async getCurrentUsername(provider) {
434
- // Obter informações do usuário atual para extrair o username
435
- const currentUser = await provider.getCurrentUser();
436
- return currentUser.login;
437
- },
438
- /**
439
- * Lista repositórios de um usuário específico
440
- *
441
- * FUNCIONALIDADE:
442
- * - Lista repositórios com filtros
443
- * - Suporta diferentes tipos de repositório
444
- * - Permite ordenação e paginação
445
- *
446
- * PARÂMETROS OBRIGATÓRIOS:
447
- * - Nenhum (usa usuário atual das variáveis de ambiente)
448
- *
449
- * PARÂMETROS OPCIONAIS:
450
- * - username: Nome de usuário específico (se não fornecido, usa usuário atual das env vars)
451
- * - repo_type: Tipo de repositório (all, owner, member, collaborator) - padrão: all
452
- * - sort: Ordenação (created, updated, pushed, full_name) - padrão: created
453
- * - direction: Direção (asc, desc) - padrão: desc
454
- * - page: Página da listagem (padrão: 1)
455
- * - limit: Itens por página (padrão: 30, máximo: 100)
456
- *
457
- * VALIDAÇÕES:
458
- * - Username deve ser fornecido
459
- * - Usuário deve existir
460
- * - Usuário deve ter permissão de acesso
461
- *
462
- * RECOMENDAÇÕES:
463
- * - Use filtros adequados para organização
464
- * - Monitore acesso a repositórios
465
- * - Verifique permissões antes de listar
466
- * - Mantenha logs de consulta
467
- */
468
- async getUserRepositories(params, provider) {
469
- try {
470
- // Se não fornecer username, usar o usuário atual das variáveis de ambiente
471
- const username = params.username || await this.getCurrentUsername(provider);
472
- const repoType = params.repo_type || 'all';
473
- const sort = params.sort || 'created';
474
- const direction = params.direction || 'desc';
475
- const page = params.page || 1;
476
- const limit = params.limit || 30;
477
- // Obter repositórios do usuário
478
- const repositories = await provider.getUserRepositories(username, page, limit);
479
- return {
480
- success: true,
481
- action: 'repos',
482
- message: `${repositories.length} repositórios encontrados para '${username}'`,
483
- data: {
484
- username,
485
- repositories,
486
- repo_type: repoType,
487
- sort,
488
- direction,
489
- page,
490
- limit,
491
- total: repositories.length
492
- }
493
- };
494
- }
495
- catch (error) {
496
- throw new Error(`Falha ao obter repositórios do usuário: ${error instanceof Error ? error.message : String(error)}`);
497
- }
498
- }
499
- };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.usersTool = void 0;
4
+ const zod_1 = require("zod");
5
+ const index_js_1 = require("../providers/index.js");
6
+ /**
7
+ * Tool: users
8
+ *
9
+ * DESCRIÇÃO:
10
+ * Gerenciamento de usuários com suporte multi-provider (GitHub e Gitea)
11
+ *
12
+ * FUNCIONALIDADES:
13
+ * - Obtenção de usuário atual
14
+ * - Obtenção de usuário específico
15
+ * - Busca de usuários
16
+ * - Listagem de organizações
17
+ * - Listagem de repositórios
18
+ * - Informações de perfil
19
+ *
20
+ * USO:
21
+ * - Para autenticação e perfil
22
+ * - Para busca de usuários
23
+ * - Para gerenciamento de acesso
24
+ * - Para colaboração
25
+ *
26
+ * RECOMENDAÇÕES:
27
+ * - Use apenas permissões necessárias
28
+ * - Evite expor dados sensíveis
29
+ * - Monitore uso da API
30
+ * - Respeite limites de rate
31
+ */
32
+ /**
33
+ * Schema de validação para entrada da tool users
34
+ *
35
+ * VALIDAÇÕES:
36
+ * - action: Ação obrigatória (get, list, search, orgs, repos)
37
+ * - Parâmetros específicos por ação
38
+ * - Validação de tipos e formatos
39
+ *
40
+ * RECOMENDAÇÕES:
41
+ * - Sempre valide entrada antes de usar
42
+ * - Use parâmetros opcionais adequadamente
43
+ * - Documente parâmetros obrigatórios
44
+ */
45
+ const UsersInputSchema = zod_1.z.object({
46
+ action: zod_1.z.enum(['get', 'list', 'search', 'orgs', 'repos']),
47
+ // Para multi-provider
48
+ provider: zod_1.z.enum(['gitea', 'github', 'both']), // Provider específico: gitea, github ou both
49
+ // Para get específico
50
+ username: zod_1.z.string().optional(),
51
+ // Para search
52
+ query: zod_1.z.string().optional(),
53
+ page: zod_1.z.number().min(1).optional(),
54
+ limit: zod_1.z.number().min(1).max(100).optional(),
55
+ // Para repos
56
+ repo_type: zod_1.z.enum(['all', 'owner', 'member', 'collaborator']).optional(),
57
+ sort: zod_1.z.enum(['created', 'updated', 'pushed', 'full_name']).optional(),
58
+ direction: zod_1.z.enum(['asc', 'desc']).optional(),
59
+ });
60
+ /**
61
+ * Schema de saída padronizado
62
+ *
63
+ * ESTRUTURA:
64
+ * - success: Status da operação
65
+ * - action: Ação executada
66
+ * - message: Mensagem descritiva
67
+ * - data: Dados retornados (opcional)
68
+ * - error: Detalhes do erro (opcional)
69
+ */
70
+ const UsersResultSchema = zod_1.z.object({
71
+ success: zod_1.z.boolean(),
72
+ action: zod_1.z.string(),
73
+ message: zod_1.z.string(),
74
+ data: zod_1.z.any().optional(),
75
+ error: zod_1.z.string().optional()
76
+ });
77
+ /**
78
+ * Tool: users
79
+ *
80
+ * DESCRIÇÃO:
81
+ * Gerenciamento completo de usuários Gitea com múltiplas ações
82
+ *
83
+ * ACTIONS DISPONÍVEIS:
84
+ *
85
+ * 1. get - Obter informações de usuário
86
+ * Parâmetros:
87
+ * - username (opcional): Nome de usuário específico (se não fornecido, usa usuário atual das env vars)
88
+ *
89
+ * 2. list - Listar usuários
90
+ * Parâmetros:
91
+ * - page (opcional): Página da listagem (padrão: 1)
92
+ * - limit (opcional): Itens por página (padrão: 30, máximo: 100)
93
+ *
94
+ * 3. search - Buscar usuários
95
+ * Parâmetros:
96
+ * - query (obrigatório): Termo de busca
97
+ * - page (opcional): Página da busca (padrão: 1)
98
+ * - limit (opcional): Itens por página (padrão: 30, máximo: 100)
99
+ *
100
+ * 4. orgs - Obter organizações do usuário
101
+ * Parâmetros:
102
+ * - username (obrigatório): Nome de usuário
103
+ * - page (opcional): Página da listagem (padrão: 1)
104
+ * - limit (opcional): Itens por página (padrão: 30, máximo: 100)
105
+ *
106
+ * 5. repos - Listar repositórios do usuário
107
+ * Parâmetros:
108
+ * - username (obrigatório): Nome de usuário
109
+ * - repo_type (opcional): Tipo de repositório (all, owner, member, collaborator) - padrão: all
110
+ * - sort (opcional): Ordenação (created, updated, pushed, full_name) - padrão: created
111
+ * - direction (opcional): Direção (asc, desc) - padrão: desc
112
+ * - page (opcional): Página da listagem (padrão: 1)
113
+ * - limit (opcional): Itens por página (padrão: 30, máximo: 100)
114
+ *
115
+ * RECOMENDAÇÕES DE USO:
116
+ * - Respeite privacidade dos usuários
117
+ * - Use apenas para operações necessárias
118
+ * - Monitore uso de permissões
119
+ * - Mantenha logs de acesso
120
+ * - Use filtros adequados para listagens
121
+ * - Verifique permissões antes de acessar dados
122
+ */
123
+ exports.usersTool = {
124
+ name: 'users',
125
+ description: 'Manage users with multi-provider support (GitHub and Gitea): get, list, search, orgs, repos. Dicas (solo): útil para automações pessoais, conferência rápida de acesso e organizações; use apenas permissões necessárias e evite expor dados sensíveis.',
126
+ inputSchema: {
127
+ type: 'object',
128
+ properties: {
129
+ action: {
130
+ type: 'string',
131
+ enum: ['get', 'list', 'search', 'orgs', 'repos'],
132
+ description: 'Action to perform on users'
133
+ },
134
+ provider: { type: 'string', description: 'Provider to use (github, gitea, or omit for default)' },
135
+ username: { type: 'string', description: 'Username (optional - if not provided, uses current user from env vars)' },
136
+ query: { type: 'string', description: 'Search query' },
137
+ page: { type: 'number', description: 'Page number', minimum: 1 },
138
+ limit: { type: 'number', description: 'Items per page', minimum: 1, maximum: 100 },
139
+ repo_type: { type: 'string', enum: ['all', 'owner', 'member', 'collaborator'], description: 'Repository type filter' },
140
+ sort: { type: 'string', enum: ['created', 'updated', 'pushed', 'full_name'], description: 'Sort order' },
141
+ direction: { type: 'string', enum: ['asc', 'desc'], description: 'Sort direction' }
142
+ },
143
+ required: ['action', 'provider']
144
+ },
145
+ /**
146
+ * Handler principal da tool users
147
+ *
148
+ * FUNCIONALIDADE:
149
+ * - Valida entrada usando Zod schema
150
+ * - Roteia para método específico baseado na ação
151
+ * - Trata erros de forma uniforme
152
+ * - Retorna resultado padronizado
153
+ *
154
+ * FLUXO:
155
+ * 1. Validação de entrada
156
+ * 2. Seleção do provider
157
+ * 3. Roteamento por ação
158
+ * 4. Execução do método específico
159
+ * 5. Tratamento de erros
160
+ * 6. Retorno de resultado
161
+ *
162
+ * TRATAMENTO DE ERROS:
163
+ * - Validação: erro de schema
164
+ * - Execução: erro da operação
165
+ * - Roteamento: ação não suportada
166
+ *
167
+ * RECOMENDAÇÕES:
168
+ * - Sempre valide entrada antes de processar
169
+ * - Trate erros específicos adequadamente
170
+ * - Log detalhes de erro para debug
171
+ * - Retorne mensagens de erro úteis
172
+ */
173
+ async handler(input) {
174
+ try {
175
+ const validatedInput = UsersInputSchema.parse(input);
176
+ // Seleciona o provider baseado na entrada ou usa o padrão
177
+ const provider = validatedInput.provider
178
+ ? index_js_1.globalProviderFactory.getProvider(validatedInput.provider)
179
+ : index_js_1.globalProviderFactory.getDefaultProvider();
180
+ if (!provider) {
181
+ throw new Error('Provider não encontrado ou não configurado');
182
+ }
183
+ switch (validatedInput.action) {
184
+ case 'get':
185
+ return await this.getUser(validatedInput, provider);
186
+ case 'list':
187
+ return await this.listUsers(validatedInput, provider);
188
+ case 'search':
189
+ return await this.searchUsers(validatedInput, provider);
190
+ case 'orgs':
191
+ return await this.getUserOrganizations(validatedInput, provider);
192
+ case 'repos':
193
+ return await this.getUserRepositories(validatedInput, provider);
194
+ default:
195
+ throw new Error(`Ação não suportada: ${validatedInput.action}`);
196
+ }
197
+ }
198
+ catch (error) {
199
+ return {
200
+ success: false,
201
+ action: input.action,
202
+ message: 'Erro na operação de usuários',
203
+ error: error instanceof Error ? error.message : String(error)
204
+ };
205
+ }
206
+ },
207
+ /**
208
+ * Obtém informações de um usuário específico
209
+ *
210
+ * FUNCIONALIDADE:
211
+ * - Retorna informações completas do usuário
212
+ * - Suporta usuário atual ou específico
213
+ * - Inclui perfil, estatísticas e metadados
214
+ *
215
+ * PARÂMETROS OBRIGATÓRIOS:
216
+ * - Nenhum (usa usuário atual das variáveis de ambiente)
217
+ *
218
+ * PARÂMETROS OPCIONAIS:
219
+ * - username: Nome de usuário específico (se não fornecido, usa usuário atual das env vars)
220
+ *
221
+ * VALIDAÇÕES:
222
+ * - Username deve existir se fornecido
223
+ * - Usuário deve ter permissão de acesso
224
+ * - Usuário deve existir (se username fornecido)
225
+ * - Usuário deve ter permissão de acesso
226
+ *
227
+ * RECOMENDAÇÕES:
228
+ * - Use para obter informações de perfil
229
+ * - Verifique permissões antes de acessar
230
+ * - Respeite configurações de privacidade
231
+ * - Monitore uso de dados sensíveis
232
+ */
233
+ async getUser(params, provider) {
234
+ try {
235
+ let user;
236
+ let message;
237
+ if (params.username) {
238
+ // Obter usuário específico
239
+ user = await provider.getUser(params.username);
240
+ message = `Usuário '${params.username}' obtido com sucesso`;
241
+ }
242
+ else {
243
+ // Usar usuário atual das variáveis de ambiente
244
+ user = await provider.getCurrentUser();
245
+ message = 'Usuário atual obtido com sucesso (das variáveis de ambiente)';
246
+ }
247
+ return {
248
+ success: true,
249
+ action: 'get',
250
+ message,
251
+ data: user
252
+ };
253
+ }
254
+ catch (error) {
255
+ throw new Error(`Falha ao obter usuário: ${error instanceof Error ? error.message : String(error)}`);
256
+ }
257
+ },
258
+ /**
259
+ * Lista usuários do sistema
260
+ *
261
+ * FUNCIONALIDADE:
262
+ * - Lista usuários com paginação
263
+ * - Retorna informações básicas de cada usuário
264
+ * - Suporta filtros de paginação
265
+ *
266
+ * PARÂMETROS OPCIONAIS:
267
+ * - page: Página da listagem (padrão: 1)
268
+ * - limit: Itens por página (padrão: 30, máximo: 100)
269
+ *
270
+ * VALIDAÇÕES:
271
+ * - Page deve ser >= 1
272
+ * - Limit deve ser entre 1 e 100
273
+ * - Usuário deve ter permissão de listagem
274
+ *
275
+ * RECOMENDAÇÕES:
276
+ * - Use paginação para sistemas grandes
277
+ * - Monitore número total de usuários
278
+ * - Verifique permissões de acesso
279
+ * - Mantenha logs de listagem
280
+ */
281
+ async listUsers(params, provider) {
282
+ try {
283
+ const page = params.page || 1;
284
+ const limit = params.limit || 30;
285
+ // Listar usuários do sistema
286
+ const users = await provider.listUsers(page, limit);
287
+ return {
288
+ success: true,
289
+ action: 'list',
290
+ message: `${users.length} usuários listados com sucesso`,
291
+ data: {
292
+ users,
293
+ page,
294
+ limit,
295
+ total: users.length
296
+ }
297
+ };
298
+ }
299
+ catch (error) {
300
+ throw new Error(`Falha ao listar usuários: ${error instanceof Error ? error.message : String(error)}`);
301
+ }
302
+ },
303
+ /**
304
+ * Busca usuários por critérios específicos
305
+ *
306
+ * FUNCIONALIDADE:
307
+ * - Busca usuários por nome ou email
308
+ * - Suporta paginação
309
+ * - Retorna resultados relevantes
310
+ *
311
+ * PARÂMETROS OBRIGATÓRIOS:
312
+ * - query: Termo de busca
313
+ *
314
+ * PARÂMETROS OPCIONAIS:
315
+ * - page: Página da busca (padrão: 1)
316
+ * - limit: Itens por página (padrão: 30, máximo: 100)
317
+ *
318
+ * VALIDAÇÕES:
319
+ * - Query deve ser fornecido
320
+ * - Query deve ter pelo menos 3 caracteres
321
+ * - Usuário deve ter permissão de busca
322
+ *
323
+ * RECOMENDAÇÕES:
324
+ * - Use termos de busca específicos
325
+ * - Combine com filtros de paginação
326
+ * - Analise relevância dos resultados
327
+ * - Respeite configurações de privacidade
328
+ */
329
+ async searchUsers(params, provider) {
330
+ try {
331
+ if (!params.query) {
332
+ throw new Error('Query é obrigatória');
333
+ }
334
+ if (params.query.length < 3) {
335
+ throw new Error('Query deve ter pelo menos 3 caracteres');
336
+ }
337
+ const page = params.page || 1;
338
+ const limit = params.limit || 30;
339
+ try {
340
+ const users = await provider.searchUsers(params.query, page, limit);
341
+ return {
342
+ success: true,
343
+ action: 'search',
344
+ message: `${users.length} usuários encontrados para '${params.query}'`,
345
+ data: {
346
+ users,
347
+ query: params.query,
348
+ page,
349
+ limit,
350
+ total: users.length
351
+ }
352
+ };
353
+ }
354
+ catch (error) {
355
+ // Se houver erro específico no provider, retornar resultado vazio
356
+ if (error.message && (error.message.includes('data.map') || error.message.includes('not a function'))) {
357
+ console.warn('[USERS] Busca não suportada pelo provider, retornando lista vazia');
358
+ return {
359
+ success: true,
360
+ action: 'search',
361
+ message: `Busca de usuários não suportada pelo provider atual`,
362
+ data: {
363
+ users: [],
364
+ query: params.query,
365
+ page,
366
+ limit,
367
+ total: 0,
368
+ note: 'Funcionalidade não suportada pelo provider'
369
+ }
370
+ };
371
+ }
372
+ throw error;
373
+ }
374
+ }
375
+ catch (error) {
376
+ throw new Error(`Falha ao buscar usuários: ${error instanceof Error ? error.message : String(error)}`);
377
+ }
378
+ },
379
+ /**
380
+ * Obtém organizações de um usuário específico
381
+ *
382
+ * FUNCIONALIDADE:
383
+ * - Lista organizações do usuário
384
+ * - Suporta paginação
385
+ * - Retorna informações básicas das organizações
386
+ *
387
+ * PARÂMETROS OBRIGATÓRIOS:
388
+ * - username: Nome de usuário
389
+ *
390
+ * PARÂMETROS OPCIONAIS:
391
+ * - page: Página da listagem (padrão: 1)
392
+ * - limit: Itens por página (padrão: 30, máximo: 100)
393
+ *
394
+ * VALIDAÇÕES:
395
+ * - Username deve ser fornecido
396
+ * - Usuário deve existir
397
+ * - Usuário deve ter permissão de acesso
398
+ *
399
+ * RECOMENDAÇÕES:
400
+ * - Use para gerenciar membros de organizações
401
+ * - Verifique permissões antes de acessar
402
+ * - Monitore acesso a dados organizacionais
403
+ * - Mantenha logs de consulta
404
+ */
405
+ async getUserOrganizations(params, provider) {
406
+ try {
407
+ // Se não fornecer username, usar o usuário atual das variáveis de ambiente
408
+ const username = params.username || await this.getCurrentUsername(provider);
409
+ const page = params.page || 1;
410
+ const limit = params.limit || 30;
411
+ // Obter organizações do usuário
412
+ const organizations = await provider.getUserOrganizations(username, page, limit);
413
+ return {
414
+ success: true,
415
+ action: 'orgs',
416
+ message: `${organizations.length} organizações encontradas para '${username}'`,
417
+ data: {
418
+ username,
419
+ organizations,
420
+ page,
421
+ limit,
422
+ total: organizations.length
423
+ }
424
+ };
425
+ }
426
+ catch (error) {
427
+ throw new Error(`Falha ao obter organizações do usuário: ${error instanceof Error ? error.message : String(error)}`);
428
+ }
429
+ },
430
+ /**
431
+ * Obtém o nome de usuário atual das variáveis de ambiente baseado no provider
432
+ */
433
+ async getCurrentUsername(provider) {
434
+ // Obter informações do usuário atual para extrair o username
435
+ const currentUser = await provider.getCurrentUser();
436
+ return currentUser.login;
437
+ },
438
+ /**
439
+ * Lista repositórios de um usuário específico
440
+ *
441
+ * FUNCIONALIDADE:
442
+ * - Lista repositórios com filtros
443
+ * - Suporta diferentes tipos de repositório
444
+ * - Permite ordenação e paginação
445
+ *
446
+ * PARÂMETROS OBRIGATÓRIOS:
447
+ * - Nenhum (usa usuário atual das variáveis de ambiente)
448
+ *
449
+ * PARÂMETROS OPCIONAIS:
450
+ * - username: Nome de usuário específico (se não fornecido, usa usuário atual das env vars)
451
+ * - repo_type: Tipo de repositório (all, owner, member, collaborator) - padrão: all
452
+ * - sort: Ordenação (created, updated, pushed, full_name) - padrão: created
453
+ * - direction: Direção (asc, desc) - padrão: desc
454
+ * - page: Página da listagem (padrão: 1)
455
+ * - limit: Itens por página (padrão: 30, máximo: 100)
456
+ *
457
+ * VALIDAÇÕES:
458
+ * - Username deve ser fornecido
459
+ * - Usuário deve existir
460
+ * - Usuário deve ter permissão de acesso
461
+ *
462
+ * RECOMENDAÇÕES:
463
+ * - Use filtros adequados para organização
464
+ * - Monitore acesso a repositórios
465
+ * - Verifique permissões antes de listar
466
+ * - Mantenha logs de consulta
467
+ */
468
+ async getUserRepositories(params, provider) {
469
+ try {
470
+ // Se não fornecer username, usar o usuário atual das variáveis de ambiente
471
+ const username = params.username || await this.getCurrentUsername(provider);
472
+ const repoType = params.repo_type || 'all';
473
+ const sort = params.sort || 'created';
474
+ const direction = params.direction || 'desc';
475
+ const page = params.page || 1;
476
+ const limit = params.limit || 30;
477
+ // Obter repositórios do usuário
478
+ const repositories = await provider.getUserRepositories(username, page, limit);
479
+ return {
480
+ success: true,
481
+ action: 'repos',
482
+ message: `${repositories.length} repositórios encontrados para '${username}'`,
483
+ data: {
484
+ username,
485
+ repositories,
486
+ repo_type: repoType,
487
+ sort,
488
+ direction,
489
+ page,
490
+ limit,
491
+ total: repositories.length
492
+ }
493
+ };
494
+ }
495
+ catch (error) {
496
+ throw new Error(`Falha ao obter repositórios do usuário: ${error instanceof Error ? error.message : String(error)}`);
497
+ }
498
+ }
499
+ };
500
500
  //# sourceMappingURL=users.js.map