Commit Graph
118 Commits
Author SHA1 Message Date
nathaninline 58b59da823 v0.4.8 : gestion du backend llama.cpp depuis l'interface web (statut, verification des maj, install / update / recompilation avec logs en direct) 2026-07-22 17:59:12 +02:00
nathaninline 7ac571974f gestion du backend llama.cpp depuis l'UI web : statut (commit, retard, binaire, accelerateur detecte), verification des maj (git fetch), install / update / recompilation en job asynchrone avec phases, compteur de fichiers compiles et logs de build streames (poll /api/llamacpp/job) ; le service est arrete pendant le build puis relance, BIN repointe automatiquement 2026-07-22 13:34:56 +02:00
nathaninline 29f249be09 release CI : generer SHA256SUMS dans le workflow (jean update le verifie depuis v0.4.6) - evite le desaccord binaires CI / sommes manuelles qui a casse jean update sur v0.4.7 2026-07-22 12:37:57 +02:00
nathaninline 6bfa554edf v0.4.7 : detection et reparation auto de l'integration Visual Studio de CUDA (fix 'No CUDA toolset found' au build llama.cpp Windows, issue #10) 2026-07-22 12:26:03 +02:00
nathaninline 4fea700edc build CUDA Windows : detection + reparation de l'integration Visual Studio de CUDA manquante (erreur cryptique 'No CUDA toolset found', issue #10) - verif avant cmake via vswhere, copie auto des MSBuildExtensions du toolkit si possible, sinon message clair avec les 2 solutions ; filet dans hintMissingBuildDep 2026-07-22 12:24:33 +02:00
nathaninline 48c3e807be v0.4.6 : correctifs de la revue de code (reset/epoch, persistance du message user, cle jamais en URL, SHA256SUMS verifie par jean update, permissions preservees par edit, port conflict Windows) 2026-07-22 11:59:54 +02:00
nathaninline 02d164899e fix revue de code : reset pendant generation (epoch guard, plus de messages fantomes), message user persiste des l'envoi, cle de pilotage refusee en query string (fuite logs/historique), verif SHA256SUMS dans jean update, edit preserve les permissions du fichier, conflit de port gere sous Windows (netstat/taskkill), /api/update/apply renvoie 500 en echec 2026-07-22 11:57:56 +02:00
nathaninline cd570c5c5e fix theme doux sombre : accepter 'soft-dark' dans la whitelist /api/prefs (le theme sautait au refresh, ecrase par la pref serveur) 2026-07-22 11:32:37 +02:00
nathaninline 29efc82420 v0.4.5 : theme doux sombre, fix prompt systeme (persiste cote serveur), rangement complet du projet (cmd/+internal/, ui/src/, CI, tests e2eauth) 2026-07-22 11:26:39 +02:00
nathaninline 274dfbb516 UI: nouveau theme 'doux sombre' (soft-dark) - Lexend + palette chaude sur fond sombre, demande utilisateurs 2026-07-22 11:23:00 +02:00
nathaninline 1d2dba6501 fix: le prompt systeme de l'UI marchait dans le vide depuis la conversation serveur (v0.4.x) - il est desormais persiste cote serveur (/api/sysprompt, JEAN_HOME/sysprompt.txt, partage entre appareils) et injecte a chaque tour de generation (fusionne avec le preambule agent par InjectSkills) 2026-07-22 11:17:07 +02:00
nathaninline d5e0606dcc UI: assemblage via tools/assemble-ui (Go, multiplateforme) branche sur go generate - remplace ui/assemble.ps1 2026-07-22 11:06:19 +02:00
nathaninline b4b30cd47a Go: decoupe des 3 gros fichiers - web_server (mux/cmd) + web_api (handlers REST) + web_chat (SSE), backend_llamacpp (commandes) + backend_build (machinerie cmake), chat_internet (client crawl) + chat_internet_tools (outils du modele) ; deplacement pur, zero changement de code 2026-07-22 11:05:02 +02:00
nathaninline 76f0d963f9 CI GitHub Actions (build+vet+gofmt+tests+cross-compile sur push ; release 6 cibles auto sur tag v*) + tests relay_e2eauth (anti-rejeu, lockout appairage, normalisation code) 2026-07-22 11:03:28 +02:00
nathaninline 725a8161ce UI: retrait du doublon openBenchModal/closeBenchModal (07-models.js) 2026-07-22 11:02:14 +02:00
nathaninline 392f85ec3b gofmt -w sur les 6 fichiers non conformes (alignements de champs/maps uniquement) 2026-07-22 11:01:55 +02:00
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