adelie-ai 0.3.5 → 0.3.6

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.
package/README.md CHANGED
@@ -13,7 +13,7 @@
13
13
  <a href="https://www.npmjs.com/package/adelie-ai"><img src="https://img.shields.io/npm/v/adelie-ai?style=flat-square&logo=npm&color=CB3837" alt="npm version" /></a>
14
14
  <img src="https://img.shields.io/badge/python-3.10+-3776AB?style=flat-square&logo=python&logoColor=white" alt="Python" />
15
15
  <img src="https://img.shields.io/badge/LLM-Gemini%20│%20Ollama-FF6F00?style=flat-square" alt="LLM" />
16
- <img src="https://img.shields.io/badge/tests-748%20passing-2EA043?style=flat-square" alt="Tests" />
16
+ <img src="https://img.shields.io/badge/tests-750%20passing-2EA043?style=flat-square" alt="Tests" />
17
17
  <a href="./LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue?style=flat-square" alt="License" /></a>
18
18
  </p>
19
19
 
@@ -35,7 +35,7 @@
35
35
  Adelie is an autonomous AI orchestrator that plans, codes, reviews, tests, deploys, and evolves software projects through a coordinated multi-agent loop. It ships as a single CLI (`npm install -g adelie-ai`) and requires only an LLM provider — no cloud backend, no account.
36
36
 
37
37
  ```
38
- (o_ Adelie v0.3.0
38
+ (o_ Adelie v0.3.5
39
39
  //\ gemini · gemini-2.5-pro
40
40
  V_/_ Phase: mid_1 | 🛡️3 📡🟢 🧠12/5
41
41
  ```
@@ -12,4 +12,4 @@ def _get_version() -> str:
12
12
  except Exception:
13
13
  pass
14
14
  return "0.0.0"
15
- __version__ = "0.3.5"
15
+ __version__ = "0.3.6"
package/adelie/cli.py CHANGED
@@ -87,6 +87,8 @@ def main() -> None:
87
87
  )
88
88
  parser.add_argument("-v", "--version", action="version",
89
89
  version=f"adelie {__version__}")
90
+ parser.add_argument("--update", action="store_true",
91
+ help="Check npm registry and update Adelie to the latest version")
90
92
  subparsers = parser.add_subparsers(dest="command", help="Available commands")
91
93
 
92
94
  # ── help ──────────────────────────────────────────────────────────────────
@@ -279,6 +281,17 @@ def main() -> None:
279
281
  # ── Splash screen (no command) ────────────────────────────────────────────
280
282
  args = parser.parse_args()
281
283
 
284
+ if getattr(args, "update", False):
285
+ from adelie.updater import check_for_update, do_update
286
+ console.print("[cyan]🔍 Checking for updates...[/cyan]")
287
+ up = check_for_update(__version__, timeout=4.0)
288
+ if up:
289
+ console.print(f"[bold yellow]🐧 A new version has been found! (v{up['current']} → v{up['latest']})[/bold yellow]")
290
+ sys.exit(do_update())
291
+ else:
292
+ console.print(f"[green]✅ You are already running the latest version! (v{__version__})[/green]")
293
+ sys.exit(0)
294
+
282
295
  if not args.command:
283
296
  art = Text(_PENGUIN, no_wrap=True)
284
297
  info = (
@@ -289,6 +302,16 @@ def main() -> None:
289
302
  f" [dim]adelie <command> --help[/dim]\n"
290
303
  )
291
304
  console.print(Columns([Padding(art, (0, 1)), info]))
305
+
306
+ # Check for updates with a fast 1.0s timeout to avoid blocking startup
307
+ try:
308
+ from adelie.updater import check_for_update, format_update_notice
309
+ up = check_for_update(__version__, timeout=1.0)
310
+ if up:
311
+ console.print(format_update_notice(up["current"], up["latest"]))
312
+ except Exception:
313
+ pass
314
+
292
315
  parser.print_help()
293
316
  return
