agentinit-cli 0.1.0__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/PKG-INFO +4 -2
  2. agentinit_cli-0.3.0/agentinit/cli.py +134 -0
  3. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/generator.py +54 -8
  4. agentinit_cli-0.3.0/agentinit/templates/common/pyproject.toml.j2 +54 -0
  5. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/pyproject.toml +5 -3
  6. agentinit_cli-0.1.0/agentinit/cli.py +0 -83
  7. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/README.md +0 -0
  8. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/__init__.py +0 -0
  9. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/autogen/agents/base_agent.py.j2 +0 -0
  10. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/autogen/main.py.j2 +0 -0
  11. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/autogen/requirements.txt.j2 +0 -0
  12. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/autogen/tools/sample_tool.py.j2 +0 -0
  13. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/common/.env.example.j2 +0 -0
  14. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/common/Dockerfile.j2 +0 -0
  15. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/common/README.md.j2 +0 -0
  16. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/common/config.yaml.j2 +0 -0
  17. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/crewai/agents/base_agent.py.j2 +0 -0
  18. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/crewai/main.py.j2 +0 -0
  19. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/crewai/requirements.txt.j2 +0 -0
  20. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/crewai/tools/sample_tool.py.j2 +0 -0
  21. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/google_adk/agents/base_agent.py.j2 +0 -0
  22. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/google_adk/main.py.j2 +0 -0
  23. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/google_adk/requirements.txt.j2 +0 -0
  24. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/google_adk/tools/sample_tool.py.j2 +0 -0
  25. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/langgraph/agents/base_agent.py.j2 +0 -0
  26. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/langgraph/main.py.j2 +0 -0
  27. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/langgraph/requirements.txt.j2 +0 -0
  28. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/langgraph/tools/sample_tool.py.j2 +0 -0
  29. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/openai_agents/agents/base_agent.py.j2 +0 -0
  30. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/openai_agents/main.py.j2 +0 -0
  31. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/openai_agents/requirements.txt.j2 +0 -0
  32. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/openai_agents/tools/sample_tool.py.j2 +0 -0
  33. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/smolagents/agents/base_agent.py.j2 +0 -0
  34. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/smolagents/main.py.j2 +0 -0
  35. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/smolagents/requirements.txt.j2 +0 -0
  36. {agentinit_cli-0.1.0 → agentinit_cli-0.3.0}/agentinit/templates/smolagents/tools/sample_tool.py.j2 +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentinit-cli
3
- Version: 0.1.0
3
+ Version: 0.3.0
4
4
  Summary: A CLI tool to scaffold production-ready LLM agent projects
5
5
  License: MIT
6
6
  Keywords: llm,agents,scaffolding,langgraph,crewai,autogen,google-adk,cli
@@ -18,7 +18,9 @@ Classifier: Programming Language :: Python :: 3.14
18
18
  Classifier: Topic :: Software Development :: Code Generators
19
19
  Requires-Dist: click (>=8.1.0,<9.0.0)
20
20
  Requires-Dist: jinja2 (>=3.1.0,<4.0.0)
21
- Requires-Dist: rich (>=13.0.0,<14.0.0)
21
+ Requires-Dist: questionary (>=2.0.0,<3.0.0)
22
+ Requires-Dist: requests (>=2.31.0,<3.0.0)
23
+ Requires-Dist: rich (>=13.0.0)
22
24
  Project-URL: Homepage, https://github.com/NorthCommits/agentinit
23
25
  Project-URL: Repository, https://github.com/NorthCommits/agentinit
24
26
  Description-Content-Type: text/markdown
