Commit Graph
99 Commits
Author SHA1 Message Date
nathaninline 71e7a5c369 gitattributes: .go en LF (gofmt -l ne crie plus a cause d'autocrlf) 2026-07-22 11:00:55 +02:00
nathaninline e3fe63ca24 Go: layout standard cmd/ + internal/ - tout le code dans internal/jean (package jean), cmd/jean = main() + ressources Windows (.syso/icone/versioninfo), ui/ demenage dans internal/jean/ui (go:embed inchange) ; racine GitHub epuree 2026-07-22 10:53:14 +02:00
nathaninline 79e8d322a9 Go: rangement des 45 fichiers par domaine (cli_/web_/chat_/llm_/backend_/relay_/sys_) + doc.go carte du code - renommages purs (git mv) + maj des noms cites en commentaires, zero changement de code 2026-07-22 10:47:42 +02:00
nathaninline 7af70c3d2e README: documenter ui/src/ + assemble.ps1 (index.html genere) 2026-07-22 10:27:49 +02:00
nathaninline c1b006e9ac UI: en-tete 'fichier genere' dans index.html (via template) 2026-07-22 10:24:24 +02:00
nathaninline 8a2450dff6 assemble.ps1: marqueurs tolerants LF/CRLF (autocrlf) + remplacement via MatchEvaluator (contenu JS avec \$ intact) 2026-07-22 10:23:52 +02:00
nathaninline 0770723ef0 UI: decoupe index.html en sources ui/src/ (styles.css + js/NN-*.js + template) assemblees par ui/assemble.ps1 - index.html reste genere/committe (go:embed et build-server-ui.ps1 inchanges), byte-identique 2026-07-22 10:22:54 +02:00
nathaninline 5f256befea UI: icone MAJ monochrome (fleche noire) au lieu de l'emoji colore 2026-07-22 09:54:41 +02:00
nathaninline c611893bcd UI: bouton mise a jour en haut des actions + icone dediee, retrait de la ligne 'Version installee' (deja affichee en haut) 2026-07-22 09:52:00 +02:00
nathaninline e0e5118063 v0.4.4 : le bouton mise a jour redemarre automatiquement jean-link
Apres une MAJ depuis l'UI, plus besoin de SSH sur le serveur pour finir : sur
Linux/systemd le service jean-link est relance tout seul (differe + --no-block,
la reponse HTTP part d'abord ; jean.service/llama-server n'est PAS touche pour
ne pas recharger le modele). La cle E2E survit au restart, l'UI se reconnecte
seule. Poste client/Windows : comportement inchange (message d'indice).
2026-07-22 09:44:55 +02:00
nathaninline 6cb678d42d replay: coalescer aussi les tool_used (garder l'etat final done, jeter le streaming d'args) - divise par ~100 les events d'outils rejoues, fix lenteur mobile au refresh 2026-07-22 09:35:09 +02:00
nathaninline faa377e64f SSE: padding APRES caught_up (16Ko) au lieu de dessus - le dernier message n'est plus la queue coincee dans le tampon proxy 2026-07-22 09:19:39 +02:00
nathaninline 51c2c2d80f v0.4.3 : anti-buffering SSE (Cloudflare) - fin des derniers messages en retard au refresh
Le chat E2E d'app.ajean.link traverse Cloudflare (ajean.link, proxy orange) qui
bufferise le flux SSE par lots : la queue du replay arrivait 20-30s apres le reste,
de facon intermittente (surtout Safari iOS). Corrige par la technique standard :
padding d'amorcage en tete de flux + padding sur caught_up (force le flush de la
queue), Cache-Control: no-transform (interdit a Cloudflare de bufferiser/compresser),
et heartbeat 15s->4s (borne le pire cas).
2026-07-22 09:15:15 +02:00
nathaninline 7d104e3213 v0.4.2 : refresh instantane du chat (fin du layout thrashing O(n2) au replay)
Au refresh, le client rejouait tout le journal depuis seq 0 et forcait un reflow
synchrone par evenement (scrollMaybe lisait scrollHeight ; collapseInstant lisait
offsetHeight) sur un DOM grandissant -> cout quadratique, 20-30s pour que les
derniers messages s'affichent. Le scroll est desormais fait une seule fois a la
fin du replay (caught_up), plus aucun reflow force pendant le rejeu -> O(n).
2026-07-22 08:55:07 +02:00
nathaninline e16bebda8a v0.4.1 : correctif du bouton stop (regression v0.4.0 : stopGen supprimee par erreur) 2026-07-21 22:16:04 +02:00
nathaninline d55c0d4992 fix: bouton stop cassé — la fonction stopGen avait ete supprimee par erreur lors de la refonte de send() 2026-07-21 22:14:53 +02:00
nathaninline 696627246d v0.4.0 : conversation persistee cote serveur (historique partage multi-appareils, generation autonome) + compaction du contexte facon Hermes
- Compaction automatique du contexte facon Hermes (head/torso/tail, elagage des
  vieux tool outputs + resume du torse par le modele local) : discussions quasi
  illimitees sans 'vider', declenchee sur le vrai decompte de tokens
- Historique et generation deplaces CToe SERVEUR : une seule conversation partagee
  entre tous les appareils, persistee sur disque, generation autonome (fermer le
  navigateur n'arrete plus la reponse), replay complet au refresh (outils/vitesses)
- Un seul process (jean-link) sert le tunnel ET le :8090 local -> meme historique
  entre jean.n27.fr et app.ajean.link
- Relais toujours 100% boite noire (chiffrement E2E inchange)
- Nombreux polish UI (replay coalesce rapide, pas de clignotement au refresh, envoi
  resilient, reorganisation des reglages)
2026-07-21 21:37:35 +02:00
nathaninline 02d4830a17 UI: aide clavier 'Entree pour envoyer' de retour sur desktop, cachee seulement <720px (menu replie) 2026-07-21 21:34:31 +02:00
nathaninline f9165fb204 UI: bouton send/stop ne flotte plus au refresh (etat applique une fois au caught_up) 2026-07-21 21:29:18 +02:00
nathaninline 7192931ddc UI: fin du clignotement au refresh (chat masque pendant le replay, revele en bas au caught_up) 2026-07-21 21:25:30 +02:00
nathaninline a898f32e1a historique partage entre jean web (local) et jean link (tunnel)
Le process jean-link sert desormais AUSSI l'UI locale sur :8090 avec le MEME mux
que le tunnel -> une seule conversation en memoire, partagee entre jean.n27.fr et
app.ajean.link. Fini les deux process avec des historiques divergents qui
s'ecrasaient sur le meme fichier. Le 'jean web' autonome n'est plus necessaire.
2026-07-21 21:17:21 +02:00
nathaninline bddb5a1888 UI: fusion 'Mise a jour' dans 'Actions' + suppression du hint 'Entree pour envoyer' (gain de place, surtout mobile) 2026-07-21 21:12:35 +02:00
nathaninline 2f56d99d04 perf + robustesse: replay coalesce + envoi resilient
- Subscribe rejoue le journal COALESCE (deltas texte consecutifs fusionnes en un
  evenement, avec toks + bornes ts) : chargement rapide meme sur longue conv, fini
  le rendu markdown quadratique token par token
- send() resilient : retry, 409/generating traite comme succes -> plus de 'network
  error' alarmiste alors que l'IA repond quand meme ; reconnexion du flux plus rapide
2026-07-21 20:40:08 +02:00
nathaninline e28bc45557 UI: pas d'animation de repli au refresh + reorg reglages
- serveur emet {caught_up} quand le replay est draine ; le client cree alors les
  bulles raisonnement/outil DEJA repliees (collapseInstant, sans animation) tant
  qu'on rejoue le journal -> au refresh elles apparaissent fermees direct
- 'Mise a jour' passe au-dessus de 'Actions'
- le toggle compactage rejoint la section Parametres (sous le mode agent)
2026-07-21 20:28:10 +02:00
nathaninline 54e14c7935 vitesse des bulles calculee depuis les horodatages serveur (ts par evenement)
Le calcul cote client (performance.now) donnait une vitesse presente ou non selon
que le tour etait live ou rejoue. On horodate chaque LogEvent cote serveur (TS) et
le client derive tok/s de firstTs->lastTs : correct en direct ET au replay. Hack
replayTarget supprime.
2026-07-21 17:38:28 +02:00
nathaninline 3748d3a25f UI: restaure le comptage tokens + vitesse en direct sur les bulles (raisonnement et reponse)
La refonte serveur avait supprime le compteur live par bulle. On le recalcule
cote client au fil des deltas ; en replay (refresh) on n'affiche que le nombre de
tokens (pas de vitesse absurde car tout arrive d'un bloc), via replayTarget.
2026-07-21 17:29:02 +02:00
nathaninline 4514a96585 conversation persistee cote serveur + generation autonome (multi-appareils)
L'historique et la generation vivent desormais sur le serveur jean, plus dans le
localStorage du navigateur :
- conversation.go : store unique (Messages vue modele + Log d'evenements rejouable),
  persistance disque JeanHome/conversation.json, generation dans une goroutine
  detachee (context.Background) -> fermer le navigateur ne coupe plus la reponse
- runChatStream devient un pur abonne (rejoue Log[from:] puis suit le direct) ;
  nouveaux endpoints /api/chat/send|stop|reset|state
- UI : flux d'abonnement permanent + replay du journal (outils/vitesses/raisonnement
  reviennent apres refresh), synchro live inter-appareils, reconnexion auto
- compactage manuel neutralise (auto cote serveur), vitesses rendues depuis les
  stats persistees
2026-07-21 17:20:27 +02:00
nathaninline 2daea32ade compaction: decider sur le VRAI decompte de tokens (ctx_used du client) au lieu de l'estimation
L'heuristique ~4 char/token sous-estimait le contexte (elle ne voit ni le prompt
systeme injecte ni le gabarit de chat), donc le seuil 75% n'etait jamais franchi.
Le client envoie desormais ctx_used (prompt_tokens_total deja affiche) ; repli sur
l'estimation quand inconnu (terminal).
2026-07-21 16:18:50 +02:00
nathaninline e6c0bbe3b7 compaction du contexte facon Hermes : conversations quasi illimitees sans clear
- nouveau compact.go : split head/torso/tail, elagage des vieux tool outputs
  sans IA + resume du torse par le modele local (un appel non-streame)
- proactif au seuil (75% de CTX) dans runChatStream + chat terminal, et filet
  reactif dans runChat si llama-server refuse un prompt trop long
- resume injecte en tour user->assistant (jamais un system au milieu : garde Qwen)
- toggle COMPACT (defaut on) : endpoint /api/agent/compact + case UI, event
  history_replace pour que le client remplace son historique, toast
- tests unitaires des frontieres head/tail et de la non-separation des paires outil
2026-07-21 15:49:18 +02:00
nathaninline c50ebdb6d1 v0.3.4 : gestion des mises à jour depuis l'interface web (section « Mise à jour » : vérifier + installer, endpoints /api/update et /api/update/apply) 2026-07-20 17:38:24 +02:00
nathaninline cd58382d73 v0.3.3 : mode application Windows (double-clic → UI + icône de notification + splash, icône sur l'exe), catalogue de modèles servi par ajean.link (/api/catalog + détection RAM), correctif des fenêtres de console qui clignotaient sous Windows, version affichée dans l'UI 2026-07-20 17:20:50 +02:00
nathaninline 0c4ff12a00 cleanup: supprime le code mort des skills (fondus dans la memoire)
- supprime skills.go (Skill, ListSkills, SkillContent, SaveSkill, AppendSkill,
  DeleteSkill, safeSkillDir, skillsSystemPrompt : plus aucun appelant)
- retire les handlers/routes /api/skill, /api/skill/save, /api/skill/delete
  (aucun client : ni UI locale, ni ajean-app, ni jean-relay)
- conserve les alias retro-compat /api/skills(/toggle) -> handleAgent, la
  migration migrateSkillsToMemory et legacySkillsFlag
2026-07-16 13:55:11 +02:00
nathaninline e08020844d doc: 'skills' remplaces par 'memoire' dans l'aide/README (les skills ont ete fondus dans la memoire) 2026-07-16 13:50:06 +02:00
nathaninline a762244e89 readme: alignement avec l'app actuelle (endpoint OpenAI <machine>.oai.ajean.link + toggle UI, REASONING_BUDGET=-1, TOOL_LIMIT, Go 1.25, apparence synchro) 2026-07-16 13:40:20 +02:00
nathaninline 5a3c6834ec readme: documente la commande 'jean update' 2026-07-16 13:31:11 +02:00
nathaninline f58299632b v0.3.2 : commande 'jean update' (auto-mise a jour depuis les releases GitHub) 2026-07-16 13:25:07 +02:00
nathaninline 342cdd0690 v0.3.1 : synchro des reglages d'apparence (theme/affichage) entre appareils via /api/prefs 2026-07-16 11:12:28 +02:00
nathaninline 7a795087b9 v0.3.0 : acces OpenAI public par machine + gestion cle depuis le web
- panneau Acces OpenAI dans l'UI (endpoint /v1, cle API masquee, generer/definir/retirer)
- endpoint OpenAI PUBLIC <machine>.oai.ajean.link (passthrough SNI, VPS relais aveugle,
  cert Let's Encrypt via TLS-ALPN-01 par le tunnel), toggle 'exposer en public'
2026-07-13 14:35:37 +02:00
nathaninline 4d9dcb2d6e oai: toggle UI exposer en public (drapeau .oai_public lu en direct au demux, sans redemarrage) + endpoint /api/oai/public 2026-07-13 14:30:52 +02:00
nathaninline 6767a816a9 oai: affiche l'URL publique <machine>.oai.ajean.link dans le panneau Acces OpenAI quand l'acces public est active 2026-07-13 14:25:49 +02:00
nathaninline b929b559c4 oai: ajoute http/1.1 aux protocoles ALPN (certmagic ne met que acme-tls/1, sinon les clients normaux sont rejetes) 2026-07-13 14:14:45 +02:00
nathaninline 4ecc4159de oai: cert TLS-ALPN-01 par le tunnel (on-demand, sans DNS) + demux agent (flux TLS brut vs HTTP au 1er octet) 2026-07-13 13:54:19 +02:00
nathaninline daefa8932c oai: cert Let's Encrypt via DNS-01 Cloudflare (phase 2) — certmagic + libdns/cloudflare, cle privee locale (/certs); jean oai cert <domaine> 2026-07-13 13:23:10 +02:00
nathaninline 28b6e33b2c oai: front TLS cote agent (phase 1) — termine le TLS localement + proxy vers llama /v1 (jean oai serve, cert auto-signe pour test) 2026-07-13 13:18:48 +02:00
nathaninline b818e253c2 web: endpoint OpenAI = adresse LAN detectee cote serveur (jamais le domaine du relais dans le tunnel) 2026-07-13 12:45:54 +02:00
nathaninline 9a93702313 web: panneau Acces OpenAI (endpoint /v1 + cle API masquee, gestion depuis le web)
Nouvel endpoint /api/apikey (GET etat + POST generate/set/clear -> restart).
Section sidebar affichant l'URL compatible OpenAI et la cle API masquee par
defaut (reveler/copier/generer/definir/retirer). Refactor config.go: helpers
genAPIKey/writeAPIKey/maskAPIKey partages CLI + web.
2026-07-13 12:39:37 +02:00
nathaninline d2e31ad6ee v0.2.21 : prefill = tokens réellement traités (prompt_n) + animation 3 points avant la première réponse 2026-07-10 11:57:32 +02:00
nathaninline e16c43715e v0.2.20 : corrige le tok/s de decode qui retombait à 0 en fin de génération (timings llama.cpp sur le chunk final sans choices, lus avant le garde) 2026-07-10 11:30:49 +02:00
nathaninline 18b8903603 doc : capture README en thème sombre 2026-07-10 10:47:53 +02:00
nathaninline 11dde9a2d5 doc : capture de l'interface web en haut du README 2026-07-10 10:44:44 +02:00
nathaninline acb08d3c6a v0.2.19 : preset actif de nouveau détecté (empreinte ignore les clés appareil MEM_MODE/CRAWL4AI_URL) + surbrillance bleue du preset actif 2026-07-10 09:49:06 +02:00
nathaninline 20dd09abc6 v0.2.18 : thèmes clair/sombre + refonte du panneau Mode agent + favicon/PWA Jean
- UI: système de thèmes sélectionnable (sombre par défaut, clair) — registre extensible
- UI: refonte propre du panneau Mode agent — Mémoire / Accès internet / Paramètres en cartes, liste des pages repliable
- UI: infobulles (?) à la place des pavés de texte, scrollbars natifs, suppression des touches de vert (palette bleu/blanc/gris)
- UI: favicon (coins arrondis) + icône PWA, nom d'app et titres « Jean »
- Mémoire et accès internet deviennent des sous-réglages du mode agent (aucun outil mem_*/web sans agent)
- Presets: le mode mémoire (MEM_MODE) et l'URL du serveur internet (CRAWL4AI_URL) sont conservés d'un preset à l'autre
2026-07-09 17:50:29 +02:00
nathaninline 07a6db88d1 doc : README — accès internet (Crawl4AI) + 3 modes de mémoire
Ajoute les fonctionnalités, les commandes `jean internet` / `jean memory`,
les clés config CRAWL4AI_URL / MEM_MODE et deux sections dédiées.
2026-07-08 11:10:11 +02:00
nathaninline c398cb85e6 v0.2.17 : accès internet (Crawl4AI) + 3 modes de mémoire
- accès web de l'IA via un serveur Crawl4AI configurable (outils
  web_search / web_open / web_read / web_grep), réglage CRAWL4AI_URL +
  toggle, actifs seulement si le mode agent et le serveur sont joignables.
  CLI `jean internet [on|off|status|url <url>]`.
- mémoire réglable en 3 modes indépendants du mode agent : off / sur
  demande / auto (proactive). CLI `jean memory [off|ondemand|always|status]`.
- fix : prompt et outils gouvernés par la même condition (plus de
  web_search tapé en bash quand le crawl est injoignable) ; consigne
  année de recherche durcie ; icône 🌐 des outils web dans l'UI.
2026-07-08 10:40:41 +02:00
nathaninline fbfb3effd7 v0.2.16 : support macOS expérimental (launchd) 2026-07-07 13:38:37 +02:00
nathaninline deb05f50ea macOS: support launchd (install/start/stop/logs) au lieu du code systemd hérité (#4) — non testé sur Mac. Isole le code Linux dans *_linux.go, ajoute *_darwin.go 2026-07-07 13:36:30 +02:00
nathaninline 2862a2f27a v0.2.15 : fix install symlink circulaire (#5) + indice dépendance Vulkan/SPIRV-Headers (#6) 2026-07-07 13:26:16 +02:00
nathaninline 2d4e91052b llamacpp: indice de dépendance adapté à la distro quand le build Vulkan échoue sur SPIRV-Headers manquant (fix #6) 2026-07-07 13:25:54 +02:00
nathaninline 357b814745 install: éviter le symlink circulaire si le binaire tourne déjà depuis /usr/local/bin/jean (fix #5) 2026-07-07 13:23:21 +02:00
nathaninline 5931bd72a6 v0.2.14 : PWA/UI mobile améliorée (plein écran standalone, gestion de l'encoche/safe-area, interface compacte en paysage, plus de zoom iOS à la saisie) + pastille d'état service (chargement/prêt) + gestion propre des erreurs de stream 2026-07-07 13:14:30 +02:00
nathaninline adcc6548f6 v0.2.13 : toggle limite d'appels d'outils + UI mémoire scalable (recherche/liste plafonnée) + modales natives (askConfirm/Prompt/Alert) + retouches CSS (crayon preset, badge mode agent) 2026-07-06 12:20:07 +02:00
nathaninline 6892aca506 UI : crayon edit preset calé dans le coin haut-droit + espace badge mode agent/flèche 2026-07-06 11:59:05 +02:00
nathaninline 5426772899 UI : modales natives au lieu de confirm()/prompt() du navigateur
Ajout d'un système de modale réutilisable askConfirm/askPrompt/askAlert
(Promise-based, Échap/clic-dehors = annuler, Entrée = valider) qui remplace
les 5 confirm()/prompt() natifs (auth, mode agent, switch preset, suppression,
compactage). _openAsk est polymorphe : accepte (message, opts) [UI] et l'objet
{title,msg,yes,no,placeholder} de e2e.js — sur ajean.link/server.html cette
fonction remplace le window.askConfirm du bootstrap boîte noire, donc doit
servir aussi les invites empreinte/appairage E2E.
2026-07-06 11:54:29 +02:00
nathaninline 102b700034 UI mémoire scalable : recherche + liste plafonnée + compteur
La liste des pages mémoire déroulait une barre géante quand elle grossit.
Désormais : compteur, champ de filtre (affiché au-delà de 50 pages), liste
scrollable (max-height 240px) et rendu plafonné par paliers de 50 ("voir
plus"). Rendu en DOM (échappement sûr) au lieu d'interpolation innerHTML.
2026-07-06 11:43:46 +02:00
nathaninline 5ef02672d2 mode agent : toggle web pour désactiver la limite d'appels d'outils (config TOOL_LIMIT)
La limite iter<8 (message [stop: trop d'appels d'outils]) est désormais
pilotée par TOOL_LIMIT dans config.env, exposée par un interrupteur sous
Mode agent. Activée par défaut ; désactivée => plafond quasi illimité
(l'anti-boucle sur appels répétés reste actif). Lu à chaque tour, pas de
restart nécessaire. Tunnelé tel quel via /api/e2e/req pour ajean.link.
2026-07-06 11:38:02 +02:00
nathaninline cc24074f69 i18n : descriptions d'outils + nudge passés en anglais (le français résiduel poussait le modèle à répondre en français même sur un 'hey') 2026-06-26 17:43:58 +02:00
nathaninline f9bceedebc v0.2.12 : mémoire (mem_search/read/add/edit) + outil edit + prompt agent court anti-stall qui cherche en mémoire avant toute tâche ; formulation clarifiée 2026-06-26 17:30:18 +02:00
nathaninline 0b03c0816e prompt agent : généralise la consigne de recherche mémoire (retire l'exemple météo trop spécifique) 2026-06-26 17:15:14 +02:00
nathaninline 2d6946af8b prompt agent : chercher en mémoire avant TOUTE tâche (how-to), même avec des spécifics (ville/nom) — fix 'météo pour X' qui improvisait 2026-06-26 17:08:32 +02:00
nathaninline c5526825ad prompt agent : insiste sur la gestion active de la mémoire (sauvegarde spontanée + recherche au rappel), stall vérifié à 0 2026-06-26 16:56:50 +02:00
nathaninline 7a145258d3 v0.2.11 : fix stall reasoning (prompt agent court) + outil edit + filet de sécurité nudge/drop_reasoning 2026-06-26 16:42:33 +02:00
nathaninline 4c8aafa898 v0.2.11 : mémoire (mem_search/read/add/edit) remplace les skills + outil edit (old/new) + run_shell renommé bash ; migration auto SKILLS->MEMORY 2026-06-26 15:59:24 +02:00
nathaninline d3a2f1c428 v0.2.10 : mode agent unifie (un seul toggle = shell + skills) + jeu de mot 'ajean' + refonte du header (pastille d'etat, preset, espacements) 2026-06-26 12:09:43 +02:00
nathaninline 175bbd34d9 v0.2.9 : UI web — reasoning/appels d'outil se replient au fil de la chaine + barre de contexte integree
- bulles reasoning/outil repliables (clic), repli fluide en diagonale (height+width animes en JS)
- chainage : chaque etape se replie des que la suivante demarre, la reponse finale replie la derniere
- compteur de tokens sur chaque bulle (reasoning : gen tok/s ; outil : ~taille reponse)
- bulles d'outil au meme design pointille transparent que le reasoning
- contexte : comptage exact via usage.prompt_tokens (system prompt inclus meme en cache KV)
- barre de contexte redessinee, integree au composer de saisie
2026-06-26 10:58:27 +02:00
nathaninline f632b7b42c v0.2.8 : l'IA garde la trace de ses appels d'outils entre les tours
Les tours d'outils (lecture de skill, commandes shell) ne survivaient
qu'a l'interieur de la boucle agentique d'un seul tour : seul le texte
final etait persiste. Resultat : a chaque nouveau message le modele
n'avait aucune trace d'avoir deja lu un skill, donc il le re-appelait
en boucle et confabulait des chemins/resultats disparus du contexte.

runChat retourne desormais les messages intermediaires (assistant
tool_calls + resultats tool). Le CLI les insere dans l'historique avant
la reponse finale ; le serveur web les emet en fin de flux SSE pour que
le client (stateless) les stocke. Couvre aussi ajean.link via E2E
(handleE2EChat -> runChatStream).
2026-06-25 21:26:20 +02:00
nathaninline a453229642 build: metadonnees Windows (versioninfo) + workflow release CI
Embarque editeur/version/description dans le .exe via goversioninfo (.syso)
pour reduire les faux positifs antivirus sur le binaire Go. Ajoute un
workflow GitHub Actions qui build les 6 cibles et publie la release sur tag.
2026-06-25 17:54:54 +02:00
nathaninline 76f644e449 v0.2.7 : jean link sûr — 'start' + aide, ne confond plus un mot avec un token
- 'jean link start' démarre le service (sous-commande dédiée)
- 'jean link' seul affiche l'aide des sous-commandes (ne démarre plus)
- un argument n'est traité comme token que s'il commence par 'jl_' ; sinon
  erreur + aide, SANS écraser le token enregistré
  (corrige le bug où 'jean link start'/typo écrasait le token -> 401 -> injoignable)
- message 'déjà en cours' au lieu d'un faux 'starté'
2026-06-25 13:55:47 +02:00
nathaninline e516ca7301 jean link: message 'déjà en cours' au lieu d'un faux 'starté' si le service tourne 2026-06-25 13:44:38 +02:00
nathaninline 97fbed8de2 v0.2.6 : heartbeat SSE anti-coupure (agents) + jean link en service (start/stop/restart/code)
- fix "TypeError: Load failed" en mode agent : heartbeat SSE (: ping /15s)
  pour que les longs silences (exécution d'outil) ne soient pas coupés en transit
- jean link devient le pilote du service (comme jean) ; worker = jean link serve
- jean link code : codes d'appairage à la demande, usage unique, TTL 10 min
  (store fichier haché, partagé entre le CLI et le worker)
- e2eauth.go ajouté au suivi ; README + aide mis à jour
2026-06-25 13:27:57 +02:00
nathaninline 949e261538 v0.2.5 : build llama.cpp 100% automatique et propre sur Windows et Linux
Windows : `jean llamacpp install` part de zéro et provisionne toute la
chaîne sans intervention :
- install Windows ajoute jean au PATH (copie dans %JEAN_HOME%\bin)
- auto-install des outils manquants via winget (cmake, git, ninja) +
  refresh du PATH du process depuis le registre
- compilateur MSVC Build Tools auto-installé ; générateur Visual Studio
  (localise MSVC sans Developer Prompt) ; binaire multi-config (Release\)
- détection GPU + auto-install du CUDA Toolkit quand une carte NVIDIA est
  vue sans nvcc ; CUDA_PATH/CUDA_PATH_Vx_y injectés pour MSBuild ; DLL
  runtime CUDA (bin + bin\x64) ajoutées au PATH de llama-server
- console UTF-8 + VT pour un affichage correct

Multi-OS :
- auto-install des outils aussi sous Unix (apt/dnf/pacman/brew)
- désactive l'UI web embarquée de llama-server (LLAMA_BUILD_UI=OFF +
  LLAMA_USE_PREBUILT_UI=OFF) : supprime la dépendance npm/HuggingFace qui
  cassait le build ; jean fournit sa propre UI
- build CUDA allégé (sans FA_ALL_QUANTS) : bien plus rapide
- sortie de build propre : configure/​build passent par un runner qui
  écrit le détail dans un log fichier et n'affiche qu'un spinner animé +
  le compteur de fichiers (formats MSBuild et Make/Ninja) + les erreurs
  réelles ; tests unitaires du filtre

Validé en exécution réelle : Windows (GTX 1650 Ti, sm_75) et serveur
Linux multi-GPU (sm_75;120) jusqu'au serveur GPU opérationnel.
2026-06-24 19:29:55 +02:00
nathaninline 747032cbf6 docs(README): retire l'instruction de config relais (privee) du endpoint /oai
Le relais est la partie hebergee/privee d'ajean.link : l'utilisateur n'y a
pas la main. Le README ne documente plus que la variable cote agent
(JEAN_LINK_ALLOW_OAI) et presente l'ouverture cote relais comme geree par
le service.
2026-06-24 14:39:30 +02:00
nathaninline 4e49cff0fe v0.2.4 : authentification mutuelle + anti-rejeu (boite noire 100%) 2026-06-24 13:32:30 +02:00
nathaninline d2b99bd6f4 Boite noire 100% : canal authentifie (identite utilisateur appairee) + anti-rejeu
- e2eauth.go : identites utilisateur appairees (.authorized_users), code
  d'appairage hors-bande (log jean link), canal authentifie
  K=SHA256(ECDH(uPriv,agentPriv)||authchan), AAD upub|ts, anti-rejeu.
- e2e.go : handleE2EChat/Req passent par e2eAuthOpenReq (plus de seal anonyme).
- link.go : route /api/e2e/pair + affiche le code d'appairage.
2026-06-24 13:26:13 +02:00
nathaninline 141512e9cb v0.2.3 : boite noire zero exception (controle serveur en E2E) 2026-06-24 12:56:39 +02:00
nathaninline 0e3951e401 Boîte noire « zéro exception » : proxy de contrôle chiffré E2E
- e2e.go : handleE2EReq, proxy de contrôle chiffré de bout en bout. Même
  enveloppe que le chat ; le clair décrit {method,path,body}, redispatché
  dans le handler web local authentifié (httptest), réponse {status,body}
  rechiffrée. Garde-fous : chemins /api/* hors /api/e2e, recover().
- link.go : le tunnel refuse tout /api/* en clair ; seuls /api/e2e/chat et
  /api/e2e/req passent. Le relais ne voit plus jamais de clair.
2026-06-24 12:53:31 +02:00
nathaninline 27606befe2 docs: README a jour pour la securite v0.2.2 (boite noire E2E, relais aveugle, /oai opt-in) 2026-06-23 19:55:24 +02:00
nathaninline a8a016c1b8 v0.2.2 : mise a jour de securite — boite noire E2E & relais aveugle
- Chiffrement E2E du chat navigateur<->agent (e2e.go) : le relais ne voit
  que de l'opaque, ancre par empreinte X25519 confirmee au `jean link`.
- `jean link` refuse desormais tout chat en clair via le tunnel (403) ;
  seul /api/e2e/chat porte du contenu. Endpoint OpenAI clair desactive par
  defaut (JEAN_LINK_ALLOW_OAI=1 pour le reactiver).
- Le portail web n'est plus servi par le relais : code livre par une origine
  hors de son controle, le relais devient un pur tube aveugle.
2026-06-23 19:45:17 +02:00
nathaninline 65b2ada540 Add files via upload 2026-06-09 10:06:56 +02:00
nathaninline 44637ac47f Add files via upload 2026-06-09 09:36:10 +02:00
nathaninline ca0a315260 Correction Windows 2026-06-09 09:35:07 +02:00
nathaninline a40c50c400 Update README.md 2026-06-08 15:54:12 +02:00
nathaninline 63cd01a27e Update README.md 2026-06-08 15:53:51 +02:00
nathaninline 5841e0f24c Add files via upload 2026-06-08 12:59:29 +02:00
nathaninline 46fab2edf4 Delete .gitattributes 2026-06-08 12:59:06 +02:00
nathaninline baeaeda20e Delete .gitignore 2026-06-08 12:58:55 +02:00
nathaninline 506934124e Add files via upload 2026-06-08 12:57:42 +02:00
nathaninline 28afbb7223 Create index.html 2026-06-08 12:57:24 +02:00
nathaninline 6802962120 Add files via upload 2026-06-08 12:54:49 +02:00
nathaninline 5d35ff0484 Initial commit 2026-06-08 12:54:03 +02:00