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.
- {yncli-1.2.0 → yncli-1.2.2}/PKG-INFO +1 -1
- {yncli-1.2.0 → yncli-1.2.2}/pyproject.toml +1 -1
- {yncli-1.2.0 → yncli-1.2.2}/setup.py +1 -1
- {yncli-1.2.0 → yncli-1.2.2}/yncli/client.py +18 -1
- {yncli-1.2.0 → yncli-1.2.2}/yncli/tui.py +22 -9
- yncli-1.2.2/yncli/version.py +1 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli.egg-info/PKG-INFO +1 -1
- yncli-1.2.0/yncli/version.py +0 -1
- {yncli-1.2.0 → yncli-1.2.2}/README.md +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/setup.cfg +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/__init__.py +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/agent.py +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/architect.md +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/code_review.md +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/debug_oracle.md +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/debugger.md +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/polyglot.md +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/refactor_master.md +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/security_auditor.md +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/system_architect.md +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/test_runner.md +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/built_in_skills/ultrabrain.md +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/clean_text.py +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/config.py +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/language_detector.py +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/main.py +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/mention_resolver.py +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/skills_manager.py +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/system_prompt.py +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/tools/__init__.py +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/tools/file_tools.py +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/tools/polyglot_tools.py +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/tools/search_tools.py +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/tools/system_tools.py +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/update_checker.py +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/workspace_memory.py +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli/workspace_scanner.py +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli.egg-info/SOURCES.txt +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli.egg-info/dependency_links.txt +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli.egg-info/entry_points.txt +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli.egg-info/requires.txt +0 -0
- {yncli-1.2.0 → yncli-1.2.2}/yncli.egg-info/top_level.txt +0 -0
|
@@ -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.
|
|
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("/
|
|
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 ("/
|
|
332
|
+
elif cmd in ("/google", "/gemini"):
|
|
329
333
|
if not args:
|
|
330
|
-
|
|
331
|
-
self.console.print(
|
|
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
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
self.
|
|
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"
|
yncli-1.2.0/yncli/version.py
DELETED
|
@@ -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
|
|
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
|