| 
					
				 | 
			
			
				@@ -13,15 +13,15 @@ class GitlabCommitsTool(BuiltinTool): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def _invoke( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self, user_id: str, tool_parameters: dict[str, Any] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        project = tool_parameters.get("project", "") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        branch = tool_parameters.get("branch", "") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         repository = tool_parameters.get("repository", "") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         employee = tool_parameters.get("employee", "") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         start_time = tool_parameters.get("start_time", "") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         end_time = tool_parameters.get("end_time", "") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         change_type = tool_parameters.get("change_type", "all") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if not project and not repository: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return self.create_text_message("Either project or repository is required") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if not repository: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return self.create_text_message("Either repository is required") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if not start_time: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             start_time = (datetime.utcnow() - timedelta(days=1)).isoformat() 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -37,14 +37,9 @@ class GitlabCommitsTool(BuiltinTool): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             site_url = "https://gitlab.com" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # Get commit content 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if repository: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            result = self.fetch_commits( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                site_url, access_token, repository, employee, start_time, end_time, change_type, is_repository=True 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            result = self.fetch_commits( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                site_url, access_token, project, employee, start_time, end_time, change_type, is_repository=False 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        result = self.fetch_commits( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            site_url, access_token, repository, branch, employee, start_time, end_time, change_type, is_repository=True 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return [self.create_json_message(item) for item in result] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -52,7 +47,8 @@ class GitlabCommitsTool(BuiltinTool): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         site_url: str, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         access_token: str, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        identifier: str, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        repository: str, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        branch: str, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         employee: str, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         start_time: str, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         end_time: str, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -64,27 +60,14 @@ class GitlabCommitsTool(BuiltinTool): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         results = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if is_repository: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                # URL encode the repository path 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                encoded_identifier = urllib.parse.quote(identifier, safe="") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                commits_url = f"{domain}/api/v4/projects/{encoded_identifier}/repository/commits" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                # Get all projects 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                url = f"{domain}/api/v4/projects" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                response = requests.get(url, headers=headers) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                response.raise_for_status() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                projects = response.json() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                filtered_projects = [p for p in projects if identifier == "*" or p["name"] == identifier] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                for project in filtered_projects: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    project_id = project["id"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    project_name = project["name"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    print(f"Project: {project_name}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    commits_url = f"{domain}/api/v4/projects/{project_id}/repository/commits" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # URL encode the repository path 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            encoded_repository = urllib.parse.quote(repository, safe="") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            commits_url = f"{domain}/api/v4/projects/{encoded_repository}/repository/commits" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # Fetch commits for the repository 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             params = {"since": start_time, "until": end_time} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if branch: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                params["ref_name"] = branch 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if employee: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 params["author"] = employee 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -96,10 +79,7 @@ class GitlabCommitsTool(BuiltinTool): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 commit_sha = commit["id"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 author_name = commit["author_name"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if is_repository: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    diff_url = f"{domain}/api/v4/projects/{encoded_identifier}/repository/commits/{commit_sha}/diff" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    diff_url = f"{domain}/api/v4/projects/{project_id}/repository/commits/{commit_sha}/diff" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                diff_url = f"{domain}/api/v4/projects/{encoded_repository}/repository/commits/{commit_sha}/diff" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 diff_response = requests.get(diff_url, headers=headers) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 diff_response.raise_for_status() 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -120,7 +100,14 @@ class GitlabCommitsTool(BuiltinTool): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                     if line.startswith("+") and not line.startswith("+++") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            results.append({"commit_sha": commit_sha, "author_name": author_name, "diff": final_code}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            results.append( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    "diff_url": diff_url, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    "commit_sha": commit_sha, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    "author_name": author_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    "diff": final_code, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         if total_changes > 1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             final_code = "".join( 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -134,7 +121,12 @@ class GitlabCommitsTool(BuiltinTool): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             final_code_escaped = json.dumps(final_code)[1:-1]  # Escape the final code 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             results.append( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                {"commit_sha": commit_sha, "author_name": author_name, "diff": final_code_escaped} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    "diff_url": diff_url, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    "commit_sha": commit_sha, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    "author_name": author_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    "diff": final_code_escaped, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         except requests.RequestException as e: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             print(f"Error fetching data from GitLab: {e}") 
			 |