@andrebuzeli/git-mcp 2.27.3 → 2.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/client.d.ts +306 -306
  2. package/dist/client.js +298 -298
  3. package/dist/config.d.ts +310 -310
  4. package/dist/config.js +392 -392
  5. package/dist/index.d.ts +22 -22
  6. package/dist/index.js +89 -89
  7. package/dist/providers/base-provider.d.ts +160 -156
  8. package/dist/providers/base-provider.d.ts.map +1 -1
  9. package/dist/providers/base-provider.js +274 -260
  10. package/dist/providers/base-provider.js.map +1 -1
  11. package/dist/providers/error-handler.d.ts +50 -50
  12. package/dist/providers/error-handler.js +175 -175
  13. package/dist/providers/gitea-provider.d.ts +97 -97
  14. package/dist/providers/gitea-provider.js +1001 -1001
  15. package/dist/providers/github-provider.d.ts +104 -104
  16. package/dist/providers/github-provider.js +1234 -1234
  17. package/dist/providers/index.d.ts +12 -12
  18. package/dist/providers/index.js +40 -40
  19. package/dist/providers/provider-factory.d.ts +74 -74
  20. package/dist/providers/provider-factory.js +311 -311
  21. package/dist/providers/types.d.ts +318 -298
  22. package/dist/providers/types.d.ts.map +1 -1
  23. package/dist/providers/types.js +6 -6
  24. package/dist/server.d.ts +76 -76
  25. package/dist/server.d.ts.map +1 -1
  26. package/dist/server.js +306 -357
  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,433 +1,433 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.workflowsTool = 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
