ai-first-cli 1.3.5 → 1.3.6

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 (51) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/README.es.md +55 -0
  3. package/README.md +40 -15
  4. package/ai/graph/knowledge-graph.json +1 -1
  5. package/dist/analyzers/architecture.d.ts.map +1 -1
  6. package/dist/analyzers/architecture.js +72 -5
  7. package/dist/analyzers/architecture.js.map +1 -1
  8. package/dist/analyzers/entrypoints.d.ts.map +1 -1
  9. package/dist/analyzers/entrypoints.js +253 -0
  10. package/dist/analyzers/entrypoints.js.map +1 -1
  11. package/dist/analyzers/symbols.d.ts.map +1 -1
  12. package/dist/analyzers/symbols.js +47 -2
  13. package/dist/analyzers/symbols.js.map +1 -1
  14. package/dist/analyzers/techStack.d.ts.map +1 -1
  15. package/dist/analyzers/techStack.js +43 -0
  16. package/dist/analyzers/techStack.js.map +1 -1
  17. package/dist/utils/fileUtils.d.ts.map +1 -1
  18. package/dist/utils/fileUtils.js +5 -0
  19. package/dist/utils/fileUtils.js.map +1 -1
  20. package/package.json +1 -1
  21. package/src/analyzers/architecture.ts +75 -6
  22. package/src/analyzers/entrypoints.ts +285 -0
  23. package/src/analyzers/symbols.ts +52 -2
  24. package/src/analyzers/techStack.ts +44 -0
  25. package/src/utils/fileUtils.ts +5 -0
  26. package/tests/entrypoints-languages.test.ts +373 -0
  27. package/tests/framework-detection.test.ts +296 -0
  28. package/BETA_EVALUATION_REPORT.md +0 -151
  29. package/ai-context/context/flows/App.json +0 -17
  30. package/ai-context/context/flows/DashboardPage.json +0 -14
  31. package/ai-context/context/flows/LoginPage.json +0 -14
  32. package/ai-context/context/flows/admin.json +0 -10
  33. package/ai-context/context/flows/androidresources.json +0 -11
  34. package/ai-context/context/flows/authController.json +0 -14
  35. package/ai-context/context/flows/entrypoints.json +0 -9
  36. package/ai-context/context/flows/fastapiAdapter.json +0 -14
  37. package/ai-context/context/flows/fastapiadapter.json +0 -11
  38. package/ai-context/context/flows/index.json +0 -19
  39. package/ai-context/context/flows/indexer.json +0 -9
  40. package/ai-context/context/flows/indexstate.json +0 -9
  41. package/ai-context/context/flows/init.json +0 -22
  42. package/ai-context/context/flows/main.json +0 -18
  43. package/ai-context/context/flows/mainactivity.json +0 -9
  44. package/ai-context/context/flows/models.json +0 -15
  45. package/ai-context/context/flows/posts.json +0 -15
  46. package/ai-context/context/flows/repoMapper.json +0 -20
  47. package/ai-context/context/flows/repomapper.json +0 -11
  48. package/ai-context/context/flows/serializers.json +0 -10
  49. package/dist/scripts/ai-context-evaluator.js +0 -367
  50. package/quick-evaluation-report-1774396002305.md +0 -64
  51. package/quick-evaluator.ts +0 -200
