feat(gui): support Gemini CLI provider and settings persistence
This commit is contained in:
29
gui_2.py
29
gui_2.py
@@ -29,7 +29,7 @@ from pydantic import BaseModel
|
||||
from imgui_bundle import imgui, hello_imgui, immapp
|
||||
|
||||
CONFIG_PATH = Path("config.toml")
|
||||
PROVIDERS = ["gemini", "anthropic"]
|
||||
PROVIDERS = ["gemini", "anthropic", "gemini_cli"]
|
||||
COMMS_CLAMP_CHARS = 300
|
||||
|
||||
def load_config() -> dict:
|
||||
@@ -148,6 +148,7 @@ class App:
|
||||
self.ui_project_git_dir = proj_meta.get("git_dir", "")
|
||||
self.ui_project_main_context = proj_meta.get("main_context", "")
|
||||
self.ui_project_system_prompt = proj_meta.get("system_prompt", "")
|
||||
self.ui_gemini_cli_path = self.project.get("gemini_cli", {}).get("binary_path", "gemini")
|
||||
self.ui_word_wrap = proj_meta.get("word_wrap", True)
|
||||
self.ui_summary_only = proj_meta.get("summary_only", False)
|
||||
self.ui_auto_add_history = disc_sec.get("auto_add", False)
|
||||
@@ -592,6 +593,7 @@ class App:
|
||||
self.ui_project_git_dir = proj.get("project", {}).get("git_dir", "")
|
||||
self.ui_project_system_prompt = proj.get("project", {}).get("system_prompt", "")
|
||||
self.ui_project_main_context = proj.get("project", {}).get("main_context", "")
|
||||
self.ui_gemini_cli_path = proj.get("gemini_cli", {}).get("binary_path", "gemini")
|
||||
self.ui_auto_add_history = proj.get("discussion", {}).get("auto_add", False)
|
||||
self.ui_auto_scroll_comms = proj.get("project", {}).get("auto_scroll_comms", True)
|
||||
self.ui_auto_scroll_tool_calls = proj.get("project", {}).get("auto_scroll_tool_calls", True)
|
||||
@@ -1036,6 +1038,8 @@ class App:
|
||||
proj["project"]["auto_scroll_comms"] = self.ui_auto_scroll_comms
|
||||
proj["project"]["auto_scroll_tool_calls"] = self.ui_auto_scroll_tool_calls
|
||||
|
||||
proj.setdefault("gemini_cli", {})["binary_path"] = self.ui_gemini_cli_path
|
||||
|
||||
proj.setdefault("agent", {}).setdefault("tools", {})
|
||||
for t_name in AGENT_TOOL_NAMES:
|
||||
proj["agent"]["tools"][t_name] = self.ui_agent_tools.get(t_name, True)
|
||||
@@ -1865,6 +1869,29 @@ class App:
|
||||
ch, self.max_tokens = imgui.input_int("Max Tokens (Output)", self.max_tokens, 1024)
|
||||
ch, self.history_trunc_limit = imgui.input_int("History Truncation Limit", self.history_trunc_limit, 1024)
|
||||
|
||||
if self.current_provider == "gemini_cli":
|
||||
imgui.separator()
|
||||
imgui.text("Gemini CLI")
|
||||
sid = "None"
|
||||
if hasattr(ai_client, "_gemini_cli_adapter") and ai_client._gemini_cli_adapter:
|
||||
sid = ai_client._gemini_cli_adapter.session_id or "None"
|
||||
imgui.text(f"Session ID: {sid}")
|
||||
if imgui.button("Reset CLI Session"):
|
||||
ai_client.reset_session()
|
||||
|
||||
imgui.text("Binary Path")
|
||||
ch, self.ui_gemini_cli_path = imgui.input_text("##gcli_path", self.ui_gemini_cli_path)
|
||||
imgui.same_line()
|
||||
if imgui.button("Browse##gcli"):
|
||||
r = hide_tk_root()
|
||||
p = filedialog.askopenfilename(title="Select gemini CLI binary")
|
||||
r.destroy()
|
||||
if p:
|
||||
self.ui_gemini_cli_path = p
|
||||
if ch:
|
||||
if hasattr(ai_client, "_gemini_cli_adapter") and ai_client._gemini_cli_adapter:
|
||||
ai_client._gemini_cli_adapter.binary_path = self.ui_gemini_cli_path
|
||||
|
||||
imgui.separator()
|
||||
imgui.text("Telemetry")
|
||||
usage = self.session_usage
|
||||
|
||||
@@ -100,6 +100,7 @@ def default_project(name: str = "unnamed") -> dict:
|
||||
"output": {"output_dir": "./md_gen"},
|
||||
"files": {"base_dir": ".", "paths": []},
|
||||
"screenshots": {"base_dir": ".", "paths": []},
|
||||
"gemini_cli": {"binary_path": "gemini"},
|
||||
"agent": {
|
||||
"tools": {
|
||||
"run_powershell": True,
|
||||
|
||||
Reference in New Issue
Block a user