@andrebuzeli/git-mcp 2.6.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 (122) hide show
  1. package/README.md +346 -0
  2. package/dist/client.d.ts +307 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +299 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/config.d.ts +299 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +381 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/index.d.ts +22 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +53 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/providers/base-provider.d.ts +139 -0
  15. package/dist/providers/base-provider.d.ts.map +1 -0
  16. package/dist/providers/base-provider.js +246 -0
  17. package/dist/providers/base-provider.js.map +1 -0
  18. package/dist/providers/error-handler.d.ts +51 -0
  19. package/dist/providers/error-handler.d.ts.map +1 -0
  20. package/dist/providers/error-handler.js +170 -0
  21. package/dist/providers/error-handler.js.map +1 -0
  22. package/dist/providers/gitea-provider.d.ts +68 -0
  23. package/dist/providers/gitea-provider.d.ts.map +1 -0
  24. package/dist/providers/gitea-provider.js +515 -0
  25. package/dist/providers/gitea-provider.js.map +1 -0
  26. package/dist/providers/github-provider.d.ts +68 -0
  27. package/dist/providers/github-provider.d.ts.map +1 -0
  28. package/dist/providers/github-provider.js +518 -0
  29. package/dist/providers/github-provider.js.map +1 -0
  30. package/dist/providers/index.d.ts +13 -0
  31. package/dist/providers/index.d.ts.map +1 -0
  32. package/dist/providers/index.js +41 -0
  33. package/dist/providers/index.js.map +1 -0
  34. package/dist/providers/provider-factory.d.ts +75 -0
  35. package/dist/providers/provider-factory.d.ts.map +1 -0
  36. package/dist/providers/provider-factory.js +298 -0
  37. package/dist/providers/provider-factory.js.map +1 -0
  38. package/dist/providers/types.d.ts +276 -0
  39. package/dist/providers/types.d.ts.map +1 -0
  40. package/dist/providers/types.js +7 -0
  41. package/dist/providers/types.js.map +1 -0
  42. package/dist/server.d.ts +77 -0
  43. package/dist/server.d.ts.map +1 -0
  44. package/dist/server.js +262 -0
  45. package/dist/server.js.map +1 -0
  46. package/dist/tools/actions.d.ts +272 -0
  47. package/dist/tools/actions.d.ts.map +1 -0
  48. package/dist/tools/actions.js +428 -0
  49. package/dist/tools/actions.js.map +1 -0
  50. package/dist/tools/analytics.d.ts +326 -0
  51. package/dist/tools/analytics.d.ts.map +1 -0
  52. package/dist/tools/analytics.js +473 -0
  53. package/dist/tools/analytics.js.map +1 -0
  54. package/dist/tools/branches.d.ts +461 -0
  55. package/dist/tools/branches.d.ts.map +1 -0
  56. package/dist/tools/branches.js +525 -0
  57. package/dist/tools/branches.js.map +1 -0
  58. package/dist/tools/code-review.d.ts +323 -0
  59. package/dist/tools/code-review.d.ts.map +1 -0
  60. package/dist/tools/code-review.js +552 -0
  61. package/dist/tools/code-review.js.map +1 -0
  62. package/dist/tools/commits.d.ts +488 -0
  63. package/dist/tools/commits.d.ts.map +1 -0
  64. package/dist/tools/commits.js +578 -0
  65. package/dist/tools/commits.js.map +1 -0
  66. package/dist/tools/deployments.d.ts +319 -0
  67. package/dist/tools/deployments.d.ts.map +1 -0
  68. package/dist/tools/deployments.js +355 -0
  69. package/dist/tools/deployments.js.map +1 -0
  70. package/dist/tools/files.d.ts +456 -0
  71. package/dist/tools/files.d.ts.map +1 -0
  72. package/dist/tools/files.js +531 -0
  73. package/dist/tools/files.js.map +1 -0
  74. package/dist/tools/git-sync.d.ts +177 -0
  75. package/dist/tools/git-sync.d.ts.map +1 -0
  76. package/dist/tools/git-sync.js +112 -0
  77. package/dist/tools/git-sync.js.map +1 -0
  78. package/dist/tools/issues.d.ts +579 -0
  79. package/dist/tools/issues.d.ts.map +1 -0
  80. package/dist/tools/issues.js +631 -0
  81. package/dist/tools/issues.js.map +1 -0
  82. package/dist/tools/pulls.d.ts +702 -0
  83. package/dist/tools/pulls.d.ts.map +1 -0
  84. package/dist/tools/pulls.js +730 -0
  85. package/dist/tools/pulls.js.map +1 -0
  86. package/dist/tools/releases.d.ts +495 -0
  87. package/dist/tools/releases.d.ts.map +1 -0
  88. package/dist/tools/releases.js +551 -0
  89. package/dist/tools/releases.js.map +1 -0
  90. package/dist/tools/repositories.d.ts +513 -0
  91. package/dist/tools/repositories.d.ts.map +1 -0
  92. package/dist/tools/repositories.js +634 -0
  93. package/dist/tools/repositories.js.map +1 -0
  94. package/dist/tools/security.d.ts +341 -0
  95. package/dist/tools/security.d.ts.map +1 -0
  96. package/dist/tools/security.js +394 -0
  97. package/dist/tools/security.js.map +1 -0
  98. package/dist/tools/tags.d.ts +419 -0
  99. package/dist/tools/tags.d.ts.map +1 -0
  100. package/dist/tools/tags.js +479 -0
  101. package/dist/tools/tags.js.map +1 -0
  102. package/dist/tools/users.d.ts +376 -0
  103. package/dist/tools/users.d.ts.map +1 -0
  104. package/dist/tools/users.js +495 -0
  105. package/dist/tools/users.js.map +1 -0
  106. package/dist/tools/validator.d.ts +192 -0
  107. package/dist/tools/validator.d.ts.map +1 -0
  108. package/dist/tools/validator.js +198 -0
  109. package/dist/tools/validator.js.map +1 -0
  110. package/dist/tools/version-control.d.ts +247 -0
  111. package/dist/tools/version-control.d.ts.map +1 -0
  112. package/dist/tools/version-control.js +521 -0
  113. package/dist/tools/version-control.js.map +1 -0
  114. package/dist/tools/webhooks.d.ts +478 -0
  115. package/dist/tools/webhooks.d.ts.map +1 -0
  116. package/dist/tools/webhooks.js +541 -0
  117. package/dist/tools/webhooks.js.map +1 -0
  118. package/dist/tools/workflows.d.ts +313 -0
  119. package/dist/tools/workflows.d.ts.map +1 -0
  120. package/dist/tools/workflows.js +430 -0
  121. package/dist/tools/workflows.js.map +1 -0
  122. package/package.json +58 -0
