fix Command Code 403: add cc_version field + x-command-code-version header

This commit is contained in:
admin
2026-05-19 18:28:56 +04:00
Unverified
parent a2dde4d331
commit ba9831db2d
3 changed files with 16 additions and 0 deletions

Binary file not shown.

View File

@@ -123,6 +123,7 @@ PROVIDER_PRESETS = {
"Command Code": { "Command Code": {
"backend_type": "command-code", "backend_type": "command-code",
"base_url": "https://api.commandcode.ai", "base_url": "https://api.commandcode.ai",
"cc_version": "0.26.8",
"models": [ "models": [
"deepseek/deepseek-v4-flash", "deepseek/deepseek-v4-pro", "deepseek/deepseek-v4-flash", "deepseek/deepseek-v4-pro",
"anthropic:claude-sonnet-4-6", "anthropic:claude-haiku-4-5-20251001", "anthropic:claude-sonnet-4-6", "anthropic:claude-haiku-4-5-20251001",
@@ -192,6 +193,8 @@ def apply_provider_preset(endpoint, preset_name):
updated["provider_preset"] = preset_name updated["provider_preset"] = preset_name
updated["backend_type"] = preset["backend_type"] updated["backend_type"] = preset["backend_type"]
updated["base_url"] = normalize_base_url(preset["base_url"]) updated["base_url"] = normalize_base_url(preset["base_url"])
if preset.get("cc_version") and not updated.get("cc_version"):
updated["cc_version"] = preset["cc_version"]
if not updated.get("models"): if not updated.get("models"):
updated["models"] = list(preset.get("models", [])) updated["models"] = list(preset.get("models", []))
if not updated.get("default_model") and updated.get("models"): if not updated.get("default_model") and updated.get("models"):
@@ -418,6 +421,7 @@ def _start_proxy_for(endpoint, logfn):
"backend_type": endpoint["backend_type"], "backend_type": endpoint["backend_type"],
"target_url": normalize_base_url(endpoint["base_url"]), "target_url": normalize_base_url(endpoint["base_url"]),
"api_key": endpoint["api_key"], "api_key": endpoint["api_key"],
"cc_version": endpoint.get("cc_version", ""),
"models": [{"id": m, "object": "model", "created": 1700000000, "owned_by": endpoint["name"]} "models": [{"id": m, "object": "model", "created": 1700000000, "owned_by": endpoint["name"]}
for m in endpoint.get("models", [])], for m in endpoint.get("models", [])],
} }
@@ -1399,6 +1403,10 @@ class EditEndpointDialog(Gtk.Dialog):
self._entry_key.set_visibility(False) self._entry_key.set_visibility(False)
add_row(4, "API Key:", self._entry_key) add_row(4, "API Key:", self._entry_key)
self._entry_cc_ver = Gtk.Entry(text=self._data.get("cc_version", ""))
self._entry_cc_ver.set_placeholder_text("e.g. 0.26.8 (Command Code only)")
add_row(5, "CC Version:", self._entry_cc_ver)
# Models # Models
mlbl = Gtk.Label(label="Models:", xalign=0) mlbl = Gtk.Label(label="Models:", xalign=0)
area.pack_start(mlbl, False, False, 4) area.pack_start(mlbl, False, False, 4)
@@ -1492,6 +1500,9 @@ class EditEndpointDialog(Gtk.Dialog):
self._entry_url.set_text(preset.get("base_url", "")) self._entry_url.set_text(preset.get("base_url", ""))
if not self._entry_key.get_text().strip(): if not self._entry_key.get_text().strip():
self._entry_key.set_text("") self._entry_key.set_text("")
cc_ver = preset.get("cc_version", "")
if cc_ver and not self._entry_cc_ver.get_text().strip():
self._entry_cc_ver.set_text(cc_ver)
if preset.get("models") and len(self._model_store) == 0: if preset.get("models") and len(self._model_store) == 0:
for mid in preset["models"]: for mid in preset["models"]:
self._model_store.append([mid]) self._model_store.append([mid])
@@ -1594,6 +1605,9 @@ class EditEndpointDialog(Gtk.Dialog):
new_ep = {"name": name, "backend_type": bt, "base_url": url, new_ep = {"name": name, "backend_type": bt, "base_url": url,
"api_key": key, "default_model": default, "models": models, "api_key": key, "default_model": default, "models": models,
"provider_preset": self._combo_preset.get_active_text() or "Custom"} "provider_preset": self._combo_preset.get_active_text() or "Custom"}
cc_ver = self._entry_cc_ver.get_text().strip()
if cc_ver:
new_ep["cc_version"] = cc_ver
new_ep["base_url"] = normalize_base_url(new_ep["base_url"]) new_ep["base_url"] = normalize_base_url(new_ep["base_url"])
# Update or append # Update or append

View File

@@ -80,6 +80,7 @@ BACKEND = CONFIG["backend_type"]
TARGET_URL = CONFIG["target_url"].rstrip("/") TARGET_URL = CONFIG["target_url"].rstrip("/")
API_KEY = CONFIG["api_key"] API_KEY = CONFIG["api_key"]
MODELS = CONFIG["models"] MODELS = CONFIG["models"]
CC_VERSION = CONFIG.get("cc_version", "")
# ═══════════════════════════════════════════════════════════════════ # ═══════════════════════════════════════════════════════════════════
# Shared helpers # Shared helpers
@@ -745,6 +746,7 @@ class Handler(http.server.BaseHTTPRequestHandler):
"Content-Type": "application/json", "Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}", "Authorization": f"Bearer {API_KEY}",
"Accept": "text/event-stream, application/json", "Accept": "text/event-stream, application/json",
"x-command-code-version": CC_VERSION or "0.26.8",
}, browser_ua=True) }, browser_ua=True)
print(f"[translate-proxy] POST {target} model={model} stream={stream} [command-code]", file=sys.stderr) print(f"[translate-proxy] POST {target} model={model} stream={stream} [command-code]", file=sys.stderr)
req = urllib.request.Request( req = urllib.request.Request(