mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-22 14:38:12 +02:00
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>
80 lines
4.6 KiB
Markdown
80 lines
4.6 KiB
Markdown
# Avis d'attribution
|
|
|
|
**Loki est un fork de [AJEAN](https://github.com/nathaninline/ajean)**, créé
|
|
par [nathaninline](https://github.com/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`](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](https://github.com/co-l/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](https://github.com/Niko1221/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.
|