devzone 0.9.1 → 0.9.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.
@@ -106,9 +106,65 @@ config_opencode() {
106
106
  fi
107
107
  }
108
108
 
109
+ # Lance une commande longue en écrivant « toujours en cours » toutes les
110
+ # DEVZONE_PROGRESSION s sur stderr : une installation muette semble bloquée (#195)
111
+ avec_progression() {
112
+ local pas="${DEVZONE_PROGRESSION:-30}" ecoule=0 pid code=0
113
+ "$@" &
114
+ pid=$!
115
+ while kill -0 "$pid" 2>/dev/null; do
116
+ sleep 1
117
+ ecoule=$((ecoule + 1))
118
+ if [ $((ecoule % pas)) -eq 0 ] && kill -0 "$pid" 2>/dev/null; then
119
+ echo "devzone : … toujours en cours (${ecoule} s)" >&2
120
+ fi
121
+ done
122
+ wait "$pid" || code=$?
123
+ return "$code"
124
+ }
125
+
126
+ # Fichier qui marque un module actif en échec (contenu : où regarder) ; à côté
127
+ # de l'état, dans son volume : l'état l'affiche à chaque démarrage
128
+ fichier_echec() {
129
+ echo "$ETAT-echec-$1"
130
+ }
131
+
132
+ # Journal du dernier npm (son chemin est à donner en cas d'échec), ou son
133
+ # dossier ; noms horodatés : le dernier dans l'ordre du glob est le plus récent
134
+ dernier_journal_npm() {
135
+ local journal="" f
136
+ for f in "$HOME"/.npm/_logs/*-debug-0.log; do
137
+ if [ -f "$f" ]; then journal="$f"; fi
138
+ done
139
+ echo "${journal:-$HOME/.npm/_logs}"
140
+ }
141
+
142
+ # Installe les assistants IA figés, vérifiés par leur --version, 3 essais : npm
143
+ # abandonne en silence un binaire de plateforme non téléchargé (#194)
144
+ installer_ia() {
145
+ local essai
146
+ for essai in 1 2 3; do
147
+ if avec_progression npm install -g --no-fund --no-audit --loglevel=error "${IA_PAQUETS[@]}" >/dev/null &&
148
+ claude --version >/dev/null 2>&1 && opencode --version >/dev/null 2>&1; then
149
+ return 0
150
+ fi
151
+ [ "$essai" -eq 3 ] || echo "devzone : installation des assistants IA incomplète, nouvel essai ($((essai + 1))/3)…" >&2
152
+ done
153
+ return 1
154
+ }
155
+
109
156
  appliquer_ia() {
157
+ local journal
110
158
  if [ "$1" = on ]; then
111
- npm install -g --no-fund --no-audit --loglevel=error "${IA_PAQUETS[@]}" >/dev/null
159
+ echo "devzone : installation de Claude Code et opencode (quelques minutes)…"
160
+ if ! installer_ia; then
161
+ journal="$(dernier_journal_npm)"
162
+ echo "journal npm : $journal" >"$(fichier_echec ia)"
163
+ echo "devzone : échec de l'installation de ${IA_PAQUETS[*]} (npm install -g, 3 essais) ; journal npm : $journal ; réessayer : devzone appliquer" >&2
164
+ return 1
165
+ fi
166
+ rm -f "$(fichier_echec ia)"
167
+ echo "devzone : Claude Code et opencode installés"
112
168
  # Garde-fou repowarden (hook PreToolUse de Claude Code, plugin opencode) :
113
169
  # agent arrêté avant de modifier main/develop, de commiter sans
114
170
  # repowarden cc ou de contourner les hooks. Global, dans les volumes
@@ -122,6 +178,7 @@ appliquer_ia() {
122
178
  echo "devzone : ia actif : claude (puis /login), opencode auth login"
123
179
  else
124
180
  npm uninstall -g "${IA_NOMS[@]}" >/dev/null 2>&1 || true
181
+ rm -f "$(fichier_echec ia)"
125
182
  echo "devzone : ia désactivé (connexions gardées dans leurs volumes)"
126
183
  fi
127
184
  }
@@ -150,6 +207,7 @@ appliquer_repowarden() {
150
207
  ligne="$(bash "$VERSIONS" --installees 2>/dev/null | awk '$1 == "repowarden"' || true)"
151
208
  [ -n "$ligne" ] || return 0
152
209
  read -r _ figee installee <<<"$ligne"
210
+ echo "devzone : installation de repowarden $figee…"
153
211
  npm install -g "repowarden@$figee" >/dev/null
154
212
  repowarden install --global --lang fr
155
213
  echo "devzone : repowarden $installee → $figee"
@@ -210,7 +268,9 @@ etat() {
210
268
  echo " ⚠ worktree $chemin absent ici (créé hors du conteneur ?) : le gérer de ce côté-là, jamais git worktree prune ici (docs/reference.md, Worktrees git)"
211
269
  done < <(worktrees_absents)
212
270
  for m in "${MODULES[@]}"; do
213
- if [ "$(valeur "$m")" = on ]; then
271
+ if [ "$(valeur "$m")" = on ] && [ -f "$(fichier_echec "$m")" ]; then
272
+ printf ' ✖ module %-10s en échec : installation incomplète (%s) : devzone appliquer\n' "$m" "$(cat "$(fichier_echec "$m")")"
273
+ elif [ "$(valeur "$m")" = on ]; then
214
274
  printf ' ✔ module %-10s actif : %s\n' "$m" "$(description "$m")"
215
275
  else
216
276
  printf ' ○ module %-10s facultatif, %s : devzone activer %s\n' "$m" "$(description "$m")" "$m"
@@ -46,13 +46,16 @@ git config --global url.https://github.com/.insteadOf git@github.com:
46
46
 
47
47
  # repowarden, version figée (il installe des hooks git globaux) ; mettre à jour
48
48
  # en changeant la version ici, puis Rebuild Container
49
+ echo "devzone : installation de repowarden…"
49
50
  npm install -g repowarden@4.12.1
50
51
  repowarden install --global --lang fr
51
52
 
52
53
  # Modules facultatifs (assistants IA, Kubernetes) : commande devzone, état
53
- # gardé dans le volume devzone-config ; installe ce qui est actif
54
+ # gardé dans le volume devzone-config ; installe ce qui est actif. Un module
55
+ # en échec n'arrête pas la création : le conteneur reste utilisable et l'état
56
+ # (devzone, à chaque démarrage) le montre « en échec »
54
57
  sudo ln -sf /workspaces/devzone/.devcontainer/devzone /usr/local/bin/devzone
55
- devzone appliquer
58
+ devzone appliquer || echo "devzone : modules incomplets (détail ci-dessus), réessayer : devzone appliquer" >&2
56
59
 
57
60
  # Ce qui reste à faire (identité git, GitHub, modules) : récapitulatif de
58
61
  # devzone, affiché à chaque démarrage (demarrage.sh)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devzone",
3
- "version": "0.9.1",
3
+ "version": "0.9.3",
4
4
  "description": "Zone de dev conteneurisée : Java, Node, Python, Docker, Kubernetes et outils repowarden, dans un devcontainer",
5
5
  "license": "GPL-3.0-only",
6
6
  "repository": {