yncli 1.2.0__tar.gz → 1.2.2__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.2}/PKG-INFO +1 -1
  2. {yncli-1.2.0 → yncli-1.2.2}/pyproject.toml +1 -1
  3. {yncli-1.2.0 → yncli-1.2.2}/setup.py +1 -1
  4. {yncli-1.2.0 → yncli-1.2.2}/yncli/client.py +18 -1
  5. {yncli-1.2.0 → yncli-1.2.2}/yncli/tui.py +22 -9
  6. yncli-1.2.2/yncli/version.py +1 -0
  7. {yncli-1.2.0 → yncli-1.2.2}/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.2}/README.md +0 -0
  10. {yncli-1.2.0 → yncli-1.2.2}/setup.cfg +0 -0
  11. {yncli-1.2.0 → yncli-1.2.2}/yncli/__init__.py +0 -0
  12. {yncli-1.2.0 → yncli-1.2.2}/yncli/agent.py +0 -0
  13. {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/architect.md +0 -0
  14. {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/code_review.md +0 -0
  15. {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/debug_oracle.md +0 -0
  16. {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/debugger.md +0 -0
  17. {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/polyglot.md +0 -0
  18. {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/refactor_master.md +0 -0
  19. {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/security_auditor.md +0 -0
  20. {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/system_architect.md +0 -0
  21. {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/test_runner.md +0 -0
  22. {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/ultrabrain.md +0 -0
  23. {yncli-1.2.0 → yncli-1.2.2}/yncli/clean_text.py +0 -0
  24. {yncli-1.2.0 → yncli-1.2.2}/yncli/config.py +0 -0
  25. {yncli-1.2.0 → yncli-1.2.2}/yncli/language_detector.py +0 -0
  26. {yncli-1.2.0 → yncli-1.2.2}/yncli/main.py +0 -0
  27. {yncli-1.2.0 → yncli-1.2.2}/yncli/mention_resolver.py +0 -0
  28. {yncli-1.2.0 → yncli-1.2.2}/yncli/skills_manager.py +0 -0
  29. {yncli-1.2.0 → yncli-1.2.2}/yncli/system_prompt.py +0 -0
  30. {yncli-1.2.0 → yncli-1.2.2}/yncli/tools/__init__.py +0 -0
  31. {yncli-1.2.0 → yncli-1.2.2}/yncli/tools/file_tools.py +0 -0
  32. {yncli-1.2.0 → yncli-1.2.2}/yncli/tools/polyglot_tools.py +0 -0
  33. {yncli-1.2.0 → yncli-1.2.2}/yncli/tools/search_tools.py +0 -0
  34. {yncli-1.2.0 → yncli-1.2.2}/yncli/tools/system_tools.py +0 -0
  35. {yncli-1.2.0 → yncli-1.2.2}/yncli/update_checker.py +0 -0
  36. {yncli-1.2.0 → yncli-1.2.2}/yncli/workspace_memory.py +0 -0
  37. {yncli-1.2.0 → yncli-1.2.2}/yncli/workspace_scanner.py +0 -0
  38. {yncli-1.2.0 → yncli-1.2.2}/yncli.egg-info/SOURCES.txt +0 -0
  39. {yncli-1.2.0 → yncli-1.2.2}/yncli.egg-info/dependency_links.txt +0 -0
  40. {yncli-1.2.0 → yncli-1.2.2}/yncli.egg-info/entry_points.txt +0 -0
  41. {yncli-1.2.0 → yncli-1.2.2}/yncli.egg-info/requires.txt +0 -0
  42. {yncli-1.2.0 → yncli-1.2.2}/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.2
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.2"
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.2",
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)")
@@ -236,6 +236,10 @@ class TerminalUI:
236
236
  badge = " ⭐ (Ultra Fast & Stable)"
237
237
  elif mid.startswith("cx/"):
238
238
  badge = " ⚡ (Active)"
239
+ elif mid in ("gemini-3.6-flash", "gemini-3.5-flash", "gemini-3.5-flash-lite", "gemini-3-flash-preview"):
240
+ badge = " ⭐ (Google Official - Ultra Fast & Active)"
241
+ elif "pro" in mid:
242
+ badge = " ⚠️ (Tier Pro - Butuh Saldo/Billing)"
239
243
 
240
244
  label = f"{mid}{badge}"
241
245
  values.append((mid, label))
@@ -325,16 +329,25 @@ class TerminalUI:
325
329
  self.console.print(f"[green]Endpoint API berhasil diganti ke: [cyan]{new_url}[/cyan][/green]")
326
330
  return True
327
331
 
328
- elif cmd in ("/key", "/apikey"):
332
+ elif cmd in ("/google", "/gemini"):
329
333
  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]")
334
+ self.console.print("Gunakan: [yellow]/google <google_api_key>[/yellow]")
335
+ self.console.print("Contoh: [cyan]/google AIzaSy...[/cyan] atau [cyan]/google AQ.Ab8...[/cyan]")
333
336
  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]")
337
+ g_key = args[0].strip()
338
+ g_endpoint = "https://generativelanguage.googleapis.com/v1beta/openai"
339
+ g_model = "gemini-3.6-flash"
340
+ self.agent.client.base_url = g_endpoint
341
+ self.agent.client.api_key = g_key
342
+ self.agent.set_model(g_model)
343
+ save_config({
344
+ "base_url": g_endpoint,
345
+ "api_key": g_key,
346
+ "model": g_model
347
+ })
348
+ self.console.print("[bold green]Berhasil terhubung ke Google Gemini AI Studio![/bold green]")
349
+ self.console.print(f"Endpoint: [cyan]{g_endpoint}[/cyan]")
350
+ self.console.print(f"Model aktif: [cyan]{g_model}[/cyan] (Ketik [yellow]/model[/yellow] untuk memilih model Gemini lainnya)")
338
351
  return True
339
352
 
340
353
  elif cmd == "/plan":
@@ -0,0 +1 @@
1
+ __version__ = "1.2.2"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: yncli
3
- Version: 1.2.0
3
+ Version: 1.2.2
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