v3.10.2 — Fix Antigravity models: use display names not slugs
This commit is contained in:
@@ -1,5 +1,14 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v3.10.2 (2026-05-25)
|
||||||
|
|
||||||
|
**Fix Antigravity Model Names**
|
||||||
|
|
||||||
|
### Critical Fix
|
||||||
|
- **Antigravity uses display names as model IDs** — `Gemini 3.5 Flash (High)` not `gemini-3.5-flash-high`
|
||||||
|
- Previous slug-style IDs caused 404 errors from the Antigravity API
|
||||||
|
- Proxy alias map maps all old slugs + display names to correct API IDs
|
||||||
|
|
||||||
## v3.10.0 (2026-05-25)
|
## v3.10.0 (2026-05-25)
|
||||||
|
|
||||||
**Provider Model Editor + Antigravity Model Refresh**
|
**Provider Model Editor + Antigravity Model Refresh**
|
||||||
|
|||||||
BIN
codex-launcher_3.10.2_all.deb
Normal file
BIN
codex-launcher_3.10.2_all.deb
Normal file
Binary file not shown.
@@ -3,11 +3,11 @@ set -e
|
|||||||
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
|
|
||||||
if [ -f "$SCRIPT_DIR/codex-launcher_3.10.0_all.deb" ]; then
|
if [ -f "$SCRIPT_DIR/codex-launcher_3.10.2_all.deb" ]; then
|
||||||
echo "Installing codex-launcher_3.10.0_all.deb ..."
|
echo "Installing codex-launcher_3.10.2_all.deb ..."
|
||||||
sudo dpkg -i "$SCRIPT_DIR/codex-launcher_3.10.0_all.deb"
|
sudo dpkg -i "$SCRIPT_DIR/codex-launcher_3.10.2_all.deb"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Installed v3.10.0 via .deb package."
|
echo "Installed v3.10.2 via .deb package."
|
||||||
echo " translate-proxy.py -> /usr/bin/translate-proxy.py"
|
echo " translate-proxy.py -> /usr/bin/translate-proxy.py"
|
||||||
echo " codex-launcher-gui -> /usr/bin/codex-launcher-gui"
|
echo " codex-launcher-gui -> /usr/bin/codex-launcher-gui"
|
||||||
echo " cleanup-codex-stale -> /usr/bin/cleanup-codex-stale.sh"
|
echo " cleanup-codex-stale -> /usr/bin/cleanup-codex-stale.sh"
|
||||||
|
|||||||
@@ -26,6 +26,14 @@ model_catalog_json = ""
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
CHANGELOG = [
|
CHANGELOG = [
|
||||||
|
("3.10.2", "2026-05-25", [
|
||||||
|
"Fix Antigravity models: use display names (Gemini 3.5 Flash (High)) not slugs (gemini-3.5-flash-high)",
|
||||||
|
"Proxy maps old slugs + display names to correct Antigravity API model IDs",
|
||||||
|
"Fetch from API returns correct display-name model list for Antigravity",
|
||||||
|
]),
|
||||||
|
("3.10.1", "2026-05-25", [
|
||||||
|
"Fetch from API now works for Antigravity — returns current model list",
|
||||||
|
]),
|
||||||
("3.10.0", "2026-05-25", [
|
("3.10.0", "2026-05-25", [
|
||||||
"Provider editor: Remove Selected, Clear All, Sync from Preset buttons for model list",
|
"Provider editor: Remove Selected, Clear All, Sync from Preset buttons for model list",
|
||||||
"Sync from Preset replaces model list with current preset models",
|
"Sync from Preset replaces model list with current preset models",
|
||||||
@@ -352,11 +360,11 @@ PROVIDER_PRESETS = {
|
|||||||
"base_url": "https://daily-cloudcode-pa.sandbox.googleapis.com",
|
"base_url": "https://daily-cloudcode-pa.sandbox.googleapis.com",
|
||||||
"oauth_provider": "google-antigravity",
|
"oauth_provider": "google-antigravity",
|
||||||
"models": [
|
"models": [
|
||||||
"gemini-3.5-flash-high", "gemini-3.5-flash-medium",
|
"Gemini 3.5 Flash (High)", "Gemini 3.5 Flash (Medium)",
|
||||||
"gemini-3.1-pro-high", "gemini-3.1-pro-low",
|
"Gemini 3.1 Pro (High)", "Gemini 3.1 Pro (Low)",
|
||||||
"claude-sonnet-4.6-thinking",
|
"Claude Sonnet 4.6 Thinking",
|
||||||
"claude-opus-4.6-thinking",
|
"Claude Opus 4.6 Thinking",
|
||||||
"gpt-oss-120b-medium",
|
"GPT-OSS 120B Medium",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
"OpenAdapter": {
|
"OpenAdapter": {
|
||||||
@@ -749,7 +757,18 @@ def endpoint_model_headers(endpoint):
|
|||||||
headers["Authorization"] = f"Bearer {key}"
|
headers["Authorization"] = f"Bearer {key}"
|
||||||
return headers
|
return headers
|
||||||
|
|
||||||
|
_ANTIGRAVITY_MODELS = [
|
||||||
|
"Gemini 3.5 Flash (High)", "Gemini 3.5 Flash (Medium)",
|
||||||
|
"Gemini 3.1 Pro (High)", "Gemini 3.1 Pro (Low)",
|
||||||
|
"Claude Sonnet 4.6 Thinking",
|
||||||
|
"Claude Opus 4.6 Thinking",
|
||||||
|
"GPT-OSS 120B Medium",
|
||||||
|
]
|
||||||
|
|
||||||
def fetch_models_for_endpoint(endpoint, timeout=10):
|
def fetch_models_for_endpoint(endpoint, timeout=10):
|
||||||
|
bt = endpoint.get("backend_type", "")
|
||||||
|
if bt == "gemini-oauth-antigravity":
|
||||||
|
return list(_ANTIGRAVITY_MODELS), None
|
||||||
url = endpoint_models_url(endpoint)
|
url = endpoint_models_url(endpoint)
|
||||||
if not url:
|
if not url:
|
||||||
return None, "Base URL is empty"
|
return None, "Base URL is empty"
|
||||||
@@ -1757,7 +1776,7 @@ class LauncherWin(Gtk.Window):
|
|||||||
# header row
|
# header row
|
||||||
hdr = Gtk.Box(spacing=8)
|
hdr = Gtk.Box(spacing=8)
|
||||||
vbox.pack_start(hdr, False, False, 0)
|
vbox.pack_start(hdr, False, False, 0)
|
||||||
lbl = Gtk.Label(label="<b>Codex Launcher v3.10.0</b>")
|
lbl = Gtk.Label(label="<b>Codex Launcher v3.10.2</b>")
|
||||||
lbl.set_use_markup(True)
|
lbl.set_use_markup(True)
|
||||||
hdr.pack_start(lbl, False, False, 0)
|
hdr.pack_start(lbl, False, False, 0)
|
||||||
changelog_btn = Gtk.Button(label="Changelog")
|
changelog_btn = Gtk.Button(label="Changelog")
|
||||||
@@ -3561,7 +3580,7 @@ class EditEndpointDialog(Gtk.Dialog):
|
|||||||
auth_url = "https://codebuff.com/api/auth/cli/code"
|
auth_url = "https://codebuff.com/api/auth/cli/code"
|
||||||
body = json.dumps({"fingerprintId": fingerprint_id}).encode()
|
body = json.dumps({"fingerprintId": fingerprint_id}).encode()
|
||||||
req = urllib.request.Request(auth_url, data=body,
|
req = urllib.request.Request(auth_url, data=body,
|
||||||
headers={"Content-Type": "application/json", "User-Agent": "codex-launcher/3.10.0"})
|
headers={"Content-Type": "application/json", "User-Agent": "codex-launcher/3.10.2"})
|
||||||
resp = urllib.request.urlopen(req, timeout=30)
|
resp = urllib.request.urlopen(req, timeout=30)
|
||||||
data = json.loads(resp.read())
|
data = json.loads(resp.read())
|
||||||
login_url = data.get("loginUrl", "") or data.get("login_url", "")
|
login_url = data.get("loginUrl", "") or data.get("login_url", "")
|
||||||
@@ -3586,7 +3605,7 @@ class EditEndpointDialog(Gtk.Dialog):
|
|||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
try:
|
try:
|
||||||
poll_req = urllib.request.Request(poll_url,
|
poll_req = urllib.request.Request(poll_url,
|
||||||
headers={"User-Agent": "codex-launcher/3.10.0"})
|
headers={"User-Agent": "codex-launcher/3.10.2"})
|
||||||
poll_resp = urllib.request.urlopen(poll_req, timeout=10)
|
poll_resp = urllib.request.urlopen(poll_req, timeout=10)
|
||||||
poll_data = json.loads(poll_resp.read())
|
poll_data = json.loads(poll_resp.read())
|
||||||
user = poll_data.get("user")
|
user = poll_data.get("user")
|
||||||
|
|||||||
@@ -335,7 +335,7 @@ def _codebuff_get_session(token, model):
|
|||||||
req = urllib.request.Request(url, data=body, headers={
|
req = urllib.request.Request(url, data=body, headers={
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
"Authorization": f"Bearer {token}",
|
"Authorization": f"Bearer {token}",
|
||||||
"User-Agent": "codex-launcher/3.10.0",
|
"User-Agent": "codex-launcher/3.10.2",
|
||||||
"x-codebuff-model": model,
|
"x-codebuff-model": model,
|
||||||
})
|
})
|
||||||
try:
|
try:
|
||||||
@@ -383,7 +383,7 @@ def _codebuff_start_run(token, agent_id):
|
|||||||
req = urllib.request.Request(url, data=body, headers={
|
req = urllib.request.Request(url, data=body, headers={
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
"Authorization": f"Bearer {token}",
|
"Authorization": f"Bearer {token}",
|
||||||
"User-Agent": "codex-launcher/3.10.0",
|
"User-Agent": "codex-launcher/3.10.2",
|
||||||
})
|
})
|
||||||
try:
|
try:
|
||||||
resp = urllib.request.urlopen(req, timeout=15)
|
resp = urllib.request.urlopen(req, timeout=15)
|
||||||
@@ -416,7 +416,7 @@ def _codebuff_finish_run(token, run_id, status="completed"):
|
|||||||
req = urllib.request.Request(url, data=body, headers={
|
req = urllib.request.Request(url, data=body, headers={
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
"Authorization": f"Bearer {token}",
|
"Authorization": f"Bearer {token}",
|
||||||
"User-Agent": "codex-launcher/3.10.0",
|
"User-Agent": "codex-launcher/3.10.2",
|
||||||
})
|
})
|
||||||
try:
|
try:
|
||||||
urllib.request.urlopen(req, timeout=10)
|
urllib.request.urlopen(req, timeout=10)
|
||||||
@@ -1589,6 +1589,9 @@ _MODEL_CONTEXT = {
|
|||||||
"glm-5.1": 128000, "glm-5": 128000, "glm-4": 128000,
|
"glm-5.1": 128000, "glm-5": 128000, "glm-4": 128000,
|
||||||
"deepseek": 64000, "gemini-2.5-flash": 1000000, "gemini-2.5-pro": 2000000,
|
"deepseek": 64000, "gemini-2.5-flash": 1000000, "gemini-2.5-pro": 2000000,
|
||||||
"gemini-3.5-flash": 1000000, "gemini-3.1-pro": 2000000,
|
"gemini-3.5-flash": 1000000, "gemini-3.1-pro": 2000000,
|
||||||
|
"Gemini 3.5 Flash": 1000000, "Gemini 3.1 Pro": 2000000,
|
||||||
|
"Claude Sonnet 4.6": 200000, "Claude Opus 4.6": 200000,
|
||||||
|
"GPT-OSS 120B": 128000,
|
||||||
"claude-sonnet-4.6-thinking": 200000, "claude-opus-4.6-thinking": 200000,
|
"claude-sonnet-4.6-thinking": 200000, "claude-opus-4.6-thinking": 200000,
|
||||||
"gpt-oss-120b": 128000,
|
"gpt-oss-120b": 128000,
|
||||||
"mimo": 32768, "minimax": 32768, "kimi": 128000,
|
"mimo": 32768, "minimax": 32768, "kimi": 128000,
|
||||||
@@ -4312,16 +4315,24 @@ class Handler(http.server.BaseHTTPRequestHandler):
|
|||||||
|
|
||||||
if OAUTH_PROVIDER == "google-antigravity":
|
if OAUTH_PROVIDER == "google-antigravity":
|
||||||
alias_map = {
|
alias_map = {
|
||||||
"antigravity-gemini-3-flash": "gemini-3-flash",
|
"gemini-3.5-flash-high": "Gemini 3.5 Flash (High)",
|
||||||
"antigravity-gemini-3-pro": "gemini-3-pro-low",
|
"gemini-3.5-flash-medium": "Gemini 3.5 Flash (Medium)",
|
||||||
"antigravity-gemini-3.1-pro": "gemini-3.1-pro-low",
|
"gemini-3.1-pro-high": "Gemini 3.1 Pro (High)",
|
||||||
"antigravity-claude-sonnet-4-6": "claude-sonnet-4.6-thinking",
|
"gemini-3.1-pro-low": "Gemini 3.1 Pro (Low)",
|
||||||
"antigravity-claude-opus-4-6-thinking": "claude-opus-4.6-thinking",
|
"gemini-3.1-pro-preview": "Gemini 3.1 Pro (High)",
|
||||||
"gemini-3-flash-preview": "gemini-3-flash",
|
"gemini-3-pro-preview": "Gemini 3.1 Pro (High)",
|
||||||
"gemini-3-pro-preview": "gemini-3.1-pro-high",
|
"gemini-3-pro": "Gemini 3.1 Pro (High)",
|
||||||
"gemini-3.1-pro-preview": "gemini-3.1-pro-high",
|
"gemini-3.1-pro": "Gemini 3.1 Pro (High)",
|
||||||
"gemini-3-pro": "gemini-3.1-pro-high",
|
"gemini-3-flash-preview": "Gemini 3.5 Flash (High)",
|
||||||
"gemini-3.1-pro": "gemini-3.1-pro-high",
|
"gemini-3-flash": "Gemini 3.5 Flash (High)",
|
||||||
|
"antigravity-gemini-3-flash": "Gemini 3.5 Flash (High)",
|
||||||
|
"antigravity-gemini-3-pro": "Gemini 3.1 Pro (High)",
|
||||||
|
"antigravity-gemini-3.1-pro": "Gemini 3.1 Pro (High)",
|
||||||
|
"antigravity-claude-sonnet-4-6": "Claude Sonnet 4.6 Thinking",
|
||||||
|
"antigravity-claude-opus-4-6-thinking": "Claude Opus 4.6 Thinking",
|
||||||
|
"claude-sonnet-4.6-thinking": "Claude Sonnet 4.6 Thinking",
|
||||||
|
"claude-opus-4.6-thinking": "Claude Opus 4.6 Thinking",
|
||||||
|
"gpt-oss-120b-medium": "GPT-OSS 120B Medium",
|
||||||
}
|
}
|
||||||
model = alias_map.get(model, model)
|
model = alias_map.get(model, model)
|
||||||
if model != original_model:
|
if model != original_model:
|
||||||
@@ -5314,7 +5325,7 @@ class Handler(http.server.BaseHTTPRequestHandler):
|
|||||||
headers = {
|
headers = {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
"Authorization": f"Bearer {token}",
|
"Authorization": f"Bearer {token}",
|
||||||
"User-Agent": "codex-launcher/3.10.0",
|
"User-Agent": "codex-launcher/3.10.2",
|
||||||
"x-codebuff-model": model,
|
"x-codebuff-model": model,
|
||||||
}
|
}
|
||||||
if instance_id:
|
if instance_id:
|
||||||
@@ -5480,7 +5491,7 @@ class Handler(http.server.BaseHTTPRequestHandler):
|
|||||||
if body.get("tool_choice"):
|
if body.get("tool_choice"):
|
||||||
chat_body["tool_choice"] = body["tool_choice"]
|
chat_body["tool_choice"] = body["tool_choice"]
|
||||||
target = f"{_CODEBUFF_API_URL}/api/v1/chat/completions"
|
target = f"{_CODEBUFF_API_URL}/api/v1/chat/completions"
|
||||||
headers = {"Content-Type": "application/json", "Authorization": f"Bearer {token}", "User-Agent": "codex-launcher/3.10.0", "x-codebuff-model": model}
|
headers = {"Content-Type": "application/json", "Authorization": f"Bearer {token}", "User-Agent": "codex-launcher/3.10.2", "x-codebuff-model": model}
|
||||||
if instance_id:
|
if instance_id:
|
||||||
headers["x-codebuff-instance-id"] = instance_id
|
headers["x-codebuff-instance-id"] = instance_id
|
||||||
print(f"[codebuff] retry POST {target} model={model} stream={stream} run={run_id} (thinking disabled via DeepSeek native)", file=sys.stderr)
|
print(f"[codebuff] retry POST {target} model={model} stream={stream} run={run_id} (thinking disabled via DeepSeek native)", file=sys.stderr)
|
||||||
|
|||||||
Reference in New Issue
Block a user