@orxataguy/tyr 1.0.0 → 1.0.1

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/README.md CHANGED
@@ -1,408 +1,408 @@
1
- # Tyr Framework - Guía Completa del Proyecto
2
-
3
- **Autor:** Manel Andreu Pérez
4
- **Versión:** 1.0.0
5
- **Licencia:** MIT
6
-
7
- ---
8
-
9
- ## 📋 Descripción del Proyecto
10
-
11
- Tyr Framework es un entorno de ejecución basado en TypeScript que permite crear, ejecutar y automatizar herramientas CLI de manera declarativa.
12
-
13
- La arquitectura se construye sobre **inyección de dependencias**: el "Kernel" proporciona un contexto de ejecución donde los "Managers" exponen su funcionalidad a través de una API auto-generada. Gracias a un sistema de introspección de código, el entorno analiza tipos y documentación en tiempo real.
14
-
15
- ---
16
-
17
- ## 📁 Estructura del Proyecto
18
-
19
- ```
20
- /
21
- ├── bin/
22
- │ └── tyr.ts // Punto de entrada del CLI
23
-
24
- ├── src/
25
- │ ├── core/
26
- │ │ ├── Kernel.ts // Motor principal de ejecución
27
- │ │ ├── Container.ts // Contenedor de servicios (inyección de dependencias)
28
- │ │ ├── TyrError.ts // Manejo de errores personalizado
29
- │ │ └── sys/
30
- │ │ ├── gen.ts // Comando: generar nuevos comandos
31
- │ │ ├── rem.ts // Comando: remover comandos
32
- │ │ └── doc.ts // Comando: generar documentación
33
- │ │
34
- │ ├── commands/
35
- │ │ ├── install.tyr.ts // Comando: instalar el framework
36
- │ │ └── dw.tyr.ts // Comando: descargar dependencias
37
- │ │
38
- │ └── lib/
39
- │ ├── ShellManager.ts // Ejecución de comandos shell
40
- │ ├── FileSystemManager.ts // Operaciones del sistema de archivos
41
- │ ├── PackageManager.ts // Gestión de paquetes (npm)
42
- │ ├── DockerManager.ts // Integración con Docker
43
- │ ├── GitManager.ts // Operaciones de Git
44
- │ ├── SystemManager.ts // Gestión del sistema
45
- │ ├── SQLManager.ts // Consultas a bases de datos MSSQL
46
- │ └── WebManager.ts // Requests HTTP
47
-
48
- ├── tests/
49
- │ ├── commands.test.ts // Tests de comandos (Vitest)
50
- │ ├── test-runner.ts // Runner de smoke tests
51
- │ └── setup.ts // Configuración de mocks
52
-
53
- ├── config/
54
- │ └── map.yml // Configuración de comandos del framework
55
-
56
- ├── local/
57
- │ ├── aliases.sh // Alias de shell personalizados
58
- │ └── plugins.sh // Plugins para shell
59
-
60
- ├── package.json // Dependencias y scripts
61
- ├── tsconfig.json // Configuración de TypeScript
62
- ├── vitest.config.ts // Configuración de tests
63
- └── html-reporter.ts // Generador de reportes HTML
64
- ```
65
-
66
- ---
67
-
68
- ## 🎯 Conceptos Clave
69
-
70
- ### 1. KERNEL (`src/core/Kernel.ts`)
71
-
72
- - **Orquestador principal** del framework
73
- - Carga configuración desde `config/map.yml`
74
- - Enruta comandos hacia sus manejadores
75
- - Proporciona el contexto de ejecución (`TyrContext`)
76
- - **Métodos principales:**
77
- - `boot(args)`: Inicializa el framework
78
- - `handle(args)`: Ejecuta comandos
79
-
80
- ### 2. CONTAINER (`src/core/Container.ts`)
81
-
82
- - Contenedor de **inyección de dependencias**
83
- - Instancia todos los servicios (Managers)
84
- - Expone interfaz `ServiceContainer` con todos los servicios
85
- - Implementa patrón Singleton para servicios
86
-
87
- ### 3. MANAGERS (`src/lib/*.ts`)
88
-
89
- Conjunto de abstracciones sobre librerías externas. Ejecutar comando de documentación para saber más.
90
-
91
- ```bash
92
- tyr doc
93
- ```
94
-
95
- ### 4. COMANDOS
96
-
97
- Son funciones que siguen el patrón:
98
-
99
- ```typescript
100
- export default ({ task, fail, logger, fs, shell }: TyrContext) => {
101
- return async (args: string[]) => {
102
- // Lógica del comando
103
- };
104
- };
105
- ```
106
-
107
- Los comandos personalizados se registran en `config/map.yml`
108
-
109
- ### 5. CONFIGURACIÓN (`config/map.yml`)
110
-
111
- Define los comandos disponibles:
112
-
113
- ```yaml
114
- commands:
115
- install: ./src/commands/install.tyr.ts
116
- dw: ./src/commands/dw.tyr.ts
117
- ```
118
-
119
- ---
120
-
121
- ## 🚀 Cómo Usar el Framework
122
-
123
- ### Instalación
124
-
125
- ```bash
126
- npm install
127
- npm run install # Ejecuta el comando install
128
- ```
129
-
130
- ### Ejecutar Comandos
131
-
132
- ```bash
133
- tyr <nombre-comando> [argumentos]
134
- ```
135
-
136
- **Ejemplos:**
137
- - `tyr install` - Instala y configura el framework
138
- - `tyr gen micomando` - Genera un nuevo comando
139
- - `tyr rem micomando` - Elimina un comando
140
- - `tyr doc` - Genera documentación
141
- - `tyr dw` - Descarga dependencias
142
-
143
- ### Crear un Nuevo Comando
144
-
145
- ```bash
146
- tyr gen <nombre-comando> <nombre-archivo>
147
- ```
148
-
149
- Se creará el archivo en `src/commands/<nombre-archivo>.tyr.ts`:
150
-
151
- ```typescript
152
- import { TyrContext } from '../core/Kernel';
153
-
154
- export default ({ task, fail, logger, fs, shell }: TyrContext) => {
155
- return async (args: string[]) => {
156
- // Validar argumentos
157
- if (args.length === 0) {
158
- fail('Se requiere al menos un argumento');
159
- }
160
-
161
- // Usar tareas con descripción
162
- await task('Realizando acción', async () => {
163
- logger.info('Procesando...');
164
- // Tu lógica aquí
165
- });
166
-
167
- logger.success('¡Listo!');
168
- };
169
- };
170
- ```
171
-
172
- ### Eliminarc un Comando Existente
173
- ```bash
174
- tyr rem <nombre-comando>
175
- ```
176
-
177
-
178
- ---
179
-
180
- ## 🧪 Testing
181
-
182
- El framework incluye un sistema de testing completo:
183
-
184
- ### Tests Unitarios (Vitest)
185
-
186
- ```bash
187
- npm run test # Ejecutar tests
188
- npm run test:watch # Modo watch
189
- npm run test:ui # UI interactivo
190
- npm run test:coverage # Cobertura
191
- ```
192
-
193
- ### Smoke Tests
194
-
195
- ```bash
196
- npm run test:smoke # Valida que todos los comandos cargan correctamente
197
- ```
198
-
199
- **Verifica:**
200
- - Comandos cargan como módulos
201
- - Exportan función por defecto
202
- - Se instancian con contexto
203
- - Se ejecutan sin excepciones no controladas
204
-
205
- ### Mocks
206
-
207
- El archivo `tests/setup.ts` proporciona `createMockContext()` que mocka:
208
- - Logger
209
- - ShellManager
210
- - FileSystemManager
211
- - Todos los managers
212
-
213
- ---
214
-
215
- ## 📊 Flujo de Ejecución
216
-
217
- ```
218
- 1. Usuario ejecuta: tyr micomando arg1 arg2
219
-
220
- 2. bin/tyr.ts captura el comando
221
-
222
- 3. Kernel.boot() inicializa el framework
223
-
224
- 4. Container.init() crea todos los Managers
225
-
226
- 5. Carga config/map.yml
227
-
228
- 6. Kernel.handle() recibe [micomando, arg1, arg2]
229
-
230
- 7. Busca el comando en la configuración
231
-
232
- 8. Importa el módulo dinámicamente
233
-
234
- 9. Instancia el comando pasando TyrContext
235
-
236
- 10. Ejecuta comando(args)
237
-
238
- 11. Retorna resultado o error
239
- ```
240
-
241
- ---
242
-
243
- ## 📦 Dependencias Principales
244
-
245
- ### Runtime
246
-
247
- - **chalk** - Colores en terminal
248
- - **execa** - Ejecución de shell mejorada
249
- - **axios** - HTTP client
250
- - **mssql** - Driver MSSQL
251
- - **js-yaml** - Parser YAML
252
- - **inquirer** - Prompts interactivos
253
- - **dotenv** - Variables de entorno
254
- - **cheerio** - Web scraping
255
- - **find-config** - Búsqueda de archivos de config
256
-
257
- ### Dev
258
-
259
- - **TypeScript** - Lenguaje
260
- - **Vitest** - Testing framework
261
- - **tsx** - Ejecutor TypeScript
262
- - **Vite** - Build tool
263
- - **Husky** - Git hooks
264
-
265
- ---
266
-
267
- ## 🔧 Configuración Importante
268
-
269
- ### tsconfig.json
270
- - `target`: ES2020
271
- - `module`: ES2020
272
- - `moduleResolution`: node
273
-
274
- ### package.json
275
- - `type`: module (módulos ES)
276
- - `bin`: { tyr: ./bin/tyr.ts }
277
-
278
- ### vitest.config.ts
279
- - Test runner del proyecto
280
- - Configuración de mocks y setup
281
-
282
- ---
283
-
284
- ## 🎨 Patrones y Best Practices
285
-
286
- ### Inyección de Dependencias
287
-
288
- ```typescript
289
- const command = ({ logger, fs, shell }: TyrContext) => {
290
- // Los managers se inyectan automáticamente
291
- return async (args) => { ... };
292
- };
293
- ```
294
-
295
- ### Manejo de Errores
296
-
297
- - Usa `fail(message, suggestion?)` para errores controlados
298
- - `fail()` lanza `TyrError`
299
- - Los comandos pueden capturar y manejar excepciones
300
-
301
- ### Tareas con Descripción
302
-
303
- ```typescript
304
- await task('Descripción', async () => {
305
- // Operación
306
- });
307
- // Muestra progreso en terminal
308
- ```
309
-
310
- ### Logging
311
-
312
- ```typescript
313
- logger.info() // Información general
314
- logger.success() // Operación exitosa
315
- logger.error() // Error (solo en debug)
316
- logger.warn() // Advertencia (solo en debug)
317
- ```
318
-
319
- ### Argumentos de Comando
320
-
321
- Siempre valida los argumentos al inicio:
322
-
323
- ```typescript
324
- if (args.length < 2) {
325
- fail('Se requieren 2 argumentos', 'Sintaxis: tyr cmd arg1 arg2');
326
- }
327
- ```
328
-
329
- ---
330
-
331
- ## 📚 Comandos Disponibles
332
-
333
- ### Comandos del Sistema
334
-
335
- #### `tyr gen <nombre-comando> [archivo-salida]`
336
- Genera un nuevo comando con template
337
- - Crea archivo en `src/commands/`
338
- - Registra en `config/map.yml`
339
-
340
- #### `tyr rem <nombre-comando>`
341
- Elimina un comando
342
- - Borra archivo del comando
343
- - Elimina entrada en `config/map.yml`
344
-
345
- #### `tyr doc`
346
- Genera documentación completa del sistema
347
- - Analiza todos los comandos
348
- - Extrae tipos y comentarios JSDoc
349
- - Genera HTML interactivo
350
-
351
- ### Comandos Personalizados
352
-
353
- #### `tyr install`
354
- Instala y configura el framework
355
- - Crea estructura de carpetas
356
- - Copia templates
357
- - Configura alias 'tyre' en .zshrc
358
-
359
- #### `tyr dw`
360
- Descarga y configura dependencias
361
- - Instala paquetes npm
362
- - Configura variables de entorno
363
- - Verifica instalaciones externas
364
-
365
- ---
366
-
367
- ## 🐛 Debugging
368
-
369
- Ejecuta con flag `--debug` para ver más información:
370
-
371
- ```bash
372
- tyr micomando --debug
373
- ```
374
-
375
- - Activa logging de errores y warnings
376
- - Muestra detalles de operaciones
377
-
378
- ---
379
-
380
- ## 📝 Notas de Desarrollo
381
-
382
- - El framework usa módulos ES6, asegúrate de `"type": "module"` en `package.json`
383
- - Los comandos deben ser `async`
384
- - Siempre retorna del handler o lanza error
385
- - Usa la inyección de dependencias, no importes managers directamente
386
- - Los tests usan mocks automáticos del `setup.ts`
387
- - El smoke test valida que todos los comandos cargan correctamente
388
-
389
- ---
390
-
391
- ## 🔗 Referencias Útiles
392
-
393
- Archivos principales para empezar:
394
-
395
- - [src/core/Kernel.ts](src/core/Kernel.ts) - Entender cómo funciona el motor
396
- - [src/core/Container.ts](src/core/Container.ts) - Ver cómo se inyectan dependencias
397
- - [src/commands/install.tyr.ts](src/commands/install.tyr.ts) - Ejemplo de comando completo
398
- - [src/core/sys/gen.ts](src/core/sys/gen.ts) - Cómo generar nuevos comandos
399
- - [tests/test-runner.ts](tests/test-runner.ts) - Sistema de testing
400
-
401
- ---
402
-
403
- ## Licencia
404
-
405
- **Autor:** Manel Andreu Pérez
406
- **Versión:** 1.0.0
407
- **Licencia:** MIT
408
- **Tipo de proyecto:** CLI Framework para Automatización DevOps
1
+ # Tyr Framework - Guía Completa del Proyecto
2
+
3
+ **Autor:** Manel Andreu Pérez
4
+ **Versión:** 1.0.0
5
+ **Licencia:** MIT
6
+
7
+ ---
8
+
9
+ ## 📋 Descripción del Proyecto
10
+
11
+ Tyr Framework es un entorno de ejecución basado en TypeScript que permite crear, ejecutar y automatizar herramientas CLI de manera declarativa.
12
+
13
+ La arquitectura se construye sobre **inyección de dependencias**: el "Kernel" proporciona un contexto de ejecución donde los "Managers" exponen su funcionalidad a través de una API auto-generada. Gracias a un sistema de introspección de código, el entorno analiza tipos y documentación en tiempo real.
14
+
15
+ ---
16
+
17
+ ## 📁 Estructura del Proyecto
18
+
19
+ ```
20
+ /
21
+ ├── bin/
22
+ │ └── tyr.ts // Punto de entrada del CLI
23
+
24
+ ├── src/
25
+ │ ├── core/
26
+ │ │ ├── Kernel.ts // Motor principal de ejecución
27
+ │ │ ├── Container.ts // Contenedor de servicios (inyección de dependencias)
28
+ │ │ ├── TyrError.ts // Manejo de errores personalizado
29
+ │ │ └── sys/
30
+ │ │ ├── gen.ts // Comando: generar nuevos comandos
31
+ │ │ ├── rem.ts // Comando: remover comandos
32
+ │ │ └── doc.ts // Comando: generar documentación
33
+ │ │
34
+ │ ├── commands/
35
+ │ │ ├── install.tyr.ts // Comando: instalar el framework
36
+ │ │ └── dw.tyr.ts // Comando: descargar dependencias
37
+ │ │
38
+ │ └── lib/
39
+ │ ├── ShellManager.ts // Ejecución de comandos shell
40
+ │ ├── FileSystemManager.ts // Operaciones del sistema de archivos
41
+ │ ├── PackageManager.ts // Gestión de paquetes (npm)
42
+ │ ├── DockerManager.ts // Integración con Docker
43
+ │ ├── GitManager.ts // Operaciones de Git
44
+ │ ├── SystemManager.ts // Gestión del sistema
45
+ │ ├── SQLManager.ts // Consultas a bases de datos MSSQL
46
+ │ └── WebManager.ts // Requests HTTP
47
+
48
+ ├── tests/
49
+ │ ├── commands.test.ts // Tests de comandos (Vitest)
50
+ │ ├── test-runner.ts // Runner de smoke tests
51
+ │ └── setup.ts // Configuración de mocks
52
+
53
+ ├── config/
54
+ │ └── map.yml // Configuración de comandos del framework
55
+
56
+ ├── local/
57
+ │ ├── aliases.sh // Alias de shell personalizados
58
+ │ └── plugins.sh // Plugins para shell
59
+
60
+ ├── package.json // Dependencias y scripts
61
+ ├── tsconfig.json // Configuración de TypeScript
62
+ ├── vitest.config.ts // Configuración de tests
63
+ └── html-reporter.ts // Generador de reportes HTML
64
+ ```
65
+
66
+ ---
67
+
68
+ ## 🎯 Conceptos Clave
69
+
70
+ ### 1. KERNEL (`src/core/Kernel.ts`)
71
+
72
+ - **Orquestador principal** del framework
73
+ - Carga configuración desde `config/map.yml`
74
+ - Enruta comandos hacia sus manejadores
75
+ - Proporciona el contexto de ejecución (`TyrContext`)
76
+ - **Métodos principales:**
77
+ - `boot(args)`: Inicializa el framework
78
+ - `handle(args)`: Ejecuta comandos
79
+
80
+ ### 2. CONTAINER (`src/core/Container.ts`)
81
+
82
+ - Contenedor de **inyección de dependencias**
83
+ - Instancia todos los servicios (Managers)
84
+ - Expone interfaz `ServiceContainer` con todos los servicios
85
+ - Implementa patrón Singleton para servicios
86
+
87
+ ### 3. MANAGERS (`src/lib/*.ts`)
88
+
89
+ Conjunto de abstracciones sobre librerías externas. Ejecutar comando de documentación para saber más.
90
+
91
+ ```bash
92
+ tyr doc
93
+ ```
94
+
95
+ ### 4. COMANDOS
96
+
97
+ Son funciones que siguen el patrón:
98
+
99
+ ```typescript
100
+ export default ({ task, fail, logger, fs, shell }: TyrContext) => {
101
+ return async (args: string[]) => {
102
+ // Lógica del comando
103
+ };
104
+ };
105
+ ```
106
+
107
+ Los comandos personalizados se registran en `config/map.yml`
108
+
109
+ ### 5. CONFIGURACIÓN (`config/map.yml`)
110
+
111
+ Define los comandos disponibles:
112
+
113
+ ```yaml
114
+ commands:
115
+ install: ./src/commands/install.tyr.ts
116
+ dw: ./src/commands/dw.tyr.ts
117
+ ```
118
+
119
+ ---
120
+
121
+ ## 🚀 Cómo Usar el Framework
122
+
123
+ ### Instalación
124
+
125
+ ```bash
126
+ npm install
127
+ npm run install # Ejecuta el comando install
128
+ ```
129
+
130
+ ### Ejecutar Comandos
131
+
132
+ ```bash
133
+ tyr <nombre-comando> [argumentos]
134
+ ```
135
+
136
+ **Ejemplos:**
137
+ - `tyr install` - Instala y configura el framework
138
+ - `tyr gen micomando` - Genera un nuevo comando
139
+ - `tyr rem micomando` - Elimina un comando
140
+ - `tyr doc` - Genera documentación
141
+ - `tyr dw` - Descarga dependencias
142
+
143
+ ### Crear un Nuevo Comando
144
+
145
+ ```bash
146
+ tyr gen <nombre-comando> <nombre-archivo>
147
+ ```
148
+
149
+ Se creará el archivo en `src/commands/<nombre-archivo>.tyr.ts`:
150
+
151
+ ```typescript
152
+ import { TyrContext } from '../core/Kernel';
153
+
154
+ export default ({ task, fail, logger, fs, shell }: TyrContext) => {
155
+ return async (args: string[]) => {
156
+ // Validar argumentos
157
+ if (args.length === 0) {
158
+ fail('Se requiere al menos un argumento');
159
+ }
160
+
161
+ // Usar tareas con descripción
162
+ await task('Realizando acción', async () => {
163
+ logger.info('Procesando...');
164
+ // Tu lógica aquí
165
+ });
166
+
167
+ logger.success('¡Listo!');
168
+ };
169
+ };
170
+ ```
171
+
172
+ ### Eliminarc un Comando Existente
173
+ ```bash
174
+ tyr rem <nombre-comando>
175
+ ```
176
+
177
+
178
+ ---
179
+
180
+ ## 🧪 Testing
181
+
182
+ El framework incluye un sistema de testing completo:
183
+
184
+ ### Tests Unitarios (Vitest)
185
+
186
+ ```bash
187
+ npm run test # Ejecutar tests
188
+ npm run test:watch # Modo watch
189
+ npm run test:ui # UI interactivo
190
+ npm run test:coverage # Cobertura
191
+ ```
192
+
193
+ ### Smoke Tests
194
+
195
+ ```bash
196
+ npm run test:smoke # Valida que todos los comandos cargan correctamente
197
+ ```
198
+
199
+ **Verifica:**
200
+ - Comandos cargan como módulos
201
+ - Exportan función por defecto
202
+ - Se instancian con contexto
203
+ - Se ejecutan sin excepciones no controladas
204
+
205
+ ### Mocks
206
+
207
+ El archivo `tests/setup.ts` proporciona `createMockContext()` que mocka:
208
+ - Logger
209
+ - ShellManager
210
+ - FileSystemManager
211
+ - Todos los managers
212
+
213
+ ---
214
+
215
+ ## 📊 Flujo de Ejecución
216
+
217
+ ```
218
+ 1. Usuario ejecuta: tyr micomando arg1 arg2
219
+
220
+ 2. bin/tyr.ts captura el comando
221
+
222
+ 3. Kernel.boot() inicializa el framework
223
+
224
+ 4. Container.init() crea todos los Managers
225
+
226
+ 5. Carga config/map.yml
227
+
228
+ 6. Kernel.handle() recibe [micomando, arg1, arg2]
229
+
230
+ 7. Busca el comando en la configuración
231
+
232
+ 8. Importa el módulo dinámicamente
233
+
234
+ 9. Instancia el comando pasando TyrContext
235
+
236
+ 10. Ejecuta comando(args)
237
+
238
+ 11. Retorna resultado o error
239
+ ```
240
+
241
+ ---
242
+
243
+ ## 📦 Dependencias Principales
244
+
245
+ ### Runtime
246
+
247
+ - **chalk** - Colores en terminal
248
+ - **execa** - Ejecución de shell mejorada
249
+ - **axios** - HTTP client
250
+ - **mssql** - Driver MSSQL
251
+ - **js-yaml** - Parser YAML
252
+ - **inquirer** - Prompts interactivos
253
+ - **dotenv** - Variables de entorno
254
+ - **cheerio** - Web scraping
255
+ - **find-config** - Búsqueda de archivos de config
256
+
257
+ ### Dev
258
+
259
+ - **TypeScript** - Lenguaje
260
+ - **Vitest** - Testing framework
261
+ - **tsx** - Ejecutor TypeScript
262
+ - **Vite** - Build tool
263
+ - **Husky** - Git hooks
264
+
265
+ ---
266
+
267
+ ## 🔧 Configuración Importante
268
+
269
+ ### tsconfig.json
270
+ - `target`: ES2020
271
+ - `module`: ES2020
272
+ - `moduleResolution`: node
273
+
274
+ ### package.json
275
+ - `type`: module (módulos ES)
276
+ - `bin`: { tyr: ./bin/tyr.ts }
277
+
278
+ ### vitest.config.ts
279
+ - Test runner del proyecto
280
+ - Configuración de mocks y setup
281
+
282
+ ---
283
+
284
+ ## 🎨 Patrones y Best Practices
285
+
286
+ ### Inyección de Dependencias
287
+
288
+ ```typescript
289
+ const command = ({ logger, fs, shell }: TyrContext) => {
290
+ // Los managers se inyectan automáticamente
291
+ return async (args) => { ... };
292
+ };
293
+ ```
294
+
295
+ ### Manejo de Errores
296
+
297
+ - Usa `fail(message, suggestion?)` para errores controlados
298
+ - `fail()` lanza `TyrError`
299
+ - Los comandos pueden capturar y manejar excepciones
300
+
301
+ ### Tareas con Descripción
302
+
303
+ ```typescript
304
+ await task('Descripción', async () => {
305
+ // Operación
306
+ });
307
+ // Muestra progreso en terminal
308
+ ```
309
+
310
+ ### Logging
311
+
312
+ ```typescript
313
+ logger.info() // Información general
314
+ logger.success() // Operación exitosa
315
+ logger.error() // Error (solo en debug)
316
+ logger.warn() // Advertencia (solo en debug)
317
+ ```
318
+
319
+ ### Argumentos de Comando
320
+
321
+ Siempre valida los argumentos al inicio:
322
+
323
+ ```typescript
324
+ if (args.length < 2) {
325
+ fail('Se requieren 2 argumentos', 'Sintaxis: tyr cmd arg1 arg2');
326
+ }
327
+ ```
328
+
329
+ ---
330
+
331
+ ## 📚 Comandos Disponibles
332
+
333
+ ### Comandos del Sistema
334
+
335
+ #### `tyr gen <nombre-comando> [archivo-salida]`
336
+ Genera un nuevo comando con template
337
+ - Crea archivo en `src/commands/`
338
+ - Registra en `config/map.yml`
339
+
340
+ #### `tyr rem <nombre-comando>`
341
+ Elimina un comando
342
+ - Borra archivo del comando
343
+ - Elimina entrada en `config/map.yml`
344
+
345
+ #### `tyr doc`
346
+ Genera documentación completa del sistema
347
+ - Analiza todos los comandos
348
+ - Extrae tipos y comentarios JSDoc
349
+ - Genera HTML interactivo
350
+
351
+ ### Comandos Personalizados
352
+
353
+ #### `tyr install`
354
+ Instala y configura el framework
355
+ - Crea estructura de carpetas
356
+ - Copia templates
357
+ - Configura alias 'tyre' en .zshrc
358
+
359
+ #### `tyr dw`
360
+ Descarga y configura dependencias
361
+ - Instala paquetes npm
362
+ - Configura variables de entorno
363
+ - Verifica instalaciones externas
364
+
365
+ ---
366
+
367
+ ## 🐛 Debugging
368
+
369
+ Ejecuta con flag `--debug` para ver más información:
370
+
371
+ ```bash
372
+ tyr micomando --debug
373
+ ```
374
+
375
+ - Activa logging de errores y warnings
376
+ - Muestra detalles de operaciones
377
+
378
+ ---
379
+
380
+ ## 📝 Notas de Desarrollo
381
+
382
+ - El framework usa módulos ES6, asegúrate de `"type": "module"` en `package.json`
383
+ - Los comandos deben ser `async`
384
+ - Siempre retorna del handler o lanza error
385
+ - Usa la inyección de dependencias, no importes managers directamente
386
+ - Los tests usan mocks automáticos del `setup.ts`
387
+ - El smoke test valida que todos los comandos cargan correctamente
388
+
389
+ ---
390
+
391
+ ## 🔗 Referencias Útiles
392
+
393
+ Archivos principales para empezar:
394
+
395
+ - [src/core/Kernel.ts](src/core/Kernel.ts) - Entender cómo funciona el motor
396
+ - [src/core/Container.ts](src/core/Container.ts) - Ver cómo se inyectan dependencias
397
+ - [src/commands/install.tyr.ts](src/commands/install.tyr.ts) - Ejemplo de comando completo
398
+ - [src/core/sys/gen.ts](src/core/sys/gen.ts) - Cómo generar nuevos comandos
399
+ - [tests/test-runner.ts](tests/test-runner.ts) - Sistema de testing
400
+
401
+ ---
402
+
403
+ ## Licencia
404
+
405
+ **Autor:** Manel Andreu Pérez
406
+ **Versión:** 1.0.0
407
+ **Licencia:** MIT
408
+ **Tipo de proyecto:** CLI Framework para Automatización DevOps