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.
package/.devcontainer/devzone
CHANGED
|
@@ -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.
|
|
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