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.
Files changed (60) hide show
  1. package/README.md +122 -4
  2. package/dist/__tests__/exportSession.test.d.ts +2 -0
  3. package/dist/__tests__/exportSession.test.d.ts.map +1 -0
  4. package/dist/__tests__/exportSession.test.js +180 -0
  5. package/dist/__tests__/exportSession.test.js.map +1 -0
  6. package/dist/__tests__/git.test.d.ts +2 -0
  7. package/dist/__tests__/git.test.d.ts.map +1 -0
  8. package/dist/__tests__/git.test.js +282 -0
  9. package/dist/__tests__/git.test.js.map +1 -0
  10. package/dist/__tests__/projectProfile.test.d.ts +2 -0
  11. package/dist/__tests__/projectProfile.test.d.ts.map +1 -0
  12. package/dist/__tests__/projectProfile.test.js +216 -0
  13. package/dist/__tests__/projectProfile.test.js.map +1 -0
  14. package/dist/core/profileStorage.d.ts +117 -0
  15. package/dist/core/profileStorage.d.ts.map +1 -0
  16. package/dist/core/profileStorage.js +251 -0
  17. package/dist/core/profileStorage.js.map +1 -0
  18. package/dist/core/schemas.d.ts +576 -4
  19. package/dist/core/schemas.d.ts.map +1 -1
  20. package/dist/core/schemas.js +185 -0
  21. package/dist/core/schemas.js.map +1 -1
  22. package/dist/stdio.js +44 -2
  23. package/dist/stdio.js.map +1 -1
  24. package/dist/tools/autoTag.d.ts +145 -0
  25. package/dist/tools/autoTag.d.ts.map +1 -0
  26. package/dist/tools/autoTag.js +475 -0
  27. package/dist/tools/autoTag.js.map +1 -0
  28. package/dist/tools/batch.d.ts +119 -0
  29. package/dist/tools/batch.d.ts.map +1 -0
  30. package/dist/tools/batch.js +459 -0
  31. package/dist/tools/batch.js.map +1 -0
  32. package/dist/tools/exportSession.d.ts +79 -0
  33. package/dist/tools/exportSession.d.ts.map +1 -0
  34. package/dist/tools/exportSession.js +434 -0
  35. package/dist/tools/exportSession.js.map +1 -0
  36. package/dist/tools/git.d.ts +226 -0
  37. package/dist/tools/git.d.ts.map +1 -0
  38. package/dist/tools/git.js +493 -0
  39. package/dist/tools/git.js.map +1 -0
  40. package/dist/tools/projectProfile.d.ts +230 -0
  41. package/dist/tools/projectProfile.d.ts.map +1 -0
  42. package/dist/tools/projectProfile.js +367 -0
  43. package/dist/tools/projectProfile.js.map +1 -0
  44. package/dist/tools/sessionStats.d.ts +129 -0
  45. package/dist/tools/sessionStats.d.ts.map +1 -0
  46. package/dist/tools/sessionStats.js +554 -0
  47. package/dist/tools/sessionStats.js.map +1 -0
  48. package/dist/tools/template.d.ts +127 -0
  49. package/dist/tools/template.d.ts.map +1 -0
  50. package/dist/tools/template.js +617 -0
  51. package/dist/tools/template.js.map +1 -0
  52. package/dist/utils/gitExecutor.d.ts +34 -0
  53. package/dist/utils/gitExecutor.d.ts.map +1 -0
  54. package/dist/utils/gitExecutor.js +95 -0
  55. package/dist/utils/gitExecutor.js.map +1 -0
  56. package/dist/utils/gitParsers.d.ts +90 -0
  57. package/dist/utils/gitParsers.d.ts.map +1 -0
  58. package/dist/utils/gitParsers.js +286 -0
  59. package/dist/utils/gitParsers.js.map +1 -0
  60. package/package.json +3 -2
