@icarusmx/creta 1.5.13 → 1.5.15
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 +476 -74
- package/bin/creta.js +13 -2
- package/lib/data/command-help/grep.js +4 -0
- package/lib/data/command-help/index.js +2 -0
- package/lib/data/command-help/lz.js +67 -0
- package/lib/exercises/13-shell-aliases.md +279 -0
- package/lib/exercises/14-gh-fundamentals.md +976 -0
- package/lib/exercises/API_CHANGES.md +193 -0
- package/lib/exercises/README.md +7 -0
- package/lib/exercises/utils/README.md +114 -0
- package/lib/exercises/utils/lz-functions.sh +240 -0
- package/lib/readers/exercise-reader.js +197 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,12 +1,34 @@
|
|
|
1
1
|
# 🏛️ Creta CLI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/@icarusmx/creta)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://nodejs.org/)
|
|
6
|
+
|
|
7
|
+
**El compañero CLI que evoluciona contigo - desde tus primeros comandos hasta tu carrera profesional.**
|
|
4
8
|
|
|
5
9
|
> "Salgamos de este laberinto" 🏛️
|
|
6
10
|
|
|
7
|
-
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 📖 Tabla de Contenidos
|
|
14
|
+
|
|
15
|
+
- [¿Qué es Creta?](#-qué-es-creta)
|
|
16
|
+
- [Instalación](#-instalación)
|
|
17
|
+
- [Arquitectura](#-arquitectura)
|
|
18
|
+
- [Phase 1: Aprendiz](#-phase-1-aprendiz-live) (✅ LIVE)
|
|
19
|
+
- [Phase 2: Desarrollador](#-phase-2-desarrollador-coming-soon) (🚧 v1.5.0)
|
|
20
|
+
- [Phase 3: Constructor](#-phase-3-constructor-vision) (🔮 v2.0.0+)
|
|
21
|
+
- [Utilidades](#-utilidades-actuales)
|
|
22
|
+
- [Filosofía](#-filosofía-creta)
|
|
23
|
+
- [Desarrollo](#-desarrollo)
|
|
24
|
+
- [Roadmap](#-roadmap)
|
|
25
|
+
- [Contribuir](#-contribuir)
|
|
26
|
+
|
|
27
|
+
---
|
|
8
28
|
|
|
9
|
-
|
|
29
|
+
## 🌱 ¿Qué es Creta?
|
|
30
|
+
|
|
31
|
+
Creta no es una herramienta que "terminas" y dejas atrás. **Es un compañero que se adapta a tu nivel**, evolucionando contigo desde estudiante hasta profesional:
|
|
10
32
|
|
|
11
33
|
```
|
|
12
34
|
🎓 Aprendiz → 💻 Desarrollador → 🏗️ Constructor
|
|
@@ -14,12 +36,19 @@ Learn interactively Quick references Professional workflow
|
|
|
14
36
|
creta sintaxis creta ls creta requirement
|
|
15
37
|
```
|
|
16
38
|
|
|
17
|
-
**Versión actual:** 1.
|
|
18
|
-
**Próxima:** 1.5.
|
|
39
|
+
**Versión actual:** 1.5.14 (Phase 1 - Aprendiz completado)
|
|
40
|
+
**Próxima:** 1.5.15 (Phase 2 - Sistema de ayuda)
|
|
41
|
+
|
|
42
|
+
### ¿Por qué Creta?
|
|
43
|
+
|
|
44
|
+
- **🇪🇸 Spanish-First:** Aprende en tu idioma nativo, sin barrera de traducción
|
|
45
|
+
- **🔁 Aprendizaje Cíclico:** Integrado con Discord + YouTube para experiencia completa
|
|
46
|
+
- **🔒 Práctica Segura:** Ejecuta comandos reales en sandboxes aislados
|
|
47
|
+
- **📈 Evoluciona Contigo:** Nunca te quedas sin tu compañero a medida que creces
|
|
19
48
|
|
|
20
49
|
---
|
|
21
50
|
|
|
22
|
-
## Instalación
|
|
51
|
+
## 📦 Instalación
|
|
23
52
|
|
|
24
53
|
```bash
|
|
25
54
|
# Instalación global (recomendado)
|
|
@@ -27,6 +56,175 @@ npm install -g @icarusmx/creta
|
|
|
27
56
|
|
|
28
57
|
# Uso directo con npx (sin instalar)
|
|
29
58
|
npx @icarusmx/creta
|
|
59
|
+
|
|
60
|
+
# Verificar instalación
|
|
61
|
+
creta --version
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Requisitos:**
|
|
65
|
+
- Node.js ≥ 18.0.0
|
|
66
|
+
- Sistema operativo: macOS, Linux, Windows (WSL)
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 🏗️ Arquitectura
|
|
71
|
+
|
|
72
|
+
Creta está diseñado como un sistema modular de 3 fases que evoluciona con las necesidades del desarrollador.
|
|
73
|
+
|
|
74
|
+
### Vista General del Sistema
|
|
75
|
+
|
|
76
|
+
```mermaid
|
|
77
|
+
graph TB
|
|
78
|
+
subgraph "🏛️ Creta CLI - Arquitectura de 3 Fases"
|
|
79
|
+
subgraph "Phase 1: Aprendiz (v1.4.16) ✅ LIVE"
|
|
80
|
+
A1[CLI Principal]
|
|
81
|
+
A2[Sistema de Menús]
|
|
82
|
+
A3[Ejecutores]
|
|
83
|
+
A4[Sistema Sandbox]
|
|
84
|
+
A5[Generador de Portafolios]
|
|
85
|
+
|
|
86
|
+
A1 --> A2
|
|
87
|
+
A2 --> A3
|
|
88
|
+
A3 --> A4
|
|
89
|
+
A3 --> A5
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
subgraph "Phase 2: Desarrollador (v1.5.0) 🚧 EN DEV"
|
|
93
|
+
B1[Sistema de Ayuda]
|
|
94
|
+
B2[Formateador de Comandos]
|
|
95
|
+
B3[Contenido de Referencia]
|
|
96
|
+
|
|
97
|
+
B1 --> B2
|
|
98
|
+
B2 --> B3
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
subgraph "Phase 3: Constructor (v2.0+) 🔮 VISION"
|
|
102
|
+
C1[Sistema de Auth]
|
|
103
|
+
C2[API Client]
|
|
104
|
+
C3[Gestor de Workflow]
|
|
105
|
+
|
|
106
|
+
C1 --> C2
|
|
107
|
+
C2 --> C3
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
subgraph "Componentes Clave"
|
|
112
|
+
D1[MenuBuilder]
|
|
113
|
+
D2[LessonBuilder]
|
|
114
|
+
D3[SandboxManager]
|
|
115
|
+
D4[CommandValidator]
|
|
116
|
+
D5[CommandExecutor]
|
|
117
|
+
D6[UserState]
|
|
118
|
+
|
|
119
|
+
A2 -.utiliza.-> D1
|
|
120
|
+
A3 -.utiliza.-> D2
|
|
121
|
+
A4 -.utiliza.-> D3
|
|
122
|
+
A4 -.utiliza.-> D4
|
|
123
|
+
A4 -.utiliza.-> D5
|
|
124
|
+
A1 -.mantiene.-> D6
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
subgraph "Datos"
|
|
128
|
+
E1[(Lecciones<br/>Enunciados + Sintaxis)]
|
|
129
|
+
E2[(Menús<br/>Configuración)]
|
|
130
|
+
E3[(Estado Usuario<br/>~/.creta/user.json)]
|
|
131
|
+
E4[(Sandboxes<br/>/tmp/creta-*)]
|
|
132
|
+
|
|
133
|
+
D2 --> E1
|
|
134
|
+
D1 --> E2
|
|
135
|
+
D6 --> E3
|
|
136
|
+
D3 --> E4
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
subgraph "Ecosistema Externo"
|
|
140
|
+
F1[Discord Server]
|
|
141
|
+
F2[YouTube Videos]
|
|
142
|
+
F3[npm Registry]
|
|
143
|
+
|
|
144
|
+
A1 <-.hash redemption.-> F1
|
|
145
|
+
F1 <-.unlock videos.-> F2
|
|
146
|
+
F3 <-.npx @icarusmx/creta.-> A1
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
style A1 fill:#4CAF50
|
|
150
|
+
style B1 fill:#FF9800
|
|
151
|
+
style C1 fill:#9C27B0
|
|
152
|
+
style D3 fill:#2196F3
|
|
153
|
+
style D6 fill:#F44336
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**[Ver diagrama completo →](docs/system-architecture.mmd)**
|
|
157
|
+
|
|
158
|
+
### Flujo de Comandos
|
|
159
|
+
|
|
160
|
+
```mermaid
|
|
161
|
+
graph LR
|
|
162
|
+
Start([Usuario ejecuta comando]) --> Entry[bin/creta.js<br/>Entry Point]
|
|
163
|
+
|
|
164
|
+
Entry --> Router{Detectar<br/>patrón de comando}
|
|
165
|
+
|
|
166
|
+
Router -->|creta| MainMenu[Menú Principal]
|
|
167
|
+
Router -->|creta sintaxis| SintaxisExec[SintaxisExecutor]
|
|
168
|
+
Router -->|creta enunciados| EnunciadosExec[EnunciadosExecutor]
|
|
169
|
+
Router -->|creta proyectos| ProyectosExec[ProyectosExecutor]
|
|
170
|
+
Router -->|creta portafolio| PortfolioExec[PortfolioExecutor]
|
|
171
|
+
Router -->|creta exercises| ExercisesExec[ExercisesExecutor]
|
|
172
|
+
Router -->|creta papers| PapersExec[PapersExecutor]
|
|
173
|
+
Router -->|creta help| HelpCmd[help.js]
|
|
174
|
+
Router -->|creta ls<br/>creta git status| CmdHelp[CommandHelpExecutor<br/>Phase 2 🚧]
|
|
175
|
+
|
|
176
|
+
SintaxisExec --> LessonBuilder[LessonBuilder]
|
|
177
|
+
EnunciadosExec --> LessonBuilder
|
|
178
|
+
ProyectosExec --> ProjectBuilder[ProjectBuilder]
|
|
179
|
+
|
|
180
|
+
LessonBuilder --> Interactive{¿Lección<br/>interactiva?}
|
|
181
|
+
Interactive -->|Sí| Sandbox[SandboxManager<br/>Práctica real]
|
|
182
|
+
Interactive -->|No| Display[Mostrar contenido]
|
|
183
|
+
|
|
184
|
+
Sandbox --> Validator[CommandValidator]
|
|
185
|
+
Validator --> Executor[CommandExecutor]
|
|
186
|
+
Executor --> TmpDir[/tmp/creta-practice-*]
|
|
187
|
+
|
|
188
|
+
PortfolioExec --> LevelMod[LevelModifier]
|
|
189
|
+
LevelMod --> SvelteTemplate[Template SvelteKit 5]
|
|
190
|
+
|
|
191
|
+
MainMenu --> MenuBuilder[MenuBuilder]
|
|
192
|
+
MenuBuilder --> UserState[(UserState<br/>~/.creta/user.json)]
|
|
193
|
+
|
|
194
|
+
CmdHelp --> HelpData[(command-help/<br/>Contenido de ayuda)]
|
|
195
|
+
HelpData --> Formatter[CommandHelpFormatter]
|
|
196
|
+
|
|
197
|
+
style Entry fill:#4CAF50
|
|
198
|
+
style Router fill:#FF9800
|
|
199
|
+
style Sandbox fill:#2196F3
|
|
200
|
+
style CmdHelp fill:#9C27B0
|
|
201
|
+
style UserState fill:#F44336
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**[Ver diagrama de routing →](docs/cli-routing.mmd)**
|
|
205
|
+
|
|
206
|
+
### Estructura del Proyecto
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
cli/
|
|
210
|
+
├── bin/creta.js # Punto de entrada principal
|
|
211
|
+
├── lib/
|
|
212
|
+
│ ├── cli/index.js # Lógica core del CLI
|
|
213
|
+
│ ├── builders/ # MenuBuilder, LessonBuilder, ProjectBuilder
|
|
214
|
+
│ ├── data/ # Contenido de lecciones y ayuda
|
|
215
|
+
│ │ ├── lessons/
|
|
216
|
+
│ │ │ ├── enunciados/ # 7 conceptos OOP fundamentales
|
|
217
|
+
│ │ │ └── sintaxis/ # 5 lecciones de sintaxis
|
|
218
|
+
│ │ └── command-help/ # Phase 2: Sistema de ayuda
|
|
219
|
+
│ ├── executors/ # Ejecutores de comandos
|
|
220
|
+
│ ├── sandbox/ # Sistema de práctica interactiva
|
|
221
|
+
│ │ ├── SandboxManager.js
|
|
222
|
+
│ │ ├── CommandValidator.js
|
|
223
|
+
│ │ └── CommandExecutor.js
|
|
224
|
+
│ └── utils/ # UserState, greeting, input/output
|
|
225
|
+
├── templates/
|
|
226
|
+
│ └── sveltekit-portfolio/ # Template de portafolio
|
|
227
|
+
└── docs/ # Diagramas Mermaid
|
|
30
228
|
```
|
|
31
229
|
|
|
32
230
|
---
|
|
@@ -37,27 +235,63 @@ npx @icarusmx/creta
|
|
|
37
235
|
|
|
38
236
|
### El Flujo de Aprendizaje
|
|
39
237
|
|
|
40
|
-
Creta es parte de un ecosistema educativo que combina **Discord**, **CLI** y **videos**:
|
|
238
|
+
Creta es parte de un ecosistema educativo completo que combina **Discord**, **CLI** y **videos educativos**:
|
|
41
239
|
|
|
240
|
+
```mermaid
|
|
241
|
+
sequenceDiagram
|
|
242
|
+
participant Student as 🎓 Estudiante
|
|
243
|
+
participant Discord as 💬 Discord Server
|
|
244
|
+
participant CLI as 🏛️ Creta CLI
|
|
245
|
+
participant Sandbox as 🔒 Sandbox /tmp
|
|
246
|
+
participant YouTube as 📺 YouTube
|
|
247
|
+
|
|
248
|
+
Note over Student,YouTube: Ciclo de Aprendizaje Interactivo
|
|
249
|
+
|
|
250
|
+
Student->>Discord: 1. Únete al server
|
|
251
|
+
Discord->>Student: "Aprende tus primeros comandos"
|
|
252
|
+
Discord->>Student: "Instala Node.js"
|
|
253
|
+
|
|
254
|
+
Student->>CLI: 2. npx @icarusmx/creta
|
|
255
|
+
CLI->>Student: Menú principal interactivo
|
|
256
|
+
|
|
257
|
+
Student->>CLI: 3. creta sintaxis
|
|
258
|
+
CLI->>Student: Lista de lecciones disponibles
|
|
259
|
+
|
|
260
|
+
Student->>CLI: 4. Seleccionar "Primeros comandos"
|
|
261
|
+
CLI->>Sandbox: Crear sandbox en /tmp/creta-practice-*
|
|
262
|
+
Sandbox-->>CLI: Sandbox listo
|
|
263
|
+
CLI->>Student: Prompt interactivo (práctica real)
|
|
264
|
+
|
|
265
|
+
Student->>CLI: 5. Ejecutar: ls
|
|
266
|
+
CLI->>Sandbox: Validar y ejecutar comando
|
|
267
|
+
Sandbox-->>CLI: Resultado real del comando
|
|
268
|
+
CLI->>Student: ✅ Correcto! + Explicación
|
|
269
|
+
|
|
270
|
+
Student->>CLI: 6. Ejecutar: mkdir proyectos
|
|
271
|
+
CLI->>Sandbox: Validar y ejecutar
|
|
272
|
+
Sandbox-->>CLI: Directorio creado
|
|
273
|
+
CLI->>Student: ✅ Estado persiste entre pasos
|
|
274
|
+
|
|
275
|
+
Student->>CLI: 7. Completar todos los pasos
|
|
276
|
+
CLI->>CLI: Generar hash único
|
|
277
|
+
CLI->>Student: 🎉 Hash: abc123xyz
|
|
278
|
+
|
|
279
|
+
Student->>Discord: 8. /redeem abc123xyz
|
|
280
|
+
Discord->>Discord: Validar hash
|
|
281
|
+
Discord->>Student: 🔓 Link YouTube oculto
|
|
282
|
+
|
|
283
|
+
Student->>YouTube: 9. Ver video educativo
|
|
284
|
+
YouTube->>Student: Conceptos OOP, Git, etc.
|
|
285
|
+
|
|
286
|
+
Note over Student,CLI: 10. Regresa al CLI para practicar más
|
|
287
|
+
|
|
288
|
+
Student->>CLI: creta enunciados
|
|
289
|
+
CLI->>Student: 7 conceptos OOP para explorar
|
|
290
|
+
|
|
291
|
+
Note over Student,YouTube: 🔁 El ciclo continúa...
|
|
42
292
|
```
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
↓ Instala Node.js
|
|
46
|
-
↓
|
|
47
|
-
npx @icarusmx/creta
|
|
48
|
-
↓ Practica comandos interactivos
|
|
49
|
-
↓ Completa lecciones
|
|
50
|
-
↓ Obtén un hash especial
|
|
51
|
-
↓
|
|
52
|
-
Discord: /redeem <hash>
|
|
53
|
-
↓ Recibe link de YouTube oculto
|
|
54
|
-
↓
|
|
55
|
-
Videos educativos
|
|
56
|
-
↓ Aprende conceptos
|
|
57
|
-
↓ Regresa al CLI para practicar
|
|
58
|
-
↓
|
|
59
|
-
🔁 Ciclo continuo de aprendizaje
|
|
60
|
-
```
|
|
293
|
+
|
|
294
|
+
**[Ver flujo completo →](docs/learning-flow.mmd)**
|
|
61
295
|
|
|
62
296
|
### Comandos de Aprendizaje
|
|
63
297
|
|
|
@@ -93,22 +327,86 @@ creta sintaxis
|
|
|
93
327
|
- 🔁 **Estado persistente:** Los cambios se mantienen entre pasos
|
|
94
328
|
- 🧹 **Auto-limpieza:** Sandboxes se limpian automáticamente
|
|
95
329
|
|
|
330
|
+
**¿Cómo funciona internamente?**
|
|
331
|
+
|
|
332
|
+
```mermaid
|
|
333
|
+
sequenceDiagram
|
|
334
|
+
participant Student as 🎓 Estudiante
|
|
335
|
+
participant SM as SandboxManager
|
|
336
|
+
participant CV as CommandValidator
|
|
337
|
+
participant CE as CommandExecutor
|
|
338
|
+
participant FS as 💾 Sistema de Archivos
|
|
339
|
+
|
|
340
|
+
Note over Student,FS: Sistema de Práctica Interactiva Segura
|
|
341
|
+
|
|
342
|
+
Student->>SM: Iniciar lección interactiva
|
|
343
|
+
SM->>SM: Limpiar sandboxes antiguos
|
|
344
|
+
SM->>FS: Crear /tmp/creta-practice-{timestamp}
|
|
345
|
+
FS-->>SM: Sandbox creado
|
|
346
|
+
SM->>Student: Prompt: "Ejecuta: ls"
|
|
347
|
+
|
|
348
|
+
Student->>SM: Ingresa: ls
|
|
349
|
+
SM->>CV: Validar comando
|
|
350
|
+
|
|
351
|
+
alt Comando válido
|
|
352
|
+
CV-->>SM: ✅ Válido
|
|
353
|
+
SM->>CE: Ejecutar en sandbox
|
|
354
|
+
CE->>FS: chdir(/tmp/creta-practice-*)
|
|
355
|
+
CE->>FS: exec('ls')
|
|
356
|
+
FS-->>CE: Resultado
|
|
357
|
+
CE-->>SM: stdout + stderr
|
|
358
|
+
SM->>Student: ✅ Correcto!<br/>Resultado: [archivos]
|
|
359
|
+
SM->>Student: Explicación del comando
|
|
360
|
+
else Comando inválido
|
|
361
|
+
CV-->>SM: ❌ Inválido
|
|
362
|
+
SM->>Student: ❌ Incorrecto<br/>Esperaba: ls<br/>Hint: lista archivos
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
Student->>SM: Siguiente paso: "mkdir proyectos"
|
|
366
|
+
SM->>CV: Validar
|
|
367
|
+
CV-->>SM: ✅ Válido
|
|
368
|
+
SM->>CE: Ejecutar
|
|
369
|
+
CE->>FS: exec('mkdir proyectos')
|
|
370
|
+
FS-->>CE: Directorio creado
|
|
371
|
+
CE-->>SM: Éxito
|
|
372
|
+
SM->>Student: ✅ Carpeta creada
|
|
373
|
+
|
|
374
|
+
Note over SM,FS: Estado persiste entre pasos
|
|
375
|
+
|
|
376
|
+
Student->>SM: "ls" (verificar)
|
|
377
|
+
SM->>CE: Ejecutar
|
|
378
|
+
CE->>FS: exec('ls')
|
|
379
|
+
FS-->>CE: proyectos/ <- ¡Persiste!
|
|
380
|
+
SM->>Student: ✅ proyectos/
|
|
381
|
+
|
|
382
|
+
Student->>SM: Completar lección
|
|
383
|
+
SM->>SM: Generar hash
|
|
384
|
+
SM->>Student: 🎉 Hash: abc123xyz
|
|
385
|
+
SM->>FS: Cleanup al salir del CLI
|
|
386
|
+
FS-->>SM: Sandbox eliminado
|
|
387
|
+
|
|
388
|
+
Note over Student,FS: Seguro: Todo en /tmp/, nunca toca archivos reales
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
**[Ver diagrama del sandbox →](docs/sandbox-system.mmd)**
|
|
392
|
+
|
|
96
393
|
### 📚 Curriculum Completo
|
|
97
394
|
|
|
98
|
-
**
|
|
395
|
+
**5 Lecciones de Sintaxis (con práctica interactiva):**
|
|
99
396
|
1. **Primeros comandos** - `ls`, `mkdir`, `cd` en sandbox real
|
|
100
397
|
2. **Git** - Control de versiones con definiciones rigurosas
|
|
101
398
|
3. **Combina comandos** - Standard streams (stdin/stdout/stderr) + piping
|
|
102
399
|
4. **Escribe scripts** - Automatización desde `echo` hasta scripts de deployment
|
|
400
|
+
5. **curl y pipes** - HTTP requests y procesamiento de datos
|
|
103
401
|
|
|
104
402
|
**7 Enunciados Fundamentales (Conceptos OOP):**
|
|
105
|
-
1. Sistema - Descomposición de bibliotecas digitales
|
|
106
|
-
2. Solicitudes - Chat system object requests
|
|
107
|
-
3.
|
|
108
|
-
4. Firmas - Calculadora financiera
|
|
109
|
-
5. Conjunto - Music player interfaces
|
|
110
|
-
6.
|
|
111
|
-
7. Objeto - Datos + procedimientos que operan sobre datos
|
|
403
|
+
1. **Sistema** - Descomposición de bibliotecas digitales
|
|
404
|
+
2. **Solicitudes** - Chat system object requests
|
|
405
|
+
3. **Única forma** - Cajas fuertes digitales
|
|
406
|
+
4. **Firmas** - Calculadora financiera
|
|
407
|
+
5. **Conjunto** - Music player interfaces
|
|
408
|
+
6. **Énfasis** - Banking system design
|
|
409
|
+
7. **Objeto** - Datos + procedimientos que operan sobre datos
|
|
112
410
|
|
|
113
411
|
### 🚀 Generación de Portafolios
|
|
114
412
|
|
|
@@ -130,7 +428,7 @@ creta portafolio-3
|
|
|
130
428
|
|
|
131
429
|
---
|
|
132
430
|
|
|
133
|
-
## 💻 Phase 2: Desarrollador (COMING SOON
|
|
431
|
+
## 💻 Phase 2: Desarrollador (COMING SOON)
|
|
134
432
|
|
|
135
433
|
**Para junior devs que necesitan referencias rápidas**
|
|
136
434
|
|
|
@@ -149,6 +447,7 @@ creta git status
|
|
|
149
447
|
creta mkdir
|
|
150
448
|
creta wc
|
|
151
449
|
creta grep
|
|
450
|
+
creta curl
|
|
152
451
|
```
|
|
153
452
|
|
|
154
453
|
### Por qué mejor que `man`:
|
|
@@ -159,11 +458,11 @@ creta grep
|
|
|
159
458
|
- 🔗 **Conectado a tu aprendizaje** - Links a lecciones si necesitas profundizar
|
|
160
459
|
- 🚀 **Sin context-switching** - No Google, no browser, solo terminal
|
|
161
460
|
|
|
162
|
-
**Status:** 🚧 En desarrollo - Ships en v1.5.
|
|
461
|
+
**Status:** 🚧 En desarrollo - Ships en v1.5.15
|
|
163
462
|
|
|
164
463
|
---
|
|
165
464
|
|
|
166
|
-
## 🏗️ Phase 3: Constructor (VISION
|
|
465
|
+
## 🏗️ Phase 3: Constructor (VISION)
|
|
167
466
|
|
|
168
467
|
**Para profesionales trabajando en proyectos de Icarus**
|
|
169
468
|
|
|
@@ -212,6 +511,21 @@ creta icarus-terminal
|
|
|
212
511
|
# Revertir personalización de terminal
|
|
213
512
|
creta revert-terminal
|
|
214
513
|
|
|
514
|
+
# Tutorial para configurar Neovim
|
|
515
|
+
creta vim
|
|
516
|
+
|
|
517
|
+
# Tutorial para crear Pull Requests
|
|
518
|
+
creta pr
|
|
519
|
+
|
|
520
|
+
# Ver guías de AWS
|
|
521
|
+
creta aws
|
|
522
|
+
|
|
523
|
+
# Acceder a papers académicos
|
|
524
|
+
creta papers
|
|
525
|
+
|
|
526
|
+
# Generar ejercicios en PDF
|
|
527
|
+
creta exercises
|
|
528
|
+
|
|
215
529
|
# Mostrar ayuda
|
|
216
530
|
creta help
|
|
217
531
|
creta ayuda
|
|
@@ -279,25 +593,6 @@ Creta almacena estos datos en tu sistema:
|
|
|
279
593
|
|
|
280
594
|
## 🔧 Desarrollo
|
|
281
595
|
|
|
282
|
-
### Estructura del Proyecto
|
|
283
|
-
|
|
284
|
-
```
|
|
285
|
-
cli/
|
|
286
|
-
├── bin/creta.js # Punto de entrada
|
|
287
|
-
├── lib/
|
|
288
|
-
│ ├── cli/index.js # Lógica principal del CLI
|
|
289
|
-
│ ├── builders/ # MenuBuilder, LessonBuilder
|
|
290
|
-
│ ├── data/ # Lecciones, menús, mensajes
|
|
291
|
-
│ ├── executors/ # Ejecutores de sintaxis, enunciados, proyectos
|
|
292
|
-
│ ├── sandbox/ # Sistema de práctica interactiva
|
|
293
|
-
│ │ ├── SandboxManager.js
|
|
294
|
-
│ │ ├── CommandValidator.js
|
|
295
|
-
│ │ └── CommandExecutor.js
|
|
296
|
-
│ └── utils/ # User state, greeting, etc.
|
|
297
|
-
└── templates/
|
|
298
|
-
└── sveltekit-portfolio/ # Template de portafolio
|
|
299
|
-
```
|
|
300
|
-
|
|
301
596
|
### Comandos de Desarrollo
|
|
302
597
|
|
|
303
598
|
```bash
|
|
@@ -307,51 +602,130 @@ node bin/creta.js
|
|
|
307
602
|
# Probar comando específico
|
|
308
603
|
node bin/creta.js sintaxis
|
|
309
604
|
node bin/creta.js portafolio
|
|
605
|
+
node bin/creta.js ls # Phase 2 command help
|
|
310
606
|
|
|
311
|
-
# Publicar a npm (incrementar versión primero)
|
|
607
|
+
# Publicar a npm (incrementar versión primero en package.json)
|
|
312
608
|
npm publish
|
|
313
609
|
|
|
314
|
-
# O usar el script de deployment
|
|
610
|
+
# O usar el script de deployment rápido
|
|
315
611
|
./deploy-patch.sh
|
|
316
612
|
```
|
|
317
613
|
|
|
318
614
|
### Tecnologías
|
|
319
615
|
|
|
320
|
-
- **Runtime:** Node.js (ES modules, no TypeScript)
|
|
616
|
+
- **Runtime:** Node.js ≥ 18.0.0 (ES modules, no TypeScript)
|
|
321
617
|
- **CLI Framework:** Vanilla Node.js con readline
|
|
618
|
+
- **Formatting:** chalk v5
|
|
322
619
|
- **Template Engine:** SvelteKit 5 + Tailwind CSS 4
|
|
323
620
|
- **Package Manager:** npm
|
|
324
621
|
- **Publicado como:** `@icarusmx/creta` (acceso público)
|
|
325
622
|
|
|
623
|
+
### Arquitectura de Componentes
|
|
624
|
+
|
|
625
|
+
```mermaid
|
|
626
|
+
classDiagram
|
|
627
|
+
class SandboxManager {
|
|
628
|
+
+createSandbox() string
|
|
629
|
+
+executeStep(command, expected) Result
|
|
630
|
+
+cleanup() void
|
|
631
|
+
+validateCommand(input, expected) boolean
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
class CommandValidator {
|
|
635
|
+
+validate(input, expected) ValidationResult
|
|
636
|
+
+isExactMatch(input, expected) boolean
|
|
637
|
+
+provideHint(expected) string
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
class CommandExecutor {
|
|
641
|
+
+execute(command, workingDir) ExecutionResult
|
|
642
|
+
+captureOutput(command) Output
|
|
643
|
+
+handleError(error) ErrorInfo
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
class LessonBuilder {
|
|
647
|
+
+buildLesson(lessonData) Lesson
|
|
648
|
+
+renderContent(lesson) string
|
|
649
|
+
+handleInteractive(lesson) void
|
|
650
|
+
+generateHash(completion) string
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
class MenuBuilder {
|
|
654
|
+
+buildMenu(menuConfig) Menu
|
|
655
|
+
+displayOptions(menu) void
|
|
656
|
+
+handleSelection(choice) void
|
|
657
|
+
+navigate(path) void
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
class UserState {
|
|
661
|
+
+load() UserData
|
|
662
|
+
+save(data) void
|
|
663
|
+
+updateProgress(lesson) void
|
|
664
|
+
+getCompletedLessons() string[]
|
|
665
|
+
+resetState() void
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
class PortfolioExecutor {
|
|
669
|
+
+generatePortfolio(level) void
|
|
670
|
+
+applyLevel(template, level) Project
|
|
671
|
+
+copyTemplate(source, dest) void
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
class CommandHelpExecutor {
|
|
675
|
+
+showHelp(command) void
|
|
676
|
+
+findHelpContent(command) HelpData
|
|
677
|
+
+formatHelp(content) string
|
|
678
|
+
+linkToLesson(lesson) string
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
SandboxManager --> CommandValidator : usa
|
|
682
|
+
SandboxManager --> CommandExecutor : usa
|
|
683
|
+
LessonBuilder --> SandboxManager : interactivo
|
|
684
|
+
MenuBuilder --> UserState : lee/escribe
|
|
685
|
+
PortfolioExecutor --> LevelModifier : modifica
|
|
686
|
+
CommandHelpExecutor --> HelpFormatter : formatea
|
|
687
|
+
|
|
688
|
+
note for SandboxManager "Core del sistema de práctica\nAísla ejecución en /tmp/"
|
|
689
|
+
note for CommandHelpExecutor "Phase 2 - Sistema de ayuda\nReemplaza 'man' en español"
|
|
690
|
+
note for UserState "Persiste en ~/.creta/user.json\nNo requiere autenticación"
|
|
691
|
+
```
|
|
692
|
+
|
|
693
|
+
**[Ver diagrama de interfaces →](docs/main-interfaces.mmd)**
|
|
694
|
+
|
|
326
695
|
---
|
|
327
696
|
|
|
328
697
|
## 🗺️ Roadmap
|
|
329
698
|
|
|
330
|
-
### ✅ Ahora: Phase 1 Complete (v1.
|
|
331
|
-
- Core curriculum (7 enunciados +
|
|
699
|
+
### ✅ Ahora: Phase 1 Complete (v1.5.14)
|
|
700
|
+
- Core curriculum (7 enunciados + 5 sintaxis)
|
|
332
701
|
- Interactive practice system
|
|
333
702
|
- Portfolio generation
|
|
334
703
|
- User state tracking
|
|
704
|
+
- Exercises and papers system
|
|
335
705
|
|
|
336
|
-
### 🚀 Próximo: Phase 2 Launch (v1.5.
|
|
337
|
-
- Command reference system (`creta ls`)
|
|
706
|
+
### 🚀 Próximo: Phase 2 Launch (v1.5.15)
|
|
707
|
+
- Command reference system (`creta ls`, `creta git status`)
|
|
338
708
|
- Reemplazar `man` para estudiantes
|
|
709
|
+
- 10 comandos esenciales documentados
|
|
339
710
|
- Polish existing content
|
|
340
|
-
-
|
|
711
|
+
- Enhanced command help with examples
|
|
341
712
|
|
|
342
713
|
### 📈 3-6 meses: Phase 2 Expansion
|
|
343
|
-
- Advanced command references
|
|
714
|
+
- Advanced command references (30+ commands)
|
|
344
715
|
- Hash/YouTube loop completado
|
|
345
716
|
- Scythe integration (tokens)
|
|
346
717
|
- 500+ monthly active users
|
|
718
|
+
- Community-contributed help content
|
|
347
719
|
|
|
348
720
|
### 🏗️ 6-12 meses: Phase 3 Vision
|
|
349
|
-
- Authentication system
|
|
721
|
+
- Authentication system (JWT/OAuth)
|
|
350
722
|
- Requirement management (`creta requirement`)
|
|
351
723
|
- Team workspace features
|
|
724
|
+
- Ticket tracking y workflow
|
|
352
725
|
- Constructor tools live
|
|
726
|
+
- Professional developer features
|
|
353
727
|
|
|
354
|
-
Ver
|
|
728
|
+
**Ver [ROADMAP.md](./ROADMAP.md) para detalles completos.**
|
|
355
729
|
|
|
356
730
|
---
|
|
357
731
|
|
|
@@ -361,16 +735,19 @@ Ver **[ROADMAP.md](./ROADMAP.md)** para detalles completos.
|
|
|
361
735
|
- Monthly active learners
|
|
362
736
|
- Lessons completed per user
|
|
363
737
|
- Hash redemption rate
|
|
738
|
+
- Discord ↔ CLI ↔ YouTube loop completion
|
|
364
739
|
|
|
365
740
|
**Phase 2 (Desarrollador):**
|
|
366
741
|
- `creta [command]` usage vs `man [command]`
|
|
367
742
|
- Command reference engagement
|
|
743
|
+
- Student preference surveys
|
|
368
744
|
- Time saved vs Google/man
|
|
369
745
|
|
|
370
746
|
**Phase 3 (Constructor):**
|
|
371
|
-
- Authenticated users
|
|
372
|
-
- Daily active professionals
|
|
747
|
+
- Authenticated daily active users
|
|
373
748
|
- Tickets managed through Creta
|
|
749
|
+
- Team adoption rate
|
|
750
|
+
- Professional workflow efficiency
|
|
374
751
|
|
|
375
752
|
---
|
|
376
753
|
|
|
@@ -379,17 +756,42 @@ Ver **[ROADMAP.md](./ROADMAP.md)** para detalles completos.
|
|
|
379
756
|
Este proyecto es parte de [Icarus](https://icarus.mx), una escuela de software enfocada en formar desarrolladores mediante la construcción de proyectos reales.
|
|
380
757
|
|
|
381
758
|
**Queremos contribuciones que:**
|
|
382
|
-
- Agreguen nuevas lecciones de sintaxis
|
|
383
|
-
- Mejoren la experiencia de aprendizaje
|
|
384
|
-
- Expandan el sistema de ayuda de comandos
|
|
385
|
-
- Compartan feedback de estudiantes
|
|
759
|
+
- ✅ Agreguen nuevas lecciones de sintaxis
|
|
760
|
+
- ✅ Mejoren la experiencia de aprendizaje
|
|
761
|
+
- ✅ Expandan el sistema de ayuda de comandos
|
|
762
|
+
- ✅ Compartan feedback de estudiantes
|
|
763
|
+
- ✅ Mejoren la documentación
|
|
764
|
+
- ✅ Reporten bugs o issues
|
|
765
|
+
|
|
766
|
+
### Cómo contribuir
|
|
767
|
+
|
|
768
|
+
1. **Fork** el repositorio
|
|
769
|
+
2. **Crea una rama** para tu feature: `git checkout -b feature/nueva-leccion`
|
|
770
|
+
3. **Commit** tus cambios: `git commit -m "Add new lesson: grep basics"`
|
|
771
|
+
4. **Push** a tu fork: `git push origin feature/nueva-leccion`
|
|
772
|
+
5. **Abre un Pull Request** describiendo tus cambios
|
|
773
|
+
|
|
774
|
+
### Guías de contribución
|
|
775
|
+
|
|
776
|
+
- **Lecciones:** Deben ser interactivas, en español, con ejemplos claros
|
|
777
|
+
- **Command help:** Formato consistente, ejemplos prácticos, links a lecciones
|
|
778
|
+
- **Código:** ES modules, sin TypeScript, archivos < 300 líneas
|
|
779
|
+
- **Commits:** Mensajes descriptivos en español o inglés
|
|
386
780
|
|
|
387
781
|
---
|
|
388
782
|
|
|
389
783
|
## 📄 Licencia
|
|
390
784
|
|
|
391
|
-
|
|
785
|
+
MIT © Guillermo Rodríguez López
|
|
786
|
+
|
|
787
|
+
---
|
|
788
|
+
|
|
789
|
+
## 🔗 Enlaces
|
|
790
|
+
|
|
791
|
+
- **npm:** [@icarusmx/creta](https://www.npmjs.com/package/@icarusmx/creta)
|
|
792
|
+
- **Icarus:** [icarus.mx](https://icarus.mx)
|
|
793
|
+
- **Discord:** [Únete al server de Icarus](https://discord.gg/icarus)
|
|
392
794
|
|
|
393
795
|
---
|
|
394
796
|
|
|
395
|
-
🏛️ **Hecho con
|
|
797
|
+
🏛️ **Hecho con ❤️ por [icarus.mx](https://icarus.mx)** - Salgamos de este laberinto
|