diff --git a/tools/github_tool.py b/tools/github_tool.py index 65da6e3..1cd6c20 100644 --- a/tools/github_tool.py +++ b/tools/github_tool.py @@ -311,6 +311,20 @@ class GitHubTool(BaseTool): }, "required": ["branch_name"] } + }, + { + "name": "get_issue_details", + "description": "Get details of a specific issue", + "parameters": { + "type": "object", + "properties": { + "issue_number": { + "type": "integer", + "description": "The number of the issue" + } + }, + "required": ["issue_number"] + } } ] @@ -351,6 +365,8 @@ class GitHubTool(BaseTool): kwargs.get("commit_message", ""), kwargs.get("merge_method", "merge")) elif function_name == "delete_branch": return self._delete_branch(kwargs["branch_name"]) + elif function_name == "get_issue_details": + return self._get_issue_details(kwargs["issue_number"]) else: error_message = f"Unknown function: {function_name}" self.logger.error(error_message) @@ -636,3 +652,28 @@ class GitHubTool(BaseTool): error_message = f"Error deleting branch: {response.status_code}\nResponse: {response.text}" self.logger.error(error_message) return error_message + + @metrics.measure + def _get_issue_details(self, issue_number): + self.logger.info(f"Getting details for issue: {issue_number}") + url = f"{self.base_url}/repos/{self.repo}/issues/{issue_number}" + response = requests.get(url, headers=self.headers) + if response.status_code == 200: + issue_data = response.json() + issue_details = { + "number": issue_data["number"], + "title": issue_data["title"], + "state": issue_data["state"], + "body": issue_data["body"], + "created_at": issue_data["created_at"], + "updated_at": issue_data["updated_at"], + "labels": [label["name"] for label in issue_data["labels"]], + "assignees": [assignee["login"] for assignee in issue_data["assignees"]], + "comments": issue_data["comments"] + } + self.logger.info(f"Successfully retrieved details for issue {issue_number}") + return issue_details + else: + error_message = f"Error getting issue details: {response.status_code}\nResponse: {response.text}" + self.logger.error(error_message) + return error_message \ No newline at end of file