@@ -638,17 +638,35 @@ def fetch_repo(
638638
639639@plugin_app .command ("info" )
640640def plugin_info (
641- app_type : str = typer .Option (
642- "claude" ,
641+ app_type : Optional [ str ] = typer .Option (
642+ None ,
643643 "--app" ,
644644 "-a" ,
645- help = f"App type ({ ', ' .join (VALID_APP_TYPES )} )" ,
645+ help = f"App type ({ ', ' .join (VALID_APP_TYPES )} ). If not specified, shows info for all apps. " ,
646646 ),
647647):
648- """Show plugin system information for an app."""
648+ """Show plugin system information for an app, or all apps if none specified ."""
649649 from code_assistant_manager .cli .option_utils import resolve_single_app
650650
651+ # If no app specified, show info for all apps
652+ if app_type is None :
653+ typer .echo (
654+ f"\n { Colors .BOLD } Plugin System Information (All Apps):{ Colors .RESET } \n "
655+ )
656+
657+ for app in VALID_APP_TYPES :
658+ show_app_info (app )
659+ if app != VALID_APP_TYPES [- 1 ]: # Don't add separator after last app
660+ typer .echo (f"\n { Colors .CYAN } { '=' * 50 } { Colors .RESET } \n " )
661+ return
662+
663+ # Show info for specific app
651664 app = resolve_single_app (app_type , VALID_APP_TYPES , default = "claude" )
665+ show_app_info (app )
666+
667+
668+ def show_app_info (app : str ):
669+ """Show plugin system information for a specific app."""
652670 handler = get_handler (app )
653671 manager = PluginManager ()
654672
@@ -686,34 +704,35 @@ def plugin_info(
686704 )
687705 typer .echo (f" { status } { app .capitalize ()} CLI: { cli_path or 'Not found' } " )
688706
689- # Get configured repos from CAM
707+ # Get configured repos from CAM (only show once for all apps)
690708 all_repos = manager .get_all_repos ()
691709 configured_marketplaces = {
692710 k : v for k , v in all_repos .items () if v .type == "marketplace"
693711 }
694712 configured_plugins = {k : v for k , v in all_repos .items () if v .type == "plugin" }
695713
696- # Show configured marketplaces (from CAM)
697- typer .echo (
698- f"\n { Colors .CYAN } Configured Marketplaces (CAM):{ Colors .RESET } { len (configured_marketplaces )} "
699- )
700- for name , repo in sorted (configured_marketplaces .items ()):
701- if repo .repo_owner and repo .repo_name :
702- typer .echo (f" • { name } ({ repo .repo_owner } /{ repo .repo_name } )" )
703- else :
704- typer .echo (f" • { name } " )
705-
706- # Show configured plugins (from CAM)
707- if configured_plugins :
714+ # Show configured marketplaces (from CAM) - only for the first app
715+ if app == VALID_APP_TYPES [0 ]: # Only show global config once
708716 typer .echo (
709- f"\n { Colors .CYAN } Configured Plugins (CAM):{ Colors .RESET } { len (configured_plugins )} "
717+ f"\n { Colors .CYAN } Configured Marketplaces (CAM):{ Colors .RESET } { len (configured_marketplaces )} "
710718 )
711- for name , repo in sorted (configured_plugins .items ()):
719+ for name , repo in sorted (configured_marketplaces .items ()):
712720 if repo .repo_owner and repo .repo_name :
713721 typer .echo (f" • { name } ({ repo .repo_owner } /{ repo .repo_name } )" )
714722 else :
715723 typer .echo (f" • { name } " )
716724
725+ # Show configured plugins (from CAM)
726+ if configured_plugins :
727+ typer .echo (
728+ f"\n { Colors .CYAN } Configured Plugins (CAM):{ Colors .RESET } { len (configured_plugins )} "
729+ )
730+ for name , repo in sorted (configured_plugins .items ()):
731+ if repo .repo_owner and repo .repo_name :
732+ typer .echo (f" • { name } ({ repo .repo_owner } /{ repo .repo_name } )" )
733+ else :
734+ typer .echo (f" • { name } " )
735+
717736 # Show installed marketplaces (from app)
718737 installed_marketplaces = handler .get_known_marketplaces ()
719738 typer .echo (
0 commit comments