Added browse command and project handlers

This commit is contained in:
2024-08-21 13:26:34 -05:00
parent b4c9176a1f
commit 5c17823a0f
4 changed files with 187 additions and 55 deletions
+97 -29
View File
@@ -59,6 +59,34 @@ class GitHubTool(BaseTool):
"required": ["path"]
}
},
{
"name": "list_files",
"description": "List files in a directory of the repository",
"parameters": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Path to the directory in the repository"
}
},
"required": ["path"]
}
},
{
"name": "search_code",
"description": "Search for code in the repository",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search query"
}
},
"required": ["query"]
}
},
{
"name": "create_branch",
"description": "Create a new branch in the repository",
@@ -123,34 +151,6 @@ class GitHubTool(BaseTool):
"required": ["title", "body"]
}
},
{
"name": "list_files",
"description": "List files in a directory of the repository",
"parameters": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Path to the directory in the repository"
}
},
"required": ["path"]
}
},
{
"name": "search_code",
"description": "Search for code in the repository",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search query"
}
},
"required": ["query"]
}
},
{
"name": "get_commit_history",
"description": "Get commit history for a file",
@@ -505,9 +505,33 @@ class GitHubTool(BaseTool):
},
"required": ["card_id", "content_id", "content_type"]
}
},
{
"name": "list_project_boards",
"description": "List project boards associated with the repository",
"parameters": {}
},
{
"name": "view_project_board_items",
"description": "View items (columns and cards) in a specific project board",
"parameters": {
"type": "object",
"properties" : {
"project_id": {
"type": "integer",
"description": "ID of the project board"
}
},
"required": ["project_id"]
}
}
]
@metrics.measure
def execute(self, function_name, **kwargs):
self.logger.info(f"Executing: {function_name}")
@@ -565,6 +589,10 @@ class GitHubTool(BaseTool):
return self._move_project_card(kwargs["card_id"], kwargs["position"], kwargs["column_id"])
elif function_name == "link_issue_to_project_card":
return self._link_issue_to_project_card(kwargs["card_id"], kwargs["content_id"], kwargs["content_type"])
elif function_name == "list_project_boards":
return self._list_project_boards()
elif function_name == "view_project_board_items":
return self._view_project_board_items(kwargs["project_id"])
else:
error_message = f"Unknown function: {function_name}"
self.logger.error(error_message)
@@ -1068,4 +1096,44 @@ class GitHubTool(BaseTool):
"status_code": response.status_code,
"message": error_message,
"response": response.text
}
}
@metrics.measure
def _list_project_boards(self):
self.logger.info("Fetching project boards...")
url = f"{self.base_url}/repos/{self.repo}/projects"
response = requests.get(url, headers=self.headers)
if response.status_code == 200:
boards = response.json()
self.logger.info(f"Successfully fetched {len(boards)} project boards.")
return boards
else:
error_message = f"Error fetching project boards: {response.status_code}"
self.logger.error(error_message)
return error_message
@metrics.measure
def _view_project_board_items(self, project_id):
self.logger.info(f"Fetching items for project board ID: {project_id}...")
columns_url = f"{self.base_url}/projects/{project_id}/columns"
columns_response = requests.get(columns_url, headers=self.headers)
if columns_response.status_code == 200:
columns = columns_response.json()
items = []
for column in columns:
column_id = column["id"]
column_name = column["name"]
cards_url = f"{self.base_url}/projects/columns/{column_id}/cards"
cards_response = requests.get(cards_url, headers=self.headers)
if cards_response.status_code == 200:
cards = cards_response.json()
items.append({"column": column_name, "cards": cards})
else:
self.logger.error(f"Error fetching cards for column {column_id}: {cards_response.status_code}")
items.append({"column": column_name, "cards": "Error fetching cards"})
self.logger.info(f"Successfully fetched items for project board ID: {project_id}.")
return items
else:
error_message = f"Error fetching columns for project board: {columns_response.status_code}"
self.logger.error(error_message)
return error_message