from pmcp.mcp_server.github_server.utils.github_api import GithubClient class ContentService: """Commits and file-content helpers.""" def __init__(self, client: GithubClient): self.client = client async def recent_commits( self, owner: str, repo: str, branch: str, per_page: int = 10 ): """ Retrieve the most recent commits on a branch. Args: owner (str): Repository owner. repo (str): Repository name. branch (str): Branch ref (e.g. ``main``). per_page (int): Max commits to return (<=100). Returns: List of commit dicts. """ params = {"sha": branch, "per_page": per_page} return await self.client.GET(f"{owner}/{repo}/commits", params=params) async def get_commit_details( self, owner: str, repo: str, sha: str ) -> dict: """ Retrieve a single commit’s metadata *and* its file-level diff. Args: owner (str): Repository owner. repo (str): Repository name. sha (str): Commit SHA. Returns: Full JSON payload for the commit, including `commit.message` and a `files` array where each entry has a `patch` (the diff). """ return await self.client.GET(f"{owner}/{repo}/commits/{sha}") async def get_file( self, owner: str, repo: str, path: str, ref: str | None = None ): """ Download a file’s blob (Base64) from a repo. Args: owner (str): Repository owner. repo (str): Repository name. path (str): File path within the repo. ref (str): Optional commit SHA / branch / tag. Returns: GitHub ``contents`` API response including ``content``. """ params = {"ref": ref} if ref else None return await self.client.GET(f"{owner}/{repo}/contents/{path}", params=params)