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)