Files
Loki/internal/loki/facade_keepimg.go
T
Claude f79b74dac3 Lot 32 : images gardées (KEEP_TURN_IMAGES) dans le tour de la façade
KEEP_TURN_IMAGES ne garde plus la conversation au Go. L'état du tour vit
dans la façade ; les fichiers et la vision restent au Go.

Go (facade_keepimg.go) :
- /internal/v1/turn/keepimg : vision réellement active, budget des images
  gardées ;
- /internal/v1/turn/keepimg/store : une image relayée rangée par
  référence (refRelayImage), relue à l'octet près.

Rust :
- chat/keepimg.rs : port de keepImages (image à l'essai, mesure par le
  moteur répartie au prorata des octets, budget, publication, fin de tour).
- La boucle du tour : budget demandé pour le fil principal, image rangée
  par le Go, historique réécrit publié sans les relais non gardés ; les
  images gardées partent avant tout résumé (filet réactif, en cours de
  tour, fenêtre pleine).
- Début et fin de tour : retirées si le contexte le demande ou si elles
  ne doivent plus partir (clé retirée, vision absente).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016tcGfJWefW5kUGoC2wL8cv
2026-10-16 02:30:59 +00:00

48 lines
1.6 KiB
Go

package loki
import (
"net/http"
)
// facade_keepimg.go — KEEP_TURN_IMAGES pour le tour tenu par la façade (lot 32
// de la migration). L'état du tour (images à l'essai, mesure, budget) vit dans
// la façade ; ce qui touche aux fichiers et à la vision reste ici :
//
// - /internal/v1/turn/keepimg : la vision est-elle réellement active
// (visionEnabled, engineSeesImages) et le budget des images gardées
// (keepImgBudget) ;
// - /internal/v1/turn/keepimg/store : une image relayée rangée par
// référence (refRelayImage : fichier chiffré si la mémoire l'est, date
// rafraîchie, relu à l'octet près).
// handleInternalTurnKeepImg : POST {} → {"vision":bool,"budget":n}.
func handleInternalTurnKeepImg(w http.ResponseWriter, r *http.Request) {
var in struct{}
if !readInternalJSON(w, r, &in) {
return
}
sendJSON(w, http.StatusOK, map[string]any{
"vision": visionEnabled() && engineSeesImages(),
"budget": keepImgBudget(),
})
}
// handleInternalTurnKeepImgStore : POST {"msg":Message} →
// {"ok":true,"msg":Message,"weight":octets} ou {"ok":false} (format inconnu,
// disque plein, mémoire verrouillée, relecture différente : l'image reste
// éphémère).
func handleInternalTurnKeepImgStore(w http.ResponseWriter, r *http.Request) {
var in struct {
Msg Message `json:"msg"`
}
if !readInternalJSON(w, r, &in) {
return
}
m, weight, ok := refRelayImage(in.Msg)
if !ok {
sendJSON(w, http.StatusOK, map[string]any{"ok": false})
return
}
sendJSON(w, http.StatusOK, map[string]any{"ok": true, "msg": m, "weight": weight})
}