package/CHANGELOG.md CHANGED
@@ -6,6 +6,69 @@ All notable changes to `ai-first` will be documented in this file.
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.3.6] - 2026-03-28
10
+
11
+ ### 🎯 AI Recommendations Implementation
12
+
13
+ **Branch:** `feature/ai-recommendations-v1.3.6`
14
+
15
+ #### Added
16
+
17
+ - **Go Entrypoints Detection** (T1)
18
+ - Detect `main.go` with `func main()`
19
+ - Extract HTTP handlers (`http.HandleFunc`)
20
+ - Identify service ports (`:8080`, `:3000`)
21
+ - Parse structs and methods
22
+ - Read `go.mod` for module information
23
+
24
+ - **Rust Entrypoints Detection** (T2)
25
+ - Detect `main.rs` with `fn main()`
26
+ - Extract `Cargo.toml` configuration
27
+ - Identify structs and implementations
28
+ - Support for binary and library projects
29
+
30
+ - **PHP Entrypoints Detection** (T3)
31
+ - Detect `index.php` entrypoints
32
+ - Support Laravel convention (`public/index.php`)
33
+ - Parse `composer.json` dependencies
34
+ - Detect Laravel and Symfony frameworks
35
+
36
+ - **Comprehensive Test Suite** (T4, T8, T12)
37
+ - 16 tests for Go/Rust/PHP entrypoints
38
+ - 14 tests for framework detection
39
+ - All Apex class tests now passing (was 40/43, now 43/43)
40
+
41
+ #### Fixed
42
+
43
+ - **Framework Detection** (T5-T7)
44
+ - NestJS: Now correctly detects `@nestjs/*` packages
45
+ - Spring Boot: Parses `pom.xml` and `build.gradle`/`build.gradle.kts`
46
+ - Express: Shows "API Server" instead of "Microservices" for single services
47
+
48
+ - **Apex Parser Improvements** (T9)
49
+ - Handle multi-line annotations (`@AuraEnabled(cacheable=true)`)
50
+ - Support generic return types (`List<Account>`, `Map<String, Object>`)
51
+ - Detect `webservice` methods
52
+ - Fix method signature extraction with parameters
53
+
54
+ - **Architecture Descriptions** (T15)
55
+ - Replace "Contains X files" with functional descriptions
56
+ - Infer responsibility from file types (TypeScript, Python, Java, etc.)
57
+ - Language-specific descriptions (e.g., "JavaScript/TypeScript implementation")
58
+
59
+ - **Development Directory Filtering** (T14)
60
+ - Exclude `test-projects/` from analysis
61
+ - Exclude `.ai-dev/` and `.ai-dev-out/`
62
+ - Exclude `ai-context/` directory
63
+ - Prevent test artifacts from polluting results
64
+
65
+ #### Test Results
66
+
67
+ - 1026 tests passing (+30 new tests)
68
+ - 0 tests failing (100% pass rate!)
69
+ - Fixed 3 pre-existing Apex test failures
70
+ - All 11 test projects validated
71
+
9
72
  ## [1.3.5] - 2026-03-24
10
73
 
11
74
  ### 🧪 Comprehensive Testing Suite
package/README.es.md CHANGED
@@ -21,6 +21,20 @@
21
21
 
22
22
  ---
23
23
 
24
+ ## 🚀 Novedades en v1.3.6
25
+
26
+ **Soporte de Lenguajes Mejorado y Detección de Frameworks**
27
+
28
+ - ✅ **Entrypoints Go**: Detección automática de `main.go`, handlers HTTP y puertos de servicio
29
+ - ✅ **Entrypoints Rust**: Soporte para `main.rs`, `Cargo.toml` e implementaciones de structs
30
+ - ✅ **Entrypoints PHP**: Detección de `index.php`, convenciones Laravel y dependencias Composer
31
+ - ✅ **Detección de Frameworks Mejorada**: NestJS (`@nestjs/*`), Spring Boot (pom.xml/build.gradle) y Express (API Server vs Microservices)
32
+ - ✅ **Parser Apex**: Parsing mejorado de firmas de métodos con soporte de genéricos (`List<Account>`) y anotaciones multi-línea
33
+ - ✅ **Descripciones de Arquitectura**: Descripciones funcionales en lugar de "Contiene X archivos" genérico
34
+ - ✅ **1026 Tests Pasando**: 100% de éxito con 30 tests nuevos agregados
35
+
36
+ ---
37
+
24
38
  ## 📋 Tabla de Contenidos
25
39
 
