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.
Files changed (72) hide show
  1. package/README.md +58 -385
  2. package/dist/adapters/git/mapper.d.ts +1 -1
  3. package/dist/adapters/git/mapper.js +1 -1
  4. package/dist/adapters/github/mapper.d.ts +1 -1
  5. package/dist/adapters/github/mapper.js +1 -1
  6. package/dist/cli/init/generators.d.ts +6 -0
  7. package/dist/cli/init/generators.d.ts.map +1 -0
  8. package/dist/cli/init/generators.js +153 -0
  9. package/dist/cli/init/generators.js.map +1 -0
  10. package/dist/cli/init/index.d.ts +4 -0
  11. package/dist/cli/init/index.d.ts.map +1 -0
  12. package/dist/cli/init/index.js +254 -0
  13. package/dist/cli/init/index.js.map +1 -0
  14. package/dist/cli/init/setup-csv.d.ts +4 -0
  15. package/dist/cli/init/setup-csv.d.ts.map +1 -0
  16. package/dist/cli/init/setup-csv.js +52 -0
  17. package/dist/cli/init/setup-csv.js.map +1 -0
  18. package/dist/cli/init/setup-db.d.ts +4 -0
  19. package/dist/cli/init/setup-db.d.ts.map +1 -0
  20. package/dist/cli/init/setup-db.js +33 -0
  21. package/dist/cli/init/setup-db.js.map +1 -0
  22. package/dist/cli/init/setup-git.d.ts +4 -0
  23. package/dist/cli/init/setup-git.d.ts.map +1 -0
  24. package/dist/cli/init/setup-git.js +244 -0
  25. package/dist/cli/init/setup-git.js.map +1 -0
  26. package/dist/cli/init/setup-github.d.ts +4 -0
  27. package/dist/cli/init/setup-github.d.ts.map +1 -0
  28. package/dist/cli/init/setup-github.js +102 -0
  29. package/dist/cli/init/setup-github.js.map +1 -0
  30. package/dist/cli/init/setup-jira.d.ts +4 -0
  31. package/dist/cli/init/setup-jira.d.ts.map +1 -0
  32. package/dist/cli/init/setup-jira.js +124 -0
  33. package/dist/cli/init/setup-jira.js.map +1 -0
  34. package/dist/cli/init/types.d.ts +59 -0
  35. package/dist/cli/init/types.d.ts.map +1 -0
  36. package/dist/cli/init/types.js +31 -0
  37. package/dist/cli/init/types.js.map +1 -0
  38. package/dist/core/types/config.js +1 -1
  39. package/dist/core/types/config.js.map +1 -1
  40. package/dist/mcp/helpers.d.ts +24 -0
  41. package/dist/mcp/helpers.d.ts.map +1 -0
  42. package/dist/mcp/helpers.js +73 -0
  43. package/dist/mcp/helpers.js.map +1 -0
  44. package/dist/mcp/server.d.ts +2 -3
  45. package/dist/mcp/server.d.ts.map +1 -1
  46. package/dist/mcp/server.js +12 -1579
  47. package/dist/mcp/server.js.map +1 -1
  48. package/dist/mcp/tools/estimate.d.ts +3 -0
  49. package/dist/mcp/tools/estimate.d.ts.map +1 -0
  50. package/dist/mcp/tools/estimate.js +478 -0
  51. package/dist/mcp/tools/estimate.js.map +1 -0
  52. package/dist/mcp/tools/issue.d.ts +3 -0
  53. package/dist/mcp/tools/issue.d.ts.map +1 -0
  54. package/dist/mcp/tools/issue.js +468 -0
  55. package/dist/mcp/tools/issue.js.map +1 -0
  56. package/dist/mcp/tools/query.d.ts +3 -0
  57. package/dist/mcp/tools/query.d.ts.map +1 -0
  58. package/dist/mcp/tools/query.js +319 -0
  59. package/dist/mcp/tools/query.js.map +1 -0
  60. package/dist/mcp/tools/search.d.ts +3 -0
  61. package/dist/mcp/tools/search.d.ts.map +1 -0
  62. package/dist/mcp/tools/search.js +61 -0
  63. package/dist/mcp/tools/search.js.map +1 -0
  64. package/dist/mcp/tools/workspace.d.ts +3 -0
  65. package/dist/mcp/tools/workspace.d.ts.map +1 -0
  66. package/dist/mcp/tools/workspace.js +86 -0
  67. package/dist/mcp/tools/workspace.js.map +1 -0
  68. package/dist/mcp/types.d.ts +157 -0
  69. package/dist/mcp/types.d.ts.map +1 -0
  70. package/dist/mcp/types.js +2 -0
  71. package/dist/mcp/types.js.map +1 -0
  72. 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,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerQueryTools(server: McpServer): void;
3
+ //# sourceMappingURL=query.d.ts.map
@@ -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"}