@@ -0,0 +1,134 @@
1
+ import click
2
+ import questionary
3
+ import requests
4
+ from rich.console import Console
5
+ from rich.table import Table
6
+ from agentinit.generator import generate_project, add_agent
7
+
8
+ console = Console()
9
+
10
+ SUPPORTED_FRAMEWORKS = ["langgraph", "crewai", "autogen", "google_adk", "openai_agents", "smolagents"]
11
+ SUPPORTED_LLMS = ["openai", "anthropic", "groq", "azure", "bedrock", "gemini"]
12
+ PACKAGE_MANAGERS = ["pip", "uv"]
13
+ API_URL = "https://agentinit-api.onrender.com/analyze"
14
+
15
+
16
+ def get_smart_structure(description: str, framework: str) -> dict | None:
17
+ try:
18
+ response = requests.post(
19
+ API_URL,
20
+ json={"description": description, "framework": framework},
21
+ timeout=30,
22
+ )
23
+ if response.status_code == 200:
24
+ return response.json()
25
+ except Exception:
26
+ pass
27
+ return None
28
+
29
+
30
+ @click.group()
31
+ def app():
32
+ """agentinit - scaffold LLM agent projects in seconds"""
33
+ pass
34
+
35
+
36
+ @app.command("create")
37
+ @click.argument("project_name")
38
+ def create(project_name):
39
+ """Scaffold a new LLM agent project interactively."""
40
+
41
+ console.print(f"\n[bold green]Creating project:[/bold green] [cyan]{project_name}[/cyan]\n")
42
+
43
+ framework = questionary.select(
44
+ "Select a framework:",
45
+ choices=SUPPORTED_FRAMEWORKS,
46
+ ).ask()
47
+
48
+ if not framework:
49
+ raise click.Abort()
50
+
51
+ llm = questionary.select(
52
+ "Select an LLM provider:",
53
+ choices=SUPPORTED_LLMS,
54
+ ).ask()
55
+
56
+ if not llm:
57
+ raise click.Abort()
58
+
59
+ package_manager = questionary.select(
60
+ "Select a package manager:",
61
+ choices=PACKAGE_MANAGERS,
62
+ ).ask()
63
+
64
+ if not package_manager:
65
+ raise click.Abort()
66
+
67
+ description = questionary.text(
68
+ "Describe your project in one line (press Enter to skip):",
69
+ ).ask()
70
+
71
+ smart_structure = None
72
+ if description and description.strip():
73
+ console.print("\n [dim]Analyzing project description...[/dim]")
74
+ smart_structure = get_smart_structure(description.strip(), framework)
75
+ if smart_structure:
76
+ console.print(" [green]Smart structure generated![/green]")
77
+ else:
78
+ console.print(" [yellow]Could not reach API, using default structure.[/yellow]")
79
+
80
+ console.print(f"\n Framework : [cyan]{framework}[/cyan]")
81
+ console.print(f" LLM Provider : [cyan]{llm}[/cyan]")
82
+ console.print(f" Package Manager : [cyan]{package_manager}[/cyan]\n")
83
+
84
+ success = generate_project(project_name, framework, llm, package_manager, smart_structure)
85
+
86
+ if not success:
87
+ raise click.Abort()
88
+
89
+ console.print(f"\n[bold green]Done![/bold green] Your project is ready at [cyan]./{project_name}[/cyan]")
90
+ console.print("\nNext steps:")
91
+ console.print(f" [yellow]cd {project_name}[/yellow]")
92
+ console.print(" [yellow]cp .env.example .env[/yellow]")
93
+
94
+ if package_manager == "uv":
95
+ console.print(" [yellow]uv sync[/yellow]")
96
+ console.print(" [yellow]uv run python main.py[/yellow]\n")
97
+ else:
98
+ console.print(" [yellow]pip install -r requirements.txt[/yellow]")
99
+ console.print(" [yellow]python main.py[/yellow]\n")
100
+
101
+
102
+ @app.command("add-agent")
103
+ @click.argument("agent_name")
104
+ @click.option("--framework", "-f", required=True, help="Framework of the existing project")
105
+ def add_agent_cmd(agent_name, framework):
106
+ """Add a new agent to an existing scaffolded project."""
107
+ if framework not in SUPPORTED_FRAMEWORKS:
108
+ console.print(f"[red]Framework '{framework}' is not supported.[/red]")
109
+ console.print(f"Supported: {', '.join(SUPPORTED_FRAMEWORKS)}")
110
+ raise click.Abort()
111
+
112
+ console.print(f"\n[bold green]Adding agent:[/bold green] {agent_name}")
113
+ console.print(f" Framework : [cyan]{framework}[/cyan]\n")
114
+
115
+ success = add_agent(agent_name, framework)
116
+
117
+ if not success:
118
+ raise click.Abort()
119
+
120
+ console.print(f"\n[bold green]Done![/bold green] Agent [cyan]agents/{agent_name}.py[/cyan] created.\n")
121
+
122
+
123
+ @app.command("list-frameworks")
124
+ def list_frameworks():
125
+ """List all supported frameworks and LLM providers."""
126
+ table = Table(title="Supported Frameworks & LLM Providers")
127
+ table.add_column("Frameworks", style="cyan")
128
+ table.add_column("LLM Providers", style="green")
129
+
130
+ rows = list(zip(SUPPORTED_FRAMEWORKS, SUPPORTED_LLMS))
131
+ for fw, llm in rows:
132
+ table.add_row(fw, llm)
133
+
134
+ console.print(table)
@@ -17,7 +17,6 @@ LLM_CONFIG = {
17
17
 
18
18
  FRAMEWORK_FILES = [
19
19
  ("main.py.j2", "main.py"),
20
- ("requirements.txt.j2", "requirements.txt"),
21
20
  ("agents/base_agent.py.j2", "agents/base_agent.py"),
22
21
  ("tools/sample_tool.py.j2", "tools/sample_tool.py"),
23
22
  ]
@@ -35,7 +34,27 @@ def write_file(output_path: Path, content: str):
35
34
  console.print(f" [green]created[/green] {output_path}")
36
35
 
37
36
 
38
- def generate_project(project_name: str, framework: str, llm: str) -> bool:
37
+ def write_stub(output_path: Path, name: str, kind: str):
38
+ """Write a clean stub file with just a docstring and pass."""
39
+ class_name = "".join(word.capitalize() for word in name.split("_"))
40
+ if kind == "agent":
41
+ content = f'"""\n{class_name} agent stub.\nReplace this with your agent logic.\n"""\n\n\nclass {class_name}:\n """Agent: {name}"""\n\n def run(self, *args, **kwargs):\n raise NotImplementedError\n'
42
+ elif kind == "tool":
43
+ content = f'"""\n{class_name} tool stub.\nReplace this with your tool logic.\n"""\n\n\ndef {name}(*args, **kwargs):\n """{class_name} tool. Replace with real logic."""\n raise NotImplementedError\n'
44
+ elif kind == "test":
45
+ content = f'"""\nTests for {name}.\n"""\n\n\ndef {name}():\n """TODO: implement test"""\n pass\n'
46
+ else:
47
+ content = f'"""\n{class_name} stub.\nReplace this with your logic.\n"""\n\n\nclass {class_name}:\n """Module: {name}"""\n pass\n'
48
+ write_file(output_path, content)
49
+
50
+
51
+ def generate_project(
52
+ project_name: str,
53
+ framework: str,
54
+ llm: str,
55
+ package_manager: str = "pip",
56
+ smart_structure: dict | None = None,
57
+ ) -> bool:
39
58
  project_path = Path(project_name)
40
59
 
41
60
  if project_path.exists():
@@ -46,14 +65,24 @@ def generate_project(project_name: str, framework: str, llm: str) -> bool:
46
65
  "project_name": project_name,
47
66
  "framework": framework,
48
67
  "llm_provider": llm,
68
+ "package_manager": package_manager,
49
69
  **LLM_CONFIG[llm],
50
70
  }
