ai-first-cli 1.1.1 → 1.1.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.
- package/CHANGELOG.md +78 -0
- package/README.es.md +137 -1
- package/README.md +136 -4
- package/ai/ai_context.md +2 -2
- package/ai/architecture.md +3 -3
- package/ai/cache.json +85 -57
- package/ai/ccp/jira-123/context.json +7 -0
- package/ai/context/repo.json +56 -0
- package/ai/context/utils.json +7 -0
- package/ai/dependencies.json +51 -1026
- package/ai/files.json +195 -3
- package/ai/git/commit-activity.json +8646 -0
- package/ai/git/recent-features.json +1 -0
- package/ai/git/recent-files.json +52 -0
- package/ai/git/recent-flows.json +1 -0
- package/ai/graph/knowledge-graph.json +43643 -0
- package/ai/graph/module-graph.json +4 -0
- package/ai/graph/symbol-graph.json +3307 -879
- package/ai/graph/symbol-references.json +119 -32
- package/ai/index-state.json +843 -188
- package/ai/index.db +0 -0
- package/ai/modules.json +4 -0
- package/ai/repo-map.json +81 -17
- package/ai/repo_map.json +81 -17
- package/ai/repo_map.md +21 -7
- package/ai/summary.md +5 -5
- package/ai/symbols.json +1 -20287
- package/dist/analyzers/androidResources.d.ts +23 -0
- package/dist/analyzers/androidResources.d.ts.map +1 -0
- package/dist/analyzers/androidResources.js +93 -0
- package/dist/analyzers/androidResources.js.map +1 -0
- package/dist/analyzers/dependencies.d.ts.map +1 -1
- package/dist/analyzers/dependencies.js +37 -0
- package/dist/analyzers/dependencies.js.map +1 -1
- package/dist/analyzers/entrypoints.d.ts.map +1 -1
- package/dist/analyzers/entrypoints.js +71 -1
- package/dist/analyzers/entrypoints.js.map +1 -1
- package/dist/analyzers/gradleModules.d.ts +22 -0
- package/dist/analyzers/gradleModules.d.ts.map +1 -0
- package/dist/analyzers/gradleModules.js +75 -0
- package/dist/analyzers/gradleModules.js.map +1 -0
- package/dist/analyzers/techStack.d.ts +7 -0
- package/dist/analyzers/techStack.d.ts.map +1 -1
- package/dist/analyzers/techStack.js +44 -1
- package/dist/analyzers/techStack.js.map +1 -1
- package/dist/commands/ai-first.d.ts.map +1 -1
- package/dist/commands/ai-first.js +311 -1
- package/dist/commands/ai-first.js.map +1 -1
- package/dist/core/adapters/adapterRegistry.d.ts +39 -0
- package/dist/core/adapters/adapterRegistry.d.ts.map +1 -0
- package/dist/core/adapters/adapterRegistry.js +155 -0
- package/dist/core/adapters/adapterRegistry.js.map +1 -0
- package/dist/core/adapters/baseAdapter.d.ts +49 -0
- package/dist/core/adapters/baseAdapter.d.ts.map +1 -0
- package/dist/core/adapters/baseAdapter.js +28 -0
- package/dist/core/adapters/baseAdapter.js.map +1 -0
- package/dist/core/adapters/community/fastapiAdapter.d.ts +7 -0
- package/dist/core/adapters/community/fastapiAdapter.d.ts.map +1 -0
- package/dist/core/adapters/community/fastapiAdapter.js +40 -0
- package/dist/core/adapters/community/fastapiAdapter.js.map +1 -0
- package/dist/core/adapters/community/index.d.ts +11 -0
- package/dist/core/adapters/community/index.d.ts.map +1 -0
- package/dist/core/adapters/community/index.js +11 -0
- package/dist/core/adapters/community/index.js.map +1 -0
- package/dist/core/adapters/community/laravelAdapter.d.ts +7 -0
- package/dist/core/adapters/community/laravelAdapter.d.ts.map +1 -0
- package/dist/core/adapters/community/laravelAdapter.js +47 -0
- package/dist/core/adapters/community/laravelAdapter.js.map +1 -0
- package/dist/core/adapters/community/nestjsAdapter.d.ts +7 -0
- package/dist/core/adapters/community/nestjsAdapter.d.ts.map +1 -0
- package/dist/core/adapters/community/nestjsAdapter.js +48 -0
- package/dist/core/adapters/community/nestjsAdapter.js.map +1 -0
- package/dist/core/adapters/community/phoenixAdapter.d.ts +7 -0
- package/dist/core/adapters/community/phoenixAdapter.d.ts.map +1 -0
- package/dist/core/adapters/community/phoenixAdapter.js +45 -0
- package/dist/core/adapters/community/phoenixAdapter.js.map +1 -0
- package/dist/core/adapters/community/springBootAdapter.d.ts +7 -0
- package/dist/core/adapters/community/springBootAdapter.d.ts.map +1 -0
- package/dist/core/adapters/community/springBootAdapter.js +44 -0
- package/dist/core/adapters/community/springBootAdapter.js.map +1 -0
- package/dist/core/adapters/dotnetAdapter.d.ts +20 -0
- package/dist/core/adapters/dotnetAdapter.d.ts.map +1 -0
- package/dist/core/adapters/dotnetAdapter.js +86 -0
- package/dist/core/adapters/dotnetAdapter.js.map +1 -0
- package/dist/core/adapters/index.d.ts +18 -0
- package/dist/core/adapters/index.d.ts.map +1 -0
- package/dist/core/adapters/index.js +19 -0
- package/dist/core/adapters/index.js.map +1 -0
- package/dist/core/adapters/javascriptAdapter.d.ts +11 -0
- package/dist/core/adapters/javascriptAdapter.d.ts.map +1 -0
- package/dist/core/adapters/javascriptAdapter.js +47 -0
- package/dist/core/adapters/javascriptAdapter.js.map +1 -0
- package/dist/core/adapters/pythonAdapter.d.ts +20 -0
- package/dist/core/adapters/pythonAdapter.d.ts.map +1 -0
- package/dist/core/adapters/pythonAdapter.js +99 -0
- package/dist/core/adapters/pythonAdapter.js.map +1 -0
- package/dist/core/adapters/railsAdapter.d.ts +10 -0
- package/dist/core/adapters/railsAdapter.d.ts.map +1 -0
- package/dist/core/adapters/railsAdapter.js +52 -0
- package/dist/core/adapters/railsAdapter.js.map +1 -0
- package/dist/core/adapters/salesforceAdapter.d.ts +16 -0
- package/dist/core/adapters/salesforceAdapter.d.ts.map +1 -0
- package/dist/core/adapters/salesforceAdapter.js +64 -0
- package/dist/core/adapters/salesforceAdapter.js.map +1 -0
- package/dist/core/adapters/sdk.d.ts +83 -0
- package/dist/core/adapters/sdk.d.ts.map +1 -0
- package/dist/core/adapters/sdk.js +114 -0
- package/dist/core/adapters/sdk.js.map +1 -0
- package/dist/core/ccp.d.ts +37 -0
- package/dist/core/ccp.d.ts.map +1 -0
- package/dist/core/ccp.js +184 -0
- package/dist/core/ccp.js.map +1 -0
- package/dist/core/gitAnalyzer.d.ts +74 -0
- package/dist/core/gitAnalyzer.d.ts.map +1 -0
- package/dist/core/gitAnalyzer.js +298 -0
- package/dist/core/gitAnalyzer.js.map +1 -0
- package/dist/core/incrementalAnalyzer.d.ts +28 -0
- package/dist/core/incrementalAnalyzer.d.ts.map +1 -0
- package/dist/core/incrementalAnalyzer.js +343 -0
- package/dist/core/incrementalAnalyzer.js.map +1 -0
- package/dist/core/knowledgeGraphBuilder.d.ts +31 -0
- package/dist/core/knowledgeGraphBuilder.d.ts.map +1 -0
- package/dist/core/knowledgeGraphBuilder.js +197 -0
- package/dist/core/knowledgeGraphBuilder.js.map +1 -0
- package/dist/core/lazyAnalyzer.d.ts +57 -0
- package/dist/core/lazyAnalyzer.d.ts.map +1 -0
- package/dist/core/lazyAnalyzer.js +204 -0
- package/dist/core/lazyAnalyzer.js.map +1 -0
- package/dist/core/schema.d.ts +57 -0
- package/dist/core/schema.d.ts.map +1 -0
- package/dist/core/schema.js +131 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/core/semanticContexts.d.ts +40 -0
- package/dist/core/semanticContexts.d.ts.map +1 -0
- package/dist/core/semanticContexts.js +454 -0
- package/dist/core/semanticContexts.js.map +1 -0
- package/docs/es/guide/adapters.md +143 -0
- package/docs/es/guide/ai-repository-schema.md +119 -0
- package/docs/es/guide/features.md +67 -0
- package/docs/es/guide/flows.md +134 -0
- package/docs/es/guide/git-intelligence.md +170 -0
- package/docs/es/guide/incremental-analysis.md +131 -0
- package/docs/es/guide/knowledge-graph.md +135 -0
- package/docs/es/guide/lazy-indexing.md +144 -0
- package/docs/es/guide/performance.md +125 -0
- package/docs/guide/adapters.md +225 -0
- package/docs/guide/ai-repository-schema.md +119 -0
- package/docs/guide/architecture.md +69 -1
- package/docs/guide/flows.md +134 -0
- package/docs/guide/git-intelligence.md +170 -0
- package/docs/guide/incremental-analysis.md +131 -0
- package/docs/guide/knowledge-graph.md +135 -0
- package/docs/guide/lazy-indexing.md +144 -0
- package/docs/guide/performance.md +125 -0
- package/package.json +5 -2
- package/src/analyzers/androidResources.ts +113 -0
- package/src/analyzers/dependencies.ts +41 -0
- package/src/analyzers/entrypoints.ts +80 -1
- package/src/analyzers/gradleModules.ts +100 -0
- package/src/analyzers/techStack.ts +56 -0
- package/src/commands/ai-first.ts +342 -1
- package/src/core/adapters/adapterRegistry.ts +187 -0
- package/src/core/adapters/baseAdapter.ts +82 -0
- package/src/core/adapters/community/fastapiAdapter.ts +50 -0
- package/src/core/adapters/community/index.ts +11 -0
- package/src/core/adapters/community/laravelAdapter.ts +56 -0
- package/src/core/adapters/community/nestjsAdapter.ts +57 -0
- package/src/core/adapters/community/phoenixAdapter.ts +54 -0
- package/src/core/adapters/community/springBootAdapter.ts +53 -0
- package/src/core/adapters/dotnetAdapter.ts +104 -0
- package/src/core/adapters/index.ts +24 -0
- package/src/core/adapters/javascriptAdapter.ts +56 -0
- package/src/core/adapters/pythonAdapter.ts +118 -0
- package/src/core/adapters/railsAdapter.ts +65 -0
- package/src/core/adapters/salesforceAdapter.ts +76 -0
- package/src/core/adapters/sdk.ts +172 -0
- package/src/core/ccp.ts +240 -0
- package/src/core/gitAnalyzer.ts +391 -0
- package/src/core/incrementalAnalyzer.ts +382 -0
- package/src/core/knowledgeGraphBuilder.ts +181 -0
- package/src/core/lazyAnalyzer.ts +261 -0
- package/src/core/schema.ts +157 -0
- package/src/core/semanticContexts.ts +575 -0
- package/tests/adapters.test.ts +159 -0
- package/tests/gitAnalyzer.test.ts +133 -0
- package/tests/incrementalAnalyzer.test.ts +83 -0
- package/tests/knowledgeGraph.test.ts +146 -0
- package/tests/lazyAnalyzer.test.ts +230 -0
- package/tests/schema.test.ts +203 -0
- package/tests/semanticContexts.test.ts +435 -0
- package/ai/context/analyzers.Symbol.json +0 -19
- package/ai/context/analyzers.extractSymbols.json +0 -19
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# Adaptadores de Análisis
|
|
2
|
+
|
|
3
|
+
AI-First usa un sistema de adaptadores para soportar múltiples lenguajes y frameworks sin modificar el motor de análisis central.
|
|
4
|
+
|
|
5
|
+
## Descripción General
|
|
6
|
+
|
|
7
|
+
Los adaptadores personalizan cómo AI-First detecta:
|
|
8
|
+
- **Raíces de características**: Dónde buscar características de negocio
|
|
9
|
+
- **Puntos de entrada**: Archivos que representan puntos de entrada
|
|
10
|
+
- **Capas**: Capas arquitectónicas en el código base
|
|
11
|
+
- **Carpetas ignoradas**: Directorios técnicos a omitir
|
|
12
|
+
|
|
13
|
+
## Adaptadores Soportados
|
|
14
|
+
|
|
15
|
+
| Adaptador | Señales de Detección |
|
|
16
|
+
|-----------|---------------------|
|
|
17
|
+
| JavaScript/TypeScript | `package.json`, `tsconfig.json`, `vite.config.ts` |
|
|
18
|
+
| Django | `manage.py`, `settings.py` |
|
|
19
|
+
| Flask/FastAPI | `app.py`, `main.py` |
|
|
20
|
+
| Ruby on Rails | `Gemfile`, `config.ru` |
|
|
21
|
+
| Salesforce | `sfdx-project.json`, `force-app/` |
|
|
22
|
+
| .NET | `*.csproj`, `Program.cs` |
|
|
23
|
+
| ASP.NET Core | `Startup.cs`, `Program.cs` |
|
|
24
|
+
| Blazor | `_Imports.razor`, `@page` |
|
|
25
|
+
|
|
26
|
+
## Arquitectura
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
analysis/
|
|
30
|
+
adapters/
|
|
31
|
+
baseAdapter.ts # Definición de interfaz
|
|
32
|
+
javascriptAdapter.ts
|
|
33
|
+
pythonAdapter.ts
|
|
34
|
+
railsAdapter.ts
|
|
35
|
+
salesforceAdapter.ts
|
|
36
|
+
dotnetAdapter.ts
|
|
37
|
+
adapterRegistry.ts # Lógica de detección
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Interfaz del Adaptador
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
interface AnalysisAdapter {
|
|
44
|
+
name: string;
|
|
45
|
+
displayName: string;
|
|
46
|
+
detectionSignals: DetectionSignal[];
|
|
47
|
+
featureRoots: string[];
|
|
48
|
+
ignoredFolders: string[];
|
|
49
|
+
entrypointPatterns: string[];
|
|
50
|
+
layerRules: LayerRule[];
|
|
51
|
+
supportedExtensions: string[];
|
|
52
|
+
flowEntrypointPatterns: string[];
|
|
53
|
+
flowExcludePatterns: string[];
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Señales de Detección
|
|
58
|
+
|
|
59
|
+
Los adaptadores se detectan usando señales:
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
interface DetectionSignal {
|
|
63
|
+
type: 'file' | 'directory' | 'content';
|
|
64
|
+
pattern: string;
|
|
65
|
+
contentPattern?: string;
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Ejemplo:
|
|
70
|
+
```typescript
|
|
71
|
+
detectionSignals: [
|
|
72
|
+
{ type: 'file', pattern: 'package.json' },
|
|
73
|
+
{ type: 'file', pattern: 'tsconfig.json' },
|
|
74
|
+
{ type: 'directory', pattern: 'src' }
|
|
75
|
+
]
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Reglas de Capas
|
|
79
|
+
|
|
80
|
+
Cada adaptador define capas arquitectónicas:
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
layerRules: [
|
|
84
|
+
{ name: 'api', priority: 1, patterns: ['controller', 'handler', 'route'] },
|
|
85
|
+
{ name: 'service', priority: 2, patterns: ['service', 'usecase'] },
|
|
86
|
+
{ name: 'data', priority: 3, patterns: ['repository', 'model'] }
|
|
87
|
+
]
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Uso
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
import { detectAdapter, getAdapter } from './core/adapters/index.js';
|
|
94
|
+
|
|
95
|
+
// Auto-detectar tipo de proyecto
|
|
96
|
+
const adapter = detectAdapter('/path/to/project');
|
|
97
|
+
console.log(adapter.name); // 'javascript', 'django', etc.
|
|
98
|
+
|
|
99
|
+
// Obtener adaptador específico
|
|
100
|
+
const jsAdapter = getAdapter('javascript');
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Creando Adaptadores Personalizados
|
|
104
|
+
|
|
105
|
+
1. Crea un nuevo archivo en `src/core/adapters/`
|
|
106
|
+
2. Define tu adaptador:
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
import { AnalysisAdapter } from './baseAdapter.js';
|
|
110
|
+
|
|
111
|
+
export const myAdapter: AnalysisAdapter = {
|
|
112
|
+
name: 'myframework',
|
|
113
|
+
displayName: 'My Framework',
|
|
114
|
+
detectionSignals: [
|
|
115
|
+
{ type: 'file', pattern: 'my-framework.config.js' }
|
|
116
|
+
],
|
|
117
|
+
featureRoots: ['src', 'lib'],
|
|
118
|
+
ignoredFolders: ['node_modules', 'dist'],
|
|
119
|
+
entrypointPatterns: ['controller', 'service'],
|
|
120
|
+
layerRules: [
|
|
121
|
+
{ name: 'api', priority: 1, patterns: ['controller'] },
|
|
122
|
+
{ name: 'service', priority: 2, patterns: ['service'] },
|
|
123
|
+
{ name: 'data', priority: 3, patterns: ['model'] }
|
|
124
|
+
],
|
|
125
|
+
supportedExtensions: ['.ts', '.js'],
|
|
126
|
+
flowEntrypointPatterns: ['controller'],
|
|
127
|
+
flowExcludePatterns: ['test', 'spec']
|
|
128
|
+
};
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
3. Regístralo en `adapterRegistry.ts`
|
|
132
|
+
4. Agrega tests
|
|
133
|
+
|
|
134
|
+
## Integración
|
|
135
|
+
|
|
136
|
+
Los adaptadores se integran con la detección de características y flujos:
|
|
137
|
+
|
|
138
|
+
- `featureRoots` → dónde encontrar características
|
|
139
|
+
- `ignoredFolders` → qué omitir
|
|
140
|
+
- `entrypointPatterns` → puntos de entrada de lógica de negocio
|
|
141
|
+
- `layerRules` → capas de la cadena de flujos
|
|
142
|
+
|
|
143
|
+
Esto permite que AI-First entienda cualquier estructura de código base.
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Esquema de Repositorio AI
|
|
2
|
+
|
|
3
|
+
El Esquema de Repositorio AI estandariza cómo AI-First almacena y administra los metadatos del repositorio, permitiendo que los agentes de IA comprendan la estructura del proyecto y mantengan compatibilidad entre versiones.
|
|
4
|
+
|
|
5
|
+
## Descripción General
|
|
6
|
+
|
|
7
|
+
AI-First genera tres archivos de esquema principales que definen la estructura del proyecto:
|
|
8
|
+
|
|
9
|
+
- `schema.json` - Versión del esquema y metadatos
|
|
10
|
+
- `project.json` - Información del proyecto (features, flows, lenguajes, frameworks)
|
|
11
|
+
- `tools.json` - Herramientas y agentes de IA compatibles
|
|
12
|
+
|
|
13
|
+
## Archivos de Esquema
|
|
14
|
+
|
|
15
|
+
### schema.json
|
|
16
|
+
|
|
17
|
+
Contiene la versión del esquema y metadatos de generación:
|
|
18
|
+
|
|
19
|
+
```json
|
|
20
|
+
{
|
|
21
|
+
"schemaVersion": "1.0",
|
|
22
|
+
"generatedBy": "ai-first",
|
|
23
|
+
"generatedAt": "2024-01-15T10:30:00.000Z"
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### project.json
|
|
28
|
+
|
|
29
|
+
Contiene información específica del proyecto:
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"name": "mi-proyecto",
|
|
34
|
+
"rootDir": "/ruta/al/proyecto",
|
|
35
|
+
"features": ["auth", "users", "payments"],
|
|
36
|
+
"flows": ["login", "checkout", "registration"],
|
|
37
|
+
"languages": ["TypeScript", "Python"],
|
|
38
|
+
"frameworks": ["Express", "React"],
|
|
39
|
+
"generatedAt": "2024-01-15T10:30:00.000Z"
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### tools.json
|
|
44
|
+
|
|
45
|
+
Define los agentes de IA compatibles:
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"compatibleAgents": ["ai-first-bridge", "opencode", "cursor", "windsurf", "cline"],
|
|
50
|
+
"schemaVersion": "1.0"
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Detección Automática
|
|
55
|
+
|
|
56
|
+
AI-First detecta automáticamente:
|
|
57
|
+
|
|
58
|
+
- **Features**: Desde archivos `ai/context/features/*.json`
|
|
59
|
+
- **Flows**: Desde archivos `ai/context/flows/*.json`
|
|
60
|
+
- **Lenguajes**: Desde `ai/tech_stack.md` (sección Languages)
|
|
61
|
+
- **Frameworks**: Desde `ai/tech_stack.md` (sección Frameworks)
|
|
62
|
+
|
|
63
|
+
## Compatibilidad de Versiones
|
|
64
|
+
|
|
65
|
+
El esquema usa versionamiento semántico. AI-First valida la compatibilidad:
|
|
66
|
+
|
|
67
|
+
- Misma versión mayor = compatible
|
|
68
|
+
- Diferente versión mayor = incompatible
|
|
69
|
+
|
|
70
|
+
## Comandos CLI
|
|
71
|
+
|
|
72
|
+
### Generar Esquema
|
|
73
|
+
|
|
74
|
+
El esquema se genera automáticamente con `ai-first init`:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
ai-first init
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Validar Esquema
|
|
81
|
+
|
|
82
|
+
Verifica si tu repositorio tiene un esquema válido:
|
|
83
|
+
|
|
84
|
+
```javascript
|
|
85
|
+
import { validateSchema } from 'ai-first';
|
|
86
|
+
|
|
87
|
+
const result = validateSchema('./ai');
|
|
88
|
+
console.log(result.valid); // true/false
|
|
89
|
+
console.log(result.errors); // []
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Cargar Esquema
|
|
93
|
+
|
|
94
|
+
Carga el esquema programáticamente:
|
|
95
|
+
|
|
96
|
+
```javascript
|
|
97
|
+
import { loadFullSchema } from 'ai-first';
|
|
98
|
+
|
|
99
|
+
const schema = loadFullSchema('./ai');
|
|
100
|
+
if (schema) {
|
|
101
|
+
console.log(schema.project.name);
|
|
102
|
+
console.log(schema.schema.schemaVersion);
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Integración
|
|
107
|
+
|
|
108
|
+
El esquema está integrado en el CLI de AI-First:
|
|
109
|
+
|
|
110
|
+
1. `ai-first init` - Genera archivos de esquema
|
|
111
|
+
2. `ai-first validate` - Valida el esquema (próximamente)
|
|
112
|
+
3. `ai-first doctor` - Verifica la salud del esquema
|
|
113
|
+
|
|
114
|
+
## Beneficios
|
|
115
|
+
|
|
116
|
+
- **Seguridad de Versión**: Los agentes de IA saben qué versión del esquema esperar
|
|
117
|
+
- **Descubrimiento de Proyecto**: Features y flows se detectan automáticamente
|
|
118
|
+
- **Compatibilidad de Agentes**: Lista clara de herramientas de IA compatibles
|
|
119
|
+
- **Extensibilidad**: El esquema puede extenderse para agentes personalizados
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Detección de Características
|
|
2
|
+
|
|
3
|
+
AI-First detecta automáticamente características empresariales y flujos desde la estructura de tu código base.
|
|
4
|
+
|
|
5
|
+
## Reglas de Detección de Características
|
|
6
|
+
|
|
7
|
+
### 1. Raíces de Candidatos
|
|
8
|
+
|
|
9
|
+
Las características se escanean dentro de:
|
|
10
|
+
- `src/*`
|
|
11
|
+
- `app/*`
|
|
12
|
+
- `packages/*`
|
|
13
|
+
- `services/*`
|
|
14
|
+
- `modules/*`
|
|
15
|
+
- `features/*`
|
|
16
|
+
|
|
17
|
+
### 2. Carpetas Ignoradas
|
|
18
|
+
|
|
19
|
+
Las carpetas técnicas son excluidas:
|
|
20
|
+
- `utils`, `helpers`, `types`, `interfaces`, `constants`
|
|
21
|
+
- `config`, `dto`, `models`, `common`, `shared`
|
|
22
|
+
|
|
23
|
+
### 3. Requisitos de Características
|
|
24
|
+
|
|
25
|
+
Una característica válida debe:
|
|
26
|
+
- Contener al menos 3 archivos fuente
|
|
27
|
+
- Contener al menos un punto de entrada (Controller, Route, Handler, Command, Service)
|
|
28
|
+
- Existir en profundidad 1 o 2: `src/auth`, `src/modules/auth`
|
|
29
|
+
|
|
30
|
+
## Formato de Salida de Características
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"name": "auth",
|
|
35
|
+
"path": "src/auth",
|
|
36
|
+
"files": [
|
|
37
|
+
"src/auth/authController.ts",
|
|
38
|
+
"src/auth/authService.ts",
|
|
39
|
+
"src/auth/authRepository.ts"
|
|
40
|
+
],
|
|
41
|
+
"entrypoints": [
|
|
42
|
+
"src/auth/authController.ts"
|
|
43
|
+
],
|
|
44
|
+
"dependencies": ["users", "payments"]
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Detección de Flujos
|
|
49
|
+
|
|
50
|
+
Los flujos representan cadenas de ejecución empresarial que comienzan desde puntos de entrada:
|
|
51
|
+
|
|
52
|
+
- **Mínimo 3 archivos** por flujo
|
|
53
|
+
- **Mínimo 2 capas arquitectónicas** (api → service → data)
|
|
54
|
+
- Puntos de entrada: Controller, Route, Handler, Command
|
|
55
|
+
|
|
56
|
+
Los flujos se generan usando tres métodos de respaldo:
|
|
57
|
+
1. **Grafo de Símbolos** - Usa relaciones de llamada/importación
|
|
58
|
+
2. **Estructura de Carpetas** - Agrupa por prefijo de característica
|
|
59
|
+
3. **Análisis de Importaciones** - Sigue cadenas de dependencias
|
|
60
|
+
|
|
61
|
+
## Ubicación de Salida
|
|
62
|
+
|
|
63
|
+
Las características y flujos se escriben en:
|
|
64
|
+
```
|
|
65
|
+
ai/context/features/<caracteristica>.json
|
|
66
|
+
ai/context/flows/<flujo>.json
|
|
67
|
+
```
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Detección de Flujos
|
|
2
|
+
|
|
3
|
+
Los flujos representan cadenas de ejecución empresarial que atraviesan múltiples capas arquitectónicas en tu código base.
|
|
4
|
+
|
|
5
|
+
## Descripción General
|
|
6
|
+
|
|
7
|
+
La detección de flujos identifica cómo fluyen los datos a través de tu aplicación desde los puntos de entrada hasta las capas de acceso a datos.
|
|
8
|
+
|
|
9
|
+
### Ejemplo de Flujo
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
LoginController → AuthService → UserRepository
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Esto representa una arquitectura de tres niveles típica:
|
|
16
|
+
1. **Capa API**: LoginController (punto de entrada)
|
|
17
|
+
2. **Capa de Servicio**: AuthService (lógica de negocio)
|
|
18
|
+
3. **Capa de Datos**: UserRepository (persistencia)
|
|
19
|
+
|
|
20
|
+
## Métodos de Detección
|
|
21
|
+
|
|
22
|
+
AI-First usa múltiples métodos de respaldo para detectar flujos:
|
|
23
|
+
|
|
24
|
+
### 1. Grafo de Símbolos (Primario)
|
|
25
|
+
|
|
26
|
+
Cuando las relaciones de símbolos son fuertes, los flujos se detectan analizando:
|
|
27
|
+
- Llamadas de funciones (`calls`)
|
|
28
|
+
- Importaciones de módulos (`imports`)
|
|
29
|
+
- Referencias de símbolos (`references`)
|
|
30
|
+
|
|
31
|
+
**Requisitos:**
|
|
32
|
+
- Densidad del grafo de símbolos ≥ 0.5
|
|
33
|
+
- Al menos 10 relaciones
|
|
34
|
+
|
|
35
|
+
### 2. Estructura de Carpetas (Respaldo)
|
|
36
|
+
|
|
37
|
+
Cuando el grafo de símbolos es débil, los flujos se infieren de:
|
|
38
|
+
- Convenciones de nombres de archivos (ej. `authController.ts`, `authService.ts`)
|
|
39
|
+
- Agrupación por prefijo de característica
|
|
40
|
+
|
|
41
|
+
**Ejemplo:**
|
|
42
|
+
- `authController.ts` → característica: `auth`
|
|
43
|
+
- `authService.ts` → pertenece al flujo `auth`
|
|
44
|
+
- `authRepository.ts` → pertenece al flujo `auth`
|
|
45
|
+
|
|
46
|
+
### 3. Análisis de Importaciones (Respaldo)
|
|
47
|
+
|
|
48
|
+
Usa el análisis de dependencias para rastrear rutas de ejecución:
|
|
49
|
+
1. Iniciar desde archivos de punto de entrada
|
|
50
|
+
2. Seguir declaraciones de importación
|
|
51
|
+
3. Construir cadena hasta MAX_FLOW_DEPTH
|
|
52
|
+
|
|
53
|
+
## Configuración
|
|
54
|
+
|
|
55
|
+
### Límites
|
|
56
|
+
|
|
57
|
+
| Parámetro | Valor | Descripción |
|
|
58
|
+
|-----------|-------|-------------|
|
|
59
|
+
| `MAX_FLOW_DEPTH` | 5 | Profundidad máxima de recorrido |
|
|
60
|
+
| `MAX_FLOW_FILES` | 30 | Máximo de archivos por flujo |
|
|
61
|
+
|
|
62
|
+
### Puntos de Entrada
|
|
63
|
+
|
|
64
|
+
Los flujos deben comenzar desde uno de estos tipos de archivos:
|
|
65
|
+
- Controller
|
|
66
|
+
- Route
|
|
67
|
+
- Handler
|
|
68
|
+
- Command
|
|
69
|
+
|
|
70
|
+
### Capas
|
|
71
|
+
|
|
72
|
+
Capas arquitectónicas soportadas:
|
|
73
|
+
| Capa | Patrones |
|
|
74
|
+
|-------|----------|
|
|
75
|
+
| api | controller, handler, route, router, endpoint |
|
|
76
|
+
| service | service, services, usecase, interactor |
|
|
77
|
+
| data | repository, repo, dal, dao, data, persistence |
|
|
78
|
+
| domain | model, entity, schema, domain |
|
|
79
|
+
|
|
80
|
+
## Requisitos
|
|
81
|
+
|
|
82
|
+
Un flujo válido debe tener:
|
|
83
|
+
- **Mínimo 3 archivos**
|
|
84
|
+
- **Mínimo 2 capas arquitectónicas**
|
|
85
|
+
|
|
86
|
+
## Formato de Salida
|
|
87
|
+
|
|
88
|
+
Los flujos se escriben en: `ai/context/flows/<nombre-flujo>.json`
|
|
89
|
+
|
|
90
|
+
```json
|
|
91
|
+
{
|
|
92
|
+
"name": "auth",
|
|
93
|
+
"entrypoint": "api/authController.js",
|
|
94
|
+
"files": [
|
|
95
|
+
"api/authController.js",
|
|
96
|
+
"services/authService.js",
|
|
97
|
+
"data/authRepository.js"
|
|
98
|
+
],
|
|
99
|
+
"depth": 3,
|
|
100
|
+
"layers": ["api", "service", "data"]
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Campos de Salida
|
|
105
|
+
|
|
106
|
+
| Campo | Descripción |
|
|
107
|
+
|-------|-------------|
|
|
108
|
+
| `name` | Identificador del flujo (derivado del punto de entrada) |
|
|
109
|
+
| `entrypoint` | Archivo de inicio (Controller/Route/Handler/Command) |
|
|
110
|
+
| `files` | Todos los archivos en la cadena del flujo |
|
|
111
|
+
| `depth` | Profundidad real del recorrido |
|
|
112
|
+
| `layers` | Capas únicas recorridas |
|
|
113
|
+
|
|
114
|
+
## Uso
|
|
115
|
+
|
|
116
|
+
Los flujos se generan automáticamente al ejecutar:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
ai-first map
|
|
120
|
+
# o
|
|
121
|
+
ai-first init
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Integración
|
|
125
|
+
|
|
126
|
+
Los flujos funcionan con las Características para proporcionar contexto completo:
|
|
127
|
+
|
|
128
|
+
- **Características**: Identifican módulos de negocio (auth, users, payments)
|
|
129
|
+
- **Flujos**: Identifican cómo se ejecuta el código dentro de las características
|
|
130
|
+
|
|
131
|
+
Juntos permiten a los agentes de IA:
|
|
132
|
+
1. Entender la estructura del dominio de negocio
|
|
133
|
+
2. Rastrear rutas de ejecución
|
|
134
|
+
3. Localizar código relevante para modificaciones
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# Inteligencia Git
|
|
2
|
+
|
|
3
|
+
AI-First puede analizar tu repositorio git para proporcionar a los agentes IA contexto sobre la actividad reciente, ayudándolos a priorizar archivos relevantes y entender qué ha sido modificado recientemente.
|
|
4
|
+
|
|
5
|
+
## Por qué Inteligencia Git?
|
|
6
|
+
|
|
7
|
+
Cuando trabajas con asistentes de codificación IA, conocer qué archivos han sido modificados recientemente ayuda a la IA a:
|
|
8
|
+
|
|
9
|
+
- **Priorizar revisión** - Enfocarse en archivos modificados recently al sugerir modificaciones
|
|
10
|
+
- **Entender contexto** - Saber qué features/flows están siendo desarrollados activamente
|
|
11
|
+
- **Evitar conflictos** - Identificar archivos que fueron modificados recientemente para prevenir sobreescritura
|
|
12
|
+
- **Rastrear cambios** - Ver patrones de commits y frecuencia de actividad
|
|
13
|
+
|
|
14
|
+
## Cómo Funciona
|
|
15
|
+
|
|
16
|
+
La Inteligencia Git analiza tu historial git para generar metadata sobre la actividad reciente del repositorio:
|
|
17
|
+
|
|
18
|
+
1. **Detecta repositorio git** - Verifica si el proyecto es un repositorio git
|
|
19
|
+
2. **Analiza commits recientes** - Extrae datos de commits (default: últimos 50 commits, últimos 30 días)
|
|
20
|
+
3. **Mapea a features/flows** - Correlaciona archivos cambiados con features y flows detectados
|
|
21
|
+
4. **Genera metadata** - Archivos JSON de salida para consumo de IA
|
|
22
|
+
|
|
23
|
+
## Archivos Generados
|
|
24
|
+
|
|
25
|
+
Cuando ejecutas `ai-first git`, los siguientes archivos se crean en `ai/git/`:
|
|
26
|
+
|
|
27
|
+
### recent-files.json
|
|
28
|
+
|
|
29
|
+
Lista de archivos recientemente cambiados:
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
[
|
|
33
|
+
"src/auth/loginController.ts",
|
|
34
|
+
"src/auth/sessionService.ts",
|
|
35
|
+
"src/payments/checkoutFlow.ts"
|
|
36
|
+
]
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### recent-features.json
|
|
40
|
+
|
|
41
|
+
Features que han sido modificados recientemente:
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
["auth", "payments"]
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### recent-flows.json
|
|
48
|
+
|
|
49
|
+
Flows que han sido modificados recientemente:
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
["login", "checkout"]
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### commit-activity.json
|
|
56
|
+
|
|
57
|
+
Datos detallados de frecuencia de commits:
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"totalCommits": 50,
|
|
62
|
+
"dateRange": {
|
|
63
|
+
"start": "2026-02-01",
|
|
64
|
+
"end": "2026-03-10"
|
|
65
|
+
},
|
|
66
|
+
"files": {
|
|
67
|
+
"src/auth/loginController.ts": 5,
|
|
68
|
+
"src/auth/sessionService.ts": 3
|
|
69
|
+
},
|
|
70
|
+
"features": {
|
|
71
|
+
"auth": 8,
|
|
72
|
+
"payments": 12
|
|
73
|
+
},
|
|
74
|
+
"flows": {
|
|
75
|
+
"login": 4,
|
|
76
|
+
"checkout": 7
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Uso
|
|
82
|
+
|
|
83
|
+
### Comando CLI
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Analizar actividad git
|
|
87
|
+
ai-first git
|
|
88
|
+
|
|
89
|
+
# Analizar con más commits
|
|
90
|
+
ai-first git --limit 100
|
|
91
|
+
|
|
92
|
+
# Mostrar actividad detallada
|
|
93
|
+
ai-first git --activity
|
|
94
|
+
|
|
95
|
+
# Salida como JSON
|
|
96
|
+
ai-first git --json
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Opciones
|
|
100
|
+
|
|
101
|
+
| Opción | Alias | Descripción |
|
|
102
|
+
|--------|-------|-------------|
|
|
103
|
+
| `--root` | `-r` | Directorio raíz (default: actual) |
|
|
104
|
+
| `--limit` | `-n` | Número de commits (default: 50) |
|
|
105
|
+
| `--activity` | `-a` | Mostrar actividad detallada |
|
|
106
|
+
| `--json` | | Salida como JSON |
|
|
107
|
+
| `--help` | `-h` | Mostrar ayuda |
|
|
108
|
+
|
|
109
|
+
### Uso Programático
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
import {
|
|
113
|
+
detectGitRepository,
|
|
114
|
+
getRecentCommits,
|
|
115
|
+
analyzeGitActivity,
|
|
116
|
+
generateGitContext
|
|
117
|
+
} from 'ai-first';
|
|
118
|
+
|
|
119
|
+
// Verificar si es repo git
|
|
120
|
+
if (detectGitRepository('/path/to/project')) {
|
|
121
|
+
// Obtener commits recientes
|
|
122
|
+
const commits = getRecentCommits('/path/to/project');
|
|
123
|
+
|
|
124
|
+
// Analizar actividad
|
|
125
|
+
const activity = analyzeGitActivity('/path/to/project');
|
|
126
|
+
|
|
127
|
+
// Generar archivos de contexto
|
|
128
|
+
const context = generateGitContext('/path/to/project');
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Referencia API
|
|
133
|
+
|
|
134
|
+
### detectGitRepository(rootDir: string): boolean
|
|
135
|
+
|
|
136
|
+
Verifica si un directorio es un repositorio git.
|
|
137
|
+
|
|
138
|
+
### getRecentCommits(rootDir: string, limit?: number): GitCommit[]
|
|
139
|
+
|
|
140
|
+
Retorna commits recientes con cambios de archivos.
|
|
141
|
+
|
|
142
|
+
### extractChangedFiles(commits: GitCommit[]): RecentFile[]
|
|
143
|
+
|
|
144
|
+
Extrae y cuenta archivos cambiados de commits.
|
|
145
|
+
|
|
146
|
+
### mapFilesToFeatures(rootDir: string, files: string[]): string[]
|
|
147
|
+
|
|
148
|
+
Mapea archivos cambiados a features detectados.
|
|
149
|
+
|
|
150
|
+
### mapFilesToFlows(rootDir: string, files: string[]): string[]
|
|
151
|
+
|
|
152
|
+
Mapea archivos cambiados a flows detectados.
|
|
153
|
+
|
|
154
|
+
### analyzeGitActivity(rootDir: string): GitActivity | null
|
|
155
|
+
|
|
156
|
+
Analiza actividad git y retorna datos agregados.
|
|
157
|
+
|
|
158
|
+
### generateGitContext(rootDir: string, aiDir?: string): GitContext
|
|
159
|
+
|
|
160
|
+
Genera todos los archivos de contexto git en `ai/git/`.
|
|
161
|
+
|
|
162
|
+
## Integración con Contexto IA
|
|
163
|
+
|
|
164
|
+
La inteligencia git se integra con el sistema de contexto IA:
|
|
165
|
+
|
|
166
|
+
1. Ejecuta `ai-first init` para generar features y flows
|
|
167
|
+
2. Ejecuta `ai-first git` para analizar actividad git
|
|
168
|
+
3. Los agentes IA pueden leer los archivos en `ai/git/` para entender cambios recientes
|
|
169
|
+
|
|
170
|
+
Esto proporciona una imagen completa de la estructura de tu código y su actividad de desarrollo.
|