@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 a la escuela de software de icarus.mx
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 desarrollada por icarus.mx.")
611
- console.log("El propósito de esta herramienta es acompañar a aprendices y")
612
- console.log("constructores del taller en su camino de aprendizaje.\n")
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 por icarus.mx")
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 por icarus.mx")
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 por icarus.mx")
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 por icarus.mx")
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
- const rl = createInterface({
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 por icarus.mx")
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 por icarus.mx")
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 por icarus.mx")
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 por icarus.mx")
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 por icarus.mx")
1773
+ console.log("Hecho con <3")
1744
1774
  rl.close()
1745
1775
  return
1746
1776
  }
package/lib/cli/index.js CHANGED
@@ -16,7 +16,7 @@ async function executeMainMenu() {
16
16
  while (true) {
17
17
  const choice = await menu.show()
18
18
  if (!choice) {
19
- console.log('\nHecho con <3 por icarus.mx')
19
+ console.log('\nHecho con <3')
20
20
  return
21
21
  }
22
22
 
@@ -5,7 +5,7 @@ export const WELCOME_BANNER = `
5
5
  █ █ █ █ █ █ █
6
6
  █████████████████████████
7
7
 
8
- Bienvenido a la escuela de software de icarus.mx
8
+ Bienvenido al taller de software
9
9
  Salgamos de este laberinto 🏛️
10
10
  `
11
11
 
@@ -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 por icarus.mx")
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 por icarus.mx")
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 por icarus.mx'))
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 por icarus.mx'))
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 por icarus.mx') + ' - Salgamos de este laberinto 🏛️')
349
+ console.log('\n' + chalk.gray('Hecho con <3') + ' - Salgamos de este laberinto 🏛️')
350
350
  console.log()
351
351
  }
352
352
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@icarusmx/creta",
3
- "version": "1.5.8",
3
+ "version": "1.5.10",
4
4
  "description": "Salgamos de este laberinto.",
5
5
  "type": "module",
6
6
  "bin": {