51
71
 
52
72
  fw_env = Environment(loader=FileSystemLoader(str(TEMPLATES_DIR / framework)))
73
+
53
74
  for template_file, output_file in FRAMEWORK_FILES:
54
75
  template = fw_env.get_template(template_file)
55
76
  write_file(project_path / output_file, template.render(**context))
56
77
 
78
+ if package_manager == "pip":
79
+ template = fw_env.get_template("requirements.txt.j2")
80
+ write_file(project_path / "requirements.txt", template.render(**context))
81
+ else:
82
+ common_env = Environment(loader=FileSystemLoader(str(TEMPLATES_DIR / "common")))
83
+ template = common_env.get_template("pyproject.toml.j2")
84
+ write_file(project_path / "pyproject.toml", template.render(**context))
85
+
57
86
  common_env = Environment(loader=FileSystemLoader(str(TEMPLATES_DIR / "common")))
58
87
  for template_file, output_file in COMMON_FILES:
59
88
  template = common_env.get_template(template_file)
@@ -61,6 +90,23 @@ def generate_project(project_name: str, framework: str, llm: str) -> bool:
61
90
 
62
91
  env_content = build_env_file(llm)
63
92
  write_file(project_path / ".env.example", env_content)
93
+
94
+ if smart_structure:
95
+ for agent in smart_structure.get("agents", []):
96
+ write_stub(project_path / "agents" / f"{agent}.py", agent, "agent")
97
+
98
+ for tool in smart_structure.get("tools", []):
99
+ write_stub(project_path / "tools" / f"{tool}.py", tool, "tool")
100
+
101
+ for item in smart_structure.get("core", []):
102
+ write_stub(project_path / "core" / f"{item}.py", item, "core")
103
+
104
+ for item in smart_structure.get("utils", []):
105
+ write_stub(project_path / "utils" / f"{item}.py", item, "util")
106
+
107
+ for test in smart_structure.get("tests", []):
108
+ write_stub(project_path / "tests" / f"{test}.py", test, "test")
109
+
64
110
  return True
