mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-20 05:28:15 +02:00
Lot 6 : plusieurs discussions côté Rust (chat::sessions)
Port des opérations de chat_sessions.go et de LoadConversation : discussion active créée au besoin (reprise du fil unique d'avant les discussions, clé d'origine gardée), chargement au démarrage qui réessaie et n'écrit rien sur une base illisible, liste du projet actif, création, bascule (la courante enregistrée sous SON identifiant), renommage, suppression (l'écriture en vol ne la fait pas renaître ; bascule sur la plus récente restante ou une neuve : toujours une discussion active). Les opérations sont sérialisées ; l'index partage son verrou avec l'écrivain (StoreSink::index_lock, convIndexMu en Go). Fichiers, travaux, critères, mode, résultats d'outils d'une discussion supprimée et préchauffage après bascule passent par SessionHooks. Store gagne get_open / put_seal (getStoreBytesErr / putStoreBytes). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016tcGfJWefW5kUGoC2wL8cv
This commit is contained in:
5 files changed
+574
-7
No files matched your search
@@ -127,6 +127,31 @@ impl Store {
|
||||
}
|
||||
}
|
||||
|
||||
/// `getStoreBytesErr` : lit et ouvre une valeur scellée. Absente, ou
|
||||
/// illisible (mémoire verrouillée, autre clé) → `Ok(None)` ; `Err`
|
||||
/// seulement si la base n'a pas pu être lue (« rien » et « pas pu lire »
|
||||
/// ne veulent pas dire la même chose).
|
||||
pub async fn get_open(&self, bucket: &str, key: &str) -> Result<Option<Vec<u8>>, String> {
|
||||
match self.get(bucket, key).await? {
|
||||
Some(raw) if !raw.is_empty() => Ok(self.open(raw).await.ok()),
|
||||
_ => Ok(None),
|
||||
}
|
||||
}
|
||||
|
||||
/// `putStoreBytes` : scelle puis écrit. Mémoire verrouillée : rien n'est
|
||||
/// écrit (jamais en clair).
|
||||
pub async fn put_seal(
|
||||
&self,
|
||||
bucket: &str,
|
||||
key: &str,
|
||||
plain: Vec<u8>,
|
||||
) -> Result<(), CryptError> {
|
||||
let sealed = self.seal(plain).await?;
|
||||
self.put(bucket, key, sealed)
|
||||
.await
|
||||
.map_err(CryptError::Other)
|
||||
}
|
||||
|
||||
/// Exécute un appel d'outil par le Go (`/internal/v1/tool/exec`) : même
|
||||
/// fonction que sa boucle de chat. `caps` : objet JSON des capacités du
|
||||
/// tour (champs Go : Agent, Internet, Mem, Code, Role, ComputerUse).
|
||||
|
||||
Reference in new issue
Block a user