yncli 1.2.0__tar.gz → 1.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. {yncli-1.2.0 → yncli-1.2.1}/PKG-INFO +1 -1
  2. {yncli-1.2.0 → yncli-1.2.1}/pyproject.toml +1 -1
  3. {yncli-1.2.0 → yncli-1.2.1}/setup.py +1 -1
  4. {yncli-1.2.0 → yncli-1.2.1}/yncli/client.py +18 -1
  5. {yncli-1.2.0 → yncli-1.2.1}/yncli/tui.py +18 -9
  6. yncli-1.2.1/yncli/version.py +1 -0
  7. {yncli-1.2.0 → yncli-1.2.1}/yncli.egg-info/PKG-INFO +1 -1
  8. yncli-1.2.0/yncli/version.py +0 -1
  9. {yncli-1.2.0 → yncli-1.2.1}/README.md +0 -0
  10. {yncli-1.2.0 → yncli-1.2.1}/setup.cfg +0 -0
  11. {yncli-1.2.0 → yncli-1.2.1}/yncli/__init__.py +0 -0
  12. {yncli-1.2.0 → yncli-1.2.1}/yncli/agent.py +0 -0
  13. {yncli-1.2.0 → yncli-1.2.1}/yncli/built_in_skills/architect.md +0 -0
  14. {yncli-1.2.0 → yncli-1.2.1}/yncli/built_in_skills/code_review.md +0 -0
  15. {yncli-1.2.0 → yncli-1.2.1}/yncli/built_in_skills/debug_oracle.md +0 -0
  16. {yncli-1.2.0 → yncli-1.2.1}/yncli/built_in_skills/debugger.md +0 -0
  17. {yncli-1.2.0 → yncli-1.2.1}/yncli/built_in_skills/polyglot.md +0 -0
  18. {yncli-1.2.0 → yncli-1.2.1}/yncli/built_in_skills/refactor_master.md +0 -0
  19. {yncli-1.2.0 → yncli-1.2.1}/yncli/built_in_skills/security_auditor.md +0 -0
  20. {yncli-1.2.0 → yncli-1.2.1}/yncli/built_in_skills/system_architect.md +0 -0
  21. {yncli-1.2.0 → yncli-1.2.1}/yncli/built_in_skills/test_runner.md +0 -0
  22. {yncli-1.2.0 → yncli-1.2.1}/yncli/built_in_skills/ultrabrain.md +0 -0
  23. {yncli-1.2.0 → yncli-1.2.1}/yncli/clean_text.py +0 -0
  24. {yncli-1.2.0 → yncli-1.2.1}/yncli/config.py +0 -0
  25. {yncli-1.2.0 → yncli-1.2.1}/yncli/language_detector.py +0 -0
  26. {yncli-1.2.0 → yncli-1.2.1}/yncli/main.py +0 -0
  27. {yncli-1.2.0 → yncli-1.2.1}/yncli/mention_resolver.py +0 -0
  28. {yncli-1.2.0 → yncli-1.2.1}/yncli/skills_manager.py +0 -0
  29. {yncli-1.2.0 → yncli-1.2.1}/yncli/system_prompt.py +0 -0
  30. {yncli-1.2.0 → yncli-1.2.1}/yncli/tools/__init__.py +0 -0
  31. {yncli-1.2.0 → yncli-1.2.1}/yncli/tools/file_tools.py +0 -0
  32. {yncli-1.2.0 → yncli-1.2.1}/yncli/tools/polyglot_tools.py +0 -0
  33. {yncli-1.2.0 → yncli-1.2.1}/yncli/tools/search_tools.py +0 -0
  34. {yncli-1.2.0 → yncli-1.2.1}/yncli/tools/system_tools.py +0 -0
  35. {yncli-1.2.0 → yncli-1.2.1}/yncli/update_checker.py +0 -0
  36. {yncli-1.2.0 → yncli-1.2.1}/yncli/workspace_memory.py +0 -0
  37. {yncli-1.2.0 → yncli-1.2.1}/yncli/workspace_scanner.py +0 -0
  38. {yncli-1.2.0 → yncli-1.2.1}/yncli.egg-info/SOURCES.txt +0 -0
  39. {yncli-1.2.0 → yncli-1.2.1}/yncli.egg-info/dependency_links.txt +0 -0
  40. {yncli-1.2.0 → yncli-1.2.1}/yncli.egg-info/entry_points.txt +0 -0
  41. {yncli-1.2.0 → yncli-1.2.1}/yncli.egg-info/requires.txt +0 -0
  42. {yncli-1.2.0 → yncli-1.2.1}/yncli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: yncli
3
- Version: 1.2.0
3
+ Version: 1.2.1
4
4
  Summary: Autonomous Polyglot AI Coding Agent & TUI
5
5
  Author: Yanzyuyu
6
6
  Requires-Python: >=3.8
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "yncli"
7
- version = "1.2.0"
7
+ version = "1.2.1"
8
8
  description = "Autonomous Polyglot AI Coding Agent & TUI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.8"
@@ -6,7 +6,7 @@ long_description = (this_directory / "README.md").read_text(encoding="utf-8") if
6
6
 
