@andrebuzeli/git-mcp 15.8.4 → 15.8.5

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.
@@ -1,285 +1,285 @@
1
- import { asToolResult } from "../utils/errors.js";
2
-
3
- /**
4
- * Tool de ajuda para AI Agents - fornece orientação sobre qual tool usar
5
- */
6
- export function createGitHelpTool() {
7
- const inputSchema = {
8
- type: "object",
9
- properties: {
10
- query: {
11
- type: "string",
12
- description: "O que você quer fazer? Ex: 'criar repositório', 'fazer commit', 'criar branch'"
13
- },
14
- listTools: {
15
- type: "boolean",
16
- description: "Se true, lista todas as tools disponíveis com descrição resumida"
17
- },
18
- showFlows: {
19
- type: "boolean",
20
- description: "Se true, mostra fluxos de trabalho comuns"
21
- }
22
- },
23
- additionalProperties: false
24
- };
25
-
26
- const TOOLS_SUMMARY = {
27
- "git-workflow": {
28
- purpose: "Operações básicas do dia-a-dia: init, status, add, commit, push",
29
- actions: ["init", "status", "add", "remove", "commit", "push", "ensure-remotes", "clean"],
30
- useWhen: "Começar projeto, salvar mudanças, enviar para GitHub/Gitea"
31
- },
32
- "git-branches": {
33
- purpose: "Gerenciar branches: criar, listar, trocar, deletar",
34
- actions: ["list", "create", "checkout", "delete", "rename"],
35
- useWhen: "Trabalhar em features isoladas, organizar desenvolvimento"
36
- },
37
- "git-merge": {
38
- purpose: "Juntar branches após desenvolvimento",
39
- actions: ["merge", "abort", "status"],
40
- useWhen: "Integrar feature branch na main/develop"
41
- },
42
- "git-stash": {
43
- purpose: "Salvar mudanças temporariamente sem commit",
44
- actions: ["list", "save", "apply", "pop", "drop", "clear"],
45
- useWhen: "Trocar de branch com mudanças não commitadas"
46
- },
47
- "git-tags": {
48
- purpose: "Marcar versões/releases",
49
- actions: ["list", "create", "delete", "push"],
50
- useWhen: "Publicar versão (v1.0.0, v2.0.0)"
51
- },
52
- "git-history": {
53
- purpose: "Ver histórico de commits",
54
- actions: ["log"],
55
- useWhen: "Encontrar commit específico, ver quem alterou o quê"
56
- },
57
- "git-diff": {
58
- purpose: "Ver diferenças entre versões",
59
- actions: ["show", "compare", "stat"],
60
- useWhen: "Revisar mudanças antes de commit, comparar branches"
61
- },
62
- "git-reset": {
63
- purpose: "Desfazer commits ou mudanças",
64
- actions: ["soft", "mixed", "hard", "hard-clean"],
65
- useWhen: "Desfazer último commit, limpar working directory"
66
- },
67
- "git-config": {
68
- purpose: "Configurar Git (nome, email, etc)",
69
- actions: ["get", "set", "unset", "list"],
70
- useWhen: "Configurar autor dos commits"
71
- },
72
- "git-remote": {
73
- purpose: "Operações em GitHub/Gitea",
74
- actions: ["list", "ensure", "release-create", "topics-set", "label-create"],
75
- useWhen: "Criar release, configurar repositório remoto"
76
- },
77
- "git-sync": {
78
- purpose: "Sincronizar com remotes",
79
- actions: ["fetch", "pull"],
80
- useWhen: "Baixar mudanças de outros desenvolvedores"
81
- },
82
- "git-clone": {
83
- purpose: "Clonar repositório existente",
84
- actions: ["clone"],
85
- useWhen: "Baixar projeto existente do GitHub/Gitea"
86
- },
87
- "git-ignore": {
88
- purpose: "Gerenciar .gitignore",
89
- actions: ["list", "create", "add", "remove"],
90
- useWhen: "Ignorar arquivos (node_modules, .env, etc)"
91
- },
92
- "git-files": {
93
- purpose: "Ler arquivos do histórico Git",
94
- actions: ["list", "read"],
95
- useWhen: "Ver arquivo em versão antiga"
96
- },
97
- "git-issues": {
98
- purpose: "Gerenciar issues no GitHub/Gitea",
99
- actions: ["create", "list", "comment"],
100
- useWhen: "Reportar bugs, criar tarefas"
101
- },
102
- "git-pulls": {
103
- purpose: "Gerenciar Pull Requests",
104
- actions: ["create", "list", "files"],
105
- useWhen: "Propor mudanças para review"
106
- }
107
- };
108
-
109
- const COMMON_FLOWS = {
110
- "novo-projeto": {
111
- description: "Criar repositório do zero",
112
- steps: [
113
- { tool: "git-workflow", action: "init", note: "Inicializa git e cria repos no GitHub/Gitea" },
114
- { tool: "git-workflow", action: "add", params: { files: ["."] } },
115
- { tool: "git-workflow", action: "commit", params: { message: "Initial commit" } },
116
- { tool: "git-workflow", action: "push" }
117
- ]
118
- },
119
- "salvar-mudancas": {
120
- description: "Salvar e enviar mudanças",
121
- steps: [
122
- { tool: "git-workflow", action: "status", note: "Ver o que mudou" },
123
- { tool: "git-workflow", action: "add", params: { files: ["."] } },
124
- { tool: "git-workflow", action: "commit", params: { message: "sua mensagem" } },
125
- { tool: "git-workflow", action: "push" }
126
- ]
127
- },
128
- "nova-feature": {
129
- description: "Desenvolver feature em branch separada",
130
- steps: [
131
- { tool: "git-branches", action: "create", params: { branch: "feature/nome" } },
132
- { tool: "git-branches", action: "checkout", params: { branch: "feature/nome" } },
133
- { note: "... fazer mudanças ..." },
134
- { tool: "git-workflow", action: "add" },
135
- { tool: "git-workflow", action: "commit" },
136
- { tool: "git-branches", action: "checkout", params: { branch: "main" } },
137
- { tool: "git-merge", action: "merge", params: { branch: "feature/nome" } },
138
- { tool: "git-workflow", action: "push" }
139
- ]
140
- },
141
- "criar-release": {
142
- description: "Publicar nova versão",
143
- steps: [
144
- { tool: "git-tags", action: "create", params: { tag: "v1.0.0", message: "Release v1.0.0" } },
145
- { tool: "git-tags", action: "push", params: { tag: "v1.0.0" } },
146
- { tool: "git-remote", action: "release-create", params: { tag: "v1.0.0", name: "v1.0.0" } }
147
- ]
148
- },
149
- "desfazer-commit": {
150
- description: "Desfazer último commit mantendo mudanças",
151
- steps: [
152
- { tool: "git-reset", action: "soft", params: { ref: "HEAD~1" } }
153
- ]
154
- },
155
- "trocar-branch-com-mudancas": {
156
- description: "Salvar mudanças e trocar de branch",
157
- steps: [
158
- { tool: "git-stash", action: "save", params: { message: "WIP" } },
159
- { tool: "git-branches", action: "checkout", params: { branch: "outra-branch" } },
160
- { note: "... fazer o que precisar ..." },
161
- { tool: "git-branches", action: "checkout", params: { branch: "branch-original" } },
162
- { tool: "git-stash", action: "pop" }
163
- ]
164
- }
165
- };
166
-
167
- // Mapeamento de intenções para tools
168
- const INTENT_MAP = {
169
- // Palavras-chave -> tool recomendada
170
- "criar reposit": "git-workflow (action=init)",
171
- "iniciar projeto": "git-workflow (action=init)",
172
- "novo projeto": "git-workflow (action=init)",
173
- "commit": "git-workflow (action=commit)",
174
- "salvar": "git-workflow (action=add + commit)",
175
- "push": "git-workflow (action=push)",
176
- "enviar": "git-workflow (action=push)",
177
- "branch": "git-branches",
178
- "criar branch": "git-branches (action=create)",
179
- "trocar branch": "git-branches (action=checkout)",
180
- "merge": "git-merge",
181
- "juntar": "git-merge",
182
- "stash": "git-stash",
183
- "guardar": "git-stash (action=save)",
184
- "tag": "git-tags",
185
- "versão": "git-tags",
186
- "release": "git-remote (action=release-create)",
187
- "histórico": "git-history",
188
- "log": "git-history",
189
- "diff": "git-diff",
190
- "diferença": "git-diff",
191
- "desfazer": "git-reset",
192
- "reset": "git-reset",
193
- "clone": "git-clone",
194
- "clonar": "git-clone",
195
- "baixar projeto": "git-clone",
196
- "issue": "git-issues",
197
- "bug": "git-issues (action=create)",
198
- "pull request": "git-pulls",
199
- "pr": "git-pulls",
200
- "ignorar": "git-ignore",
201
- "gitignore": "git-ignore",
202
- "config": "git-config",
203
- "configurar": "git-config",
204
- "status": "git-workflow (action=status)",
205
- "ver mudanças": "git-workflow (action=status)"
206
- };
207
-
208
- const description = `Ajuda para AI Agents - descobre qual tool usar para cada situação.
209
-
210
- USE ESTA TOOL QUANDO:
211
- - Não sabe qual git-* tool usar
212
- - Precisa ver fluxos de trabalho comuns
213
- - Quer lista de todas as tools disponíveis
214
-
215
- EXEMPLOS:
216
- • { "query": "como criar um repositório?" }
217
- • { "listTools": true }
218
- • { "showFlows": true }`;
219
-
220
- async function handle(args) {
221
- const { query, listTools, showFlows } = args || {};
222
-
223
- // Listar todas as tools
224
- if (listTools) {
225
- return asToolResult({
226
- tools: TOOLS_SUMMARY,
227
- tip: "Use query='o que você quer fazer' para recomendação específica"
228
- });
229
- }
230
-
231
- // Mostrar fluxos comuns
232
- if (showFlows) {
233
- return asToolResult({
234
- flows: COMMON_FLOWS,
235
- tip: "Siga os steps em ordem para cada fluxo"
236
- });
237
- }
238
-
239
- // Buscar por query
240
- if (query) {
241
- const q = query.toLowerCase();
242
- const matches = [];
243
-
244
- for (const [intent, tool] of Object.entries(INTENT_MAP)) {
245
- if (q.includes(intent) || intent.includes(q)) {
246
- matches.push({ intent, recommendation: tool });
247
- }
248
- }
249
-
250
- if (matches.length > 0) {
251
- return asToolResult({
252
- query,
253
- recommendations: matches,
254
- tip: "Use a tool recomendada com os parâmetros indicados"
255
- });
256
- }
257
-
258
- return asToolResult({
259
- query,
260
- message: "Não encontrei recomendação específica. Veja todas as tools:",
261
- tools: Object.keys(TOOLS_SUMMARY),
262
- tip: "Use listTools=true para ver detalhes de cada tool"
263
- });
264
- }
265
-
266
- // Sem parâmetros - retornar overview
267
- return asToolResult({
268
- message: "Git MCP - Tools para AI Agents",
269
- availableTools: Object.keys(TOOLS_SUMMARY).length,
270
- usage: {
271
- "Recomendação": "{ query: 'o que você quer fazer' }",
272
- "Listar tools": "{ listTools: true }",
273
- "Ver fluxos": "{ showFlows: true }"
274
- },
275
- quickStart: "Para começar um projeto: git-workflow com action='init'"
276
- });
277
- }
278
-
279
- return {
280
- name: "git-help",
281
- description,
282
- inputSchema,
283
- handle
284
- };
285
- }
1
+ import { asToolResult } from "../utils/errors.js";
2
+
3
+ /**
4
+ * Tool de ajuda para AI Agents - fornece orientação sobre qual tool usar
5
+ */
6
+ export function createGitHelpTool() {
7
+ const inputSchema = {
8
+ type: "object",
9
+ properties: {
10
+ query: {
11
+ type: "string",
12
+ description: "O que você quer fazer? Ex: 'criar repositório', 'fazer commit', 'criar branch'"
13
+ },
14
+ listTools: {
15
+ type: "boolean",
16
+ description: "Se true, lista todas as tools disponíveis com descrição resumida"
17
+ },
18
+ showFlows: {
19
+ type: "boolean",
20
+ description: "Se true, mostra fluxos de trabalho comuns"
21
+ }
22
+ },
23
+ additionalProperties: false
24
+ };
25
+
26
+ const TOOLS_SUMMARY = {
27
+ "git-workflow": {
28
+ purpose: "Operações básicas do dia-a-dia: init, status, add, commit, push",
29
+ actions: ["init", "status", "add", "remove", "commit", "push", "ensure-remotes", "clean"],
30
+ useWhen: "Começar projeto, salvar mudanças, enviar para GitHub/Gitea"
31
+ },
32
+ "git-branches": {
33
+ purpose: "Gerenciar branches: criar, listar, trocar, deletar",
34
+ actions: ["list", "create", "checkout", "delete", "rename"],
35
+ useWhen: "Trabalhar em features isoladas, organizar desenvolvimento"
36
+ },
37
+ "git-merge": {
38
+ purpose: "Juntar branches após desenvolvimento",
39
+ actions: ["merge", "abort", "status"],
40
+ useWhen: "Integrar feature branch na main/develop"
41
+ },
42
+ "git-stash": {
43
+ purpose: "Salvar mudanças temporariamente sem commit",
44
+ actions: ["list", "save", "apply", "pop", "drop", "clear"],
45
+ useWhen: "Trocar de branch com mudanças não commitadas"
46
+ },
47
+ "git-tags": {
48
+ purpose: "Marcar versões/releases",
49
+ actions: ["list", "create", "delete", "push"],
50
+ useWhen: "Publicar versão (v1.0.0, v2.0.0)"
51
+ },
52
+ "git-history": {
53
+ purpose: "Ver histórico de commits",
54
+ actions: ["log"],
55
+ useWhen: "Encontrar commit específico, ver quem alterou o quê"
56
+ },
57
+ "git-diff": {
58
+ purpose: "Ver diferenças entre versões",
59
+ actions: ["show", "compare", "stat"],
60
+ useWhen: "Revisar mudanças antes de commit, comparar branches"
61
+ },
62
+ "git-reset": {
63
+ purpose: "Desfazer commits ou mudanças",
64
+ actions: ["soft", "mixed", "hard", "hard-clean"],
65
+ useWhen: "Desfazer último commit, limpar working directory"
66
+ },
67
+ "git-config": {
68
+ purpose: "Configurar Git (nome, email, etc)",
69
+ actions: ["get", "set", "unset", "list"],
70
+ useWhen: "Configurar autor dos commits"
71
+ },
72
+ "git-remote": {
73
+ purpose: "Operações em GitHub/Gitea",
74
+ actions: ["list", "ensure", "release-create", "topics-set", "label-create"],
75
+ useWhen: "Criar release, configurar repositório remoto"
76
+ },
77
+ "git-sync": {
78
+ purpose: "Sincronizar com remotes",
79
+ actions: ["fetch", "pull"],
80
+ useWhen: "Baixar mudanças de outros desenvolvedores"
81
+ },
82
+ "git-clone": {
83
+ purpose: "Clonar repositório existente",
84
+ actions: ["clone"],
85
+ useWhen: "Baixar projeto existente do GitHub/Gitea"
86
+ },
87
+ "git-ignore": {
88
+ purpose: "Gerenciar .gitignore",
89
+ actions: ["list", "create", "add", "remove"],
90
+ useWhen: "Ignorar arquivos (node_modules, .env, etc)"
91
+ },
92
+ "git-files": {
93
+ purpose: "Ler arquivos do histórico Git",
94
+ actions: ["list", "read"],
95
+ useWhen: "Ver arquivo em versão antiga"
96
+ },
97
+ "git-issues": {
98
+ purpose: "Gerenciar issues no GitHub/Gitea",
99
+ actions: ["create", "list", "comment"],
100
+ useWhen: "Reportar bugs, criar tarefas"
101
+ },
102
+ "git-pulls": {
103
+ purpose: "Gerenciar Pull Requests",
104
+ actions: ["create", "list", "files"],
105
+ useWhen: "Propor mudanças para review"
106
+ }
107
+ };
108
+
109
+ const COMMON_FLOWS = {
110
+ "novo-projeto": {
111
+ description: "Criar repositório do zero",
112
+ steps: [
113
+ { tool: "git-workflow", action: "init", note: "Inicializa git e cria repos no GitHub/Gitea" },
114
+ { tool: "git-workflow", action: "add", params: { files: ["."] } },
115
+ { tool: "git-workflow", action: "commit", params: { message: "Initial commit" } },
116
+ { tool: "git-workflow", action: "push" }
117
+ ]
118
+ },
119
+ "salvar-mudancas": {
120
+ description: "Salvar e enviar mudanças",
121
+ steps: [
122
+ { tool: "git-workflow", action: "status", note: "Ver o que mudou" },
123
+ { tool: "git-workflow", action: "add", params: { files: ["."] } },
124
+ { tool: "git-workflow", action: "commit", params: { message: "sua mensagem" } },
125
+ { tool: "git-workflow", action: "push" }
126
+ ]
127
+ },
128
+ "nova-feature": {
129
+ description: "Desenvolver feature em branch separada",
130
+ steps: [
131
+ { tool: "git-branches", action: "create", params: { branch: "feature/nome" } },
132
+ { tool: "git-branches", action: "checkout", params: { branch: "feature/nome" } },
133
+ { note: "... fazer mudanças ..." },
134
+ { tool: "git-workflow", action: "add" },
135
+ { tool: "git-workflow", action: "commit" },
136
+ { tool: "git-branches", action: "checkout", params: { branch: "main" } },
137
+ { tool: "git-merge", action: "merge", params: { branch: "feature/nome" } },
138
+ { tool: "git-workflow", action: "push" }
139
+ ]
140
+ },
141
+ "criar-release": {
142
+ description: "Publicar nova versão",
143
+ steps: [
144
+ { tool: "git-tags", action: "create", params: { tag: "v1.0.0", message: "Release v1.0.0" } },
145
+ { tool: "git-tags", action: "push", params: { tag: "v1.0.0" } },
146
+ { tool: "git-remote", action: "release-create", params: { tag: "v1.0.0", name: "v1.0.0" } }
147
+ ]
148
+ },
149
+ "desfazer-commit": {
150
+ description: "Desfazer último commit mantendo mudanças",
151
+ steps: [
152
+ { tool: "git-reset", action: "soft", params: { ref: "HEAD~1" } }
153
+ ]
154
+ },
155
+ "trocar-branch-com-mudancas": {
156
+ description: "Salvar mudanças e trocar de branch",
157
+ steps: [
158
+ { tool: "git-stash", action: "save", params: { message: "WIP" } },
159
+ { tool: "git-branches", action: "checkout", params: { branch: "outra-branch" } },
160
+ { note: "... fazer o que precisar ..." },
161
+ { tool: "git-branches", action: "checkout", params: { branch: "branch-original" } },
162
+ { tool: "git-stash", action: "pop" }
163
+ ]
164
+ }
165
+ };
166
+
167
+ // Mapeamento de intenções para tools
168
+ const INTENT_MAP = {
169
+ // Palavras-chave -> tool recomendada
170
+ "criar reposit": "git-workflow (action=init)",
171
+ "iniciar projeto": "git-workflow (action=init)",
172
+ "novo projeto": "git-workflow (action=init)",
173
+ "commit": "git-workflow (action=commit)",
174
+ "salvar": "git-workflow (action=add + commit)",
175
+ "push": "git-workflow (action=push)",
176
+ "enviar": "git-workflow (action=push)",
177
+ "branch": "git-branches",
178
+ "criar branch": "git-branches (action=create)",
179
+ "trocar branch": "git-branches (action=checkout)",
180
+ "merge": "git-merge",
181
+ "juntar": "git-merge",
182
+ "stash": "git-stash",
183
+ "guardar": "git-stash (action=save)",
184
+ "tag": "git-tags",
185
+ "versão": "git-tags",
186
+ "release": "git-remote (action=release-create)",
187
+ "histórico": "git-history",
188
+ "log": "git-history",
189
+ "diff": "git-diff",
190
+ "diferença": "git-diff",
191
+ "desfazer": "git-reset",
192
+ "reset": "git-reset",
193
+ "clone": "git-clone",
194
+ "clonar": "git-clone",
195
+ "baixar projeto": "git-clone",
196
+ "issue": "git-issues",
197
+ "bug": "git-issues (action=create)",
198
+ "pull request": "git-pulls",
199
+ "pr": "git-pulls",
200
+ "ignorar": "git-ignore",
201
+ "gitignore": "git-ignore",
202
+ "config": "git-config",
203
+ "configurar": "git-config",
204
+ "status": "git-workflow (action=status)",
205
+ "ver mudanças": "git-workflow (action=status)"
206
+ };
207
+
208
+ const description = `Ajuda para AI Agents - descobre qual tool usar para cada situação.
209
+
210
+ USE ESTA TOOL QUANDO:
211
+ - Não sabe qual git-* tool usar
212
+ - Precisa ver fluxos de trabalho comuns
213
+ - Quer lista de todas as tools disponíveis
214
+
215
+ EXEMPLOS:
216
+ • { "query": "como criar um repositório?" }
217
+ • { "listTools": true }
218
+ • { "showFlows": true }`;
219
+
220
+ async function handle(args) {
221
+ const { query, listTools, showFlows } = args || {};
222
+
223
+ // Listar todas as tools
224
+ if (listTools) {
225
+ return asToolResult({
226
+ tools: TOOLS_SUMMARY,
227
+ tip: "Use query='o que você quer fazer' para recomendação específica"
228
+ });
229
+ }
230
+
231
+ // Mostrar fluxos comuns
232
+ if (showFlows) {
233
+ return asToolResult({
234
+ flows: COMMON_FLOWS,
235
+ tip: "Siga os steps em ordem para cada fluxo"
236
+ });
237
+ }
238
+
239
+ // Buscar por query
240
+ if (query) {
241
+ const q = query.toLowerCase();
242
+ const matches = [];
243
+
244
+ for (const [intent, tool] of Object.entries(INTENT_MAP)) {
245
+ if (q.includes(intent) || intent.includes(q)) {
246
+ matches.push({ intent, recommendation: tool });
247
+ }
248
+ }
249
+
250
+ if (matches.length > 0) {
251
+ return asToolResult({
252
+ query,
253
+ recommendations: matches,
254
+ tip: "Use a tool recomendada com os parâmetros indicados"
255
+ });
256
+ }
257
+
258
+ return asToolResult({
259
+ query,
260
+ message: "Não encontrei recomendação específica. Veja todas as tools:",
261
+ tools: Object.keys(TOOLS_SUMMARY),
262
+ tip: "Use listTools=true para ver detalhes de cada tool"
263
+ });
264
+ }
265
+
266
+ // Sem parâmetros - retornar overview
267
+ return asToolResult({
268
+ message: "Git MCP - Tools para AI Agents",
269
+ availableTools: Object.keys(TOOLS_SUMMARY).length,
270
+ usage: {
271
+ "Recomendação": "{ query: 'o que você quer fazer' }",
272
+ "Listar tools": "{ listTools: true }",
273
+ "Ver fluxos": "{ showFlows: true }"
274
+ },
275
+ quickStart: "Para começar um projeto: git-workflow com action='init'"
276
+ });
277
+ }
278
+
279
+ return {
280
+ name: "git-help",
281
+ description,
282
+ inputSchema,
283
+ handle
284
+ };
285
+ }