devzone 0.6.0 → 0.8.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.
@@ -61,6 +61,42 @@ ecrire() {
61
61
  mv "$tmp" "$ETAT"
62
62
  }
63
63
 
64
+ # Vrai si le fichier ne contient que la clé $schema (créé d'office par opencode)
65
+ contient_seulement_schema() {
66
+ local autres
67
+ autres="$(grep -vcE '^[[:space:]]*([{}]|"?[$]schema"?[[:space:]]*:.*)?[[:space:]]*$' "$1" || true)"
68
+ [ "$autres" -eq 0 ] && grep -qF "\$schema" "$1"
69
+ }
70
+
71
+ # Configuration opencode par défaut (modèle versionné) : écrite au premier
72
+ # usage, mise à jour tant qu'elle garde le repère devzone, personnalisée sinon.
73
+ config_opencode() {
74
+ local modele="$ICI/opencode.jsonc" repere cible
75
+ repere='// devzone : configuration opencode par défaut'
76
+ if [ -f "$HOME/.config/opencode/opencode.jsonc" ]; then
77
+ cible="$HOME/.config/opencode/opencode.jsonc"
78
+ elif [ -f "$HOME/.config/opencode/opencode.json" ]; then
79
+ cible="$HOME/.config/opencode/opencode.json"
80
+ else
81
+ cible="$HOME/.config/opencode/opencode.jsonc"
82
+ fi
83
+ mkdir -p "$(dirname "$cible")"
84
+ if [ ! -f "$cible" ]; then
85
+ cp "$modele" "$cible"
86
+ echo "opencode : configuration par défaut écrite"
87
+ elif grep -qF "$repere" "$cible"; then
88
+ if ! cmp -s "$modele" "$cible"; then
89
+ cp "$modele" "$cible"
90
+ echo "opencode : configuration par défaut mise à jour"
91
+ fi
92
+ elif contient_seulement_schema "$cible"; then
93
+ cp "$modele" "$cible"
94
+ echo "opencode : configuration par défaut mise à jour"
95
+ else
96
+ echo "opencode : configuration personnalisée, gardée"
97
+ fi
98
+ }
99
+
64
100
  appliquer_ia() {
65
101
  if [ "$1" = on ]; then
66
102
  npm install -g --no-fund --no-audit --loglevel=error "${IA_PAQUETS[@]}" >/dev/null
@@ -73,6 +109,7 @@ appliquer_ia() {
73
109
  else
74
110
  echo "devzone : garde-fou repowarden non branché (repowarden 4.10 ou plus requis) : repowarden agents init --global" >&2
75
111
  fi
112
+ config_opencode
76
113
  echo "devzone : ia actif : claude (puis /login), opencode auth login"
77
114
  else
78
115
  npm uninstall -g "${IA_NOMS[@]}" >/dev/null 2>&1 || true
@@ -0,0 +1,34 @@
1
+ // devzone : configuration opencode par défaut (devzone activer ia la tient à jour ; retirer cette ligne pour la personnaliser)
2
+ {
3
+ "$schema": "https://opencode.ai/config.json",
4
+ // Modèles gratuits de la version d'opencode fixée par devzone.
5
+ // Partage et mises à jour désactivés : les versions sont fixées par devzone.
6
+ "model": "opencode/big-pickle",
7
+ "small_model": "opencode/mimo-v2.6-flash-free",
8
+ "share": "disabled",
9
+ "autoupdate": false,
10
+ "compaction": {
11
+ "auto": true
12
+ },
13
+ // Le reste est encadré par le garde-fou repowarden des dépôts repowarden.
14
+ "permission": {
15
+ "edit": "allow",
16
+ "webfetch": "allow",
17
+ "bash": {
18
+ "*": "allow",
19
+ "sudo *": "ask",
20
+ "rm -rf /*": "ask",
21
+ "git push --force*": "ask",
22
+ "git push -f*": "ask"
23
+ }
24
+ },
25
+ "agent": {
26
+ "build": { "model": "opencode/big-pickle" },
27
+ "plan": { "model": "opencode/nemotron-3-ultra-free" },
28
+ "general": { "model": "opencode/deepseek-v4.1-flash-free" },
29
+ "explore": { "model": "opencode/nemotron-3.5-lightning-free" },
30
+ "title": { "model": "opencode/mimo-v2.6-flash-free" },
31
+ "summary": { "model": "opencode/mimo-v2.6-flash-free" },
32
+ "compaction": { "model": "opencode/deepseek-v4.1-flash-free" }
33
+ }
34
+ }
@@ -46,7 +46,7 @@ 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
- npm install -g repowarden@4.10.0
49
+ npm install -g repowarden@4.12.0
50
50
  repowarden install --global --lang fr
51
51
 
52
52
  # Modules facultatifs (assistants IA, Kubernetes) : commande devzone, état
@@ -0,0 +1,117 @@
1
+ #!/usr/bin/env bash
2
+ # Versions figées du conteneur : compare repowarden (post-create.sh) et les
3
+ # assistants IA (IA_PAQUETS, devzone) à la dernière version npm, ou applique
4
+ # une montée.
5
+ # bash core/scripts/versions.sh
6
+ # une ligne « paquet ancienne nouvelle » par paquet en retard, rien sinon
7
+ # bash core/scripts/versions.sh --appliquer <paquet> <version>
8
+ # remplace cette version figée dans son fichier, rien d'autre
9
+ # Compatible bash 3.2 (macOS).
10
+ set -euo pipefail
11
+
12
+ ICI="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
13
+ POST_CREATE="$ICI/.devcontainer/post-create.sh"
14
+ DEVZONE="$ICI/.devcontainer/devzone"
15
+
16
+ # Liste « paquet version » des versions figées dans les deux fichiers
17
+ figees() {
18
+ local ligne element
19
+ ligne="$(sed -nE 's/.*npm install -g (repowarden)@([^[:space:]]+).*/\1 \2/p' "$POST_CREATE" | head -1)"
20
+ [ -z "$ligne" ] || echo "$ligne"
21
+ ligne="$(sed -nE 's/^IA_PAQUETS=\((.*)\)/\1/p' "$DEVZONE" | head -1)"
22
+ [ -n "$ligne" ] || return 0
23
+ for element in $ligne; do
24
+ case "$element" in
25
+ *@*) echo "${element%@*} ${element##*@}" ;;
26
+ esac
27
+ done
28
+ }
29
+
30
+ # Vrai si la version $1 est plus récente que $2 (composants numériques)
31
+ plus_recente() {
32
+ local i x y
33
+ local IFS=.
34
+ local a b
35
+ read -ra a <<<"$1"
36
+ read -ra b <<<"$2"
37
+ for i in 0 1 2 3; do
38
+ x="${a[i]:-0}"
39
+ y="${b[i]:-0}"
40
+ x="${x%%[!0-9]*}"
41
+ y="${y%%[!0-9]*}"
42
+ x="${x:-0}"
43
+ y="${y:-0}"
44
+ [ "$x" -gt "$y" ] && return 0
45
+ [ "$x" -lt "$y" ] && return 1
46
+ done
47
+ return 1
48
+ }
49
+
50
+ # Dernière version publiée sur npm (vide si npm ne répond pas)
51
+ derniere() {
52
+ npm view "$1" version 2>/dev/null | tail -1 | tr -d '[:space:]'
53
+ }
54
+
55
+ # Une ligne par paquet en retard, rien si tout est à jour
56
+ lister() {
57
+ local paquet ancienne nouvelle
58
+ while read -r paquet ancienne; do
59
+ [ -n "$paquet" ] || continue
60
+ nouvelle="$(derniere "$paquet")"
61
+ if [ -z "$nouvelle" ]; then
62
+ echo "versions : version npm illisible pour $paquet" >&2
63
+ exit 1
64
+ fi
65
+ if plus_recente "$nouvelle" "$ancienne"; then
66
+ echo "$paquet $ancienne $nouvelle"
67
+ fi
68
+ done < <(figees)
69
+ }
70
+
71
+ # Échappe $1 pour un motif sed (le délimiteur est « | »)
72
+ echapper() {
73
+ printf '%s' "$1" | sed "s/[][\\\\.*^$()+?{}|]/\\\\&/g"
74
+ }
75
+
76
+ # Remplace la seule version figée de $1 par $2, dans son fichier. Le contenu
77
+ # est réécrit dans le fichier existant (pas de mv) : ses droits, notamment le
78
+ # droit d'exécution de devzone, sont conservés.
79
+ appliquer() {
80
+ local paquet="$1" version="$2" motif tmp fichier
81
+ case "$version" in
82
+ "" | *[!0-9A-Za-z.+-]*)
83
+ echo "versions : version invalide : ${version:-(aucune)}" >&2
84
+ exit 1
85
+ ;;
86
+ esac
87
+ if [ "$paquet" = repowarden ]; then
88
+ fichier="$POST_CREATE"
89
+ grep -qF 'npm install -g repowarden@' "$fichier" ||
90
+ { echo "versions : paquet inconnu : $paquet" >&2; exit 1; }
91
+ tmp="$(mktemp)"
92
+ sed -E "s|(npm install -g repowarden@)[^[:space:]]+|\1${version}|" "$fichier" >"$tmp"
93
+ else
94
+ fichier="$DEVZONE"
95
+ figees | awk -v p="$paquet" '$1 == p { trouve = 1 } END { exit trouve ? 0 : 1 }' ||
96
+ { echo "versions : paquet inconnu : $paquet" >&2; exit 1; }
97
+ motif="$(echapper "$paquet")"
98
+ tmp="$(mktemp)"
99
+ sed -E "s|(${motif}@)[^ )]+|\1${version}|" "$fichier" >"$tmp"
100
+ fi
101
+ cat "$tmp" >"$fichier"
102
+ rm -f "$tmp"
103
+ }
104
+
105
+ case "${1:-}" in
106
+ "") lister ;;
107
+ --appliquer)
108
+ [ "$#" -eq 3 ] ||
109
+ { echo "usage : bash core/scripts/versions.sh [--appliquer <paquet> <version>]" >&2; exit 2; }
110
+ appliquer "$2" "$3"
111
+ ;;
112
+ -h | --help) sed -n '2,9p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//' ;;
113
+ *)
114
+ echo "usage : bash core/scripts/versions.sh [--appliquer <paquet> <version>]" >&2
115
+ exit 2
116
+ ;;
117
+ esac
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devzone",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
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": {