don-cheli-sdd 1.16.2 → 1.16.3

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 CHANGED
@@ -4,6 +4,12 @@ Todos los cambios notables en Don Cheli SDD Framework.
4
4
 
5
5
  Formato basado en [Conventional Commits](https://www.conventionalcommits.org/).
6
6
 
7
+ ## [1.16.3](https://github.com/doncheli/don-cheli-sdd/compare/v1.16.2...v1.16.3) (2026-04-02)
8
+
9
+ ### Correcciones
10
+
11
+ * perfil Custom muestra 0 skills/comandos cuando gum falla ([d32af4c](https://github.com/doncheli/don-cheli-sdd/commit/d32af4c36ea12a7de4173b709efb209c76e1fe59))
12
+
7
13
  ## [1.16.2](https://github.com/doncheli/don-cheli-sdd/compare/v1.16.1...v1.16.2) (2026-04-02)
8
14
 
9
15
  ### Correcciones
package/README.es.md CHANGED
@@ -12,7 +12,7 @@
12
12
  </p>
13
13
  <p align="center">
14
14
  <a href="#-instalación"><img src="https://img.shields.io/badge/instalación-2_minutos-brightgreen" alt="Install"></a>
15
- <img src="https://img.shields.io/badge/versión-1.16.2-blue" alt="Version">
15
+ <img src="https://img.shields.io/badge/versión-1.16.3-blue" alt="Version">
16
16
  <img src="https://img.shields.io/badge/licencia-Apache%202.0-green" alt="License">
17
17
  <img src="https://img.shields.io/badge/idiomas-ES%20|%20EN%20|%20PT-red" alt="Languages">
18
18
  <img src="https://img.shields.io/badge/comandos-85+-purple" alt="Commands">
package/README.md CHANGED
@@ -12,7 +12,7 @@
12
12
  </p>
13
13
  <p align="center">
14
14
  <a href="#-installation"><img src="https://img.shields.io/badge/install-2_minutes-brightgreen" alt="Install"></a>
15
- <img src="https://img.shields.io/badge/version-1.16.2-blue" alt="Version">
15
+ <img src="https://img.shields.io/badge/version-1.16.3-blue" alt="Version">
16
16
  <img src="https://img.shields.io/badge/license-Apache%202.0-green" alt="License">
17
17
  <img src="https://img.shields.io/badge/languages-ES%20|%20EN%20|%20PT-red" alt="Languages">
18
18
  <img src="https://img.shields.io/badge/commands-85+-purple" alt="Commands">
package/README.pt.md CHANGED
@@ -12,7 +12,7 @@
12
12
  </p>
13
13
  <p align="center">
14
14
  <a href="#-instalação"><img src="https://img.shields.io/badge/instalação-2_minutos-brightgreen" alt="Install"></a>
15
- <img src="https://img.shields.io/badge/versão-1.16.2-blue" alt="Version">
15
+ <img src="https://img.shields.io/badge/versão-1.16.3-blue" alt="Version">
16
16
  <img src="https://img.shields.io/badge/licença-Apache%202.0-green" alt="License">
17
17
  <img src="https://img.shields.io/badge/idiomas-ES%20|%20EN%20|%20PT-red" alt="Languages">
18
18
  <img src="https://img.shields.io/badge/comandos-85+-purple" alt="Commands">
package/VERSION CHANGED
@@ -1 +1 @@
1
- 1.16.2
1
+ 1.16.3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "don-cheli-sdd",
3
- "version": "1.16.2",
3
+ "version": "1.16.3",
4
4
  "description": "Framework SDD para Claude Code — 72+ comandos, 43 habilidades, 15 modelos de razonamiento. TDD como ley de hierro. EN/ES/PT.",
5
5
  "main": "bin/don-cheli.js",
6
6
  "scripts": {
@@ -1 +1 @@
1
- 1.16.2
1
+ 1.16.3
@@ -4,7 +4,7 @@
4
4
 
5
5
  set -euo pipefail
6
6
 
7
- VERSION="1.16.2"
7
+ VERSION="1.16.3"
8
8
  REPO_URL="https://github.com/doncheli/don-cheli-sdd"
9
9
  CLEANUP_TMPDIR=""
10
10
 
@@ -481,19 +481,38 @@ if [ "$INTERACTIVE_MODE" = true ]; then
481
481
  # Try to install gum for interactive selection
482
482
  install_gum
483
483
 
484
+ # Build skills list
485
+ ALL_SKILLS=""
486
+ ALL_SKILLS_ARRAY=()
487
+ for skill_dir in "${SCRIPT_DIR}/habilidades/"*/; do
488
+ [ -d "$skill_dir" ] || continue
489
+ skill_name=$(basename "$skill_dir")
490
+ ALL_SKILLS="${ALL_SKILLS}${skill_name}\n"
491
+ ALL_SKILLS_ARRAY+=("$skill_name")
492
+ done
493
+
494
+ # Build commands list
495
+ ALL_CMDS=""
496
+ ALL_CMDS_ARRAY=()
497
+ for cmd_file in "${SCRIPT_DIR}/comandos/especdev/"*.md; do
498
+ [ -f "$cmd_file" ] || continue
499
+ cmd_name="dc:$(basename "$cmd_file" .md)"
500
+ ALL_CMDS="${ALL_CMDS}${cmd_name}\n"
501
+ ALL_CMDS_ARRAY+=("$cmd_name")
502
+ done
503
+ for cmd_file in "${SCRIPT_DIR}/comandos/razonar/"*.md; do
504
+ [ -f "$cmd_file" ] || continue
505
+ cmd_name="razonar:$(basename "$cmd_file" .md)"
506
+ ALL_CMDS="${ALL_CMDS}${cmd_name}\n"
507
+ ALL_CMDS_ARRAY+=("$cmd_name")
508
+ done
509
+
510
+ CUSTOM_GUM_OK=false
484
511
  if [ "$HAS_GUM" = true ]; then
485
512
  echo ""
486
513
  echo -e " ${BOLD}Selecciona las skills que necesitas:${NC}"
487
514
  echo ""
488
515
 
489
- # Build skills list from habilidades/ directory
490
- ALL_SKILLS=""
491
- for skill_dir in "${SCRIPT_DIR}/habilidades/"*/; do
492
- [ -d "$skill_dir" ] || continue
493
- skill_name=$(basename "$skill_dir")
494
- ALL_SKILLS="${ALL_SKILLS}${skill_name}\n"
495
- done
496
-
497
516
  SELECTED_SKILLS_RAW=$(printf "%b" "$ALL_SKILLS" | sort | gum choose --no-limit \
498
517
  --header "Skills — espacio para toggle, enter para confirmar" \
499
518
  --header.foreground="99" \
@@ -501,46 +520,100 @@ if [ "$INTERACTIVE_MODE" = true ]; then
501
520
  --selected.foreground="120" \
502
521
  < /dev/tty 2>/dev/null) || true
503
522
 
504
- PROFILE_SKILLS=$(echo "$SELECTED_SKILLS_RAW" | tr '\n' ',' | sed 's/,$//')
505
- SKILLS_COUNT=$(echo "$SELECTED_SKILLS_RAW" | grep -c . || echo "0")
523
+ if [ -n "$SELECTED_SKILLS_RAW" ]; then
524
+ PROFILE_SKILLS=$(echo "$SELECTED_SKILLS_RAW" | tr '\n' ',' | sed 's/,$//')
525
+ SKILLS_COUNT=$(echo "$SELECTED_SKILLS_RAW" | grep -c . || echo "0")
526
+ echo -e " ${GREEN}✓${NC} ${SKILLS_COUNT} skills seleccionadas"
527
+ echo ""
528
+
529
+ echo -e " ${BOLD}Selecciona los comandos que necesitas:${NC}"
530
+ echo ""
531
+
532
+ SELECTED_CMDS_RAW=$(printf "%b" "$ALL_CMDS" | sort | gum choose --no-limit \
533
+ --header "Comandos — espacio para toggle, enter para confirmar" \
534
+ --header.foreground="99" \
535
+ --cursor.foreground="212" \
536
+ --selected.foreground="120" \
537
+ < /dev/tty 2>/dev/null) || true
538
+
539
+ if [ -n "$SELECTED_CMDS_RAW" ]; then
540
+ PROFILE_COMMANDS=$(echo "$SELECTED_CMDS_RAW" | tr '\n' ',' | sed 's/,$//')
541
+ COMMANDS_COUNT=$(echo "$SELECTED_CMDS_RAW" | grep -c . || echo "0")
542
+ echo -e " ${GREEN}✓${NC} ${COMMANDS_COUNT} comandos seleccionados"
543
+ CUSTOM_GUM_OK=true
544
+ fi
545
+ fi
546
+ fi
506
547
 
507
- echo -e " ${GREEN}✓${NC} ${SKILLS_COUNT} skills seleccionadas"
548
+ if [ "$CUSTOM_GUM_OK" = false ]; then
549
+ # Fallback: interactive numbered list
550
+ echo ""
551
+ echo -e " ${BOLD}Selecciona las skills que necesitas:${NC}"
552
+ echo -e " ${DIM}(números separados por coma, 'a' para todas, enter para ninguna)${NC}"
508
553
  echo ""
554
+ local i=1
555
+ for s in "${ALL_SKILLS_ARRAY[@]}"; do
556
+ echo -e " ${CYAN}${i})${NC} ${s}"
557
+ i=$((i + 1))
558
+ done
559
+ echo ""
560
+ echo -ne " ${BOLD}▸ ${NC}"
561
+ SKILLS_CHOICE=""
562
+ read -r SKILLS_CHOICE < /dev/tty 2>/dev/null || read -r SKILLS_CHOICE 2>/dev/null || SKILLS_CHOICE=""
563
+
564
+ if [ "$SKILLS_CHOICE" = "a" ] || [ "$SKILLS_CHOICE" = "all" ]; then
565
+ PROFILE_SKILLS=$(printf "%s," "${ALL_SKILLS_ARRAY[@]}" | sed 's/,$//')
566
+ SKILLS_COUNT="${#ALL_SKILLS_ARRAY[@]}"
567
+ elif [ -n "$SKILLS_CHOICE" ]; then
568
+ PROFILE_SKILLS=""
569
+ SKILLS_COUNT=0
570
+ for num in $(echo "$SKILLS_CHOICE" | tr ',' ' '); do
571
+ idx=$((num - 1))
572
+ if [ "$idx" -ge 0 ] 2>/dev/null && [ "$idx" -lt "${#ALL_SKILLS_ARRAY[@]}" ]; then
573
+ PROFILE_SKILLS="${PROFILE_SKILLS:+$PROFILE_SKILLS,}${ALL_SKILLS_ARRAY[$idx]}"
574
+ SKILLS_COUNT=$((SKILLS_COUNT + 1))
575
+ fi
576
+ done
577
+ else
578
+ # Empty = install all
579
+ PROFILE_SKILLS=""
580
+ SKILLS_COUNT="todas"
581
+ fi
582
+ echo -e " ${GREEN}✓${NC} ${SKILLS_COUNT} skills seleccionadas"
509
583
 
584
+ echo ""
510
585
  echo -e " ${BOLD}Selecciona los comandos que necesitas:${NC}"
586
+ echo -e " ${DIM}(números separados por coma, 'a' para todos, enter para ninguno)${NC}"
511
587
  echo ""
512
-
513
- # Build commands list
514
- ALL_CMDS=""
515
- for cmd_file in "${SCRIPT_DIR}/comandos/especdev/"*.md; do
516
- [ -f "$cmd_file" ] || continue
517
- cmd_name="dc:$(basename "$cmd_file" .md)"
518
- ALL_CMDS="${ALL_CMDS}${cmd_name}\n"
519
- done
520
- for cmd_file in "${SCRIPT_DIR}/comandos/razonar/"*.md; do
521
- [ -f "$cmd_file" ] || continue
522
- cmd_name="razonar:$(basename "$cmd_file" .md)"
523
- ALL_CMDS="${ALL_CMDS}${cmd_name}\n"
588
+ i=1
589
+ for c in "${ALL_CMDS_ARRAY[@]}"; do
590
+ echo -e " ${CYAN}${i})${NC} ${c}"
591
+ i=$((i + 1))
524
592
  done
525
-
526
- SELECTED_CMDS_RAW=$(printf "%b" "$ALL_CMDS" | sort | gum choose --no-limit \
527
- --header "Comandos — espacio para toggle, enter para confirmar" \
528
- --header.foreground="99" \
529
- --cursor.foreground="212" \
530
- --selected.foreground="120" \
531
- < /dev/tty 2>/dev/null) || true
532
-
533
- PROFILE_COMMANDS=$(echo "$SELECTED_CMDS_RAW" | tr '\n' ',' | sed 's/,$//')
534
- COMMANDS_COUNT=$(echo "$SELECTED_CMDS_RAW" | grep -c . || echo "0")
535
-
593
+ echo ""
594
+ echo -ne " ${BOLD}▸ ${NC}"
595
+ CMDS_CHOICE=""
596
+ read -r CMDS_CHOICE < /dev/tty 2>/dev/null || read -r CMDS_CHOICE 2>/dev/null || CMDS_CHOICE=""
597
+
598
+ if [ "$CMDS_CHOICE" = "a" ] || [ "$CMDS_CHOICE" = "all" ]; then
599
+ PROFILE_COMMANDS=$(printf "%s," "${ALL_CMDS_ARRAY[@]}" | sed 's/,$//')
600
+ COMMANDS_COUNT="${#ALL_CMDS_ARRAY[@]}"
601
+ elif [ -n "$CMDS_CHOICE" ]; then
602
+ PROFILE_COMMANDS=""
603
+ COMMANDS_COUNT=0
604
+ for num in $(echo "$CMDS_CHOICE" | tr ',' ' '); do
605
+ idx=$((num - 1))
606
+ if [ "$idx" -ge 0 ] 2>/dev/null && [ "$idx" -lt "${#ALL_CMDS_ARRAY[@]}" ]; then
607
+ PROFILE_COMMANDS="${PROFILE_COMMANDS:+$PROFILE_COMMANDS,}${ALL_CMDS_ARRAY[$idx]}"
608
+ COMMANDS_COUNT=$((COMMANDS_COUNT + 1))
609
+ fi
610
+ done
611
+ else
612
+ # Empty = install all
613
+ PROFILE_COMMANDS=""
614
+ COMMANDS_COUNT="todos"
615
+ fi
536
616
  echo -e " ${GREEN}✓${NC} ${COMMANDS_COUNT} comandos seleccionados"
537
- else
538
- # Fallback without gum — install everything
539
- echo -e " ${YELLOW}⚠ gum no disponible. Instalando todas las skills y comandos.${NC}"
540
- PROFILE_SKILLS=""
541
- PROFILE_COMMANDS=""
542
- SKILLS_COUNT="todas"
543
- COMMANDS_COUNT="todos"
544
617
  fi
545
618
  fi
546
619
 
@@ -238,7 +238,7 @@ _gen_continue() {
238
238
  cat > "$dir/.continue/config/don-cheli.json" 2>/dev/null << 'CONTEOF' || true
239
239
  {
240
240
  "name": "don-cheli-sdd",
241
- "version": "1.16.2",
241
+ "version": "1.16.3",
242
242
  "description": "Don Cheli SDD Framework",
243
243
  "rules": [
244
244
  "All production code requires tests (TDD: RED → GREEN → REFACTOR)",
@@ -4,7 +4,7 @@
4
4
 
5
5
  set -euo pipefail
6
6
 
7
- VERSION="1.16.2"
7
+ VERSION="1.16.3"
8
8
  REPO_URL="https://github.com/doncheli/don-cheli-sdd"
9
9
  CLEANUP_TMPDIR=""
10
10
 
@@ -481,19 +481,38 @@ if [ "$INTERACTIVE_MODE" = true ]; then
481
481
  # Try to install gum for interactive selection
482
482
  install_gum
483
483
 
484
+ # Build skills list
485
+ ALL_SKILLS=""
486
+ ALL_SKILLS_ARRAY=()
487
+ for skill_dir in "${SCRIPT_DIR}/habilidades/"*/; do
488
+ [ -d "$skill_dir" ] || continue
489
+ skill_name=$(basename "$skill_dir")
490
+ ALL_SKILLS="${ALL_SKILLS}${skill_name}\n"
491
+ ALL_SKILLS_ARRAY+=("$skill_name")
492
+ done
493
+
494
+ # Build commands list
495
+ ALL_CMDS=""
496
+ ALL_CMDS_ARRAY=()
497
+ for cmd_file in "${SCRIPT_DIR}/comandos/especdev/"*.md; do
498
+ [ -f "$cmd_file" ] || continue
499
+ cmd_name="dc:$(basename "$cmd_file" .md)"
500
+ ALL_CMDS="${ALL_CMDS}${cmd_name}\n"
501
+ ALL_CMDS_ARRAY+=("$cmd_name")
502
+ done
503
+ for cmd_file in "${SCRIPT_DIR}/comandos/razonar/"*.md; do
504
+ [ -f "$cmd_file" ] || continue
505
+ cmd_name="razonar:$(basename "$cmd_file" .md)"
506
+ ALL_CMDS="${ALL_CMDS}${cmd_name}\n"
507
+ ALL_CMDS_ARRAY+=("$cmd_name")
508
+ done
509
+
510
+ CUSTOM_GUM_OK=false
484
511
  if [ "$HAS_GUM" = true ]; then
485
512
  echo ""
486
513
  echo -e " ${BOLD}Selecciona las skills que necesitas:${NC}"
487
514
  echo ""
488
515
 
489
- # Build skills list from habilidades/ directory
490
- ALL_SKILLS=""
491
- for skill_dir in "${SCRIPT_DIR}/habilidades/"*/; do
492
- [ -d "$skill_dir" ] || continue
493
- skill_name=$(basename "$skill_dir")
494
- ALL_SKILLS="${ALL_SKILLS}${skill_name}\n"
495
- done
496
-
497
516
  SELECTED_SKILLS_RAW=$(printf "%b" "$ALL_SKILLS" | sort | gum choose --no-limit \
498
517
  --header "Skills — espacio para toggle, enter para confirmar" \
499
518
  --header.foreground="99" \
@@ -501,46 +520,100 @@ if [ "$INTERACTIVE_MODE" = true ]; then
501
520
  --selected.foreground="120" \
502
521
  < /dev/tty 2>/dev/null) || true
503
522
 
504
- PROFILE_SKILLS=$(echo "$SELECTED_SKILLS_RAW" | tr '\n' ',' | sed 's/,$//')
505
- SKILLS_COUNT=$(echo "$SELECTED_SKILLS_RAW" | grep -c . || echo "0")
523
+ if [ -n "$SELECTED_SKILLS_RAW" ]; then
524
+ PROFILE_SKILLS=$(echo "$SELECTED_SKILLS_RAW" | tr '\n' ',' | sed 's/,$//')
525
+ SKILLS_COUNT=$(echo "$SELECTED_SKILLS_RAW" | grep -c . || echo "0")
526
+ echo -e " ${GREEN}✓${NC} ${SKILLS_COUNT} skills seleccionadas"
527
+ echo ""
528
+
529
+ echo -e " ${BOLD}Selecciona los comandos que necesitas:${NC}"
530
+ echo ""
531
+
532
+ SELECTED_CMDS_RAW=$(printf "%b" "$ALL_CMDS" | sort | gum choose --no-limit \
533
+ --header "Comandos — espacio para toggle, enter para confirmar" \
534
+ --header.foreground="99" \
535
+ --cursor.foreground="212" \
536
+ --selected.foreground="120" \
537
+ < /dev/tty 2>/dev/null) || true
538
+
539
+ if [ -n "$SELECTED_CMDS_RAW" ]; then
540
+ PROFILE_COMMANDS=$(echo "$SELECTED_CMDS_RAW" | tr '\n' ',' | sed 's/,$//')
541
+ COMMANDS_COUNT=$(echo "$SELECTED_CMDS_RAW" | grep -c . || echo "0")
542
+ echo -e " ${GREEN}✓${NC} ${COMMANDS_COUNT} comandos seleccionados"
543
+ CUSTOM_GUM_OK=true
544
+ fi
545
+ fi
546
+ fi
506
547
 
507
- echo -e " ${GREEN}✓${NC} ${SKILLS_COUNT} skills seleccionadas"
548
+ if [ "$CUSTOM_GUM_OK" = false ]; then
549
+ # Fallback: interactive numbered list
550
+ echo ""
551
+ echo -e " ${BOLD}Selecciona las skills que necesitas:${NC}"
552
+ echo -e " ${DIM}(números separados por coma, 'a' para todas, enter para ninguna)${NC}"
508
553
  echo ""
554
+ local i=1
555
+ for s in "${ALL_SKILLS_ARRAY[@]}"; do
556
+ echo -e " ${CYAN}${i})${NC} ${s}"
557
+ i=$((i + 1))
558
+ done
559
+ echo ""
560
+ echo -ne " ${BOLD}▸ ${NC}"
561
+ SKILLS_CHOICE=""
562
+ read -r SKILLS_CHOICE < /dev/tty 2>/dev/null || read -r SKILLS_CHOICE 2>/dev/null || SKILLS_CHOICE=""
563
+
564
+ if [ "$SKILLS_CHOICE" = "a" ] || [ "$SKILLS_CHOICE" = "all" ]; then
565
+ PROFILE_SKILLS=$(printf "%s," "${ALL_SKILLS_ARRAY[@]}" | sed 's/,$//')
566
+ SKILLS_COUNT="${#ALL_SKILLS_ARRAY[@]}"
567
+ elif [ -n "$SKILLS_CHOICE" ]; then
568
+ PROFILE_SKILLS=""
569
+ SKILLS_COUNT=0
570
+ for num in $(echo "$SKILLS_CHOICE" | tr ',' ' '); do
571
+ idx=$((num - 1))
572
+ if [ "$idx" -ge 0 ] 2>/dev/null && [ "$idx" -lt "${#ALL_SKILLS_ARRAY[@]}" ]; then
573
+ PROFILE_SKILLS="${PROFILE_SKILLS:+$PROFILE_SKILLS,}${ALL_SKILLS_ARRAY[$idx]}"
574
+ SKILLS_COUNT=$((SKILLS_COUNT + 1))
575
+ fi
576
+ done
577
+ else
578
+ # Empty = install all
579
+ PROFILE_SKILLS=""
580
+ SKILLS_COUNT="todas"
581
+ fi
582
+ echo -e " ${GREEN}✓${NC} ${SKILLS_COUNT} skills seleccionadas"
509
583
 
584
+ echo ""
510
585
  echo -e " ${BOLD}Selecciona los comandos que necesitas:${NC}"
586
+ echo -e " ${DIM}(números separados por coma, 'a' para todos, enter para ninguno)${NC}"
511
587
  echo ""
512
-
513
- # Build commands list
514
- ALL_CMDS=""
515
- for cmd_file in "${SCRIPT_DIR}/comandos/especdev/"*.md; do
516
- [ -f "$cmd_file" ] || continue
517
- cmd_name="dc:$(basename "$cmd_file" .md)"
518
- ALL_CMDS="${ALL_CMDS}${cmd_name}\n"
519
- done
520
- for cmd_file in "${SCRIPT_DIR}/comandos/razonar/"*.md; do
521
- [ -f "$cmd_file" ] || continue
522
- cmd_name="razonar:$(basename "$cmd_file" .md)"
523
- ALL_CMDS="${ALL_CMDS}${cmd_name}\n"
588
+ i=1
589
+ for c in "${ALL_CMDS_ARRAY[@]}"; do
590
+ echo -e " ${CYAN}${i})${NC} ${c}"
591
+ i=$((i + 1))
524
592
  done
525
-
526
- SELECTED_CMDS_RAW=$(printf "%b" "$ALL_CMDS" | sort | gum choose --no-limit \
527
- --header "Comandos — espacio para toggle, enter para confirmar" \
528
- --header.foreground="99" \
529
- --cursor.foreground="212" \
530
- --selected.foreground="120" \
531
- < /dev/tty 2>/dev/null) || true
532
-
533
- PROFILE_COMMANDS=$(echo "$SELECTED_CMDS_RAW" | tr '\n' ',' | sed 's/,$//')
534
- COMMANDS_COUNT=$(echo "$SELECTED_CMDS_RAW" | grep -c . || echo "0")
535
-
593
+ echo ""
594
+ echo -ne " ${BOLD}▸ ${NC}"
595
+ CMDS_CHOICE=""
596
+ read -r CMDS_CHOICE < /dev/tty 2>/dev/null || read -r CMDS_CHOICE 2>/dev/null || CMDS_CHOICE=""
597
+
598
+ if [ "$CMDS_CHOICE" = "a" ] || [ "$CMDS_CHOICE" = "all" ]; then
599
+ PROFILE_COMMANDS=$(printf "%s," "${ALL_CMDS_ARRAY[@]}" | sed 's/,$//')
600
+ COMMANDS_COUNT="${#ALL_CMDS_ARRAY[@]}"
601
+ elif [ -n "$CMDS_CHOICE" ]; then
602
+ PROFILE_COMMANDS=""
603
+ COMMANDS_COUNT=0
604
+ for num in $(echo "$CMDS_CHOICE" | tr ',' ' '); do
605
+ idx=$((num - 1))
606
+ if [ "$idx" -ge 0 ] 2>/dev/null && [ "$idx" -lt "${#ALL_CMDS_ARRAY[@]}" ]; then
607
+ PROFILE_COMMANDS="${PROFILE_COMMANDS:+$PROFILE_COMMANDS,}${ALL_CMDS_ARRAY[$idx]}"
608
+ COMMANDS_COUNT=$((COMMANDS_COUNT + 1))
609
+ fi
610
+ done
611
+ else
612
+ # Empty = install all
613
+ PROFILE_COMMANDS=""
614
+ COMMANDS_COUNT="todos"
615
+ fi
536
616
  echo -e " ${GREEN}✓${NC} ${COMMANDS_COUNT} comandos seleccionados"
537
- else
538
- # Fallback without gum — install everything
539
- echo -e " ${YELLOW}⚠ gum no disponible. Instalando todas las skills y comandos.${NC}"
540
- PROFILE_SKILLS=""
541
- PROFILE_COMMANDS=""
542
- SKILLS_COUNT="todas"
543
- COMMANDS_COUNT="todos"
544
617
  fi
545
618
  fi
546
619