yncli 1.1.2__tar.gz → 1.1.4__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.1.2 → yncli-1.1.4}/PKG-INFO +1 -1
- {yncli-1.1.2 → yncli-1.1.4}/pyproject.toml +1 -1
- {yncli-1.1.2 → yncli-1.1.4}/setup.py +1 -1
- {yncli-1.1.2 → yncli-1.1.4}/yncli/tui.py +31 -10
- {yncli-1.1.2 → yncli-1.1.4}/yncli/update_checker.py +11 -1
- yncli-1.1.4/yncli/version.py +1 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli.egg-info/PKG-INFO +1 -1
- yncli-1.1.2/yncli/version.py +0 -1
- {yncli-1.1.2 → yncli-1.1.4}/README.md +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/setup.cfg +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/__init__.py +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/agent.py +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/built_in_skills/architect.md +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/built_in_skills/code_review.md +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/built_in_skills/debug_oracle.md +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/built_in_skills/debugger.md +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/built_in_skills/polyglot.md +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/built_in_skills/refactor_master.md +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/built_in_skills/security_auditor.md +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/built_in_skills/system_architect.md +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/built_in_skills/test_runner.md +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/built_in_skills/ultrabrain.md +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/clean_text.py +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/client.py +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/config.py +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/language_detector.py +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/main.py +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/mention_resolver.py +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/skills_manager.py +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/system_prompt.py +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/tools/__init__.py +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/tools/file_tools.py +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/tools/polyglot_tools.py +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/tools/search_tools.py +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/tools/system_tools.py +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/workspace_memory.py +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli/workspace_scanner.py +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli.egg-info/SOURCES.txt +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli.egg-info/dependency_links.txt +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli.egg-info/entry_points.txt +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/yncli.egg-info/requires.txt +0 -0
- {yncli-1.1.2 → yncli-1.1.4}/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.1.
|
|
9
|
+
version="1.1.4",
|
|
10
10
|
description="Autonomous Polyglot AI Coding Agent & TUI",
|
|
11
11
|
long_description=long_description,
|
|
12
12
|
long_description_content_type="text/markdown",
|
|
@@ -158,7 +158,8 @@ class TerminalUI:
|
|
|
158
158
|
if update_info:
|
|
159
159
|
update_panel = Panel(
|
|
160
160
|
f"[bold yellow]🔔 Update Tersedia:[/] [dim]v{update_info['current']}[/] → [bold green]v{update_info['latest']}[/]\n"
|
|
161
|
-
f"[dim]
|
|
161
|
+
f"[dim]Ketik [bold cyan]/update[/bold cyan] untuk memperbarui & restart otomatis, atau jalankan:[reset]\n"
|
|
162
|
+
f"• [cyan]yncli --update[/cyan] • [cyan]npm i -g @yanzyuyu/yncli[/cyan]",
|
|
162
163
|
border_style="yellow",
|
|
163
164
|
padding=(0, 2)
|
|
164
165
|
)
|
|
@@ -180,6 +181,7 @@ class TerminalUI:
|
|
|
180
181
|
table.add_row("/plan", "Masuk ke Plan Mode (Riset & susun PRD plan.md otomatis)")
|
|
181
182
|
table.add_row("/build", "Masuk ke Build Mode (Eksekusi autonomous pembuatan & editing kode)")
|
|
182
183
|
table.add_row("/ask", "Masuk ke Ask Mode (Konsultasi murni tanpa modifikasi file)")
|
|
184
|
+
table.add_row("/update, /upgrade", "Perbarui yncli ke versi terbaru & restart otomatis")
|
|
183
185
|
table.add_row("/cd <folder>", "Pindah direktori kerja aktif")
|
|
184
186
|
table.add_row("/pwd", "Lihat path direktori saat ini")
|
|
185
187
|
table.add_row("/approval [on|off]", "Atur persetujuan tool (on = otomatis, off = tanya dulu)")
|
|
@@ -202,17 +204,36 @@ class TerminalUI:
|
|
|
202
204
|
self.console.print("[red]Gagal mengambil daftar model dari server.[/red]")
|
|
203
205
|
return
|
|
204
206
|
|
|
207
|
+
# Filter out dead / zero-quota prefixes from provider (e.g. 'guts/' which returns 402 Payment Required)
|
|
208
|
+
# Prioritize top working models: 'ag/', 'cx/'
|
|
209
|
+
def model_sort_key(m_dict):
|
|
210
|
+
mid = m_dict.get("id", "")
|
|
211
|
+
if mid.startswith("ag/"):
|
|
212
|
+
return (0, mid)
|
|
213
|
+
elif mid.startswith("cx/"):
|
|
214
|
+
return (1, mid)
|
|
215
|
+
elif mid.startswith("cbcn/"):
|
|
216
|
+
return (3, mid)
|
|
217
|
+
elif mid.startswith("guts/"):
|
|
218
|
+
return (4, mid)
|
|
219
|
+
return (2, mid)
|
|
220
|
+
|
|
221
|
+
sorted_models = sorted(models, key=model_sort_key)
|
|
222
|
+
|
|
205
223
|
values = []
|
|
206
|
-
for m in
|
|
224
|
+
for m in sorted_models:
|
|
207
225
|
mid = m.get("id", "")
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
226
|
+
# Skip completely unpayable/broken models
|
|
227
|
+
if mid.startswith("guts/"):
|
|
228
|
+
continue
|
|
229
|
+
|
|
230
|
+
badge = ""
|
|
231
|
+
if mid.startswith("ag/"):
|
|
232
|
+
badge = " ⭐ (Ultra Fast & Stable)"
|
|
233
|
+
elif mid.startswith("cx/"):
|
|
234
|
+
badge = " ⚡ (Active)"
|
|
235
|
+
|
|
236
|
+
label = f"{mid}{badge}"
|
|
216
237
|
values.append((mid, label))
|
|
217
238
|
|
|
218
239
|
try:
|
|
@@ -110,9 +110,19 @@ def perform_self_update() -> bool:
|
|
|
110
110
|
res = subprocess.run(pip_cmd)
|
|
111
111
|
if res.returncode == 0:
|
|
112
112
|
print("\n[SUCCESS] YNCLI berhasil diperbarui ke versi terbaru!")
|
|
113
|
-
print("
|
|
113
|
+
print("[YNCLI] Memulai ulang (restarting) CLI secara otomatis...\n")
|
|
114
114
|
# Clear update cache
|
|
115
115
|
CACHE_FILE.unlink(missing_ok=True)
|
|
116
|
+
|
|
117
|
+
# Automatically restart current process with same arguments
|
|
118
|
+
try:
|
|
119
|
+
import os
|
|
120
|
+
# Close old process and replace with new python instance
|
|
121
|
+
os.execv(sys.executable, [sys.executable, "-m", "yncli.main"] + sys.argv[1:])
|
|
122
|
+
except Exception:
|
|
123
|
+
# Fallback for Windows where execv might spawn
|
|
124
|
+
subprocess.run([sys.executable, "-m", "yncli.main"])
|
|
125
|
+
sys.exit(0)
|
|
116
126
|
return True
|
|
117
127
|
else:
|
|
118
128
|
print("\n[ERROR] Gagal memperbarui via pip. Coba jalankan manual:")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.1.4"
|
yncli-1.1.2/yncli/version.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "1.1.2"
|
|
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
|