7
7
  setup(
8
8
  name="yncli",
9
- version="1.2.0",
9
+ version="1.2.1",
10
10
  description="Autonomous Polyglot AI Coding Agent & TUI",
11
11
  long_description=long_description,
12
12
  long_description_content_type="text/markdown",
@@ -17,8 +17,25 @@ class LLMClient:
17
17
 
18
18
  def list_models(self) -> List[Dict[str, Any]]:
19
19
  """
20
- Fetches the list of available models from the endpoint.
20
+ Fetches the list of available models from the endpoint (supports OpenAI, OpenRouter, Google Gemini).
21
21
  """
22
+ # Google Gemini models endpoint
23
+ if "generativelanguage.googleapis.com" in self.base_url:
24
+ url = f"https://generativelanguage.googleapis.com/v1beta/openai/models"
25
+ try:
26
+ resp = requests.get(url, headers={"Authorization": f"Bearer {self.api_key}"}, timeout=15)
27
+ if resp.status_code == 200:
28
+ data = resp.json()
29
+ models = []
30
+ for m in data.get("data", []):
31
+ mid = m.get("id", "").replace("models/", "")
32
+ # Filter to modern fast and coding models
33
+ if any(k in mid for k in ["flash", "pro", "gemma"]) and "embedding" not in mid and "tts" not in mid and "image" not in mid:
34
+ models.append({"id": mid})
35
+ return models
36
+ except Exception:
37
+ pass
38
+
22
39
  url = f"{self.base_url}/models"
23
40
  try:
24
41
  resp = requests.get(url, headers={"Authorization": f"Bearer {self.api_key}"}, timeout=15)
@@ -179,7 +179,7 @@ class TerminalUI:
179
179
  table.add_column("Keterangan", style="white")
180
180
 
181
181
  table.add_row("/model, /models", "Buka popup interaktif untuk memilih model AI (klik mouse / panah)")
182
- table.add_row("/model <nama>", "Ganti model secara langsung (misal: /model ag/claude-sonnet-4-6)")
182
+ table.add_row("/google <api_key>", "Hubungkan langsung ke Google AI Studio Gemini API Key Anda!")
183
183
  table.add_row("/key <api_key>", "Ganti API Key kustom Anda")
184
184
  table.add_row("/endpoint <url>", "Ganti Endpoint API kustom (OpenAI, Ollama, OpenRouter, Groq, dll)")
185
185
  table.add_row("/plan", "Masuk ke Plan Mode (Riset & susun PRD plan.md otomatis)")
@@ -325,16 +325,25 @@ class TerminalUI:
325
325
  self.console.print(f"[green]Endpoint API berhasil diganti ke: [cyan]{new_url}[/cyan][/green]")
326
326
  return True
327
327
 
328
- elif cmd in ("/key", "/apikey"):
328
+ elif cmd in ("/google", "/gemini"):
329
329
  if not args:
330
- masked = self.agent.client.api_key[:6] + "..." + self.agent.client.api_key[-4:] if len(self.agent.client.api_key) > 10 else "***"
331
- self.console.print(f"API Key saat ini: [cyan]{masked}[/cyan]")
332
- self.console.print("Gunakan: [yellow]/key <api_key_anda>[/yellow]")
330
+ self.console.print("Gunakan: [yellow]/google <google_api_key>[/yellow]")
331
+ self.console.print("Contoh: [cyan]/google AIzaSy...[/cyan] atau [cyan]/google AQ.Ab8...[/cyan]")
333
332
  return True
334
- new_key = args[0].strip()
335
- self.agent.client.api_key = new_key
336
- save_config({"api_key": new_key})
337
- self.console.print("[green]API Key berhasil disimpan dan diperbarui.[/green]")
333
+ g_key = args[0].strip()
334
+ g_endpoint = "https://generativelanguage.googleapis.com/v1beta/openai"
335
+ g_model = "gemini-3.6-flash"
336
+ self.agent.client.base_url = g_endpoint
337
+ self.agent.client.api_key = g_key
338
+ self.agent.set_model(g_model)
339
+ save_config({
340
+ "base_url": g_endpoint,
341
+ "api_key": g_key,
342
+ "model": g_model
343
+ })
344
+ self.console.print("[bold green]Berhasil terhubung ke Google Gemini AI Studio![/bold green]")
345
+ self.console.print(f"Endpoint: [cyan]{g_endpoint}[/cyan]")
346
+ self.console.print(f"Model aktif: [cyan]{g_model}[/cyan] (Ketik [yellow]/model[/yellow] untuk memilih model Gemini lainnya)")
338
347
  return True
339
348
 
340
349
  elif cmd == "/plan":
@@ -0,0 +1 @@
1
+ __version__ = "1.2.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: yncli
3
- Version: 1.2.0
3
+ Version: 1.2.1
4
4
  Summary: Autonomous Polyglot AI Coding Agent & TUI
5
5
  Author: Yanzyuyu
6
6
  Requires-Python: >=3.8
@@ -1 +0,0 @@
1
- __version__ = "1.2.0"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes