model-mesh-codemap 1.1.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,253 @@
1
+ "use strict";
2
+ /**
3
+ * Core Codemap Generator
4
+ * Scans directories, extracts metadata, generates codemaps
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.CodemapGenerator = void 0;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const language_parsers_js_1 = require("./language-parsers.js");
44
+ const ignore_rules_js_1 = require("./ignore-rules.js");
45
+ class CodemapGenerator {
46
+ constructor(projectRoot, customConfig) {
47
+ this.projectRoot = projectRoot;
48
+ this.ignoreRules = new ignore_rules_js_1.IgnoreRules();
49
+ this.config = {
50
+ ignorePatterns: [],
51
+ maxFileSizeKB: 500,
52
+ languages: [
53
+ 'typescript',
54
+ 'javascript',
55
+ 'jsx',
56
+ 'tsx',
57
+ 'ruby',
58
+ 'erb',
59
+ 'json',
60
+ 'yaml',
61
+ 'yml',
62
+ 'css',
63
+ ],
64
+ extractSymbols: true,
65
+ followSymlinks: false,
66
+ ...customConfig,
67
+ };
68
+ }
69
+ async generate(folderPath) {
70
+ const startTime = Date.now();
71
+ const absolutePath = path.resolve(this.projectRoot, folderPath);
72
+ if (!fs.existsSync(absolutePath)) {
73
+ throw new Error(`Folder not found: ${absolutePath}`);
74
+ }
75
+ if (!fs.statSync(absolutePath).isDirectory()) {
76
+ throw new Error(`Not a directory: ${absolutePath}`);
77
+ }
78
+ console.log(`\nšŸ“ Scanning: ${folderPath}`);
79
+ const files = await this.scanDirectory(absolutePath);
80
+ const structure = await this.buildDirectoryTree(absolutePath);
81
+ const codemap = {
82
+ timestamp: new Date().toISOString(),
83
+ folderPath: absolutePath,
84
+ projectRoot: this.projectRoot,
85
+ relativePath: folderPath,
86
+ statistics: {
87
+ totalFiles: files.length,
88
+ totalLines: files.reduce((sum, f) => sum + f.lines, 0),
89
+ totalSymbols: files.reduce((sum, f) => sum + f.symbols.length, 0),
90
+ testFiles: files.filter(f => f.isTestFile).length,
91
+ languages: this.getLanguageStats(files),
92
+ },
93
+ files,
94
+ structure,
95
+ metadata: {
96
+ generatedBy: 'codemap-generator',
97
+ version: '1.0.0',
98
+ },
99
+ };
100
+ const duration = Date.now() - startTime;
101
+ console.log(`āœ… Codemap generated in ${duration}ms`);
102
+ console.log(` Files: ${codemap.statistics.totalFiles}`);
103
+ console.log(` Lines: ${codemap.statistics.totalLines}`);
104
+ console.log(` Symbols: ${codemap.statistics.totalSymbols}`);
105
+ console.log(` Languages: ${Object.entries(codemap.statistics.languages)
106
+ .map(([lang, count]) => `${lang} (${count})`)
107
+ .join(', ')}`);
108
+ return codemap;
109
+ }
110
+ async scanDirectory(dir) {
111
+ const files = [];
112
+ try {
113
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
114
+ for (const entry of entries) {
115
+ const fullPath = path.join(dir, entry.name);
116
+ const relativePath = path.relative(this.projectRoot, fullPath);
117
+ if (this.ignoreRules.shouldIgnore(relativePath)) {
118
+ continue;
119
+ }
120
+ try {
121
+ if (entry.isDirectory()) {
122
+ files.push(...(await this.scanDirectory(fullPath)));
123
+ }
124
+ else if (entry.isFile()) {
125
+ const metadata = await this.extractFileMetadata(fullPath);
126
+ if (metadata) {
127
+ files.push(metadata);
128
+ }
129
+ }
130
+ }
131
+ catch (error) {
132
+ console.warn(`āš ļø Skipped: ${relativePath}`);
133
+ }
134
+ }
135
+ }
136
+ catch (error) {
137
+ console.warn(`āš ļø Could not read directory: ${dir}`);
138
+ }
139
+ return files;
140
+ }
141
+ async extractFileMetadata(filePath) {
142
+ try {
143
+ const stats = fs.statSync(filePath);
144
+ const fileSizeKB = stats.size / 1024;
145
+ if (fileSizeKB > this.config.maxFileSizeKB) {
146
+ return null;
147
+ }
148
+ const ext = path.extname(filePath).toLowerCase();
149
+ const language = this.detectLanguage(ext);
150
+ if (!this.config.languages.includes(language)) {
151
+ return null;
152
+ }
153
+ const content = fs.readFileSync(filePath, 'utf-8');
154
+ const lines = content.split('\n').length;
155
+ const isTestFile = this.isTestFile(filePath);
156
+ const { imports, exports, symbols } = language_parsers_js_1.LanguageParser.parse(content, language);
157
+ return {
158
+ path: path.relative(this.projectRoot, filePath),
159
+ language,
160
+ size: stats.size,
161
+ imports,
162
+ exports,
163
+ symbols: this.config.extractSymbols ? symbols : [],
164
+ lines,
165
+ isTestFile,
166
+ };
167
+ }
168
+ catch (error) {
169
+ return null;
170
+ }
171
+ }
172
+ detectLanguage(ext) {
173
+ const languageMap = {
174
+ '.ts': 'typescript',
175
+ '.tsx': 'tsx',
176
+ '.js': 'javascript',
177
+ '.jsx': 'jsx',
178
+ '.rb': 'ruby',
179
+ '.erb': 'erb',
180
+ '.json': 'json',
181
+ '.yaml': 'yaml',
182
+ '.yml': 'yaml',
183
+ '.css': 'css',
184
+ '.scss': 'css',
185
+ '.less': 'css',
186
+ };
187
+ return languageMap[ext] || 'unknown';
188
+ }
189
+ isTestFile(filePath) {
190
+ const fileName = path.basename(filePath).toLowerCase();
191
+ const testPatterns = [
192
+ 'test',
193
+ 'spec',
194
+ '.test.',
195
+ '.spec.',
196
+ '__tests__',
197
+ 'fixtures',
198
+ ];
199
+ return testPatterns.some(pattern => fileName.includes(pattern));
200
+ }
201
+ getLanguageStats(files) {
202
+ const stats = {};
203
+ files.forEach(file => {
204
+ if (file.language !== 'unknown') {
205
+ stats[file.language] = (stats[file.language] || 0) + 1;
206
+ }
207
+ });
208
+ return stats;
209
+ }
210
+ async buildDirectoryTree(dir) {
211
+ const name = path.basename(dir);
212
+ const tree = {
213
+ name,
214
+ type: 'directory',
215
+ path: path.relative(this.projectRoot, dir),
216
+ children: [],
217
+ };
218
+ try {
219
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
220
+ for (const entry of entries) {
221
+ const fullPath = path.join(dir, entry.name);
222
+ const relativePath = path.relative(this.projectRoot, fullPath);
223
+ if (this.ignoreRules.shouldIgnore(relativePath)) {
224
+ continue;
225
+ }
226
+ try {
227
+ if (entry.isDirectory()) {
228
+ const childTree = await this.buildDirectoryTree(fullPath);
229
+ tree.children.push(childTree);
230
+ }
231
+ else if (entry.isFile()) {
232
+ const stats = fs.statSync(fullPath);
233
+ tree.children.push({
234
+ name: entry.name,
235
+ type: 'file',
236
+ path: relativePath,
237
+ size: stats.size,
238
+ });
239
+ }
240
+ }
241
+ catch (error) {
242
+ // Skip on error
243
+ }
244
+ }
245
+ }
246
+ catch (error) {
247
+ // Skip directory on error
248
+ }
249
+ return tree;
250
+ }
251
+ }
252
+ exports.CodemapGenerator = CodemapGenerator;
253
+ //# sourceMappingURL=codemap-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codemap-generator.js","sourceRoot":"","sources":["../src/codemap-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * CLI Interface for Codemap Generation
3
+ * Provides: claude codemap [folder1,folder2,...]
4
+ */
5
+ export declare class CodemapCLI {
6
+ private projectRoot;
7
+ private codemapsDir;
8
+ constructor(projectRoot: string);
9
+ private ensureCodemapsDir;
10
+ run(foldersArg?: string): Promise<void>;
11
+ /**
12
+ * Parse folder arguments (comma-separated list or range)
13
+ */
14
+ private parseFolderArguments;
15
+ private sanitizeFolderName;
16
+ private printSummary;
17
+ private printFrameworkDetection;
18
+ private detectFrameworks;
19
+ /**
20
+ * Print generation summary
21
+ */
22
+ private printGenerationSummary;
23
+ }
24
+ //# sourceMappingURL=codemap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codemap.d.ts","sourceRoot":"","sources":["../src/codemap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;IAM/B,OAAO,CAAC,iBAAiB;IAOnB,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiE7C;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,gBAAgB;IA8BxB;;OAEG;IACH,OAAO,CAAC,sBAAsB;CA0B/B"}
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+ /**
3
+ * CLI Interface for Codemap Generation
4
+ * Provides: claude codemap [folder1,folder2,...]
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.CodemapCLI = void 0;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const codemap_generator_js_1 = require("./codemap-generator.js");
44
+ const folder_selector_js_1 = require("./folder-selector.js");
45
+ class CodemapCLI {
46
+ constructor(projectRoot) {
47
+ this.projectRoot = projectRoot;
48
+ this.codemapsDir = path.join(projectRoot, '.claude', 'codemaps');
49
+ this.ensureCodemapsDir();
50
+ }
51
+ ensureCodemapsDir() {
52
+ if (!fs.existsSync(this.codemapsDir)) {
53
+ fs.mkdirSync(this.codemapsDir, { recursive: true });
54
+ console.log(`šŸ“ Created: .claude/codemaps/`);
55
+ }
56
+ }
57
+ async run(foldersArg) {
58
+ try {
59
+ console.log('šŸ” Codemap Generation Tool\n');
60
+ let foldersToScan;
61
+ // If folders provided as argument, validate them
62
+ if (foldersArg) {
63
+ foldersToScan = this.parseFolderArguments(foldersArg);
64
+ }
65
+ else {
66
+ // Interactive folder selection
67
+ const selector = new folder_selector_js_1.FolderSelector(this.projectRoot);
68
+ await selector.discoverFolders();
69
+ foldersToScan = await selector.selectFolders();
70
+ }
71
+ if (foldersToScan.length === 0) {
72
+ console.log('āŒ No folders to scan');
73
+ return;
74
+ }
75
+ // Show selected folders
76
+ const selector = new folder_selector_js_1.FolderSelector(this.projectRoot);
77
+ selector.displaySelection(foldersToScan);
78
+ // Generate codemaps for all selected folders
79
+ console.log('\nā³ Generating codemaps...\n');
80
+ const generator = new codemap_generator_js_1.CodemapGenerator(this.projectRoot);
81
+ const results = [];
82
+ for (const folder of foldersToScan) {
83
+ try {
84
+ const codemap = await generator.generate(folder.path);
85
+ const fileName = this.sanitizeFolderName(folder.path);
86
+ const outputPath = path.join(this.codemapsDir, `${fileName}.codemap.json`);
87
+ fs.writeFileSync(outputPath, JSON.stringify(codemap, null, 2));
88
+ console.log(`āœ… ${folder.name.padEnd(20)} → .claude/codemaps/${fileName}.codemap.json`);
89
+ this.printSummary(codemap);
90
+ this.printFrameworkDetection(codemap);
91
+ results.push({
92
+ folder: folder.name,
93
+ success: true,
94
+ message: `Generated for ${folder.path}`,
95
+ });
96
+ }
97
+ catch (error) {
98
+ console.error(`āŒ ${folder.name.padEnd(20)} → Error: ${error instanceof Error ? error.message : error}`);
99
+ results.push({
100
+ folder: folder.name,
101
+ success: false,
102
+ message: error instanceof Error ? error.message : 'Unknown error',
103
+ });
104
+ }
105
+ }
106
+ // Summary
107
+ this.printGenerationSummary(results);
108
+ }
109
+ catch (error) {
110
+ console.error(`āŒ Error: ${error instanceof Error ? error.message : error}`);
111
+ process.exit(1);
112
+ }
113
+ }
114
+ /**
115
+ * Parse folder arguments (comma-separated list or range)
116
+ */
117
+ parseFolderArguments(foldersArg) {
118
+ // If argument is provided, validate each folder
119
+ const folders = foldersArg.split(',').map(f => f.trim());
120
+ const result = [];
121
+ for (const folder of folders) {
122
+ const absolutePath = path.resolve(this.projectRoot, folder);
123
+ if (fs.existsSync(absolutePath) && fs.statSync(absolutePath).isDirectory()) {
124
+ result.push({
125
+ name: path.basename(folder),
126
+ path: folder,
127
+ isSelected: true,
128
+ });
129
+ }
130
+ else {
131
+ console.warn(`āš ļø Folder not found: ${folder}`);
132
+ }
133
+ }
134
+ return result;
135
+ }
136
+ sanitizeFolderName(folderPath) {
137
+ return folderPath
138
+ .split(path.sep)
139
+ .join('-')
140
+ .replace(/\./g, '')
141
+ .replace(/^-|-$/g, '')
142
+ .toLowerCase();
143
+ }
144
+ printSummary(codemap) {
145
+ console.log('\nšŸ“Š Codemap Summary:');
146
+ console.log(` Files scanned: ${codemap.statistics.totalFiles}`);
147
+ console.log(` Lines of code: ${codemap.statistics.totalLines.toLocaleString()}`);
148
+ console.log(` Symbols found: ${codemap.statistics.totalSymbols}`);
149
+ console.log(` Test files: ${codemap.statistics.testFiles}`);
150
+ console.log('\nšŸ—£ļø Languages:');
151
+ Object.entries(codemap.statistics.languages).forEach(([lang, count]) => {
152
+ console.log(` ${lang.padEnd(15)} ${count}`);
153
+ });
154
+ }
155
+ printFrameworkDetection(codemap) {
156
+ const frameworks = this.detectFrameworks(codemap);
157
+ if (frameworks.length > 0) {
158
+ console.log('\nšŸ”§ Detected frameworks:');
159
+ frameworks.forEach(fw => console.log(` • ${fw}`));
160
+ }
161
+ }
162
+ detectFrameworks(codemap) {
163
+ const frameworks = new Set();
164
+ // Check all imports for framework indicators
165
+ codemap.files.forEach(file => {
166
+ file.imports.forEach(imp => {
167
+ const lowerImp = imp.toLowerCase();
168
+ if (lowerImp.includes('rails') || lowerImp.includes('active'))
169
+ frameworks.add('Rails');
170
+ if (lowerImp.includes('react'))
171
+ frameworks.add('React');
172
+ if (lowerImp.includes('vue'))
173
+ frameworks.add('Vue');
174
+ if (lowerImp.includes('angular'))
175
+ frameworks.add('Angular');
176
+ if (lowerImp.includes('express'))
177
+ frameworks.add('Express');
178
+ if (lowerImp.includes('fastify'))
179
+ frameworks.add('Fastify');
180
+ if (lowerImp.includes('nest') || lowerImp.includes('nestjs'))
181
+ frameworks.add('NestJS');
182
+ if (lowerImp.includes('django'))
183
+ frameworks.add('Django');
184
+ if (lowerImp.includes('flask'))
185
+ frameworks.add('Flask');
186
+ if (lowerImp.includes('sinatra'))
187
+ frameworks.add('Sinatra');
188
+ });
189
+ // Check exports for common patterns
190
+ file.exports.forEach(exp => {
191
+ if (exp.includes('Controller') || exp.includes('Service'))
192
+ frameworks.add('Rails');
193
+ if (exp.includes('Component'))
194
+ frameworks.add('React');
195
+ });
196
+ });
197
+ return Array.from(frameworks).sort();
198
+ }
199
+ /**
200
+ * Print generation summary
201
+ */
202
+ printGenerationSummary(results) {
203
+ console.log('\n' + '='.repeat(70));
204
+ console.log('šŸ“‹ Generation Summary');
205
+ console.log('='.repeat(70));
206
+ const successful = results.filter(r => r.success).length;
207
+ const failed = results.filter(r => !r.success).length;
208
+ console.log(`\nāœ… Successful: ${successful}`);
209
+ console.log(`āŒ Failed: ${failed}`);
210
+ console.log(`šŸ“Š Total: ${results.length}`);
211
+ if (failed > 0) {
212
+ console.log('\nāš ļø Failed folders:');
213
+ results
214
+ .filter(r => !r.success)
215
+ .forEach(r => {
216
+ console.log(` • ${r.folder}: ${r.message}`);
217
+ });
218
+ }
219
+ console.log('\n' + '='.repeat(70));
220
+ console.log('✨ Codemaps ready in: .claude/codemaps/\n');
221
+ }
222
+ }
223
+ exports.CodemapCLI = CodemapCLI;
224
+ // CLI entry point
225
+ if (require.main === module) {
226
+ const projectRoot = process.cwd();
227
+ const folderArg = process.argv[2];
228
+ const cli = new CodemapCLI(projectRoot);
229
+ cli.run(folderArg);
230
+ }
231
+ //# sourceMappingURL=codemap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codemap.js","sourceRoot":"","sources":["../src/codemap.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,iEAA0D;AAC1D,6DAA0E;AAG1E,MAAa,UAAU;IAIrB,YAAY,WAAmB;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACjE,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACrC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,UAAmB;QAC3B,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAE5C,IAAI,aAA8B,CAAC;YAEnC,iDAAiD;YACjD,IAAI,UAAU,EAAE,CAAC;gBACf,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,+BAA+B;gBAC/B,MAAM,QAAQ,GAAG,IAAI,mCAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACtD,MAAM,QAAQ,CAAC,eAAe,EAAE,CAAC;gBACjC,aAAa,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,CAAC;YACjD,CAAC;YAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;gBACpC,OAAO;YACT,CAAC;YAED,wBAAwB;YACxB,MAAM,QAAQ,GAAG,IAAI,mCAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACtD,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;YAEzC,6CAA6C;YAC7C,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,IAAI,uCAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzD,MAAM,OAAO,GAAiE,EAAE,CAAC;YAEjF,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;gBACnC,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACtD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,QAAQ,eAAe,CAAC,CAAC;oBAE3E,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oBAE/D,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,uBAAuB,QAAQ,eAAe,CAAC,CAAC;oBACvF,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oBAC3B,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;oBAEtC,OAAO,CAAC,IAAI,CAAC;wBACX,MAAM,EAAE,MAAM,CAAC,IAAI;wBACnB,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,iBAAiB,MAAM,CAAC,IAAI,EAAE;qBACxC,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;oBACxG,OAAO,CAAC,IAAI,CAAC;wBACX,MAAM,EAAE,MAAM,CAAC,IAAI;wBACnB,OAAO,EAAE,KAAK;wBACd,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;qBAClE,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,UAAU;YACV,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,UAAkB;QAC7C,gDAAgD;QAChD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,MAAM,GAAoB,EAAE,CAAC;QAEnC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAC5D,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC3E,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC3B,IAAI,EAAE,MAAM;oBACZ,UAAU,EAAE,IAAI;iBACjB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,kBAAkB,CAAC,UAAkB;QAC3C,OAAO,UAAU;aACd,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;aACf,IAAI,CAAC,GAAG,CAAC;aACT,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;aAClB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;aACrB,WAAW,EAAE,CAAC;IACnB,CAAC;IAEO,YAAY,CAAC,OAAsB;QACzC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;QAE9D,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;YACrE,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,uBAAuB,CAAC,OAAsB;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACzC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,OAAsB;QAC7C,MAAM,UAAU,GAAgB,IAAI,GAAG,EAAE,CAAC;QAE1C,6CAA6C;QAC7C,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC3B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACzB,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;gBACnC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACvF,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACxD,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACpD,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;oBAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC5D,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;oBAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC5D,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;oBAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC5D,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACvF,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC1D,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACxD,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;oBAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;YAEH,oCAAoC;YACpC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACzB,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;oBACvD,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC1B,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;oBAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACzD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC;IAED;;OAEG;IACK,sBAAsB,CAC5B,OAAqE;QAErE,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE5B,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QACzD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAEtD,OAAO,CAAC,GAAG,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAE3C,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACrC,OAAO;iBACJ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;iBACvB,OAAO,CAAC,CAAC,CAAC,EAAE;gBACX,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;QACP,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAC1D,CAAC;CACF;AAnMD,gCAmMC;AAED,kBAAkB;AAClB,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IACxC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACrB,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Interactive Folder Selector
3
+ * Displays all project folders and allows user to select multiple ones
4
+ */
5
+ export interface ProjectFolder {
6
+ name: string;
7
+ path: string;
8
+ fileCount?: number;
9
+ isSelected: boolean;
10
+ }
11
+ export declare class FolderSelector {
12
+ private projectRoot;
13
+ private ignorePatterns;
14
+ private folders;
15
+ constructor(projectRoot: string);
16
+ /**
17
+ * Discover all folders in project root
18
+ */
19
+ discoverFolders(): Promise<ProjectFolder[]>;
20
+ /**
21
+ * Display folders and let user select
22
+ */
23
+ selectFolders(): Promise<ProjectFolder[]>;
24
+ /**
25
+ * Prompt user for selection
26
+ */
27
+ private promptSelection;
28
+ /**
29
+ * Parse user selection (supports: "1,2,3" or "1-3" or "all")
30
+ */
31
+ private parseSelection;
32
+ /**
33
+ * Count files in a folder (quick count, max 1000)
34
+ */
35
+ private countFiles;
36
+ /**
37
+ * Display selected folders summary
38
+ */
39
+ displaySelection(selected: ProjectFolder[]): void;
40
+ }
41
+ //# sourceMappingURL=folder-selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folder-selector.d.ts","sourceRoot":"","sources":["../src/folder-selector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,OAAO,CAAuB;gBAE1B,WAAW,EAAE,MAAM;IAwB/B;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IA0CjD;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAsB/C;;OAEG;YACW,eAAe;IAc7B;;OAEG;IACH,OAAO,CAAC,cAAc;IA4CtB;;OAEG;IACH,OAAO,CAAC,UAAU;IA8BlB;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI;CAYlD"}