mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-24 15:38:12 +02:00
Façade : changement de projet sans écraser la discussion, détenteur décidé par le Go
Avec LOKI_CHAT=rust, changer de projet passait par projectSwitch du Go, qui enregistrait SA copie de la discussion — chargée au démarrage, périmée — par-dessus celle de la façade, ouvrait une autre discussion que la façade ignorait, et ne voyait pas un tour de la façade en cours. Désormais : - /api/projects (switch) remet le changement à la façade (/internal/facade/v1/project/switch) : elle enregistre sa discussion avec le projet quitté, fait changer le projet actif au Go (/internal/v1/project/activate), ouvre la plus récente du nouveau projet (une neuve s'il n'en a pas) ; refusé pendant un tour (409) ; - supprimer un projet : la façade le quitte d'abord s'il est actif, puis supprime ses discussions (/internal/facade/v1/project/drop). Réglages que la façade ne sait pas honorer (PROJ_SNAPSHOT, KEEP_TURN_IMAGES, NUDGE_IN_TOOL, SIDE_SLOT, SLOT_PERSIST, PREWARM, motifs retry_patterns) : le Go garde la conversation, décidé une fois au démarrage (facadeChatBlocker) ; la façade le lit (/internal/v1/chat/holder) avant de servir quoi que ce soit, au lieu d'échouer en plein tour. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016tcGfJWefW5kUGoC2wL8cv
This commit is contained in:
14 files changed
+655
-20
No files matched your search
@@ -21,6 +21,8 @@ import (
|
||||
// POST /internal/v1/turn/view {"caps":{…}} → {head, prefix, tools}
|
||||
// 409 : PROJ_SNAPSHOT actif (le bloc projet figé reste au Go)
|
||||
// POST /internal/v1/turn/done {"ms":N} → 204 (Web Push si abonnés)
|
||||
// POST /internal/v1/project/activate {"slug":…} → 204 (projet actif changé
|
||||
// par la façade, qui a enregistré la discussion du projet quitté)
|
||||
// POST /internal/v1/turn/verifier {"caps":{…}} → {system, tools, caps}
|
||||
// (passe de vérification du mode Code : contexte ISOLÉ, rôle verifier)
|
||||
// POST /internal/v1/conv/active {"id":…} → 204 (discussion active des outils)
|
||||
@@ -131,6 +133,26 @@ func handleInternalTurnVerifier(w http.ResponseWriter, r *http.Request) {
|
||||
})
|
||||
}
|
||||
|
||||
// handleInternalProjectActivate : setActiveProject pour la façade (projet
|
||||
// rangé en base, cache de ceux qui le lisent ici — mémoire, trackers, outils).
|
||||
func handleInternalProjectActivate(w http.ResponseWriter, r *http.Request) {
|
||||
var in struct {
|
||||
Slug string `json:"slug"`
|
||||
}
|
||||
if !readInternalJSON(w, r, &in) {
|
||||
return
|
||||
}
|
||||
if !projectExists(in.Slug) {
|
||||
sendJSON(w, http.StatusBadRequest, map[string]any{"error": "projet introuvable"})
|
||||
return
|
||||
}
|
||||
if err := setActiveProject(in.Slug); err != nil {
|
||||
sendJSON(w, http.StatusInternalServerError, map[string]any{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
w.WriteHeader(http.StatusNoContent)
|
||||
}
|
||||
|
||||
func handleInternalTurnDone(w http.ResponseWriter, r *http.Request) {
|
||||
var in struct {
|
||||
Ms int64 `json:"ms"`
|
||||
|
||||
Reference in new issue
Block a user