Ajoute jean link : acces distant via le relais ajean.link

- nouvelle commande `jean link <token>` (link.go) : connexion sortante
  WebSocket + yamux vers le relais, sert l'UI web Jean ET l'endpoint
  compatible OpenAI (/v1) a travers le tunnel, avec injection des cles
  locales, keepalive et reconnexion automatique.
- web.go : extraction de newWebMux() pour reutiliser le routeur HTTP
  cote `jean link` sans repasser par un ecouteur TCP local.
- ui/index.html : base d'URL relative (API_BASE) + script marked relatif.
- main.go : cablage de la commande `link` + aide.
- README : section acces distant (ajean.link) + commande link.
- .gitignore : secrets runtime (.web_key/.link_token/.link_machine).

Inclut aussi les evolutions en cours du coeur de jean (llm.go, skills.go,
tools.go, chat.go).
This commit is contained in:
nathaninline committed 2026-06-20 20:11:32 +02:00
1 parent 6ea2e91810
commit e606206d90
12 files changed
+724 -91

No files matched your search

+22 -1
View File
@@ -23,6 +23,7 @@ Faire tourner llama.cpp comme un vrai service, ça veut dire d'habitude : trouve
- **Intégration systemd** — `jean install` écrit l'unité, une règle sudoers `systemctl` sans mot de passe, et les dossiers de données
- **Interface web** (`jean web`) — chat, changement de modèle/preset, activation des skills & tools
- **Chat terminal** (`jean chat`) — réponses en streaming
- **Accès distant** (`jean link`) — connecte ce serveur à [ajean.link](https://ajean.link) par une connexion **sortante** (aucun port à ouvrir, marche même en CGNAT) : retrouve l'UI web et un endpoint **compatible OpenAI** depuis n'importe où
- **Presets** (`jean switch`) — garde plusieurs profils `config.env` et bascule entre eux
- **Protection par clé API** (`jean set-api-key`) — auth Bearer pour exposer le serveur publiquement ; la clé est stockée à part pour survivre aux changements de preset
- **Benchmark** (`jean bench`) — tok/s prefill/decode honnêtes avec un corpus varié
@@ -112,9 +113,13 @@ Interaction :
chat [system-prompt] chat terminal streamé
web [PORT] interface web (défaut :8090)
Accès distant (ajean.link) :
link <token> connecte ce Jean au relais (accès web + API OpenAI depuis partout)
link status | logout état du lien / oublier le token
Outils côté LLM :
skills [on|off|list] laisse le modèle lire SKILLS/<nom>/SKILL.md
tools [on|off|status] active run_shell (le modèle exécute des commandes shell)
machine [on|off|status] active l'accès machine (le modèle dispose d'un shell complet sur le serveur)
Backend (llama.cpp) :
llamacpp install clone + compile llama.cpp (détecte CUDA/ROCm/Metal/CPU), règle BIN
@@ -190,6 +195,22 @@ La clé est stockée dans `$JEAN_HOME/.web_key`, distincte de `.api_key` (pilota
> ⚠️ La clé voyage en clair en HTTP. Pour une exposition publique, place Jean derrière un reverse-proxy HTTPS (Caddy, nginx) ou un tunnel (Tailscale, Cloudflare Tunnel).
### Accès distant via ajean.link
Plutôt que d'exposer un port, `jean link` ouvre une connexion **sortante** vers le relais [ajean.link](https://ajean.link) : ton serveur reste injoignable depuis l'extérieur, mais tu y accèdes quand même depuis n'importe où — idéal derrière une box ou en CGNAT.
```bash
jean web # l'UI doit tourner localement
jean link <token> # token fourni sur ajean.link
```
Une fois lié, tu retrouves depuis le portail :
- l'**interface web** de ton serveur, à distance ;
- un **endpoint compatible OpenAI** (`https://ajean.link/oai/<machine>/v1`, clé = ton token) pour brancher n'importe quel outil (OpenCode, etc.) ;
- la gestion de **plusieurs serveurs** et d'**agents** depuis un tableau de bord.
C'est un service optionnel et payant ; tout le reste de Jean est et restera open source et gratuit.
### Variables d'environnement
| Variable | Signification | Défaut |