- const validator_js_1 = require("./validator.js");
8
- /**
9
- * Tool: workflows
10
- *
11
- * DESCRIÇÃO:
12
- * Gerenciamento completo de workflows CI/CD com múltiplas ações
13
- *
14
- * FUNCIONALIDADES:
15
- * - Listagem de workflows ativos
16
- * - Criação de novos workflows
17
- * - Disparo manual de workflows
18
- * - Verificação de status de execução
19
- * - Obtenção de logs de execução
20
- * - Controle de workflows (enable/disable)
21
- *
22
- * USO:
23
- * - Para automatizar CI/CD pipelines
24
- * - Para monitorar execuções
25
- * - Para gerenciar workflows de desenvolvimento
26
- * - Para integração com ferramentas de deploy
27
- *
28
- * RECOMENDAÇÕES:
29
- * - Use workflows para automatizar testes
30
- * - Configure triggers apropriados
31
- * - Monitore logs regularmente
32
- * - Mantenha workflows simples e focados
33
- */
34
- /**
35
- * Schema de validação para entrada da tool workflows
36
- *
37
- * VALIDAÇÕES:
38
- * - action: Ação obrigatória (list, create, trigger, status, logs, disable, enable)
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 WorkflowsInputSchema = zod_1.z.object({
48
- action: zod_1.z.enum(['list', 'create', 'trigger', 'status', 'logs', 'disable', 'enable']),
49
- // Parâmetros comuns
50
- repo: validator_js_1.CommonSchemas.repo,
51
- // Parâmetros para listagem
52
- page: validator_js_1.CommonSchemas.page,
53
- limit: validator_js_1.CommonSchemas.limit,
54
- // Parâmetros para criação
55
- name: validator_js_1.CommonSchemas.shortString,
56
- description: validator_js_1.CommonSchemas.mediumString,
57
- workflow_content: validator_js_1.CommonSchemas.longString,
58
- branch: validator_js_1.CommonSchemas.branch,
59
- // Parâmetros para trigger e status
60
- workflow_id: validator_js_1.CommonSchemas.shortString,
61
- workflow_name: validator_js_1.CommonSchemas.shortString,
62
- run_id: validator_js_1.CommonSchemas.shortString,
63
- // Parâmetros para logs
64
- job_id: validator_js_1.CommonSchemas.shortString,
65
- step_number: zod_1.z.number().optional(),
66
- // Parâmetros para inputs do workflow
67
- inputs: zod_1.z.record(zod_1.z.string()).optional(),
68
- ref: validator_js_1.CommonSchemas.branch.optional()
69
- }).refine((data) => {
70
- // Validações específicas por ação
71
- if (['create'].includes(data.action)) {
72
- return data.repo && data.name && data.workflow_content;
73
- }
74
- if (['trigger', 'status', 'logs', 'disable', 'enable'].includes(data.action)) {
75
- return data.repo && (data.workflow_id || data.workflow_name);
76
- }
77
- return data.repo;
78
- }, {
79
- message: "Parâmetros obrigatórios não fornecidos para a ação especificada"
80
- });
81
- /**
82
- * Schema de validação para resultado da tool workflows
83
- */
84
- const WorkflowsResultSchema = zod_1.z.object({
85
- success: zod_1.z.boolean(),
86
- action: zod_1.z.string(),
87
- message: zod_1.z.string(),
88
- data: zod_1.z.any().optional(),
89
- error: zod_1.z.string().optional()
90
- });
91
- /**
92
- * Implementação da tool workflows
93
- *
94
- * ESTRUTURA:
95
- * - Validação de entrada
96
- * - Seleção do provider
97
- * - Execução da ação
98
- * - Tratamento de erros
99
- * - Formatação do resultado
100
- *
101
- * AÇÕES SUPORTADAS:
102
- * - list: Lista workflows do repositório
103
- * - create: Cria novo workflow
104
- * - trigger: Dispara workflow manualmente
105
- * - status: Verifica status de execução
106
- * - logs: Obtém logs de execução
107
- * - disable: Desabilita workflow
108
- * - enable: Habilita workflow
109
- *
110
- * TRATAMENTO DE ERROS:
111
- * - Validação de parâmetros
112
- * - Verificação de permissões
113
- * - Tratamento de falhas de API
114
- * - Logs detalhados para debug
115
- */
116
- exports.workflowsTool = {
117
- name: 'gh-workflows',
118
- description: 'tool: Gerencia GitHub Actions workflows para CI/CD\n──────────────\naction list: lista workflows do repositório\naction list requires: repo, page, limit\n───────────────\naction create: cria novo workflow\naction create requires: repo, name, workflow_content, description, branch\n───────────────\naction trigger: dispara workflow manualmente\naction trigger requires: repo, workflow_id, ref, inputs\n───────────────\naction status: verifica status de execução\naction status requires: repo, run_id\n───────────────\naction logs: obtém logs de execução\naction logs requires: repo, run_id, job_id, step_number\n───────────────\naction disable: desabilita workflow\naction disable requires: repo, workflow_id\n───────────────\naction enable: habilita workflow\naction enable requires: repo, workflow_id',
119
- inputSchema: {
120
- type: 'object',
121
- properties: {
122
- action: {
123
- type: 'string',
124
- enum: ['list', 'create', 'trigger', 'status', 'logs', 'disable', 'enable'],
125
- description: 'Action to perform on workflows'
126
- },
127
- repo: { type: 'string', description: 'Repository name' },
128
- name: { type: 'string', description: 'Workflow name for creation' },
129
- description: { type: 'string', description: 'Workflow description' },
130
- workflow_content: { type: 'string', description: 'Workflow YAML content' },
131
- branch: { type: 'string', description: 'Target branch' },
132
- workflow_id: { type: 'string', description: 'Workflow ID' },
133
- workflow_name: { type: 'string', description: 'Workflow name' },
134
- run_id: { type: 'string', description: 'Workflow run ID' },
135
- job_id: { type: 'string', description: 'Job ID for logs' },
136
- step_number: { type: 'number', description: 'Step number for logs' },
137
- ref: { type: 'string', description: 'Git reference for trigger' },
138
- page: { type: 'number', description: 'Page number', minimum: 1 },
139
- limit: { type: 'number', description: 'Items per page', minimum: 1, maximum: 100 }
140
- },
141
- required: ['action', 'repo']
142
- },
143
- /**
144
- * Handler principal da tool workflows
145
- *
146
- * FLUXO:
147
- * 1. Validação da entrada
148
- * 2. Seleção do provider
149
- * 3. Execução da ação específica
150
- * 4. Formatação e retorno do resultado
151
- *
152
- * PARÂMETROS:
153
- * @param input - Dados de entrada validados
154
- *
155
- * RETORNO:
156
- * @returns Promise<WorkflowsResult> - Resultado da operação
157
- *
158
- * ERROS:
159
- * - Lança exceção em caso de erro de validação
160
- * - Retorna erro formatado em caso de falha de API
161
- */
162
- async handler(input) {
163
- try {
164
- // Validação da entrada
165
- const validatedInput = WorkflowsInputSchema.parse(input);
166
- // Fixar provider como github para tools exclusivas do GitHub
167
- const updatedParams = await (0, user_detection_js_1.applyAutoUserDetection)(validatedInput, 'github');
168
- const provider = index_js_1.globalProviderFactory.getProvider('github');
169
- if (!provider) {
170
- throw new Error('Provider GitHub não encontrado');
171
- }
172
- // Execução da ação específica
173
- switch (updatedParams.action) {
174
- case 'list':
175
- return await this.listWorkflows(updatedParams, provider);
176
- case 'create':
177
- return await this.createWorkflow(updatedParams, provider);
178
- case 'trigger':
179
- return await this.triggerWorkflow(updatedParams, provider);
180
- case 'status':
181
- return await this.getWorkflowStatus(updatedParams, provider);
182
- case 'logs':
183
- return await this.getWorkflowLogs(updatedParams, provider);
184
- case 'disable':
185
- return await this.disableWorkflow(updatedParams, provider);
186
- case 'enable':
187
- return await this.enableWorkflow(updatedParams, provider);
188
- default:
189
- throw new Error(`Ação não suportada: ${updatedParams.action}`);
190
- }
191
- }
192
- catch (error) {
193
- return {
194
- success: false,
195
- action: input.action || 'unknown',
196
- message: 'Erro na operação de workflows',
197
- error: error instanceof Error ? error.message : String(error)
198
- };
199
- }
200
- },
201
- /**
202
- * Lista workflows do repositório
203
- */
204
- async listWorkflows(params, provider) {
205
- try {
206
- // Auto-detecção de owner/username se não fornecidos
207
- let updatedParams = { ...params };
208
- const currentUser = await provider.getCurrentUser();
209
- const owner = currentUser.login;
210
- if (!provider.listWorkflows) {
211
- return {
212
- success: true,
213
- action: 'list',
214
- message: 'Funcionalidade de workflows não suportada por este provider',
215
- data: {
216
- total_count: 0,
217
- workflows: [],
218
- note: 'Workflows não disponíveis neste provider'
219
- }
220
- };
221
- }
222
- const result = await provider.listWorkflows({
223
- owner: (await provider.getCurrentUser()).login,
224
- repo: params.repo,
225
- page: params.page,
226
- limit: params.limit
227
- });
228
- return {
229
- success: true,
230
- action: 'list',
231
- message: `${result.workflows?.length || 0} workflows encontrados`,
232
- data: result
233
- };
234
- }
235
- catch (error) {
236
- throw new Error(`Falha ao listar workflows: ${error}`);
237
- }
238
- },
239
- /**
240
- * Cria novo workflow
241
- */
242
- async createWorkflow(params, provider) {
243
- try {
244
- if (!provider.createWorkflow) {
245
- return {
246
- success: false,
247
- action: 'create-workflow',
248
- message: 'Funcionalidade não suportada por este provider',
249
- error: 'Provider não implementa createWorkflow'
250
- };
251
- }
252
- const result = await provider.createWorkflow({
253
- owner: (await provider.getCurrentUser()).login,
254
- repo: params.repo,
255
- name: params.name,
256
- description: params.description,
257
- content: params.workflow_content,
258
- branch: params.branch
259
- });
260
- return {
261
- success: true,
262
- action: 'create',
263
- message: `Workflow '${params.name}' criado com sucesso`,
264
- data: result
265
- };
266
- }
267
- catch (error) {
268
- throw new Error(`Falha ao criar workflow: ${error}`);
269
- }
270
- },
271
- /**
272
- * Dispara workflow manualmente
273
- */
274
- async triggerWorkflow(params, provider) {
275
- try {
276
- if (!provider.triggerWorkflow) {
277
- return {
278
- success: false,
279
- action: 'trigger-workflow',
280
- message: 'Funcionalidade não suportada por este provider',
281
- error: 'Provider não implementa triggerWorkflow'
282
- };
283
- }
284
- const result = await provider.triggerWorkflow({
285
- owner: (await provider.getCurrentUser()).login,
286
- repo: params.repo,
287
- workflow_id: params.workflow_id,
288
- workflow_name: params.workflow_name,
289
- ref: params.ref || 'main',
290
- inputs: params.inputs
291
- });
292
- return {
293
- success: true,
294
- action: 'trigger',
295
- message: `Workflow disparado com sucesso`,
296
- data: result
297
- };
298
- }
299
- catch (error) {
300
- throw new Error(`Falha ao disparar workflow: ${error}`);
301
- }
302
- },
303
- /**
304
- * Verifica status de execução do workflow
305
- */
306
- async getWorkflowStatus(params, provider) {
307
- try {
308
- // Auto-detecção de owner/username se não fornecidos
309
- let updatedParams = { ...params };
310
- const currentUser = await provider.getCurrentUser();
311
- const owner = currentUser.login;
312
- if (!provider.getWorkflowStatus) {
313
- return {
314
- success: false,
315
- action: 'get-workflow-status',
316
- message: 'Funcionalidade não suportada por este provider',
317
- error: 'Provider não implementa getWorkflowStatus'
318
- };
319
- }
320
- const result = await provider.getWorkflowStatus({
321
- owner: (await provider.getCurrentUser()).login,
322
- repo: params.repo,
323
- run_id: params.run_id,
324
- workflow_id: params.workflow_id
325
- });
326
- return {
327
- success: true,
328
- action: 'status',
329
- message: `Status do workflow obtido com sucesso`,
330
- data: result
331
- };
332
- }
333
- catch (error) {
334
- throw new Error(`Falha ao obter status do workflow: ${error}`);
335
- }
336
- },
337
- /**
338
- * Obtém logs de execução do workflow
339
- */
340
- async getWorkflowLogs(params, provider) {
341
- try {
342
- // Auto-detecção de owner/username se não fornecidos
343
- let updatedParams = { ...params };
344
- const currentUser = await provider.getCurrentUser();
345
- const owner = currentUser.login;
346
- if (!provider.getWorkflowLogs) {
347
- return {
348
- success: false,
349
- action: 'get-workflow-logs',
350
- message: 'Funcionalidade não suportada por este provider',
351
- error: 'Provider não implementa getWorkflowLogs'
352
- };
353
- }
354
- const result = await provider.getWorkflowLogs({
355
- owner: (await provider.getCurrentUser()).login,
356
- repo: params.repo,
357
- run_id: params.run_id,
358
- job_id: params.job_id,
359
- step_number: params.step_number
360
- });
361
- return {
362
- success: true,
363
- action: 'logs',
364
- message: `Logs do workflow obtidos com sucesso`,
365
- data: result
366
- };
367
- }
368
- catch (error) {
369
- throw new Error(`Falha ao obter logs do workflow: ${error}`);
370
- }
371
- },
372
- /**
373
- * Desabilita workflow
374
- */
375
- async disableWorkflow(params, provider) {
376
- try {
377
- if (!provider.disableWorkflow) {
378
- return {
379
- success: false,
380
- action: 'disable-workflow',
381
- message: 'Funcionalidade não suportada por este provider',
382
- error: 'Provider não implementa disableWorkflow'
383
- };
384
- }
385
- const result = await provider.disableWorkflow({
386
- owner: (await provider.getCurrentUser()).login,
387
- repo: params.repo,
388
- workflow_id: params.workflow_id,
389
- workflow_name: params.workflow_name
390
- });
391
- return {
392
- success: true,
393
- action: 'disable',
394
- message: `Workflow desabilitado com sucesso`,
395
- data: result
396
- };
397
- }
398
- catch (error) {
399
- throw new Error(`Falha ao desabilitar workflow: ${error}`);
400
- }
401
- },
402
- /**
403
- * Habilita workflow
404
- */
405
- async enableWorkflow(params, provider) {
406
- try {
407
- if (!provider.enableWorkflow) {
408
- return {
409
- success: false,
410
- action: 'enable-workflow',
411
- message: 'Funcionalidade não suportada por este provider',
412
- error: 'Provider não implementa enableWorkflow'
413
- };
414
- }
415
- const result = await provider.enableWorkflow({
416
- owner: (await provider.getCurrentUser()).login,
417
- repo: params.repo,
418
- workflow_id: params.workflow_id,
419
- workflow_name: params.workflow_name
420
- });
421
- return {
422
- success: true,
423
- action: 'enable',
424
- message: `Workflow habilitado com sucesso`,
425
- data: result
426
- };
427
- }
428
- catch (error) {
429
- throw new Error(`Falha ao habilitar workflow: ${error}`);
430
- }
431
- }
432
- };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.workflowsTool = 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
+ const validator_js_1 = require("./validator.js");
8
+ /**
9
+ * Tool: workflows
10
+ *
11
+ * DESCRIÇÃO:
12
+ * Gerenciamento completo de workflows CI/CD com múltiplas ações
13
+ *
14
+ * FUNCIONALIDADES:
15
+ * - Listagem de workflows ativos
16
+ * - Criação de novos workflows
17
+ * - Disparo manual de workflows
18
+ * - Verificação de status de execução
19
+ * - Obtenção de logs de execução
20
+ * - Controle de workflows (enable/disable)
21
+ *
22
+ * USO:
23
+ * - Para automatizar CI/CD pipelines
24
+ * - Para monitorar execuções
25
+ * - Para gerenciar workflows de desenvolvimento
26
+ * - Para integração com ferramentas de deploy
27
+ *
28
+ * RECOMENDAÇÕES:
29
+ * - Use workflows para automatizar testes
30
+ * - Configure triggers apropriados
31
+ * - Monitore logs regularmente
32
+ * - Mantenha workflows simples e focados
33
+ */
34
+ /**
35
+ * Schema de validação para entrada da tool workflows
36
+ *
37
+ * VALIDAÇÕES:
38
+ * - action: Ação obrigatória (list, create, trigger, status, logs, disable, enable)
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 WorkflowsInputSchema = zod_1.z.object({
48
+ action: zod_1.z.enum(['list', 'create', 'trigger', 'status', 'logs', 'disable', 'enable']),
49
+ // Parâmetros comuns
50
+ repo: validator_js_1.CommonSchemas.repo,
51
+ // Parâmetros para listagem
52
+ page: validator_js_1.CommonSchemas.page,
53
+ limit: validator_js_1.CommonSchemas.limit,
54
+ // Parâmetros para criação
55
+ name: validator_js_1.CommonSchemas.shortString,
56
+ description: validator_js_1.CommonSchemas.mediumString,
57
+ workflow_content: validator_js_1.CommonSchemas.longString,
58
+ branch: validator_js_1.CommonSchemas.branch,
59
+ // Parâmetros para trigger e status
60
+ workflow_id: validator_js_1.CommonSchemas.shortString,
61
+ workflow_name: validator_js_1.CommonSchemas.shortString,
62
+ run_id: validator_js_1.CommonSchemas.shortString,
63
+ // Parâmetros para logs
64
+ job_id: validator_js_1.CommonSchemas.shortString,
65
+ step_number: zod_1.z.number().optional(),
66
+ // Parâmetros para inputs do workflow
67
+ inputs: zod_1.z.record(zod_1.z.string()).optional(),
68
+ ref: validator_js_1.CommonSchemas.branch.optional()
69
+ }).refine((data) => {
70
+ // Validações específicas por ação
71
+ if (['create'].includes(data.action)) {
72
+ return data.repo && data.name && data.workflow_content;
73
+ }
74
+ if (['trigger', 'status', 'logs', 'disable', 'enable'].includes(data.action)) {
75
+ return data.repo && (data.workflow_id || data.workflow_name);
76
+ }
77
+ return data.repo;
78
+ }, {
79
+ message: "Parâmetros obrigatórios não fornecidos para a ação especificada"
80
+ });
81
+ /**
82
+ * Schema de validação para resultado da tool workflows
83
+ */
84
+ const WorkflowsResultSchema = zod_1.z.object({
85
+ success: zod_1.z.boolean(),
86
+ action: zod_1.z.string(),
87
+ message: zod_1.z.string(),
88
+ data: zod_1.z.any().optional(),
89
+ error: zod_1.z.string().optional()
90
+ });
91
+ /**
92
+ * Implementação da tool workflows
93
+ *
94
+ * ESTRUTURA:
95
+ * - Validação de entrada
96
+ * - Seleção do provider
97
+ * - Execução da ação
98
+ * - Tratamento de erros
99
+ * - Formatação do resultado
100
+ *
101
+ * AÇÕES SUPORTADAS:
102
+ * - list: Lista workflows do repositório
103
+ * - create: Cria novo workflow
104
+ * - trigger: Dispara workflow manualmente
105
+ * - status: Verifica status de execução
106
+ * - logs: Obtém logs de execução
107
+ * - disable: Desabilita workflow
108
+ * - enable: Habilita workflow
109
+ *
110
+ * TRATAMENTO DE ERROS:
111
+ * - Validação de parâmetros
112
+ * - Verificação de permissões
113
+ * - Tratamento de falhas de API
114
+ * - Logs detalhados para debug
115
+ */
116
+ exports.workflowsTool = {
117
+ name: 'gh-workflows',
118
+ description: 'tool: Gerencia GitHub Actions workflows para CI/CD\n──────────────\naction list: lista workflows do repositório\naction list requires: repo, page, limit\n───────────────\naction create: cria novo workflow\naction create requires: repo, name, workflow_content, description, branch\n───────────────\naction trigger: dispara workflow manualmente\naction trigger requires: repo, workflow_id, ref, inputs\n───────────────\naction status: verifica status de execução\naction status requires: repo, run_id\n───────────────\naction logs: obtém logs de execução\naction logs requires: repo, run_id, job_id, step_number\n───────────────\naction disable: desabilita workflow\naction disable requires: repo, workflow_id\n───────────────\naction enable: habilita workflow\naction enable requires: repo, workflow_id',
119
+ inputSchema: {
120
+ type: 'object',
121
+ properties: {
122
+ action: {
123
+ type: 'string',
124
+ enum: ['list', 'create', 'trigger', 'status', 'logs', 'disable', 'enable'],
125
+ description: 'Action to perform on workflows'
126
+ },
127
+ repo: { type: 'string', description: 'Repository name' },
128
+ name: { type: 'string', description: 'Workflow name for creation' },
129
+ description: { type: 'string', description: 'Workflow description' },
130
+ workflow_content: { type: 'string', description: 'Workflow YAML content' },
131
+ branch: { type: 'string', description: 'Target branch' },
132
+ workflow_id: { type: 'string', description: 'Workflow ID' },
133
+ workflow_name: { type: 'string', description: 'Workflow name' },
134
+ run_id: { type: 'string', description: 'Workflow run ID' },
135
+ job_id: { type: 'string', description: 'Job ID for logs' },
136
+ step_number: { type: 'number', description: 'Step number for logs' },
137
+ ref: { type: 'string', description: 'Git reference for trigger' },
138
+ page: { type: 'number', description: 'Page number', minimum: 1 },
139
+ limit: { type: 'number', description: 'Items per page', minimum: 1, maximum: 100 }
140
+ },
141
+ required: ['action', 'repo']
142
+ },
143
+ /**
144
+ * Handler principal da tool workflows
145
+ *
146
+ * FLUXO:
147
+ * 1. Validação da entrada
148
+ * 2. Seleção do provider
149
+ * 3. Execução da ação específica
150
+ * 4. Formatação e retorno do resultado
151
+ *
152
+ * PARÂMETROS:
153
+ * @param input - Dados de entrada validados
154
+ *
155
+ * RETORNO:
156
+ * @returns Promise<WorkflowsResult> - Resultado da operação
157
+ *
158
+ * ERROS:
159
+ * - Lança exceção em caso de erro de validação
160
+ * - Retorna erro formatado em caso de falha de API
161
+ */
162
+ async handler(input) {
163
+ try {
164
+ // Validação da entrada
165
+ const validatedInput = WorkflowsInputSchema.parse(input);
166
+ // Fixar provider como github para tools exclusivas do GitHub
167
+ const updatedParams = await (0, user_detection_js_1.applyAutoUserDetection)(validatedInput, 'github');
168
+ const provider = index_js_1.globalProviderFactory.getProvider('github');
169
+ if (!provider) {
170
+ throw new Error('Provider GitHub não encontrado');
171
+ }
172
+ // Execução da ação específica
173
+ switch (updatedParams.action) {
174
+ case 'list':
175
+ return await this.listWorkflows(updatedParams, provider);
176
+ case 'create':
177
+ return await this.createWorkflow(updatedParams, provider);
178
+ case 'trigger':
179
+ return await this.triggerWorkflow(updatedParams, provider);
180
+ case 'status':
181
+ return await this.getWorkflowStatus(updatedParams, provider);
182
+ case 'logs':
183
+ return await this.getWorkflowLogs(updatedParams, provider);
184
+ case 'disable':
185
+ return await this.disableWorkflow(updatedParams, provider);
186
+ case 'enable':
187
+ return await this.enableWorkflow(updatedParams, provider);
188
+ default:
189
+ throw new Error(`Ação não suportada: ${updatedParams.action}`);
190
+ }
191
+ }
192
+ catch (error) {
193
+ return {
194
+ success: false,
195
+ action: input.action || 'unknown',
196
+ message: 'Erro na operação de workflows',
197
+ error: error instanceof Error ? error.message : String(error)
198
+ };
199
+ }
200
+ },
201
+ /**
202
+ * Lista workflows do repositório
203
+ */
204
+ async listWorkflows(params, provider) {
205
+ try {
206
+ // Auto-detecção de owner/username se não fornecidos
207
+ let updatedParams = { ...params };
208
+ const currentUser = await provider.getCurrentUser();
209
+ const owner = currentUser.login;
210
+ if (!provider.listWorkflows) {
211
+ return {
212
+ success: true,
213
+ action: 'list',
214
+ message: 'Funcionalidade de workflows não suportada por este provider',
215
+ data: {
216
+ total_count: 0,
217
+ workflows: [],
218
+ note: 'Workflows não disponíveis neste provider'
219
+ }
220
+ };
221
+ }
222
+ const result = await provider.listWorkflows({
223
+ owner: (await provider.getCurrentUser()).login,
224
+ repo: params.repo,
225
+ page: params.page,
226
+ limit: params.limit
227
+ });
228
+ return {
229
+ success: true,
230
+ action: 'list',
231
+ message: `${result.workflows?.length || 0} workflows encontrados`,
232
+ data: result
233
+ };
234
+ }
235
+ catch (error) {
236
+ throw new Error(`Falha ao listar workflows: ${error}`);
237
+ }
238
+ },
239
+ /**
240
+ * Cria novo workflow
241
+ */
242
+ async createWorkflow(params, provider) {
243
+ try {
244
+ if (!provider.createWorkflow) {
245
+ return {
246
+ success: false,
247
+ action: 'create-workflow',
248
+ message: 'Funcionalidade não suportada por este provider',
249
+ error: 'Provider não implementa createWorkflow'
250
+ };
251
+ }
252
+ const result = await provider.createWorkflow({
253
+ owner: (await provider.getCurrentUser()).login,
254
+ repo: params.repo,
255
+ name: params.name,
256
+ description: params.description,
257
+ content: params.workflow_content,
258
+ branch: params.branch
259
+ });
260
+ return {
261
+ success: true,
262
+ action: 'create',
263
+ message: `Workflow '${params.name}' criado com sucesso`,
264
+ data: result
265
+ };
266
+ }
267
+ catch (error) {
268
+ throw new Error(`Falha ao criar workflow: ${error}`);
269
+ }
270
+ },
271
+ /**
272
+ * Dispara workflow manualmente
273
+ */
274
+ async triggerWorkflow(params, provider) {
275
+ try {
276
+ if (!provider.triggerWorkflow) {
277
+ return {
278
+ success: false,
279
+ action: 'trigger-workflow',
280
+ message: 'Funcionalidade não suportada por este provider',
281
+ error: 'Provider não implementa triggerWorkflow'
282
+ };
283
+ }
284
+ const result = await provider.triggerWorkflow({
285
+ owner: (await provider.getCurrentUser()).login,
286
+ repo: params.repo,
287
+ workflow_id: params.workflow_id,
288
+ workflow_name: params.workflow_name,
289
+ ref: params.ref || 'main',
290
+ inputs: params.inputs
291
+ });
292
+ return {
293
+ success: true,
294
+ action: 'trigger',
295
+ message: `Workflow disparado com sucesso`,
296
+ data: result
297
+ };
298
+ }
299
+ catch (error) {
300
+ throw new Error(`Falha ao disparar workflow: ${error}`);
301
+ }
302
+ },
303
+ /**
304
+ * Verifica status de execução do workflow
305
+ */
306
+ async getWorkflowStatus(params, provider) {
307
+ try {
308
+ // Auto-detecção de owner/username se não fornecidos
309
+ let updatedParams = { ...params };
310
+ const currentUser = await provider.getCurrentUser();
311
+ const owner = currentUser.login;
312
+ if (!provider.getWorkflowStatus) {
313
+ return {
314
+ success: false,
315
+ action: 'get-workflow-status',
316
+ message: 'Funcionalidade não suportada por este provider',
317
+ error: 'Provider não implementa getWorkflowStatus'
318
+ };
319
+ }
320
+ const result = await provider.getWorkflowStatus({
321
+ owner: (await provider.getCurrentUser()).login,
322
+ repo: params.repo,
323
+ run_id: params.run_id,
324
+ workflow_id: params.workflow_id
325
+ });
326
+ return {
327
+ success: true,
328
+ action: 'status',
329
+ message: `Status do workflow obtido com sucesso`,
330
+ data: result
331
+ };
332
+ }
333
+ catch (error) {
334
+ throw new Error(`Falha ao obter status do workflow: ${error}`);
335
+ }
336
+ },
337
+ /**
338
+ * Obtém logs de execução do workflow
339
+ */
340
+ async getWorkflowLogs(params, provider) {
341
+ try {
342
+ // Auto-detecção de owner/username se não fornecidos
343
+ let updatedParams = { ...params };
344
+ const currentUser = await provider.getCurrentUser();
345
+ const owner = currentUser.login;
346
+ if (!provider.getWorkflowLogs) {
347
+ return {
348
+ success: false,
349
+ action: 'get-workflow-logs',
350
+ message: 'Funcionalidade não suportada por este provider',
351
+ error: 'Provider não implementa getWorkflowLogs'
352
+ };
353
+ }
354
+ const result = await provider.getWorkflowLogs({
355
+ owner: (await provider.getCurrentUser()).login,
356
+ repo: params.repo,
357
+ run_id: params.run_id,
358
+ job_id: params.job_id,
359
+ step_number: params.step_number
360
+ });
361
+ return {
362
+ success: true,
363
+ action: 'logs',
364
+ message: `Logs do workflow obtidos com sucesso`,
365
+ data: result
366
+ };
367
+ }
368
+ catch (error) {
369
+ throw new Error(`Falha ao obter logs do workflow: ${error}`);
370
+ }
371
+ },
372
+ /**
373
+ * Desabilita workflow
374
+ */
375
+ async disableWorkflow(params, provider) {
376
+ try {
377
+ if (!provider.disableWorkflow) {
378
+ return {
379
+ success: false,
380
+ action: 'disable-workflow',
381
+ message: 'Funcionalidade não suportada por este provider',
382
+ error: 'Provider não implementa disableWorkflow'
383
+ };
384
+ }
385
+ const result = await provider.disableWorkflow({
386
+ owner: (await provider.getCurrentUser()).login,
387
+ repo: params.repo,
388
+ workflow_id: params.workflow_id,
389
+ workflow_name: params.workflow_name
390
+ });
391
+ return {
392
+ success: true,
393
+ action: 'disable',
394
+ message: `Workflow desabilitado com sucesso`,
395
+ data: result
396
+ };
397
+ }
398
+ catch (error) {
399
+ throw new Error(`Falha ao desabilitar workflow: ${error}`);
400
+ }
401
+ },
402
+ /**
403
+ * Habilita workflow
404
+ */
405
+ async enableWorkflow(params, provider) {
406
+ try {
407
+ if (!provider.enableWorkflow) {
408
+ return {
409
+ success: false,
410
+ action: 'enable-workflow',
411
+ message: 'Funcionalidade não suportada por este provider',
412
+ error: 'Provider não implementa enableWorkflow'
413
+ };
414
+ }
415
+ const result = await provider.enableWorkflow({
416
+ owner: (await provider.getCurrentUser()).login,
417
+ repo: params.repo,
418
+ workflow_id: params.workflow_id,
419
+ workflow_name: params.workflow_name
420
+ });
421
+ return {
422
+ success: true,
423
+ action: 'enable',
424
+ message: `Workflow habilitado com sucesso`,
425
+ data: result
426
+ };
427
+ }
428
+ catch (error) {
429
+ throw new Error(`Falha ao habilitar workflow: ${error}`);
430
+ }
431
+ }
432
+ };
433
433
  //# sourceMappingURL=gh-workflows.js.map