diff --git a/tools/github_tool.py b/tools/github_tool.py index 2f29041..206e332 100644 --- a/tools/github_tool.py +++ b/tools/github_tool.py @@ -312,6 +312,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"] + } + } { "name": "create_issue", "description": "Create a new issue in the repository", @@ -401,6 +415,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"]) elif function_name == "create_issue": return self._create_issue(kwargs["title"], kwargs["body"], kwargs.get("labels", [])) elif function_name == "list_issues": @@ -690,7 +706,31 @@ 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 + @metrics.measure def _create_issue(self, title, body, labels=None): self.logger.info(f"Creating issue: {title}")