Reprise d'AJEAN (mem_crypto/mem_vault/mem_store/mem_io/mem_migrate/ mem_snapshots/mem_health/mem_fsutil + backup_bundle), adaptée à Loki. Chiffrement à enveloppe : une DEK tirée une fois chiffre les données en AES-256-GCM ; elle est enfermée dans un coffre par une KEK dérivée en Argon2id. Ce qui ouvre le coffre : la clé de pilotage de l'appareil (le serveur n'en a que l'empreinte, il ne peut pas ouvrir seul) ou la clé de récupération donnée une fois. La DEK ne vit qu'en RAM. Périmètre chiffré, choisi pour Loki : les pages mémoire, les discussions (journal ET index, qui porte les titres), les blocs archivés au compactage — du verbatim de conversation — et les trackers. Pas les buckets de réglages : le coffre lui-même y vit, les chiffrer serait une boucle. Verrouillé, rien n'est écrasé : putStoreBytes REFUSE d'écrire du clair par-dessus du chiffré, la liste des discussions se lit vide et les pages s'affichent « 🔒 chiffré ». Le déverrouillage recharge la discussion et rattrape ce qui serait resté en clair. Une migration interrompue reprend au démarrage, un snapshot est pris avant chaque bascule, et aucune donnée n'est supprimée avant relecture vérifiée de son remplaçant. Piège corrigé au passage : chiffrer À L'INTÉRIEUR d'une transaction bbolt se bloquait sur le verrou de la base (memEncActive relit la config, donc la base). L'état du chiffrement est désormais résolu AVANT la transaction (memEncoderNow), qui ne reçoit plus qu'un encodeur pur. Sauvegarde : le paquet chiffré {mémoire, presets, réglages} s'exporte et s'importe en FICHIER (/api/backup/export, /api/backup/import). La sauvegarde vers le relais ajean.link n'est pas reprise — c'est le service de l'auteur amont ; ici le fichier reste chez soi. Le dossier mémoire n'était déjà plus joignable qu'aux outils mem_* : c'était la condition de ce chiffrement (un `cat memory/…` aurait rendu du binaire). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K6CAgoLJzufeA8rZTSpSpY
2.8 KiB
Avis d'attribution
Loki est un fork de AJEAN, créé par nathaninline et publié sous licence MIT. L'essentiel du code de ce dépôt — moteur d'assistant IA en Go, interface web embarquée, mémoire persistante, accès internet, outils MCP, accès distant chiffré — est l'œuvre du projet AJEAN. Merci à son auteur.
La licence d'origine est conservée à l'identique dans LICENSE.
Modifications apportées par le fork
- Renommage AJEAN → Loki (binaire
loki,LOKI_HOME,/etc/loki, unitsloki-engine/loki-ui). - Conteneurisation : image Docker autonome (llama.cpp compilé CUDA +
binaire Go),
docker-composeet variante Unraid, publication GHCR. - Supervision sans systemd (
sys_service_container.go) : en conteneur, le moteur est piloté par fichier PID au lieu de systemctl — indispensable pour que l'UI puisse redémarrer le moteur (changement de modèle). loki config get/set: lecture/écriture non interactive de la configuration, utilisée par l'entrypoint Docker.- Mode code (
internal/loki/code_*.go,lsp.go,agents/) : agent de code avec critères d'acceptation, passe de vérification indépendante, outils read/grep/glob, politique d'exécution, diagnostics LSP, outils git, jobs d'arrière-plan et relance sur appel d'outil textuel. La conception (contrat builder/verifier, tracker « lu avant d'écrire », auto-retry patterns, table languages.json) est reprise d'OpenFox (MIT) et réécrite en Go pour ce fork ; les prompts de rôles sont des réécritures originales.
Reprises depuis l'amont après le fork
Le fork continue de suivre AJEAN et y reprend des fonctionnalités, adaptées au
conteneur : le contrôle du navigateur (computer_use.go, computer_cdp.go,
browser_grid.go — pilotage d'un Chromium en CDP, ici celui de Playwright déjà
présent dans l'image) et la préparation des images envoyées au modèle
(web_upload_orient.go — orientation EXIF et redimensionnement), les
notifications Web Push (push.go, web_push.go), les tâches script et
le dossier de scripts (chat_scripts.go, tasks_script.go, tasks_tools.go),
et le chiffrement de la mémoire (mem_crypto.go, mem_vault.go,
mem_store.go, mem_io.go, mem_migrate.go, mem_snapshots.go,
backup_bundle.go). La sauvegarde vers le relais (relay_backup.go) n'est
pas reprise : elle vise ajean.link, le service de l'auteur amont. Loki
expose à la place un export/import de paquet chiffré en fichier local.
Services externes
Le tunnel d'accès distant continue de pointer vers ajean.link, le relais opéré par l'auteur d'AJEAN ; le catalogue de modèles intégré est également servi par ajean.link. Ces services appartiennent au projet amont.