vibe-coding-mcp 2.6.0 → 2.12.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/README.md +122 -4
- package/dist/__tests__/exportSession.test.d.ts +2 -0
- package/dist/__tests__/exportSession.test.d.ts.map +1 -0
- package/dist/__tests__/exportSession.test.js +180 -0
- package/dist/__tests__/exportSession.test.js.map +1 -0
- package/dist/__tests__/git.test.d.ts +2 -0
- package/dist/__tests__/git.test.d.ts.map +1 -0
- package/dist/__tests__/git.test.js +282 -0
- package/dist/__tests__/git.test.js.map +1 -0
- package/dist/__tests__/projectProfile.test.d.ts +2 -0
- package/dist/__tests__/projectProfile.test.d.ts.map +1 -0
- package/dist/__tests__/projectProfile.test.js +216 -0
- package/dist/__tests__/projectProfile.test.js.map +1 -0
- package/dist/core/profileStorage.d.ts +117 -0
- package/dist/core/profileStorage.d.ts.map +1 -0
- package/dist/core/profileStorage.js +251 -0
- package/dist/core/profileStorage.js.map +1 -0
- package/dist/core/schemas.d.ts +576 -4
- package/dist/core/schemas.d.ts.map +1 -1
- package/dist/core/schemas.js +185 -0
- package/dist/core/schemas.js.map +1 -1
- package/dist/stdio.js +44 -2
- package/dist/stdio.js.map +1 -1
- package/dist/tools/autoTag.d.ts +145 -0
- package/dist/tools/autoTag.d.ts.map +1 -0
- package/dist/tools/autoTag.js +475 -0
- package/dist/tools/autoTag.js.map +1 -0
- package/dist/tools/batch.d.ts +119 -0
- package/dist/tools/batch.d.ts.map +1 -0
- package/dist/tools/batch.js +459 -0
- package/dist/tools/batch.js.map +1 -0
- package/dist/tools/exportSession.d.ts +79 -0
- package/dist/tools/exportSession.d.ts.map +1 -0
- package/dist/tools/exportSession.js +434 -0
- package/dist/tools/exportSession.js.map +1 -0
- package/dist/tools/git.d.ts +226 -0
- package/dist/tools/git.d.ts.map +1 -0
- package/dist/tools/git.js +493 -0
- package/dist/tools/git.js.map +1 -0
- package/dist/tools/projectProfile.d.ts +230 -0
- package/dist/tools/projectProfile.d.ts.map +1 -0
- package/dist/tools/projectProfile.js +367 -0
- package/dist/tools/projectProfile.js.map +1 -0
- package/dist/tools/sessionStats.d.ts +129 -0
- package/dist/tools/sessionStats.d.ts.map +1 -0
- package/dist/tools/sessionStats.js +554 -0
- package/dist/tools/sessionStats.js.map +1 -0
- package/dist/tools/template.d.ts +127 -0
- package/dist/tools/template.d.ts.map +1 -0
- package/dist/tools/template.js +617 -0
- package/dist/tools/template.js.map +1 -0
- package/dist/utils/gitExecutor.d.ts +34 -0
- package/dist/utils/gitExecutor.d.ts.map +1 -0
- package/dist/utils/gitExecutor.js +95 -0
- package/dist/utils/gitExecutor.js.map +1 -0
- package/dist/utils/gitParsers.d.ts +90 -0
- package/dist/utils/gitParsers.d.ts.map +1 -0
- package/dist/utils/gitParsers.js +286 -0
- package/dist/utils/gitParsers.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Integration Tool (muse_git)
|
|
3
|
+
* Provides git repository context for vibe coding sessions
|
|
4
|
+
*/
|
|
5
|
+
import { ToolError } from '../core/errors.js';
|
|
6
|
+
import { createToolLogger } from '../core/logger.js';
|
|
7
|
+
import { execGit, getRemoteUrl, validateRepoPath, } from '../utils/gitExecutor.js';
|
|
8
|
+
import { parseStatusPorcelainV2, parseLogOutput, parseDiffStat, parseBranchOutput, parseStashList, detectLanguage, inferCategory, calculateCommitImportance, } from '../utils/gitParsers.js';
|
|
9
|
+
import { getSession, updateSession } from '../core/sessionStorage.js';
|
|
10
|
+
const logger = createToolLogger('git');
|
|
11
|
+
// Action implementations
|
|
12
|
+
async function getStatus(repoPath, includeUntracked) {
|
|
13
|
+
const args = ['status', '--porcelain=v2', '--branch'];
|
|
14
|
+
if (includeUntracked) {
|
|
15
|
+
args.push('--untracked-files=all');
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
args.push('--untracked-files=no');
|
|
19
|
+
}
|
|
20
|
+
const result = await execGit(args, { cwd: repoPath });
|
|
21
|
+
if (result.exitCode !== 0) {
|
|
22
|
+
throw new ToolError(`Git status failed: ${result.stderr}`, 'INTERNAL_ERROR');
|
|
23
|
+
}
|
|
24
|
+
const parsed = parseStatusPorcelainV2(result.stdout);
|
|
25
|
+
return {
|
|
26
|
+
branch: parsed.branch,
|
|
27
|
+
upstream: parsed.upstream,
|
|
28
|
+
ahead: parsed.ahead,
|
|
29
|
+
behind: parsed.behind,
|
|
30
|
+
staged: parsed.staged,
|
|
31
|
+
unstaged: parsed.unstaged,
|
|
32
|
+
untracked: parsed.untracked,
|
|
33
|
+
conflicts: parsed.conflicts,
|
|
34
|
+
isClean: parsed.staged.length === 0 &&
|
|
35
|
+
parsed.unstaged.length === 0 &&
|
|
36
|
+
parsed.conflicts.length === 0,
|
|
37
|
+
isDetached: parsed.branch === '(detached)',
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
async function getLog(repoPath, options) {
|
|
41
|
+
const { limit = 20, author, since, until, grep, oneline = false, path } = options;
|
|
42
|
+
const format = oneline ? '%H|%h|%an|%ae|%aI|%s' : '%H|%h|%an|%ae|%aI|%s|%b|END_COMMIT';
|
|
43
|
+
const args = ['log', `--format=${format}`, `-n${limit}`, '--no-merges'];
|
|
44
|
+
if (author)
|
|
45
|
+
args.push(`--author=${author}`);
|
|
46
|
+
if (since)
|
|
47
|
+
args.push(`--since=${since}`);
|
|
48
|
+
if (until)
|
|
49
|
+
args.push(`--until=${until}`);
|
|
50
|
+
if (grep)
|
|
51
|
+
args.push(`--grep=${grep}`, '-i');
|
|
52
|
+
if (path)
|
|
53
|
+
args.push('--', path);
|
|
54
|
+
const result = await execGit(args, { cwd: repoPath });
|
|
55
|
+
if (result.exitCode !== 0) {
|
|
56
|
+
throw new ToolError(`Git log failed: ${result.stderr}`, 'INTERNAL_ERROR');
|
|
57
|
+
}
|
|
58
|
+
return parseLogOutput(result.stdout, !oneline);
|
|
59
|
+
}
|
|
60
|
+
async function getDiff(repoPath, options) {
|
|
61
|
+
const { diffType = 'all', fromRef, toRef, path, contextLines = 3, stat = true } = options;
|
|
62
|
+
const args = ['diff'];
|
|
63
|
+
if (fromRef && toRef) {
|
|
64
|
+
args.push(fromRef, toRef);
|
|
65
|
+
}
|
|
66
|
+
else if (fromRef) {
|
|
67
|
+
args.push(fromRef);
|
|
68
|
+
}
|
|
69
|
+
else if (diffType === 'staged') {
|
|
70
|
+
args.push('--cached');
|
|
71
|
+
}
|
|
72
|
+
else if (diffType === 'all') {
|
|
73
|
+
args.push('HEAD');
|
|
74
|
+
}
|
|
75
|
+
// unstaged is default (no extra args)
|
|
76
|
+
args.push(`-U${contextLines}`);
|
|
77
|
+
if (stat) {
|
|
78
|
+
args.push('--stat');
|
|
79
|
+
}
|
|
80
|
+
if (path) {
|
|
81
|
+
args.push('--', path);
|
|
82
|
+
}
|
|
83
|
+
const result = await execGit(args, { cwd: repoPath });
|
|
84
|
+
// diff returns exit code 1 if there are differences, which is not an error
|
|
85
|
+
if (result.exitCode !== 0 && result.exitCode !== 1) {
|
|
86
|
+
throw new ToolError(`Git diff failed: ${result.stderr}`, 'INTERNAL_ERROR');
|
|
87
|
+
}
|
|
88
|
+
const parsed = parseDiffStat(result.stdout);
|
|
89
|
+
return {
|
|
90
|
+
files: parsed.files,
|
|
91
|
+
totalAdditions: parsed.totalAdditions,
|
|
92
|
+
totalDeletions: parsed.totalDeletions,
|
|
93
|
+
patch: stat ? undefined : result.stdout,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
async function getBranches(repoPath, options) {
|
|
97
|
+
const { includeRemote = true, verbose = false } = options;
|
|
98
|
+
// Get current branch
|
|
99
|
+
const currentResult = await execGit(['branch', '--show-current'], { cwd: repoPath });
|
|
100
|
+
const current = currentResult.stdout.trim() || 'HEAD';
|
|
101
|
+
const isDetached = current === 'HEAD' || current === '';
|
|
102
|
+
// Get local branches
|
|
103
|
+
const localFormat = '%(refname:short)|%(objectname:short)|%(upstream:short)|%(upstream:track,nobracket)';
|
|
104
|
+
const localResult = await execGit(['branch', `--format=${localFormat}`], { cwd: repoPath });
|
|
105
|
+
const local = parseBranchOutput(localResult.stdout, current);
|
|
106
|
+
// Get remote branches
|
|
107
|
+
let remote = [];
|
|
108
|
+
if (includeRemote) {
|
|
109
|
+
const remoteResult = await execGit(['branch', '-r', '--format=%(refname:short)|%(objectname:short)'], { cwd: repoPath });
|
|
110
|
+
if (remoteResult.exitCode === 0) {
|
|
111
|
+
remote = remoteResult.stdout
|
|
112
|
+
.split('\n')
|
|
113
|
+
.filter((l) => l.trim())
|
|
114
|
+
.map((line) => {
|
|
115
|
+
const [name, lastCommit] = line.split('|');
|
|
116
|
+
return { name: name.trim(), lastCommit: lastCommit?.trim() };
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
current: isDetached ? `HEAD (detached)` : current,
|
|
122
|
+
isDetached,
|
|
123
|
+
local,
|
|
124
|
+
remote,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
async function captureSnapshot(repoPath, options) {
|
|
128
|
+
const { includeDiff = true, includeLog = true, logLimit = 10, includeStash = false } = options;
|
|
129
|
+
const remoteUrl = await getRemoteUrl(repoPath);
|
|
130
|
+
const status = await getStatus(repoPath, true);
|
|
131
|
+
const branch = await getBranches(repoPath, { includeRemote: true });
|
|
132
|
+
let recentCommits;
|
|
133
|
+
if (includeLog) {
|
|
134
|
+
recentCommits = await getLog(repoPath, { limit: logLimit });
|
|
135
|
+
}
|
|
136
|
+
let currentDiff;
|
|
137
|
+
if (includeDiff && !status.isClean) {
|
|
138
|
+
currentDiff = await getDiff(repoPath, { diffType: 'all', stat: true });
|
|
139
|
+
}
|
|
140
|
+
let stashes;
|
|
141
|
+
if (includeStash) {
|
|
142
|
+
const stashResult = await execGit(['stash', 'list', '--format=%gd|%s|%ci'], { cwd: repoPath });
|
|
143
|
+
if (stashResult.exitCode === 0 && stashResult.stdout.trim()) {
|
|
144
|
+
stashes = parseStashList(stashResult.stdout);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
timestamp: new Date().toISOString(),
|
|
149
|
+
repository: {
|
|
150
|
+
path: repoPath,
|
|
151
|
+
remoteUrl: remoteUrl || undefined,
|
|
152
|
+
},
|
|
153
|
+
status,
|
|
154
|
+
branch,
|
|
155
|
+
recentCommits,
|
|
156
|
+
currentDiff,
|
|
157
|
+
stashes,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
async function extractDecisions(repoPath, options) {
|
|
161
|
+
const { limit = 50, since, author, path, patterns, language = 'auto' } = options;
|
|
162
|
+
// Default patterns for detecting design decisions
|
|
163
|
+
const defaultPatterns = {
|
|
164
|
+
en: [
|
|
165
|
+
/(?:refactor|redesign|migrate|switch(?:ed)? to|implement|introduce)/i,
|
|
166
|
+
/(?:architecture|design decision|tech debt)/i,
|
|
167
|
+
/(?:breaking change|major change)/i,
|
|
168
|
+
/\b(?:why|because|reason|rationale):/i,
|
|
169
|
+
/feat:|fix:|refactor:|perf:|BREAKING CHANGE/i,
|
|
170
|
+
],
|
|
171
|
+
ko: [
|
|
172
|
+
/(?:리팩토링|재설계|마이그레이션|전환|도입)/,
|
|
173
|
+
/(?:아키텍처|설계 결정|기술 부채)/,
|
|
174
|
+
/\b(?:이유|배경|근거):/,
|
|
175
|
+
],
|
|
176
|
+
};
|
|
177
|
+
const commits = await getLog(repoPath, { limit, since, author, path });
|
|
178
|
+
const decisions = [];
|
|
179
|
+
for (const commit of commits) {
|
|
180
|
+
const fullMessage = `${commit.message}\n${commit.body || ''}`;
|
|
181
|
+
const lang = language === 'auto' ? detectLanguage(fullMessage) : language;
|
|
182
|
+
const patternsToUse = patterns
|
|
183
|
+
? patterns.map((p) => new RegExp(p, 'i'))
|
|
184
|
+
: [...defaultPatterns.en, ...defaultPatterns.ko];
|
|
185
|
+
if (patternsToUse.some((p) => p.test(fullMessage))) {
|
|
186
|
+
// Get files changed in this commit
|
|
187
|
+
const filesResult = await execGit(['diff-tree', '--no-commit-id', '--name-only', '-r', commit.hash], { cwd: repoPath });
|
|
188
|
+
const relatedFiles = filesResult.exitCode === 0
|
|
189
|
+
? filesResult.stdout
|
|
190
|
+
.split('\n')
|
|
191
|
+
.filter((f) => f.trim())
|
|
192
|
+
.slice(0, 10)
|
|
193
|
+
: [];
|
|
194
|
+
decisions.push({
|
|
195
|
+
commitHash: commit.hash,
|
|
196
|
+
shortHash: commit.shortHash,
|
|
197
|
+
date: commit.date,
|
|
198
|
+
author: commit.author,
|
|
199
|
+
title: commit.message.split('\n')[0],
|
|
200
|
+
description: commit.body || commit.message,
|
|
201
|
+
category: inferCategory(fullMessage, lang),
|
|
202
|
+
relatedFiles,
|
|
203
|
+
importance: calculateCommitImportance(commit, fullMessage),
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return decisions;
|
|
208
|
+
}
|
|
209
|
+
async function linkToSession(sessionId, repoPath, snapshotType) {
|
|
210
|
+
const session = await getSession(sessionId);
|
|
211
|
+
if (!session) {
|
|
212
|
+
throw new ToolError(`Session not found: ${sessionId}`, 'NOT_FOUND', { sessionId });
|
|
213
|
+
}
|
|
214
|
+
const snapshot = await captureSnapshot(repoPath, {
|
|
215
|
+
includeDiff: snapshotType === 'full',
|
|
216
|
+
includeLog: snapshotType === 'full',
|
|
217
|
+
logLimit: snapshotType === 'full' ? 10 : 3,
|
|
218
|
+
includeStash: false,
|
|
219
|
+
});
|
|
220
|
+
const gitContext = snapshotType === 'full'
|
|
221
|
+
? snapshot
|
|
222
|
+
: {
|
|
223
|
+
linkedAt: new Date().toISOString(),
|
|
224
|
+
repository: snapshot.repository,
|
|
225
|
+
branch: snapshot.branch.current,
|
|
226
|
+
commitHash: snapshot.recentCommits?.[0]?.hash,
|
|
227
|
+
isClean: snapshot.status.isClean,
|
|
228
|
+
modifiedCount: snapshot.status.unstaged.length + snapshot.status.staged.length,
|
|
229
|
+
};
|
|
230
|
+
await updateSession(sessionId, {
|
|
231
|
+
metadata: {
|
|
232
|
+
...(session.metadata || {}),
|
|
233
|
+
gitContext,
|
|
234
|
+
},
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
// Main tool function
|
|
238
|
+
export async function gitTool(input) {
|
|
239
|
+
const startTime = Date.now();
|
|
240
|
+
const { action } = input;
|
|
241
|
+
logger.info(`Git ${action} requested`, { action, repoPath: input.repoPath });
|
|
242
|
+
try {
|
|
243
|
+
const repoPath = await validateRepoPath(input.repoPath);
|
|
244
|
+
switch (action) {
|
|
245
|
+
case 'status': {
|
|
246
|
+
const status = await getStatus(repoPath, input.includeUntracked ?? true);
|
|
247
|
+
return {
|
|
248
|
+
success: true,
|
|
249
|
+
action,
|
|
250
|
+
status,
|
|
251
|
+
repoPath,
|
|
252
|
+
executionTime: Date.now() - startTime,
|
|
253
|
+
message: status.isClean ? 'Working tree clean' : 'Changes detected',
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
case 'log': {
|
|
257
|
+
const commits = await getLog(repoPath, {
|
|
258
|
+
limit: input.limit,
|
|
259
|
+
author: input.author,
|
|
260
|
+
since: input.since,
|
|
261
|
+
until: input.until,
|
|
262
|
+
grep: input.grep,
|
|
263
|
+
oneline: input.oneline,
|
|
264
|
+
path: input.path,
|
|
265
|
+
});
|
|
266
|
+
return {
|
|
267
|
+
success: true,
|
|
268
|
+
action,
|
|
269
|
+
commits,
|
|
270
|
+
repoPath,
|
|
271
|
+
executionTime: Date.now() - startTime,
|
|
272
|
+
message: `Found ${commits.length} commits`,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
case 'diff': {
|
|
276
|
+
const diff = await getDiff(repoPath, {
|
|
277
|
+
diffType: input.diffType,
|
|
278
|
+
fromRef: input.fromRef,
|
|
279
|
+
toRef: input.toRef,
|
|
280
|
+
path: input.path,
|
|
281
|
+
contextLines: input.contextLines,
|
|
282
|
+
stat: input.stat,
|
|
283
|
+
});
|
|
284
|
+
return {
|
|
285
|
+
success: true,
|
|
286
|
+
action,
|
|
287
|
+
diff,
|
|
288
|
+
repoPath,
|
|
289
|
+
executionTime: Date.now() - startTime,
|
|
290
|
+
message: `${diff.files.length} files changed, +${diff.totalAdditions} -${diff.totalDeletions}`,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
case 'branch': {
|
|
294
|
+
const branch = await getBranches(repoPath, {
|
|
295
|
+
includeRemote: input.includeRemote,
|
|
296
|
+
verbose: input.verbose,
|
|
297
|
+
});
|
|
298
|
+
return {
|
|
299
|
+
success: true,
|
|
300
|
+
action,
|
|
301
|
+
branch,
|
|
302
|
+
repoPath,
|
|
303
|
+
executionTime: Date.now() - startTime,
|
|
304
|
+
message: `Current branch: ${branch.current}`,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
case 'snapshot': {
|
|
308
|
+
const snapshot = await captureSnapshot(repoPath, {
|
|
309
|
+
includeDiff: input.includeDiff,
|
|
310
|
+
includeLog: input.includeLog,
|
|
311
|
+
logLimit: input.logLimit,
|
|
312
|
+
includeStash: input.includeStash,
|
|
313
|
+
});
|
|
314
|
+
return {
|
|
315
|
+
success: true,
|
|
316
|
+
action,
|
|
317
|
+
snapshot,
|
|
318
|
+
repoPath,
|
|
319
|
+
executionTime: Date.now() - startTime,
|
|
320
|
+
message: `Snapshot captured for ${snapshot.branch.current}`,
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
case 'extractDecisions': {
|
|
324
|
+
const decisions = await extractDecisions(repoPath, {
|
|
325
|
+
limit: input.limit,
|
|
326
|
+
since: input.since,
|
|
327
|
+
author: input.author,
|
|
328
|
+
path: input.path,
|
|
329
|
+
patterns: input.patterns,
|
|
330
|
+
language: input.language,
|
|
331
|
+
});
|
|
332
|
+
return {
|
|
333
|
+
success: true,
|
|
334
|
+
action,
|
|
335
|
+
decisions,
|
|
336
|
+
repoPath,
|
|
337
|
+
executionTime: Date.now() - startTime,
|
|
338
|
+
message: `Extracted ${decisions.length} design decisions`,
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
case 'linkToSession': {
|
|
342
|
+
if (!input.sessionId) {
|
|
343
|
+
throw new ToolError('sessionId is required for linkToSession action', 'VALIDATION_ERROR');
|
|
344
|
+
}
|
|
345
|
+
await linkToSession(input.sessionId, repoPath, input.snapshotType ?? 'minimal');
|
|
346
|
+
return {
|
|
347
|
+
success: true,
|
|
348
|
+
action,
|
|
349
|
+
linkedSessionId: input.sessionId,
|
|
350
|
+
repoPath,
|
|
351
|
+
executionTime: Date.now() - startTime,
|
|
352
|
+
message: `Git context linked to session ${input.sessionId}`,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
default:
|
|
356
|
+
throw new ToolError(`Unknown action: ${action}`, 'VALIDATION_ERROR');
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
catch (error) {
|
|
360
|
+
logger.error(`Git ${action} failed`, error);
|
|
361
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
362
|
+
const isNotRepo = errorMessage.includes('Not a git repository');
|
|
363
|
+
const isNotInstalled = errorMessage.includes('git: command not found');
|
|
364
|
+
return {
|
|
365
|
+
success: false,
|
|
366
|
+
action,
|
|
367
|
+
repoPath: input.repoPath,
|
|
368
|
+
executionTime: Date.now() - startTime,
|
|
369
|
+
error: isNotRepo
|
|
370
|
+
? 'Not a git repository. Initialize with "git init" or specify a valid repository path.'
|
|
371
|
+
: isNotInstalled
|
|
372
|
+
? 'Git is not installed or not in PATH.'
|
|
373
|
+
: errorMessage,
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
// MCP Schema
|
|
378
|
+
export const gitSchema = {
|
|
379
|
+
name: 'muse_git',
|
|
380
|
+
description: 'Git integration for vibe coding sessions. Get repository status, commit history, diffs, branch info. Capture git snapshots for sessions and extract design decisions from commit messages.',
|
|
381
|
+
inputSchema: {
|
|
382
|
+
type: 'object',
|
|
383
|
+
properties: {
|
|
384
|
+
action: {
|
|
385
|
+
type: 'string',
|
|
386
|
+
enum: ['status', 'log', 'diff', 'branch', 'snapshot', 'extractDecisions', 'linkToSession'],
|
|
387
|
+
description: 'Action: status (repo state), log (commit history), diff (changes), branch (branch info), snapshot (full context), extractDecisions (from commits), linkToSession (attach to session)',
|
|
388
|
+
},
|
|
389
|
+
repoPath: {
|
|
390
|
+
type: 'string',
|
|
391
|
+
description: 'Path to git repository. Defaults to current working directory.',
|
|
392
|
+
},
|
|
393
|
+
includeUntracked: {
|
|
394
|
+
type: 'boolean',
|
|
395
|
+
description: 'Include untracked files in status (default: true)',
|
|
396
|
+
},
|
|
397
|
+
limit: {
|
|
398
|
+
type: 'number',
|
|
399
|
+
description: 'Max commits to return for log/extractDecisions (default: 20, max: 500)',
|
|
400
|
+
},
|
|
401
|
+
author: {
|
|
402
|
+
type: 'string',
|
|
403
|
+
description: 'Filter commits by author name or email',
|
|
404
|
+
},
|
|
405
|
+
since: {
|
|
406
|
+
type: 'string',
|
|
407
|
+
description: 'Filter commits after date (e.g., "2024-01-01", "1 week ago")',
|
|
408
|
+
},
|
|
409
|
+
until: {
|
|
410
|
+
type: 'string',
|
|
411
|
+
description: 'Filter commits before date',
|
|
412
|
+
},
|
|
413
|
+
grep: {
|
|
414
|
+
type: 'string',
|
|
415
|
+
description: 'Search commit messages for keyword',
|
|
416
|
+
},
|
|
417
|
+
oneline: {
|
|
418
|
+
type: 'boolean',
|
|
419
|
+
description: 'Compact log format (default: false)',
|
|
420
|
+
},
|
|
421
|
+
diffType: {
|
|
422
|
+
type: 'string',
|
|
423
|
+
enum: ['staged', 'unstaged', 'all'],
|
|
424
|
+
description: 'Diff type: staged, unstaged, or all changes (default: all)',
|
|
425
|
+
},
|
|
426
|
+
fromRef: {
|
|
427
|
+
type: 'string',
|
|
428
|
+
description: 'Source commit/branch/tag for diff',
|
|
429
|
+
},
|
|
430
|
+
toRef: {
|
|
431
|
+
type: 'string',
|
|
432
|
+
description: 'Target commit/branch/tag for diff',
|
|
433
|
+
},
|
|
434
|
+
path: {
|
|
435
|
+
type: 'string',
|
|
436
|
+
description: 'Filter by file or directory path',
|
|
437
|
+
},
|
|
438
|
+
contextLines: {
|
|
439
|
+
type: 'number',
|
|
440
|
+
description: 'Lines of context around changes (default: 3)',
|
|
441
|
+
},
|
|
442
|
+
stat: {
|
|
443
|
+
type: 'boolean',
|
|
444
|
+
description: 'Include stat summary in diff (default: true)',
|
|
445
|
+
},
|
|
446
|
+
includeRemote: {
|
|
447
|
+
type: 'boolean',
|
|
448
|
+
description: 'Include remote branches (default: true)',
|
|
449
|
+
},
|
|
450
|
+
verbose: {
|
|
451
|
+
type: 'boolean',
|
|
452
|
+
description: 'Include last commit info per branch (default: false)',
|
|
453
|
+
},
|
|
454
|
+
includeDiff: {
|
|
455
|
+
type: 'boolean',
|
|
456
|
+
description: 'Include current diff in snapshot (default: true)',
|
|
457
|
+
},
|
|
458
|
+
includeLog: {
|
|
459
|
+
type: 'boolean',
|
|
460
|
+
description: 'Include recent commits in snapshot (default: true)',
|
|
461
|
+
},
|
|
462
|
+
logLimit: {
|
|
463
|
+
type: 'number',
|
|
464
|
+
description: 'Commits to include in snapshot (default: 10)',
|
|
465
|
+
},
|
|
466
|
+
includeStash: {
|
|
467
|
+
type: 'boolean',
|
|
468
|
+
description: 'Include stash list in snapshot (default: false)',
|
|
469
|
+
},
|
|
470
|
+
patterns: {
|
|
471
|
+
type: 'array',
|
|
472
|
+
items: { type: 'string' },
|
|
473
|
+
description: 'Custom regex patterns for detecting design decisions',
|
|
474
|
+
},
|
|
475
|
+
language: {
|
|
476
|
+
type: 'string',
|
|
477
|
+
enum: ['en', 'ko', 'auto'],
|
|
478
|
+
description: 'Language for analysis (default: auto-detect)',
|
|
479
|
+
},
|
|
480
|
+
sessionId: {
|
|
481
|
+
type: 'string',
|
|
482
|
+
description: 'Session ID to link git context to (required for linkToSession)',
|
|
483
|
+
},
|
|
484
|
+
snapshotType: {
|
|
485
|
+
type: 'string',
|
|
486
|
+
enum: ['minimal', 'full'],
|
|
487
|
+
description: 'Detail level when linking to session (default: minimal)',
|
|
488
|
+
},
|
|
489
|
+
},
|
|
490
|
+
required: ['action'],
|
|
491
|
+
},
|
|
492
|
+
};
|
|
493
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/tools/git.ts"],"names":[],"mappings":"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"}
|