Purge du code de compatibilite jean, base bbolt et arborescence ajean

- suppression des migrations d'agencement, d'unites et de dossier de donnees
- store bbolt unique (ajean.db) : config, prefs, conversation, cles, drapeaux
- arborescence backends/ bin/ presets/ memory/ models/ workspace/
- plus aucune variable, unite ou asset nomme jean
This commit is contained in:
nathaninline committed 2026-08-07 16:51:36 +02:00
1 parent 081a88c846
commit 2455d9f402
78 files changed
+1160 -2293

No files matched your search

+6 -31
View File
@@ -3,28 +3,20 @@ package ajean
import (
"encoding/json"
"net/http"
"os"
"path/filepath"
"strings"
"sync"
)
// Préférences d'apparence de l'UI web (thème, mode d'affichage). Stockées côté
// serveur — sur la machine jean — pour être partagées entre tous les appareils
// serveur — sur la machine AJEAN — pour être partagées entre tous les appareils
// qui pilotent la même instance (téléphone, laptop, accès distant ajean.link).
// Avant ça, elles ne vivaient qu'en localStorage, donc par navigateur/appareil.
// webPrefsPath est le fichier JSON des préférences d'apparence.
func webPrefsPath() string { return filepath.Join(AjeanHome(), "webprefs.json") }
var webPrefsMu sync.Mutex
// webPrefsAllowed liste les clés de préférence acceptées et, pour chacune, les
// valeurs valides. On ne stocke que ce qui est connu (pas de champ libre).
var webPrefsAllowed = map[string]map[string]bool{
// Un seul thème, deux variantes. Les anciennes valeurs (ajean, gpt-dark…)
// ne sont plus acceptées : le client les normalise en clair/sombre au
// chargement puis réenregistre la valeur normalisée.
"theme": {"light": true, "dark": true},
"hide_reasoning": {"0": true, "1": true},
"hide_tools": {"0": true, "1": true},
@@ -33,30 +25,20 @@ var webPrefsAllowed = map[string]map[string]bool{
"hide_stats": {"0": true, "1": true},
}
// loadWebPrefs lit les préférences enregistrées (map vide si absent/illisible).
// loadWebPrefs lit les préférences enregistrées (map vide si aucune).
func loadWebPrefs() map[string]string {
out := map[string]string{}
b, err := os.ReadFile(webPrefsPath())
if err != nil {
return out
for k, v := range allKV(bkPrefs) {
out[k] = v
}
_ = json.Unmarshal(b, &out)
return out
}
// saveWebPrefs fusionne les valeurs valides de `in` dans le fichier et l'écrit.
// saveWebPrefs fusionne les valeurs valides de `in` puis enregistre le tout.
func saveWebPrefs(in map[string]string) (map[string]string, error) {
webPrefsMu.Lock()
defer webPrefsMu.Unlock()
prefs := loadWebPrefs()
// Purge les clés/valeurs devenues invalides (anciens thèmes, réglage de
// police retiré) : sans ça, un fichier écrit par une version précédente
// renverrait indéfiniment des valeurs que le client ne sait plus traiter.
for k, v := range prefs {
if allowed, ok := webPrefsAllowed[k]; !ok || !allowed[v] {
delete(prefs, k)
}
}
for k, v := range in {
allowed, ok := webPrefsAllowed[k]
if !ok {
@@ -68,14 +50,7 @@ func saveWebPrefs(in map[string]string) (map[string]string, error) {
}
prefs[k] = v
}
b, err := json.MarshalIndent(prefs, "", " ")
if err != nil {
return prefs, err
}
if err := os.WriteFile(webPrefsPath(), b, 0o600); err != nil {
return prefs, err
}
return prefs, nil
return prefs, replaceKV(bkPrefs, prefs)
}
// handleWebPrefs expose les préférences d'apparence partagées entre appareils.