65
111
 
66
112
 
@@ -91,13 +137,13 @@ def add_agent(agent_name: str, framework: str) -> bool:
91
137
  console.print(f"[red]Agent '{agent_name}.py' already exists. Aborting.[/red]")
92
138
  return False
93
139
 
94
- template_path = TEMPLATES_DIR / framework / "agents" / "base_agent.py.j2"
95
- if not template_path.exists():
96
- console.print(f"[red]No template found for framework '{framework}'.[/red]")
97
- return False
98
-
99
140
  env = Environment(loader=FileSystemLoader(str(TEMPLATES_DIR / framework / "agents")))
100
141
  template = env.get_template("base_agent.py.j2")
101
- content = template.render(project_name=agent_name, framework=framework, llm_provider="openai", **LLM_CONFIG["openai"])
142
+ content = template.render(
143
+ project_name=agent_name,
144
+ framework=framework,
145
+ llm_provider="openai",
146
+ **LLM_CONFIG["openai"]
147
+ )
102
148
  write_file(output_path, content)
103
149
  return True
@@ -0,0 +1,54 @@
1
+ [project]
2
+ name = "{{ project_name }}"
3
+ version = "0.1.0"
4
+ description = "A {{ framework }} agent project scaffolded with agentinit"
5
+ requires-python = ">=3.10"
6
+ dependencies = [
7
+ {% if framework == "langgraph" %}
8
+ "langgraph",
9
+ {% if llm_provider == "openai" %}"openai", "langchain-openai",{% endif %}
10
+ {% if llm_provider == "anthropic" %}"anthropic", "langchain-anthropic",{% endif %}
11
+ {% if llm_provider == "groq" %}"groq", "langchain-groq",{% endif %}
12
+ {% if llm_provider == "azure" %}"openai", "langchain-openai", "azure-identity",{% endif %}
13
+ {% if llm_provider == "bedrock" %}"boto3", "anthropic[bedrock]",{% endif %}
14
+ {% if llm_provider == "gemini" %}"google-generativeai",{% endif %}
15
+ {% elif framework == "crewai" %}
16
+ "crewai",
17
+ {% if llm_provider == "openai" %}"openai",{% endif %}
18
+ {% if llm_provider == "anthropic" %}"anthropic",{% endif %}
19
+ {% if llm_provider == "groq" %}"groq",{% endif %}
20
+ {% if llm_provider == "azure" %}"openai", "azure-identity",{% endif %}
21
+ {% if llm_provider == "bedrock" %}"boto3", "anthropic[bedrock]",{% endif %}
22
+ {% if llm_provider == "gemini" %}"google-generativeai",{% endif %}
23
+ {% elif framework == "autogen" %}
24
+ "pyautogen",
25
+ {% if llm_provider == "openai" %}"openai",{% endif %}
26
+ {% if llm_provider == "anthropic" %}"anthropic",{% endif %}
27
+ {% if llm_provider == "groq" %}"groq",{% endif %}
28
+ {% if llm_provider == "azure" %}"openai", "azure-identity",{% endif %}
29
+ {% if llm_provider == "bedrock" %}"boto3", "anthropic[bedrock]",{% endif %}
30
+ {% if llm_provider == "gemini" %}"google-generativeai",{% endif %}
31
+ {% elif framework == "google_adk" %}
32
+ "google-adk",
33
+ {% if llm_provider == "openai" %}"openai",{% endif %}
34
+ {% if llm_provider == "anthropic" %}"anthropic",{% endif %}
35
+ {% if llm_provider == "groq" %}"groq",{% endif %}
36
+ {% if llm_provider == "azure" %}"openai", "azure-identity",{% endif %}
37
+ {% if llm_provider == "bedrock" %}"boto3", "anthropic[bedrock]",{% endif %}
38
+ {% if llm_provider == "gemini" %}"google-generativeai",{% endif %}
39
+ {% elif framework == "openai_agents" %}
40
+ "openai-agents",
41
+ {% if llm_provider == "azure" %}"azure-identity",{% endif %}
42
+ {% if llm_provider == "bedrock" %}"boto3", "anthropic[bedrock]",{% endif %}
43
+ {% if llm_provider == "gemini" %}"google-generativeai",{% endif %}
44
+ {% elif framework == "smolagents" %}
45
+ "smolagents",
46
+ {% if llm_provider == "openai" %}"openai",{% endif %}
47
+ {% if llm_provider == "anthropic" %}"anthropic",{% endif %}
48
+ {% if llm_provider == "groq" %}"groq",{% endif %}
49
+ {% if llm_provider == "azure" %}"openai", "azure-identity",{% endif %}
50
+ {% if llm_provider == "bedrock" %}"boto3", "anthropic[bedrock]",{% endif %}
51
+ {% if llm_provider == "gemini" %}"google-generativeai",{% endif %}
52
+ {% endif %}
53
+ "python-dotenv",
54
+ ]
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "agentinit-cli"
3
- version = "0.1.0"
3
+ version = "0.3.0"
4
4
  description = "A CLI tool to scaffold production-ready LLM agent projects"
