- '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é'
- 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
- 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.
- 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.
- 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).