| 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 |
| |
| |
| 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() |
|
|