294
317
 
@@ -229,6 +229,17 @@ class AdelieApp:
229
229
  workspace=str(cfg.PROJECT_ROOT),
230
230
  )
231
231
 
232
+ # Start async update check in the background
233
+ try:
234
+ from adelie import __version__
235
+ from adelie.updater import check_for_update_async, format_update_notice
236
+ def _update_callback(result):
237
+ if result:
238
+ self._real_console.print(format_update_notice(result["current"], result["latest"]))
239
+ check_for_update_async(__version__, _update_callback)
240
+ except Exception:
241
+ pass
242
+
232
243
  # Start dashboard server FIRST (so _setup_logger can reference it)
233
244
  self._start_dashboard(cfg)
234
245
 
package/adelie/updater.py CHANGED
@@ -62,11 +62,11 @@ def format_update_notice(current: str, latest: str) -> str:
62
62
  """Return a cute, Rich-markup update notification string."""
63
63
  return (
64
64
  f"\n"
65
- f" [bold yellow]꼬르르... 🐧 버전이 나왔어요![/bold yellow]\n"
65
+ f" [bold yellow]Brrr... 🐧 A new version is available![/bold yellow]\n"
66
66
  f" [dim]v{current}[/dim] → [bold cyan]v{latest}[/bold cyan] "
67
- f"[dim](최신 Adelie 펭귄이 기다리고 있어요)[/dim]\n"
67
+ f"[dim](A fresh Adelie penguin is waiting for you)[/dim]\n"
68
68
  f"\n"
69
- f" [bold]adelie --update[/bold] [dim]로 업데이트할 있어요 ✨[/dim]\n"
69
+ f" Run [bold]adelie --update[/bold] to update now ✨\n"
70
70
  )
71
71
 
72
72
 
@@ -80,7 +80,7 @@ def do_update() -> int:
80
80
  from rich.console import Console
81
81
 
82
82
  console = Console()
83
- console.print("\n[bold cyan]🐧 Adelie 업데이트 중...[/bold cyan]")
83
+ console.print("\n[bold cyan]🐧 Updating Adelie...[/bold cyan]")
84
84
  console.print("[dim]npm install -g adelie-ai@latest[/dim]\n")
85
85
 
86
86
  try:
@@ -89,13 +89,13 @@ def do_update() -> int:
89
89
  check=False,
90
90
  )
91
91
  if result.returncode == 0:
92
- console.print("\n[bold green]✅ 업데이트 완료! 가장 귀여운 버전이 됐어요 🐧✨[/bold green]")
93
- console.print("[dim]다시 실행: adelie --version[/dim]\n")
92
+ console.print("\n[bold green]✅ Update complete! You are now running the cutest version 🐧✨[/bold green]")
93
+ console.print("[dim]Check version: adelie --version[/dim]\n")
94
94
  else:
95
- console.print("\n[bold red]❌ 업데이트 실패했어요.[/bold red]")
96
- console.print("[dim]직접 실행해보세요: npm install -g adelie-ai@latest[/dim]\n")
95
+ console.print("\n[bold red]❌ Update failed.[/bold red]")
96
+ console.print("[dim]Try running: npm install -g adelie-ai@latest[/dim]\n")
97
97
  return result.returncode
98
98
  except FileNotFoundError:
99
- console.print("[bold red]❌ npm 찾을 없어요.[/bold red]")
100
- console.print("[dim]Node.js 설치한 다시 시도해주세요: https://nodejs.org[/dim]\n")
99
+ console.print("[bold red]❌ npm command not found.[/bold red]")
100
+ console.print("[dim]Please install Node.js and try again: https://nodejs.org[/dim]\n")
101
101
  return 1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "adelie-ai",
3
- "version": "0.3.5",
3
+ "version": "0.3.6",
4
4
  "description": "Adelie — Self-Communicating Autonomous AI Loop CLI",
5
5
  "bin": {
6
6
  "adelie": "bin/adelie.js"