Reprise des commits 91f7f977 (PR #100 de Trombo38) et 1dfac0cf d'AJEAN. Une vidéo jointe (mp4, webm, mov, mkv, avi) part au modèle en partie input_video, et l'outil see_video charge une vidéo du disque, mais seulement si le moteur actif sait la lire : preset llama.cpp local avec projecteur (MMPROJ) et binaire dont l'aide annonce --video-fps (videoInputSupported, aide relue quand le binaire change, chemin des bibliothèques passé à la seule commande pour ne pas figer binHelp). Strata et les API externes ignoraient la partie en silence : la vidéo reste alors un fichier, annoncé avec la marche à suivre (ffmpeg puis see_image), et see_video n'est pas proposé. llama.cpp a --video-fps depuis la PR #24318 (fin août 2026) ; l'image server-cuda officielle, base du conteneur, installe ffmpeg. La consigne de repli dit quoi faire si ffmpeg manque (installation hors conteneur). Adapté à Loki : - la vidéo de see_video est toujours éphémère (jamais dans l'historique, KEEP_TURN_IMAGES compris) ; même ordre de refus que see_image, sonde /props en dernier, refus sur un poste distant ; - une vidéo jointe est rangée par référence (loki-vid:, LOKI_HOME/chatvid, chiffrée comme le fil), parties recopiées et non mutées comme les images ; retirée d'un fil rouvert (stripImageParts, videoLostMarker) et effacée par le ménage des médias ; - marqueur de perte à la compaction, élision dans l'export JSON, relais par l'API interne des outils (vision_video). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4.7 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. 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 (statutcompleted, 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 compréhension des vidéos est reprise d'AJEAN (PR #100 de Trombo38 et
son correctif « vidéo envoyée seulement si le moteur sait la lire ») :
l'outil see_video et les vidéos jointes (chat_video.go,
chat_video_tool.go), lues par llama.cpp avec --video-fps et ffmpeg ;
ailleurs, la vidéo reste un fichier, avec la marche à suivre (ffmpeg puis
see_image). Adaptée à Loki : vidéo de see_video toujours éphémère, vidéos
jointes chiffrées comme le fil et retirées d'un fil rouvert, outil tenu aussi
par la façade Rust (imagetools.rs).
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.