grok-cli-hurry-mode 1.0.1 → 1.0.2

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,573 @@
1
+ import { ASTParserTool } from "./ast-parser.js";
2
+ import { SymbolSearchTool } from "./symbol-search.js";
3
+ import { DependencyAnalyzerTool } from "./dependency-analyzer.js";
4
+ import fs from "fs-extra";
5
+ import path from "path";
6
+ export class CodeContextTool {
7
+ constructor() {
8
+ this.name = "code_context";
9
+ this.description = "Build intelligent code context, analyze relationships, and provide semantic understanding";
10
+ this.astParser = new ASTParserTool();
11
+ this.symbolSearch = new SymbolSearchTool();
12
+ this.dependencyAnalyzer = new DependencyAnalyzerTool();
13
+ }
14
+ async execute(args) {
15
+ try {
16
+ const { filePath, rootPath = process.cwd(), includeRelationships = true, includeMetrics = true, includeSemantics = true, maxRelatedFiles = 10, contextDepth = 2 } = args;
17
+ if (!filePath) {
18
+ throw new Error("File path is required");
19
+ }
20
+ if (!await fs.pathExists(filePath)) {
21
+ throw new Error(`File not found: ${filePath}`);
22
+ }
23
+ // Build comprehensive context
24
+ const context = await this.buildCodeContext(filePath, rootPath, includeRelationships, includeMetrics, includeSemantics, maxRelatedFiles, contextDepth);
25
+ return {
26
+ success: true,
27
+ output: JSON.stringify(context, null, 2)
28
+ };
29
+ }
30
+ catch (error) {
31
+ return {
32
+ success: false,
33
+ error: error instanceof Error ? error.message : String(error)
34
+ };
35
+ }
36
+ }
37
+ async buildCodeContext(filePath, rootPath, includeRelationships, includeMetrics, includeSemantics, maxRelatedFiles, contextDepth) {
38
+ // Parse the file
39
+ const parseResult = await this.astParser.execute({
40
+ filePath,
41
+ includeSymbols: true,
42
+ includeImports: true,
43
+ includeTree: false
44
+ });
45
+ if (!parseResult.success || !parseResult.output) {
46
+ throw new Error(`Failed to parse file: ${filePath}`);
47
+ }
48
+ const parsed = JSON.parse(parseResult.output);
49
+ if (!parsed.success) {
50
+ throw new Error(`Failed to parse file: ${filePath}`);
51
+ }
52
+ const symbols = parsed.result.symbols || [];
53
+ const imports = parsed.result.imports || [];
54
+ // Enhance symbols with context
55
+ const contextualSymbols = await this.enhanceSymbolsWithContext(symbols, filePath, rootPath);
56
+ // Analyze dependencies
57
+ const dependencies = await this.analyzeDependencies(imports, filePath, rootPath);
58
+ // Build relationships
59
+ let relationships = [];
60
+ if (includeRelationships) {
61
+ relationships = await this.buildCodeRelationships(filePath, contextualSymbols, dependencies, rootPath, maxRelatedFiles);
62
+ }
63
+ // Analyze semantics
64
+ let semanticContext = {
65
+ purpose: 'unknown',
66
+ domain: [],
67
+ patterns: [],
68
+ complexity: { cyclomatic: 0, cognitive: 0, nesting: 0, dependencies: 0 },
69
+ quality: { maintainability: 0, readability: 0, testability: 0, reusability: 0 }
70
+ };
71
+ if (includeSemantics) {
72
+ semanticContext = await this.analyzeSemanticContext(filePath, contextualSymbols, dependencies);
73
+ }
74
+ // Calculate metrics
75
+ let codeMetrics = {
76
+ linesOfCode: 0,
77
+ cyclomaticComplexity: 0,
78
+ cognitiveComplexity: 0,
79
+ maintainabilityIndex: 0,
80
+ technicalDebt: 0
81
+ };
82
+ if (includeMetrics) {
83
+ codeMetrics = await this.calculateCodeMetrics(filePath, contextualSymbols);
84
+ }
85
+ return {
86
+ filePath: path.relative(rootPath, filePath),
87
+ symbols: contextualSymbols,
88
+ dependencies,
89
+ relationships,
90
+ semanticContext,
91
+ codeMetrics
92
+ };
93
+ }
94
+ async enhanceSymbolsWithContext(symbols, filePath, rootPath) {
95
+ const enhanced = [];
96
+ for (const symbol of symbols) {
97
+ // Find related symbols
98
+ const relatedSymbols = await this.findRelatedSymbols(symbol, symbols, filePath, rootPath);
99
+ // Analyze usage patterns
100
+ const usagePatterns = await this.analyzeUsagePatterns(symbol, filePath);
101
+ // Generate semantic tags
102
+ const semanticTags = this.generateSemanticTags(symbol, filePath);
103
+ const contextualSymbol = {
104
+ ...symbol,
105
+ context: {
106
+ parentClass: this.findParentClass(symbol, symbols),
107
+ parentFunction: this.findParentFunction(symbol, symbols),
108
+ relatedSymbols,
109
+ usagePatterns,
110
+ semanticTags
111
+ }
112
+ };
113
+ enhanced.push(contextualSymbol);
114
+ }
115
+ return enhanced;
116
+ }
117
+ async findRelatedSymbols(symbol, allSymbols, filePath, rootPath) {
118
+ const related = [];
119
+ // Find symbols in same class/scope
120
+ const sameScope = allSymbols.filter(s => s !== symbol && s.scope === symbol.scope);
121
+ related.push(...sameScope.map(s => s.name));
122
+ // Search for similar symbols across project
123
+ try {
124
+ const searchResult = await this.symbolSearch.findSimilarSymbols(symbol.name, 0.7);
125
+ const similarNames = searchResult
126
+ .filter(ref => ref.filePath !== filePath)
127
+ .slice(0, 5)
128
+ .map(ref => ref.symbol.name);
129
+ related.push(...similarNames);
130
+ }
131
+ catch (error) {
132
+ // Skip if search fails
133
+ }
134
+ return [...new Set(related)];
135
+ }
136
+ async analyzeUsagePatterns(symbol, filePath) {
137
+ const patterns = [];
138
+ try {
139
+ const content = await fs.readFile(filePath, 'utf-8');
140
+ const lines = content.split('\n');
141
+ // Simple pattern analysis
142
+ let callCount = 0;
143
+ let assignmentCount = 0;
144
+ let returnCount = 0;
145
+ for (const line of lines) {
146
+ if (line.includes(`${symbol.name}(`))
147
+ callCount++;
148
+ if (line.includes(`= ${symbol.name}`) || line.includes(`const ${symbol.name}`))
149
+ assignmentCount++;
150
+ if (line.includes(`return ${symbol.name}`))
151
+ returnCount++;
152
+ }
153
+ if (callCount > 0) {
154
+ patterns.push({
155
+ pattern: 'function_call',
156
+ frequency: callCount,
157
+ contexts: ['invocation']
158
+ });
159
+ }
160
+ if (assignmentCount > 0) {
161
+ patterns.push({
162
+ pattern: 'assignment',
163
+ frequency: assignmentCount,
164
+ contexts: ['declaration', 'assignment']
165
+ });
166
+ }
167
+ if (returnCount > 0) {
168
+ patterns.push({
169
+ pattern: 'return_value',
170
+ frequency: returnCount,
171
+ contexts: ['return']
172
+ });
173
+ }
174
+ }
175
+ catch (error) {
176
+ // Skip if file read fails
177
+ }
178
+ return patterns;
179
+ }
180
+ generateSemanticTags(symbol, filePath) {
181
+ const tags = [];
182
+ // Basic type tag
183
+ tags.push(symbol.type);
184
+ // Name-based semantic analysis
185
+ const name = symbol.name.toLowerCase();
186
+ if (name.includes('test') || name.includes('spec')) {
187
+ tags.push('test');
188
+ }
189
+ if (name.includes('util') || name.includes('helper')) {
190
+ tags.push('utility');
191
+ }
192
+ if (name.includes('config') || name.includes('setting')) {
193
+ tags.push('configuration');
194
+ }
195
+ if (name.includes('api') || name.includes('service')) {
196
+ tags.push('api');
197
+ }
198
+ if (name.includes('component') || name.includes('widget')) {
199
+ tags.push('ui');
200
+ }
201
+ if (name.includes('model') || name.includes('entity')) {
202
+ tags.push('model');
203
+ }
204
+ if (name.includes('controller') || name.includes('handler')) {
205
+ tags.push('controller');
206
+ }
207
+ // File path-based tags
208
+ const fileName = path.basename(filePath);
209
+ if (fileName.includes('test')) {
210
+ tags.push('test');
211
+ }
212
+ if (fileName.includes('mock')) {
213
+ tags.push('mock');
214
+ }
215
+ // Async/await patterns
216
+ if (symbol.isAsync) {
217
+ tags.push('async');
218
+ }
219
+ // Access modifiers
220
+ if (symbol.accessibility) {
221
+ tags.push(symbol.accessibility);
222
+ }
223
+ return [...new Set(tags)];
224
+ }
225
+ findParentClass(symbol, allSymbols) {
226
+ const classSymbols = allSymbols.filter(s => s.type === 'class');
227
+ for (const classSymbol of classSymbols) {
228
+ if (symbol.startPosition.row >= classSymbol.startPosition.row &&
229
+ symbol.endPosition.row <= classSymbol.endPosition.row &&
230
+ symbol !== classSymbol) {
231
+ return classSymbol.name;
232
+ }
233
+ }
234
+ return undefined;
235
+ }
236
+ findParentFunction(symbol, allSymbols) {
237
+ const functionSymbols = allSymbols.filter(s => s.type === 'function' || s.type === 'method');
238
+ for (const funcSymbol of functionSymbols) {
239
+ if (symbol.startPosition.row >= funcSymbol.startPosition.row &&
240
+ symbol.endPosition.row <= funcSymbol.endPosition.row &&
241
+ symbol !== funcSymbol) {
242
+ return funcSymbol.name;
243
+ }
244
+ }
245
+ return undefined;
246
+ }
247
+ async analyzeDependencies(imports, filePath, rootPath) {
248
+ const dependencies = [];
249
+ for (const importInfo of imports) {
250
+ const type = this.categorizeImport(importInfo.source);
251
+ const importedSymbols = importInfo.specifiers?.map((spec) => spec.name) || [];
252
+ dependencies.push({
253
+ source: importInfo.source,
254
+ type,
255
+ usage: 'direct',
256
+ importedSymbols,
257
+ usageContext: [],
258
+ isCircular: false // TODO: Check with dependency analyzer
259
+ });
260
+ }
261
+ return dependencies;
262
+ }
263
+ categorizeImport(source) {
264
+ if (source.startsWith('.') || source.startsWith('/')) {
265
+ return 'internal';
266
+ }
267
+ const builtinModules = ['fs', 'path', 'util', 'crypto', 'http', 'https', 'os', 'url'];
268
+ if (builtinModules.includes(source)) {
269
+ return 'builtin';
270
+ }
271
+ return 'external';
272
+ }
273
+ async buildCodeRelationships(filePath, symbols, dependencies, rootPath, maxRelatedFiles) {
274
+ const relationships = [];
275
+ // Symbol relationships within file
276
+ for (const symbol of symbols) {
277
+ for (const relatedName of symbol.context.relatedSymbols) {
278
+ const relatedSymbol = symbols.find(s => s.name === relatedName);
279
+ if (relatedSymbol) {
280
+ relationships.push({
281
+ type: 'usage',
282
+ source: symbol.name,
283
+ target: relatedSymbol.name,
284
+ strength: 0.8,
285
+ description: `${symbol.name} uses ${relatedSymbol.name}`,
286
+ evidence: [`Same file: ${path.basename(filePath)}`]
287
+ });
288
+ }
289
+ }
290
+ }
291
+ // Dependency relationships
292
+ for (const dep of dependencies) {
293
+ if (dep.type === 'internal') {
294
+ relationships.push({
295
+ type: 'dependency',
296
+ source: path.basename(filePath),
297
+ target: dep.source,
298
+ strength: 0.9,
299
+ description: `File depends on ${dep.source}`,
300
+ evidence: [`Import: ${dep.importedSymbols.join(', ')}`]
301
+ });
302
+ }
303
+ }
304
+ return relationships;
305
+ }
306
+ async analyzeSemanticContext(filePath, symbols, dependencies) {
307
+ const fileName = path.basename(filePath);
308
+ const content = await fs.readFile(filePath, 'utf-8');
309
+ // Determine purpose
310
+ const purpose = this.inferPurpose(fileName, symbols, content);
311
+ // Extract domain
312
+ const domain = this.extractDomain(filePath, symbols, dependencies);
313
+ // Detect patterns
314
+ const patterns = this.detectDesignPatterns(content, symbols);
315
+ // Calculate complexity
316
+ const complexity = this.calculateComplexityMetrics(content, symbols);
317
+ // Assess quality
318
+ const quality = this.assessQuality(content, symbols, dependencies);
319
+ return {
320
+ purpose,
321
+ domain,
322
+ patterns,
323
+ complexity,
324
+ quality
325
+ };
326
+ }
327
+ inferPurpose(fileName, symbols, content) {
328
+ const name = fileName.toLowerCase();
329
+ if (name.includes('test') || name.includes('spec'))
330
+ return 'testing';
331
+ if (name.includes('config'))
332
+ return 'configuration';
333
+ if (name.includes('util') || name.includes('helper'))
334
+ return 'utility';
335
+ if (name.includes('service'))
336
+ return 'service';
337
+ if (name.includes('component'))
338
+ return 'ui_component';
339
+ if (name.includes('model'))
340
+ return 'data_model';
341
+ if (name.includes('controller'))
342
+ return 'controller';
343
+ if (name.includes('router') || name.includes('route'))
344
+ return 'routing';
345
+ // Analyze symbol types
346
+ const functionCount = symbols.filter(s => s.type === 'function').length;
347
+ const classCount = symbols.filter(s => s.type === 'class').length;
348
+ const interfaceCount = symbols.filter(s => s.type === 'interface').length;
349
+ if (interfaceCount > functionCount && interfaceCount > classCount)
350
+ return 'type_definitions';
351
+ if (classCount > functionCount)
352
+ return 'object_oriented';
353
+ if (functionCount > 0)
354
+ return 'functional';
355
+ return 'unknown';
356
+ }
357
+ extractDomain(filePath, symbols, dependencies) {
358
+ const domains = [];
359
+ const pathParts = filePath.split(path.sep);
360
+ // Extract from path
361
+ for (const part of pathParts) {
362
+ if (['auth', 'user', 'authentication'].includes(part.toLowerCase())) {
363
+ domains.push('authentication');
364
+ }
365
+ if (['api', 'rest', 'graphql'].includes(part.toLowerCase())) {
366
+ domains.push('api');
367
+ }
368
+ if (['ui', 'component', 'view'].includes(part.toLowerCase())) {
369
+ domains.push('ui');
370
+ }
371
+ if (['data', 'model', 'database'].includes(part.toLowerCase())) {
372
+ domains.push('data');
373
+ }
374
+ }
375
+ // Extract from dependencies
376
+ for (const dep of dependencies) {
377
+ if (dep.source.includes('react'))
378
+ domains.push('react');
379
+ if (dep.source.includes('express'))
380
+ domains.push('web_server');
381
+ if (dep.source.includes('database') || dep.source.includes('sql'))
382
+ domains.push('database');
383
+ if (dep.source.includes('test'))
384
+ domains.push('testing');
385
+ }
386
+ return [...new Set(domains)];
387
+ }
388
+ detectDesignPatterns(content, symbols) {
389
+ const patterns = [];
390
+ // Singleton pattern detection
391
+ if (content.includes('getInstance') && symbols.some(s => s.type === 'class')) {
392
+ patterns.push({
393
+ name: 'Singleton',
394
+ confidence: 0.7,
395
+ evidence: ['getInstance method found'],
396
+ location: { startLine: 0, endLine: 0 }
397
+ });
398
+ }
399
+ // Factory pattern detection
400
+ if (content.includes('create') && symbols.some(s => s.name.toLowerCase().includes('factory'))) {
401
+ patterns.push({
402
+ name: 'Factory',
403
+ confidence: 0.8,
404
+ evidence: ['Factory class with create method'],
405
+ location: { startLine: 0, endLine: 0 }
406
+ });
407
+ }
408
+ // Observer pattern detection
409
+ if (content.includes('subscribe') || content.includes('addEventListener')) {
410
+ patterns.push({
411
+ name: 'Observer',
412
+ confidence: 0.6,
413
+ evidence: ['Event subscription methods found'],
414
+ location: { startLine: 0, endLine: 0 }
415
+ });
416
+ }
417
+ return patterns;
418
+ }
419
+ calculateComplexityMetrics(content, symbols) {
420
+ const lines = content.split('\n');
421
+ // Simple complexity calculations
422
+ let cyclomatic = 1; // Base complexity
423
+ let cognitive = 0;
424
+ let maxNesting = 0;
425
+ let currentNesting = 0;
426
+ for (const line of lines) {
427
+ const trimmed = line.trim();
428
+ // Cyclomatic complexity
429
+ if (trimmed.includes('if') || trimmed.includes('while') || trimmed.includes('for') ||
430
+ trimmed.includes('switch') || trimmed.includes('catch')) {
431
+ cyclomatic++;
432
+ }
433
+ // Nesting level
434
+ if (trimmed.includes('{'))
435
+ currentNesting++;
436
+ if (trimmed.includes('}'))
437
+ currentNesting--;
438
+ maxNesting = Math.max(maxNesting, currentNesting);
439
+ // Cognitive complexity (simplified)
440
+ if (trimmed.includes('if') || trimmed.includes('while') || trimmed.includes('for')) {
441
+ cognitive += currentNesting + 1;
442
+ }
443
+ }
444
+ return {
445
+ cyclomatic,
446
+ cognitive,
447
+ nesting: maxNesting,
448
+ dependencies: symbols.length
449
+ };
450
+ }
451
+ assessQuality(content, symbols, dependencies) {
452
+ const lines = content.split('\n').filter(line => line.trim().length > 0);
453
+ const commentLines = lines.filter(line => line.trim().startsWith('//') || line.trim().startsWith('*'));
454
+ // Simple quality metrics
455
+ const commentRatio = commentLines.length / lines.length;
456
+ const averageLineLength = lines.reduce((sum, line) => sum + line.length, 0) / lines.length;
457
+ const functionCount = symbols.filter(s => s.type === 'function').length;
458
+ const classCount = symbols.filter(s => s.type === 'class').length;
459
+ const maintainability = Math.min(1, commentRatio * 2 + (functionCount > 0 ? 0.3 : 0));
460
+ const readability = Math.max(0, 1 - (averageLineLength - 50) / 100);
461
+ const testability = functionCount > classCount ? 0.8 : 0.5;
462
+ const reusability = dependencies.filter(d => d.type === 'external').length > 0 ? 0.7 : 0.4;
463
+ return {
464
+ maintainability: Math.max(0, Math.min(1, maintainability)),
465
+ readability: Math.max(0, Math.min(1, readability)),
466
+ testability: Math.max(0, Math.min(1, testability)),
467
+ reusability: Math.max(0, Math.min(1, reusability))
468
+ };
469
+ }
470
+ async calculateCodeMetrics(filePath, symbols) {
471
+ const content = await fs.readFile(filePath, 'utf-8');
472
+ const lines = content.split('\n');
473
+ const codeLines = lines.filter(line => line.trim().length > 0 && !line.trim().startsWith('//'));
474
+ // Calculate basic metrics
475
+ const linesOfCode = codeLines.length;
476
+ const cyclomaticComplexity = this.calculateCyclomaticComplexity(content);
477
+ const cognitiveComplexity = this.calculateCognitiveComplexity(content);
478
+ // Maintainability Index (simplified Microsoft formula)
479
+ const averageLineLength = codeLines.reduce((sum, line) => sum + line.length, 0) / codeLines.length;
480
+ const maintainabilityIndex = Math.max(0, 171 - 5.2 * Math.log(averageLineLength) - 0.23 * cyclomaticComplexity - 16.2 * Math.log(linesOfCode));
481
+ // Technical debt estimation (simplified)
482
+ const technicalDebt = (cyclomaticComplexity - 10) * 0.1 + (cognitiveComplexity - 15) * 0.05;
483
+ return {
484
+ linesOfCode,
485
+ cyclomaticComplexity,
486
+ cognitiveComplexity,
487
+ maintainabilityIndex,
488
+ technicalDebt: Math.max(0, technicalDebt)
489
+ };
490
+ }
491
+ calculateCyclomaticComplexity(content) {
492
+ let complexity = 1; // Base complexity
493
+ const complexityKeywords = ['if', 'else', 'while', 'for', 'switch', 'case', 'catch', '&&', '||', '?'];
494
+ for (const keyword of complexityKeywords) {
495
+ const matches = content.match(new RegExp(`\\b${keyword}\\b`, 'g'));
496
+ if (matches) {
497
+ complexity += matches.length;
498
+ }
499
+ }
500
+ return complexity;
501
+ }
502
+ calculateCognitiveComplexity(content) {
503
+ let complexity = 0;
504
+ let nestingLevel = 0;
505
+ const lines = content.split('\n');
506
+ for (const line of lines) {
507
+ const trimmed = line.trim();
508
+ // Track nesting
509
+ if (trimmed.includes('{'))
510
+ nestingLevel++;
511
+ if (trimmed.includes('}'))
512
+ nestingLevel = Math.max(0, nestingLevel - 1);
513
+ // Add complexity for control structures
514
+ if (trimmed.includes('if') || trimmed.includes('while') || trimmed.includes('for')) {
515
+ complexity += nestingLevel + 1;
516
+ }
517
+ if (trimmed.includes('switch')) {
518
+ complexity += nestingLevel + 1;
519
+ }
520
+ if (trimmed.includes('catch')) {
521
+ complexity += nestingLevel + 1;
522
+ }
523
+ }
524
+ return complexity;
525
+ }
526
+ getSchema() {
527
+ return {
528
+ type: "object",
529
+ properties: {
530
+ filePath: {
531
+ type: "string",
532
+ description: "Path to the file to analyze for context"
533
+ },
534
+ rootPath: {
535
+ type: "string",
536
+ description: "Root path of the project",
537
+ default: "current working directory"
538
+ },
539
+ includeRelationships: {
540
+ type: "boolean",
541
+ description: "Include code relationships analysis",
542
+ default: true
543
+ },
544
+ includeMetrics: {
545
+ type: "boolean",
546
+ description: "Include code quality metrics",
547
+ default: true
548
+ },
549
+ includeSemantics: {
550
+ type: "boolean",
551
+ description: "Include semantic analysis and patterns",
552
+ default: true
553
+ },
554
+ maxRelatedFiles: {
555
+ type: "integer",
556
+ description: "Maximum number of related files to analyze",
557
+ default: 10,
558
+ minimum: 1,
559
+ maximum: 50
560
+ },
561
+ contextDepth: {
562
+ type: "integer",
563
+ description: "Depth of context analysis",
564
+ default: 2,
565
+ minimum: 1,
566
+ maximum: 5
567
+ }
568
+ },
569
+ required: ["filePath"]
570
+ };
571
+ }
572
+ }
573
+ //# sourceMappingURL=code-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-context.js","sourceRoot":"","sources":["../../../src/tools/intelligence/code-context.ts"],"names":[],"mappings":"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"}