26
40
  - [Comandos](#-referencia-de-comandos)
@@ -377,6 +391,47 @@ Los flows representan cadenas de ejecución de negocio desde entrypoints.
377
391
 
378
392
  ---
379
393
 
394
+ ## 🌍 Soporte Multi-Lenguaje y Frameworks
395
+
396
+ ### Lenguajes Soportados
397
+
398
+ | Categoría | Lenguajes |
399
+ |-----------|-----------|
400
+ | **Web** | JavaScript, TypeScript, Python, **Go**, **Rust** |
401
+ | **Backend** | Java, C#, **PHP**, Ruby, **Go**, **Rust**, Kotlin, **Apex** |
402
+ | **Mobile** | Swift, Kotlin, Android |
403
+ | **Frontend** | Vue, Svelte, React, HTML, CSS, SCSS |
404
+ | **Testing** | Jest, Vitest, pytest, Mocha, RSpec |
405
+
406
+ **Nuevo en v1.3.6:** Detección completa de entrypoints para **Go** (handlers, puertos), **Rust** (Cargo.toml, binarios), y **PHP** (index.php, Laravel).
407
+
408
+ ### Frameworks (Testeados)
409
+
410
+ | Framework | Lenguaje | Proyecto de Prueba | Estado |
411
+ |-----------|----------|-------------------|--------|
412
+ | **Django** | Python | `test-projects/django-app` | ✅ |
413
+ | **FastAPI** | Python | `test-projects/fastapi-app` | ✅ |
414
+ | **Flask** | Python | `test-projects/flask-app` | ✅ |
415
+ | **Laravel** | PHP | `test-projects/laravel-app` | ✅ |
416
+ | **Rails** | Ruby | `test-projects/rails-app` | ✅ |
417
+ | **Spring Boot** | Java | `test-projects/spring-boot-app` | ✅ Mejorado v1.3.6 |
418
+ | Express.js | JavaScript | `test-projects/express-api` | ✅ Corregido v1.3.6 |
419
+ | **NestJS** | TypeScript | `test-projects/nestjs-backend` | ✅ Corregido v1.3.6 |
420
+ | React | JavaScript | `test-projects/react-app` | ✅ |
421
+ | Python CLI | Python | `test-projects/python-cli` | ✅ |
422
+ | Salesforce DX | Apex | `test-projects/salesforce-cli` | ✅ Mejorado v1.3.6 |
423
+ | **Go** | Go | `test-projects/go-microservice` | ✅ **NUEVO v1.3.6** |
424
+ | **Rust** | Rust | `test-projects/rust-cli` | ✅ **NUEVO v1.3.6** |
425
+ | **PHP Vanilla** | PHP | `test-projects/php-vanilla` | ✅ **NUEVO v1.3.6** |
426
+
427
+ **Mejoras v1.3.6:**
428
+ - **NestJS**: Ahora detecta correctamente paquetes scoped `@nestjs/*`
429
+ - **Spring Boot**: Parsea `pom.xml` y `build.gradle`/`build.gradle.kts`
430
+ - **Express**: Muestra "API Server" en lugar de "Microservices" para directorios de servicio único
431
+ - **Apex**: Parser mejorado con soporte de genéricos (`List<Account>`, `Map<String, Object>`)
432
+
433
+ ---
434
+
380
435
  ## 🤖 Soporte Android/Kotlin
381
436
 
382
437
  af detecta e indexa automáticamente proyectos Android/Kotlin:
package/README.md CHANGED
@@ -19,6 +19,20 @@
19
19
 
20
20
  ---
21
21
 
22
+ ## 🚀 What's New in v1.3.6
23
+
24
+ **Enhanced Language Support & Framework Detection**
25
+
26
+ - ✅ **Go Entrypoints**: Automatic detection of `main.go`, HTTP handlers, and service ports
27
+ - ✅ **Rust Entrypoints**: Support for `main.rs`, `Cargo.toml`, and struct implementations
28
+ - ✅ **PHP Entrypoints**: Detection of `index.php`, Laravel conventions, and Composer dependencies
29
+ - ✅ **Improved Framework Detection**: Fixed NestJS (`@nestjs/*`), Spring Boot (pom.xml/build.gradle), and Express (API Server vs Microservices)
30
+ - ✅ **Apex Parser**: Enhanced method signature parsing with generics support (`List<Account>`) and multi-line annotations
31
+ - ✅ **Architecture Descriptions**: Functional descriptions instead of generic "Contains X files"
32
+ - ✅ **1026 Tests Passing**: 100% success rate with 30 new tests added
33
+
34
+ ---
35
+
22
36
  ## 📋 Table of Contents
23
37
 
24
38
  - [Commands](#-commands-reference)
@@ -453,27 +467,38 @@ Flows represent business execution chains starting from entrypoints.
453
467
 
454
468
  | Category | Languages |
455
469
  |----------|-----------|
456
- | **Web** | JavaScript, TypeScript, Python, Go, Rust |
457
- | **Backend** | Java, C#, PHP, Ruby, Go, Rust, Kotlin, **Apex** |
470
+ | **Web** | JavaScript, TypeScript, Python, **Go**, **Rust** |
471
+ | **Backend** | Java, C#, **PHP**, Ruby, **Go**, **Rust**, Kotlin, **Apex** |
458
472
  | **Mobile** | Swift, Kotlin, Android |
459
473
  | **Frontend** | Vue, Svelte, React, HTML, CSS, SCSS |
460
474
  | **Testing** | Jest, Vitest, pytest, Mocha, RSpec |
461
475
 
476
+ **New in v1.3.6:** Full entrypoint detection for **Go** (handlers, ports), **Rust** (Cargo.toml, binaries), and **PHP** (index.php, Laravel).
477
+
462
478
  ### Frameworks (Tested)
463
479
 
464
- | Framework | Language | Test Project |
465
- |-----------|----------|-------------|
466
- | **Django** | Python | `test-projects/django-app` |
467
- | **FastAPI** | Python | `test-projects/fastapi-app` |
468
- | **Flask** | Python | `test-projects/flask-app` |
469
- | **Laravel** | PHP | `test-projects/laravel-app` |
470
- | **Rails** | Ruby | `test-projects/rails-app` |
471
- | **Spring Boot** | Java | `test-projects/spring-boot-app` |
472
- | Express.js | JavaScript | `test-projects/express-api` |
473
- | NestJS | TypeScript | `test-projects/nestjs-backend` |
474
- | React | JavaScript | `test-projects/react-app` |
475
- | Python CLI | Python | `test-projects/python-cli` |
476
- | Salesforce DX | Apex | `test-projects/salesforce-cli` |
480
+ | Framework | Language | Test Project | Status |
481
+ |-----------|----------|-------------|--------|
482
+ | **Django** | Python | `test-projects/django-app` | ✅ |
483
+ | **FastAPI** | Python | `test-projects/fastapi-app` | ✅ |
484
+ | **Flask** | Python | `test-projects/flask-app` | ✅ |
485
+ | **Laravel** | PHP | `test-projects/laravel-app` | ✅ |
486
+ | **Rails** | Ruby | `test-projects/rails-app` | ✅ |
487
+ | **Spring Boot** | Java | `test-projects/spring-boot-app` | ✅ Improved v1.3.6 |
488
+ | Express.js | JavaScript | `test-projects/express-api` | ✅ Fixed v1.3.6 |
489
+ | **NestJS** | TypeScript | `test-projects/nestjs-backend` | ✅ Fixed v1.3.6 |
490
+ | React | JavaScript | `test-projects/react-app` | ✅ |
491
+ | Python CLI | Python | `test-projects/python-cli` | ✅ |
492
+ | Salesforce DX | Apex | `test-projects/salesforce-cli` | ✅ Enhanced v1.3.6 |
493
+ | **Go** | Go | `test-projects/go-microservice` | ✅ **NEW v1.3.6** |
494
+ | **Rust** | Rust | `test-projects/rust-cli` | ✅ **NEW v1.3.6** |
495
+ | **PHP Vanilla** | PHP | `test-projects/php-vanilla` | ✅ **NEW v1.3.6** |
496
+
497
+ **v1.3.6 Improvements:**
498
+ - **NestJS**: Now correctly detects `@nestjs/*` scoped packages
499
+ - **Spring Boot**: Parses `pom.xml` and `build.gradle`/`build.gradle.kts`
500
+ - **Express**: Shows "API Server" instead of "Microservices" for single service directories
501
+ - **Apex**: Enhanced parser with generics support (`List<Account>`, `Map<String, Object>`)
477
502
 
478
503
  ai-first automatically detects and indexes Android/Kotlin projects:
479
504
 
@@ -2,7 +2,7 @@
2
2
  "nodes": [],
3
3
  "edges": [],
4
4
  "metadata": {
5
- "generated": "2026-03-24T23:33:19.936Z",
5
+ "generated": "2026-03-28T18:44:53.626Z",
6
6
  "sources": [],
7
7
  "nodeCount": 0,
8
8
  "edgeCount": 0
@@ -1 +1 @@
1
- {"version":3,"file":"architecture.d.ts","sourceRoot":"","sources":["../../src/analyzers/architecture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsC,MAAM,wBAAwB,CAAC;AAItF,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,EAAE,MAAM,GACd,oBAAoB,CAsBtB;AA8OD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,CAsB/E"}
1
+ {"version":3,"file":"architecture.d.ts","sourceRoot":"","sources":["../../src/analyzers/architecture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsC,MAAM,wBAAwB,CAAC;AAItF,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,EAAE,MAAM,GACd,oBAAoB,CAsBtB;AAmTD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,CAsB/E"}
@@ -6,7 +6,7 @@ export function analyzeArchitecture(files, rootDir) {
6
6
  const directories = Array.from(groupByDirectory(files).keys());
7
7
  const extensions = Array.from(groupByExtension(files).keys());
8
8
  // Detect patterns based on directory structure
9
- const patterns = detectPatterns(directories, extensions);
9
+ const patterns = detectPatterns(directories, extensions, files);
10
10
  // Identify layers
11
11
  const layers = detectLayers(directories);
12
12
  // Identify modules
@@ -23,7 +23,7 @@ export function analyzeArchitecture(files, rootDir) {
23
23
  /**
24
24
  * Detect architecture patterns from directory structure
25
25
  */
26
- function detectPatterns(directories, extensions) {
26
+ function detectPatterns(directories, extensions, files) {
27
27
  const patterns = [];
28
28
  const dirs = directories.filter(d => d && d !== "root");
29
29
  // Check for common patterns
@@ -53,10 +53,38 @@ function detectPatterns(directories, extensions) {
53
53
  if (hasPackages || hasApps) {
54
54
  patterns.push("Monorepo");
55
55
  }
56
- // Microservices
57
- if (dirs.some(d => d.includes("services") || d.includes("api")) && dirs.length > 3) {
56
+ // Microservices - check for multiple service subdirectories
57
+ const serviceSubdirs = new Set();
58
+ const apiSubdirs = new Set();
59
+ const versionPattern = /^v?\d+$/i;
60
+ for (const file of files) {
61
+ const parts = file.relativePath.split("/");
62
+ // Check for services/*/ pattern (must be an actual subdirectory, not a file)
63
+ const servicesIndex = parts.indexOf("services");
64
+ if (servicesIndex >= 0 && servicesIndex < parts.length - 2) {
65
+ // parts.length - 2 ensures there's at least one directory after 'services' before the file
66
+ const subdir = parts[servicesIndex + 1];
67
+ if (!versionPattern.test(subdir)) {
68
+ serviceSubdirs.add(subdir);
69
+ }
70
+ }
71
+ // Check for api/*/ pattern at root level (must be an actual subdirectory)
72
+ if (parts[0] === "api" && parts.length > 2) {
73
+ // parts.length > 2 ensures there's at least one directory after 'api' before the file
74
+ const subdir = parts[1];
75
+ if (!versionPattern.test(subdir)) {
76
+ apiSubdirs.add(subdir);
77
+ }
78
+ }
79
+ }
80
+ if (serviceSubdirs.size >= 2 || apiSubdirs.size >= 2) {
58
81
  patterns.push("Microservices");
59
82
  }
83
+ else if (dirs.some(d => d === "services" || d === "api") ||
84
+ files.some(f => f.relativePath.includes("/services/") || f.relativePath.includes("/api/")) ||
85
+ serviceSubdirs.size === 1 || apiSubdirs.size === 1) {
86
+ patterns.push("API Server");
87
+ }
60
88
  // Serverless / Functions
61
89
  if (dirs.some(d => d.includes("functions") || d.includes("handlers") || d.includes("lambda"))) {
62
90
  patterns.push("Serverless / Functions");
@@ -166,7 +194,46 @@ function inferModuleResponsibility(dir, extensions) {
166
194
  if (name.includes("auth") || name.includes("security") || name.includes("login")) {
167
195
  return "Authentication and authorization";
168
196
  }
169
- return `Contains ${extensions.length} files`;
197
+ // Infer from file types
198
+ const uniqueExts = [...new Set(extensions)];
199
+ if (uniqueExts.includes("ts") || uniqueExts.includes("tsx") || uniqueExts.includes("js") || uniqueExts.includes("jsx")) {
200
+ if (uniqueExts.includes("css") || uniqueExts.includes("scss") || uniqueExts.includes("less")) {
201
+ return "Frontend components and styling";
202
+ }
203
+ return "JavaScript/TypeScript implementation";
204
+ }
205
+ if (uniqueExts.includes("py")) {
206
+ return "Python implementation";
207
+ }
208
+ if (uniqueExts.includes("java")) {
209
+ return "Java implementation";
210
+ }
211
+ if (uniqueExts.includes("go")) {
212
+ return "Go implementation";
213
+ }
214
+ if (uniqueExts.includes("rs")) {
215
+ return "Rust implementation";
216
+ }
217
+ if (uniqueExts.includes("php")) {
218
+ return "PHP implementation";
219
+ }
220
+ if (uniqueExts.includes("rb")) {
221
+ return "Ruby implementation";
222
+ }
223
+ if (uniqueExts.includes("swift")) {
224
+ return "Swift implementation";
225
+ }
226
+ if (uniqueExts.includes("kt")) {
227
+ return "Kotlin implementation";
228
+ }
229
+ if (uniqueExts.includes("cls") || uniqueExts.includes("trigger")) {
230
+ return "Apex/Salesforce implementation";
231
+ }
232
+ // Fallback based on file count
233
+ if (extensions.length === 1) {
234
+ return "Single file module";
235
+ }
236
+ return `Module with ${extensions.length} source files`;
170
237
  }
171
238
  /**
172
239
  * Infer module dependencies
@@ -1 +1 @@
1
- {"version":3,"file":"architecture.js","sourceRoot":"","sources":["../../src/analyzers/architecture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"architecture.js","sourceRoot":"","sources":["../../src/analyzers/architecture.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"entrypoints.d.ts","sourceRoot":"","sources":["../../src/analyzers/entrypoints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAIlD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;IAChI,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAuFpF;AAmLD,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAiBzE"}
1
+ {"version":3,"file":"entrypoints.d.ts","sourceRoot":"","sources":["../../src/analyzers/entrypoints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAIlD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;IAChI,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAkHpF;AAqbD,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAiBzE"}
@@ -72,6 +72,33 @@ export function discoverEntrypoints(files, rootDir) {
72
72
  }
73
73
  catch { }
74
74
  }
75
+ // Detect Go entrypoints
76
+ const goFiles = files.filter(f => f.extension === "go");
77
+ if (goFiles.length > 0) {
78
+ try {
79
+ const goEntrypoints = discoverGoEntrypoints(goFiles, rootDir);
80
+ entrypoints.push(...goEntrypoints);
81
+ }
82
+ catch { }
83
+ }
84
+ // Detect Rust entrypoints
85
+ const rustFiles = files.filter(f => f.extension === "rs");
86
+ if (rustFiles.length > 0) {
87
+ try {
88
+ const rustEntrypoints = discoverRustEntrypoints(rustFiles, rootDir);
89
+ entrypoints.push(...rustEntrypoints);
90
+ }
91
+ catch { }
92
+ }
93
+ // Detect PHP entrypoints
94
+ const phpFiles = files.filter(f => f.extension === "php");
95
+ if (phpFiles.length > 0) {
96
+ try {
97
+ const phpEntrypoints = discoverPHPEntrypoints(phpFiles, rootDir);
98
+ entrypoints.push(...phpEntrypoints);
99
+ }
100
+ catch { }
101
+ }
75
102
  return entrypoints;
76
103
  }
77
104
  /**
@@ -236,6 +263,232 @@ function getScriptType(name) {
236
263
  return "formatter";
237
264
  return null;
238
265
  }
266
+ function discoverGoEntrypoints(goFiles, rootDir) {
267
+ const entrypoints = [];
268
+ for (const file of goFiles) {
269
+ try {
270
+ const content = readFile(path.join(rootDir, file.relativePath));
271
+ const fileName = file.name;
272
+ if (fileName === "main.go") {
273
+ const hasMain = content.match(/func\s+main\s*\(\s*\)/);
274
+ const packageMatch = content.match(/package\s+(\w+)/);
275
+ const packageName = packageMatch ? packageMatch[1] : "main";
276
+ const handlers = [];
277
+ const handlerMatches = content.matchAll(/http\.HandleFunc\s*\(\s*["']([^"']+)["']/g);
278
+ for (const match of handlerMatches) {
279
+ handlers.push(match[1]);
280
+ }
281
+ const portMatches = content.matchAll(/:\s*(\d{2,5})/g);
282
+ const ports = [];
283
+ for (const match of portMatches) {
284
+ ports.push(match[1]);
285
+ }
286
+ let description = `Go main package (${packageName})`;
287
+ if (handlers.length > 0) {
288
+ description += ` with HTTP handlers: ${handlers.join(", ")}`;
289
+ }
290
+ if (ports.length > 0) {
291
+ description += ` on port${ports.length > 1 ? "s" : ""} :${ports.join(", :")}`;
292
+ }
293
+ entrypoints.push({
294
+ name: "main.go",
295
+ path: file.relativePath,
296
+ type: hasMain ? "server" : "library",
297
+ description,
298
+ });
299
+ }
300
+ else {
301
+ const structMatches = content.matchAll(/type\s+(\w+)\s+struct/g);
302
+ const structs = [];
303
+ for (const match of structMatches) {
304
+ structs.push(match[1]);
305
+ }
306
+ const methodMatches = content.matchAll(/func\s*\(?\s*\*?\s*(\w+)\s*\)?\s*(\w+)\s*\(/g);
307
+ const methods = [];
308
+ for (const match of methodMatches) {
309
+ methods.push(match[2]);
310
+ }
311
+ if (structs.length > 0 || methods.length > 0) {
312
+ let description = "Go module";
313
+ if (structs.length > 0) {
314
+ description += ` with structs: ${structs.slice(0, 3).join(", ")}`;
315
+ }
316
+ if (methods.length > 0) {
317
+ description += `, methods: ${methods.slice(0, 3).join(", ")}`;
318
+ }
319
+ entrypoints.push({
320
+ name: fileName,
321
+ path: file.relativePath,
322
+ type: "library",
323
+ description,
324
+ });
325
+ }
326
+ }
327
+ }
328
+ catch { }
329
+ }
330
+ const goModPath = path.join(rootDir, "go.mod");
331
+ try {
332
+ const goMod = readFile(goModPath);
333
+ const moduleMatch = goMod.match(/module\s+(\S+)/);
334
+ if (moduleMatch) {
335
+ entrypoints.push({
336
+ name: "go.mod",
337
+ path: "go.mod",
338
+ type: "config",
339
+ description: `Go module: ${moduleMatch[1]}`,
340
+ });
341
+ }
342
+ }
343
+ catch { }
344
+ return entrypoints;
345
+ }
346
+ function discoverRustEntrypoints(rustFiles, rootDir) {
347
+ const entrypoints = [];
348
+ for (const file of rustFiles) {
349
+ try {
350
+ const content = readFile(path.join(rootDir, file.relativePath));
351
+ const fileName = file.name;
352
+ if (fileName === "main.rs") {
353
+ const hasMain = content.match(/fn\s+main\s*\(\s*\)/);
354
+ const structMatches = content.matchAll(/struct\s+(\w+)/g);
355
+ const structs = [];
356
+ for (const match of structMatches) {
357
+ structs.push(match[1]);
358
+ }
359
+ const implMatches = content.matchAll(/impl\s+(?:\w+\s+for\s+)?(\w+)/g);
360
+ const implementations = [];
361
+ for (const match of implMatches) {
362
+ implementations.push(match[1]);
363
+ }
364
+ let description = "Rust main";
365
+ if (structs.length > 0) {
366
+ description += ` with structs: ${structs.slice(0, 3).join(", ")}`;
367
+ }
368
+ if (implementations.length > 0) {
369
+ description += `, implementations: ${implementations.slice(0, 3).join(", ")}`;
370
+ }
371
+ entrypoints.push({
372
+ name: "main.rs",
373
+ path: file.relativePath,
374
+ type: hasMain ? "cli" : "library",
375
+ description,
376
+ });
377
+ }
378
+ else if (fileName === "lib.rs") {
379
+ const pubFnMatches = content.matchAll(/pub\s+fn\s+(\w+)/g);
380
+ const publicFns = [];
381
+ for (const match of pubFnMatches) {
382
+ publicFns.push(match[1]);
383
+ }
384
+ let description = "Rust library";
385
+ if (publicFns.length > 0) {
386
+ description += ` with public functions: ${publicFns.slice(0, 3).join(", ")}`;
387
+ }
388
+ entrypoints.push({
389
+ name: "lib.rs",
390
+ path: file.relativePath,
391
+ type: "library",
392
+ description,
393
+ });
394
+ }
395
+ }
396
+ catch { }
397
+ }
398
+ const cargoPath = path.join(rootDir, "Cargo.toml");
399
+ try {
400
+ const cargoContent = readFile(cargoPath);
401
+ const nameMatch = cargoContent.match(/name\s*=\s*"([^"]+)"/);
402
+ const versionMatch = cargoContent.match(/version\s*=\s*"([^"]+)"/);
403
+ let description = "Rust project";
404
+ if (nameMatch) {
405
+ description += `: ${nameMatch[1]}`;
406
+ }
407
+ if (versionMatch) {
408
+ description += ` v${versionMatch[1]}`;
409
+ }
410
+ const binMatch = cargoContent.match(/\[\[bin\]\]/);
411
+ if (binMatch) {
412
+ description += " (has binaries)";
413
+ }
414
+ entrypoints.push({
415
+ name: "Cargo.toml",
416
+ path: "Cargo.toml",
417
+ type: "config",
418
+ description,
419
+ });
420
+ }
421
+ catch { }
422
+ return entrypoints;
423
+ }
424
+ function discoverPHPEntrypoints(phpFiles, rootDir) {
425
+ const entrypoints = [];
426
+ const hasIndexPhp = phpFiles.some(f => f.name === "index.php");
427
+ const hasPublicIndex = phpFiles.some(f => f.relativePath.includes("public/index.php"));
428
+ if (hasIndexPhp) {
429
+ const indexFile = phpFiles.find(f => f.name === "index.php");
430
+ try {
431
+ const content = readFile(path.join(rootDir, indexFile.relativePath));
432
+ const classMatches = content.matchAll(/class\s+(\w+)/g);
433
+ const classes = [];
434
+ for (const match of classMatches) {
435
+ classes.push(match[1]);
436
+ }
437
+ const routes = [];
438
+ // Match $router->get('/path') or $app->post('/path') patterns
439
+ const httpMethodMatches = content.matchAll(/->\s*(?:get|post|put|delete|patch)\s*\(\s*["']([^"']+)["']/g);
440
+ for (const match of httpMethodMatches) {
441
+ routes.push(match[1]);
442
+ }
443
+ // Match $router->add('METHOD', '/path') patterns (second argument is the path)
444
+ const addMethodMatches = content.matchAll(/->\s*add\s*\(\s*["'][^"']+["']\s*,\s*["']([^"']+)["']/g);
445
+ for (const match of addMethodMatches) {
446
+ routes.push(match[1]);
447
+ }
448
+ let description = "PHP entry point";
449
+ if (classes.length > 0) {
450
+ description += ` with classes: ${classes.slice(0, 3).join(", ")}`;
451
+ }
452
+ if (routes.length > 0) {
453
+ description += `, routes: ${routes.slice(0, 3).join(", ")}`;
454
+ }
455
+ entrypoints.push({
456
+ name: "index.php",
457
+ path: indexFile.relativePath,
458
+ type: hasPublicIndex ? "server" : "api",
459
+ description,
460
+ });
461
+ }
462
+ catch { }
463
+ }
464
+ const composerPath = path.join(rootDir, "composer.json");
465
+ try {
466
+ const composer = readJsonFile(composerPath);
467
+ let description = "PHP project";
468
+ if (composer.name) {
469
+ description += `: ${composer.name}`;
470
+ }
471
+ if (composer.description) {
472
+ description += ` - ${composer.description}`;
473
+ }
474
+ const hasLaravel = composer.require && (composer.require["laravel/framework"] || composer.require["illuminate/support"]);
475
+ const hasSymfony = composer.require && (composer.require["symfony/framework-bundle"] || composer.require["symfony/symfony"]);
476
+ if (hasLaravel) {
477
+ description += " (Laravel)";
478
+ }
479
+ else if (hasSymfony) {
480
+ description += " (Symfony)";
481
+ }
482
+ entrypoints.push({
483
+ name: "composer.json",
484
+ path: "composer.json",
485
+ type: "config",
486
+ description,
487
+ });
488
+ }
489
+ catch { }
490
+ return entrypoints;
491
+ }
239
492
  export function generateEntrypointsFile(entrypoints) {
240
493
  const grouped = new Map();
241
494
  for (const ep of entrypoints) {