don-cheli-sdd 1.24.0 → 1.25.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,18 @@ 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.25.0](https://github.com/doncheli/don-cheli-sdd/compare/v1.24.1...v1.25.0) (2026-04-07)
8
+
9
+ ### Nuevas Funcionalidades
10
+
11
+ * throttle semanal en skill-updater — check cada 7 días máximo ([90483ca](https://github.com/doncheli/don-cheli-sdd/commit/90483ca549276bfc86c81d1bc2d2ea0ccd30e96b))
12
+
13
+ ## [1.24.1](https://github.com/doncheli/don-cheli-sdd/compare/v1.24.0...v1.24.1) (2026-04-07)
14
+
15
+ ### Correcciones
16
+
17
+ * corregir skill-updater.sh — registro, SHA parsing y python heredoc ([736b2f9](https://github.com/doncheli/don-cheli-sdd/commit/736b2f9b21569eac78b95c4e44f633ee8e6b139f))
18
+
7
19
  ## [1.24.0](https://github.com/doncheli/don-cheli-sdd/compare/v1.23.1...v1.24.0) (2026-04-07)
8
20
 
9
21
  ### Nuevas Funcionalidades
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.24.0-blue" alt="Version">
15
+ <img src="https://img.shields.io/badge/versión-1.25.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.24.0-blue" alt="Version">
15
+ <img src="https://img.shields.io/badge/version-1.25.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.24.0-blue" alt="Version">
15
+ <img src="https://img.shields.io/badge/versão-1.25.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.24.0
1
+ 1.25.0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "don-cheli-sdd",
3
- "version": "1.24.0",
3
+ "version": "1.25.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": {
@@ -1 +1 @@
1
- 1.24.0
1
+ 1.25.0
@@ -4,7 +4,7 @@
4
4
 
5
5
  set -euo pipefail
6
6
 
7
- VERSION="1.24.0"
7
+ VERSION="1.25.0"
8
8
  REPO_URL="https://github.com/doncheli/don-cheli-sdd"
9
9
  CLEANUP_TMPDIR=""
10
10
 
@@ -92,14 +92,14 @@ check_anthropic() {
92
92
  local api_url="https://api.github.com/repos/anthropics/skills/commits?per_page=1"
93
93
  local remote_sha
94
94
 
95
- remote_sha=$(curl -fsSL "$api_url" 2>/dev/null | grep -o '"sha":"[^"]*"' | head -1 | cut -d'"' -f4) || return 0
95
+ remote_sha=$(curl -fsSL "$api_url" 2>/dev/null | grep -o '"sha": "[^"]*"' | head -1 | sed 's/"sha": "//;s/"//') || return 0
96
96
 
97
97
  if [ -z "$remote_sha" ]; then return 0; fi
98
98
 
99
99
  # Get stored SHA
100
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=""
101
+ if [ -f "$REGISTRY_FILE" ] && command -v python3 &>/dev/null; then
102
+ stored_sha=$(python3 -c "import json; print(json.load(open('$REGISTRY_FILE'))['sources']['anthropic']['last_sha'])" 2>/dev/null) || stored_sha=""
103
103
  fi
104
104
 
105
105
  if [ "$remote_sha" != "$stored_sha" ] && [ -n "$stored_sha" ]; then
@@ -114,13 +114,17 @@ check_anthropic() {
114
114
  # Update SHA in registry
115
115
  if [ -f "$REGISTRY_FILE" ]; then
116
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
117
+ python3 << PYEOF
118
+ import json, os
119
+ reg = '$REGISTRY_FILE'
120
+ if os.path.exists(reg) and os.path.getsize(reg) > 0:
121
+ with open(reg, 'r') as fh:
122
+ d = json.load(fh)
123
+ d['sources']['anthropic']['last_sha'] = '$remote_sha'
124
+ d['last_check'] = '$(date -u +%Y-%m-%dT%H:%M:%SZ)'
125
+ with open(reg, 'w') as fh:
126
+ json.dump(d, fh, indent=2)
127
+ PYEOF
124
128
  fi
125
129
  fi
126
130
  }
@@ -197,6 +201,36 @@ apply_anthropic() {
197
201
 
198
202
  init_registry
199
203
 
204
+ # Weekly throttle: skip if last check was less than 7 days ago (unless --apply or --force)
205
+ if [ "$MODE" != "apply" ]; then
206
+ if [ -f "$REGISTRY_FILE" ] && command -v python3 &>/dev/null; then
207
+ SHOULD_SKIP=$(REG="$REGISTRY_FILE" python3 << 'PYCHECK'
208
+ import json, os
209
+ from datetime import datetime, timedelta, timezone
210
+ try:
211
+ with open(os.environ.get("REG", ""), "r") as f:
212
+ d = json.load(f)
213
+ last = d.get("last_check", "")
214
+ if last:
215
+ last_dt = datetime.fromisoformat(last.replace("Z", "+00:00"))
216
+ if datetime.now(timezone.utc) - last_dt < timedelta(days=7):
217
+ print("skip")
218
+ else:
219
+ print("run")
220
+ else:
221
+ print("run")
222
+ except:
223
+ print("run")
224
+ PYCHECK
225
+ ) || SHOULD_SKIP="run"
226
+
227
+ if [ "$SHOULD_SKIP" = "skip" ]; then
228
+ [ "$QUIET" = false ] && echo -e " ${DIM}Último check hace menos de 7 días. Usa --apply para forzar.${NC}"
229
+ exit 0
230
+ fi
231
+ fi
232
+ fi
233
+
200
234
  if [ "$QUIET" = false ] && [ "$MODE" != "check" ]; then
201
235
  echo ""
202
236
  echo -e "${BOLD} Don Cheli — Skill Updater${NC}"
@@ -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.24.0",
258
+ "version": "1.25.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.24.0"
7
+ VERSION="1.25.0"
8
8
  REPO_URL="https://github.com/doncheli/don-cheli-sdd"
9
9
  CLEANUP_TMPDIR=""
10
10
 
@@ -92,14 +92,14 @@ check_anthropic() {
92
92
  local api_url="https://api.github.com/repos/anthropics/skills/commits?per_page=1"
93
93
  local remote_sha
94
94
 
95
- remote_sha=$(curl -fsSL "$api_url" 2>/dev/null | grep -o '"sha":"[^"]*"' | head -1 | cut -d'"' -f4) || return 0
95
+ remote_sha=$(curl -fsSL "$api_url" 2>/dev/null | grep -o '"sha": "[^"]*"' | head -1 | sed 's/"sha": "//;s/"//') || return 0
96
96
 
97
97
  if [ -z "$remote_sha" ]; then return 0; fi
98
98
 
99
99
  # Get stored SHA
100
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=""
101
+ if [ -f "$REGISTRY_FILE" ] && command -v python3 &>/dev/null; then
102
+ stored_sha=$(python3 -c "import json; print(json.load(open('$REGISTRY_FILE'))['sources']['anthropic']['last_sha'])" 2>/dev/null) || stored_sha=""
103
103
  fi
104
104
 
105
105
  if [ "$remote_sha" != "$stored_sha" ] && [ -n "$stored_sha" ]; then
@@ -114,13 +114,17 @@ check_anthropic() {
114
114
  # Update SHA in registry
115
115
  if [ -f "$REGISTRY_FILE" ]; then
116
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
117
+ python3 << PYEOF
118
+ import json, os
119
+ reg = '$REGISTRY_FILE'
120
+ if os.path.exists(reg) and os.path.getsize(reg) > 0:
121
+ with open(reg, 'r') as fh:
122
+ d = json.load(fh)
123
+ d['sources']['anthropic']['last_sha'] = '$remote_sha'
124
+ d['last_check'] = '$(date -u +%Y-%m-%dT%H:%M:%SZ)'
125
+ with open(reg, 'w') as fh:
126
+ json.dump(d, fh, indent=2)
127
+ PYEOF
124
128
  fi
125
129
  fi
126
130
  }
@@ -197,6 +201,36 @@ apply_anthropic() {
197
201
 
198
202
  init_registry
199
203
 
204
+ # Weekly throttle: skip if last check was less than 7 days ago (unless --apply or --force)
205
+ if [ "$MODE" != "apply" ]; then
206
+ if [ -f "$REGISTRY_FILE" ] && command -v python3 &>/dev/null; then
207
+ SHOULD_SKIP=$(REG="$REGISTRY_FILE" python3 << 'PYCHECK'
208
+ import json, os
209
+ from datetime import datetime, timedelta, timezone
210
+ try:
211
+ with open(os.environ.get("REG", ""), "r") as f:
212
+ d = json.load(f)
213
+ last = d.get("last_check", "")
214
+ if last:
215
+ last_dt = datetime.fromisoformat(last.replace("Z", "+00:00"))
216
+ if datetime.now(timezone.utc) - last_dt < timedelta(days=7):
217
+ print("skip")
218
+ else:
219
+ print("run")
220
+ else:
221
+ print("run")
222
+ except:
223
+ print("run")
224
+ PYCHECK
225
+ ) || SHOULD_SKIP="run"
226
+
227
+ if [ "$SHOULD_SKIP" = "skip" ]; then
228
+ [ "$QUIET" = false ] && echo -e " ${DIM}Último check hace menos de 7 días. Usa --apply para forzar.${NC}"
229
+ exit 0
230
+ fi
231
+ fi
232
+ fi
233
+
200
234
  if [ "$QUIET" = false ] && [ "$MODE" != "check" ]; then
201
235
  echo ""
202
236
  echo -e "${BOLD} Don Cheli — Skill Updater${NC}"