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.
@@ -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.4.0',
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":"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"}
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;;;GAGG;AAEH,OAAO,EAAe,YAAY,EAAE,MAAM,uBAAuB,CAAC;AASlE,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;CACjE;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;CACpB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAkF1E;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkC7B,CAAC"}
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
- export function analyzeCodeTool(input) {
8
- const { code, language, filename = 'unknown', generateDiagrams = true, diagramTypes = ['all'] } = input;
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 visualization.',
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":"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"}
1
+ {"version":3,"file":"analyzeCode.js","sourceRoot":"","sources":["../../src/tools/analyzeCode.ts"],"names":[],"mappings":"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"}