@@ -32,6 +32,7 @@ def _load_builtin_plugin_repos() -> Dict[str, PluginRepo]:
3232 plugin_path = repo_data .get ("pluginPath" ),
3333 enabled = repo_data .get ("enabled" , True ),
3434 type = repo_data .get ("type" , "plugin" ),
35+ aliases = repo_data .get ("aliases" , []),
3536 )
3637 logger .debug (f"Loaded { len (repos )} builtin plugin repos" )
3738 except Exception as e :
@@ -234,8 +235,11 @@ def get_builtin_repos(self) -> Dict[str, PluginRepo]:
234235 return BUILTIN_PLUGIN_REPOS .copy ()
235236
236237 def get_builtin_repo (self , name : str ) -> Optional [PluginRepo ]:
237- """Get a built-in plugin repository by name."""
238- return BUILTIN_PLUGIN_REPOS .get (name )
238+ """Get a built-in plugin repository by name (supports aliases)."""
239+ resolved = self ._resolve_repo_name (name , self .get_builtin_repos ())
240+ if resolved :
241+ return BUILTIN_PLUGIN_REPOS .get (resolved )
242+ return None
239243
240244 # ==================== User Plugin Repos ====================
241245
@@ -258,6 +262,7 @@ def _load_user_repos(self) -> Dict[str, PluginRepo]:
258262 plugin_path = repo_data .get ("pluginPath" ),
259263 enabled = repo_data .get ("enabled" , True ),
260264 type = repo_data .get ("type" , "plugin" ),
265+ aliases = repo_data .get ("aliases" , []),
261266 )
262267 return repos
263268 except Exception as e :
@@ -275,9 +280,12 @@ def get_user_repos(self) -> Dict[str, PluginRepo]:
275280 return self ._load_user_repos ()
276281
277282 def get_user_repo (self , name : str ) -> Optional [PluginRepo ]:
278- """Get a user plugin repository by name."""
279- repos = self ._load_user_repos ()
280- return repos .get (name )
283+ """Get a user plugin repository by name (supports aliases)."""
284+ user_repos = self ._load_user_repos ()
285+ resolved = self ._resolve_repo_name (name , user_repos )
286+ if resolved :
287+ return user_repos .get (resolved )
288+ return None
281289
282290 def add_user_repo (self , repo : PluginRepo ) -> None :
283291 """Add or update a user plugin repository."""
@@ -302,14 +310,28 @@ def get_all_repos(self) -> Dict[str, PluginRepo]:
302310 repos .update (self ._load_user_repos ())
303311 return repos
304312
313+ def _resolve_repo_name (
314+ self , name : str , repos : Dict [str , PluginRepo ]
315+ ) -> Optional [str ]:
316+ """Resolve a repo name, checking for aliases. Returns the canonical name or None."""
317+ # First check if it's a direct match
318+ if name in repos :
319+ return name
320+
321+ # Check if it's an alias
322+ for canonical_name , repo in repos .items ():
323+ if name in repo .aliases :
324+ return canonical_name
325+
326+ return None
327+
305328 def get_repo (self , name : str ) -> Optional [PluginRepo ]:
306- """Get a plugin repo by name (user repos take precedence)."""
307- # Check user repos first
308- user_repo = self .get_user_repo (name )
309- if user_repo :
310- return user_repo
311- # Fall back to builtin
312- return self .get_builtin_repo (name )
329+ """Get a plugin repo by name, supporting aliases (user repos take precedence)."""
330+ all_repos = self .get_all_repos ()
331+ resolved = self ._resolve_repo_name (name , all_repos )
332+ if resolved :
333+ return all_repos .get (resolved )
334+ return None
313335
314336 # ==================== Installation Operations ====================
315337
0 commit comments