@@ -0,0 +1,434 @@
1
+ /**
2
+ * 세션 Export 도구
3
+ * 세션 데이터를 다양한 형식으로 내보내기
4
+ * v2.7: Session Export
5
+ */
6
+ import { promises as fs } from 'fs';
7
+ import * as path from 'path';
8
+ import { getSession, listSessions } from '../core/sessionStorage.js';
9
+ import { logger } from '../core/logger.js';
10
+ const exportLogger = logger.child({ module: 'exportSession' });
11
+ // 마크다운 생성
12
+ function generateMarkdown(sessions, options) {
13
+ const { includeMetadata = true, includeCodeBlocks = true, includeDesignDecisions = true, template = 'default', title = 'Vibe Coding Session Export', bundleMultiple = true } = options;
14
+ const lines = [];
15
+ // 헤더
16
+ lines.push(`# ${title}`);
17
+ lines.push('');
18
+ if (includeMetadata) {
19
+ lines.push(`> Exported: ${new Date().toISOString()}`);
20
+ lines.push(`> Sessions: ${sessions.length}`);
21
+ lines.push('');
22
+ }
23
+ // 목차 (여러 세션일 경우)
24
+ if (sessions.length > 1 && template !== 'minimal') {
25
+ lines.push('## Table of Contents');
26
+ lines.push('');
27
+ sessions.forEach((session, index) => {
28
+ lines.push(`${index + 1}. [${session.title}](#${slugify(session.title)})`);
29
+ });
30
+ lines.push('');
31
+ lines.push('---');
32
+ lines.push('');
33
+ }
34
+ // 각 세션 렌더링
35
+ sessions.forEach((session, index) => {
36
+ if (sessions.length > 1) {
37
+ lines.push(`## ${session.title}`);
38
+ }
39
+ else {
40
+ lines.push(`## Session: ${session.title}`);
41
+ }
42
+ lines.push('');
43
+ // 메타데이터
44
+ if (includeMetadata && template !== 'minimal') {
45
+ lines.push('### Metadata');
46
+ lines.push('');
47
+ lines.push(`- **ID**: ${session.id}`);
48
+ lines.push(`- **Created**: ${formatDate(session.createdAt)}`);
49
+ lines.push(`- **Updated**: ${formatDate(session.updatedAt)}`);
50
+ if (session.tags && session.tags.length > 0) {
51
+ lines.push(`- **Tags**: ${session.tags.map(t => `\`${t}\``).join(', ')}`);
52
+ }
53
+ lines.push('');
54
+ }
55
+ // 요약
56
+ lines.push('### Summary');
57
+ lines.push('');
58
+ lines.push(session.summary);
59
+ lines.push('');
60
+ // 코드 컨텍스트
61
+ if (includeCodeBlocks && session.codeContexts && session.codeContexts.length > 0) {
62
+ lines.push('### Code Contexts');
63
+ lines.push('');
64
+ session.codeContexts.forEach((ctx, ctxIndex) => {
65
+ if (template === 'detailed' || template === 'report') {
66
+ lines.push(`#### Context ${ctxIndex + 1}`);
67
+ lines.push('');
68
+ lines.push(`> ${ctx.conversationSummary}`);
69
+ lines.push('');
70
+ }
71
+ ctx.codeBlocks.forEach((block, blockIndex) => {
72
+ if (block.filename) {
73
+ lines.push(`**${block.filename}**`);
74
+ lines.push('');
75
+ }
76
+ lines.push('```' + block.language);
77
+ lines.push(block.code);
78
+ lines.push('```');
79
+ lines.push('');
80
+ });
81
+ });
82
+ }
83
+ // 설계 결정
84
+ if (includeDesignDecisions && session.designDecisions && session.designDecisions.length > 0) {
85
+ lines.push('### Design Decisions');
86
+ lines.push('');
87
+ if (template === 'report') {
88
+ // 테이블 형식
89
+ lines.push('| # | Decision | Category | Rationale |');
90
+ lines.push('|---|----------|----------|-----------|');
91
+ session.designDecisions.forEach((dd, ddIndex) => {
92
+ lines.push(`| ${ddIndex + 1} | ${dd.title} | ${dd.category} | ${dd.rationale.substring(0, 50)}... |`);
93
+ });
94
+ lines.push('');
95
+ }
96
+ else {
97
+ session.designDecisions.forEach((dd, ddIndex) => {
98
+ lines.push(`#### ${ddIndex + 1}. ${dd.title}`);
99
+ lines.push('');
100
+ lines.push(`**Category**: ${dd.category}`);
101
+ lines.push('');
102
+ lines.push(dd.description);
103
+ lines.push('');
104
+ if (template !== 'minimal') {
105
+ lines.push(`**Rationale**: ${dd.rationale}`);
106
+ lines.push('');
107
+ }
108
+ });
109
+ }
110
+ }
111
+ // 세션 구분선
112
+ if (index < sessions.length - 1) {
113
+ lines.push('---');
114
+ lines.push('');
115
+ }
116
+ });
117
+ // 푸터
118
+ if (template === 'report' || template === 'detailed') {
119
+ lines.push('---');
120
+ lines.push('');
121
+ lines.push('*Generated by Vibe Coding MCP*');
122
+ }
123
+ return lines.join('\n');
124
+ }
125
+ // HTML 생성
126
+ function generateHTML(sessions, options) {
127
+ const { includeMetadata = true, includeCodeBlocks = true, includeDesignDecisions = true, title = 'Vibe Coding Session Export' } = options;
128
+ const styles = `
129
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; max-width: 900px; margin: 0 auto; padding: 2rem; line-height: 1.6; }
130
+ h1 { border-bottom: 2px solid #333; padding-bottom: 0.5rem; }
131
+ h2 { color: #2563eb; margin-top: 2rem; }
132
+ h3 { color: #4b5563; }
133
+ .metadata { background: #f3f4f6; padding: 1rem; border-radius: 8px; margin: 1rem 0; }
134
+ .metadata p { margin: 0.25rem 0; }
135
+ .tag { background: #dbeafe; color: #1d4ed8; padding: 0.25rem 0.5rem; border-radius: 4px; font-size: 0.875rem; margin-right: 0.5rem; }
136
+ pre { background: #1f2937; color: #f9fafb; padding: 1rem; border-radius: 8px; overflow-x: auto; }
137
+ code { font-family: 'Fira Code', monospace; }
138
+ .decision { border-left: 4px solid #2563eb; padding-left: 1rem; margin: 1rem 0; }
139
+ .decision-category { font-size: 0.75rem; text-transform: uppercase; color: #6b7280; }
140
+ table { width: 100%; border-collapse: collapse; margin: 1rem 0; }
141
+ th, td { border: 1px solid #e5e7eb; padding: 0.75rem; text-align: left; }
142
+ th { background: #f9fafb; }
143
+ .footer { margin-top: 3rem; padding-top: 1rem; border-top: 1px solid #e5e7eb; color: #6b7280; font-size: 0.875rem; }
144
+ `;
145
+ let html = `<!DOCTYPE html>
146
+ <html lang="en">
147
+ <head>
148
+ <meta charset="UTF-8">
149
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
150
+ <title>${escapeHtml(title)}</title>
151
+ <style>${styles}</style>
152
+ </head>
153
+ <body>
154
+ <h1>${escapeHtml(title)}</h1>
155
+ `;
156
+ if (includeMetadata) {
157
+ html += `
158
+ <div class="metadata">
159
+ <p><strong>Exported:</strong> ${new Date().toLocaleString()}</p>
160
+ <p><strong>Total Sessions:</strong> ${sessions.length}</p>
161
+ </div>
162
+ `;
163
+ }
164
+ sessions.forEach((session, index) => {
165
+ html += `
166
+ <h2>${escapeHtml(session.title)}</h2>
167
+ `;
168
+ if (includeMetadata) {
169
+ html += `
170
+ <div class="metadata">
171
+ <p><strong>ID:</strong> ${session.id}</p>
172
+ <p><strong>Created:</strong> ${formatDate(session.createdAt)}</p>
173
+ <p><strong>Updated:</strong> ${formatDate(session.updatedAt)}</p>
174
+ ${session.tags && session.tags.length > 0
175
+ ? `<p><strong>Tags:</strong> ${session.tags.map(t => `<span class="tag">${escapeHtml(t)}</span>`).join('')}</p>`
176
+ : ''}
177
+ </div>
178
+ `;
179
+ }
180
+ html += `
181
+ <h3>Summary</h3>
182
+ <p>${escapeHtml(session.summary)}</p>
183
+ `;
184
+ if (includeCodeBlocks && session.codeContexts && session.codeContexts.length > 0) {
185
+ html += `
186
+ <h3>Code Contexts</h3>
187
+ `;
188
+ session.codeContexts.forEach(ctx => {
189
+ ctx.codeBlocks.forEach(block => {
190
+ if (block.filename) {
191
+ html += `<p><strong>${escapeHtml(block.filename)}</strong></p>\n`;
192
+ }
193
+ html += `<pre><code class="language-${block.language}">${escapeHtml(block.code)}</code></pre>\n`;
194
+ });
195
+ });
196
+ }
197
+ if (includeDesignDecisions && session.designDecisions && session.designDecisions.length > 0) {
198
+ html += `
199
+ <h3>Design Decisions</h3>
200
+ `;
201
+ session.designDecisions.forEach((dd, i) => {
202
+ html += `
203
+ <div class="decision">
204
+ <span class="decision-category">${escapeHtml(dd.category)}</span>
205
+ <h4>${i + 1}. ${escapeHtml(dd.title)}</h4>
206
+ <p>${escapeHtml(dd.description)}</p>
207
+ <p><em>Rationale: ${escapeHtml(dd.rationale)}</em></p>
208
+ </div>
209
+ `;
210
+ });
211
+ }
212
+ if (index < sessions.length - 1) {
213
+ html += `<hr>\n`;
214
+ }
215
+ });
216
+ html += `
217
+ <div class="footer">
218
+ <p>Generated by Vibe Coding MCP</p>
219
+ </div>
220
+ </body>
221
+ </html>`;
222
+ return html;
223
+ }
224
+ // JSON 생성
225
+ function generateJSON(sessions, options) {
226
+ const { includeMetadata = true, includeCodeBlocks = true, includeDesignDecisions = true, title = 'Vibe Coding Session Export' } = options;
227
+ const exportData = {
228
+ exportInfo: {
229
+ title,
230
+ exportedAt: new Date().toISOString(),
231
+ version: '2.7.0',
232
+ sessionCount: sessions.length
233
+ },
234
+ sessions: sessions.map(session => {
235
+ const sessionData = {
236
+ id: session.id,
237
+ title: session.title,
238
+ summary: session.summary
239
+ };
240
+ if (includeMetadata) {
241
+ sessionData.createdAt = session.createdAt;
242
+ sessionData.updatedAt = session.updatedAt;
243
+ sessionData.tags = session.tags;
244
+ if (session.metadata) {
245
+ sessionData.metadata = session.metadata;
246
+ }
247
+ }
248
+ if (includeCodeBlocks && session.codeContexts) {
249
+ sessionData.codeContexts = session.codeContexts;
250
+ }
251
+ if (includeDesignDecisions && session.designDecisions) {
252
+ sessionData.designDecisions = session.designDecisions;
253
+ }
254
+ return sessionData;
255
+ })
256
+ };
257
+ return JSON.stringify(exportData, null, 2);
258
+ }
259
+ // 헬퍼 함수들
260
+ function slugify(text) {
261
+ return text
262
+ .toLowerCase()
263
+ .replace(/[^a-z0-9가-힣]+/g, '-')
264
+ .replace(/(^-|-$)/g, '');
265
+ }
266
+ function formatDate(isoString) {
267
+ try {
268
+ return new Date(isoString).toLocaleString();
269
+ }
270
+ catch {
271
+ return isoString;
272
+ }
273
+ }
274
+ function escapeHtml(text) {
275
+ return text
276
+ .replace(/&/g, '&amp;')
277
+ .replace(/</g, '&lt;')
278
+ .replace(/>/g, '&gt;')
279
+ .replace(/"/g, '&quot;')
280
+ .replace(/'/g, '&#039;');
281
+ }
282
+ export async function exportSessionTool(input) {
283
+ const { sessionIds, format, outputPath, bundleMultiple = true } = input;
284
+ try {
285
+ let sessions = [];
286
+ if (sessionIds && sessionIds.length > 0) {
287
+ // 특정 세션들 가져오기
288
+ for (const id of sessionIds) {
289
+ const session = await getSession(id);
290
+ if (session) {
291
+ sessions.push(session);
292
+ }
293
+ else {
294
+ exportLogger.warn('Session not found', { sessionId: id });
295
+ }
296
+ }
297
+ }
298
+ else {
299
+ // 모든 세션 가져오기
300
+ const { sessions: storedSessions } = await listSessions({ limit: 1000 });
301
+ for (const stored of storedSessions) {
302
+ const session = await getSession(stored.id);
303
+ if (session) {
304
+ sessions.push(session);
305
+ }
306
+ }
307
+ }
308
+ if (sessions.length === 0) {
309
+ return {
310
+ success: false,
311
+ format,
312
+ sessionCount: 0,
313
+ error: 'No sessions found to export'
314
+ };
315
+ }
316
+ // 형식에 따라 내용 생성
317
+ let content;
318
+ let fileExtension;
319
+ switch (format) {
320
+ case 'markdown':
321
+ content = generateMarkdown(sessions, input);
322
+ fileExtension = 'md';
323
+ break;
324
+ case 'html':
325
+ content = generateHTML(sessions, input);
326
+ fileExtension = 'html';
327
+ break;
328
+ case 'json':
329
+ content = generateJSON(sessions, input);
330
+ fileExtension = 'json';
331
+ break;
332
+ default:
333
+ return {
334
+ success: false,
335
+ format,
336
+ sessionCount: 0,
337
+ error: `Unsupported format: ${format}`
338
+ };
339
+ }
340
+ // 파일로 저장 (outputPath가 있으면)
341
+ let filePath;
342
+ if (outputPath) {
343
+ // 경로 resolve
344
+ const resolvedPath = path.resolve(outputPath);
345
+ // 디렉토리면 파일명 생성
346
+ let finalPath = resolvedPath;
347
+ try {
348
+ const stat = await fs.stat(resolvedPath);
349
+ if (stat.isDirectory()) {
350
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
351
+ finalPath = path.join(resolvedPath, `session-export-${timestamp}.${fileExtension}`);
352
+ }
353
+ }
354
+ catch {
355
+ // 파일이 없으면 그대로 사용 (새 파일 생성)
356
+ if (!resolvedPath.endsWith(`.${fileExtension}`)) {
357
+ finalPath = `${resolvedPath}.${fileExtension}`;
358
+ }
359
+ }
360
+ await fs.writeFile(finalPath, content, 'utf-8');
361
+ filePath = finalPath;
362
+ exportLogger.info('Session exported to file', { path: finalPath, sessionCount: sessions.length });
363
+ }
364
+ return {
365
+ success: true,
366
+ format,
367
+ content,
368
+ filePath,
369
+ sessionCount: sessions.length,
370
+ message: filePath
371
+ ? `Exported ${sessions.length} session(s) to ${filePath}`
372
+ : `Exported ${sessions.length} session(s) as ${format}`
373
+ };
374
+ }
375
+ catch (error) {
376
+ exportLogger.error('Failed to export sessions', error);
377
+ return {
378
+ success: false,
379
+ format,
380
+ sessionCount: 0,
381
+ error: error instanceof Error ? error.message : String(error)
382
+ };
383
+ }
384
+ }
385
+ export const exportSessionSchema = {
386
+ name: 'muse_export_session',
387
+ description: 'Exports vibe coding sessions to various formats (Markdown, JSON, HTML). Use for creating shareable documentation, backups, or reports from session history.',
388
+ inputSchema: {
389
+ type: 'object',
390
+ properties: {
391
+ sessionIds: {
392
+ type: 'array',
393
+ items: { type: 'string' },
394
+ description: 'Specific session IDs to export. If omitted, exports all sessions.'
395
+ },
396
+ format: {
397
+ type: 'string',
398
+ enum: ['markdown', 'json', 'html'],
399
+ description: 'Output format: markdown (readable docs), json (structured data), html (web page)'
400
+ },
401
+ outputPath: {
402
+ type: 'string',
403
+ description: 'File path to save the export. If omitted, returns content directly.'
404
+ },
405
+ includeMetadata: {
406
+ type: 'boolean',
407
+ description: 'Include session metadata (ID, timestamps, tags). Default: true'
408
+ },
409
+ includeCodeBlocks: {
410
+ type: 'boolean',
411
+ description: 'Include code blocks from code contexts. Default: true'
412
+ },
413
+ includeDesignDecisions: {
414
+ type: 'boolean',
415
+ description: 'Include design decisions. Default: true'
416
+ },
417
+ template: {
418
+ type: 'string',
419
+ enum: ['default', 'minimal', 'detailed', 'report'],
420
+ description: 'Template style: minimal (brief), default (balanced), detailed (comprehensive), report (formal)'
421
+ },
422
+ title: {
423
+ type: 'string',
424
+ description: 'Document title. Default: "Vibe Coding Session Export"'
425
+ },
426
+ bundleMultiple: {
427
+ type: 'boolean',
428
+ description: 'Combine multiple sessions into one document. Default: true'
429
+ }
430
+ },
431
+ required: ['format']
432
+ }
433
+ };
434
+ //# sourceMappingURL=exportSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exportSession.js","sourceRoot":"","sources":["../../src/tools/exportSession.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Git Integration Tool (muse_git)
3
+ * Provides git repository context for vibe coding sessions
4
+ */
5
+ import { type GitFileStatus, type GitCommit, type BranchInfo } from '../utils/gitParsers.js';
6
+ export type GitAction = 'status' | 'log' | 'diff' | 'branch' | 'snapshot' | 'extractDecisions' | 'linkToSession';
7
+ export interface GitInput {
8
+ action: GitAction;
9
+ repoPath?: string;
10
+ includeUntracked?: boolean;
11
+ limit?: number;
12
+ author?: string;
13
+ since?: string;
14
+ until?: string;
15
+ grep?: string;
16
+ oneline?: boolean;
17
+ diffType?: 'staged' | 'unstaged' | 'all';
18
+ fromRef?: string;
19
+ toRef?: string;
20
+ path?: string;
21
+ contextLines?: number;
22
+ stat?: boolean;
23
+ includeRemote?: boolean;
24
+ verbose?: boolean;
25
+ includeDiff?: boolean;
26
+ includeLog?: boolean;
27
+ logLimit?: number;
28
+ includeStash?: boolean;
29
+ patterns?: string[];
30
+ language?: 'en' | 'ko' | 'auto';
31
+ sessionId?: string;
32
+ snapshotType?: 'minimal' | 'full';
33
+ }
34
+ export interface GitStatusResult {
35
+ branch: string;
36
+ upstream?: string;
37
+ ahead: number;
38
+ behind: number;
39
+ staged: GitFileStatus[];
40
+ unstaged: GitFileStatus[];
41
+ untracked: GitFileStatus[];
42
+ conflicts: GitFileStatus[];
43
+ isClean: boolean;
44
+ isDetached: boolean;
45
+ }
46
+ export interface GitDiffResult {
47
+ files: Array<{
48
+ path: string;
49
+ additions: number;
50
+ deletions: number;
51
+ binary: boolean;
52
+ }>;
53
+ totalAdditions: number;
54
+ totalDeletions: number;
55
+ patch?: string;
56
+ }
57
+ export interface GitBranchInfo {
58
+ current: string;
59
+ isDetached: boolean;
60
+ local: BranchInfo[];
61
+ remote: Array<{
62
+ name: string;
63
+ lastCommit?: string;
64
+ }>;
65
+ }
66
+ export interface GitSnapshot {
67
+ timestamp: string;
68
+ repository: {
69
+ path: string;
70
+ remoteUrl?: string;
71
+ };
72
+ status: GitStatusResult;
73
+ branch: GitBranchInfo;
74
+ recentCommits?: GitCommit[];
75
+ currentDiff?: GitDiffResult;
76
+ stashes?: Array<{
77
+ index: number;
78
+ message: string;
79
+ date: string;
80
+ }>;
81
+ }
82
+ export interface GitDesignDecision {
83
+ commitHash: string;
84
+ shortHash: string;
85
+ date: string;
86
+ author: string;
87
+ title: string;
88
+ description: string;
89
+ category: 'architecture' | 'library' | 'pattern' | 'implementation' | 'other';
90
+ relatedFiles: string[];
91
+ importance: 'high' | 'medium' | 'low';
92
+ }
93
+ export interface GitOutput {
94
+ success: boolean;
95
+ action: GitAction;
96
+ status?: GitStatusResult;
97
+ commits?: GitCommit[];
98
+ diff?: GitDiffResult;
99
+ branch?: GitBranchInfo;
100
+ snapshot?: GitSnapshot;
101
+ decisions?: GitDesignDecision[];
102
+ linkedSessionId?: string;
103
+ repoPath?: string;
104
+ executionTime?: number;
105
+ message?: string;
106
+ error?: string;
107
+ }
108
+ export declare function gitTool(input: GitInput): Promise<GitOutput>;
109
+ export declare const gitSchema: {
110
+ name: string;
111
+ description: string;
112
+ inputSchema: {
113
+ type: string;
114
+ properties: {
115
+ action: {
116
+ type: string;
117
+ enum: string[];
118
+ description: string;
119
+ };
120
+ repoPath: {
121
+ type: string;
122
+ description: string;
123
+ };
124
+ includeUntracked: {
125
+ type: string;
126
+ description: string;
127
+ };
128
+ limit: {
129
+ type: string;
130
+ description: string;
131
+ };
132
+ author: {
133
+ type: string;
134
+ description: string;
135
+ };
136
+ since: {
137
+ type: string;
138
+ description: string;
139
+ };
140
+ until: {
141
+ type: string;
142
+ description: string;
143
+ };
144
+ grep: {
145
+ type: string;
146
+ description: string;
147
+ };
148
+ oneline: {
149
+ type: string;
150
+ description: string;
151
+ };
152
+ diffType: {
153
+ type: string;
154
+ enum: string[];
155
+ description: string;
156
+ };
157
+ fromRef: {
158
+ type: string;
159
+ description: string;
160
+ };
161
+ toRef: {
162
+ type: string;
163
+ description: string;
164
+ };
165
+ path: {
166
+ type: string;
167
+ description: string;
168
+ };
169
+ contextLines: {
170
+ type: string;
171
+ description: string;
172
+ };
173
+ stat: {
174
+ type: string;
175
+ description: string;
176
+ };
177
+ includeRemote: {
178
+ type: string;
179
+ description: string;
180
+ };
181
+ verbose: {
182
+ type: string;
183
+ description: string;
184
+ };
185
+ includeDiff: {
186
+ type: string;
187
+ description: string;
188
+ };
189
+ includeLog: {
190
+ type: string;
191
+ description: string;
192
+ };
193
+ logLimit: {
194
+ type: string;
195
+ description: string;
196
+ };
197
+ includeStash: {
198
+ type: string;
199
+ description: string;
200
+ };
201
+ patterns: {
202
+ type: string;
203
+ items: {
204
+ type: string;
205
+ };
206
+ description: string;
207
+ };
208
+ language: {
209
+ type: string;
210
+ enum: string[];
211
+ description: string;
212
+ };
213
+ sessionId: {
214
+ type: string;
215
+ description: string;
216
+ };
217
+ snapshotType: {
218
+ type: string;
219
+ enum: string[];
220
+ description: string;
221
+ };
222
+ };
223
+ required: string[];
224
+ };
225
+ };
226
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/tools/git.ts"],"names":[],"mappings":"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"}