diff --git a/codex-launcher_2.1.1_all.deb b/codex-launcher_2.1.1_all.deb index 1435784..3e1c353 100644 Binary files a/codex-launcher_2.1.1_all.deb and b/codex-launcher_2.1.1_all.deb differ diff --git a/src/codex-launcher-gui b/src/codex-launcher-gui index d4e8f92..8f60432 100755 --- a/src/codex-launcher-gui +++ b/src/codex-launcher-gui @@ -123,6 +123,7 @@ PROVIDER_PRESETS = { "Command Code": { "backend_type": "command-code", "base_url": "https://api.commandcode.ai", + "cc_version": "0.26.8", "models": [ "deepseek/deepseek-v4-flash", "deepseek/deepseek-v4-pro", "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["backend_type"] = preset["backend_type"] 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"): updated["models"] = list(preset.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"], "target_url": normalize_base_url(endpoint["base_url"]), "api_key": endpoint["api_key"], + "cc_version": endpoint.get("cc_version", ""), "models": [{"id": m, "object": "model", "created": 1700000000, "owned_by": endpoint["name"]} for m in endpoint.get("models", [])], } @@ -1399,6 +1403,10 @@ class EditEndpointDialog(Gtk.Dialog): self._entry_key.set_visibility(False) 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 mlbl = Gtk.Label(label="Models:", xalign=0) area.pack_start(mlbl, False, False, 4) @@ -1492,6 +1500,9 @@ class EditEndpointDialog(Gtk.Dialog): self._entry_url.set_text(preset.get("base_url", "")) if not self._entry_key.get_text().strip(): 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: for mid in preset["models"]: self._model_store.append([mid]) @@ -1594,6 +1605,9 @@ class EditEndpointDialog(Gtk.Dialog): new_ep = {"name": name, "backend_type": bt, "base_url": url, "api_key": key, "default_model": default, "models": models, "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"]) # Update or append diff --git a/src/translate-proxy.py b/src/translate-proxy.py index 66ef0f2..ed492f7 100755 --- a/src/translate-proxy.py +++ b/src/translate-proxy.py @@ -80,6 +80,7 @@ BACKEND = CONFIG["backend_type"] TARGET_URL = CONFIG["target_url"].rstrip("/") API_KEY = CONFIG["api_key"] MODELS = CONFIG["models"] +CC_VERSION = CONFIG.get("cc_version", "") # ═══════════════════════════════════════════════════════════════════ # Shared helpers @@ -745,6 +746,7 @@ class Handler(http.server.BaseHTTPRequestHandler): "Content-Type": "application/json", "Authorization": f"Bearer {API_KEY}", "Accept": "text/event-stream, application/json", + "x-command-code-version": CC_VERSION or "0.26.8", }, browser_ua=True) print(f"[translate-proxy] POST {target} model={model} stream={stream} [command-code]", file=sys.stderr) req = urllib.request.Request(