Lightweight CLI discovery for plugin command registration.
This module provides minimal plugin discovery specifically for CLI command
registration, loading only plugin manifests without full initialization.
discover_plugin_cli_extensions
discover_plugin_cli_extensions(settings=None)
Lightweight discovery of plugin CLI extensions.
Only loads plugin factories and manifests, no runtime initialization.
Used during CLI app creation to register plugin commands/arguments.
Parameters:
| Name |
Type |
Description |
Default |
settings
|
Any | None
|
Optional settings object to filter plugins
|
None
|
Returns:
Source code in ccproxy/core/plugins/cli_discovery.py
| def discover_plugin_cli_extensions(
settings: Any | None = None,
) -> list[tuple[str, PluginManifest]]:
"""Lightweight discovery of plugin CLI extensions.
Only loads plugin factories and manifests, no runtime initialization.
Used during CLI app creation to register plugin commands/arguments.
Args:
settings: Optional settings object to filter plugins
Returns:
List of (plugin_name, manifest) tuples for plugins with CLI extensions.
"""
plugin_manifests = []
# Discover from filesystem (plugins/ directory)
try:
filesystem_manifests = _discover_filesystem_cli_extensions()
plugin_manifests.extend(filesystem_manifests)
except Exception as e:
logger.debug("filesystem_cli_discovery_failed", error=str(e))
# Discover from entry points
try:
entry_point_manifests = _discover_entry_point_cli_extensions()
plugin_manifests.extend(entry_point_manifests)
except Exception as e:
logger.debug("entry_point_cli_discovery_failed", error=str(e))
# Remove duplicates (filesystem takes precedence)
seen_names = set()
unique_manifests = []
for name, manifest in plugin_manifests:
if name not in seen_names:
unique_manifests.append((name, manifest))
seen_names.add(name)
# Apply plugin filtering if settings provided
if settings is not None:
combined_denylist = build_combined_plugin_denylist(
getattr(settings, "disabled_plugins", None),
getattr(settings, "plugins", None),
)
plugin_filter = PluginFilter(
enabled_plugins=getattr(settings, "enabled_plugins", None),
disabled_plugins=combined_denylist,
)
filtered_manifests = []
for name, manifest in unique_manifests:
if plugin_filter.is_enabled(name):
filtered_manifests.append((name, manifest))
else:
logger.debug(
"plugin_cli_extension_disabled", plugin=name, category="plugin"
)
return filtered_manifests
return unique_manifests
|