5
5
  authors = ["Swapnil Bhattacharya <your@email.com>"]
6
6
  readme = "README.md"
@@ -20,7 +20,9 @@ packages = [{include = "agentinit"}]
20
20
  python = "^3.10"
21
21
  click = "^8.1.0"
22
22
  jinja2 = "^3.1.0"
23
- rich = "^13.0.0"
23
+ rich = ">=13.0.0"
24
+ questionary = "^2.0.0"
25
+ requests = "^2.31.0"
24
26
 
25
27
  [tool.poetry.group.dev.dependencies]
26
28
  pytest = "^8.0.0"
@@ -30,4 +32,4 @@ agentinit = "agentinit.cli:app"
30
32
 
31
33
  [build-system]
32
34
  requires = ["poetry-core"]
33
- build-backend = "poetry.core.masonry.api"
35
+ build-backend = "poetry.core.masonry.api"
@@ -1,83 +0,0 @@
1
- import click
2
- from rich.console import Console
3
- from rich.table import Table
4
- from agentinit.generator import generate_project, add_agent
5
-
6
- console = Console()
7
-
8
- SUPPORTED_FRAMEWORKS = ["langgraph", "crewai", "autogen", "google_adk", "openai_agents", "smolagents"]
9
- SUPPORTED_LLMS = ["openai", "anthropic", "groq", "azure", "bedrock", "gemini"]
10
-
11
-
12
- @click.group()
13
- def app():
14
- """agentinit - scaffold LLM agent projects in seconds"""
15
- pass
16
-
17
-
18
- @app.command("init")
19
- @click.argument("project_name")
20
- @click.option("--framework", "-f", required=True, help="Agent framework to use")
21
- @click.option("--llm", "-l", required=True, help="LLM provider to use")
22
- def init(project_name, framework, llm):
23
- """Scaffold a new LLM agent project."""
24
- if framework not in SUPPORTED_FRAMEWORKS:
25
- console.print(f"[red]Framework '{framework}' is not supported.[/red]")
26
- console.print(f"Supported: {', '.join(SUPPORTED_FRAMEWORKS)}")
27
- raise click.Abort()
28
-
29
- if llm not in SUPPORTED_LLMS:
30
- console.print(f"[red]LLM provider '{llm}' is not supported.[/red]")
31
- console.print(f"Supported: {', '.join(SUPPORTED_LLMS)}")
32
- raise click.Abort()
33
-
34
- console.print(f"\n[bold green]Scaffolding project:[/bold green] {project_name}")
35
- console.print(f" Framework : [cyan]{framework}[/cyan]")
36
- console.print(f" LLM : [cyan]{llm}[/cyan]\n")
37
-
38
- success = generate_project(project_name, framework, llm)
39
-
40
- if not success:
41
- raise click.Abort()
42
-
43
- console.print(f"\n[bold green]Done![/bold green] Your project is ready at [cyan]./{project_name}[/cyan]")
44
- console.print("\nNext steps:")
45
- console.print(f" [yellow]cd {project_name}[/yellow]")
46
- console.print(" [yellow]cp .env.example .env[/yellow]")
47
- console.print(" [yellow]pip install -r requirements.txt[/yellow]")
48
- console.print(" [yellow]python main.py[/yellow]\n")
49
-
50
-
51
- @app.command("add-agent")
52
- @click.argument("agent_name")
53
- @click.option("--framework", "-f", required=True, help="Framework of the existing project")
54
- def add_agent_cmd(agent_name, framework):
55
- """Add a new agent to an existing scaffolded project."""
56
- if framework not in SUPPORTED_FRAMEWORKS:
57
- console.print(f"[red]Framework '{framework}' is not supported.[/red]")
58
- console.print(f"Supported: {', '.join(SUPPORTED_FRAMEWORKS)}")
59
- raise click.Abort()
60
-
61
- console.print(f"\n[bold green]Adding agent:[/bold green] {agent_name}")
62
- console.print(f" Framework : [cyan]{framework}[/cyan]\n")
63
-
64
- success = add_agent(agent_name, framework)
65
-
66
- if not success:
67
- raise click.Abort()
68
-
69
- console.print(f"\n[bold green]Done![/bold green] Agent [cyan]agents/{agent_name}.py[/cyan] created.\n")
70
-
71
-
72
- @app.command("list-frameworks")
73
- def list_frameworks():
74
- """List all supported frameworks and LLM providers."""
75
- table = Table(title="Supported Frameworks & LLM Providers")
76
- table.add_column("Frameworks", style="cyan")
77
- table.add_column("LLM Providers", style="green")
78
-
79
- rows = list(zip(SUPPORTED_FRAMEWORKS, SUPPORTED_LLMS))
80
- for fw, llm in rows:
81
- table.add_row(fw, llm)
82
-
83
- console.print(table)
File without changes