from _typeshed import Incomplete
from argparse import ArgumentParser, Namespace
from typing import Any

async def create_module(path: str, name: str) -> None: ...

class BaseCommand:
    name: str
    help: str
    parser: ArgumentParser | None
    def __init__(self) -> None: ...
    async def add_arguments(self, parser: ArgumentParser) -> None: ...
    async def handle(self, *args: Namespace, **kwargs: dict[str, Any]) -> None: ...

COMMANDS: dict[str, type[BaseCommand]]

def register_command(cls) -> type[BaseCommand]: ...

class Manager:
    installed_apps: list[str]
    parser: ArgumentParser
    commands: dict[str, BaseCommand]
    subparsers: Incomplete
    def __init__(self, INSTALLED_APPS: list[str], COMMANDS: dict[str, BaseCommand]) -> None: ...
    async def internal_command(self, commands: list[BaseCommand]) -> None: ...
    async def load_commands(self) -> None: ...
    async def execute(self) -> None: ...
