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,619 @@
1
+ import Parser from "tree-sitter";
2
+ import JavaScript from "tree-sitter-javascript";
3
+ import TypeScript from "tree-sitter-typescript";
4
+ import Python from "tree-sitter-python";
5
+ import { parse as parseTS } from "@typescript-eslint/typescript-estree";
6
+ import fs from "fs-extra";
7
+ import path from "path";
8
+ export class ASTParserTool {
9
+ constructor() {
10
+ this.name = "ast_parser";
11
+ this.description = "Parse source code files to extract AST, symbols, imports, exports, and structural information";
12
+ this.parsers = new Map();
13
+ this.initializeParsers();
14
+ }
15
+ initializeParsers() {
16
+ try {
17
+ // JavaScript/JSX parser
18
+ const jsParser = new Parser();
19
+ jsParser.setLanguage(JavaScript);
20
+ this.parsers.set('javascript', jsParser);
21
+ this.parsers.set('js', jsParser);
22
+ this.parsers.set('jsx', jsParser);
23
+ // TypeScript/TSX parser
24
+ const tsParser = new Parser();
25
+ tsParser.setLanguage(TypeScript.typescript);
26
+ this.parsers.set('typescript', tsParser);
27
+ this.parsers.set('ts', tsParser);
28
+ const tsxParser = new Parser();
29
+ tsxParser.setLanguage(TypeScript.tsx);
30
+ this.parsers.set('tsx', tsxParser);
31
+ // Python parser
32
+ const pyParser = new Parser();
33
+ pyParser.setLanguage(Python);
34
+ this.parsers.set('python', pyParser);
35
+ this.parsers.set('py', pyParser);
36
+ }
37
+ catch (error) {
38
+ console.warn('Failed to initialize some parsers:', error);
39
+ }
40
+ }
41
+ detectLanguage(filePath) {
42
+ const ext = path.extname(filePath).slice(1).toLowerCase();
43
+ switch (ext) {
44
+ case 'js':
45
+ case 'mjs':
46
+ case 'cjs':
47
+ return 'javascript';
48
+ case 'jsx':
49
+ return 'jsx';
50
+ case 'ts':
51
+ return 'typescript';
52
+ case 'tsx':
53
+ return 'tsx';
54
+ case 'py':
55
+ case 'pyw':
56
+ return 'python';
57
+ default:
58
+ return 'javascript'; // Default fallback
59
+ }
60
+ }
61
+ async execute(args) {
62
+ try {
63
+ const { filePath, includeSymbols = true, includeImports = true, includeTree = false, symbolTypes = ['function', 'class', 'variable', 'interface', 'enum', 'type'], scope = 'all' // 'all', 'global', 'local'
64
+ } = args;
65
+ if (!filePath) {
66
+ throw new Error("File path is required");
67
+ }
68
+ if (!await fs.pathExists(filePath)) {
69
+ throw new Error(`File not found: ${filePath}`);
70
+ }
71
+ const content = await fs.readFile(filePath, 'utf-8');
72
+ const language = this.detectLanguage(filePath);
73
+ let result;
74
+ // Use TypeScript ESTree for better TypeScript analysis
75
+ if (language === 'typescript' || language === 'tsx') {
76
+ result = await this.parseWithTypeScript(content, language, filePath);
77
+ }
78
+ else {
79
+ result = await this.parseWithTreeSitter(content, language, filePath);
80
+ }
81
+ // Filter results based on parameters
82
+ if (!includeSymbols) {
83
+ result.symbols = [];
84
+ }
85
+ else {
86
+ result.symbols = result.symbols.filter(symbol => symbolTypes.includes(symbol.type) &&
87
+ (scope === 'all' || this.matchesScope(symbol, scope)));
88
+ }
89
+ if (!includeImports) {
90
+ result.imports = [];
91
+ result.exports = [];
92
+ }
93
+ if (!includeTree) {
94
+ result.tree = { type: 'program', text: '', startPosition: { row: 0, column: 0 }, endPosition: { row: 0, column: 0 } };
95
+ }
96
+ return {
97
+ success: true,
98
+ output: JSON.stringify({
99
+ filePath,
100
+ language: result.language,
101
+ symbolCount: result.symbols.length,
102
+ importCount: result.imports.length,
103
+ exportCount: result.exports.length,
104
+ errorCount: result.errors.length,
105
+ ...(includeSymbols && { symbols: result.symbols }),
106
+ ...(includeImports && {
107
+ imports: result.imports,
108
+ exports: result.exports
109
+ }),
110
+ ...(includeTree && { tree: result.tree }),
111
+ ...(result.errors.length > 0 && { errors: result.errors })
112
+ }, null, 2)
113
+ };
114
+ }
115
+ catch (error) {
116
+ return {
117
+ success: false,
118
+ error: error instanceof Error ? error.message : String(error)
119
+ };
120
+ }
121
+ }
122
+ async parseWithTypeScript(content, language, filePath) {
123
+ const errors = [];
124
+ try {
125
+ const ast = parseTS(content, {
126
+ jsx: language === 'tsx',
127
+ loc: true,
128
+ range: true,
129
+ comment: true,
130
+ attachComments: true,
131
+ errorOnUnknownASTType: false,
132
+ errorOnTypeScriptSyntacticAndSemanticIssues: false
133
+ });
134
+ const symbols = this.extractTypeScriptSymbols(ast, content);
135
+ const imports = this.extractTypeScriptImports(ast);
136
+ const exports = this.extractTypeScriptExports(ast);
137
+ const tree = this.convertTypeScriptAST(ast);
138
+ return {
139
+ language,
140
+ tree,
141
+ symbols,
142
+ imports,
143
+ exports,
144
+ errors
145
+ };
146
+ }
147
+ catch (error) {
148
+ errors.push({
149
+ message: error instanceof Error ? error.message : String(error),
150
+ line: 0,
151
+ column: 0,
152
+ severity: 'error'
153
+ });
154
+ // Fallback to tree-sitter
155
+ return this.parseWithTreeSitter(content, language, filePath);
156
+ }
157
+ }
158
+ async parseWithTreeSitter(content, language, filePath) {
159
+ const parser = this.parsers.get(language);
160
+ if (!parser) {
161
+ throw new Error(`Unsupported language: ${language}`);
162
+ }
163
+ const tree = parser.parse(content);
164
+ const symbols = this.extractTreeSitterSymbols(tree.rootNode, content, language);
165
+ const imports = this.extractTreeSitterImports(tree.rootNode, content, language);
166
+ const exports = this.extractTreeSitterExports(tree.rootNode, content, language);
167
+ const astTree = this.convertTreeSitterAST(tree.rootNode, content);
168
+ return {
169
+ language,
170
+ tree: astTree,
171
+ symbols,
172
+ imports,
173
+ exports,
174
+ errors: []
175
+ };
176
+ }
177
+ extractTypeScriptSymbols(ast, content) {
178
+ const symbols = [];
179
+ const lines = content.split('\n');
180
+ const visit = (node, scope = 'global') => {
181
+ if (!node)
182
+ return;
183
+ const getPosition = (pos) => ({
184
+ row: pos.line - 1,
185
+ column: pos.column
186
+ });
187
+ switch (node.type) {
188
+ case 'FunctionDeclaration':
189
+ if (node.id?.name) {
190
+ symbols.push({
191
+ name: node.id.name,
192
+ type: 'function',
193
+ startPosition: getPosition(node.loc.start),
194
+ endPosition: getPosition(node.loc.end),
195
+ scope,
196
+ isAsync: node.async,
197
+ parameters: node.params?.map((param) => ({
198
+ name: param.name || (param.left?.name) || 'unknown',
199
+ type: param.typeAnnotation?.typeAnnotation?.type,
200
+ optional: param.optional
201
+ })) || []
202
+ });
203
+ }
204
+ break;
205
+ case 'ClassDeclaration':
206
+ if (node.id?.name) {
207
+ symbols.push({
208
+ name: node.id.name,
209
+ type: 'class',
210
+ startPosition: getPosition(node.loc.start),
211
+ endPosition: getPosition(node.loc.end),
212
+ scope
213
+ });
214
+ }
215
+ // Visit class methods
216
+ node.body?.body?.forEach((member) => {
217
+ if (member.type === 'MethodDefinition' && member.key?.name) {
218
+ symbols.push({
219
+ name: member.key.name,
220
+ type: 'method',
221
+ startPosition: getPosition(member.loc.start),
222
+ endPosition: getPosition(member.loc.end),
223
+ scope: `${node.id?.name || 'unknown'}.${member.key.name}`,
224
+ accessibility: member.accessibility,
225
+ isStatic: member.static,
226
+ isAsync: member.value?.async
227
+ });
228
+ }
229
+ });
230
+ break;
231
+ case 'VariableDeclaration':
232
+ node.declarations?.forEach((decl) => {
233
+ if (decl.id?.name) {
234
+ symbols.push({
235
+ name: decl.id.name,
236
+ type: 'variable',
237
+ startPosition: getPosition(decl.loc.start),
238
+ endPosition: getPosition(decl.loc.end),
239
+ scope
240
+ });
241
+ }
242
+ });
243
+ break;
244
+ case 'TSInterfaceDeclaration':
245
+ if (node.id?.name) {
246
+ symbols.push({
247
+ name: node.id.name,
248
+ type: 'interface',
249
+ startPosition: getPosition(node.loc.start),
250
+ endPosition: getPosition(node.loc.end),
251
+ scope
252
+ });
253
+ }
254
+ break;
255
+ case 'TSEnumDeclaration':
256
+ if (node.id?.name) {
257
+ symbols.push({
258
+ name: node.id.name,
259
+ type: 'enum',
260
+ startPosition: getPosition(node.loc.start),
261
+ endPosition: getPosition(node.loc.end),
262
+ scope
263
+ });
264
+ }
265
+ break;
266
+ case 'TSTypeAliasDeclaration':
267
+ if (node.id?.name) {
268
+ symbols.push({
269
+ name: node.id.name,
270
+ type: 'type',
271
+ startPosition: getPosition(node.loc.start),
272
+ endPosition: getPosition(node.loc.end),
273
+ scope
274
+ });
275
+ }
276
+ break;
277
+ }
278
+ // Recursively visit children
279
+ for (const key in node) {
280
+ if (key !== 'parent' && key !== 'loc' && key !== 'range') {
281
+ const child = node[key];
282
+ if (Array.isArray(child)) {
283
+ child.forEach(grandchild => {
284
+ if (grandchild && typeof grandchild === 'object') {
285
+ visit(grandchild, scope);
286
+ }
287
+ });
288
+ }
289
+ else if (child && typeof child === 'object') {
290
+ visit(child, scope);
291
+ }
292
+ }
293
+ }
294
+ };
295
+ visit(ast);
296
+ return symbols;
297
+ }
298
+ extractTypeScriptImports(ast) {
299
+ const imports = [];
300
+ const visit = (node) => {
301
+ if (node.type === 'ImportDeclaration') {
302
+ const specifiers = [];
303
+ node.specifiers?.forEach((spec) => {
304
+ switch (spec.type) {
305
+ case 'ImportDefaultSpecifier':
306
+ specifiers.push({
307
+ name: spec.local.name,
308
+ isDefault: true
309
+ });
310
+ break;
311
+ case 'ImportNamespaceSpecifier':
312
+ specifiers.push({
313
+ name: spec.local.name,
314
+ isNamespace: true
315
+ });
316
+ break;
317
+ case 'ImportSpecifier':
318
+ specifiers.push({
319
+ name: spec.imported.name,
320
+ alias: spec.local.name !== spec.imported.name ? spec.local.name : undefined
321
+ });
322
+ break;
323
+ }
324
+ });
325
+ imports.push({
326
+ source: node.source.value,
327
+ specifiers,
328
+ isTypeOnly: node.importKind === 'type',
329
+ startPosition: {
330
+ row: node.loc.start.line - 1,
331
+ column: node.loc.start.column
332
+ }
333
+ });
334
+ }
335
+ // Recursively visit children
336
+ for (const key in node) {
337
+ if (key !== 'parent' && key !== 'loc' && key !== 'range') {
338
+ const child = node[key];
339
+ if (Array.isArray(child)) {
340
+ child.forEach(grandchild => {
341
+ if (grandchild && typeof grandchild === 'object') {
342
+ visit(grandchild);
343
+ }
344
+ });
345
+ }
346
+ else if (child && typeof child === 'object') {
347
+ visit(child);
348
+ }
349
+ }
350
+ }
351
+ };
352
+ visit(ast);
353
+ return imports;
354
+ }
355
+ extractTypeScriptExports(ast) {
356
+ const exports = [];
357
+ const visit = (node) => {
358
+ switch (node.type) {
359
+ case 'ExportNamedDeclaration':
360
+ if (node.declaration) {
361
+ // Export declaration (export function foo() {})
362
+ if (node.declaration.id?.name) {
363
+ exports.push({
364
+ name: node.declaration.id.name,
365
+ type: this.getDeclarationType(node.declaration.type),
366
+ startPosition: {
367
+ row: node.loc.start.line - 1,
368
+ column: node.loc.start.column
369
+ }
370
+ });
371
+ }
372
+ }
373
+ else if (node.specifiers) {
374
+ // Export specifiers (export { foo, bar })
375
+ node.specifiers.forEach((spec) => {
376
+ exports.push({
377
+ name: spec.exported.name,
378
+ type: 'variable', // Default to variable
379
+ startPosition: {
380
+ row: node.loc.start.line - 1,
381
+ column: node.loc.start.column
382
+ },
383
+ source: node.source?.value
384
+ });
385
+ });
386
+ }
387
+ break;
388
+ case 'ExportDefaultDeclaration':
389
+ const name = node.declaration?.id?.name || 'default';
390
+ exports.push({
391
+ name,
392
+ type: this.getDeclarationType(node.declaration?.type) || 'default',
393
+ startPosition: {
394
+ row: node.loc.start.line - 1,
395
+ column: node.loc.start.column
396
+ },
397
+ isDefault: true
398
+ });
399
+ break;
400
+ }
401
+ // Recursively visit children
402
+ for (const key in node) {
403
+ if (key !== 'parent' && key !== 'loc' && key !== 'range') {
404
+ const child = node[key];
405
+ if (Array.isArray(child)) {
406
+ child.forEach(grandchild => {
407
+ if (grandchild && typeof grandchild === 'object') {
408
+ visit(grandchild);
409
+ }
410
+ });
411
+ }
412
+ else if (child && typeof child === 'object') {
413
+ visit(child);
414
+ }
415
+ }
416
+ }
417
+ };
418
+ visit(ast);
419
+ return exports;
420
+ }
421
+ extractTreeSitterSymbols(node, content, language) {
422
+ const symbols = [];
423
+ const lines = content.split('\n');
424
+ const visit = (node, scope = 'global') => {
425
+ const nodeText = content.slice(node.startIndex, node.endIndex);
426
+ const startPos = { row: node.startPosition.row, column: node.startPosition.column };
427
+ const endPos = { row: node.endPosition.row, column: node.endPosition.column };
428
+ switch (node.type) {
429
+ case 'function_declaration':
430
+ case 'function_definition':
431
+ const funcName = this.extractNodeName(node, 'name') || this.extractNodeName(node, 'identifier');
432
+ if (funcName) {
433
+ symbols.push({
434
+ name: funcName,
435
+ type: 'function',
436
+ startPosition: startPos,
437
+ endPosition: endPos,
438
+ scope
439
+ });
440
+ }
441
+ break;
442
+ case 'class_declaration':
443
+ case 'class_definition':
444
+ const className = this.extractNodeName(node, 'name') || this.extractNodeName(node, 'identifier');
445
+ if (className) {
446
+ symbols.push({
447
+ name: className,
448
+ type: 'class',
449
+ startPosition: startPos,
450
+ endPosition: endPos,
451
+ scope
452
+ });
453
+ }
454
+ break;
455
+ case 'variable_declaration':
456
+ case 'lexical_declaration':
457
+ node.children?.forEach((child) => {
458
+ if (child.type === 'variable_declarator') {
459
+ const varName = this.extractNodeName(child, 'name') || this.extractNodeName(child, 'identifier');
460
+ if (varName) {
461
+ symbols.push({
462
+ name: varName,
463
+ type: 'variable',
464
+ startPosition: { row: child.startPosition.row, column: child.startPosition.column },
465
+ endPosition: { row: child.endPosition.row, column: child.endPosition.column },
466
+ scope
467
+ });
468
+ }
469
+ }
470
+ });
471
+ break;
472
+ }
473
+ // Recursively visit children
474
+ node.children?.forEach((child) => visit(child, scope));
475
+ };
476
+ visit(node);
477
+ return symbols;
478
+ }
479
+ extractTreeSitterImports(node, content, language) {
480
+ const imports = [];
481
+ const visit = (node) => {
482
+ if (node.type === 'import_statement' || node.type === 'import_from_statement') {
483
+ // Extract import details from tree-sitter node
484
+ const sourceNode = node.children?.find((child) => child.type === 'string' || child.type === 'string_literal');
485
+ if (sourceNode) {
486
+ const source = content.slice(sourceNode.startIndex + 1, sourceNode.endIndex - 1); // Remove quotes
487
+ imports.push({
488
+ source,
489
+ specifiers: [], // Simplified for tree-sitter
490
+ startPosition: {
491
+ row: node.startPosition.row,
492
+ column: node.startPosition.column
493
+ }
494
+ });
495
+ }
496
+ }
497
+ node.children?.forEach((child) => visit(child));
498
+ };
499
+ visit(node);
500
+ return imports;
501
+ }
502
+ extractTreeSitterExports(node, content, language) {
503
+ const exports = [];
504
+ const visit = (node) => {
505
+ if (node.type === 'export_statement') {
506
+ // Simplified export extraction for tree-sitter
507
+ const name = this.extractNodeName(node, 'name') || 'unknown';
508
+ exports.push({
509
+ name,
510
+ type: 'variable',
511
+ startPosition: {
512
+ row: node.startPosition.row,
513
+ column: node.startPosition.column
514
+ }
515
+ });
516
+ }
517
+ node.children?.forEach((child) => visit(child));
518
+ };
519
+ visit(node);
520
+ return exports;
521
+ }
522
+ convertTypeScriptAST(node) {
523
+ return {
524
+ type: node.type,
525
+ text: '',
526
+ startPosition: { row: node.loc?.start?.line - 1 || 0, column: node.loc?.start?.column || 0 },
527
+ endPosition: { row: node.loc?.end?.line - 1 || 0, column: node.loc?.end?.column || 0 },
528
+ children: []
529
+ };
530
+ }
531
+ convertTreeSitterAST(node, content) {
532
+ const children = [];
533
+ if (node.children) {
534
+ for (const child of node.children) {
535
+ children.push(this.convertTreeSitterAST(child, content));
536
+ }
537
+ }
538
+ return {
539
+ type: node.type,
540
+ text: content.slice(node.startIndex, node.endIndex),
541
+ startPosition: { row: node.startPosition.row, column: node.startPosition.column },
542
+ endPosition: { row: node.endPosition.row, column: node.endPosition.column },
543
+ children
544
+ };
545
+ }
546
+ extractNodeName(node, nameField) {
547
+ const nameNode = node.children?.find((child) => child.type === nameField);
548
+ return nameNode ? nameNode.text : null;
549
+ }
550
+ getDeclarationType(nodeType) {
551
+ switch (nodeType) {
552
+ case 'FunctionDeclaration':
553
+ return 'function';
554
+ case 'ClassDeclaration':
555
+ return 'class';
556
+ case 'TSInterfaceDeclaration':
557
+ return 'interface';
558
+ case 'TSEnumDeclaration':
559
+ return 'enum';
560
+ case 'TSTypeAliasDeclaration':
561
+ return 'type';
562
+ default:
563
+ return 'variable';
564
+ }
565
+ }
566
+ matchesScope(symbol, scope) {
567
+ switch (scope) {
568
+ case 'global':
569
+ return symbol.scope === 'global';
570
+ case 'local':
571
+ return symbol.scope !== 'global';
572
+ default:
573
+ return true;
574
+ }
575
+ }
576
+ getSchema() {
577
+ return {
578
+ type: "object",
579
+ properties: {
580
+ filePath: {
581
+ type: "string",
582
+ description: "Path to the source code file to parse"
583
+ },
584
+ includeSymbols: {
585
+ type: "boolean",
586
+ description: "Whether to extract symbols (functions, classes, variables, etc.)",
587
+ default: true
588
+ },
589
+ includeImports: {
590
+ type: "boolean",
591
+ description: "Whether to extract import/export information",
592
+ default: true
593
+ },
594
+ includeTree: {
595
+ type: "boolean",
596
+ description: "Whether to include the full AST tree in response",
597
+ default: false
598
+ },
599
+ symbolTypes: {
600
+ type: "array",
601
+ items: {
602
+ type: "string",
603
+ enum: ["function", "class", "variable", "interface", "enum", "type", "method", "property"]
604
+ },
605
+ description: "Types of symbols to extract",
606
+ default: ["function", "class", "variable", "interface", "enum", "type"]
607
+ },
608
+ scope: {
609
+ type: "string",
610
+ enum: ["all", "global", "local"],
611
+ description: "Scope of symbols to extract",
612
+ default: "all"
613
+ }
614
+ },
615
+ required: ["filePath"]
616
+ };
617
+ }
618
+ }
619
+ //# sourceMappingURL=ast-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-parser.js","sourceRoot":"","sources":["../../../src/tools/intelligence/ast-parser.ts"],"names":[],"mappings":"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"}