Endpoint compatible OpenAI?Branche n'importe quel client compatible OpenAI (OpenCode, Continue, Cursor…) sur cette URL. Modèle : jean. Si une clé est définie, le client doit envoyer Authorization: Bearer <clé>.
-
-
-
+
+
🌍 public (ajean.link) — accessible partout, TLS de bout en bout jusqu'à ce serveur
+
+
+
+
+
+
+
🏠 local (réseau)
+
+
+
+
modèle : jean
Clé API?Protège l'endpoint des complétions (llama-server). Indispensable avant d'exposer le serveur sur internet. Modifier la clé redémarre le service.
@@ -762,6 +772,14 @@ function renderApiKey(d){
// l'accès OpenAI reste TOUJOURS l'adresse locale de la machine.
const host = d.host || location.hostname;
document.getElementById('oai-url').value = 'http://'+host+':'+d.port+'/v1';
+ // Endpoint PUBLIC (ajean.link) : affiché seulement si l'accès public est activé.
+ const pubWrap = document.getElementById('oai-public-wrap');
+ if(d.oai_public && d.machine){
+ document.getElementById('oai-public-url').value = 'https://'+d.machine+'.oai.ajean.link/v1';
+ pubWrap.style.display = '';
+ } else {
+ pubWrap.style.display = 'none';
+ }
const inp=document.getElementById('oai-key');
if(!d.set){ inp.value='(aucune clé — serveur ouvert)'; inp.style.opacity=.6; }
else { inp.style.opacity=1; inp.value = OAI_REVEAL ? OAI_KEY : d.masked; }
diff --git a/web.go b/web.go
index eefe73a..41daa65 100644
--- a/web.go
+++ b/web.go
@@ -548,6 +548,10 @@ func handleAPIKey(w http.ResponseWriter, r *http.Request) {
"masked": maskAPIKey(k),
"port": LLMPort(),
"host": localIP(),
+ // Accès OpenAI PUBLIC via ajean.link (passthrough SNI, VPS aveugle) : si
+ // activé, l'URL publique est https://.oai.ajean.link/v1.
+ "oai_public": os.Getenv("JEAN_LINK_ALLOW_OAI") == "1",
+ "machine": machineID(),
})
}