Added browse command and project handlers
This commit is contained in:
+97
-29
@@ -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
|
||||
Reference in New Issue
Block a user