vibe-coding-mcp 2.7.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 +105 -4
- 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/core/schemas.d.ts +345 -0
- package/dist/core/schemas.d.ts.map +1 -1
- package/dist/core/schemas.js +128 -0
- package/dist/core/schemas.js.map +1 -1
- package/dist/stdio.js +32 -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/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/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,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git command execution utility using spawn for security
|
|
3
|
+
*/
|
|
4
|
+
export interface GitExecResult {
|
|
5
|
+
stdout: string;
|
|
6
|
+
stderr: string;
|
|
7
|
+
exitCode: number;
|
|
8
|
+
}
|
|
9
|
+
export interface GitExecOptions {
|
|
10
|
+
cwd?: string;
|
|
11
|
+
timeout?: number;
|
|
12
|
+
env?: Record<string, string>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Execute git command safely using spawn (no shell injection)
|
|
16
|
+
*/
|
|
17
|
+
export declare function execGit(args: string[], options?: GitExecOptions): Promise<GitExecResult>;
|
|
18
|
+
/**
|
|
19
|
+
* Check if directory is a git repository
|
|
20
|
+
*/
|
|
21
|
+
export declare function isGitRepository(repoPath: string): Promise<boolean>;
|
|
22
|
+
/**
|
|
23
|
+
* Get repository root path
|
|
24
|
+
*/
|
|
25
|
+
export declare function getRepoRoot(repoPath: string): Promise<string | null>;
|
|
26
|
+
/**
|
|
27
|
+
* Get remote URL for origin
|
|
28
|
+
*/
|
|
29
|
+
export declare function getRemoteUrl(repoPath: string): Promise<string | null>;
|
|
30
|
+
/**
|
|
31
|
+
* Validate and resolve repository path
|
|
32
|
+
*/
|
|
33
|
+
export declare function validateRepoPath(inputPath?: string): Promise<string>;
|
|
34
|
+
//# sourceMappingURL=gitExecutor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitExecutor.d.ts","sourceRoot":"","sources":["../../src/utils/gitExecutor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAuCxB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAU1E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAU3E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAa1E"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git command execution utility using spawn for security
|
|
3
|
+
*/
|
|
4
|
+
import { spawn } from 'child_process';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import { ToolError } from '../core/errors.js';
|
|
7
|
+
/**
|
|
8
|
+
* Execute git command safely using spawn (no shell injection)
|
|
9
|
+
*/
|
|
10
|
+
export async function execGit(args, options = {}) {
|
|
11
|
+
const { cwd = process.cwd(), timeout = 30000, env = {} } = options;
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
const proc = spawn('git', args, {
|
|
14
|
+
cwd,
|
|
15
|
+
env: {
|
|
16
|
+
...process.env,
|
|
17
|
+
...env,
|
|
18
|
+
GIT_TERMINAL_PROMPT: '0',
|
|
19
|
+
LC_ALL: 'C.UTF-8',
|
|
20
|
+
},
|
|
21
|
+
timeout,
|
|
22
|
+
});
|
|
23
|
+
let stdout = '';
|
|
24
|
+
let stderr = '';
|
|
25
|
+
proc.stdout.on('data', (data) => {
|
|
26
|
+
stdout += data.toString();
|
|
27
|
+
});
|
|
28
|
+
proc.stderr.on('data', (data) => {
|
|
29
|
+
stderr += data.toString();
|
|
30
|
+
});
|
|
31
|
+
proc.on('close', (code) => {
|
|
32
|
+
resolve({ stdout, stderr, exitCode: code ?? 0 });
|
|
33
|
+
});
|
|
34
|
+
proc.on('error', (err) => {
|
|
35
|
+
reject(new ToolError(`Failed to execute git: ${err.message}`, 'INTERNAL_ERROR', {
|
|
36
|
+
args,
|
|
37
|
+
cwd,
|
|
38
|
+
}));
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Check if directory is a git repository
|
|
44
|
+
*/
|
|
45
|
+
export async function isGitRepository(repoPath) {
|
|
46
|
+
try {
|
|
47
|
+
const result = await execGit(['rev-parse', '--git-dir'], { cwd: repoPath });
|
|
48
|
+
return result.exitCode === 0;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get repository root path
|
|
56
|
+
*/
|
|
57
|
+
export async function getRepoRoot(repoPath) {
|
|
58
|
+
try {
|
|
59
|
+
const result = await execGit(['rev-parse', '--show-toplevel'], { cwd: repoPath });
|
|
60
|
+
if (result.exitCode === 0) {
|
|
61
|
+
return result.stdout.trim();
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get remote URL for origin
|
|
71
|
+
*/
|
|
72
|
+
export async function getRemoteUrl(repoPath) {
|
|
73
|
+
try {
|
|
74
|
+
const result = await execGit(['remote', 'get-url', 'origin'], { cwd: repoPath });
|
|
75
|
+
if (result.exitCode === 0) {
|
|
76
|
+
return result.stdout.trim();
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Validate and resolve repository path
|
|
86
|
+
*/
|
|
87
|
+
export async function validateRepoPath(inputPath) {
|
|
88
|
+
const repoPath = inputPath ? path.resolve(inputPath) : process.cwd();
|
|
89
|
+
const isRepo = await isGitRepository(repoPath);
|
|
90
|
+
if (!isRepo) {
|
|
91
|
+
throw new ToolError(`Not a git repository: ${repoPath}. Initialize with "git init" or specify a valid repository path.`, 'VALIDATION_ERROR', { path: repoPath });
|
|
92
|
+
}
|
|
93
|
+
return repoPath;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=gitExecutor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitExecutor.js","sourceRoot":"","sources":["../../src/utils/gitExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git output parsing utilities
|
|
3
|
+
*/
|
|
4
|
+
export type FileStatusType = 'modified' | 'added' | 'deleted' | 'renamed' | 'copied' | 'untracked' | 'ignored' | 'unmerged';
|
|
5
|
+
export interface GitFileStatus {
|
|
6
|
+
path: string;
|
|
7
|
+
status: FileStatusType;
|
|
8
|
+
staged: boolean;
|
|
9
|
+
oldPath?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ParsedStatus {
|
|
12
|
+
branch: string;
|
|
13
|
+
upstream?: string;
|
|
14
|
+
ahead: number;
|
|
15
|
+
behind: number;
|
|
16
|
+
staged: GitFileStatus[];
|
|
17
|
+
unstaged: GitFileStatus[];
|
|
18
|
+
untracked: GitFileStatus[];
|
|
19
|
+
conflicts: GitFileStatus[];
|
|
20
|
+
}
|
|
21
|
+
export interface GitCommit {
|
|
22
|
+
hash: string;
|
|
23
|
+
shortHash: string;
|
|
24
|
+
author: string;
|
|
25
|
+
authorEmail: string;
|
|
26
|
+
date: string;
|
|
27
|
+
message: string;
|
|
28
|
+
body?: string;
|
|
29
|
+
files?: string[];
|
|
30
|
+
}
|
|
31
|
+
export interface DiffFileStat {
|
|
32
|
+
path: string;
|
|
33
|
+
additions: number;
|
|
34
|
+
deletions: number;
|
|
35
|
+
binary: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface ParsedDiff {
|
|
38
|
+
files: DiffFileStat[];
|
|
39
|
+
totalAdditions: number;
|
|
40
|
+
totalDeletions: number;
|
|
41
|
+
}
|
|
42
|
+
export interface BranchInfo {
|
|
43
|
+
name: string;
|
|
44
|
+
current: boolean;
|
|
45
|
+
upstream?: string;
|
|
46
|
+
ahead?: number;
|
|
47
|
+
behind?: number;
|
|
48
|
+
lastCommit?: string;
|
|
49
|
+
lastCommitDate?: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Parse git status --porcelain=v2 --branch output
|
|
53
|
+
*/
|
|
54
|
+
export declare function parseStatusPorcelainV2(output: string): ParsedStatus;
|
|
55
|
+
/**
|
|
56
|
+
* Parse git log with custom format
|
|
57
|
+
* Format: %H|%h|%an|%ae|%aI|%s
|
|
58
|
+
*/
|
|
59
|
+
export declare function parseLogOutput(output: string, includeBody?: boolean): GitCommit[];
|
|
60
|
+
/**
|
|
61
|
+
* Parse git diff --stat output
|
|
62
|
+
*/
|
|
63
|
+
export declare function parseDiffStat(output: string): ParsedDiff;
|
|
64
|
+
/**
|
|
65
|
+
* Parse git branch output
|
|
66
|
+
* Format: %(refname:short)|%(objectname:short)|%(upstream:short)|%(upstream:track,nobracket)
|
|
67
|
+
*/
|
|
68
|
+
export declare function parseBranchOutput(output: string, currentBranch: string): BranchInfo[];
|
|
69
|
+
/**
|
|
70
|
+
* Parse git stash list output
|
|
71
|
+
* Format: stash@{0}|message|date
|
|
72
|
+
*/
|
|
73
|
+
export declare function parseStashList(output: string): Array<{
|
|
74
|
+
index: number;
|
|
75
|
+
message: string;
|
|
76
|
+
date: string;
|
|
77
|
+
}>;
|
|
78
|
+
/**
|
|
79
|
+
* Detect language from text (simple heuristic)
|
|
80
|
+
*/
|
|
81
|
+
export declare function detectLanguage(text: string): 'en' | 'ko';
|
|
82
|
+
/**
|
|
83
|
+
* Infer design decision category from text
|
|
84
|
+
*/
|
|
85
|
+
export declare function inferCategory(text: string, lang: 'en' | 'ko'): 'architecture' | 'library' | 'pattern' | 'implementation' | 'other';
|
|
86
|
+
/**
|
|
87
|
+
* Calculate commit importance based on content
|
|
88
|
+
*/
|
|
89
|
+
export declare function calculateCommitImportance(commit: GitCommit, fullMessage: string): 'high' | 'medium' | 'low';
|
|
90
|
+
//# sourceMappingURL=gitParsers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitParsers.d.ts","sourceRoot":"","sources":["../../src/utils/gitParsers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git output parsing utilities
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Parse git status --porcelain=v2 --branch output
|
|
6
|
+
*/
|
|
7
|
+
export function parseStatusPorcelainV2(output) {
|
|
8
|
+
const lines = output.split('\n').filter((line) => line.length > 0);
|
|
9
|
+
let branch = 'HEAD';
|
|
10
|
+
let upstream;
|
|
11
|
+
let ahead = 0;
|
|
12
|
+
let behind = 0;
|
|
13
|
+
const staged = [];
|
|
14
|
+
const unstaged = [];
|
|
15
|
+
const untracked = [];
|
|
16
|
+
const conflicts = [];
|
|
17
|
+
for (const line of lines) {
|
|
18
|
+
// Branch header lines
|
|
19
|
+
if (line.startsWith('# branch.oid')) {
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
if (line.startsWith('# branch.head')) {
|
|
23
|
+
branch = line.split(' ')[2] || 'HEAD';
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (line.startsWith('# branch.upstream')) {
|
|
27
|
+
upstream = line.split(' ')[2];
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (line.startsWith('# branch.ab')) {
|
|
31
|
+
const match = line.match(/\+(\d+) -(\d+)/);
|
|
32
|
+
if (match) {
|
|
33
|
+
ahead = parseInt(match[1], 10);
|
|
34
|
+
behind = parseInt(match[2], 10);
|
|
35
|
+
}
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
// Untracked files
|
|
39
|
+
if (line.startsWith('?')) {
|
|
40
|
+
const path = line.slice(2);
|
|
41
|
+
untracked.push({ path, status: 'untracked', staged: false });
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
// Ignored files
|
|
45
|
+
if (line.startsWith('!')) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
// Changed entries (1 = ordinary, 2 = renamed/copied)
|
|
49
|
+
if (line.startsWith('1') || line.startsWith('2')) {
|
|
50
|
+
const parts = line.split('\t');
|
|
51
|
+
const info = parts[0].split(' ');
|
|
52
|
+
const xy = info[1]; // XY status codes
|
|
53
|
+
const path = parts[parts.length - 1];
|
|
54
|
+
const oldPath = parts.length > 2 ? parts[1] : undefined;
|
|
55
|
+
const indexStatus = xy[0];
|
|
56
|
+
const worktreeStatus = xy[1];
|
|
57
|
+
// Staged changes
|
|
58
|
+
if (indexStatus !== '.') {
|
|
59
|
+
staged.push({
|
|
60
|
+
path,
|
|
61
|
+
status: mapStatusCode(indexStatus),
|
|
62
|
+
staged: true,
|
|
63
|
+
oldPath,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// Unstaged changes
|
|
67
|
+
if (worktreeStatus !== '.') {
|
|
68
|
+
unstaged.push({
|
|
69
|
+
path,
|
|
70
|
+
status: mapStatusCode(worktreeStatus),
|
|
71
|
+
staged: false,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
// Unmerged entries
|
|
77
|
+
if (line.startsWith('u')) {
|
|
78
|
+
const parts = line.split('\t');
|
|
79
|
+
const path = parts[parts.length - 1];
|
|
80
|
+
conflicts.push({ path, status: 'unmerged', staged: false });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return { branch, upstream, ahead, behind, staged, unstaged, untracked, conflicts };
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Map git status code to FileStatusType
|
|
87
|
+
*/
|
|
88
|
+
function mapStatusCode(code) {
|
|
89
|
+
switch (code) {
|
|
90
|
+
case 'M':
|
|
91
|
+
return 'modified';
|
|
92
|
+
case 'A':
|
|
93
|
+
return 'added';
|
|
94
|
+
case 'D':
|
|
95
|
+
return 'deleted';
|
|
96
|
+
case 'R':
|
|
97
|
+
return 'renamed';
|
|
98
|
+
case 'C':
|
|
99
|
+
return 'copied';
|
|
100
|
+
case 'U':
|
|
101
|
+
return 'unmerged';
|
|
102
|
+
default:
|
|
103
|
+
return 'modified';
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Parse git log with custom format
|
|
108
|
+
* Format: %H|%h|%an|%ae|%aI|%s
|
|
109
|
+
*/
|
|
110
|
+
export function parseLogOutput(output, includeBody = false) {
|
|
111
|
+
if (!output.trim()) {
|
|
112
|
+
return [];
|
|
113
|
+
}
|
|
114
|
+
const commits = [];
|
|
115
|
+
const separator = includeBody ? 'END_COMMIT\n' : '\n';
|
|
116
|
+
const entries = output.split(separator).filter((e) => e.trim());
|
|
117
|
+
for (const entry of entries) {
|
|
118
|
+
const lines = entry.trim().split('\n');
|
|
119
|
+
if (lines.length === 0)
|
|
120
|
+
continue;
|
|
121
|
+
const firstLine = lines[0];
|
|
122
|
+
const parts = firstLine.split('|');
|
|
123
|
+
if (parts.length >= 6) {
|
|
124
|
+
const commit = {
|
|
125
|
+
hash: parts[0],
|
|
126
|
+
shortHash: parts[1],
|
|
127
|
+
author: parts[2],
|
|
128
|
+
authorEmail: parts[3],
|
|
129
|
+
date: parts[4],
|
|
130
|
+
message: parts.slice(5).join('|'), // Handle | in message
|
|
131
|
+
};
|
|
132
|
+
if (includeBody && lines.length > 1) {
|
|
133
|
+
commit.body = lines.slice(1).join('\n').trim();
|
|
134
|
+
}
|
|
135
|
+
commits.push(commit);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return commits;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Parse git diff --stat output
|
|
142
|
+
*/
|
|
143
|
+
export function parseDiffStat(output) {
|
|
144
|
+
const lines = output.split('\n');
|
|
145
|
+
const files = [];
|
|
146
|
+
let totalAdditions = 0;
|
|
147
|
+
let totalDeletions = 0;
|
|
148
|
+
for (const line of lines) {
|
|
149
|
+
// Match file stat lines: " path | 10 ++---"
|
|
150
|
+
const match = line.match(/^\s*(.+?)\s*\|\s*(\d+|Bin)/);
|
|
151
|
+
if (match) {
|
|
152
|
+
const path = match[1].trim();
|
|
153
|
+
const isBinary = match[2] === 'Bin';
|
|
154
|
+
let additions = 0;
|
|
155
|
+
let deletions = 0;
|
|
156
|
+
if (!isBinary) {
|
|
157
|
+
const plusCount = (line.match(/\+/g) || []).length;
|
|
158
|
+
const minusCount = (line.match(/-/g) || []).length;
|
|
159
|
+
additions = plusCount;
|
|
160
|
+
deletions = minusCount;
|
|
161
|
+
}
|
|
162
|
+
files.push({ path, additions, deletions, binary: isBinary });
|
|
163
|
+
totalAdditions += additions;
|
|
164
|
+
totalDeletions += deletions;
|
|
165
|
+
}
|
|
166
|
+
// Match summary line: " 3 files changed, 10 insertions(+), 5 deletions(-)"
|
|
167
|
+
const summaryMatch = line.match(/(\d+) files? changed(?:, (\d+) insertions?\(\+\))?(?:, (\d+) deletions?\(-\))?/);
|
|
168
|
+
if (summaryMatch) {
|
|
169
|
+
totalAdditions = parseInt(summaryMatch[2] || '0', 10);
|
|
170
|
+
totalDeletions = parseInt(summaryMatch[3] || '0', 10);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return { files, totalAdditions, totalDeletions };
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Parse git branch output
|
|
177
|
+
* Format: %(refname:short)|%(objectname:short)|%(upstream:short)|%(upstream:track,nobracket)
|
|
178
|
+
*/
|
|
179
|
+
export function parseBranchOutput(output, currentBranch) {
|
|
180
|
+
const lines = output.split('\n').filter((l) => l.trim());
|
|
181
|
+
const branches = [];
|
|
182
|
+
for (const line of lines) {
|
|
183
|
+
const parts = line.split('|');
|
|
184
|
+
if (parts.length < 2)
|
|
185
|
+
continue;
|
|
186
|
+
const name = parts[0].trim();
|
|
187
|
+
const lastCommit = parts[1]?.trim();
|
|
188
|
+
const upstream = parts[2]?.trim() || undefined;
|
|
189
|
+
const trackInfo = parts[3]?.trim();
|
|
190
|
+
let ahead;
|
|
191
|
+
let behind;
|
|
192
|
+
if (trackInfo) {
|
|
193
|
+
const aheadMatch = trackInfo.match(/ahead (\d+)/);
|
|
194
|
+
const behindMatch = trackInfo.match(/behind (\d+)/);
|
|
195
|
+
if (aheadMatch)
|
|
196
|
+
ahead = parseInt(aheadMatch[1], 10);
|
|
197
|
+
if (behindMatch)
|
|
198
|
+
behind = parseInt(behindMatch[1], 10);
|
|
199
|
+
}
|
|
200
|
+
branches.push({
|
|
201
|
+
name,
|
|
202
|
+
current: name === currentBranch,
|
|
203
|
+
upstream,
|
|
204
|
+
ahead,
|
|
205
|
+
behind,
|
|
206
|
+
lastCommit,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
return branches;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Parse git stash list output
|
|
213
|
+
* Format: stash@{0}|message|date
|
|
214
|
+
*/
|
|
215
|
+
export function parseStashList(output) {
|
|
216
|
+
if (!output.trim()) {
|
|
217
|
+
return [];
|
|
218
|
+
}
|
|
219
|
+
const lines = output.split('\n').filter((l) => l.trim());
|
|
220
|
+
const stashes = [];
|
|
221
|
+
for (const line of lines) {
|
|
222
|
+
const parts = line.split('|');
|
|
223
|
+
if (parts.length >= 3) {
|
|
224
|
+
const indexMatch = parts[0].match(/stash@\{(\d+)\}/);
|
|
225
|
+
if (indexMatch) {
|
|
226
|
+
stashes.push({
|
|
227
|
+
index: parseInt(indexMatch[1], 10),
|
|
228
|
+
message: parts[1],
|
|
229
|
+
date: parts[2],
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return stashes;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Detect language from text (simple heuristic)
|
|
238
|
+
*/
|
|
239
|
+
export function detectLanguage(text) {
|
|
240
|
+
const koreanPattern = /[가-힣]/;
|
|
241
|
+
return koreanPattern.test(text) ? 'ko' : 'en';
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Infer design decision category from text
|
|
245
|
+
*/
|
|
246
|
+
export function inferCategory(text, lang) {
|
|
247
|
+
const patterns = {
|
|
248
|
+
architecture: {
|
|
249
|
+
en: /architecture|system design|infrastructure|microservice|monolith/i,
|
|
250
|
+
ko: /아키텍처|시스템 설계|인프라|마이크로서비스/,
|
|
251
|
+
},
|
|
252
|
+
library: {
|
|
253
|
+
en: /library|package|dependency|npm|framework|sdk/i,
|
|
254
|
+
ko: /라이브러리|패키지|의존성|프레임워크/,
|
|
255
|
+
},
|
|
256
|
+
pattern: {
|
|
257
|
+
en: /pattern|design pattern|singleton|factory|observer|mvc|mvvm/i,
|
|
258
|
+
ko: /패턴|디자인 패턴|싱글톤|팩토리/,
|
|
259
|
+
},
|
|
260
|
+
implementation: {
|
|
261
|
+
en: /implement|feature|refactor|fix|optimize|improve/i,
|
|
262
|
+
ko: /구현|기능|리팩토링|수정|최적화|개선/,
|
|
263
|
+
},
|
|
264
|
+
};
|
|
265
|
+
for (const [category, langPatterns] of Object.entries(patterns)) {
|
|
266
|
+
if (langPatterns[lang].test(text)) {
|
|
267
|
+
return category;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return 'other';
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Calculate commit importance based on content
|
|
274
|
+
*/
|
|
275
|
+
export function calculateCommitImportance(commit, fullMessage) {
|
|
276
|
+
const highPatterns = /breaking|major|critical|important|architecture|migrate|security/i;
|
|
277
|
+
const mediumPatterns = /refactor|redesign|feature|implement|add|update/i;
|
|
278
|
+
if (highPatterns.test(fullMessage)) {
|
|
279
|
+
return 'high';
|
|
280
|
+
}
|
|
281
|
+
if (mediumPatterns.test(fullMessage)) {
|
|
282
|
+
return 'medium';
|
|
283
|
+
}
|
|
284
|
+
return 'low';
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=gitParsers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitParsers.js","sourceRoot":"","sources":["../../src/utils/gitParsers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiEH;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEnE,IAAI,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,QAA4B,CAAC;IACjC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,SAAS,GAAoB,EAAE,CAAC;IACtC,MAAM,SAAS,GAAoB,EAAE,CAAC;IAEtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,sBAAsB;QACtB,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACpC,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACrC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;YACtC,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACzC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC3C,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC/B,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClC,CAAC;YACD,SAAS;QACX,CAAC;QAED,kBAAkB;QAClB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7D,SAAS;QACX,CAAC;QAED,gBAAgB;QAChB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,SAAS;QACX,CAAC;QAED,qDAAqD;QACrD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAExD,MAAM,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAE7B,iBAAiB;YACjB,IAAI,WAAW,KAAK,GAAG,EAAE,CAAC;gBACxB,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI;oBACJ,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC;oBAClC,MAAM,EAAE,IAAI;oBACZ,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;YAED,mBAAmB;YACnB,IAAI,cAAc,KAAK,GAAG,EAAE,CAAC;gBAC3B,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI;oBACJ,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC;oBACrC,MAAM,EAAE,KAAK;iBACd,CAAC,CAAC;YACL,CAAC;YACD,SAAS;QACX,CAAC;QAED,mBAAmB;QACnB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACrC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACrF,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,GAAG;YACN,OAAO,UAAU,CAAC;QACpB,KAAK,GAAG;YACN,OAAO,OAAO,CAAC;QACjB,KAAK,GAAG;YACN,OAAO,SAAS,CAAC;QACnB,KAAK,GAAG;YACN,OAAO,SAAS,CAAC;QACnB,KAAK,GAAG;YACN,OAAO,QAAQ,CAAC;QAClB,KAAK,GAAG;YACN,OAAO,UAAU,CAAC;QACpB;YACE,OAAO,UAAU,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,cAAuB,KAAK;IACzE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAEhE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEjC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEnC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,MAAM,GAAc;gBACxB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;gBACd,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;gBACnB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;gBAChB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;gBACrB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;gBACd,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,sBAAsB;aAC1D,CAAC;YAEF,IAAI,WAAW,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACjD,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,4CAA4C;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACvD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC;YAEpC,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,SAAS,GAAG,CAAC,CAAC;YAElB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;gBACnD,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;gBACnD,SAAS,GAAG,SAAS,CAAC;gBACtB,SAAS,GAAG,UAAU,CAAC;YACzB,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC7D,cAAc,IAAI,SAAS,CAAC;YAC5B,cAAc,IAAI,SAAS,CAAC;QAC9B,CAAC;QAED,2EAA2E;QAC3E,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAC7B,gFAAgF,CACjF,CAAC;QACF,IAAI,YAAY,EAAE,CAAC;YACjB,cAAc,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YACtD,cAAc,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,aAAqB;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAE/B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;QAC/C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAEnC,IAAI,KAAyB,CAAC;QAC9B,IAAI,MAA0B,CAAC;QAE/B,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACpD,IAAI,UAAU;gBAAE,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpD,IAAI,WAAW;gBAAE,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI;YACJ,OAAO,EAAE,IAAI,KAAK,aAAa;YAC/B,QAAQ;YACR,KAAK;YACL,MAAM;YACN,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,OAAO,GAA4D,EAAE,CAAC;IAE5E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACrD,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAClC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;oBACjB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,aAAa,GAAG,OAAO,CAAC;IAC9B,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,IAAiB;IAEjB,MAAM,QAAQ,GAAG;QACf,YAAY,EAAE;YACZ,EAAE,EAAE,kEAAkE;YACtE,EAAE,EAAE,yBAAyB;SAC9B;QACD,OAAO,EAAE;YACP,EAAE,EAAE,+CAA+C;YACnD,EAAE,EAAE,qBAAqB;SAC1B;QACD,OAAO,EAAE;YACP,EAAE,EAAE,6DAA6D;YACjE,EAAE,EAAE,mBAAmB;SACxB;QACD,cAAc,EAAE;YACd,EAAE,EAAE,kDAAkD;YACtD,EAAE,EAAE,sBAAsB;SAC3B;KACF,CAAC;IAEF,KAAK,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChE,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,QAAqE,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAiB,EACjB,WAAmB;IAEnB,MAAM,YAAY,GAAG,kEAAkE,CAAC;IACxF,MAAM,cAAc,GAAG,iDAAiD,CAAC;IAEzE,IAAI,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACrC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibe-coding-mcp",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.12.0",
|
|
4
4
|
"description": "MCP server for automatically collecting, summarizing, documenting, and publishing vibe coding sessions",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -31,7 +31,8 @@
|
|
|
31
31
|
"github-wiki",
|
|
32
32
|
"claude",
|
|
33
33
|
"ai-coding",
|
|
34
|
-
"model-context-protocol"
|
|
34
|
+
"model-context-protocol",
|
|
35
|
+
"git"
|
|
35
36
|
],
|
|
36
37
|
"author": "MUSE-CODE-SPACE",
|
|
37
38
|
"license": "MIT",
|