argustack 0.1.6 → 0.1.8
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/README.md +58 -385
- package/dist/adapters/git/mapper.d.ts +1 -1
- package/dist/adapters/git/mapper.js +1 -1
- package/dist/adapters/github/mapper.d.ts +1 -1
- package/dist/adapters/github/mapper.js +1 -1
- package/dist/cli/init/generators.d.ts +6 -0
- package/dist/cli/init/generators.d.ts.map +1 -0
- package/dist/cli/init/generators.js +153 -0
- package/dist/cli/init/generators.js.map +1 -0
- package/dist/cli/init/index.d.ts +4 -0
- package/dist/cli/init/index.d.ts.map +1 -0
- package/dist/cli/init/index.js +254 -0
- package/dist/cli/init/index.js.map +1 -0
- package/dist/cli/init/setup-csv.d.ts +4 -0
- package/dist/cli/init/setup-csv.d.ts.map +1 -0
- package/dist/cli/init/setup-csv.js +52 -0
- package/dist/cli/init/setup-csv.js.map +1 -0
- package/dist/cli/init/setup-db.d.ts +4 -0
- package/dist/cli/init/setup-db.d.ts.map +1 -0
- package/dist/cli/init/setup-db.js +33 -0
- package/dist/cli/init/setup-db.js.map +1 -0
- package/dist/cli/init/setup-git.d.ts +4 -0
- package/dist/cli/init/setup-git.d.ts.map +1 -0
- package/dist/cli/init/setup-git.js +244 -0
- package/dist/cli/init/setup-git.js.map +1 -0
- package/dist/cli/init/setup-github.d.ts +4 -0
- package/dist/cli/init/setup-github.d.ts.map +1 -0
- package/dist/cli/init/setup-github.js +102 -0
- package/dist/cli/init/setup-github.js.map +1 -0
- package/dist/cli/init/setup-jira.d.ts +4 -0
- package/dist/cli/init/setup-jira.d.ts.map +1 -0
- package/dist/cli/init/setup-jira.js +124 -0
- package/dist/cli/init/setup-jira.js.map +1 -0
- package/dist/cli/init/types.d.ts +59 -0
- package/dist/cli/init/types.d.ts.map +1 -0
- package/dist/cli/init/types.js +31 -0
- package/dist/cli/init/types.js.map +1 -0
- package/dist/core/types/config.js +1 -1
- package/dist/core/types/config.js.map +1 -1
- package/dist/mcp/helpers.d.ts +24 -0
- package/dist/mcp/helpers.d.ts.map +1 -0
- package/dist/mcp/helpers.js +73 -0
- package/dist/mcp/helpers.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -3
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +12 -1579
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/estimate.d.ts +3 -0
- package/dist/mcp/tools/estimate.d.ts.map +1 -0
- package/dist/mcp/tools/estimate.js +478 -0
- package/dist/mcp/tools/estimate.js.map +1 -0
- package/dist/mcp/tools/issue.d.ts +3 -0
- package/dist/mcp/tools/issue.d.ts.map +1 -0
- package/dist/mcp/tools/issue.js +468 -0
- package/dist/mcp/tools/issue.js.map +1 -0
- package/dist/mcp/tools/query.d.ts +3 -0
- package/dist/mcp/tools/query.d.ts.map +1 -0
- package/dist/mcp/tools/query.js +319 -0
- package/dist/mcp/tools/query.js.map +1 -0
- package/dist/mcp/tools/search.d.ts +3 -0
- package/dist/mcp/tools/search.d.ts.map +1 -0
- package/dist/mcp/tools/search.js +61 -0
- package/dist/mcp/tools/search.js.map +1 -0
- package/dist/mcp/tools/workspace.d.ts +3 -0
- package/dist/mcp/tools/workspace.d.ts.map +1 -0
- package/dist/mcp/tools/workspace.js +86 -0
- package/dist/mcp/tools/workspace.js.map +1 -0
- package/dist/mcp/types.d.ts +157 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +2 -0
- package/dist/mcp/types.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,468 @@
|
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
|
+
import { loadWorkspace, createAdapters, textResponse, errorResponse, getErrorMessage, str, } from '../helpers.js';
|
|
3
|
+
export function registerIssueTools(server) {
|
|
4
|
+
server.registerTool('get_issue', {
|
|
5
|
+
description: 'Get full details of a specific issue by key, including description, comments, changelogs, and all custom fields.',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
issue_key: z.string().describe('Issue key (e.g. "PROJ-123")'),
|
|
8
|
+
},
|
|
9
|
+
}, async ({ issue_key: issueKey }) => {
|
|
10
|
+
const ws = loadWorkspace();
|
|
11
|
+
if (!ws.ok) {
|
|
12
|
+
return errorResponse(`Workspace not found: ${ws.reason}`);
|
|
13
|
+
}
|
|
14
|
+
const { storage } = await createAdapters(ws.root);
|
|
15
|
+
try {
|
|
16
|
+
const issueResult = await storage.query(`SELECT * FROM issues WHERE issue_key = $1`, [issueKey.toUpperCase()]);
|
|
17
|
+
if (issueResult.rows.length === 0) {
|
|
18
|
+
await storage.close();
|
|
19
|
+
return errorResponse(`Issue ${issueKey} not found in local database.`);
|
|
20
|
+
}
|
|
21
|
+
const issue = issueResult.rows[0];
|
|
22
|
+
const commentsResult = await storage.query(`SELECT author, body, created FROM issue_comments WHERE issue_key = $1 ORDER BY created`, [issueKey.toUpperCase()]);
|
|
23
|
+
const changelogsResult = await storage.query(`SELECT author, field, from_value, to_value, changed_at
|
|
24
|
+
FROM issue_changelogs WHERE issue_key = $1 ORDER BY changed_at DESC LIMIT 20`, [issueKey.toUpperCase()]);
|
|
25
|
+
await storage.close();
|
|
26
|
+
const sections = [];
|
|
27
|
+
sections.push(`# ${str(issue.issue_key)}: ${str(issue.summary)}`);
|
|
28
|
+
sections.push('');
|
|
29
|
+
sections.push(`Type: ${str(issue.issue_type) || 'N/A'} | Status: ${str(issue.status) || 'N/A'} | Priority: ${str(issue.priority) || 'N/A'}`);
|
|
30
|
+
sections.push(`Assignee: ${str(issue.assignee) || 'Unassigned'} | Reporter: ${str(issue.reporter) || 'N/A'}`);
|
|
31
|
+
sections.push(`Created: ${str(issue.created) || 'N/A'} | Updated: ${str(issue.updated) || 'N/A'}`);
|
|
32
|
+
if (Array.isArray(issue.labels) && issue.labels.length > 0) {
|
|
33
|
+
sections.push(`Labels: ${issue.labels.join(', ')}`);
|
|
34
|
+
}
|
|
35
|
+
if (Array.isArray(issue.components) && issue.components.length > 0) {
|
|
36
|
+
sections.push(`Components: ${issue.components.join(', ')}`);
|
|
37
|
+
}
|
|
38
|
+
if (issue.parent_key) {
|
|
39
|
+
sections.push(`Parent: ${issue.parent_key}`);
|
|
40
|
+
}
|
|
41
|
+
sections.push('');
|
|
42
|
+
sections.push('## Description');
|
|
43
|
+
sections.push(str(issue.description) || '(no description)');
|
|
44
|
+
if (issue.custom_fields && Object.keys(issue.custom_fields).length > 0) {
|
|
45
|
+
sections.push('');
|
|
46
|
+
sections.push('## Custom Fields');
|
|
47
|
+
for (const [key, value] of Object.entries(issue.custom_fields)) {
|
|
48
|
+
if (value !== null && value !== undefined) {
|
|
49
|
+
sections.push(` ${key}: ${typeof value === 'object' ? JSON.stringify(value) : str(value)}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (commentsResult.rows.length > 0) {
|
|
54
|
+
sections.push('');
|
|
55
|
+
sections.push(`## Comments (${String(commentsResult.rows.length)})`);
|
|
56
|
+
for (const rawComment of commentsResult.rows) {
|
|
57
|
+
const c = rawComment;
|
|
58
|
+
sections.push(`--- ${str(c.author)} (${str(c.created)}) ---`);
|
|
59
|
+
sections.push(str(c.body) || '(empty)');
|
|
60
|
+
sections.push('');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (changelogsResult.rows.length > 0) {
|
|
64
|
+
sections.push('');
|
|
65
|
+
sections.push(`## Recent Changes (${String(changelogsResult.rows.length)})`);
|
|
66
|
+
for (const rawChangelog of changelogsResult.rows) {
|
|
67
|
+
const ch = rawChangelog;
|
|
68
|
+
sections.push(` ${str(ch.changed_at)}: ${str(ch.author)} changed ${str(ch.field)}: "${str(ch.from_value)}" → "${str(ch.to_value)}"`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return textResponse(sections.join('\n'));
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
return errorResponse(`Failed to get issue: ${getErrorMessage(err)}`);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
server.registerTool('issue_stats', {
|
|
78
|
+
description: 'Get aggregate statistics about issues in the database — counts by status, type, project, assignee. Useful for project health overview.',
|
|
79
|
+
inputSchema: {
|
|
80
|
+
project: z.string().optional().describe('Filter stats by project key'),
|
|
81
|
+
},
|
|
82
|
+
}, async ({ project }) => {
|
|
83
|
+
const ws = loadWorkspace();
|
|
84
|
+
if (!ws.ok) {
|
|
85
|
+
return errorResponse(`Workspace not found: ${ws.reason}`);
|
|
86
|
+
}
|
|
87
|
+
const { storage } = await createAdapters(ws.root);
|
|
88
|
+
try {
|
|
89
|
+
const filterClause = project ? `WHERE project_key = $1` : '';
|
|
90
|
+
const filterParams = project ? [project.toUpperCase()] : [];
|
|
91
|
+
const [total, byStatus, byType, byProject, byAssignee] = await Promise.all([
|
|
92
|
+
storage.query(`SELECT COUNT(*) as count FROM issues ${filterClause}`, filterParams),
|
|
93
|
+
storage.query(`SELECT status, COUNT(*) as count FROM issues ${filterClause} GROUP BY status ORDER BY count DESC`, filterParams),
|
|
94
|
+
storage.query(`SELECT issue_type, COUNT(*) as count FROM issues ${filterClause} GROUP BY issue_type ORDER BY count DESC`, filterParams),
|
|
95
|
+
storage.query(`SELECT project_key, COUNT(*) as count FROM issues ${filterClause} GROUP BY project_key ORDER BY count DESC`, filterParams),
|
|
96
|
+
storage.query(`SELECT assignee, COUNT(*) as count FROM issues ${filterClause} GROUP BY assignee ORDER BY count DESC LIMIT 15`, filterParams),
|
|
97
|
+
]);
|
|
98
|
+
await storage.close();
|
|
99
|
+
const sections = [];
|
|
100
|
+
const totalRow = total.rows[0];
|
|
101
|
+
sections.push(`# Issue Statistics${project ? ` (${project})` : ''}`);
|
|
102
|
+
sections.push(`Total issues: ${str(totalRow?.count)}`);
|
|
103
|
+
sections.push('');
|
|
104
|
+
sections.push('## By Status');
|
|
105
|
+
for (const rawRow of byStatus.rows) {
|
|
106
|
+
const r = rawRow;
|
|
107
|
+
sections.push(` ${str(r.status) || 'null'}: ${str(r.count)}`);
|
|
108
|
+
}
|
|
109
|
+
sections.push('');
|
|
110
|
+
sections.push('## By Type');
|
|
111
|
+
for (const rawRow of byType.rows) {
|
|
112
|
+
const r = rawRow;
|
|
113
|
+
sections.push(` ${str(r.issue_type) || 'null'}: ${str(r.count)}`);
|
|
114
|
+
}
|
|
115
|
+
if (!project) {
|
|
116
|
+
sections.push('');
|
|
117
|
+
sections.push('## By Project');
|
|
118
|
+
for (const rawRow of byProject.rows) {
|
|
119
|
+
const r = rawRow;
|
|
120
|
+
sections.push(` ${str(r.project_key)}: ${str(r.count)}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
sections.push('');
|
|
124
|
+
sections.push('## Top Assignees');
|
|
125
|
+
for (const rawRow of byAssignee.rows) {
|
|
126
|
+
const r = rawRow;
|
|
127
|
+
sections.push(` ${str(r.assignee) || 'Unassigned'}: ${str(r.count)}`);
|
|
128
|
+
}
|
|
129
|
+
return textResponse(sections.join('\n'));
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
return errorResponse(`Stats query failed: ${getErrorMessage(err)}`);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
server.registerTool('issue_commits', {
|
|
136
|
+
description: 'Cross-reference: find all Git commits that mention a Jira issue key. Shows what code was actually changed for a ticket.',
|
|
137
|
+
inputSchema: {
|
|
138
|
+
issue_key: z.string().describe('Issue key (e.g. "PROJ-123")'),
|
|
139
|
+
repo_path: z.string().optional().describe('Filter by repository path (substring match)'),
|
|
140
|
+
},
|
|
141
|
+
}, async ({ issue_key: issueKey, repo_path: repoPath }) => {
|
|
142
|
+
const ws = loadWorkspace();
|
|
143
|
+
if (!ws.ok) {
|
|
144
|
+
return errorResponse(`Workspace not found: ${ws.reason}`);
|
|
145
|
+
}
|
|
146
|
+
const { storage } = await createAdapters(ws.root);
|
|
147
|
+
try {
|
|
148
|
+
const repoFilter = repoPath ? `AND c.repo_path ILIKE $2` : '';
|
|
149
|
+
const commitsParams = [issueKey.toUpperCase()];
|
|
150
|
+
if (repoPath) {
|
|
151
|
+
commitsParams.push(`%${repoPath}%`);
|
|
152
|
+
}
|
|
153
|
+
const commitsResult = await storage.query(`SELECT c.hash, c.message, c.author, c.committed_at, c.repo_path
|
|
154
|
+
FROM commits c
|
|
155
|
+
JOIN commit_issue_refs r ON c.hash = r.commit_hash
|
|
156
|
+
WHERE r.issue_key = $1 ${repoFilter}
|
|
157
|
+
ORDER BY c.committed_at DESC`, commitsParams);
|
|
158
|
+
if (commitsResult.rows.length === 0) {
|
|
159
|
+
await storage.close();
|
|
160
|
+
return textResponse(`No commits found mentioning ${issueKey}. Make sure you've run "argustack sync git".`);
|
|
161
|
+
}
|
|
162
|
+
const hashes = commitsResult.rows.map((r) => r.hash).filter(Boolean);
|
|
163
|
+
const hashPlaceholders = hashes.map((_, i) => `$${String(i + 1)}`).join(',');
|
|
164
|
+
const filesResult = await storage.query(`SELECT commit_hash, file_path, status, additions, deletions
|
|
165
|
+
FROM commit_files WHERE commit_hash IN (${hashPlaceholders})`, hashes);
|
|
166
|
+
await storage.close();
|
|
167
|
+
const filesByCommit = new Map();
|
|
168
|
+
for (const f of filesResult.rows) {
|
|
169
|
+
const arr = filesByCommit.get(f.commit_hash) ?? [];
|
|
170
|
+
arr.push(f);
|
|
171
|
+
filesByCommit.set(f.commit_hash, arr);
|
|
172
|
+
}
|
|
173
|
+
const sections = [];
|
|
174
|
+
sections.push(`# Commits for ${issueKey} (${String(commitsResult.rows.length)})`);
|
|
175
|
+
sections.push('');
|
|
176
|
+
for (const rawRow of commitsResult.rows) {
|
|
177
|
+
const row = rawRow;
|
|
178
|
+
const shortHash = (row.hash ?? '').substring(0, 7);
|
|
179
|
+
sections.push(`## ${shortHash} — ${str(row.author)} (${str(row.committed_at).substring(0, 10)})`);
|
|
180
|
+
sections.push(str(row.message));
|
|
181
|
+
const files = filesByCommit.get(row.hash ?? '') ?? [];
|
|
182
|
+
if (files.length > 0) {
|
|
183
|
+
sections.push('Files:');
|
|
184
|
+
for (const file of files) {
|
|
185
|
+
sections.push(` ${str(file.status)} ${str(file.file_path)} (+${str(file.additions)} -${str(file.deletions)})`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
sections.push('');
|
|
189
|
+
}
|
|
190
|
+
return textResponse(sections.join('\n'));
|
|
191
|
+
}
|
|
192
|
+
catch (err) {
|
|
193
|
+
return errorResponse(`Query failed: ${getErrorMessage(err)}`);
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
server.registerTool('issue_prs', {
|
|
197
|
+
description: 'Cross-reference: find all GitHub pull requests that mention a Jira issue key. Shows which PRs implemented a ticket.',
|
|
198
|
+
inputSchema: {
|
|
199
|
+
issue_key: z.string().describe('Issue key (e.g. "PROJ-123")'),
|
|
200
|
+
},
|
|
201
|
+
}, async ({ issue_key: issueKey }) => {
|
|
202
|
+
const ws = loadWorkspace();
|
|
203
|
+
if (!ws.ok) {
|
|
204
|
+
return errorResponse(`Workspace not found: ${ws.reason}`);
|
|
205
|
+
}
|
|
206
|
+
const { storage } = await createAdapters(ws.root);
|
|
207
|
+
try {
|
|
208
|
+
const prsResult = await storage.query(`SELECT p.number, p.title, p.state, p.author, p.created_at, p.merged_at,
|
|
209
|
+
p.additions, p.deletions, p.base_ref, p.head_ref, p.repo_full_name
|
|
210
|
+
FROM pull_requests p
|
|
211
|
+
JOIN pr_issue_refs r ON p.repo_full_name = r.repo_full_name AND p.number = r.pr_number
|
|
212
|
+
WHERE r.issue_key = $1
|
|
213
|
+
ORDER BY p.created_at DESC`, [issueKey.toUpperCase()]);
|
|
214
|
+
if (prsResult.rows.length === 0) {
|
|
215
|
+
await storage.close();
|
|
216
|
+
return textResponse(`No PRs found mentioning ${issueKey}. Make sure GitHub sync is configured.`);
|
|
217
|
+
}
|
|
218
|
+
const prNumbers = prsResult.rows.map((r) => r.number);
|
|
219
|
+
const repoFullName = prsResult.rows[0].repo_full_name;
|
|
220
|
+
const reviewPlaceholders = prNumbers.map((_, i) => `$${String(i + 2)}`).join(',');
|
|
221
|
+
const reviewsResult = await storage.query(`SELECT pr_number, reviewer, state, submitted_at FROM pr_reviews
|
|
222
|
+
WHERE repo_full_name = $1 AND pr_number IN (${reviewPlaceholders})
|
|
223
|
+
ORDER BY submitted_at`, [repoFullName, ...prNumbers]);
|
|
224
|
+
await storage.close();
|
|
225
|
+
const reviewsByPr = new Map();
|
|
226
|
+
for (const r of reviewsResult.rows) {
|
|
227
|
+
const arr = reviewsByPr.get(r.pr_number) ?? [];
|
|
228
|
+
arr.push(r);
|
|
229
|
+
reviewsByPr.set(r.pr_number, arr);
|
|
230
|
+
}
|
|
231
|
+
const sections = [];
|
|
232
|
+
sections.push(`# Pull Requests for ${issueKey} (${String(prsResult.rows.length)})`);
|
|
233
|
+
sections.push('');
|
|
234
|
+
for (const rawRow of prsResult.rows) {
|
|
235
|
+
const pr = rawRow;
|
|
236
|
+
sections.push(`## #${str(pr.number)} — ${str(pr.title)}`);
|
|
237
|
+
sections.push(`State: ${str(pr.state)} | Author: ${str(pr.author)} | ${str(pr.base_ref)} ← ${str(pr.head_ref)}`);
|
|
238
|
+
sections.push(`+${str(pr.additions)} -${str(pr.deletions)} | Created: ${str(pr.created_at ?? '').substring(0, 10)}${pr.merged_at ? ` | Merged: ${str(pr.merged_at).substring(0, 10)}` : ''}`);
|
|
239
|
+
const reviews = reviewsByPr.get(pr.number ?? 0) ?? [];
|
|
240
|
+
if (reviews.length > 0) {
|
|
241
|
+
sections.push('Reviews:');
|
|
242
|
+
for (const r of reviews) {
|
|
243
|
+
sections.push(` ${str(r.reviewer)}: ${str(r.state)} (${str(r.submitted_at ?? '').substring(0, 10)})`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
sections.push('');
|
|
247
|
+
}
|
|
248
|
+
return textResponse(sections.join('\n'));
|
|
249
|
+
}
|
|
250
|
+
catch (err) {
|
|
251
|
+
return errorResponse(`Query failed: ${getErrorMessage(err)}`);
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
server.registerTool('issue_timeline', {
|
|
255
|
+
description: 'Full cross-source timeline for a Jira issue: changelog events, Git commits, GitHub PRs with reviews — all in chronological order. Combines get_issue + issue_commits + issue_prs into a single view.',
|
|
256
|
+
inputSchema: {
|
|
257
|
+
issue_key: z.string().describe('Issue key (e.g. "PROJ-123")'),
|
|
258
|
+
},
|
|
259
|
+
}, async ({ issue_key: issueKey }) => {
|
|
260
|
+
const ws = loadWorkspace();
|
|
261
|
+
if (!ws.ok) {
|
|
262
|
+
return errorResponse(`Workspace not found: ${ws.reason}`);
|
|
263
|
+
}
|
|
264
|
+
const { storage } = await createAdapters(ws.root);
|
|
265
|
+
const key = issueKey.toUpperCase();
|
|
266
|
+
try {
|
|
267
|
+
const [issueResult, changelogsResult, commitsResult, prsResult, commitFilesResult] = await Promise.all([
|
|
268
|
+
storage.query(`SELECT issue_key, summary, status, issue_type, assignee, reporter, created, updated, resolved FROM issues WHERE issue_key = $1`, [key]),
|
|
269
|
+
storage.query(`SELECT author, field, from_value, to_value, changed_at FROM issue_changelogs WHERE issue_key = $1 ORDER BY changed_at`, [key]),
|
|
270
|
+
storage.query(`SELECT c.hash, c.message, c.author, c.email, c.committed_at
|
|
271
|
+
FROM commits c JOIN commit_issue_refs r ON c.hash = r.commit_hash
|
|
272
|
+
WHERE r.issue_key = $1 ORDER BY c.committed_at`, [key]),
|
|
273
|
+
storage.query(`SELECT p.number, p.title, p.state, p.author, p.created_at, p.merged_at, p.base_ref,
|
|
274
|
+
p.additions, p.deletions, p.repo_full_name
|
|
275
|
+
FROM pull_requests p JOIN pr_issue_refs r ON p.repo_full_name = r.repo_full_name AND p.number = r.pr_number
|
|
276
|
+
WHERE r.issue_key = $1 ORDER BY p.created_at`, [key]),
|
|
277
|
+
storage.query(`SELECT cf.commit_hash, cf.file_path, cf.status, cf.additions, cf.deletions
|
|
278
|
+
FROM commit_files cf JOIN commit_issue_refs r ON cf.commit_hash = r.commit_hash
|
|
279
|
+
WHERE r.issue_key = $1`, [key]),
|
|
280
|
+
]);
|
|
281
|
+
if (issueResult.rows.length === 0) {
|
|
282
|
+
await storage.close();
|
|
283
|
+
return textResponse(`Issue ${key} not found.`);
|
|
284
|
+
}
|
|
285
|
+
const issue = issueResult.rows[0];
|
|
286
|
+
const prRows = prsResult.rows;
|
|
287
|
+
const reviewsByPr = new Map();
|
|
288
|
+
if (prRows.length > 0) {
|
|
289
|
+
const prNumbers = prRows.map((pr) => pr.number);
|
|
290
|
+
const repoFullName = prRows[0]?.repo_full_name;
|
|
291
|
+
const reviewPlaceholders = prNumbers.map((_, i) => `$${String(i + 2)}`).join(',');
|
|
292
|
+
const reviewsResult = await storage.query(`SELECT pr_number, reviewer, state, submitted_at FROM pr_reviews
|
|
293
|
+
WHERE repo_full_name = $1 AND pr_number IN (${reviewPlaceholders})
|
|
294
|
+
ORDER BY submitted_at`, [repoFullName, ...prNumbers]);
|
|
295
|
+
for (const r of reviewsResult.rows) {
|
|
296
|
+
const arr = reviewsByPr.get(r.pr_number) ?? [];
|
|
297
|
+
arr.push(r);
|
|
298
|
+
reviewsByPr.set(r.pr_number, arr);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
await storage.close();
|
|
302
|
+
const filesByCommit = new Map();
|
|
303
|
+
for (const f of commitFilesResult.rows) {
|
|
304
|
+
const arr = filesByCommit.get(f.commit_hash) ?? [];
|
|
305
|
+
arr.push(f);
|
|
306
|
+
filesByCommit.set(f.commit_hash, arr);
|
|
307
|
+
}
|
|
308
|
+
const events = [];
|
|
309
|
+
if (issue.created) {
|
|
310
|
+
events.push({ date: str(issue.created), type: 'created', text: 'Issue created' });
|
|
311
|
+
}
|
|
312
|
+
for (const raw of changelogsResult.rows) {
|
|
313
|
+
const ch = raw;
|
|
314
|
+
if (ch.changed_at) {
|
|
315
|
+
events.push({
|
|
316
|
+
date: str(ch.changed_at),
|
|
317
|
+
type: 'changelog',
|
|
318
|
+
text: `${str(ch.author)} changed ${str(ch.field)}: "${str(ch.from_value)}" → "${str(ch.to_value)}"`,
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
for (const raw of commitsResult.rows) {
|
|
323
|
+
const c = raw;
|
|
324
|
+
if (c.committed_at) {
|
|
325
|
+
const firstLine = (c.message ?? '').split('\n')[0];
|
|
326
|
+
events.push({
|
|
327
|
+
date: str(c.committed_at),
|
|
328
|
+
type: 'commit',
|
|
329
|
+
text: `Commit ${c.hash.substring(0, 7)} — "${firstLine}" (${str(c.author)})`,
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
for (const pr of prRows) {
|
|
334
|
+
if (pr.created_at) {
|
|
335
|
+
events.push({
|
|
336
|
+
date: str(pr.created_at),
|
|
337
|
+
type: 'pr_opened',
|
|
338
|
+
text: `PR #${String(pr.number)} opened — "${str(pr.title)}" (${str(pr.author)})`,
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
const reviews = reviewsByPr.get(pr.number) ?? [];
|
|
342
|
+
for (const r of reviews) {
|
|
343
|
+
if (r.submitted_at) {
|
|
344
|
+
events.push({
|
|
345
|
+
date: str(r.submitted_at),
|
|
346
|
+
type: 'pr_reviewed',
|
|
347
|
+
text: `PR #${String(pr.number)} reviewed — ${str(r.state)} (${str(r.reviewer)})`,
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
if (pr.merged_at) {
|
|
352
|
+
events.push({
|
|
353
|
+
date: str(pr.merged_at),
|
|
354
|
+
type: 'pr_merged',
|
|
355
|
+
text: `PR #${String(pr.number)} merged into ${str(pr.base_ref)}`,
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
events.sort((a, b) => a.date.localeCompare(b.date));
|
|
360
|
+
const sections = [];
|
|
361
|
+
sections.push(`=== ISSUE: ${key} ===`);
|
|
362
|
+
sections.push(`Summary: ${str(issue.summary)}`);
|
|
363
|
+
sections.push(`Status: ${str(issue.status)} | Type: ${str(issue.issue_type)} | Assignee: ${str(issue.assignee)}`);
|
|
364
|
+
sections.push(`Created: ${str(issue.created ?? '').substring(0, 10)} | Resolved: ${str(issue.resolved ?? '').substring(0, 10) || 'n/a'}`);
|
|
365
|
+
sections.push('');
|
|
366
|
+
sections.push(`--- TIMELINE (${String(events.length)} events) ---`);
|
|
367
|
+
for (const ev of events) {
|
|
368
|
+
sections.push(`[${ev.date.substring(0, 10)}] ${ev.text}`);
|
|
369
|
+
}
|
|
370
|
+
sections.push('');
|
|
371
|
+
const commitRows = commitsResult.rows;
|
|
372
|
+
if (commitRows.length > 0) {
|
|
373
|
+
sections.push(`--- COMMITS (${String(commitRows.length)}) ---`);
|
|
374
|
+
for (const c of commitRows) {
|
|
375
|
+
const firstLine = (c.message ?? '').split('\n')[0];
|
|
376
|
+
const files = filesByCommit.get(c.hash) ?? [];
|
|
377
|
+
const adds = files.reduce((s, f) => s + (f.additions ?? 0), 0);
|
|
378
|
+
const dels = files.reduce((s, f) => s + (f.deletions ?? 0), 0);
|
|
379
|
+
sections.push(`${c.hash.substring(0, 7)} — ${firstLine} (+${String(adds)}/-${String(dels)}, ${String(files.length)} files)`);
|
|
380
|
+
}
|
|
381
|
+
sections.push('');
|
|
382
|
+
}
|
|
383
|
+
if (prRows.length > 0) {
|
|
384
|
+
sections.push(`--- PULL REQUESTS (${String(prRows.length)}) ---`);
|
|
385
|
+
for (const pr of prRows) {
|
|
386
|
+
const reviews = reviewsByPr.get(pr.number) ?? [];
|
|
387
|
+
const approvals = reviews.filter((r) => r.state === 'APPROVED').map((r) => str(r.reviewer));
|
|
388
|
+
const reviewInfo = approvals.length > 0 ? ` (${approvals.join(', ')} approved)` : '';
|
|
389
|
+
sections.push(`#${String(pr.number)} — ${str(pr.title)} [${str(pr.state)}]${reviewInfo}`);
|
|
390
|
+
}
|
|
391
|
+
sections.push('');
|
|
392
|
+
}
|
|
393
|
+
return textResponse(sections.join('\n'));
|
|
394
|
+
}
|
|
395
|
+
catch (err) {
|
|
396
|
+
return errorResponse(`Query failed: ${getErrorMessage(err)}`);
|
|
397
|
+
}
|
|
398
|
+
});
|
|
399
|
+
server.registerTool('commit_stats', {
|
|
400
|
+
description: 'Aggregate statistics about Git commits — total count, top authors, most changed files, commits per day.',
|
|
401
|
+
inputSchema: {
|
|
402
|
+
since: z.string().optional().describe('Stats from this date (YYYY-MM-DD)'),
|
|
403
|
+
author: z.string().optional().describe('Filter stats by author name'),
|
|
404
|
+
repo_path: z.string().optional().describe('Filter by repository path (substring match)'),
|
|
405
|
+
},
|
|
406
|
+
}, async ({ since, author, repo_path: repoPath }) => {
|
|
407
|
+
const ws = loadWorkspace();
|
|
408
|
+
if (!ws.ok) {
|
|
409
|
+
return errorResponse(`Workspace not found: ${ws.reason}`);
|
|
410
|
+
}
|
|
411
|
+
const { storage } = await createAdapters(ws.root);
|
|
412
|
+
try {
|
|
413
|
+
const conditions = [];
|
|
414
|
+
const params = [];
|
|
415
|
+
let paramIdx = 1;
|
|
416
|
+
if (since) {
|
|
417
|
+
conditions.push(`committed_at >= $${String(paramIdx)}`);
|
|
418
|
+
params.push(since);
|
|
419
|
+
paramIdx++;
|
|
420
|
+
}
|
|
421
|
+
if (author) {
|
|
422
|
+
conditions.push(`author ILIKE $${String(paramIdx)}`);
|
|
423
|
+
params.push(`%${author}%`);
|
|
424
|
+
paramIdx++;
|
|
425
|
+
}
|
|
426
|
+
if (repoPath) {
|
|
427
|
+
conditions.push(`repo_path ILIKE $${String(paramIdx)}`);
|
|
428
|
+
params.push(`%${repoPath}%`);
|
|
429
|
+
paramIdx++;
|
|
430
|
+
}
|
|
431
|
+
const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
432
|
+
const [total, byAuthor, hotFiles, issueRefCount] = await Promise.all([
|
|
433
|
+
storage.query(`SELECT COUNT(*) as count FROM commits ${where}`, params),
|
|
434
|
+
storage.query(`SELECT author, COUNT(*) as count FROM commits ${where} GROUP BY author ORDER BY count DESC LIMIT 15`, params),
|
|
435
|
+
storage.query(`SELECT cf.file_path, COUNT(*) as changes
|
|
436
|
+
FROM commit_files cf
|
|
437
|
+
JOIN commits c ON cf.commit_hash = c.hash
|
|
438
|
+
${where ? where.replace(/committed_at/g, 'c.committed_at').replace(/author/g, 'c.author').replace(/repo_path/g, 'c.repo_path') : ''}
|
|
439
|
+
GROUP BY cf.file_path ORDER BY changes DESC LIMIT 15`, params),
|
|
440
|
+
storage.query(`SELECT COUNT(DISTINCT issue_key) as count FROM commit_issue_refs`, []),
|
|
441
|
+
]);
|
|
442
|
+
await storage.close();
|
|
443
|
+
const sections = [];
|
|
444
|
+
const totalRow = total.rows[0];
|
|
445
|
+
const refsRow = issueRefCount.rows[0];
|
|
446
|
+
sections.push(`# Git Statistics${since ? ` (since ${since})` : ''}${author ? ` (author: ${author})` : ''}`);
|
|
447
|
+
sections.push(`Total commits: ${str(totalRow?.count)}`);
|
|
448
|
+
sections.push(`Linked issue keys: ${str(refsRow?.count)}`);
|
|
449
|
+
sections.push('');
|
|
450
|
+
sections.push('## Top Authors');
|
|
451
|
+
for (const rawRow of byAuthor.rows) {
|
|
452
|
+
const r = rawRow;
|
|
453
|
+
sections.push(` ${str(r.author) || 'unknown'}: ${str(r.count)}`);
|
|
454
|
+
}
|
|
455
|
+
sections.push('');
|
|
456
|
+
sections.push('## Most Changed Files');
|
|
457
|
+
for (const rawRow of hotFiles.rows) {
|
|
458
|
+
const r = rawRow;
|
|
459
|
+
sections.push(` ${str(r.file_path)}: ${str(r.changes)} changes`);
|
|
460
|
+
}
|
|
461
|
+
return textResponse(sections.join('\n'));
|
|
462
|
+
}
|
|
463
|
+
catch (err) {
|
|
464
|
+
return errorResponse(`Stats failed: ${getErrorMessage(err)}`);
|
|
465
|
+
}
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
//# sourceMappingURL=issue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue.js","sourceRoot":"","sources":["../../../src/mcp/tools/issue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoX1D"}
|