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 +6 -0
- package/README.es.md +1 -1
- package/README.md +1 -1
- package/README.pt.md +1 -1
- package/VERSION +1 -1
- package/bin/don-cheli.js +9 -0
- package/comandos/dc/marketplace.md +62 -3
- package/comandos/especdev/marketplace.md +62 -3
- package/package.json +1 -1
- package/plantillas/especdev/es/skill-registry.json +19 -0
- package/scripts/.claude/commands/dc/marketplace.md +62 -3
- package/scripts/.claude/commands/especdev/marketplace.md +62 -3
- package/scripts/.claude/don-cheli/CLAUDE.md +16 -1
- package/scripts/.claude/don-cheli/VERSION +1 -1
- package/scripts/.claude/don-cheli/scripts/instalar.sh +1 -1
- package/scripts/.claude/don-cheli/scripts/skill-updater.sh +246 -0
- package/scripts/generar-config.sh +1 -1
- package/scripts/instalar.sh +1 -1
- package/scripts/skill-updater.sh +246 -0
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
@@ -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
|
-
-
|
|
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.
|
|
1
|
+
1.24.0
|
|
@@ -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.
|
|
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)",
|
package/scripts/instalar.sh
CHANGED
|
@@ -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
|