COGENBAI / cogenbai /cli /main.py
algoscienceacademy's picture
cogenbai
bd91486
Raw
History Blame Contribute Delete
2.43 kB
import click
from ..core.model import CogenBAI
from ..languages.generator import LanguageGenerator
from ..config import CogenConfig
@click.group()
def cli():
"""COGENBAI Command Line Interface"""
pass
@cli.command()
@click.argument('prompt')
@click.option('--language', '-l', required=True, help='Target programming language')
@click.option('--framework', '-f', help='Framework to use')
def generate(prompt: str, language: str, framework: str = None):
"""Generate code from a prompt"""
model = CogenBAI()
result = model.generate_code(prompt, language)
click.echo(result)
@cli.command()
def list_languages():
"""List supported programming languages"""
generator = LanguageGenerator()
for lang, config in generator.language_configs.items():
click.echo(f"\n{lang}:")
click.echo(f" Frameworks: {', '.join(config['frameworks'])}")
click.echo(f" Package Manager: {config['package_manager']}")
@cli.command()
@click.argument('project_name')
@click.option('--template', '-t', default='python_project', help='Project template to use')
@click.option('--description', '-d', default='A new project', help='Project description')
def scaffold(project_name: str, template: str, description: str):
"""Generate a new project scaffold"""
from ..templates.registry import TemplateRegistry
registry = TemplateRegistry()
template_data = registry.get_template('scaffolds', template)
if not template_data:
click.echo(f"Template {template} not found")
return
# Create project structure
import os
import json
structure = json.loads(template_data)['structure']
base_path = os.path.join(os.getcwd(), project_name)
for path, content in _walk_structure(structure):
full_path = os.path.join(base_path, path)
os.makedirs(os.path.dirname(full_path), exist_ok=True)
if isinstance(content, str):
with open(full_path, 'w') as f:
f.write(content.replace('${project_name}', project_name)
.replace('${project_description}', description))
def _walk_structure(structure, parent=""):
for name, content in structure.items():
path = os.path.join(parent, name)
if isinstance(content, dict):
yield from _walk_structure(content, path)
else:
yield path, content
if __name__ == '__main__':
cli()