don-cheli-sdd 1.23.1 → 1.24.0

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.24.0](https://github.com/doncheli/don-cheli-sdd/compare/v1.23.1...v1.24.0) (2026-04-07)
8
+
9
+ ### Nuevas Funcionalidades
10
+
11
+ * auto-update de skills de terceros + skill-updater.sh ([777dcad](https://github.com/doncheli/don-cheli-sdd/commit/777dcad0aa2d912c88e21c2319d44d6b73da7b01))
12
+
7
13
  ## [1.23.1](https://github.com/doncheli/don-cheli-sdd/compare/v1.23.0...v1.23.1) (2026-04-07)
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.23.1-blue" alt="Version">
15
+ <img src="https://img.shields.io/badge/versión-1.24.0-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.23.1-blue" alt="Version">
15
+ <img src="https://img.shields.io/badge/version-1.24.0-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.23.1-blue" alt="Version">
15
+ <img src="https://img.shields.io/badge/versão-1.24.0-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.23.1
1
+ 1.24.0
package/bin/don-cheli.js CHANGED
@@ -9,6 +9,7 @@ const VERSION = fs.readFileSync(path.join(FRAMEWORK_ROOT, 'VERSION'), 'utf8').tr
9
9
  const INSTALLER = path.join(FRAMEWORK_ROOT, 'scripts', 'instalar.sh');
10
10
  const VALIDATOR = path.join(FRAMEWORK_ROOT, 'scripts', 'validar.sh');
11
11
  const UPDATER = path.join(FRAMEWORK_ROOT, 'scripts', 'actualizar.sh');
12
+ const SKILL_UPDATER = path.join(FRAMEWORK_ROOT, 'scripts', 'skill-updater.sh');
12
13
 
13
14
  const args = process.argv.slice(2);
14
15
  const command = args[0] || 'help';
@@ -26,6 +27,8 @@ const HELP = `
26
27
  install --lang <es|en|pt> Instalar con idioma específico
27
28
  update, actualizar Actualizar a la última versión
28
29
  update --check Solo verificar, no aplicar
30
+ skills-update Actualizar skills de terceros
31
+ skills-update --check Solo verificar skills
29
32
  validate, validar Validar estructura del framework
30
33
  version Mostrar versión
31
34
  help Mostrar esta ayuda
@@ -34,6 +37,7 @@ const HELP = `
34
37
  don-cheli install
35
38
  don-cheli install --global --lang es
36
39
  don-cheli update
40
+ don-cheli skills-update
37
41
  don-cheli install --global --lang en --profile phantom
38
42
  don-cheli validate
39
43
  npx don-cheli-sdd install --global
@@ -71,6 +75,11 @@ switch (command) {
71
75
  run(UPDATER, args.slice(1));
72
76
  break;
73
77
 
78
+ case 'skills-update':
79
+ case 'skills-actualizar':
80
+ run(SKILL_UPDATER, args.slice(1));
81
+ break;
82
+
74
83
  case 'version':
75
84
  case '--version':
76
85
  case '-v':
@@ -15,6 +15,8 @@ Conectar Don Cheli con el ecosystem de Skills de Anthropic y la comunidad. Permi
15
15
  /dc:marketplace # Listar skills disponibles
16
16
  /dc:marketplace --instalar <nombre> # Instalar skill específica
17
17
  /dc:marketplace --buscar "weekly report" # Buscar skills
18
+ /dc:marketplace --actualizar # Buscar y aplicar updates de skills de terceros
19
+ /dc:marketplace --actualizar --verificar # Solo verificar, no aplicar
18
20
  /dc:marketplace --fuente anthropic # Solo skills oficiales
19
21
  /dc:marketplace --fuente comunidad # Solo skills de la comunidad
20
22
  /dc:marketplace --exportar <skill> # Exportar skill para compartir
@@ -99,11 +101,68 @@ Comunidad:
99
101
  Total: 46 skills activas
100
102
  ```
101
103
 
104
+ ## Auto-Update de Skills de Terceros
105
+
106
+ ### Cómo funciona
107
+
108
+ Don Cheli mantiene un registro de skills instaladas en `skill-registry.json` dentro del FRAMEWORK_HOME. El registro trackea:
109
+
110
+ - **SHA del último commit** de cada repo fuente (Anthropic, comunidad)
111
+ - **Fecha del último check**
112
+ - **Skills instaladas** con fuente y versión
113
+
114
+ ### Verificación automática
115
+
116
+ Al inicio de cada sesión, Don Cheli:
117
+ 1. Lee `skill-registry.json`
118
+ 2. Consulta los repos de origen para detectar cambios
119
+ 3. Si hay updates → notifica al usuario (NO auto-aplica)
120
+ 4. El usuario decide si actualizar con `/dc:marketplace --actualizar`
121
+
122
+ ### Actualizar skills
123
+
124
+ ```bash
125
+ /dc:marketplace --actualizar
126
+ ```
127
+
128
+ Comportamiento:
129
+ 1. **Anthropic Official** — Compara SHA del repo. Si hay commits nuevos:
130
+ - Descarga la versión nueva
131
+ - Compara los SKILL.md locales vs remotos
132
+ - Actualiza solo los que cambiaron
133
+ - Registra el nuevo SHA
134
+
135
+ 2. **Don Cheli Built-in** — Se actualiza con `/dc:actualizar` (framework completo)
136
+
137
+ 3. **Comunidad** — NO se auto-actualiza (seguridad). El usuario debe reinstalar manualmente.
138
+
139
+ ### Script ejecutable
140
+
141
+ ```bash
142
+ bash scripts/skill-updater.sh # Check all sources
143
+ bash scripts/skill-updater.sh --apply # Apply updates
144
+ bash scripts/skill-updater.sh --quiet # Silent (for session start)
145
+ bash scripts/skill-updater.sh --source anthropic # Check specific source
146
+ ```
147
+
148
+ ### Output
149
+
150
+ ```
151
+ Don Cheli — Skill Updater
152
+
153
+ Actualizaciones disponibles:
154
+
155
+ Anthropic Skills: nuevos commits disponibles
156
+ Don Cheli: v1.22.0 → v1.23.0
157
+
158
+ Ejecuta /dc:marketplace --actualizar para aplicar.
159
+ ```
160
+
102
161
  ## Seguridad
103
162
 
104
- - Skills oficiales de Anthropic: **confianza total**
105
- - Skills de Don Cheli: **confianza total**
106
- - Skills de comunidad: **requieren revisión manual**
163
+ - Skills oficiales de Anthropic: **confianza total** (auto-update habilitado)
164
+ - Skills de Don Cheli: **confianza total** (auto-update via /dc:actualizar)
165
+ - Skills de comunidad: **requieren revisión manual** (NO auto-update)
107
166
  - No ejecutar scripts sin inspección
108
167
  - Verificar que no acceda a archivos fuera del proyecto
109
168
  - Verificar que no envíe datos a servicios externos
@@ -15,6 +15,8 @@ Conectar Don Cheli con el ecosystem de Skills de Anthropic y la comunidad. Permi
15
15
  /dc:marketplace # Listar skills disponibles
16
16
  /dc:marketplace --instalar <nombre> # Instalar skill específica
17
17
  /dc:marketplace --buscar "weekly report" # Buscar skills
18
+ /dc:marketplace --actualizar # Buscar y aplicar updates de skills de terceros
19
+ /dc:marketplace --actualizar --verificar # Solo verificar, no aplicar
18
20
  /dc:marketplace --fuente anthropic # Solo skills oficiales
19
21
  /dc:marketplace --fuente comunidad # Solo skills de la comunidad
20
22
  /dc:marketplace --exportar <skill> # Exportar skill para compartir
@@ -99,11 +101,68 @@ Comunidad:
99
101
  Total: 46 skills activas
100
102
  ```
101
103
 
104
+ ## Auto-Update de Skills de Terceros
105
+
106
+ ### Cómo funciona
107
+
108
+ Don Cheli mantiene un registro de skills instaladas en `skill-registry.json` dentro del FRAMEWORK_HOME. El registro trackea:
109
+
110
+ - **SHA del último commit** de cada repo fuente (Anthropic, comunidad)
111
+ - **Fecha del último check**
112
+ - **Skills instaladas** con fuente y versión
113
+
114
+ ### Verificación automática
115
+
116
+ Al inicio de cada sesión, Don Cheli:
117
+ 1. Lee `skill-registry.json`
118
+ 2. Consulta los repos de origen para detectar cambios
119
+ 3. Si hay updates → notifica al usuario (NO auto-aplica)
120
+ 4. El usuario decide si actualizar con `/dc:marketplace --actualizar`
121
+
122
+ ### Actualizar skills
123
+
124
+ ```bash
125
+ /dc:marketplace --actualizar
126
+ ```
127
+
128
+ Comportamiento:
129
+ 1. **Anthropic Official** — Compara SHA del repo. Si hay commits nuevos:
130
+ - Descarga la versión nueva
131
+ - Compara los SKILL.md locales vs remotos
132
+ - Actualiza solo los que cambiaron
133
+ - Registra el nuevo SHA
134
+
135
+ 2. **Don Cheli Built-in** — Se actualiza con `/dc:actualizar` (framework completo)
136
+
137
+ 3. **Comunidad** — NO se auto-actualiza (seguridad). El usuario debe reinstalar manualmente.
138
+
139
+ ### Script ejecutable
140
+
141
+ ```bash
142
+ bash scripts/skill-updater.sh # Check all sources
143
+ bash scripts/skill-updater.sh --apply # Apply updates
144
+ bash scripts/skill-updater.sh --quiet # Silent (for session start)
145
+ bash scripts/skill-updater.sh --source anthropic # Check specific source
146
+ ```
147
+
148
+ ### Output
149
+
150
+ ```
151
+ Don Cheli — Skill Updater
152
+
153
+ Actualizaciones disponibles:
154
+
155
+ Anthropic Skills: nuevos commits disponibles
156
+ Don Cheli: v1.22.0 → v1.23.0
157
+
158
+ Ejecuta /dc:marketplace --actualizar para aplicar.
159
+ ```
160
+
102
161
  ## Seguridad
103
162
 
104
- - Skills oficiales de Anthropic: **confianza total**
105
- - Skills de Don Cheli: **confianza total**
106
- - Skills de comunidad: **requieren revisión manual**
163
+ - Skills oficiales de Anthropic: **confianza total** (auto-update habilitado)
164
+ - Skills de Don Cheli: **confianza total** (auto-update via /dc:actualizar)
165
+ - Skills de comunidad: **requieren revisión manual** (NO auto-update)
107
166
  - No ejecutar scripts sin inspección
108
167
  - Verificar que no acceda a archivos fuera del proyecto
109
168
  - Verificar que no envíe datos a servicios externos
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "don-cheli-sdd",
3
- "version": "1.23.1",
3
+ "version": "1.24.0",
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": {
@@ -0,0 +1,19 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "last_check": "",
4
+ "sources": {
5
+ "anthropic": {
6
+ "repo": "https://github.com/anthropics/skills",
7
+ "branch": "main",
8
+ "last_sha": "",
9
+ "skills": []
10
+ },
11
+ "doncheli": {
12
+ "repo": "https://github.com/doncheli/don-cheli-sdd",
13
+ "branch": "main",
14
+ "last_sha": "",
15
+ "type": "builtin"
16
+ }
17
+ },
18
+ "installed": []
19
+ }
@@ -15,6 +15,8 @@ Conectar Don Cheli con el ecosystem de Skills de Anthropic y la comunidad. Permi
15
15
  /dc:marketplace # Listar skills disponibles
16
16
  /dc:marketplace --instalar <nombre> # Instalar skill específica
17
17
  /dc:marketplace --buscar "weekly report" # Buscar skills
18
+ /dc:marketplace --actualizar # Buscar y aplicar updates de skills de terceros
19
+ /dc:marketplace --actualizar --verificar # Solo verificar, no aplicar
18
20
  /dc:marketplace --fuente anthropic # Solo skills oficiales
19
21
  /dc:marketplace --fuente comunidad # Solo skills de la comunidad
20
22
  /dc:marketplace --exportar <skill> # Exportar skill para compartir
@@ -99,11 +101,68 @@ Comunidad:
99
101
  Total: 46 skills activas
100
102
  ```
101
103
 
104
+ ## Auto-Update de Skills de Terceros
105
+
106
+ ### Cómo funciona
107
+
108
+ Don Cheli mantiene un registro de skills instaladas en `skill-registry.json` dentro del FRAMEWORK_HOME. El registro trackea:
109
+
110
+ - **SHA del último commit** de cada repo fuente (Anthropic, comunidad)
111
+ - **Fecha del último check**
112
+ - **Skills instaladas** con fuente y versión
113
+
114
+ ### Verificación automática
115
+
116
+ Al inicio de cada sesión, Don Cheli:
117
+ 1. Lee `skill-registry.json`
118
+ 2. Consulta los repos de origen para detectar cambios
119
+ 3. Si hay updates → notifica al usuario (NO auto-aplica)
120
+ 4. El usuario decide si actualizar con `/dc:marketplace --actualizar`
121
+
122
+ ### Actualizar skills
123
+
124
+ ```bash
125
+ /dc:marketplace --actualizar
126
+ ```
127
+
128
+ Comportamiento:
129
+ 1. **Anthropic Official** — Compara SHA del repo. Si hay commits nuevos:
130
+ - Descarga la versión nueva
131
+ - Compara los SKILL.md locales vs remotos
132
+ - Actualiza solo los que cambiaron
133
+ - Registra el nuevo SHA
134
+
135
+ 2. **Don Cheli Built-in** — Se actualiza con `/dc:actualizar` (framework completo)
136
+
137
+ 3. **Comunidad** — NO se auto-actualiza (seguridad). El usuario debe reinstalar manualmente.
138
+
139
+ ### Script ejecutable
140
+
141
+ ```bash
142
+ bash scripts/skill-updater.sh # Check all sources
143
+ bash scripts/skill-updater.sh --apply # Apply updates
144
+ bash scripts/skill-updater.sh --quiet # Silent (for session start)
145
+ bash scripts/skill-updater.sh --source anthropic # Check specific source
146
+ ```
147
+
148
+ ### Output
149
+
150
+ ```
151
+ Don Cheli — Skill Updater
152
+
153
+ Actualizaciones disponibles:
154
+
155
+ Anthropic Skills: nuevos commits disponibles
156
+ Don Cheli: v1.22.0 → v1.23.0
157
+
158
+ Ejecuta /dc:marketplace --actualizar para aplicar.
159
+ ```
160
+
102
161
  ## Seguridad
103
162
 
104
- - Skills oficiales de Anthropic: **confianza total**
105
- - Skills de Don Cheli: **confianza total**
106
- - Skills de comunidad: **requieren revisión manual**
163
+ - Skills oficiales de Anthropic: **confianza total** (auto-update habilitado)
164
+ - Skills de Don Cheli: **confianza total** (auto-update via /dc:actualizar)
165
+ - Skills de comunidad: **requieren revisión manual** (NO auto-update)
107
166
  - No ejecutar scripts sin inspección
108
167
  - Verificar que no acceda a archivos fuera del proyecto
109
168
  - Verificar que no envíe datos a servicios externos
@@ -15,6 +15,8 @@ Conectar Don Cheli con el ecosystem de Skills de Anthropic y la comunidad. Permi
15
15
  /dc:marketplace # Listar skills disponibles
16
16
  /dc:marketplace --instalar <nombre> # Instalar skill específica
17
17
  /dc:marketplace --buscar "weekly report" # Buscar skills
18
+ /dc:marketplace --actualizar # Buscar y aplicar updates de skills de terceros
19
+ /dc:marketplace --actualizar --verificar # Solo verificar, no aplicar
18
20
  /dc:marketplace --fuente anthropic # Solo skills oficiales
19
21
  /dc:marketplace --fuente comunidad # Solo skills de la comunidad
20
22
  /dc:marketplace --exportar <skill> # Exportar skill para compartir
@@ -99,11 +101,68 @@ Comunidad:
99
101
  Total: 46 skills activas
100
102
  ```
101
103
 
104
+ ## Auto-Update de Skills de Terceros
105
+
106
+ ### Cómo funciona
107
+
108
+ Don Cheli mantiene un registro de skills instaladas en `skill-registry.json` dentro del FRAMEWORK_HOME. El registro trackea:
109
+
110
+ - **SHA del último commit** de cada repo fuente (Anthropic, comunidad)
111
+ - **Fecha del último check**
112
+ - **Skills instaladas** con fuente y versión
113
+
114
+ ### Verificación automática
115
+
116
+ Al inicio de cada sesión, Don Cheli:
117
+ 1. Lee `skill-registry.json`
118
+ 2. Consulta los repos de origen para detectar cambios
119
+ 3. Si hay updates → notifica al usuario (NO auto-aplica)
120
+ 4. El usuario decide si actualizar con `/dc:marketplace --actualizar`
121
+
122
+ ### Actualizar skills
123
+
124
+ ```bash
125
+ /dc:marketplace --actualizar
126
+ ```
127
+
128
+ Comportamiento:
129
+ 1. **Anthropic Official** — Compara SHA del repo. Si hay commits nuevos:
130
+ - Descarga la versión nueva
131
+ - Compara los SKILL.md locales vs remotos
132
+ - Actualiza solo los que cambiaron
133
+ - Registra el nuevo SHA
134
+
135
+ 2. **Don Cheli Built-in** — Se actualiza con `/dc:actualizar` (framework completo)
136
+
137
+ 3. **Comunidad** — NO se auto-actualiza (seguridad). El usuario debe reinstalar manualmente.
138
+
139
+ ### Script ejecutable
140
+
141
+ ```bash
142
+ bash scripts/skill-updater.sh # Check all sources
143
+ bash scripts/skill-updater.sh --apply # Apply updates
144
+ bash scripts/skill-updater.sh --quiet # Silent (for session start)
145
+ bash scripts/skill-updater.sh --source anthropic # Check specific source
146
+ ```
147
+
148
+ ### Output
149
+
150
+ ```
151
+ Don Cheli — Skill Updater
152
+
153
+ Actualizaciones disponibles:
154
+
155
+ Anthropic Skills: nuevos commits disponibles
156
+ Don Cheli: v1.22.0 → v1.23.0
157
+
158
+ Ejecuta /dc:marketplace --actualizar para aplicar.
159
+ ```
160
+
102
161
  ## Seguridad
103
162
 
104
- - Skills oficiales de Anthropic: **confianza total**
105
- - Skills de Don Cheli: **confianza total**
106
- - Skills de comunidad: **requieren revisión manual**
163
+ - Skills oficiales de Anthropic: **confianza total** (auto-update habilitado)
164
+ - Skills de Don Cheli: **confianza total** (auto-update via /dc:actualizar)
165
+ - Skills de comunidad: **requieren revisión manual** (NO auto-update)
107
166
  - No ejecutar scripts sin inspección
108
167
  - Verificar que no acceda a archivos fuera del proyecto
109
168
  - Verificar que no envíe datos a servicios externos
@@ -86,11 +86,26 @@ Al inicio de la **primera interacción** de cada sesión, verificar silenciosame
86
86
  - **en:** `⬆️ Don Cheli v{remote} available (installed: v{local}). Run /dc:update to upgrade.`
87
87
  - **pt:** `⬆️ Don Cheli v{remota} disponível (instalada: v{local}). Execute /dc:atualizar para atualizar.`
88
88
 
89
+ **Alternativa rápida vía terminal:**
90
+ - `don-cheli update` (si instaló via npm)
91
+ - `bash scripts/actualizar.sh` (si instaló via git clone)
92
+
89
93
  **Reglas:**
90
94
  - Solo notificar **una vez por sesión** (no repetir en cada mensaje)
91
95
  - Si no hay conexión o falla el curl, continuar sin notificar (no bloquear)
92
96
  - Si las versiones son iguales, no mostrar nada
93
- - Usar el nombre del comando en el idioma configurado (`/dc:actualizar`, `/dc:update`, `/dc:atualizar`)
97
+ - **Nunca** auto-aplicar actualizaciones sin confirmación del usuario
98
+
99
+ ### Verificación de skills de terceros
100
+
101
+ Además del framework, verificar si hay actualizaciones de skills:
102
+
103
+ 1. Ejecutar `bash scripts/skill-updater.sh --quiet` (silencioso, no bloqueante)
104
+ 2. Si hay updates → mostrar al usuario:
105
+ - **es:** `⬆️ {N} actualización(es) de skills disponible(s). Ejecuta /dc:marketplace --actualizar.`
106
+ - **en:** `⬆️ {N} skill update(s) available. Run /dc:marketplace --update.`
107
+ - **pt:** `⬆️ {N} atualização(ões) de skills disponível(is). Execute /dc:marketplace --atualizar.`
108
+ 3. Si no hay updates o falla → silencio
94
109
 
95
110
  ## Gestión de Contexto
96
111
 
@@ -1 +1 @@
1
- 1.23.1
1
+ 1.24.0
@@ -4,7 +4,7 @@
4
4
 
5
5
  set -euo pipefail
6
6
 
7
- VERSION="1.23.1"
7
+ VERSION="1.24.0"
8
8
  REPO_URL="https://github.com/doncheli/don-cheli-sdd"
9
9
  CLEANUP_TMPDIR=""
10
10
 
@@ -0,0 +1,246 @@
1
+ #!/bin/bash
2
+ # Don Cheli — Skill Auto-Updater
3
+ # Checks for updates to third-party skills from their source repos
4
+ #
5
+ # Usage:
6
+ # bash scripts/skill-updater.sh # Check all sources
7
+ # bash scripts/skill-updater.sh --check # Only check, don't update
8
+ # bash scripts/skill-updater.sh --source anthropic # Check specific source
9
+ # bash scripts/skill-updater.sh --apply # Apply all pending updates
10
+ # bash scripts/skill-updater.sh --quiet # Silent mode (for session start)
11
+
12
+ set -euo pipefail
13
+
14
+ GREEN='\033[0;32m'
15
+ RED='\033[0;31m'
16
+ YELLOW='\033[1;33m'
17
+ CYAN='\033[0;36m'
18
+ BOLD='\033[1m'
19
+ DIM='\033[2m'
20
+ NC='\033[0m'
21
+
22
+ # ═══════════════════════════════════════════════════════════════
23
+ # CONFIG
24
+ # ═══════════════════════════════════════════════════════════════
25
+
26
+ MODE="check"
27
+ SOURCE_FILTER=""
28
+ QUIET=false
29
+
30
+ for arg in "$@"; do
31
+ case "$arg" in
32
+ --check) MODE="check" ;;
33
+ --apply) MODE="apply" ;;
34
+ --quiet) QUIET=true ;;
35
+ --source) shift; SOURCE_FILTER="${2:-}" ;;
36
+ esac
37
+ done
38
+
39
+ # Detect framework home
40
+ if [ -f "$HOME/.claude/don-cheli/VERSION" ]; then
41
+ FRAMEWORK_HOME="$HOME/.claude/don-cheli"
42
+ elif [ -f "./.claude/don-cheli/VERSION" ]; then
43
+ FRAMEWORK_HOME="./.claude/don-cheli"
44
+ else
45
+ [ "$QUIET" = false ] && echo -e "${RED}Don Cheli not installed${NC}"
46
+ exit 0
47
+ fi
48
+
49
+ REGISTRY_FILE="${FRAMEWORK_HOME}/skill-registry.json"
50
+ SKILLS_DIR="${FRAMEWORK_HOME}"
51
+ LOCALE=$(cat "${FRAMEWORK_HOME}/locale" 2>/dev/null || echo "es")
52
+
53
+ # ═══════════════════════════════════════════════════════════════
54
+ # REGISTRY
55
+ # ═══════════════════════════════════════════════════════════════
56
+
57
+ # Initialize registry if it doesn't exist
58
+ init_registry() {
59
+ if [ ! -f "$REGISTRY_FILE" ]; then
60
+ cat > "$REGISTRY_FILE" << 'REGEOF'
61
+ {
62
+ "version": "1.0.0",
63
+ "last_check": "",
64
+ "sources": {
65
+ "anthropic": {
66
+ "repo": "https://github.com/anthropics/skills",
67
+ "branch": "main",
68
+ "last_sha": "",
69
+ "skills": []
70
+ },
71
+ "doncheli": {
72
+ "repo": "https://github.com/doncheli/don-cheli-sdd",
73
+ "branch": "main",
74
+ "last_sha": "",
75
+ "type": "builtin"
76
+ }
77
+ },
78
+ "installed": []
79
+ }
80
+ REGEOF
81
+ fi
82
+ }
83
+
84
+ # ═══════════════════════════════════════════════════════════════
85
+ # CHECK SOURCES
86
+ # ═══════════════════════════════════════════════════════════════
87
+
88
+ UPDATES_AVAILABLE=0
89
+ UPDATE_MESSAGES=""
90
+
91
+ check_anthropic() {
92
+ local api_url="https://api.github.com/repos/anthropics/skills/commits?per_page=1"
93
+ local remote_sha
94
+
95
+ remote_sha=$(curl -fsSL "$api_url" 2>/dev/null | grep -o '"sha":"[^"]*"' | head -1 | cut -d'"' -f4) || return 0
96
+
97
+ if [ -z "$remote_sha" ]; then return 0; fi
98
+
99
+ # Get stored SHA
100
+ local stored_sha=""
101
+ if [ -f "$REGISTRY_FILE" ]; then
102
+ stored_sha=$(grep -o '"last_sha":"[^"]*"' "$REGISTRY_FILE" | head -1 | cut -d'"' -f4 2>/dev/null) || stored_sha=""
103
+ fi
104
+
105
+ if [ "$remote_sha" != "$stored_sha" ] && [ -n "$stored_sha" ]; then
106
+ UPDATES_AVAILABLE=$((UPDATES_AVAILABLE + 1))
107
+ UPDATE_MESSAGES="${UPDATE_MESSAGES} ${CYAN}Anthropic Skills${NC}: nuevos commits disponibles\n"
108
+
109
+ if [ "$MODE" = "apply" ]; then
110
+ apply_anthropic "$remote_sha"
111
+ fi
112
+ fi
113
+
114
+ # Update SHA in registry
115
+ if [ -f "$REGISTRY_FILE" ]; then
116
+ if command -v python3 &>/dev/null; then
117
+ python3 -c "
118
+ import json
119
+ with open('$REGISTRY_FILE', 'r') as f: d = json.load(f)
120
+ d['sources']['anthropic']['last_sha'] = '$remote_sha'
121
+ d['last_check'] = '$(date -u +%Y-%m-%dT%H:%M:%SZ)'
122
+ with open('$REGISTRY_FILE', 'w') as f: json.dump(d, f, indent=2)
123
+ " 2>/dev/null || true
124
+ fi
125
+ fi
126
+ }
127
+
128
+ check_doncheli() {
129
+ # This is handled by the main framework updater (/dc:actualizar)
130
+ # Just check if framework version is latest
131
+ local local_ver
132
+ local remote_ver
133
+
134
+ local_ver=$(cat "${FRAMEWORK_HOME}/VERSION" 2>/dev/null | tr -d '[:space:]')
135
+ remote_ver=$(curl -fsSL "https://raw.githubusercontent.com/doncheli/don-cheli-sdd/main/VERSION" 2>/dev/null | tr -d '[:space:]') || return 0
136
+
137
+ if [ -z "$remote_ver" ]; then return 0; fi
138
+
139
+ if [ "$local_ver" != "$remote_ver" ]; then
140
+ UPDATES_AVAILABLE=$((UPDATES_AVAILABLE + 1))
141
+ UPDATE_MESSAGES="${UPDATE_MESSAGES} ${CYAN}Don Cheli${NC}: v${local_ver} → v${remote_ver}\n"
142
+ fi
143
+ }
144
+
145
+ check_community() {
146
+ # Community skills are pinned (no auto-update for security)
147
+ # Only check if their source URLs are still accessible
148
+ return 0
149
+ }
150
+
151
+ # ═══════════════════════════════════════════════════════════════
152
+ # APPLY UPDATES
153
+ # ═══════════════════════════════════════════════════════════════
154
+
155
+ apply_anthropic() {
156
+ local new_sha="$1"
157
+ local temp_dir
158
+ temp_dir=$(mktemp -d)
159
+ trap "rm -rf '$temp_dir'" RETURN
160
+
161
+ [ "$QUIET" = false ] && echo -e " ${CYAN}Descargando Anthropic Skills...${NC}"
162
+
163
+ git clone --depth 1 "https://github.com/anthropics/skills.git" "$temp_dir/skills" > /dev/null 2>&1 || {
164
+ [ "$QUIET" = false ] && echo -e " ${RED}Error al clonar repo${NC}"
165
+ return 1
166
+ }
167
+
168
+ # Find all SKILL.md files and update local copies
169
+ local updated=0
170
+ local agent_skills_dir="${FRAMEWORK_HOME}/.agent/skills"
171
+
172
+ if [ -d "$temp_dir/skills" ]; then
173
+ find "$temp_dir/skills" -name "SKILL.md" -type f | while read -r skill_file; do
174
+ local skill_dir
175
+ skill_dir=$(dirname "$skill_file")
176
+ local skill_name
177
+ skill_name=$(basename "$skill_dir")
178
+
179
+ # Only update if we have a matching local skill
180
+ if [ -d "$agent_skills_dir/$skill_name" ]; then
181
+ # Compare content
182
+ if ! diff -q "$skill_file" "$agent_skills_dir/$skill_name/SKILL.md" > /dev/null 2>&1; then
183
+ cp "$skill_file" "$agent_skills_dir/$skill_name/SKILL.md"
184
+ updated=$((updated + 1))
185
+ [ "$QUIET" = false ] && echo -e " ${GREEN}✓${NC} $skill_name actualizado"
186
+ fi
187
+ fi
188
+ done
189
+ fi
190
+
191
+ [ "$QUIET" = false ] && echo -e " ${GREEN}✓${NC} Anthropic Skills: $updated actualizados"
192
+ }
193
+
194
+ # ═══════════════════════════════════════════════════════════════
195
+ # MAIN
196
+ # ═══════════════════════════════════════════════════════════════
197
+
198
+ init_registry
199
+
200
+ if [ "$QUIET" = false ] && [ "$MODE" != "check" ]; then
201
+ echo ""
202
+ echo -e "${BOLD} Don Cheli — Skill Updater${NC}"
203
+ echo ""
204
+ fi
205
+
206
+ # Check each source
207
+ if [ -z "$SOURCE_FILTER" ] || [ "$SOURCE_FILTER" = "anthropic" ]; then
208
+ check_anthropic
209
+ fi
210
+
211
+ if [ -z "$SOURCE_FILTER" ] || [ "$SOURCE_FILTER" = "doncheli" ]; then
212
+ check_doncheli
213
+ fi
214
+
215
+ if [ -z "$SOURCE_FILTER" ] || [ "$SOURCE_FILTER" = "community" ]; then
216
+ check_community
217
+ fi
218
+
219
+ # ═══════════════════════════════════════════════════════════════
220
+ # OUTPUT
221
+ # ═══════════════════════════════════════════════════════════════
222
+
223
+ if [ "$UPDATES_AVAILABLE" -gt 0 ]; then
224
+ if [ "$QUIET" = true ]; then
225
+ # Quiet mode: output single notification line for CLAUDE.md to use
226
+ case "$LOCALE" in
227
+ en) echo "⬆️ $UPDATES_AVAILABLE skill update(s) available. Run /dc:marketplace --update to apply." ;;
228
+ pt) echo "⬆️ $UPDATES_AVAILABLE atualização(ões) de skills disponível(is). Execute /dc:marketplace --atualizar." ;;
229
+ *) echo "⬆️ $UPDATES_AVAILABLE actualización(es) de skills disponible(s). Ejecuta /dc:marketplace --actualizar." ;;
230
+ esac
231
+ else
232
+ echo -e "\n${BOLD} Actualizaciones disponibles:${NC}\n"
233
+ printf "%b" "$UPDATE_MESSAGES"
234
+ echo ""
235
+ if [ "$MODE" = "check" ]; then
236
+ echo -e " Ejecuta ${CYAN}/dc:marketplace --actualizar${NC} para aplicar."
237
+ echo -e " O: ${CYAN}bash scripts/skill-updater.sh --apply${NC}"
238
+ fi
239
+ fi
240
+ else
241
+ if [ "$QUIET" = false ]; then
242
+ echo -e " ${GREEN}✅${NC} Todas las skills están al día."
243
+ fi
244
+ fi
245
+
246
+ exit 0
@@ -255,7 +255,7 @@ _gen_continue() {
255
255
  cat > "$project_root/.continue/config/don-cheli.json" 2>/dev/null << 'CONTEOF' || true
256
256
  {
257
257
  "name": "don-cheli-sdd",
258
- "version": "1.23.1",
258
+ "version": "1.24.0",
259
259
  "description": "Don Cheli SDD Framework",
260
260
  "rules": [
261
261
  "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.23.1"
7
+ VERSION="1.24.0"
8
8
  REPO_URL="https://github.com/doncheli/don-cheli-sdd"
9
9
  CLEANUP_TMPDIR=""
10
10
 
@@ -0,0 +1,246 @@
1
+ #!/bin/bash
2
+ # Don Cheli — Skill Auto-Updater
3
+ # Checks for updates to third-party skills from their source repos
4
+ #
5
+ # Usage:
6
+ # bash scripts/skill-updater.sh # Check all sources
7
+ # bash scripts/skill-updater.sh --check # Only check, don't update
8
+ # bash scripts/skill-updater.sh --source anthropic # Check specific source
9
+ # bash scripts/skill-updater.sh --apply # Apply all pending updates
10
+ # bash scripts/skill-updater.sh --quiet # Silent mode (for session start)
11
+
12
+ set -euo pipefail
13
+
14
+ GREEN='\033[0;32m'
15
+ RED='\033[0;31m'
16
+ YELLOW='\033[1;33m'
17
+ CYAN='\033[0;36m'
18
+ BOLD='\033[1m'
19
+ DIM='\033[2m'
20
+ NC='\033[0m'
21
+
22
+ # ═══════════════════════════════════════════════════════════════
23
+ # CONFIG
24
+ # ═══════════════════════════════════════════════════════════════
25
+
26
+ MODE="check"
27
+ SOURCE_FILTER=""
28
+ QUIET=false
29
+
30
+ for arg in "$@"; do
31
+ case "$arg" in
32
+ --check) MODE="check" ;;
33
+ --apply) MODE="apply" ;;
34
+ --quiet) QUIET=true ;;
35
+ --source) shift; SOURCE_FILTER="${2:-}" ;;
36
+ esac
37
+ done
38
+
39
+ # Detect framework home
40
+ if [ -f "$HOME/.claude/don-cheli/VERSION" ]; then
41
+ FRAMEWORK_HOME="$HOME/.claude/don-cheli"
42
+ elif [ -f "./.claude/don-cheli/VERSION" ]; then
43
+ FRAMEWORK_HOME="./.claude/don-cheli"
44
+ else
45
+ [ "$QUIET" = false ] && echo -e "${RED}Don Cheli not installed${NC}"
46
+ exit 0
47
+ fi
48
+
49
+ REGISTRY_FILE="${FRAMEWORK_HOME}/skill-registry.json"
50
+ SKILLS_DIR="${FRAMEWORK_HOME}"
51
+ LOCALE=$(cat "${FRAMEWORK_HOME}/locale" 2>/dev/null || echo "es")
52
+
53
+ # ═══════════════════════════════════════════════════════════════
54
+ # REGISTRY
55
+ # ═══════════════════════════════════════════════════════════════
56
+
57
+ # Initialize registry if it doesn't exist
58
+ init_registry() {
59
+ if [ ! -f "$REGISTRY_FILE" ]; then
60
+ cat > "$REGISTRY_FILE" << 'REGEOF'
61
+ {
62
+ "version": "1.0.0",
63
+ "last_check": "",
64
+ "sources": {
65
+ "anthropic": {
66
+ "repo": "https://github.com/anthropics/skills",
67
+ "branch": "main",
68
+ "last_sha": "",
69
+ "skills": []
70
+ },
71
+ "doncheli": {
72
+ "repo": "https://github.com/doncheli/don-cheli-sdd",
73
+ "branch": "main",
74
+ "last_sha": "",
75
+ "type": "builtin"
76
+ }
77
+ },
78
+ "installed": []
79
+ }
80
+ REGEOF
81
+ fi
82
+ }
83
+
84
+ # ═══════════════════════════════════════════════════════════════
85
+ # CHECK SOURCES
86
+ # ═══════════════════════════════════════════════════════════════
87
+
88
+ UPDATES_AVAILABLE=0
89
+ UPDATE_MESSAGES=""
90
+
91
+ check_anthropic() {
92
+ local api_url="https://api.github.com/repos/anthropics/skills/commits?per_page=1"
93
+ local remote_sha
94
+
95
+ remote_sha=$(curl -fsSL "$api_url" 2>/dev/null | grep -o '"sha":"[^"]*"' | head -1 | cut -d'"' -f4) || return 0
96
+
97
+ if [ -z "$remote_sha" ]; then return 0; fi
98
+
99
+ # Get stored SHA
100
+ local stored_sha=""
101
+ if [ -f "$REGISTRY_FILE" ]; then
102
+ stored_sha=$(grep -o '"last_sha":"[^"]*"' "$REGISTRY_FILE" | head -1 | cut -d'"' -f4 2>/dev/null) || stored_sha=""
103
+ fi
104
+
105
+ if [ "$remote_sha" != "$stored_sha" ] && [ -n "$stored_sha" ]; then
106
+ UPDATES_AVAILABLE=$((UPDATES_AVAILABLE + 1))
107
+ UPDATE_MESSAGES="${UPDATE_MESSAGES} ${CYAN}Anthropic Skills${NC}: nuevos commits disponibles\n"
108
+
109
+ if [ "$MODE" = "apply" ]; then
110
+ apply_anthropic "$remote_sha"
111
+ fi
112
+ fi
113
+
114
+ # Update SHA in registry
115
+ if [ -f "$REGISTRY_FILE" ]; then
116
+ if command -v python3 &>/dev/null; then
117
+ python3 -c "
118
+ import json
119
+ with open('$REGISTRY_FILE', 'r') as f: d = json.load(f)
120
+ d['sources']['anthropic']['last_sha'] = '$remote_sha'
121
+ d['last_check'] = '$(date -u +%Y-%m-%dT%H:%M:%SZ)'
122
+ with open('$REGISTRY_FILE', 'w') as f: json.dump(d, f, indent=2)
123
+ " 2>/dev/null || true
124
+ fi
125
+ fi
126
+ }
127
+
128
+ check_doncheli() {
129
+ # This is handled by the main framework updater (/dc:actualizar)
130
+ # Just check if framework version is latest
131
+ local local_ver
132
+ local remote_ver
133
+
134
+ local_ver=$(cat "${FRAMEWORK_HOME}/VERSION" 2>/dev/null | tr -d '[:space:]')
135
+ remote_ver=$(curl -fsSL "https://raw.githubusercontent.com/doncheli/don-cheli-sdd/main/VERSION" 2>/dev/null | tr -d '[:space:]') || return 0
136
+
137
+ if [ -z "$remote_ver" ]; then return 0; fi
138
+
139
+ if [ "$local_ver" != "$remote_ver" ]; then
140
+ UPDATES_AVAILABLE=$((UPDATES_AVAILABLE + 1))
141
+ UPDATE_MESSAGES="${UPDATE_MESSAGES} ${CYAN}Don Cheli${NC}: v${local_ver} → v${remote_ver}\n"
142
+ fi
143
+ }
144
+
145
+ check_community() {
146
+ # Community skills are pinned (no auto-update for security)
147
+ # Only check if their source URLs are still accessible
148
+ return 0
149
+ }
150
+
151
+ # ═══════════════════════════════════════════════════════════════
152
+ # APPLY UPDATES
153
+ # ═══════════════════════════════════════════════════════════════
154
+
155
+ apply_anthropic() {
156
+ local new_sha="$1"
157
+ local temp_dir
158
+ temp_dir=$(mktemp -d)
159
+ trap "rm -rf '$temp_dir'" RETURN
160
+
161
+ [ "$QUIET" = false ] && echo -e " ${CYAN}Descargando Anthropic Skills...${NC}"
162
+
163
+ git clone --depth 1 "https://github.com/anthropics/skills.git" "$temp_dir/skills" > /dev/null 2>&1 || {
164
+ [ "$QUIET" = false ] && echo -e " ${RED}Error al clonar repo${NC}"
165
+ return 1
166
+ }
167
+
168
+ # Find all SKILL.md files and update local copies
169
+ local updated=0
170
+ local agent_skills_dir="${FRAMEWORK_HOME}/.agent/skills"
171
+
172
+ if [ -d "$temp_dir/skills" ]; then
173
+ find "$temp_dir/skills" -name "SKILL.md" -type f | while read -r skill_file; do
174
+ local skill_dir
175
+ skill_dir=$(dirname "$skill_file")
176
+ local skill_name
177
+ skill_name=$(basename "$skill_dir")
178
+
179
+ # Only update if we have a matching local skill
180
+ if [ -d "$agent_skills_dir/$skill_name" ]; then
181
+ # Compare content
182
+ if ! diff -q "$skill_file" "$agent_skills_dir/$skill_name/SKILL.md" > /dev/null 2>&1; then
183
+ cp "$skill_file" "$agent_skills_dir/$skill_name/SKILL.md"
184
+ updated=$((updated + 1))
185
+ [ "$QUIET" = false ] && echo -e " ${GREEN}✓${NC} $skill_name actualizado"
186
+ fi
187
+ fi
188
+ done
189
+ fi
190
+
191
+ [ "$QUIET" = false ] && echo -e " ${GREEN}✓${NC} Anthropic Skills: $updated actualizados"
192
+ }
193
+
194
+ # ═══════════════════════════════════════════════════════════════
195
+ # MAIN
196
+ # ═══════════════════════════════════════════════════════════════
197
+
198
+ init_registry
199
+
200
+ if [ "$QUIET" = false ] && [ "$MODE" != "check" ]; then
201
+ echo ""
202
+ echo -e "${BOLD} Don Cheli — Skill Updater${NC}"
203
+ echo ""
204
+ fi
205
+
206
+ # Check each source
207
+ if [ -z "$SOURCE_FILTER" ] || [ "$SOURCE_FILTER" = "anthropic" ]; then
208
+ check_anthropic
209
+ fi
210
+
211
+ if [ -z "$SOURCE_FILTER" ] || [ "$SOURCE_FILTER" = "doncheli" ]; then
212
+ check_doncheli
213
+ fi
214
+
215
+ if [ -z "$SOURCE_FILTER" ] || [ "$SOURCE_FILTER" = "community" ]; then
216
+ check_community
217
+ fi
218
+
219
+ # ═══════════════════════════════════════════════════════════════
220
+ # OUTPUT
221
+ # ═══════════════════════════════════════════════════════════════
222
+
223
+ if [ "$UPDATES_AVAILABLE" -gt 0 ]; then
224
+ if [ "$QUIET" = true ]; then
225
+ # Quiet mode: output single notification line for CLAUDE.md to use
226
+ case "$LOCALE" in
227
+ en) echo "⬆️ $UPDATES_AVAILABLE skill update(s) available. Run /dc:marketplace --update to apply." ;;
228
+ pt) echo "⬆️ $UPDATES_AVAILABLE atualização(ões) de skills disponível(is). Execute /dc:marketplace --atualizar." ;;
229
+ *) echo "⬆️ $UPDATES_AVAILABLE actualización(es) de skills disponible(s). Ejecuta /dc:marketplace --actualizar." ;;
230
+ esac
231
+ else
232
+ echo -e "\n${BOLD} Actualizaciones disponibles:${NC}\n"
233
+ printf "%b" "$UPDATE_MESSAGES"
234
+ echo ""
235
+ if [ "$MODE" = "check" ]; then
236
+ echo -e " Ejecuta ${CYAN}/dc:marketplace --actualizar${NC} para aplicar."
237
+ echo -e " O: ${CYAN}bash scripts/skill-updater.sh --apply${NC}"
238
+ fi
239
+ fi
240
+ else
241
+ if [ "$QUIET" = false ]; then
242
+ echo -e " ${GREEN}✅${NC} Todas las skills están al día."
243
+ fi
244
+ fi
245
+
246
+ exit 0