@icarusmx/creta 1.5.8 → 1.5.10
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/bin/creta.js
CHANGED
|
@@ -12,6 +12,8 @@ import { AWSGuideViewer } from '../lib/aws-guide-viewer.js'
|
|
|
12
12
|
import { CommandHelpExecutor } from '../lib/executors/CommandHelpExecutor.js'
|
|
13
13
|
import { PapersExecutor } from '../lib/papers/PapersExecutor.js'
|
|
14
14
|
import { ExercisesExecutor } from '../lib/executors/ExercisesExecutor.js'
|
|
15
|
+
import { executeSintaxis } from '../lib/executors/sintaxis-executor.js'
|
|
16
|
+
import { UserState } from '../lib/utils/user-state.js'
|
|
15
17
|
import { LessonBuilder } from '../lib/builders/LessonBuilder.js'
|
|
16
18
|
import { LESSON_1_SYSTEM_DECOMPOSITION } from '../lib/data/lessons/lesson1-system-decomposition.js'
|
|
17
19
|
import { LESSON_2_OBJECT_REQUESTS } from '../lib/data/lessons/lesson2-object-requests.js'
|
|
@@ -84,7 +86,7 @@ console.log(`
|
|
|
84
86
|
█ █ █ █ █ █ █
|
|
85
87
|
█████████████████████████
|
|
86
88
|
|
|
87
|
-
Bienvenido
|
|
89
|
+
Bienvenido al taller de software
|
|
88
90
|
Salgamos de este laberinto 🏛️
|
|
89
91
|
`)
|
|
90
92
|
|
|
@@ -106,6 +108,9 @@ if (command.startsWith('portafolio')) {
|
|
|
106
108
|
} else if (command === 'enunciados') {
|
|
107
109
|
// Start enunciados selector
|
|
108
110
|
await startEnunciadosSelector()
|
|
111
|
+
} else if (command === 'sintaxis') {
|
|
112
|
+
// Start sintaxis selector with interactive sandbox lessons
|
|
113
|
+
await startSintaxisSelector()
|
|
109
114
|
} else if (command === 'code') {
|
|
110
115
|
// Start interactive coding session
|
|
111
116
|
const session = new CretaCodeSession()
|
|
@@ -118,6 +123,24 @@ if (command.startsWith('portafolio')) {
|
|
|
118
123
|
// Show AWS billing detective guide
|
|
119
124
|
const viewer = new AWSGuideViewer()
|
|
120
125
|
await viewer.start()
|
|
126
|
+
} else if (command === 'reset') {
|
|
127
|
+
// Reset user state with confirmation
|
|
128
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout })
|
|
129
|
+
const answer = await new Promise(resolve => {
|
|
130
|
+
rl.question('⚠️ ¿Estás seguro de eliminar tu progreso? (s/N): ', resolve)
|
|
131
|
+
})
|
|
132
|
+
rl.close()
|
|
133
|
+
|
|
134
|
+
if (answer.toLowerCase() === 's' || answer.toLowerCase() === 'si') {
|
|
135
|
+
UserState.reset()
|
|
136
|
+
console.log('✅ Estado de usuario reiniciado')
|
|
137
|
+
console.log(' Se eliminó ~/.creta/user.json')
|
|
138
|
+
} else {
|
|
139
|
+
console.log('❌ Cancelado')
|
|
140
|
+
}
|
|
141
|
+
} else if (command === 'privacy' || command === 'privacidad') {
|
|
142
|
+
// Show privacy information
|
|
143
|
+
showPrivacyInfo()
|
|
121
144
|
} else if (command === 'help' || command === 'ayuda') {
|
|
122
145
|
// Show available commands
|
|
123
146
|
showHelp()
|
|
@@ -607,9 +630,9 @@ async function unstuckProject(level) {
|
|
|
607
630
|
}
|
|
608
631
|
|
|
609
632
|
function showHelp() {
|
|
610
|
-
console.log("\nCreta es una herramienta de CLI
|
|
611
|
-
console.log("El propósito
|
|
612
|
-
console.log("
|
|
633
|
+
console.log("\nCreta es una herramienta de CLI para el taller de software.")
|
|
634
|
+
console.log("El propósito es acompañar a aprendices y constructores")
|
|
635
|
+
console.log("en su camino de aprendizaje.\n")
|
|
613
636
|
|
|
614
637
|
console.log("📖 Documentación de comandos:")
|
|
615
638
|
console.log(" creta ls - Documentación en español del comando ls")
|
|
@@ -627,9 +650,42 @@ function showHelp() {
|
|
|
627
650
|
console.log(" creta portafolio - Crea tu portafolio personal")
|
|
628
651
|
console.log(" creta code - Sesión interactiva de programación con IA\n")
|
|
629
652
|
|
|
653
|
+
console.log("🔧 Utilidades:")
|
|
654
|
+
console.log(" creta reset - Reinicia tu progreso (elimina ~/.creta/user.json)")
|
|
655
|
+
console.log(" creta privacy - Explica qué datos guarda Creta y dónde\n")
|
|
656
|
+
|
|
630
657
|
console.log("💡 Usa 'creta' sin argumentos para ver el menú principal.")
|
|
631
658
|
}
|
|
632
659
|
|
|
660
|
+
function showPrivacyInfo() {
|
|
661
|
+
console.log('\n🔒 Privacidad y Datos en Creta\n')
|
|
662
|
+
console.log('Creta almacena datos localmente en tu computadora:')
|
|
663
|
+
console.log('')
|
|
664
|
+
console.log('📍 Ubicación: ~/.creta/')
|
|
665
|
+
console.log('')
|
|
666
|
+
console.log('📄 Archivos:')
|
|
667
|
+
console.log(' • user.json - Tu progreso y preferencias')
|
|
668
|
+
console.log('')
|
|
669
|
+
console.log('📊 ¿Qué se guarda?')
|
|
670
|
+
console.log(' • Nombre (opcional)')
|
|
671
|
+
console.log(' • Lecciones completadas')
|
|
672
|
+
console.log(' • Proyectos creados')
|
|
673
|
+
console.log(' • Papers completados')
|
|
674
|
+
console.log(' • Estadísticas de uso (sesiones, última visita)')
|
|
675
|
+
console.log('')
|
|
676
|
+
console.log('🔐 ¿Es privado?')
|
|
677
|
+
console.log(' • SÍ - Todo permanece en tu máquina')
|
|
678
|
+
console.log(' • No se envía nada a servidores externos')
|
|
679
|
+
console.log(' • No hay telemetría ni tracking')
|
|
680
|
+
console.log(' • Tú controlas tus datos')
|
|
681
|
+
console.log('')
|
|
682
|
+
console.log('🗑️ ¿Cómo borrarlo?')
|
|
683
|
+
console.log(' • creta reset - Elimina user.json')
|
|
684
|
+
console.log(' • rm -rf ~/.creta - Elimina todo manualmente')
|
|
685
|
+
console.log('')
|
|
686
|
+
console.log('💡 Filosofía: Tu progreso es tuyo. Local-first siempre.')
|
|
687
|
+
}
|
|
688
|
+
|
|
633
689
|
async function startMainMenu() {
|
|
634
690
|
// Always try interactive mode first, fall back only if it fails
|
|
635
691
|
try {
|
|
@@ -703,7 +759,7 @@ Salgamos de este laberinto 🏛️
|
|
|
703
759
|
if (key === 'q' || key === '\x03') { // q or Ctrl+C
|
|
704
760
|
process.stdin.setRawMode(false)
|
|
705
761
|
process.stdin.removeListener('data', onKeyPress)
|
|
706
|
-
console.log("\nHecho con <3
|
|
762
|
+
console.log("\nHecho con <3")
|
|
707
763
|
resolve()
|
|
708
764
|
return
|
|
709
765
|
}
|
|
@@ -813,7 +869,7 @@ async function startMainMenuFallback() {
|
|
|
813
869
|
const respuesta = await askQuestion("Elige una opción (1-5) o 'q' para salir: ")
|
|
814
870
|
|
|
815
871
|
if (respuesta.toLowerCase() === 'q') {
|
|
816
|
-
console.log("Hecho con <3
|
|
872
|
+
console.log("Hecho con <3")
|
|
817
873
|
rl.close()
|
|
818
874
|
return
|
|
819
875
|
}
|
|
@@ -936,7 +992,7 @@ async function startEnunciadosSelectorInteractive() {
|
|
|
936
992
|
if (key === 'q' || key === '\x03') { // q or Ctrl+C
|
|
937
993
|
process.stdin.setRawMode(false)
|
|
938
994
|
process.stdin.removeListener('data', onKeyPress)
|
|
939
|
-
console.log("\nHecho con <3
|
|
995
|
+
console.log("\nHecho con <3")
|
|
940
996
|
resolve()
|
|
941
997
|
return
|
|
942
998
|
}
|
|
@@ -1167,7 +1223,7 @@ async function startEnunciadosSelectorFallback() {
|
|
|
1167
1223
|
const respuesta = await askQuestion("Elige un número (1-7) o 'q' para salir: ")
|
|
1168
1224
|
|
|
1169
1225
|
if (respuesta.toLowerCase() === 'q') {
|
|
1170
|
-
console.log("Hecho con <3
|
|
1226
|
+
console.log("Hecho con <3")
|
|
1171
1227
|
rl.close()
|
|
1172
1228
|
return
|
|
1173
1229
|
}
|
|
@@ -1330,33 +1386,7 @@ async function startEnunciadosSelectorFallback() {
|
|
|
1330
1386
|
|
|
1331
1387
|
|
|
1332
1388
|
async function startSintaxisSelector() {
|
|
1333
|
-
|
|
1334
|
-
input: process.stdin,
|
|
1335
|
-
output: process.stdout
|
|
1336
|
-
})
|
|
1337
|
-
|
|
1338
|
-
console.log("Sintaxis: estudia el modo en que se combinan las palabras y los distintos grupos que forman para expresar significado.")
|
|
1339
|
-
|
|
1340
|
-
await new Promise((resolve) => {
|
|
1341
|
-
rl.question("\nPresiona Enter para comenzar...", () => {
|
|
1342
|
-
rl.close()
|
|
1343
|
-
resolve()
|
|
1344
|
-
})
|
|
1345
|
-
})
|
|
1346
|
-
|
|
1347
|
-
console.log("\nEn esta sección aprenderemos algo más que palabras, aprenderemos comandos.")
|
|
1348
|
-
console.log("")
|
|
1349
|
-
console.log("Al final del día un comando es una palabra, la diferencia es que está dotada de un significado que tu computadora entiende.")
|
|
1350
|
-
console.log("")
|
|
1351
|
-
console.log("🚀 Próximamente:")
|
|
1352
|
-
console.log("- Terminal básico (pwd, ls, cd, mkdir, touch, cat)")
|
|
1353
|
-
console.log("- Git básico (init, status, add, commit)")
|
|
1354
|
-
console.log("- Git colaboración (remote, push, pull, clone)")
|
|
1355
|
-
console.log("- Git avanzado (branch, checkout, merge)")
|
|
1356
|
-
console.log("")
|
|
1357
|
-
console.log("Este es tu primer comando: ls")
|
|
1358
|
-
console.log("")
|
|
1359
|
-
console.log("Presiona ctrl + c para terminar esta sesión y después ejecuta el comando ls en tu terminal")
|
|
1389
|
+
await executeSintaxis()
|
|
1360
1390
|
}
|
|
1361
1391
|
|
|
1362
1392
|
async function startProyectosSelector() {
|
|
@@ -1422,7 +1452,7 @@ async function startProyectosSelectorInteractive() {
|
|
|
1422
1452
|
if (key === 'q' || key === '\x03') { // q or Ctrl+C
|
|
1423
1453
|
process.stdin.setRawMode(false)
|
|
1424
1454
|
process.stdin.removeListener('data', onKeyPress)
|
|
1425
|
-
console.log("\nHecho con <3
|
|
1455
|
+
console.log("\nHecho con <3")
|
|
1426
1456
|
resolve()
|
|
1427
1457
|
return
|
|
1428
1458
|
}
|
|
@@ -1518,7 +1548,7 @@ async function returnToMainMenu() {
|
|
|
1518
1548
|
console.clear()
|
|
1519
1549
|
await startMainMenu()
|
|
1520
1550
|
} else {
|
|
1521
|
-
console.log("\nHecho con <3
|
|
1551
|
+
console.log("\nHecho con <3")
|
|
1522
1552
|
rl.close()
|
|
1523
1553
|
}
|
|
1524
1554
|
}
|
|
@@ -1547,7 +1577,7 @@ async function startProyectosSelectorFallback() {
|
|
|
1547
1577
|
const respuesta = await askQuestion("Elige una opción (1-3) o 'q' para salir: ")
|
|
1548
1578
|
|
|
1549
1579
|
if (respuesta.toLowerCase() === 'q') {
|
|
1550
|
-
console.log("Hecho con <3
|
|
1580
|
+
console.log("Hecho con <3")
|
|
1551
1581
|
rl.close()
|
|
1552
1582
|
return
|
|
1553
1583
|
}
|
|
@@ -1642,7 +1672,7 @@ async function startPortfolioSelectorInteractive() {
|
|
|
1642
1672
|
if (key === 'q' || key === '\x03') { // q or Ctrl+C
|
|
1643
1673
|
process.stdin.setRawMode(false)
|
|
1644
1674
|
process.stdin.removeListener('data', onKeyPress)
|
|
1645
|
-
console.log("\nHecho con <3
|
|
1675
|
+
console.log("\nHecho con <3")
|
|
1646
1676
|
resolve()
|
|
1647
1677
|
return
|
|
1648
1678
|
}
|
|
@@ -1740,7 +1770,7 @@ async function startPortfolioSelectorFallback() {
|
|
|
1740
1770
|
const respuesta = await askQuestion("Elige una opción (1-4) o 'q' para salir: ")
|
|
1741
1771
|
|
|
1742
1772
|
if (respuesta.toLowerCase() === 'q') {
|
|
1743
|
-
console.log("Hecho con <3
|
|
1773
|
+
console.log("Hecho con <3")
|
|
1744
1774
|
rl.close()
|
|
1745
1775
|
return
|
|
1746
1776
|
}
|
package/lib/cli/index.js
CHANGED
package/lib/data/messages.js
CHANGED
|
@@ -99,7 +99,7 @@ export class ExercisesExecutor {
|
|
|
99
99
|
if (key === 'q' || key === '\x03') { // q or Ctrl+C
|
|
100
100
|
process.stdin.setRawMode(false)
|
|
101
101
|
process.stdin.removeListener('data', onKeyPress)
|
|
102
|
-
console.log("\nHecho con <3
|
|
102
|
+
console.log("\nHecho con <3")
|
|
103
103
|
resolve()
|
|
104
104
|
return
|
|
105
105
|
}
|
|
@@ -163,7 +163,7 @@ export class ExercisesExecutor {
|
|
|
163
163
|
const respuesta = await askQuestion(`Elige una opción (1-${this.exercises.length}) o 'q' para salir: `)
|
|
164
164
|
|
|
165
165
|
if (respuesta.toLowerCase() === 'q') {
|
|
166
|
-
console.log("Hecho con <3
|
|
166
|
+
console.log("Hecho con <3")
|
|
167
167
|
rl.close()
|
|
168
168
|
return
|
|
169
169
|
}
|
|
@@ -86,7 +86,7 @@ export class PapersExecutor {
|
|
|
86
86
|
if (key === 'q' || key === '\x03') {
|
|
87
87
|
process.stdin.setRawMode(false)
|
|
88
88
|
process.stdin.removeListener('data', onKeyPress)
|
|
89
|
-
console.log(chalk.dim('\nHecho con <3
|
|
89
|
+
console.log(chalk.dim('\nHecho con <3'))
|
|
90
90
|
resolve()
|
|
91
91
|
return
|
|
92
92
|
}
|
|
@@ -179,7 +179,7 @@ export class PapersExecutor {
|
|
|
179
179
|
const answer = await askQuestion('Elige un número (1-3) o \'q\' para salir: ')
|
|
180
180
|
|
|
181
181
|
if (answer.toLowerCase() === 'q') {
|
|
182
|
-
console.log(chalk.dim('\nHecho con <3
|
|
182
|
+
console.log(chalk.dim('\nHecho con <3'))
|
|
183
183
|
rl.close()
|
|
184
184
|
return
|
|
185
185
|
}
|
|
@@ -346,7 +346,7 @@ export class VimSetupTutorial {
|
|
|
346
346
|
console.log(' • Creta CLI: ' + chalk.yellow('creta') + ' (este programa)')
|
|
347
347
|
console.log(' • Comunidad Icarus: https://icarus.mx')
|
|
348
348
|
|
|
349
|
-
console.log('\n' + chalk.gray('Hecho con <3
|
|
349
|
+
console.log('\n' + chalk.gray('Hecho con <3') + ' - Salgamos de este laberinto 🏛️')
|
|
350
350
|
console.log()
|
|
351
351
|
}
|
|
352
352
|
|