def list_prompts()

in devai-cli/src/devai/commands/prompts.py [0:0]


def list_prompts(category: Optional[str], subcategory: Optional[str], tag: Optional[List[str]]):
    """List available prompt templates."""
    # Get all yaml files from both package and user directories
    package_files = []
    user_files = []
    
    # Add package prompts
    package_dir = get_package_prompts_dir()
    if package_dir.exists():
        package_files.extend(package_dir.rglob('*.yaml'))
    
    # Add user prompts (these will override package prompts)
    user_dir = get_user_prompts_dir()
    if user_dir and user_dir.exists():
        user_files.extend(user_dir.rglob('*.yaml'))
    
    if not package_files and not user_files:
        click.echo("No prompt templates found")
        return
    
    # Track which files we've shown to avoid duplicates
    shown_files = set()
    
    def print_prompt_info(prompt_file: Path, is_user_override: bool = False):
        try:
            with open(prompt_file, 'r') as f:
                data = yaml.safe_load(f)
                metadata = data.get('metadata', {})
                
                # Apply filters
                if category and metadata.get('category') != category:
                    return
                if subcategory and metadata.get('subcategory') != subcategory:
                    return
                if tag and not all(t in metadata.get('tags', []) for t in tag):
                    return
                
                # Print prompt info
                click.echo(f"\n{click.style(metadata.get('name', 'Unnamed'), fg='green')}")
                click.echo(f"  Category: {metadata.get('category', 'N/A')}")
                click.echo(f"  Subcategory: {metadata.get('subcategory', 'N/A')}")
                click.echo(f"  Description: {metadata.get('description', 'No description')}")
                click.echo(f"  Tags: {', '.join(metadata.get('tags', []))}")
                if is_user_override:
                    click.echo(f"  Path: {prompt_file.absolute()}")
                    click.echo("  (User override)")
                else:
                    click.echo(f"  Path: {prompt_file.relative_to(prompt_file.parent.parent)}")
                
                shown_files.add(prompt_file.name)
                
        except Exception as e:
            click.echo(f"Error reading {prompt_file}: {str(e)}", err=True)
    
    # First show package prompts (default)
    if package_files:
        click.echo("\n=== Default Prompts ===")
        for prompt_file in package_files:
            # Skip if this file is overridden by a user file
            if prompt_file.name in [f.name for f in user_files]:
                continue
            print_prompt_info(prompt_file)
    
    # Then show user prompts (custom)
    if user_files:
        click.echo("\n=== Custom Prompts ===")
        for prompt_file in user_files:
            print_prompt_info(prompt_file, is_user_override=True)