Skip to content

Commit d3a1dab

Browse files
authored
feat: top-level code agent (#564)
1 parent 114397e commit d3a1dab

39 files changed

+67
-82
lines changed

codegen-examples/examples/codegen-mcp-server/server.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import asyncio
22
from dataclasses import dataclass, field
3-
from typing import Annotated, Optional, Dict, Any, List
4-
from mcp.server.fastmcp import FastMCP
3+
from typing import Annotated, Any, Dict, List, Optional
4+
55
from codegen import Codebase
6+
from mcp.server.fastmcp import FastMCP
67

78

89
@dataclass

codegen-examples/examples/sqlalchemy_soft_delete/run.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ def process_soft_deletes(codebase):
9292

9393

9494
if __name__ == "__main__":
95+
from codegen import Codebase
9596
from codegen.sdk.codebase.config import CodebaseConfig
96-
from codegen.sdk.core.codebase import Codebase
9797

9898
repo_path = Path("/tmp/core")
9999
repo_url = "https://github.com/hasgeek/funnel.git"

codegen-examples/examples/sqlalchemy_type_annotations/run.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
import codegen
2-
1+
import os
2+
import shutil
3+
import subprocess
34

5+
import codegen
46
from codegen import Codebase
57
from codegen.sdk.core.detached_symbols.function_call import FunctionCall
6-
import subprocess
7-
import shutil
8-
import os
98

109

1110
def init_git_repo(repo_path: str) -> None:

src/codegen/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from codegen.agents.code_agent import CodeAgent
12
from codegen.cli.sdk.decorator import function
23
from codegen.cli.sdk.functions import Function
34

@@ -6,4 +7,4 @@
67
from codegen.sdk.core.codebase import Codebase
78
from codegen.shared.enums.programming_language import ProgrammingLanguage
89

9-
__all__ = ["Codebase", "Function", "ProgrammingLanguage", "function"]
10+
__all__ = ["CodeAgent", "Codebase", "Function", "ProgrammingLanguage", "function"]

src/codegen/agents/__init__.py

Whitespace-only changes.

src/codegen/agents/code_agent.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from typing import Optional
2+
from uuid import uuid4
3+
4+
from codegen.extensions.langchain.agent import create_codebase_agent
5+
from codegen.sdk.core.codebase import Codebase
6+
7+
8+
class CodeAgent:
9+
"""Agent for interacting with a codebase."""
10+
11+
def __init__(self, codebase: Codebase):
12+
self.codebase = codebase
13+
self.agent = create_codebase_agent(self.codebase)
14+
15+
def run(self, prompt: str, session_id: Optional[str] = None) -> str:
16+
if session_id is None:
17+
session_id = str(uuid4())
18+
return self.agent.invoke(
19+
{"input": prompt},
20+
config={"configurable": {"session_id": session_id}},
21+
)

src/codegen/cli/codemod/convert.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
def convert_to_cli(input: str, language: str, name: str) -> str:
55
return f"""import codegen
6-
from codegen import Codebase
6+
from codegen.sdk.core.codebase import Codebase
77
88
99
@codegen.function('{name}')

src/codegen/cli/commands/agent/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from rich.markdown import Markdown
88
from rich.prompt import Prompt
99

10-
from codegen import Codebase
1110
from codegen.extensions.langchain.agent import create_agent_with_tools
1211
from codegen.extensions.langchain.tools import (
1312
CreateFileTool,
@@ -20,6 +19,7 @@
2019
SearchTool,
2120
ViewFileTool,
2221
)
22+
from codegen.sdk.core.codebase import Codebase
2323

2424
# Suppress specific warnings
2525
warnings.filterwarnings("ignore", message=".*Helicone.*")

src/codegen/cli/commands/run/run_local.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
from rich.panel import Panel
55
from rich.status import Status
66

7-
from codegen import Codebase
87
from codegen.cli.auth.session import CodegenSession
98
from codegen.cli.utils.function_finder import DecoratedFunction
9+
from codegen.sdk.core.codebase import Codebase
1010

1111

1212
def parse_codebase(repo_root: Path) -> Codebase:

src/codegen/cli/utils/default_code.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
DEFAULT_CODEMOD = '''import codegen
2-
from codegen import Codebase
2+
from codegen.sdk.core.codebase import Codebase
33
44
55
@codegen.function("{name}")

0 commit comments

Comments
 (0)