diff --git a/codex-launcher_3.10.4_all.deb b/codex-launcher_3.10.4_all.deb
deleted file mode 100644
index e6982ad..0000000
Binary files a/codex-launcher_3.10.4_all.deb and /dev/null differ
diff --git a/codex-launcher_3.10.5_all.deb b/codex-launcher_3.10.5_all.deb
new file mode 100644
index 0000000..2fdab89
Binary files /dev/null and b/codex-launcher_3.10.5_all.deb differ
diff --git a/install.sh b/install.sh
index 4b6631a..11a2d27 100755
--- a/install.sh
+++ b/install.sh
@@ -3,11 +3,11 @@ set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
-if [ -f "$SCRIPT_DIR/codex-launcher_3.10.4_all.deb" ]; then
- echo "Installing codex-launcher_3.10.4_all.deb ..."
- sudo dpkg -i "$SCRIPT_DIR/codex-launcher_3.10.4_all.deb"
+if [ -f "$SCRIPT_DIR/codex-launcher_3.10.5_all.deb" ]; then
+ echo "Installing codex-launcher_3.10.5_all.deb ..."
+ sudo dpkg -i "$SCRIPT_DIR/codex-launcher_3.10.5_all.deb"
echo ""
- echo "Installed v3.10.4 via .deb package."
+ echo "Installed v3.10.5 via .deb package."
echo " translate-proxy.py -> /usr/bin/translate-proxy.py"
echo " codex-launcher-gui -> /usr/bin/codex-launcher-gui"
echo " cleanup-codex-stale -> /usr/bin/cleanup-codex-stale.sh"
diff --git a/src/codex-launcher-gui b/src/codex-launcher-gui
index 167a50e..4041d2b 100755
--- a/src/codex-launcher-gui
+++ b/src/codex-launcher-gui
@@ -1780,7 +1780,7 @@ class LauncherWin(Gtk.Window):
# header row
hdr = Gtk.Box(spacing=8)
vbox.pack_start(hdr, False, False, 0)
- lbl = Gtk.Label(label="Codex Launcher v3.10.4")
+ lbl = Gtk.Label(label="Codex Launcher v3.10.5")
lbl.set_use_markup(True)
hdr.pack_start(lbl, False, False, 0)
changelog_btn = Gtk.Button(label="Changelog")
@@ -3688,7 +3688,7 @@ class EditEndpointDialog(Gtk.Dialog):
auth_url = "https://codebuff.com/api/auth/cli/code"
body = json.dumps({"fingerprintId": fingerprint_id}).encode()
req = urllib.request.Request(auth_url, data=body,
- headers={"Content-Type": "application/json", "User-Agent": "codex-launcher/3.10.4"})
+ headers={"Content-Type": "application/json", "User-Agent": "codex-launcher/3.10.5"})
resp = urllib.request.urlopen(req, timeout=30)
data = json.loads(resp.read())
login_url = data.get("loginUrl", "") or data.get("login_url", "")
@@ -3713,7 +3713,7 @@ class EditEndpointDialog(Gtk.Dialog):
time.sleep(2)
try:
poll_req = urllib.request.Request(poll_url,
- headers={"User-Agent": "codex-launcher/3.10.4"})
+ headers={"User-Agent": "codex-launcher/3.10.5"})
poll_resp = urllib.request.urlopen(poll_req, timeout=10)
poll_data = json.loads(poll_resp.read())
user = poll_data.get("user")
diff --git a/src/translate-proxy.py b/src/translate-proxy.py
index ec5d06d..73d3250 100755
--- a/src/translate-proxy.py
+++ b/src/translate-proxy.py
@@ -335,7 +335,7 @@ def _codebuff_get_session(token, model):
req = urllib.request.Request(url, data=body, headers={
"Content-Type": "application/json",
"Authorization": f"Bearer {token}",
- "User-Agent": "codex-launcher/3.10.4",
+ "User-Agent": "codex-launcher/3.10.5",
"x-codebuff-model": model,
})
try:
@@ -383,7 +383,7 @@ def _codebuff_start_run(token, agent_id):
req = urllib.request.Request(url, data=body, headers={
"Content-Type": "application/json",
"Authorization": f"Bearer {token}",
- "User-Agent": "codex-launcher/3.10.4",
+ "User-Agent": "codex-launcher/3.10.5",
})
try:
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={
"Content-Type": "application/json",
"Authorization": f"Bearer {token}",
- "User-Agent": "codex-launcher/3.10.4",
+ "User-Agent": "codex-launcher/3.10.5",
})
try:
urllib.request.urlopen(req, timeout=10)
@@ -1570,6 +1570,10 @@ _PROVIDER_POLICIES = {
"tool_output_limit": 6000, "max_input_items": 35, "compaction": "balanced"},
"openadapter": {"reasoning_mode": "off", "max_tokens": 32768, "strip_reasoning": True,
"tool_output_limit": 6000, "max_input_items": 30, "compaction": "balanced"},
+ "cloudcode-pa": {"compaction": "aggressive", "context_size": 1000000,
+ "tool_output_limit": 6000, "max_input_items": 60},
+ "googleapis": {"compaction": "balanced", "context_size": 1000000,
+ "tool_output_limit": 6000, "max_input_items": 80},
}
def provider_policy(target_url=None, backend=None):
@@ -1588,12 +1592,14 @@ _MODEL_CONTEXT = {
"claude-sonnet": 200000, "claude-haiku": 200000,
"glm-5.1": 128000, "glm-5": 128000, "glm-4": 128000,
"deepseek": 64000, "gemini-2.5-flash": 1000000, "gemini-2.5-pro": 2000000,
+ "gemini-3-flash": 1000000, "gemini-3.5-flash-low": 1000000,
+ "gemini-3.1-pro-low": 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,
- "gpt-oss-120b": 128000,
+ "claude-sonnet-4-6": 200000, "claude-opus-4-6-thinking": 200000,
+ "gpt-oss-120b-medium": 128000,
"mimo": 32768, "minimax": 32768, "kimi": 128000,
"_default": 32768,
}
@@ -5342,7 +5348,7 @@ class Handler(http.server.BaseHTTPRequestHandler):
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {token}",
- "User-Agent": "codex-launcher/3.10.4",
+ "User-Agent": "codex-launcher/3.10.5",
"x-codebuff-model": model,
}
if instance_id:
@@ -5508,7 +5514,7 @@ class Handler(http.server.BaseHTTPRequestHandler):
if body.get("tool_choice"):
chat_body["tool_choice"] = body["tool_choice"]
target = f"{_CODEBUFF_API_URL}/api/v1/chat/completions"
- headers = {"Content-Type": "application/json", "Authorization": f"Bearer {token}", "User-Agent": "codex-launcher/3.10.4", "x-codebuff-model": model}
+ headers = {"Content-Type": "application/json", "Authorization": f"Bearer {token}", "User-Agent": "codex-launcher/3.10.5", "x-codebuff-model": model}
if 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)