Compare commits
2 Commits
15
CHANGELOG.md
15
CHANGELOG.md
@@ -1,5 +1,20 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v3.10.11 (2026-05-26)
|
||||||
|
|
||||||
|
**Hybrid Endpoint Fallback — Redundant Antigravity Endpoints**
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
- Hybrid endpoint fallback: tries `cloudcode-pa.googleapis.com` then `daily-cloudcode-pa.googleapis.com` on 429
|
||||||
|
- `daily-cloudcode-pa.googleapis.com` is the same production endpoint agy-core uses (separate rate limit bucket)
|
||||||
|
- 429 errors now log full response body for debugging
|
||||||
|
- SERVICE_DISABLED (403) still falls through to next endpoint
|
||||||
|
- Rate-limit marking only happens after ALL endpoints fail
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
- Fixed 429 on one endpoint immediately failing — now tries fallback before giving up
|
||||||
|
- Restored SERVICE_DISABLED fallthrough (was accidentally removed)
|
||||||
|
|
||||||
## v3.10.10 (2026-05-25)
|
## v3.10.10 (2026-05-25)
|
||||||
|
|
||||||
**Context Normalizer Fix — Compaction Summary Preservation**
|
**Context Normalizer Fix — Compaction Summary Preservation**
|
||||||
|
|||||||
BIN
codex-launcher_3.10.11_all.deb
Normal file
BIN
codex-launcher_3.10.11_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.10_all.deb" ]; then
|
if [ -f "$SCRIPT_DIR/codex-launcher_3.10.11_all.deb" ]; then
|
||||||
echo "Installing codex-launcher_3.10.10_all.deb ..."
|
echo "Installing codex-launcher_3.10.11_all.deb ..."
|
||||||
sudo dpkg -i "$SCRIPT_DIR/codex-launcher_3.10.10_all.deb"
|
sudo dpkg -i "$SCRIPT_DIR/codex-launcher_3.10.11_all.deb"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Installed v3.10.10 via .deb package."
|
echo "Installed v3.10.11 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"
|
||||||
|
|||||||
@@ -83,6 +83,13 @@ model_catalog_json = ""
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
CHANGELOG = [
|
CHANGELOG = [
|
||||||
|
("3.10.11", "2026-05-26", [
|
||||||
|
"Hybrid endpoint fallback: cloudcode-pa then daily-cloudcode-pa on 429",
|
||||||
|
"daily-cloudcode-pa.googleapis.com (same endpoint agy-core uses)",
|
||||||
|
"429 errors log full response body for debugging",
|
||||||
|
"Rate-limit marking only after ALL endpoints fail",
|
||||||
|
"Restored SERVICE_DISABLED (403) fallthrough",
|
||||||
|
]),
|
||||||
("3.10.10", "2026-05-25", [
|
("3.10.10", "2026-05-25", [
|
||||||
"Fix normalizer stripping ALL context after compaction on resumed sessions",
|
"Fix normalizer stripping ALL context after compaction on resumed sessions",
|
||||||
"No auto-reset when compaction summary present (preserves 1925+ turn history)",
|
"No auto-reset when compaction summary present (preserves 1925+ turn history)",
|
||||||
|
|||||||
@@ -5071,7 +5071,10 @@ class Handler(http.server.BaseHTTPRequestHandler):
|
|||||||
|
|
||||||
_allow_staging = os.environ.get("ALLOW_ANTIGRAVITY_STAGING", "0") == "1"
|
_allow_staging = os.environ.get("ALLOW_ANTIGRAVITY_STAGING", "0") == "1"
|
||||||
if OAUTH_PROVIDER == "google-antigravity":
|
if OAUTH_PROVIDER == "google-antigravity":
|
||||||
_antigravity_endpoints = ["https://cloudcode-pa.googleapis.com"]
|
_antigravity_endpoints = [
|
||||||
|
"https://cloudcode-pa.googleapis.com",
|
||||||
|
"https://daily-cloudcode-pa.googleapis.com",
|
||||||
|
]
|
||||||
if _allow_staging:
|
if _allow_staging:
|
||||||
_antigravity_endpoints.extend([
|
_antigravity_endpoints.extend([
|
||||||
"https://daily-cloudcode-pa.sandbox.googleapis.com",
|
"https://daily-cloudcode-pa.sandbox.googleapis.com",
|
||||||
@@ -5128,14 +5131,16 @@ class Handler(http.server.BaseHTTPRequestHandler):
|
|||||||
if e.code == 403 and "SERVICE_DISABLED" in err_body[:500] and ep != endpoints[-1]:
|
if e.code == 403 and "SERVICE_DISABLED" in err_body[:500] and ep != endpoints[-1]:
|
||||||
print(f"[{self._session_id}] {ep} SERVICE_DISABLED, trying next endpoint", file=sys.stderr)
|
print(f"[{self._session_id}] {ep} SERVICE_DISABLED, trying next endpoint", file=sys.stderr)
|
||||||
continue
|
continue
|
||||||
if e.code == 429 and ep != endpoints[-1] and _allow_staging:
|
if e.code == 429 and OAUTH_PROVIDER.startswith("google"):
|
||||||
print(f"[{self._session_id}] {ep} HTTP 429, trying next endpoint", file=sys.stderr)
|
print(f"[{self._session_id}] 429 from {ep}, body: {err_body[:300]}", file=sys.stderr)
|
||||||
|
if ep != endpoints[-1]:
|
||||||
|
print(f"[{self._session_id}] {ep} HTTP 429, trying fallback endpoint", file=sys.stderr)
|
||||||
continue
|
continue
|
||||||
if e.code == 429:
|
|
||||||
pool = _google_antigravity_pool if OAUTH_PROVIDER == "google-antigravity" else _google_cli_pool
|
pool = _google_antigravity_pool if OAUTH_PROVIDER == "google-antigravity" else _google_cli_pool
|
||||||
_, acct = _get_google_account(OAUTH_PROVIDER)
|
_, acct = _get_google_account(OAUTH_PROVIDER)
|
||||||
if acct:
|
if acct:
|
||||||
pool.mark_rate_limited(acct, 60)
|
pool.mark_rate_limited(acct, 60)
|
||||||
|
print(f"[{self._session_id}] all endpoints returned 429", file=sys.stderr)
|
||||||
return self.send_json(e.code, {"error": {"type": "upstream_error", "message": _sanitize_err_body(err_body)}})
|
return self.send_json(e.code, {"error": {"type": "upstream_error", "message": _sanitize_err_body(err_body)}})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
if ep == endpoints[-1]:
|
if ep == endpoints[-1]:
|
||||||
|
|||||||
Reference in New Issue
Block a user