vibe-coding-mcp 2.7.0 → 2.12.1

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 (40) hide show
  1. package/README.md +105 -4
  2. package/dist/__tests__/git.test.d.ts +2 -0
  3. package/dist/__tests__/git.test.d.ts.map +1 -0
  4. package/dist/__tests__/git.test.js +282 -0
  5. package/dist/__tests__/git.test.js.map +1 -0
  6. package/dist/core/schemas.d.ts +345 -0
  7. package/dist/core/schemas.d.ts.map +1 -1
  8. package/dist/core/schemas.js +128 -0
  9. package/dist/core/schemas.js.map +1 -1
  10. package/dist/stdio.js +32 -2
  11. package/dist/stdio.js.map +1 -1
  12. package/dist/tools/autoTag.d.ts +145 -0
  13. package/dist/tools/autoTag.d.ts.map +1 -0
  14. package/dist/tools/autoTag.js +475 -0
  15. package/dist/tools/autoTag.js.map +1 -0
  16. package/dist/tools/batch.d.ts +119 -0
  17. package/dist/tools/batch.d.ts.map +1 -0
  18. package/dist/tools/batch.js +459 -0
  19. package/dist/tools/batch.js.map +1 -0
  20. package/dist/tools/git.d.ts +226 -0
  21. package/dist/tools/git.d.ts.map +1 -0
  22. package/dist/tools/git.js +493 -0
  23. package/dist/tools/git.js.map +1 -0
  24. package/dist/tools/sessionStats.d.ts +129 -0
  25. package/dist/tools/sessionStats.d.ts.map +1 -0
  26. package/dist/tools/sessionStats.js +554 -0
  27. package/dist/tools/sessionStats.js.map +1 -0
  28. package/dist/tools/template.d.ts +127 -0
  29. package/dist/tools/template.d.ts.map +1 -0
  30. package/dist/tools/template.js +617 -0
  31. package/dist/tools/template.js.map +1 -0
  32. package/dist/utils/gitExecutor.d.ts +34 -0
  33. package/dist/utils/gitExecutor.d.ts.map +1 -0
  34. package/dist/utils/gitExecutor.js +95 -0
  35. package/dist/utils/gitExecutor.js.map +1 -0
  36. package/dist/utils/gitParsers.d.ts +90 -0
  37. package/dist/utils/gitParsers.d.ts.map +1 -0
  38. package/dist/utils/gitParsers.js +286 -0
  39. package/dist/utils/gitParsers.js.map +1 -0
  40. package/package.json +4 -2
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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"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * AI Auto-tagging Tool (v2.10)
3
+ * Automatically suggests and applies tags to sessions based on content analysis
4
+ */
5
+ import type { AutoTagInput } from '../core/schemas.js';
6
+ export type AutoTagAction = 'suggest' | 'apply' | 'train' | 'config';
7
+ interface TagSuggestion {
8
+ tag: string;
9
+ confidence: number;
10
+ reason: string;
11
+ category?: string;
12
+ }
13
+ interface TagConfig {
14
+ enableAutoTag: boolean;
15
+ defaultCategories: string[];
16
+ customPatterns: Array<{
17
+ pattern: string;
18
+ tags: string[];
19
+ }>;
20
+ }
21
+ export interface AutoTagOutput {
22
+ success: boolean;
23
+ action: AutoTagAction;
24
+ suggestions?: TagSuggestion[];
25
+ appliedTags?: string[];
26
+ sessionId?: string;
27
+ trained?: boolean;
28
+ patternsAdded?: number;
29
+ config?: TagConfig;
30
+ usedAI: boolean;
31
+ message?: string;
32
+ error?: string;
33
+ }
34
+ export declare function autoTagTool(input: AutoTagInput): Promise<AutoTagOutput>;
35
+ export declare const autoTagSchema: {
36
+ name: string;
37
+ description: string;
38
+ inputSchema: {
39
+ type: string;
40
+ properties: {
41
+ action: {
42
+ type: string;
43
+ enum: string[];
44
+ description: string;
45
+ };
46
+ sessionId: {
47
+ type: string;
48
+ description: string;
49
+ };
50
+ content: {
51
+ type: string;
52
+ description: string;
53
+ };
54
+ codeBlocks: {
55
+ type: string;
56
+ items: {
57
+ type: string;
58
+ properties: {
59
+ language: {
60
+ type: string;
61
+ };
62
+ code: {
63
+ type: string;
64
+ };
65
+ };
66
+ };
67
+ description: string;
68
+ };
69
+ maxTags: {
70
+ type: string;
71
+ description: string;
72
+ };
73
+ minConfidence: {
74
+ type: string;
75
+ description: string;
76
+ };
77
+ includeExisting: {
78
+ type: string;
79
+ description: string;
80
+ };
81
+ categories: {
82
+ type: string;
83
+ items: {
84
+ type: string;
85
+ };
86
+ description: string;
87
+ };
88
+ examples: {
89
+ type: string;
90
+ items: {
91
+ type: string;
92
+ properties: {
93
+ content: {
94
+ type: string;
95
+ };
96
+ tags: {
97
+ type: string;
98
+ items: {
99
+ type: string;
100
+ };
101
+ };
102
+ };
103
+ required: string[];
104
+ };
105
+ description: string;
106
+ };
107
+ enableAutoTag: {
108
+ type: string;
109
+ description: string;
110
+ };
111
+ defaultCategories: {
112
+ type: string;
113
+ items: {
114
+ type: string;
115
+ };
116
+ description: string;
117
+ };
118
+ customPatterns: {
119
+ type: string;
120
+ items: {
121
+ type: string;
122
+ properties: {
123
+ pattern: {
124
+ type: string;
125
+ };
126
+ tags: {
127
+ type: string;
128
+ items: {
129
+ type: string;
130
+ };
131
+ };
132
+ };
133
+ };
134
+ description: string;
135
+ };
136
+ useAI: {
137
+ type: string;
138
+ description: string;
139
+ };
140
+ };
141
+ required: string[];
142
+ };
143
+ };
144
+ export {};
145
+ //# sourceMappingURL=autoTag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoTag.d.ts","sourceRoot":"","sources":["../../src/tools/autoTag.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKvD,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;AAErE,UAAU,aAAa;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,SAAS;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IAGtB,WAAW,CAAC,EAAE,aAAa,EAAE,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,MAAM,CAAC,EAAE,SAAS,CAAC;IAGnB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA2LD,wBAAsB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAuP7E;AAGD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsFzB,CAAC"}
@@ -0,0 +1,475 @@
1
+ /**
2
+ * AI Auto-tagging Tool (v2.10)
3
+ * Automatically suggests and applies tags to sessions based on content analysis
4
+ */
5
+ import { createToolLogger } from '../core/logger.js';
6
+ import { getSession, updateSession } from '../core/sessionStorage.js';
7
+ import { isAIAvailable, getAnthropicClient } from '../core/ai.js';
8
+ const logger = createToolLogger('autoTag');
9
+ // Default patterns for tag detection
10
+ const DEFAULT_PATTERNS = [
11
+ // Language patterns
12
+ { patterns: [/typescript|\.ts\b/i], tags: ['typescript'], category: 'language' },
13
+ { patterns: [/javascript|\.js\b/i], tags: ['javascript'], category: 'language' },
14
+ { patterns: [/python|\.py\b/i], tags: ['python'], category: 'language' },
15
+ { patterns: [/go\s+|golang|\.go\b/i], tags: ['go'], category: 'language' },
16
+ { patterns: [/rust|\.rs\b/i], tags: ['rust'], category: 'language' },
17
+ { patterns: [/react|jsx|tsx/i], tags: ['react'], category: 'framework' },
18
+ { patterns: [/vue|\.vue\b/i], tags: ['vue'], category: 'framework' },
19
+ { patterns: [/angular/i], tags: ['angular'], category: 'framework' },
20
+ { patterns: [/next\.?js|nextjs/i], tags: ['nextjs'], category: 'framework' },
21
+ { patterns: [/express/i], tags: ['express'], category: 'framework' },
22
+ { patterns: [/fastapi/i], tags: ['fastapi'], category: 'framework' },
23
+ // Concept patterns
24
+ { patterns: [/auth|authentication|login|oauth|jwt/i], tags: ['authentication'], category: 'feature' },
25
+ { patterns: [/api|endpoint|rest|graphql/i], tags: ['api'], category: 'feature' },
26
+ { patterns: [/database|sql|mongodb|postgres|mysql/i], tags: ['database'], category: 'feature' },
27
+ { patterns: [/test|testing|jest|pytest|unittest/i], tags: ['testing'], category: 'practice' },
28
+ { patterns: [/deploy|ci\/cd|docker|kubernetes/i], tags: ['devops'], category: 'practice' },
29
+ { patterns: [/security|vulnerability|xss|csrf|injection/i], tags: ['security'], category: 'concern' },
30
+ { patterns: [/performance|optimization|cache|speed/i], tags: ['performance'], category: 'concern' },
31
+ { patterns: [/refactor|clean\s*code|improve/i], tags: ['refactoring'], category: 'activity' },
32
+ { patterns: [/bug|fix|issue|error|debug/i], tags: ['bugfix'], category: 'activity' },
33
+ { patterns: [/feature|implement|add|new/i], tags: ['feature'], category: 'activity' },
34
+ { patterns: [/design|architecture|pattern|structure/i], tags: ['design'], category: 'activity' },
35
+ { patterns: [/documentation|readme|docs/i], tags: ['documentation'], category: 'activity' },
36
+ // Korean patterns
37
+ { patterns: [/인증|로그인|OAuth/i], tags: ['authentication'], category: 'feature' },
38
+ { patterns: [/데이터베이스|DB|쿼리/i], tags: ['database'], category: 'feature' },
39
+ { patterns: [/테스트|검증/i], tags: ['testing'], category: 'practice' },
40
+ { patterns: [/배포|CI\/CD/i], tags: ['devops'], category: 'practice' },
41
+ { patterns: [/보안|취약점/i], tags: ['security'], category: 'concern' },
42
+ { patterns: [/성능|최적화|캐시/i], tags: ['performance'], category: 'concern' },
43
+ { patterns: [/리팩토링|개선/i], tags: ['refactoring'], category: 'activity' },
44
+ { patterns: [/버그|수정|오류/i], tags: ['bugfix'], category: 'activity' },
45
+ { patterns: [/기능|구현|추가/i], tags: ['feature'], category: 'activity' },
46
+ { patterns: [/설계|아키텍처|패턴/i], tags: ['design'], category: 'activity' },
47
+ ];
48
+ // In-memory config storage (in real implementation, this would be persisted)
49
+ let tagConfig = {
50
+ enableAutoTag: true,
51
+ defaultCategories: ['language', 'framework', 'feature', 'practice', 'concern', 'activity'],
52
+ customPatterns: [],
53
+ };
54
+ // Pattern-based tag detection
55
+ function detectTagsFromContent(content, codeBlocks, categories) {
56
+ const suggestions = [];
57
+ const foundTags = new Set();
58
+ // Combine all text for analysis
59
+ let fullText = content;
60
+ if (codeBlocks) {
61
+ codeBlocks.forEach((cb) => {
62
+ if (cb.language)
63
+ fullText += ` ${cb.language}`;
64
+ if (cb.code)
65
+ fullText += ` ${cb.code}`;
66
+ });
67
+ }
68
+ // Check default patterns
69
+ DEFAULT_PATTERNS.forEach(({ patterns, tags, category }) => {
70
+ if (categories && !categories.includes(category))
71
+ return;
72
+ patterns.forEach((pattern) => {
73
+ if (pattern.test(fullText)) {
74
+ tags.forEach((tag) => {
75
+ if (!foundTags.has(tag)) {
76
+ foundTags.add(tag);
77
+ suggestions.push({
78
+ tag,
79
+ confidence: 0.8,
80
+ reason: `Detected from pattern: ${pattern.source}`,
81
+ category,
82
+ });
83
+ }
84
+ });
85
+ }
86
+ });
87
+ });
88
+ // Check custom patterns
89
+ tagConfig.customPatterns.forEach(({ pattern, tags }) => {
90
+ try {
91
+ const regex = new RegExp(pattern, 'i');
92
+ if (regex.test(fullText)) {
93
+ tags.forEach((tag) => {
94
+ if (!foundTags.has(tag)) {
95
+ foundTags.add(tag);
96
+ suggestions.push({
97
+ tag,
98
+ confidence: 0.9,
99
+ reason: `Matched custom pattern: ${pattern}`,
100
+ category: 'custom',
101
+ });
102
+ }
103
+ });
104
+ }
105
+ }
106
+ catch {
107
+ // Invalid regex, skip
108
+ }
109
+ });
110
+ // Detect languages from code blocks
111
+ if (codeBlocks) {
112
+ codeBlocks.forEach((cb) => {
113
+ if (cb.language && !foundTags.has(cb.language)) {
114
+ foundTags.add(cb.language);
115
+ suggestions.push({
116
+ tag: cb.language,
117
+ confidence: 1.0,
118
+ reason: 'Detected from code block language',
119
+ category: 'language',
120
+ });
121
+ }
122
+ });
123
+ }
124
+ return suggestions.sort((a, b) => b.confidence - a.confidence);
125
+ }
126
+ // AI-based tag suggestion
127
+ async function suggestTagsWithAI(content, codeBlocks, maxTags = 5) {
128
+ const client = getAnthropicClient();
129
+ if (!client) {
130
+ throw new Error('AI client not available');
131
+ }
132
+ // Prepare context
133
+ let context = `Content: ${content.slice(0, 2000)}`;
134
+ if (codeBlocks && codeBlocks.length > 0) {
135
+ context += `\n\nCode blocks (${codeBlocks.length} total):\n`;
136
+ codeBlocks.slice(0, 3).forEach((cb, i) => {
137
+ context += `\n${i + 1}. Language: ${cb.language || 'unknown'}\n`;
138
+ context += `Code snippet: ${cb.code?.slice(0, 500) || 'N/A'}...\n`;
139
+ });
140
+ }
141
+ const response = await client.messages.create({
142
+ model: 'claude-sonnet-4-20250514',
143
+ max_tokens: 1024,
144
+ messages: [
145
+ {
146
+ role: 'user',
147
+ content: `Analyze this coding session content and suggest up to ${maxTags} relevant tags.
148
+
149
+ ${context}
150
+
151
+ Return ONLY a JSON array of tag suggestions with this format:
152
+ [{"tag": "tag-name", "confidence": 0.9, "reason": "brief reason", "category": "category-name"}]
153
+
154
+ Categories: language, framework, feature, practice, concern, activity, library, pattern
155
+ Confidence: 0.0 to 1.0
156
+ Keep tags lowercase, single words or hyphenated.`,
157
+ },
158
+ ],
159
+ });
160
+ // Parse response
161
+ const text = response.content[0].type === 'text' ? response.content[0].text : '';
162
+ const jsonMatch = text.match(/\[[\s\S]*?\]/);
163
+ if (!jsonMatch) {
164
+ return [];
165
+ }
166
+ try {
167
+ const parsed = JSON.parse(jsonMatch[0]);
168
+ return parsed.slice(0, maxTags);
169
+ }
170
+ catch {
171
+ return [];
172
+ }
173
+ }
174
+ // Main tool function
175
+ export async function autoTagTool(input) {
176
+ const { action, sessionId, content, codeBlocks, maxTags = 5, minConfidence = 0.7, includeExisting = true, categories, examples, enableAutoTag, defaultCategories, customPatterns, useAI = false, } = input;
177
+ logger.info('Auto-tag requested', { action, sessionId, useAI });
178
+ try {
179
+ switch (action) {
180
+ case 'suggest': {
181
+ let textContent = content || '';
182
+ let blocks = codeBlocks;
183
+ // If sessionId provided, get session content
184
+ if (sessionId) {
185
+ const session = await getSession(sessionId);
186
+ if (!session) {
187
+ return {
188
+ success: false,
189
+ action,
190
+ usedAI: false,
191
+ error: `Session not found: ${sessionId}`,
192
+ };
193
+ }
194
+ textContent = `${session.title}\n${session.summary}`;
195
+ if (session.codeContexts) {
196
+ blocks = [];
197
+ session.codeContexts.forEach((ctx) => {
198
+ if (ctx.codeBlocks) {
199
+ blocks.push(...ctx.codeBlocks);
200
+ }
201
+ textContent += `\n${ctx.conversationSummary}`;
202
+ });
203
+ }
204
+ }
205
+ if (!textContent && (!blocks || blocks.length === 0)) {
206
+ return {
207
+ success: false,
208
+ action,
209
+ usedAI: false,
210
+ error: 'No content provided for tagging. Provide content, codeBlocks, or sessionId.',
211
+ };
212
+ }
213
+ let suggestions;
214
+ let usedAIForSuggestion = false;
215
+ if (useAI && isAIAvailable()) {
216
+ try {
217
+ suggestions = await suggestTagsWithAI(textContent, blocks, maxTags);
218
+ usedAIForSuggestion = true;
219
+ // Supplement with pattern-based if AI returned few results
220
+ if (suggestions.length < maxTags) {
221
+ const patternSuggestions = detectTagsFromContent(textContent, blocks, categories);
222
+ const existingTags = new Set(suggestions.map((s) => s.tag));
223
+ patternSuggestions.forEach((ps) => {
224
+ if (!existingTags.has(ps.tag) && suggestions.length < maxTags) {
225
+ suggestions.push(ps);
226
+ }
227
+ });
228
+ }
229
+ }
230
+ catch (aiError) {
231
+ logger.warn('AI tagging failed, falling back to patterns', { error: aiError });
232
+ suggestions = detectTagsFromContent(textContent, blocks, categories);
233
+ }
234
+ }
235
+ else {
236
+ suggestions = detectTagsFromContent(textContent, blocks, categories);
237
+ }
238
+ // Filter by confidence
239
+ suggestions = suggestions
240
+ .filter((s) => s.confidence >= minConfidence)
241
+ .slice(0, maxTags);
242
+ return {
243
+ success: true,
244
+ action,
245
+ suggestions,
246
+ sessionId,
247
+ usedAI: usedAIForSuggestion,
248
+ message: `Found ${suggestions.length} tag suggestions`,
249
+ };
250
+ }
251
+ case 'apply': {
252
+ if (!sessionId) {
253
+ return {
254
+ success: false,
255
+ action,
256
+ usedAI: false,
257
+ error: 'sessionId is required for apply action',
258
+ };
259
+ }
260
+ const session = await getSession(sessionId);
261
+ if (!session) {
262
+ return {
263
+ success: false,
264
+ action,
265
+ usedAI: false,
266
+ error: `Session not found: ${sessionId}`,
267
+ };
268
+ }
269
+ // Get suggestions first
270
+ let textContent = `${session.title}\n${session.summary}`;
271
+ const blocks = [];
272
+ if (session.codeContexts) {
273
+ session.codeContexts.forEach((ctx) => {
274
+ if (ctx.codeBlocks) {
275
+ blocks.push(...ctx.codeBlocks);
276
+ }
277
+ textContent += `\n${ctx.conversationSummary}`;
278
+ });
279
+ }
280
+ let suggestions;
281
+ let usedAIForSuggestion = false;
282
+ if (useAI && isAIAvailable()) {
283
+ try {
284
+ suggestions = await suggestTagsWithAI(textContent, blocks, maxTags);
285
+ usedAIForSuggestion = true;
286
+ }
287
+ catch {
288
+ suggestions = detectTagsFromContent(textContent, blocks, categories);
289
+ }
290
+ }
291
+ else {
292
+ suggestions = detectTagsFromContent(textContent, blocks, categories);
293
+ }
294
+ // Filter and get tags to apply
295
+ const newTags = suggestions
296
+ .filter((s) => s.confidence >= minConfidence)
297
+ .slice(0, maxTags)
298
+ .map((s) => s.tag);
299
+ // Merge with existing tags if requested
300
+ const existingTags = session.tags || [];
301
+ const allTags = includeExisting
302
+ ? [...new Set([...existingTags, ...newTags])]
303
+ : [...new Set(newTags)];
304
+ // Update session
305
+ await updateSession(sessionId, { tags: allTags });
306
+ return {
307
+ success: true,
308
+ action,
309
+ suggestions,
310
+ appliedTags: allTags,
311
+ sessionId,
312
+ usedAI: usedAIForSuggestion,
313
+ message: `Applied ${newTags.length} new tags to session`,
314
+ };
315
+ }
316
+ case 'train': {
317
+ if (!examples || examples.length === 0) {
318
+ return {
319
+ success: false,
320
+ action,
321
+ usedAI: false,
322
+ error: 'examples are required for train action',
323
+ };
324
+ }
325
+ // Convert examples to patterns
326
+ let patternsAdded = 0;
327
+ examples.forEach(({ content: exContent, tags }) => {
328
+ // Extract keywords from content
329
+ const words = exContent
330
+ .toLowerCase()
331
+ .split(/\s+/)
332
+ .filter((w) => w.length > 3)
333
+ .slice(0, 5);
334
+ if (words.length > 0) {
335
+ const pattern = words.join('|');
336
+ tagConfig.customPatterns.push({ pattern, tags });
337
+ patternsAdded++;
338
+ }
339
+ });
340
+ return {
341
+ success: true,
342
+ action,
343
+ trained: true,
344
+ patternsAdded,
345
+ usedAI: false,
346
+ message: `Added ${patternsAdded} new patterns from ${examples.length} examples`,
347
+ };
348
+ }
349
+ case 'config': {
350
+ // Update config if values provided
351
+ if (enableAutoTag !== undefined) {
352
+ tagConfig.enableAutoTag = enableAutoTag;
353
+ }
354
+ if (defaultCategories) {
355
+ tagConfig.defaultCategories = defaultCategories;
356
+ }
357
+ if (customPatterns) {
358
+ tagConfig.customPatterns = customPatterns;
359
+ }
360
+ return {
361
+ success: true,
362
+ action,
363
+ config: { ...tagConfig },
364
+ usedAI: false,
365
+ message: 'Configuration updated successfully',
366
+ };
367
+ }
368
+ default:
369
+ return {
370
+ success: false,
371
+ action,
372
+ usedAI: false,
373
+ error: `Unknown action: ${action}`,
374
+ };
375
+ }
376
+ }
377
+ catch (error) {
378
+ logger.error('Auto-tag failed', error);
379
+ return {
380
+ success: false,
381
+ action,
382
+ usedAI: false,
383
+ error: error instanceof Error ? error.message : 'Unknown error',
384
+ };
385
+ }
386
+ }
387
+ // Schema for MCP registration
388
+ export const autoTagSchema = {
389
+ name: 'muse_auto_tag',
390
+ description: 'Automatically suggests and applies tags to sessions. Actions: suggest (recommend tags), apply (add tags to session), train (learn from examples), config (configure tagging behavior).',
391
+ inputSchema: {
392
+ type: 'object',
393
+ properties: {
394
+ action: {
395
+ type: 'string',
396
+ enum: ['suggest', 'apply', 'train', 'config'],
397
+ description: 'Action to perform',
398
+ },
399
+ sessionId: {
400
+ type: 'string',
401
+ description: 'Session ID to analyze or update (for suggest/apply)',
402
+ },
403
+ content: {
404
+ type: 'string',
405
+ description: 'Text content to analyze for tags',
406
+ },
407
+ codeBlocks: {
408
+ type: 'array',
409
+ items: {
410
+ type: 'object',
411
+ properties: {
412
+ language: { type: 'string' },
413
+ code: { type: 'string' },
414
+ },
415
+ },
416
+ description: 'Code blocks to analyze',
417
+ },
418
+ maxTags: {
419
+ type: 'number',
420
+ description: 'Maximum number of tags to suggest (default: 5)',
421
+ },
422
+ minConfidence: {
423
+ type: 'number',
424
+ description: 'Minimum confidence threshold 0-1 (default: 0.7)',
425
+ },
426
+ includeExisting: {
427
+ type: 'boolean',
428
+ description: 'Include existing tags when applying (default: true)',
429
+ },
430
+ categories: {
431
+ type: 'array',
432
+ items: { type: 'string' },
433
+ description: 'Filter suggestions by category',
434
+ },
435
+ examples: {
436
+ type: 'array',
437
+ items: {
438
+ type: 'object',
439
+ properties: {
440
+ content: { type: 'string' },
441
+ tags: { type: 'array', items: { type: 'string' } },
442
+ },
443
+ required: ['content', 'tags'],
444
+ },
445
+ description: 'Training examples for train action',
446
+ },
447
+ enableAutoTag: {
448
+ type: 'boolean',
449
+ description: 'Enable/disable auto-tagging (for config)',
450
+ },
451
+ defaultCategories: {
452
+ type: 'array',
453
+ items: { type: 'string' },
454
+ description: 'Default categories to use (for config)',
455
+ },
456
+ customPatterns: {
457
+ type: 'array',
458
+ items: {
459
+ type: 'object',
460
+ properties: {
461
+ pattern: { type: 'string' },
462
+ tags: { type: 'array', items: { type: 'string' } },
463
+ },
464
+ },
465
+ description: 'Custom patterns for tag detection (for config)',
466
+ },
467
+ useAI: {
468
+ type: 'boolean',
469
+ description: 'Use AI for tag suggestions (default: false)',
470
+ },
471
+ },
472
+ required: ['action'],
473
+ },
474
+ };
475
+ //# sourceMappingURL=autoTag.js.map