yncli 1.1.9__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.1.9 → yncli-1.2.1}/PKG-INFO +1 -1
  2. {yncli-1.1.9 → yncli-1.2.1}/pyproject.toml +1 -1
  3. {yncli-1.1.9 → yncli-1.2.1}/setup.py +1 -1
  4. {yncli-1.1.9 → yncli-1.2.1}/yncli/client.py +18 -1
  5. {yncli-1.1.9 → yncli-1.2.1}/yncli/tui.py +35 -1
  6. yncli-1.2.1/yncli/version.py +1 -0
  7. {yncli-1.1.9 → yncli-1.2.1}/yncli.egg-info/PKG-INFO +1 -1
  8. yncli-1.1.9/yncli/version.py +0 -1
  9. {yncli-1.1.9 → yncli-1.2.1}/README.md +0 -0
  10. {yncli-1.1.9 → yncli-1.2.1}/setup.cfg +0 -0
  11. {yncli-1.1.9 → yncli-1.2.1}/yncli/__init__.py +0 -0
  12. {yncli-1.1.9 → yncli-1.2.1}/yncli/agent.py +0 -0
  13. {yncli-1.1.9 → yncli-1.2.1}/yncli/built_in_skills/architect.md +0 -0
  14. {yncli-1.1.9 → yncli-1.2.1}/yncli/built_in_skills/code_review.md +0 -0
  15. {yncli-1.1.9 → yncli-1.2.1}/yncli/built_in_skills/debug_oracle.md +0 -0
  16. {yncli-1.1.9 → yncli-1.2.1}/yncli/built_in_skills/debugger.md +0 -0
  17. {yncli-1.1.9 → yncli-1.2.1}/yncli/built_in_skills/polyglot.md +0 -0
  18. {yncli-1.1.9 → yncli-1.2.1}/yncli/built_in_skills/refactor_master.md +0 -0
  19. {yncli-1.1.9 → yncli-1.2.1}/yncli/built_in_skills/security_auditor.md +0 -0
  20. {yncli-1.1.9 → yncli-1.2.1}/yncli/built_in_skills/system_architect.md +0 -0
  21. {yncli-1.1.9 → yncli-1.2.1}/yncli/built_in_skills/test_runner.md +0 -0
  22. {yncli-1.1.9 → yncli-1.2.1}/yncli/built_in_skills/ultrabrain.md +0 -0
  23. {yncli-1.1.9 → yncli-1.2.1}/yncli/clean_text.py +0 -0
  24. {yncli-1.1.9 → yncli-1.2.1}/yncli/config.py +0 -0
  25. {yncli-1.1.9 → yncli-1.2.1}/yncli/language_detector.py +0 -0
  26. {yncli-1.1.9 → yncli-1.2.1}/yncli/main.py +0 -0
  27. {yncli-1.1.9 → yncli-1.2.1}/yncli/mention_resolver.py +0 -0
  28. {yncli-1.1.9 → yncli-1.2.1}/yncli/skills_manager.py +0 -0
  29. {yncli-1.1.9 → yncli-1.2.1}/yncli/system_prompt.py +0 -0
  30. {yncli-1.1.9 → yncli-1.2.1}/yncli/tools/__init__.py +0 -0
  31. {yncli-1.1.9 → yncli-1.2.1}/yncli/tools/file_tools.py +0 -0
  32. {yncli-1.1.9 → yncli-1.2.1}/yncli/tools/polyglot_tools.py +0 -0
  33. {yncli-1.1.9 → yncli-1.2.1}/yncli/tools/search_tools.py +0 -0
  34. {yncli-1.1.9 → yncli-1.2.1}/yncli/tools/system_tools.py +0 -0
  35. {yncli-1.1.9 → yncli-1.2.1}/yncli/update_checker.py +0 -0
  36. {yncli-1.1.9 → yncli-1.2.1}/yncli/workspace_memory.py +0 -0
  37. {yncli-1.1.9 → yncli-1.2.1}/yncli/workspace_scanner.py +0 -0
  38. {yncli-1.1.9 → yncli-1.2.1}/yncli.egg-info/SOURCES.txt +0 -0
  39. {yncli-1.1.9 → yncli-1.2.1}/yncli.egg-info/dependency_links.txt +0 -0
  40. {yncli-1.1.9 → yncli-1.2.1}/yncli.egg-info/entry_points.txt +0 -0
  41. {yncli-1.1.9 → yncli-1.2.1}/yncli.egg-info/requires.txt +0 -0
  42. {yncli-1.1.9 → 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.1.9
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.1.9"
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.1.9",
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,9 @@ 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")
182
+ table.add_row("/google <api_key>", "Hubungkan langsung ke Google AI Studio Gemini API Key Anda!")
183
+ table.add_row("/key <api_key>", "Ganti API Key kustom Anda")
184
+ table.add_row("/endpoint <url>", "Ganti Endpoint API kustom (OpenAI, Ollama, OpenRouter, Groq, dll)")
183
185
  table.add_row("/plan", "Masuk ke Plan Mode (Riset & susun PRD plan.md otomatis)")
184
186
  table.add_row("/build", "Masuk ke Build Mode (Eksekusi autonomous pembuatan & editing kode)")
185
187
  table.add_row("/ask", "Masuk ke Ask Mode (Konsultasi murni tanpa modifikasi file)")
@@ -312,6 +314,38 @@ class TerminalUI:
312
314
  self.console.print(f"[green]Model berhasil diganti ke: [cyan]{new_model}[/cyan][/green]")
313
315
  return True
314
316
 
317
+ elif cmd in ("/endpoint", "/baseurl"):
318
+ if not args:
319
+ self.console.print(f"Endpoint API saat ini: [cyan]{self.agent.client.base_url}[/cyan]")
320
+ self.console.print("Gunakan: [yellow]/endpoint <url_base_api>[/yellow] (contoh: https://api.openai.com/v1 atau http://localhost:11434/v1)")
321
+ return True
322
+ new_url = args[0].strip().rstrip("/")
323
+ self.agent.client.base_url = new_url
324
+ save_config({"base_url": new_url})
325
+ self.console.print(f"[green]Endpoint API berhasil diganti ke: [cyan]{new_url}[/cyan][/green]")
326
+ return True
327
+
328
+ elif cmd in ("/google", "/gemini"):
329
+ if not args:
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]")
332
+ return True
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)")
347
+ return True
348
+
315
349
  elif cmd == "/plan":
316
350
  self.agent.set_mode("plan")
317
351
  save_config({"mode": "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.1.9
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.1.9"
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