@renfeng/kiro-code-review 1.9.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.
- package/LICENSE +21 -0
- package/README.md +69 -0
- package/dist/api/gitlab-api.d.ts +122 -0
- package/dist/api/gitlab-api.d.ts.map +1 -0
- package/dist/api/gitlab-api.js +334 -0
- package/dist/api/gitlab-api.js.map +1 -0
- package/dist/bin/index.d.ts +11 -0
- package/dist/bin/index.d.ts.map +1 -0
- package/dist/bin/index.js +67 -0
- package/dist/bin/index.js.map +1 -0
- package/dist/config/glab-config.loader.d.ts +14 -0
- package/dist/config/glab-config.loader.d.ts.map +1 -0
- package/dist/config/glab-config.loader.js +87 -0
- package/dist/config/glab-config.loader.js.map +1 -0
- package/dist/errors/error-handler.d.ts +45 -0
- package/dist/errors/error-handler.d.ts.map +1 -0
- package/dist/errors/error-handler.js +134 -0
- package/dist/errors/error-handler.js.map +1 -0
- package/dist/logging/index.d.ts +2 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +2 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/logger.service.d.ts +34 -0
- package/dist/logging/logger.service.d.ts.map +1 -0
- package/dist/logging/logger.service.js +91 -0
- package/dist/logging/logger.service.js.map +1 -0
- package/dist/servers/general-server.d.ts +18 -0
- package/dist/servers/general-server.d.ts.map +1 -0
- package/dist/servers/general-server.js +73 -0
- package/dist/servers/general-server.js.map +1 -0
- package/dist/servers/git-server.d.ts +17 -0
- package/dist/servers/git-server.d.ts.map +1 -0
- package/dist/servers/git-server.js +74 -0
- package/dist/servers/git-server.js.map +1 -0
- package/dist/servers/gitlab-server.d.ts +18 -0
- package/dist/servers/gitlab-server.d.ts.map +1 -0
- package/dist/servers/gitlab-server.js +139 -0
- package/dist/servers/gitlab-server.js.map +1 -0
- package/dist/services/__tests__/batch-retro.service.test.d.ts +9 -0
- package/dist/services/__tests__/batch-retro.service.test.d.ts.map +1 -0
- package/dist/services/__tests__/batch-retro.service.test.js +235 -0
- package/dist/services/__tests__/batch-retro.service.test.js.map +1 -0
- package/dist/services/__tests__/general-save-diffs.test.d.ts +5 -0
- package/dist/services/__tests__/general-save-diffs.test.d.ts.map +1 -0
- package/dist/services/__tests__/general-save-diffs.test.js +99 -0
- package/dist/services/__tests__/general-save-diffs.test.js.map +1 -0
- package/dist/services/__tests__/git-diff-files.test.d.ts +8 -0
- package/dist/services/__tests__/git-diff-files.test.d.ts.map +1 -0
- package/dist/services/__tests__/git-diff-files.test.js +64 -0
- package/dist/services/__tests__/git-diff-files.test.js.map +1 -0
- package/dist/services/__tests__/review-tools.service.test.d.ts +8 -0
- package/dist/services/__tests__/review-tools.service.test.d.ts.map +1 -0
- package/dist/services/__tests__/review-tools.service.test.js +169 -0
- package/dist/services/__tests__/review-tools.service.test.js.map +1 -0
- package/dist/services/__tests__/review-utils.service.test.d.ts +8 -0
- package/dist/services/__tests__/review-utils.service.test.d.ts.map +1 -0
- package/dist/services/__tests__/review-utils.service.test.js +306 -0
- package/dist/services/__tests__/review-utils.service.test.js.map +1 -0
- package/dist/services/anchor-resolver.d.ts +29 -0
- package/dist/services/anchor-resolver.d.ts.map +1 -0
- package/dist/services/anchor-resolver.js +97 -0
- package/dist/services/anchor-resolver.js.map +1 -0
- package/dist/services/general.service.d.ts +42 -0
- package/dist/services/general.service.d.ts.map +1 -0
- package/dist/services/general.service.js +157 -0
- package/dist/services/general.service.js.map +1 -0
- package/dist/services/git-tools.service.d.ts +123 -0
- package/dist/services/git-tools.service.d.ts.map +1 -0
- package/dist/services/git-tools.service.js +231 -0
- package/dist/services/git-tools.service.js.map +1 -0
- package/dist/services/review-tools.service.d.ts +130 -0
- package/dist/services/review-tools.service.d.ts.map +1 -0
- package/dist/services/review-tools.service.js +902 -0
- package/dist/services/review-tools.service.js.map +1 -0
- package/dist/tools/general-tools.d.ts +9 -0
- package/dist/tools/general-tools.d.ts.map +1 -0
- package/dist/tools/general-tools.js +99 -0
- package/dist/tools/general-tools.js.map +1 -0
- package/dist/tools/git-tools.d.ts +8 -0
- package/dist/tools/git-tools.d.ts.map +1 -0
- package/dist/tools/git-tools.js +175 -0
- package/dist/tools/git-tools.js.map +1 -0
- package/dist/tools/gitlab-tools.d.ts +8 -0
- package/dist/tools/gitlab-tools.d.ts.map +1 -0
- package/dist/tools/gitlab-tools.js +348 -0
- package/dist/tools/gitlab-tools.js.map +1 -0
- package/dist/types.d.ts +294 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitLab Review Tool Definitions
|
|
3
|
+
*
|
|
4
|
+
* MR review and todo triage tools exposed as MCP tools.
|
|
5
|
+
*/
|
|
6
|
+
export const REVIEW_TOOLS = [
|
|
7
|
+
{
|
|
8
|
+
name: "get_project_settings",
|
|
9
|
+
description: "Get merge-related project settings. Returns whether the project requires all discussion threads to be resolved before merge. Call once per project and pass the result to publish_review via threadsBlockMerge.",
|
|
10
|
+
inputSchema: {
|
|
11
|
+
type: "object",
|
|
12
|
+
properties: {
|
|
13
|
+
project: { type: ["string", "number"], description: "GitLab project ID or path" },
|
|
14
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
15
|
+
},
|
|
16
|
+
required: ["project"],
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: "extract_mr_metadata",
|
|
21
|
+
description: "Get source and target branch for a GitLab merge request",
|
|
22
|
+
inputSchema: {
|
|
23
|
+
type: "object",
|
|
24
|
+
properties: {
|
|
25
|
+
project: { type: ["string", "number"], description: "GitLab project ID or path" },
|
|
26
|
+
mergeRequestIid: { type: "number", description: "Merge request internal ID" },
|
|
27
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
28
|
+
},
|
|
29
|
+
required: ["project", "mergeRequestIid"],
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "extract_version_refs",
|
|
34
|
+
description: "Get diff version refs (head_sha, base_sha, start_sha) for a merge request",
|
|
35
|
+
inputSchema: {
|
|
36
|
+
type: "object",
|
|
37
|
+
properties: {
|
|
38
|
+
project: { type: ["string", "number"], description: "GitLab project ID or path" },
|
|
39
|
+
mergeRequestIid: { type: "number", description: "Merge request internal ID" },
|
|
40
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
41
|
+
},
|
|
42
|
+
required: ["project", "mergeRequestIid"],
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: "extract_prior_discussions",
|
|
47
|
+
description: "Extract non-system discussion threads (both resolved and unresolved) from a merge request for deduplication during review. Each thread includes 'discussionId' (for reply_to_discussion / resolve_discussion) and a 'resolved' boolean.",
|
|
48
|
+
inputSchema: {
|
|
49
|
+
type: "object",
|
|
50
|
+
properties: {
|
|
51
|
+
project: { type: ["string", "number"], description: "GitLab project ID or path" },
|
|
52
|
+
mergeRequestIid: { type: "number", description: "Merge request internal ID" },
|
|
53
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
54
|
+
},
|
|
55
|
+
required: ["project", "mergeRequestIid"],
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: "extract_draft_notes",
|
|
60
|
+
description: "Extract unpublished draft notes from a merge request. Returns each draft's id, note body, and position (file, line). Use this to inspect existing drafts before deciding which to keep or delete.",
|
|
61
|
+
inputSchema: {
|
|
62
|
+
type: "object",
|
|
63
|
+
properties: {
|
|
64
|
+
project: { type: ["string", "number"], description: "GitLab project ID or path" },
|
|
65
|
+
mergeRequestIid: { type: "number", description: "Merge request internal ID" },
|
|
66
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
67
|
+
},
|
|
68
|
+
required: ["project", "mergeRequestIid"],
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: "post_draft_notes",
|
|
73
|
+
description: "Post review findings as draft notes on a GitLab merge request. Blocking findings are posted as individual inline drafts. Non-blocking findings are compiled into a single checklist and posted as a general (non-inline) draft note. All drafts remain unpublished until publish_review is called. The caller is responsible for deduplication — this tool posts all findings as-is. When repoDir and mergeBase are provided, anchor-based findings (with anchor/hunk fields but no line/old_line) are resolved to line numbers automatically before posting.",
|
|
74
|
+
inputSchema: {
|
|
75
|
+
type: "object",
|
|
76
|
+
properties: {
|
|
77
|
+
project: { type: ["string", "number"], description: "GitLab project ID or path" },
|
|
78
|
+
mergeRequestIid: { type: "number", description: "Merge request internal ID" },
|
|
79
|
+
headSha: { type: "string", description: "HEAD commit SHA for diff positioning" },
|
|
80
|
+
baseSha: { type: "string", description: "Base commit SHA for diff positioning" },
|
|
81
|
+
startSha: { type: "string", description: "Start commit SHA for diff positioning" },
|
|
82
|
+
repoDir: { type: "string", description: "Optional: absolute path to local git repo. When provided with mergeBase, anchor-based findings are resolved to line numbers before posting." },
|
|
83
|
+
mergeBase: { type: "string", description: "Optional: merge base commit SHA. Required when repoDir is provided for anchor resolution." },
|
|
84
|
+
findings: {
|
|
85
|
+
type: "object",
|
|
86
|
+
description: "Review findings object with comments array, summary, and verdict. Comments can use either line-based positioning (line/old_line/changed) or anchor-based positioning (file/hunk/anchor). Anchor-based findings require repoDir and mergeBase for resolution.",
|
|
87
|
+
properties: {
|
|
88
|
+
comments: {
|
|
89
|
+
type: "array",
|
|
90
|
+
items: {
|
|
91
|
+
type: "object",
|
|
92
|
+
properties: {
|
|
93
|
+
file: { type: ["string", "null"], description: "File path" },
|
|
94
|
+
hunk: { type: ["string", "null"], description: "Diff hunk header (@@ ... @@) for anchor disambiguation" },
|
|
95
|
+
anchor: { type: ["string", "null"], description: "Exact line content to anchor to. Prefix with OLD: for deleted lines." },
|
|
96
|
+
line: { type: ["number", "null"], description: "New-side line number (set by resolve or provided directly)" },
|
|
97
|
+
old_line: { type: ["number", "null"], description: "Old-side line number (set by resolve or provided directly)" },
|
|
98
|
+
changed: { type: "string", enum: ["new", "old", "context", "general"] },
|
|
99
|
+
blocking: { type: "boolean" },
|
|
100
|
+
note: { type: "string", description: "Markdown comment text" },
|
|
101
|
+
pipeline_catchable: { type: "boolean" },
|
|
102
|
+
},
|
|
103
|
+
required: ["note"],
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
summary: { type: "string" },
|
|
107
|
+
verdict: { type: "string", enum: ["approve", "request_changes", "comment_only"] },
|
|
108
|
+
},
|
|
109
|
+
required: ["comments", "summary", "verdict"],
|
|
110
|
+
},
|
|
111
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
112
|
+
},
|
|
113
|
+
required: ["project", "mergeRequestIid", "headSha", "baseSha", "startSha", "findings"],
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: "delete_draft_notes",
|
|
118
|
+
description: "Delete draft notes from a GitLab merge request. When draftNoteIds is provided, deletes only those specific drafts. When omitted, deletes all drafts.",
|
|
119
|
+
inputSchema: {
|
|
120
|
+
type: "object",
|
|
121
|
+
properties: {
|
|
122
|
+
project: { type: ["string", "number"], description: "GitLab project ID or path" },
|
|
123
|
+
mergeRequestIid: { type: "number", description: "Merge request internal ID" },
|
|
124
|
+
draftNoteIds: { type: "array", items: { type: "number" }, description: "Optional array of specific draft note IDs to delete. If omitted, deletes all drafts." },
|
|
125
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
126
|
+
},
|
|
127
|
+
required: ["project", "mergeRequestIid"],
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
name: "publish_review",
|
|
132
|
+
description: "Bulk-publish all draft notes and optionally apply a verdict. The verdict is derived from the actual remaining drafts: if any blocking drafts exist (non-checklist), request_changes; otherwise approve. The non-blocking checklist draft (tagged with a marker) is extracted, deleted from drafts, and re-posted as a plain non-resolvable comment. Self-assigns as reviewer only when requesting changes. When applyVerdict is false, drafts are published but no verdict is applied. When threadsBlockMerge is true and verdict is request_changes, /request_changes is skipped (unresolved blocking threads already prevent merging). After publishing, awards an emoji on each published note for visual attribution — tries emojiName (default: 'robot'). Falls back to 'robot' if unavailable.",
|
|
133
|
+
inputSchema: {
|
|
134
|
+
type: "object",
|
|
135
|
+
properties: {
|
|
136
|
+
project: { type: ["string", "number"], description: "GitLab project ID or path" },
|
|
137
|
+
mergeRequestIid: { type: "number", description: "Merge request internal ID" },
|
|
138
|
+
applyVerdict: { type: "boolean", description: "Whether to apply the verdict (approve/request_changes). Defaults to true. Set to false to publish drafts without applying a verdict — the user decides manually." },
|
|
139
|
+
threadsBlockMerge: { type: "boolean", description: "Whether the project requires all discussion threads to be resolved before merge. When true and verdict is request_changes, /request_changes is skipped (unresolved blocking threads already prevent merging). Fetch once per project via get_project_settings." },
|
|
140
|
+
emojiName: { type: "string", description: "Emoji to award on published notes for visual attribution (default: 'robot'). Falls back to 'robot' if the requested emoji is unavailable." },
|
|
141
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
142
|
+
},
|
|
143
|
+
required: ["project", "mergeRequestIid"],
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
name: "post_comment",
|
|
148
|
+
description: "Post a plain comment on a GitLab merge request. Unlike draft notes, plain comments are NOT resolvable — they do not create discussion threads and do not add to the open thread count. Use this for informational or summary comments that don't require action from the MR author.",
|
|
149
|
+
inputSchema: {
|
|
150
|
+
type: "object",
|
|
151
|
+
properties: {
|
|
152
|
+
project: { type: ["string", "number"], description: "GitLab project ID or path" },
|
|
153
|
+
mergeRequestIid: { type: "number", description: "Merge request internal ID" },
|
|
154
|
+
body: { type: "string", description: "Markdown comment body" },
|
|
155
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
156
|
+
},
|
|
157
|
+
required: ["project", "mergeRequestIid", "body"],
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
name: "edit_note",
|
|
162
|
+
description: "Update the body of an existing note (comment) on a GitLab merge request. Only works for notes authored by the authenticated user. Use this to tick/untick checklist items (e.g. `- [ ]` → `- [x]`), correct typos, or append status updates to previously posted comments. IMPORTANT: The body parameter replaces the entire note — always read the full note body first (via list_notes), modify it, then pass the complete updated body.",
|
|
163
|
+
inputSchema: {
|
|
164
|
+
type: "object",
|
|
165
|
+
properties: {
|
|
166
|
+
project: { type: ["string", "number"], description: "GitLab project ID or path" },
|
|
167
|
+
mergeRequestIid: { type: "number", description: "Merge request internal ID" },
|
|
168
|
+
noteId: { type: "number", description: "ID of the note to edit (from list_notes or post_comment response)" },
|
|
169
|
+
body: { type: "string", description: "New markdown body for the note. Replaces the entire body — always read the full note first (via list_notes), modify it, then pass the complete updated body." },
|
|
170
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
171
|
+
},
|
|
172
|
+
required: ["project", "mergeRequestIid", "noteId", "body"],
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
name: "fetch_and_categorize_todos",
|
|
177
|
+
description: "Fetch pending GitLab todos and categorize them into: done (merged/closed/draft/renovate), review (open MRs needing review), and skip (non-MR or unrecognized)",
|
|
178
|
+
inputSchema: {
|
|
179
|
+
type: "object",
|
|
180
|
+
properties: {
|
|
181
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
182
|
+
},
|
|
183
|
+
required: [],
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
name: "mark_todos_done",
|
|
188
|
+
description: "Mark one or more GitLab todos as done by their IDs",
|
|
189
|
+
inputSchema: {
|
|
190
|
+
type: "object",
|
|
191
|
+
properties: {
|
|
192
|
+
todoIds: { type: "array", items: { type: "number" }, description: "Array of todo IDs to mark as done" },
|
|
193
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
194
|
+
},
|
|
195
|
+
required: ["todoIds"],
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
name: "list_notes",
|
|
200
|
+
description: "List notes (comments) on a GitLab merge request, sorted by creation date. Returns note id, author, body, whether it's a system note, and creation timestamp. Use to read feedback on your MR.",
|
|
201
|
+
inputSchema: {
|
|
202
|
+
type: "object",
|
|
203
|
+
properties: {
|
|
204
|
+
project: { type: ["string", "number"], description: "GitLab project ID or path" },
|
|
205
|
+
mergeRequestIid: { type: "number", description: "Merge request internal ID" },
|
|
206
|
+
sort: { type: "string", enum: ["asc", "desc"], description: "Sort order by created_at (default: desc)" },
|
|
207
|
+
perPage: { type: "number", description: "Number of notes to return (default: 20, max: 100)" },
|
|
208
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
209
|
+
},
|
|
210
|
+
required: ["project", "mergeRequestIid"],
|
|
211
|
+
},
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
name: "reply_to_discussion",
|
|
215
|
+
description: "Reply to a specific discussion thread on a GitLab merge request. Use list_notes or extract_prior_discussions to find the discussion_id first.",
|
|
216
|
+
inputSchema: {
|
|
217
|
+
type: "object",
|
|
218
|
+
properties: {
|
|
219
|
+
project: { type: ["string", "number"], description: "GitLab project ID or path" },
|
|
220
|
+
mergeRequestIid: { type: "number", description: "Merge request internal ID" },
|
|
221
|
+
discussionId: { type: "string", description: "Discussion ID (hex string from the discussions API)" },
|
|
222
|
+
body: { type: "string", description: "Markdown reply body" },
|
|
223
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
224
|
+
},
|
|
225
|
+
required: ["project", "mergeRequestIid", "discussionId", "body"],
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
name: "resolve_discussion",
|
|
230
|
+
description: "Resolve (or unresolve) a discussion thread on a GitLab merge request. Resolved threads no longer block merge in projects that require all discussions resolved.",
|
|
231
|
+
inputSchema: {
|
|
232
|
+
type: "object",
|
|
233
|
+
properties: {
|
|
234
|
+
project: { type: ["string", "number"], description: "GitLab project ID or path" },
|
|
235
|
+
mergeRequestIid: { type: "number", description: "Merge request internal ID" },
|
|
236
|
+
discussionId: { type: "string", description: "Discussion ID (hex string from the discussions API)" },
|
|
237
|
+
resolved: { type: "boolean", description: "true to resolve, false to unresolve (default: true)" },
|
|
238
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
239
|
+
},
|
|
240
|
+
required: ["project", "mergeRequestIid", "discussionId"],
|
|
241
|
+
},
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
name: "review_retro",
|
|
245
|
+
description: "Retrospective analysis of review discussions on a merge request. Classifies each discussion by how it was resolved: code_changed (author modified code near the comment), author_explained (author replied but code unchanged), reviewer_self_resolved (resolved without reply), wont_fix, duplicate, still_open, or unknown. Returns per-discussion classification and aggregate stats (code change rate, response rate, category breakdown). Useful for understanding review effectiveness and author reactions to feedback.",
|
|
246
|
+
inputSchema: {
|
|
247
|
+
type: "object",
|
|
248
|
+
properties: {
|
|
249
|
+
project: { type: ["string", "number"], description: "GitLab project ID or path" },
|
|
250
|
+
mergeRequestIid: { type: "number", description: "Merge request internal ID" },
|
|
251
|
+
reviewer: { type: "string", description: "Optional: filter discussions to those started by this username" },
|
|
252
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
253
|
+
},
|
|
254
|
+
required: ["project", "mergeRequestIid"],
|
|
255
|
+
},
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
name: "list_merge_requests",
|
|
259
|
+
description: "List merge requests across all accessible projects (top-level /merge_requests endpoint). Mirrors the GitLab dashboard views. Use state='merged' + reviewerUsername to get the same list as /dashboard/merge_requests/merged. Returns project path, MR IID, title, state, author, merged date, and web URL for each MR.",
|
|
260
|
+
inputSchema: {
|
|
261
|
+
type: "object",
|
|
262
|
+
properties: {
|
|
263
|
+
state: { type: "string", enum: ["opened", "closed", "merged", "all"], description: "Filter by MR state (default: 'merged')" },
|
|
264
|
+
scope: { type: "string", enum: ["assigned_to_me", "all"], description: "Filter scope (default: 'all')" },
|
|
265
|
+
reviewerUsername: { type: "string", description: "Filter to MRs where this user was a reviewer" },
|
|
266
|
+
authorUsername: { type: "string", description: "Filter to MRs by this author" },
|
|
267
|
+
perPage: { type: "number", description: "Results per page (default: 20, max: 100)" },
|
|
268
|
+
updatedAfter: { type: "string", description: "ISO 8601 date — only MRs updated after this date" },
|
|
269
|
+
updatedBefore: { type: "string", description: "ISO 8601 date — only MRs updated before this date" },
|
|
270
|
+
orderBy: { type: "string", enum: ["created_at", "updated_at"], description: "Order by field (default: 'updated_at')" },
|
|
271
|
+
sort: { type: "string", enum: ["asc", "desc"], description: "Sort direction (default: 'desc')" },
|
|
272
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
273
|
+
},
|
|
274
|
+
required: [],
|
|
275
|
+
},
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
name: "batch_review_retro",
|
|
279
|
+
description: "Run retrospective analysis across multiple merge requests in one call. Either provide an explicit list of MRs, or provide reviewerUsername + date filters to auto-discover them via list_merge_requests. Runs review_retro on each MR, aggregates results, and returns a cross-MR summary with per-MR breakdowns. Excludes authors listed in excludeAuthors (e.g. bot accounts). This replaces the need for subagent dispatch — one tool call does the entire batch.",
|
|
280
|
+
inputSchema: {
|
|
281
|
+
type: "object",
|
|
282
|
+
properties: {
|
|
283
|
+
mergeRequests: {
|
|
284
|
+
type: "array",
|
|
285
|
+
description: "Explicit list of MRs to analyze. If omitted, uses reviewerUsername + date filters to discover MRs.",
|
|
286
|
+
items: {
|
|
287
|
+
type: "object",
|
|
288
|
+
properties: {
|
|
289
|
+
project: { type: "string", description: "GitLab project path" },
|
|
290
|
+
mergeRequestIid: { type: "number", description: "MR IID" },
|
|
291
|
+
},
|
|
292
|
+
required: ["project", "mergeRequestIid"],
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
reviewerUsername: { type: "string", description: "Discover merged MRs where this user was a reviewer" },
|
|
296
|
+
excludeAuthors: { type: "array", items: { type: "string" }, description: "Author usernames to exclude (e.g. ['SA-Renovate-bot'])" },
|
|
297
|
+
updatedAfter: { type: "string", description: "ISO 8601 date — only MRs updated after this date" },
|
|
298
|
+
updatedBefore: { type: "string", description: "ISO 8601 date — only MRs updated before this date" },
|
|
299
|
+
reviewer: { type: "string", description: "Filter discussions within each MR to those started by this username" },
|
|
300
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
301
|
+
},
|
|
302
|
+
required: [],
|
|
303
|
+
},
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
name: "check_custom_emoji",
|
|
307
|
+
description: "Check whether a custom emoji exists in a GitLab group hierarchy. Walks from the given group path up to the root, returning the first match. Read-only — does not create the emoji. If the emoji is not found, the caller should fall back to a built-in emoji like :robot:.",
|
|
308
|
+
inputSchema: {
|
|
309
|
+
type: "object",
|
|
310
|
+
properties: {
|
|
311
|
+
groupPath: { type: "string", description: "Top-level GitLab group path (e.g. 'my-group')" },
|
|
312
|
+
emojiName: { type: "string", description: "Emoji name without colons (default: 'kiro')" },
|
|
313
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
314
|
+
},
|
|
315
|
+
required: ["groupPath"],
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
name: "award_emoji",
|
|
320
|
+
description: "Add an emoji reaction to a merge request or a specific note (comment) on a merge request. When noteId is provided, the emoji is added to that specific note. When omitted, the emoji is added to the MR itself.",
|
|
321
|
+
inputSchema: {
|
|
322
|
+
type: "object",
|
|
323
|
+
properties: {
|
|
324
|
+
project: { type: ["string", "number"], description: "GitLab project ID or path" },
|
|
325
|
+
mergeRequestIid: { type: "number", description: "Merge request internal ID" },
|
|
326
|
+
noteId: { type: "number", description: "Optional: specific note ID to react to. If omitted, reacts to the MR itself." },
|
|
327
|
+
emojiName: { type: "string", description: "Emoji name without colons (e.g. 'kiro', 'thumbsup')" },
|
|
328
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
329
|
+
},
|
|
330
|
+
required: ["project", "mergeRequestIid", "emojiName"],
|
|
331
|
+
},
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
name: "compile_checklist",
|
|
335
|
+
description: "Compile non-blocking review findings into a markdown checklist with GitLab file links. Reads the findings JSON, filters non-blocking comments, and produces a formatted markdown string ready to post as a single general draft note.",
|
|
336
|
+
inputSchema: {
|
|
337
|
+
type: "object",
|
|
338
|
+
properties: {
|
|
339
|
+
findingsPath: { type: "string", description: "Absolute path to the findings.json file" },
|
|
340
|
+
project: { type: "string", description: "GitLab project path (e.g. 'group/subgroup/repo')" },
|
|
341
|
+
headSha: { type: "string", description: "HEAD commit SHA for constructing file links" },
|
|
342
|
+
gitlabUrl: { type: "string", description: "GitLab instance URL (e.g. 'https://gitlab.com')" },
|
|
343
|
+
},
|
|
344
|
+
required: ["findingsPath", "project", "headSha", "gitlabUrl"],
|
|
345
|
+
},
|
|
346
|
+
},
|
|
347
|
+
];
|
|
348
|
+
//# sourceMappingURL=gitlab-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitlab-tools.js","sourceRoot":"","sources":["../../src/tools/gitlab-tools.ts"],"names":[],"mappings":"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"}
|