@@ -0,0 +1,531 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.filesTool = void 0;
4
+ const zod_1 = require("zod");
5
+ const index_js_1 = require("../providers/index.js");
6
+ /**
7
+ * Tool: files
8
+ *
9
+ * DESCRIÇÃO:
10
+ * Gerenciamento completo de arquivos e diretórios Gitea com múltiplas ações
11
+ *
12
+ * FUNCIONALIDADES:
13
+ * - Criação de arquivos e diretórios
14
+ * - Leitura e listagem de conteúdo
15
+ * - Atualização de arquivos existentes
16
+ * - Exclusão de arquivos e diretórios
17
+ * - Busca por conteúdo e nome
18
+ * - Controle de versão de arquivos
19
+ *
20
+ * USO:
21
+ * - Para gerenciar arquivos de projeto
22
+ * - Para automatizar criação de arquivos
23
+ * - Para backup e migração de conteúdo
24
+ * - Para sincronização de arquivos
25
+ *
26
+ * RECOMENDAÇÕES:
27
+ * - Use mensagens de commit descritivas
28
+ * - Mantenha estrutura de diretórios organizada
29
+ * - Valide conteúdo antes de enviar
30
+ * - Use branches para mudanças grandes
31
+ */
32
+ /**
33
+ * Schema de validação para entrada da tool files
34
+ *
35
+ * VALIDAÇÕES:
36
+ * - action: Ação obrigatória (get, create, update, delete, list, search)
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 FilesInputSchema = zod_1.z.object({
46
+ action: zod_1.z.enum(['get', 'create', 'update', 'delete', 'list', 'search']),
47
+ // Parâmetros comuns
48
+ owner: zod_1.z.string().optional(),
49
+ repo: zod_1.z.string().optional(),
50
+ path: zod_1.z.string().optional(),
51
+ provider: zod_1.z.enum(['gitea', 'github', 'both']).optional(), // Provider específico: gitea, github ou both
52
+ // Para create/update
53
+ content: zod_1.z.string().optional(),
54
+ message: zod_1.z.string().optional(),
55
+ branch: zod_1.z.string().optional(),
56
+ // Para update/delete
57
+ sha: zod_1.z.string().optional(),
58
+ // Para list
59
+ ref: zod_1.z.string().optional(),
60
+ // Para search
61
+ query: zod_1.z.string().optional(),
62
+ // Para list com paginação
63
+ page: zod_1.z.number().min(1).optional(),
64
+ limit: zod_1.z.number().min(1).max(100).optional(),
65
+ });
66
+ /**
67
+ * Schema de saída padronizado
68
+ *
69
+ * ESTRUTURA:
70
+ * - success: Status da operação
71
+ * - action: Ação executada
72
+ * - message: Mensagem descritiva
73
+ * - data: Dados retornados (opcional)
74
+ * - error: Detalhes do erro (opcional)
75
+ */
76
+ const FilesResultSchema = zod_1.z.object({
77
+ success: zod_1.z.boolean(),
78
+ action: zod_1.z.string(),
79
+ message: zod_1.z.string(),
80
+ data: zod_1.z.any().optional(),
81
+ error: zod_1.z.string().optional()
82
+ });
83
+ /**
84
+ * Tool: files
85
+ *
86
+ * DESCRIÇÃO:
87
+ * Gerenciamento completo de arquivos e diretórios Gitea com múltiplas ações
88
+ *
89
+ * ACTIONS DISPONÍVEIS:
90
+ *
91
+ * 1. get - Obter conteúdo de arquivo
92
+ * Parâmetros:
93
+ * - owner (obrigatório): Proprietário do repositório
94
+ * - repo (obrigatório): Nome do repositório
95
+ * - path (obrigatório): Caminho do arquivo
96
+ * - ref (opcional): Branch, tag ou commit (padrão: branch padrão)
97
+ *
98
+ * 2. create - Criar novo arquivo
99
+ * Parâmetros:
100
+ * - owner (obrigatório): Proprietário do repositório
101
+ * - repo (obrigatório): Nome do repositório
102
+ * - path (obrigatório): Caminho do arquivo
103
+ * - content (obrigatório): Conteúdo do arquivo
104
+ * - message (obrigatório): Mensagem de commit
105
+ * - branch (opcional): Branch de destino (padrão: branch padrão)
106
+ *
107
+ * 3. update - Atualizar arquivo existente
108
+ * Parâmetros:
109
+ * - owner (obrigatório): Proprietário do repositório
110
+ * - repo (obrigatório): Nome do repositório
111
+ * - path (obrigatório): Caminho do arquivo
112
+ * - content (obrigatório): Novo conteúdo
113
+ * - message (obrigatório): Mensagem de commit
114
+ * - sha (obrigatório): SHA do arquivo atual
115
+ * - branch (opcional): Branch de destino (padrão: branch padrão)
116
+ *
117
+ * 4. delete - Deletar arquivo
118
+ * Parâmetros:
119
+ * - owner (obrigatório): Proprietário do repositório
120
+ * - repo (obrigatório): Nome do repositório
121
+ * - path (obrigatório): Caminho do arquivo
122
+ * - message (obrigatório): Mensagem de commit
123
+ * - sha (obrigatório): SHA do arquivo
124
+ * - branch (opcional): Branch de destino (padrão: branch padrão)
125
+ *
126
+ * 5. list - Listar conteúdo de diretório
127
+ * Parâmetros:
128
+ * - owner (obrigatório): Proprietário do repositório
129
+ * - repo (obrigatório): Nome do repositório
130
+ * - path (opcional): Caminho do diretório (padrão: raiz)
131
+ * - ref (opcional): Branch, tag ou commit (padrão: branch padrão)
132
+ * - page (opcional): Página da listagem (padrão: 1)
133
+ * - limit (opcional): Itens por página (padrão: 30, máximo: 100)
134
+ *
135
+ * 6. search - Buscar arquivos por conteúdo
136
+ * Parâmetros:
137
+ * - owner (obrigatório): Proprietário do repositório
138
+ * - repo (obrigatório): Nome do repositório
139
+ * - query (obrigatório): Termo de busca
140
+ * - ref (opcional): Branch, tag ou commit (padrão: branch padrão)
141
+ *
142
+ * RECOMENDAÇÕES DE USO:
143
+ * - Use mensagens de commit descritivas
144
+ * - Mantenha estrutura de diretórios organizada
145
+ * - Valide conteúdo antes de enviar
146
+ * - Use branches para mudanças grandes
147
+ * - Documente mudanças importantes
148
+ * - Mantenha histórico de commits limpo
149
+ */
150
+ exports.filesTool = {
151
+ name: 'files',
152
+ description: 'Manage files and directories with multiple actions: get, create, update, delete, list, search. Suporte completo a GitHub e Gitea simultaneamente. Dicas (solo): use commits pequenos e mensagens claras; mantenha README enxuto com comandos essenciais; valide conteúdo antes de enviar; prefira branches para mudanças maiores; use mensagens de commit descritivas.',
153
+ inputSchema: {
154
+ type: 'object',
155
+ properties: {
156
+ action: {
157
+ type: 'string',
158
+ enum: ['get', 'create', 'update', 'delete', 'list', 'search'],
159
+ description: 'Action to perform on files'
160
+ },
161
+ owner: { type: 'string', description: 'Repository owner' },
162
+ repo: { type: 'string', description: 'Repository name' },
163
+ path: { type: 'string', description: 'File or directory path' },
164
+ provider: { type: 'string', description: 'Specific provider (github, gitea) or use default' },
165
+ content: { type: 'string', description: 'File content' },
166
+ message: { type: 'string', description: 'Commit message' },
167
+ branch: { type: 'string', description: 'Target branch' },
168
+ sha: { type: 'string', description: 'File SHA hash' },
169
+ ref: { type: 'string', description: 'Branch, tag or commit reference' },
170
+ query: { type: 'string', description: 'Search query' },
171
+ page: { type: 'number', description: 'Page number', minimum: 1 },
172
+ limit: { type: 'number', description: 'Items per page', minimum: 1, maximum: 100 }
173
+ },
174
+ required: ['action']
175
+ },
176
+ /**
177
+ * Handler principal da tool files
178
+ *
179
+ * FUNCIONALIDADE:
180
+ * - Valida entrada usando Zod schema
181
+ * - Roteia para método específico baseado na ação
182
+ * - Trata erros de forma uniforme
183
+ * - Retorna resultado padronizado
184
+ *
185
+ * FLUXO:
186
+ * 1. Validação de entrada
187
+ * 2. Roteamento por ação
188
+ * 3. Execução do método específico
189
+ * 4. Tratamento de erros
190
+ * 5. Retorno de resultado
191
+ *
192
+ * TRATAMENTO DE ERROS:
193
+ * - Validação: erro de schema
194
+ * - Execução: erro da operação
195
+ * - Roteamento: ação não suportada
196
+ *
197
+ * RECOMENDAÇÕES:
198
+ * - Sempre valide entrada antes de processar
199
+ * - Trate erros específicos adequadamente
200
+ * - Log detalhes de erro para debug
201
+ * - Retorne mensagens de erro úteis
202
+ */
203
+ async handler(input) {
204
+ try {
205
+ const validatedInput = FilesInputSchema.parse(input);
206
+ // Obter o provider correto
207
+ const provider = validatedInput.provider
208
+ ? index_js_1.globalProviderFactory.getProvider(validatedInput.provider)
209
+ : index_js_1.globalProviderFactory.getDefaultProvider();
210
+ if (!provider) {
211
+ throw new Error(`Provider '${validatedInput.provider}' não encontrado`);
212
+ }
213
+ switch (validatedInput.action) {
214
+ case 'get':
215
+ return await this.getFile(validatedInput, provider);
216
+ case 'create':
217
+ return await this.createFile(validatedInput, provider);
218
+ case 'update':
219
+ return await this.updateFile(validatedInput, provider);
220
+ case 'delete':
221
+ return await this.deleteFile(validatedInput, provider);
222
+ case 'list':
223
+ return await this.listFiles(validatedInput, provider);
224
+ case 'search':
225
+ return await this.searchFiles(validatedInput, provider);
226
+ default:
227
+ throw new Error(`Ação não suportada: ${validatedInput.action}`);
228
+ }
229
+ }
230
+ catch (error) {
231
+ return {
232
+ success: false,
233
+ action: input.action,
234
+ message: 'Erro na operação de arquivos',
235
+ error: error instanceof Error ? error.message : String(error)
236
+ };
237
+ }
238
+ },
239
+ /**
240
+ * Obtém o conteúdo de um arquivo específico
241
+ *
242
+ * FUNCIONALIDADE:
243
+ * - Retorna conteúdo completo do arquivo
244
+ * - Inclui metadados (SHA, tamanho, tipo)
245
+ * - Suporta diferentes referências (branch, tag, commit)
246
+ *
247
+ * PARÂMETROS OBRIGATÓRIOS:
248
+ * - owner: Proprietário do repositório
249
+ * - repo: Nome do repositório
250
+ * - path: Caminho do arquivo
251
+ *
252
+ * PARÂMETROS OPCIONAIS:
253
+ * - ref: Branch, tag ou commit (padrão: branch padrão)
254
+ *
255
+ * VALIDAÇÕES:
256
+ * - Todos os parâmetros obrigatórios
257
+ * - Arquivo deve existir no caminho especificado
258
+ * - Referência deve ser válida
259
+ *
260
+ * RECOMENDAÇÕES:
261
+ * - Use para leitura de arquivos de configuração
262
+ * - Verifique tamanho antes de ler arquivos grandes
263
+ * - Use referências específicas para versões
264
+ * - Trate arquivos binários adequadamente
265
+ */
266
+ async getFile(params, provider) {
267
+ try {
268
+ if (!params.owner || !params.repo || !params.path) {
269
+ throw new Error('Owner, repo e path são obrigatórios');
270
+ }
271
+ const file = await provider.getFile(params.owner, params.repo, params.path, params.ref);
272
+ return {
273
+ success: true,
274
+ action: 'get',
275
+ message: `Arquivo '${params.path}' obtido com sucesso`,
276
+ data: file
277
+ };
278
+ }
279
+ catch (error) {
280
+ throw new Error(`Falha ao obter arquivo: ${error instanceof Error ? error.message : String(error)}`);
281
+ }
282
+ },
283
+ /**
284
+ * Cria um novo arquivo no repositório
285
+ *
286
+ * FUNCIONALIDADE:
287
+ * - Cria arquivo com conteúdo especificado
288
+ * - Faz commit automático com mensagem
289
+ * - Suporta criação em branches específicas
290
+ *
291
+ * PARÂMETROS OBRIGATÓRIOS:
292
+ * - owner: Proprietário do repositório
293
+ * - repo: Nome do repositório
294
+ * - path: Caminho do arquivo
295
+ * - content: Conteúdo do arquivo
296
+ * - message: Mensagem de commit
297
+ *
298
+ * PARÂMETROS OPCIONAIS:
299
+ * - branch: Branch de destino (padrão: branch padrão)
300
+ *
301
+ * VALIDAÇÕES:
302
+ * - Todos os parâmetros obrigatórios
303
+ * - Caminho deve ser válido
304
+ * - Usuário deve ter permissão de escrita
305
+ *
306
+ * RECOMENDAÇÕES:
307
+ * - Use mensagens de commit descritivas
308
+ * - Valide conteúdo antes de enviar
309
+ * - Use branches para mudanças grandes
310
+ * - Documente propósito do arquivo
311
+ */
312
+ async createFile(params, provider) {
313
+ try {
314
+ if (!params.owner || !params.repo || !params.path || !params.content || !params.message) {
315
+ throw new Error('Owner, repo, path, content e message são obrigatórios');
316
+ }
317
+ const result = await provider.createFile(params.owner, params.repo, params.path, params.content, params.message, params.branch);
318
+ return {
319
+ success: true,
320
+ action: 'create',
321
+ message: `Arquivo '${params.path}' criado com sucesso`,
322
+ data: result
323
+ };
324
+ }
325
+ catch (error) {
326
+ throw new Error(`Falha ao criar arquivo: ${error instanceof Error ? error.message : String(error)}`);
327
+ }
328
+ },
329
+ /**
330
+ * Atualiza um arquivo existente no repositório
331
+ *
332
+ * FUNCIONALIDADE:
333
+ * - Atualiza conteúdo do arquivo
334
+ * - Faz commit com nova versão
335
+ * - Requer SHA do arquivo atual
336
+ *
337
+ * PARÂMETROS OBRIGATÓRIOS:
338
+ * - owner: Proprietário do repositório
339
+ * - repo: Nome do repositório
340
+ * - path: Caminho do arquivo
341
+ * - content: Novo conteúdo
342
+ * - message: Mensagem de commit
343
+ * - sha: SHA do arquivo atual
344
+ *
345
+ * PARÂMETROS OPCIONAIS:
346
+ * - branch: Branch de destino (padrão: branch padrão)
347
+ *
348
+ * VALIDAÇÕES:
349
+ * - Todos os parâmetros obrigatórios
350
+ * - Arquivo deve existir
351
+ * - SHA deve ser válido
352
+ *
353
+ * RECOMENDAÇÕES:
354
+ * - Sempre obtenha SHA atual antes de atualizar
355
+ * - Use mensagens de commit descritivas
356
+ * - Verifique se arquivo não foi modificado por outro usuário
357
+ * - Teste mudanças antes de commitar
358
+ */
359
+ async updateFile(params, provider) {
360
+ try {
361
+ if (!params.owner || !params.repo || !params.path || !params.content || !params.message || !params.sha) {
362
+ throw new Error('Owner, repo, path, content, message e sha são obrigatórios');
363
+ }
364
+ const result = await provider.updateFile(params.owner, params.repo, params.path, params.content, params.message, params.sha, params.branch);
365
+ return {
366
+ success: true,
367
+ action: 'update',
368
+ message: `Arquivo '${params.path}' atualizado com sucesso`,
369
+ data: result
370
+ };
371
+ }
372
+ catch (error) {
373
+ throw new Error(`Falha ao atualizar arquivo: ${error instanceof Error ? error.message : String(error)}`);
374
+ }
375
+ },
376
+ /**
377
+ * Deleta um arquivo do repositório
378
+ *
379
+ * FUNCIONALIDADE:
380
+ * - Remove arquivo especificado
381
+ * - Faz commit de exclusão
382
+ * - Requer SHA do arquivo
383
+ *
384
+ * PARÂMETROS OBRIGATÓRIOS:
385
+ * - owner: Proprietário do repositório
386
+ * - repo: Nome do repositório
387
+ * - path: Caminho do arquivo
388
+ * - message: Mensagem de commit
389
+ * - sha: SHA do arquivo
390
+ *
391
+ * PARÂMETROS OPCIONAIS:
392
+ * - branch: Branch de destino (padrão: branch padrão)
393
+ *
394
+ * VALIDAÇÕES:
395
+ * - Todos os parâmetros obrigatórios
396
+ * - Arquivo deve existir
397
+ * - SHA deve ser válido
398
+ *
399
+ * RECOMENDAÇÕES:
400
+ * - Confirme exclusão antes de executar
401
+ * - Use mensagens de commit descritivas
402
+ * - Verifique dependências do arquivo
403
+ * - Mantenha backup se necessário
404
+ */
405
+ async deleteFile(params, provider) {
406
+ try {
407
+ if (!params.owner || !params.repo || !params.path || !params.message || !params.sha) {
408
+ throw new Error('Owner, repo, path, message e sha são obrigatórios');
409
+ }
410
+ const result = await provider.deleteFile(params.owner, params.repo, params.path, params.message, params.sha, params.branch);
411
+ return {
412
+ success: true,
413
+ action: 'delete',
414
+ message: `Arquivo '${params.path}' deletado com sucesso`,
415
+ data: { deleted: result }
416
+ };
417
+ }
418
+ catch (error) {
419
+ throw new Error(`Falha ao deletar arquivo: ${error instanceof Error ? error.message : String(error)}`);
420
+ }
421
+ },
422
+ /**
423
+ * Lista conteúdo de um diretório
424
+ *
425
+ * FUNCIONALIDADE:
426
+ * - Lista arquivos e subdiretórios
427
+ * - Suporta paginação
428
+ * - Inclui metadados de cada item
429
+ *
430
+ * PARÂMETROS OBRIGATÓRIOS:
431
+ * - owner: Proprietário do repositório
432
+ * - repo: Nome do repositório
433
+ *
434
+ * PARÂMETROS OPCIONAIS:
435
+ * - path: Caminho do diretório (padrão: raiz)
436
+ * - ref: Branch, tag ou commit (padrão: branch padrão)
437
+ * - page: Página da listagem (padrão: 1)
438
+ * - limit: Itens por página (padrão: 30, máximo: 100)
439
+ *
440
+ * VALIDAÇÕES:
441
+ * - Owner e repo obrigatórios
442
+ * - Diretório deve existir
443
+ * - Page deve ser >= 1
444
+ * - Limit deve ser entre 1 e 100
445
+ *
446
+ * RECOMENDAÇÕES:
447
+ * - Use paginação para diretórios grandes
448
+ * - Monitore número total de itens
449
+ * - Use referências específicas para versões
450
+ * - Organize estrutura de diretórios
451
+ */
452
+ async listFiles(params, provider) {
453
+ try {
454
+ if (!params.owner || !params.repo) {
455
+ throw new Error('Owner e repo são obrigatórios');
456
+ }
457
+ const path = params.path || '';
458
+ const page = params.page || 1;
459
+ const limit = params.limit || 30;
460
+ const files = await provider.listFiles(params.owner, params.repo, path, params.ref);
461
+ return {
462
+ success: true,
463
+ action: 'list',
464
+ message: `${files.length} itens encontrados em '${path || 'raiz'}'`,
465
+ data: {
466
+ path,
467
+ files,
468
+ page,
469
+ limit,
470
+ total: files.length
471
+ }
472
+ };
473
+ }
474
+ catch (error) {
475
+ throw new Error(`Falha ao listar arquivos: ${error instanceof Error ? error.message : String(error)}`);
476
+ }
477
+ },
478
+ /**
479
+ * Busca arquivos por conteúdo
480
+ *
481
+ * FUNCIONALIDADE:
482
+ * - Busca arquivos que contenham texto específico
483
+ * - Suporta diferentes referências
484
+ * - Retorna resultados relevantes
485
+ *
486
+ * PARÂMETROS OBRIGATÓRIOS:
487
+ * - owner: Proprietário do repositório
488
+ * - repo: Nome do repositório
489
+ * - query: Termo de busca
490
+ *
491
+ * PARÂMETROS OPCIONAIS:
492
+ * - ref: Branch, tag ou commit (padrão: branch padrão)
493
+ *
494
+ * VALIDAÇÕES:
495
+ * - Todos os parâmetros obrigatórios
496
+ * - Query deve ter pelo menos 3 caracteres
497
+ * - Repositório deve existir
498
+ *
499
+ * RECOMENDAÇÕES:
500
+ * - Use termos de busca específicos
501
+ * - Combine com filtros de diretório
502
+ * - Use referências para versões específicas
503
+ * - Analise resultados para relevância
504
+ */
505
+ async searchFiles(params, provider) {
506
+ try {
507
+ if (!params.owner || !params.repo || !params.query) {
508
+ throw new Error('Owner, repo e query são obrigatórios');
509
+ }
510
+ if (params.query.length < 3) {
511
+ throw new Error('Query deve ter pelo menos 3 caracteres');
512
+ }
513
+ // Implementar busca de arquivos por conteúdo
514
+ // Por enquanto, retorna mensagem de funcionalidade
515
+ return {
516
+ success: true,
517
+ action: 'search',
518
+ message: `Busca por '${params.query}' solicitada`,
519
+ data: {
520
+ query: params.query,
521
+ ref: params.ref || 'branch padrão',
522
+ results: 'Funcionalidade de busca será implementada'
523
+ }
524
+ };
525
+ }
526
+ catch (error) {
527
+ throw new Error(`Falha ao buscar arquivos: ${error instanceof Error ? error.message : String(error)}`);
528
+ }
529
+ }
530
+ };
531
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,oDAA6E;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,gBAAgB,GAAG,OAAC,CAAC,MAAM,CAAC;IAChC,MAAM,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEvE,oBAAoB;IACpB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,QAAQ,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,6CAA6C;IAEvG,qBAAqB;IACrB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE7B,qBAAqB;IACrB,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE1B,YAAY;IACZ,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE1B,cAAc;IACd,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE5B,0BAA0B;IAC1B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAC;AAIH;;;;;;;;;GASG;AACH,MAAM,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC;IACjC,OAAO,EAAE,OAAC,CAAC,OAAO,EAAE;IACpB,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;IAClB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,OAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACxB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AACU,QAAA,SAAS,GAAG;IACvB,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,wWAAwW;IACrX,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;gBAC7D,WAAW,EAAE,4BAA4B;aAC1C;YACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;YAC1D,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;YACxD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;YAC/D,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kDAAkD,EAAE;YAC7F,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;YACxD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE;YAC1D,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;YACxD,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;YACrD,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iCAAiC,EAAE;YACvE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;YACtD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,EAAE;YAChE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE;SACnF;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACrB;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,KAAK,CAAC,OAAO,CAAC,KAAiB;QAC7B,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAErD,2BAA2B;YAC3B,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ;gBACtC,CAAC,CAAC,gCAAqB,CAAC,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC;gBAC5D,CAAC,CAAC,gCAAqB,CAAC,kBAAkB,EAAE,CAAC;YAE/C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,aAAa,cAAc,CAAC,QAAQ,kBAAkB,CAAC,CAAC;YAC1E,CAAC;YAED,QAAQ,cAAc,CAAC,MAAM,EAAE,CAAC;gBAC9B,KAAK,KAAK;oBACR,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;gBACtD,KAAK,QAAQ;oBACX,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;gBACzD,KAAK,QAAQ;oBACX,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;gBACzD,KAAK,QAAQ;oBACX,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;gBACzD,KAAK,MAAM;oBACT,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;gBACxD,KAAK,QAAQ;oBACX,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;gBAC1D;oBACE,MAAM,IAAI,KAAK,CAAC,uBAAuB,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,OAAO,EAAE,8BAA8B;gBACvC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,KAAK,CAAC,OAAO,CAAC,MAAkB,EAAE,QAAuB;QACvD,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAClD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YAExF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,YAAY,MAAM,CAAC,IAAI,sBAAsB;gBACtD,IAAI,EAAE,IAAI;aACX,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvG,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,KAAK,CAAC,UAAU,CAAC,MAAkB,EAAE,QAAuB;QAC1D,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACxF,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;YAC3E,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CACtC,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,MAAM,CACd,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,YAAY,MAAM,CAAC,IAAI,sBAAsB;gBACtD,IAAI,EAAE,MAAM;aACb,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvG,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,KAAK,CAAC,UAAU,CAAC,MAAkB,EAAE,QAAuB;QAC1D,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;gBACvG,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAChF,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CACtC,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,MAAM,CACd,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,YAAY,MAAM,CAAC,IAAI,0BAA0B;gBAC1D,IAAI,EAAE,MAAM;aACb,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3G,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,KAAK,CAAC,UAAU,CAAC,MAAkB,EAAE,QAAuB;QAC1D,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;gBACpF,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACvE,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CACtC,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,MAAM,CACd,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,YAAY,MAAM,CAAC,IAAI,wBAAwB;gBACxD,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;aAC1B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,KAAK,CAAC,SAAS,CAAC,MAAkB,EAAE,QAAuB;QACzD,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACnD,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;YAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;YAEjC,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YAEpF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,0BAA0B,IAAI,IAAI,MAAM,GAAG;gBACnE,IAAI,EAAE;oBACJ,IAAI;oBACJ,KAAK;oBACL,IAAI;oBACJ,KAAK;oBACL,KAAK,EAAE,KAAK,CAAC,MAAM;iBACpB;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,KAAK,CAAC,WAAW,CAAC,MAAkB,EAAE,QAAuB;QAC3D,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACnD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YAED,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YAED,6CAA6C;YAC7C,mDAAmD;YACnD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,cAAc,MAAM,CAAC,KAAK,cAAc;gBACjD,IAAI,EAAE;oBACJ,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,eAAe;oBAClC,OAAO,EAAE,2CAA2C;iBACrD;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;CACF,CAAC"}