Files
Loki/internal/loki/facade_mem.go
T
Claude 1e5f0904f2 Lot 13 : mémoire tenue par la façade (LOKI_MEM=rust)
La façade sert l'éditeur des pages mémoire (lecture, enregistrement,
renommage, suppression, déplacement vers un autre projet, index MEMORY.md
tenu par le code), le panneau des trackers, le mode mémoire du projet
actif et les interrupteurs du mode agent, quand LOKI_MEM=rust
(expérimental ; le Go reste le défaut).

Les pages restent des fichiers memory/<projet>/*.md écrits de façon sûre
(.bak, temporaire synchronisé puis renommé, relecture vérifiée), les
trackers des valeurs du bucket tracker. Le chiffrement reste au Go : la
façade fait ouvrir et sceller ses contenus par /internal/v1/crypt/*, et
n'écrit jamais en clair quand la mémoire est verrouillée.

gojson.rs reproduit le décodage d'encoding/json (première valeur, EOF,
erreurs du scanner et de type, structs anonymes) pour renvoyer au client
les mêmes messages que le Go ; il servira aux lots suivants.

Côté Go : facade_mem.go remet ces routes à la façade quand elles arrivent
par le tunnel ; coffre, instantanés, sauvegarde et projets restent au Go.

Parité : parity_gojson_test.go (81 corps) → tests/gojson.rs ;
parity_mem_test.go (noms, titres, slugs, modes, 36 dates, 102 appels de
route avec le disque et la base après chacun) → tests/memory.rs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016tcGfJWefW5kUGoC2wL8cv
2026-10-15 17:33:22 +00:00

46 lines
1.5 KiB
Go

package loki
import (
"os"
"strings"
)
// facade_mem.go — mémoire tenue par la façade Rust (LOKI_MEM=rust, lot 13 de
// la migration ; expérimental, le Go reste le défaut) : éditeur des pages,
// index MEMORY.md, déplacement d'une page vers un autre projet, panneau des
// trackers, mode mémoire et interrupteurs du mode agent.
//
// Les pages restent des fichiers memory/<projet>/*.md et les trackers des
// valeurs du bucket tracker : ce process continue de les lire et de les
// écrire pour sa propre boucle (outils mem_* et tracker, index injecté au
// modèle). Le chiffrement reste ici (la clé ne quitte pas ce process) : la
// façade fait sceller et ouvrir ses contenus par /internal/v1/crypt/*.
//
// Seules les routes changent de main ; celles qui arrivent ici par le tunnel
// du relais sont remises à la façade (withFacadeChat).
const facadeMemEnv = "LOKI_MEM"
// facadeMem : la façade tient-elle la mémoire ?
func facadeMem() bool {
return strings.EqualFold(strings.TrimSpace(os.Getenv(facadeMemEnv)), "rust") &&
facadeAddr() != "" && internalToken() != ""
}
// facadeMemRoutes : les routes que la façade sert alors (memory.rs).
var facadeMemRoutes = map[string]bool{
"/api/mem": true,
"/api/mem/save": true,
"/api/mem/delete": true,
"/api/mem/move": true,
"/api/agent": true,
"/api/tools": true,
"/api/skills": true,
"/api/agent/toggle": true,
"/api/tools/toggle": true,
"/api/skills/toggle": true,
"/api/agent/compact": true,
"/api/memory": true,
"/api/tracker": true,
}