Files
Loki/NOTICE.md
T
MichaelandClaude Opus 5.5 e9c0555ab7 Discussions : la recherche trouve aussi les mots du texte, pas seulement les titres (index plein-texte chiffré, repris d'AJEAN 558d3b4d, #98)
Index inversé dans le bucket chatsearch (chat_search.go) : une fiche
légère par discussion (« d| » : version, date d'indexation, aperçu), sa
liste de mots (« t| ») et, par mot, la liste des discussions (« p| »).
Mots repliés sans accents, correspondance par début de mot, titre compté
double, comme chez l'amont. Chiffré quand la mémoire l'est
(encryptedBuckets) ; verrouillée, la recherche le dit (state=locked).

Adapté au modèle de Loki : toutes les discussions vivent dans
bkChat/conv:<id>. L'index suit chaque écriture de l'écrivain différé
(chat_persist.go, avant que le lot soit marqué traité : une suppression
passe toujours après) et ne touche que les mots ajoutés ou retirés. Il
suit aussi les écritures de la façade Rust, qui passent par
/internal/v1/store : le Go reste le seul à tenir l'index, la route
/api/conversations/search est servie ici et relayée par la façade comme
toute route qu'elle ne connaît pas (test de garde des deux côtés). Pas de
second écrivain, donc pas de test de parité à tenir.

Rattrapage en fond au démarrage, au déverrouillage et quand une recherche
trouve l'index incomplet : discussions absentes ou plus anciennes que leur
dernière écriture. La discussion ouverte est cherchée dans son journal en
RAM quand ce process la tient. L'extrait est pris autour du mot trouvé,
relu dans le corps des seuls résultats de la page.

Tests repris d'AJEAN (chat_search_test.go), adaptés, plus les écritures
de la façade, l'extrait en contexte, la mise à jour incrémentale et
l'index périmé.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 11:23:18 +02:00

4.6 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, units loki-engine / loki-ui).
  • Conteneurisation : image Docker autonome (llama.cpp compilé CUDA + binaire Go), docker-compose et 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. S'y ajoutent depuis d'autres idées reprises d'OpenFox et réimplémentées ici : les sous-agents (code_subagent.go — un rôle délégué qui travaille dans son propre contexte), la vérification déclenchée quand le builder a fini (statut completed, relance sur critères ouverts), le pré-vol qui refuse une écriture dès son chemin (tool_schema_order.go), la réparation des noms d'outils hallucinés (code_alias.go), les consignes du dépôt AGENTS.md / CLAUDE.md (code_instructions.go), l'hygiène du terminal (chat_shell_hygiene.go) et un compactage qui garde l'état du mode Code.

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.

La recherche plein-texte des discussions (chat_search.go) reprend celle de l'historique d'AJEAN (commit 558d3b4d, issue amont #98, PR #99 d'Olioli4) : index inversé chiffré comme les discussions, tokens repliés sans accents, correspondance par début de mot, titre compté double. Adaptée au modèle de Loki (toutes les discussions dans bkChat, index tenu à chaque écriture, y compris celles de la façade Rust) et à sa barre latérale (« rechercher partout », extrait autour du passage trouvé).

Moteur Strata

Le second moteur de Loki (internal/loki/backend_strata.go) est Strata (MIT), spécialisé dans Qwen3.8-Flash-Next. Son intégration est reprise d'AJEAN (« AJEAN MoE 1.1 », backend_moe.go) : Loki télécharge le paquet figé publié par AJEAN sur sa release moe-v1.1 (sources de Strata et binaire Linux CUDA 12 compilé, avec les modifications d'AJEAN), vérifié par SHA-256 avec les empreintes publiées par AJEAN. La reprise automatique d'une installation 1.0 (strataMigrate) est reprise d'AJEAN (moeMigrate). Ni Strata ni le modèle ne sont inclus dans l'image : ils sont téléchargés à la demande.

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.