diff --git a/codex-launcher_3.10.6_all.deb b/codex-launcher_3.10.6_all.deb index e8f43d1..50eaf0f 100644 Binary files a/codex-launcher_3.10.6_all.deb and b/codex-launcher_3.10.6_all.deb differ diff --git a/src/codex-launcher-gui b/src/codex-launcher-gui index ae0439a..8299d4e 100755 --- a/src/codex-launcher-gui +++ b/src/codex-launcher-gui @@ -1977,6 +1977,13 @@ class LauncherWin(Gtk.Window): assist_btn.connect("clicked", lambda b: self._open_assistant()) assist_btn.set_tooltip_text("Open AI coding assistant with streaming, tools, and session management") bb.pack_start(assist_btn, False, False, 0) + self._clear_log_btn = Gtk.Button(label="Clear Log") + self._clear_log_btn.connect("clicked", lambda b: self._buf.set_text("")) + bb.pack_start(self._clear_log_btn, False, False, 0) + self._restart_btn = Gtk.Button(label="Restart Proxy") + self._restart_btn.connect("clicked", lambda b: self._manual_restart_proxy()) + self._restart_btn.set_sensitive(False) + bb.pack_start(self._restart_btn, False, False, 0) self._kill_btn = Gtk.Button(label="Kill && Cleanup") self._kill_btn.connect("clicked", lambda b: self._kill()) self._kill_btn.set_sensitive(False) @@ -2073,6 +2080,7 @@ class LauncherWin(Gtk.Window): self._btn_codex_desktop.set_sensitive(not busy and has_desk) self._btn_codex_cli.set_sensitive(not busy and has_cli) self._kill_btn.set_sensitive(busy) + self._restart_btn.set_sensitive(busy) GLib.idle_add(_update) def _rebuild_combo(self): @@ -2206,16 +2214,32 @@ class LauncherWin(Gtk.Window): GLib.idle_add(self.log, f"[AI Monitor] Alert: {action} (trigger: {trigger})") def _restart_proxy_from_watcher(self): - try: - ep_name = load_endpoints().get("default") - if not ep_name: - return - for ep in load_endpoints().get("endpoints", []): - if ep.get("name") == ep_name: - self._start_proxy(ep) - break - except Exception as e: - self.log(f"[AI Monitor] Proxy restart failed: {e}") + try: + ep_name = load_endpoints().get("default") + if not ep_name: + return + for ep in load_endpoints().get("endpoints", []): + if ep.get("name") == ep_name: + self._start_proxy(ep) + break + except Exception as e: + self.log(f"[AI Monitor] Proxy restart failed: {e}") + + def _manual_restart_proxy(self): + self._kill() + time.sleep(1) + try: + ep_name = load_endpoints().get("default") + if not ep_name: + self.log("No default endpoint set") + return + for ep in load_endpoints().get("endpoints", []): + if ep.get("name") == ep_name: + self._start_proxy(ep) + self.log("Proxy restarted") + break + except Exception as e: + self.log(f"Proxy restart failed: {e}") def _open_usage(self): try: