vibe-coding-mcp 2.4.0 → 2.6.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 +7 -0
- package/dist/__tests__/sessionHistory.test.d.ts +2 -0
- package/dist/__tests__/sessionHistory.test.d.ts.map +1 -0
- package/dist/__tests__/sessionHistory.test.js +229 -0
- package/dist/__tests__/sessionHistory.test.js.map +1 -0
- package/dist/core/schemas.d.ts +150 -31
- package/dist/core/schemas.d.ts.map +1 -1
- package/dist/core/schemas.js +37 -7
- package/dist/core/schemas.js.map +1 -1
- package/dist/core/sessionStorage.d.ts +95 -0
- package/dist/core/sessionStorage.d.ts.map +1 -0
- package/dist/core/sessionStorage.js +224 -0
- package/dist/core/sessionStorage.js.map +1 -0
- package/dist/stdio.js +9 -3
- package/dist/stdio.js.map +1 -1
- package/dist/tools/analyzeCode.d.ts +19 -1
- package/dist/tools/analyzeCode.d.ts.map +1 -1
- package/dist/tools/analyzeCode.js +32 -4
- package/dist/tools/analyzeCode.js.map +1 -1
- package/dist/tools/sessionHistory.d.ts +126 -0
- package/dist/tools/sessionHistory.d.ts.map +1 -0
- package/dist/tools/sessionHistory.js +245 -0
- package/dist/tools/sessionHistory.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 세션 스토리지 모듈
|
|
3
|
+
* 바이브 코딩 세션을 저장하고 조회하는 기능 제공
|
|
4
|
+
* v2.6: 세션 히스토리 기능
|
|
5
|
+
*/
|
|
6
|
+
export interface StoredSession {
|
|
7
|
+
id: string;
|
|
8
|
+
title: string;
|
|
9
|
+
summary: string;
|
|
10
|
+
createdAt: string;
|
|
11
|
+
updatedAt: string;
|
|
12
|
+
tags: string[];
|
|
13
|
+
codeContextCount: number;
|
|
14
|
+
designDecisionCount: number;
|
|
15
|
+
metadata?: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
export interface SessionData {
|
|
18
|
+
id: string;
|
|
19
|
+
title: string;
|
|
20
|
+
summary: string;
|
|
21
|
+
createdAt: string;
|
|
22
|
+
updatedAt: string;
|
|
23
|
+
tags: string[];
|
|
24
|
+
codeContexts: Array<{
|
|
25
|
+
sessionId: string;
|
|
26
|
+
timestamp: string;
|
|
27
|
+
codeBlocks: Array<{
|
|
28
|
+
language: string;
|
|
29
|
+
code: string;
|
|
30
|
+
filename?: string;
|
|
31
|
+
}>;
|
|
32
|
+
conversationSummary: string;
|
|
33
|
+
}>;
|
|
34
|
+
designDecisions: Array<{
|
|
35
|
+
id: string;
|
|
36
|
+
title: string;
|
|
37
|
+
description: string;
|
|
38
|
+
rationale: string;
|
|
39
|
+
category: string;
|
|
40
|
+
timestamp: string;
|
|
41
|
+
}>;
|
|
42
|
+
metadata?: Record<string, unknown>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Initialize storage directory
|
|
46
|
+
*/
|
|
47
|
+
export declare function initializeStorage(customDir?: string): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Save a session
|
|
50
|
+
*/
|
|
51
|
+
export declare function saveSession(data: Omit<SessionData, 'id' | 'createdAt' | 'updatedAt'>): Promise<SessionData>;
|
|
52
|
+
/**
|
|
53
|
+
* Update an existing session
|
|
54
|
+
*/
|
|
55
|
+
export declare function updateSession(sessionId: string, updates: Partial<Omit<SessionData, 'id' | 'createdAt'>>): Promise<SessionData>;
|
|
56
|
+
/**
|
|
57
|
+
* Get a session by ID
|
|
58
|
+
*/
|
|
59
|
+
export declare function getSession(sessionId: string): Promise<SessionData | null>;
|
|
60
|
+
/**
|
|
61
|
+
* Delete a session
|
|
62
|
+
*/
|
|
63
|
+
export declare function deleteSession(sessionId: string): Promise<boolean>;
|
|
64
|
+
/**
|
|
65
|
+
* List all sessions (summary only)
|
|
66
|
+
*/
|
|
67
|
+
export declare function listSessions(options?: {
|
|
68
|
+
limit?: number;
|
|
69
|
+
offset?: number;
|
|
70
|
+
tags?: string[];
|
|
71
|
+
sortBy?: 'createdAt' | 'updatedAt' | 'title';
|
|
72
|
+
sortOrder?: 'asc' | 'desc';
|
|
73
|
+
}): Promise<{
|
|
74
|
+
sessions: StoredSession[];
|
|
75
|
+
total: number;
|
|
76
|
+
}>;
|
|
77
|
+
/**
|
|
78
|
+
* Search sessions by keyword
|
|
79
|
+
*/
|
|
80
|
+
export declare function searchSessions(keyword: string, options?: {
|
|
81
|
+
limit?: number;
|
|
82
|
+
searchIn?: ('title' | 'summary' | 'tags')[];
|
|
83
|
+
}): Promise<StoredSession[]>;
|
|
84
|
+
/**
|
|
85
|
+
* Get storage statistics
|
|
86
|
+
*/
|
|
87
|
+
export declare function getStorageStats(): Promise<{
|
|
88
|
+
totalSessions: number;
|
|
89
|
+
totalCodeContexts: number;
|
|
90
|
+
totalDesignDecisions: number;
|
|
91
|
+
storageDir: string;
|
|
92
|
+
oldestSession?: string;
|
|
93
|
+
newestSession?: string;
|
|
94
|
+
}>;
|
|
95
|
+
//# sourceMappingURL=sessionStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionStorage.d.ts","sourceRoot":"","sources":["../../src/core/sessionStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 세션 스토리지 모듈
|
|
3
|
+
* 바이브 코딩 세션을 저장하고 조회하는 기능 제공
|
|
4
|
+
* v2.6: 세션 히스토리 기능
|
|
5
|
+
*/
|
|
6
|
+
import { promises as fs } from 'fs';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import { logger } from './logger.js';
|
|
9
|
+
const storageLogger = logger.child({ module: 'sessionStorage' });
|
|
10
|
+
// Default storage path
|
|
11
|
+
const DEFAULT_STORAGE_DIR = process.env.VIBE_CODING_STORAGE_DIR ||
|
|
12
|
+
path.join(process.env.HOME || process.env.USERPROFILE || '.', '.vibe-coding-mcp', 'sessions');
|
|
13
|
+
let storageDir = DEFAULT_STORAGE_DIR;
|
|
14
|
+
/**
|
|
15
|
+
* Initialize storage directory
|
|
16
|
+
*/
|
|
17
|
+
export async function initializeStorage(customDir) {
|
|
18
|
+
if (customDir) {
|
|
19
|
+
storageDir = customDir;
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
await fs.mkdir(storageDir, { recursive: true });
|
|
23
|
+
storageLogger.info('Storage initialized', { path: storageDir });
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
storageLogger.error('Failed to initialize storage', error);
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Generate unique session ID
|
|
32
|
+
*/
|
|
33
|
+
function generateSessionId() {
|
|
34
|
+
const timestamp = Date.now().toString(36);
|
|
35
|
+
const random = Math.random().toString(36).substring(2, 8);
|
|
36
|
+
return `session_${timestamp}_${random}`;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get session file path
|
|
40
|
+
*/
|
|
41
|
+
function getSessionPath(sessionId) {
|
|
42
|
+
return path.join(storageDir, `${sessionId}.json`);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Save a session
|
|
46
|
+
*/
|
|
47
|
+
export async function saveSession(data) {
|
|
48
|
+
await initializeStorage();
|
|
49
|
+
const sessionId = generateSessionId();
|
|
50
|
+
const now = new Date().toISOString();
|
|
51
|
+
const session = {
|
|
52
|
+
id: sessionId,
|
|
53
|
+
createdAt: now,
|
|
54
|
+
updatedAt: now,
|
|
55
|
+
...data
|
|
56
|
+
};
|
|
57
|
+
const filePath = getSessionPath(sessionId);
|
|
58
|
+
try {
|
|
59
|
+
await fs.writeFile(filePath, JSON.stringify(session, null, 2), 'utf-8');
|
|
60
|
+
storageLogger.info('Session saved', { sessionId, title: session.title });
|
|
61
|
+
return session;
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
storageLogger.error('Failed to save session', error);
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Update an existing session
|
|
70
|
+
*/
|
|
71
|
+
export async function updateSession(sessionId, updates) {
|
|
72
|
+
const existing = await getSession(sessionId);
|
|
73
|
+
if (!existing) {
|
|
74
|
+
throw new Error(`Session not found: ${sessionId}`);
|
|
75
|
+
}
|
|
76
|
+
const updated = {
|
|
77
|
+
...existing,
|
|
78
|
+
...updates,
|
|
79
|
+
updatedAt: new Date().toISOString()
|
|
80
|
+
};
|
|
81
|
+
const filePath = getSessionPath(sessionId);
|
|
82
|
+
try {
|
|
83
|
+
await fs.writeFile(filePath, JSON.stringify(updated, null, 2), 'utf-8');
|
|
84
|
+
storageLogger.info('Session updated', { sessionId });
|
|
85
|
+
return updated;
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
storageLogger.error('Failed to update session', error);
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get a session by ID
|
|
94
|
+
*/
|
|
95
|
+
export async function getSession(sessionId) {
|
|
96
|
+
const filePath = getSessionPath(sessionId);
|
|
97
|
+
try {
|
|
98
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
99
|
+
return JSON.parse(content);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
if (error.code === 'ENOENT') {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
storageLogger.error('Failed to read session', error);
|
|
106
|
+
throw error;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Delete a session
|
|
111
|
+
*/
|
|
112
|
+
export async function deleteSession(sessionId) {
|
|
113
|
+
const filePath = getSessionPath(sessionId);
|
|
114
|
+
try {
|
|
115
|
+
await fs.unlink(filePath);
|
|
116
|
+
storageLogger.info('Session deleted', { sessionId });
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
if (error.code === 'ENOENT') {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
storageLogger.error('Failed to delete session', error);
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* List all sessions (summary only)
|
|
129
|
+
*/
|
|
130
|
+
export async function listSessions(options) {
|
|
131
|
+
await initializeStorage();
|
|
132
|
+
const { limit = 50, offset = 0, tags, sortBy = 'updatedAt', sortOrder = 'desc' } = options || {};
|
|
133
|
+
try {
|
|
134
|
+
const files = await fs.readdir(storageDir);
|
|
135
|
+
const sessionFiles = files.filter(f => f.endsWith('.json'));
|
|
136
|
+
const sessions = [];
|
|
137
|
+
for (const file of sessionFiles) {
|
|
138
|
+
try {
|
|
139
|
+
const content = await fs.readFile(path.join(storageDir, file), 'utf-8');
|
|
140
|
+
const data = JSON.parse(content);
|
|
141
|
+
// Filter by tags if specified
|
|
142
|
+
if (tags && tags.length > 0) {
|
|
143
|
+
const hasTag = tags.some(tag => data.tags?.includes(tag));
|
|
144
|
+
if (!hasTag)
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
sessions.push({
|
|
148
|
+
id: data.id,
|
|
149
|
+
title: data.title,
|
|
150
|
+
summary: data.summary,
|
|
151
|
+
createdAt: data.createdAt,
|
|
152
|
+
updatedAt: data.updatedAt,
|
|
153
|
+
tags: data.tags || [],
|
|
154
|
+
codeContextCount: data.codeContexts?.length || 0,
|
|
155
|
+
designDecisionCount: data.designDecisions?.length || 0,
|
|
156
|
+
metadata: data.metadata
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
// Skip invalid files
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Sort
|
|
165
|
+
sessions.sort((a, b) => {
|
|
166
|
+
const aVal = a[sortBy] || '';
|
|
167
|
+
const bVal = b[sortBy] || '';
|
|
168
|
+
const cmp = aVal < bVal ? -1 : aVal > bVal ? 1 : 0;
|
|
169
|
+
return sortOrder === 'desc' ? -cmp : cmp;
|
|
170
|
+
});
|
|
171
|
+
// Paginate
|
|
172
|
+
const total = sessions.length;
|
|
173
|
+
const paginated = sessions.slice(offset, offset + limit);
|
|
174
|
+
return { sessions: paginated, total };
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
storageLogger.error('Failed to list sessions', error);
|
|
178
|
+
throw error;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Search sessions by keyword
|
|
183
|
+
*/
|
|
184
|
+
export async function searchSessions(keyword, options) {
|
|
185
|
+
const { limit = 20, searchIn = ['title', 'summary', 'tags'] } = options || {};
|
|
186
|
+
const lowerKeyword = keyword.toLowerCase();
|
|
187
|
+
const { sessions } = await listSessions({ limit: 1000 });
|
|
188
|
+
const matches = sessions.filter(session => {
|
|
189
|
+
if (searchIn.includes('title') && session.title.toLowerCase().includes(lowerKeyword)) {
|
|
190
|
+
return true;
|
|
191
|
+
}
|
|
192
|
+
if (searchIn.includes('summary') && session.summary.toLowerCase().includes(lowerKeyword)) {
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
if (searchIn.includes('tags') && session.tags.some(t => t.toLowerCase().includes(lowerKeyword))) {
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
return false;
|
|
199
|
+
});
|
|
200
|
+
return matches.slice(0, limit);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get storage statistics
|
|
204
|
+
*/
|
|
205
|
+
export async function getStorageStats() {
|
|
206
|
+
const { sessions, total } = await listSessions({ limit: 1000 });
|
|
207
|
+
let totalCodeContexts = 0;
|
|
208
|
+
let totalDesignDecisions = 0;
|
|
209
|
+
for (const session of sessions) {
|
|
210
|
+
totalCodeContexts += session.codeContextCount;
|
|
211
|
+
totalDesignDecisions += session.designDecisionCount;
|
|
212
|
+
}
|
|
213
|
+
// Sort by createdAt to find oldest/newest
|
|
214
|
+
const sorted = [...sessions].sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
|
|
215
|
+
return {
|
|
216
|
+
totalSessions: total,
|
|
217
|
+
totalCodeContexts,
|
|
218
|
+
totalDesignDecisions,
|
|
219
|
+
storageDir,
|
|
220
|
+
oldestSession: sorted[0]?.createdAt,
|
|
221
|
+
newestSession: sorted[sorted.length - 1]?.createdAt
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=sessionStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionStorage.js","sourceRoot":"","sources":["../../src/core/sessionStorage.ts"],"names":[],"mappings":"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"}
|
package/dist/stdio.js
CHANGED
|
@@ -8,7 +8,7 @@ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextpro
|
|
|
8
8
|
// Core
|
|
9
9
|
import { createErrorResponse, ToolError } from './core/errors.js';
|
|
10
10
|
import { initializeAI } from './core/ai.js';
|
|
11
|
-
import { validateInput, CollectCodeContextSchema, SummarizeDesignDecisionsSchema, GenerateDevDocumentSchema, NormalizeForPlatformSchema, PublishDocumentSchema, CreateSessionLogSchema, AnalyzeCodeSchema, } from './core/schemas.js';
|
|
11
|
+
import { validateInput, CollectCodeContextSchema, SummarizeDesignDecisionsSchema, GenerateDevDocumentSchema, NormalizeForPlatformSchema, PublishDocumentSchema, CreateSessionLogSchema, AnalyzeCodeSchema, SessionHistorySchema, } from './core/schemas.js';
|
|
12
12
|
// Tools
|
|
13
13
|
import { collectCodeContext, collectCodeContextSchema } from './tools/collectCodeContext.js';
|
|
14
14
|
import { summarizeDesignDecisions, summarizeDesignDecisionsSchema } from './tools/summarizeDesignDecisions.js';
|
|
@@ -17,6 +17,7 @@ import { normalizeForPlatform, normalizeForPlatformSchema } from './tools/normal
|
|
|
17
17
|
import { publishDocument, publishDocumentSchema } from './tools/publishDocument.js';
|
|
18
18
|
import { createSessionLog, createSessionLogSchema } from './tools/createSessionLog.js';
|
|
19
19
|
import { analyzeCodeTool, analyzeCodeSchema } from './tools/analyzeCode.js';
|
|
20
|
+
import { sessionHistoryTool, sessionHistorySchema } from './tools/sessionHistory.js';
|
|
20
21
|
// Tool handlers with validation
|
|
21
22
|
const toolHandlers = {
|
|
22
23
|
muse_collect_code_context: (args) => {
|
|
@@ -43,17 +44,21 @@ const toolHandlers = {
|
|
|
43
44
|
const validated = validateInput(CreateSessionLogSchema, args);
|
|
44
45
|
return createSessionLog(validated);
|
|
45
46
|
},
|
|
46
|
-
muse_analyze_code: (args) => {
|
|
47
|
+
muse_analyze_code: async (args) => {
|
|
47
48
|
const validated = validateInput(AnalyzeCodeSchema, args);
|
|
48
49
|
return analyzeCodeTool(validated);
|
|
49
50
|
},
|
|
51
|
+
muse_session_history: async (args) => {
|
|
52
|
+
const validated = validateInput(SessionHistorySchema, args);
|
|
53
|
+
return sessionHistoryTool(validated);
|
|
54
|
+
},
|
|
50
55
|
};
|
|
51
56
|
function isValidToolName(name) {
|
|
52
57
|
return name in toolHandlers;
|
|
53
58
|
}
|
|
54
59
|
const server = new Server({
|
|
55
60
|
name: 'vibe-coding-mcp',
|
|
56
|
-
version: '2.
|
|
61
|
+
version: '2.6.0',
|
|
57
62
|
}, {
|
|
58
63
|
capabilities: {
|
|
59
64
|
tools: {},
|
|
@@ -70,6 +75,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
70
75
|
publishDocumentSchema,
|
|
71
76
|
createSessionLogSchema,
|
|
72
77
|
analyzeCodeSchema,
|
|
78
|
+
sessionHistorySchema,
|
|
73
79
|
],
|
|
74
80
|
};
|
|
75
81
|
});
|
package/dist/stdio.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../src/stdio.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAE5C,OAAO;AACP,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAiB,MAAM,cAAc,CAAC;AAC3D,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,8BAA8B,EAC9B,yBAAyB,EACzB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../src/stdio.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 코드 분석 도구
|
|
3
3
|
* AST 파싱을 통한 고급 코드 분석 및 다이어그램 생성
|
|
4
|
+
* v2.5: AI 기반 심층 분석 추가
|
|
4
5
|
*/
|
|
5
6
|
import { CodeAnalysis } from '../utils/astParser.js';
|
|
6
7
|
export interface AnalyzeCodeInput {
|
|
@@ -9,6 +10,7 @@ export interface AnalyzeCodeInput {
|
|
|
9
10
|
filename?: string;
|
|
10
11
|
generateDiagrams?: boolean;
|
|
11
12
|
diagramTypes?: ('class' | 'flowchart' | 'dependency' | 'all')[];
|
|
13
|
+
useAI?: boolean;
|
|
12
14
|
}
|
|
13
15
|
export interface AnalyzeCodeOutput {
|
|
14
16
|
analysis: CodeAnalysis;
|
|
@@ -25,8 +27,20 @@ export interface AnalyzeCodeOutput {
|
|
|
25
27
|
dependencies: string[];
|
|
26
28
|
};
|
|
27
29
|
insights: string[];
|
|
30
|
+
usedAI: boolean;
|
|
31
|
+
aiAnalysis?: {
|
|
32
|
+
summary: string;
|
|
33
|
+
issues: Array<{
|
|
34
|
+
type: string;
|
|
35
|
+
severity: string;
|
|
36
|
+
description: string;
|
|
37
|
+
line?: number;
|
|
38
|
+
}>;
|
|
39
|
+
suggestions: string[];
|
|
40
|
+
metrics: Record<string, number | string>;
|
|
41
|
+
};
|
|
28
42
|
}
|
|
29
|
-
export declare function analyzeCodeTool(input: AnalyzeCodeInput): AnalyzeCodeOutput
|
|
43
|
+
export declare function analyzeCodeTool(input: AnalyzeCodeInput): Promise<AnalyzeCodeOutput>;
|
|
30
44
|
export declare const analyzeCodeSchema: {
|
|
31
45
|
name: string;
|
|
32
46
|
description: string;
|
|
@@ -58,6 +72,10 @@ export declare const analyzeCodeSchema: {
|
|
|
58
72
|
};
|
|
59
73
|
description: string;
|
|
60
74
|
};
|
|
75
|
+
useAI: {
|
|
76
|
+
type: string;
|
|
77
|
+
description: string;
|
|
78
|
+
};
|
|
61
79
|
};
|
|
62
80
|
required: string[];
|
|
63
81
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzeCode.d.ts","sourceRoot":"","sources":["../../src/tools/analyzeCode.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"analyzeCode.d.ts","sourceRoot":"","sources":["../../src/tools/analyzeCode.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAe,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAUlE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,KAAK,CAAC,EAAE,CAAC;IAChE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/C,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;IACF,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACtF,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;KAC1C,CAAC;CACH;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA0GzF;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsC7B,CAAC"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 코드 분석 도구
|
|
3
3
|
* AST 파싱을 통한 고급 코드 분석 및 다이어그램 생성
|
|
4
|
+
* v2.5: AI 기반 심층 분석 추가
|
|
4
5
|
*/
|
|
5
6
|
import { analyzeCode } from '../utils/astParser.js';
|
|
6
7
|
import { generateClassDiagram, generateFlowchart, generateDependencyGraph } from '../utils/mermaidGenerator.js';
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
import { isAIAvailable, analyzeCodeWithAI } from '../core/ai.js';
|
|
9
|
+
export async function analyzeCodeTool(input) {
|
|
10
|
+
const { code, language, filename = 'unknown', generateDiagrams = true, diagramTypes = ['all'], useAI = false } = input;
|
|
9
11
|
// AST 분석 수행
|
|
10
12
|
const analysis = analyzeCode(code, language);
|
|
11
13
|
// 요약 생성
|
|
@@ -68,16 +70,38 @@ export function analyzeCodeTool(input) {
|
|
|
68
70
|
});
|
|
69
71
|
}
|
|
70
72
|
}
|
|
73
|
+
// AI 분석 (선택적)
|
|
74
|
+
let aiAnalysis;
|
|
75
|
+
let usedAI = false;
|
|
76
|
+
if (useAI && isAIAvailable()) {
|
|
77
|
+
try {
|
|
78
|
+
aiAnalysis = await analyzeCodeWithAI(code, {
|
|
79
|
+
language: language || analysis.language,
|
|
80
|
+
analysisType: 'all',
|
|
81
|
+
outputLanguage: 'en'
|
|
82
|
+
});
|
|
83
|
+
usedAI = true;
|
|
84
|
+
// AI 인사이트를 기존 인사이트에 추가
|
|
85
|
+
if (aiAnalysis.suggestions) {
|
|
86
|
+
insights.push(...aiAnalysis.suggestions.map(s => `[AI] ${s}`));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// AI 분석 실패 시 무시하고 계속 진행
|
|
91
|
+
}
|
|
92
|
+
}
|
|
71
93
|
return {
|
|
72
94
|
analysis,
|
|
73
95
|
diagrams,
|
|
74
96
|
summary,
|
|
75
|
-
insights
|
|
97
|
+
insights,
|
|
98
|
+
usedAI,
|
|
99
|
+
aiAnalysis
|
|
76
100
|
};
|
|
77
101
|
}
|
|
78
102
|
export const analyzeCodeSchema = {
|
|
79
103
|
name: 'muse_analyze_code',
|
|
80
|
-
description: 'Performs deep code analysis using AST parsing. Extracts functions, classes, imports, and generates Mermaid diagrams for
|
|
104
|
+
description: 'Performs deep code analysis using AST parsing. Extracts functions, classes, imports, and generates Mermaid diagrams. Supports AI-powered analysis for quality insights, security issues, and improvement suggestions.',
|
|
81
105
|
inputSchema: {
|
|
82
106
|
type: 'object',
|
|
83
107
|
properties: {
|
|
@@ -105,6 +129,10 @@ export const analyzeCodeSchema = {
|
|
|
105
129
|
enum: ['class', 'flowchart', 'dependency', 'all']
|
|
106
130
|
},
|
|
107
131
|
description: 'Types of diagrams to generate (default: all)'
|
|
132
|
+
},
|
|
133
|
+
useAI: {
|
|
134
|
+
type: 'boolean',
|
|
135
|
+
description: 'Enable AI-powered analysis for quality, security, and suggestions (default: false, requires ANTHROPIC_API_KEY)'
|
|
108
136
|
}
|
|
109
137
|
},
|
|
110
138
|
required: ['code']
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzeCode.js","sourceRoot":"","sources":["../../src/tools/analyzeCode.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"analyzeCode.js","sourceRoot":"","sources":["../../src/tools/analyzeCode.ts"],"names":[],"mappings":"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"}
|