{"id":30029915,"url":"https://github.com/therealfredp3d/pullpal","last_synced_at":"2025-08-06T18:07:47.113Z","repository":{"id":291155462,"uuid":"976771713","full_name":"TheRealFREDP3D/PullPal","owner":"TheRealFREDP3D","description":"PullPal is a Python-based command-line tool designed to fetch and archive complete GitHub pull request (PR) conversations. It captures PR details, issue comments, review comments, and reviews, allowing you to save them in either Markdown or JSON format for easy reference and analysis.","archived":false,"fork":false,"pushed_at":"2025-06-08T13:46:37.000Z","size":143,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-08T14:32:28.060Z","etag":null,"topics":["ai-commentary","ai-review","fetcher","personal-project","pull-requests","python","tool"],"latest_commit_sha":null,"homepage":"https://github.com/TheRealFREDP3D/PullPal","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TheRealFREDP3D.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-02T18:09:02.000Z","updated_at":"2025-06-08T13:46:40.000Z","dependencies_parsed_at":"2025-05-02T19:23:57.776Z","dependency_job_id":"db29727f-9d46-4601-bc18-f39aa0364104","html_url":"https://github.com/TheRealFREDP3D/PullPal","commit_stats":null,"previous_names":["therealfredp3d/pullpal"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/TheRealFREDP3D/PullPal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheRealFREDP3D%2FPullPal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheRealFREDP3D%2FPullPal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheRealFREDP3D%2FPullPal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheRealFREDP3D%2FPullPal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TheRealFREDP3D","download_url":"https://codeload.github.com/TheRealFREDP3D/PullPal/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheRealFREDP3D%2FPullPal/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269128359,"owners_count":24364931,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-06T02:00:09.910Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-commentary","ai-review","fetcher","personal-project","pull-requests","python","tool"],"created_at":"2025-08-06T18:07:43.823Z","updated_at":"2025-08-06T18:07:47.108Z","avatar_url":"https://github.com/TheRealFREDP3D.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PullPal\n\nA powerful tool for fetching and saving complete GitHub pull request conversations, including PR details, issue comments, review comments, and reviews.\n\n---  \n\n[![Python Package](https://github.com/TheRealFREDP3D/PullPal/actions/workflows/python-package.yml/badge.svg)](https://github.com/TheRealFREDP3D/PullPal/actions/workflows/python-package.yml)[![Python Tests](https://github.com/TheRealFREDP3D/PullPal/actions/workflows/python-tests.yml/badge.svg)](https://github.com/TheRealFREDP3D/PullPal/actions/workflows/python-tests.yml)\n\n## Features\n\n- Fetch a single PR, multiple specific PRs, or the latest N PRs\n- Save conversations in either Markdown or JSON format\n- Uses GitHub token from `.env` file or command-line argument\n- Handles pagination for large PRs with many comments\n- Customizable output directory and file naming\n\n## Requirements\n\n- Python 3.6+\n- Required packages:\n  - requests\n  - python-dotenv\n\n## Installation\n\n### From PyPI (Recommended)\n\n```bash\npip install pullpal\n```\n\n### From Source\n\n1. Clone the repository\n   ```bash\n   git clone https://github.com/TheRealFREDP3D/PullPal.git\n   cd PullPal\n   ```\n\n2. Install the package\n   ```bash\n   pip install -e .\n   ```\n\n3. Set up your GitHub token in a `.env` file or provide it via command line\n\n## Usage\n\n### Command Line\n\nAfter installation, you can use PullPal from the command line:\n\n```bash\n# Make sure you have a .env file with your GitHub token\n# GITHUB_TOKEN=your_github_token_here\n\n# Fetch a single PR\npullpal --pr 123\n\n# Fetch multiple PRs\npullpal --prs 123,124,125\n\n# Fetch the 10 most recently updated PRs\npullpal --latest 10\n\n# Specify a custom output directory\npullpal --pr 123 --output-dir my_pr_data\n\n# Save in JSON format instead of Markdown\npullpal --pr 123 --format json\n\n# Override the token from .env file\npullpal --pr 123 --token YOUR_GITHUB_TOKEN\n\n# Specify a different repository\npullpal --owner username --repo repository --pr 123\n```\n\n### Python API\n\nYou can also use PullPal as a library in your Python code:\n\n```python\nfrom pullpal.PullPal import fetch_conversation, save_conversation\n\n# Fetch a PR conversation\nconversation = fetch_conversation(\"octocat\", \"hello-world\", 123, \"your_github_token\")\n\n# Save the conversation as Markdown\nsave_conversation(conversation, \"pr-123.md\", \"md\")\n\n# Or save as JSON\nsave_conversation(conversation, \"pr-123.json\", \"json\")\n```\n\n## Output Format\n\nBy default, the script saves conversations in Markdown format with the following structure:\n\n```markdown\n# PR #123: Title of the PR\n\n**Author:** username\n**Created:** 2023-01-01T00:00:00Z\n**Updated:** 2023-01-02T00:00:00Z\n**State:** open\n\n## Description\n\nPR description text...\n\n## Comments\n\n### username - 2023-01-01T12:00:00Z\n\nComment text...\n\n## Reviews\n\n### username - 2023-01-01T13:00:00Z\n\n**State:** APPROVED\n\nReview text...\n\n## Review Comments\n\n### username - 2023-01-01T14:00:00Z\n\n**Path:** path/to/file.py\n**Line:** 42\n\nReview comment text...\n```\n\nYou can also save in JSON format for programmatic processing.\n\n## Default Settings\n\n- Output directory: `pr-conversation`\n- Output file format: `{repo}-{pr-number}.md`\n- Default repository owner: `octocat`\n- Default repository name: `hello-world`\n\nYou can override these defaults using command-line arguments.\n\n## Use Cases\n\n- Archive PR discussions for future reference\n- Create documentation from PR conversations\n- Analyze PR patterns and communication\n- Export GitHub data for offline use or migration\n- Generate reports on PR activity\n\n---\n\n*PullPal was originally developed as part of the [Gemini-Code-Assist-PR-Poetry](https://github.com/TheRealFREDP3D/Gemini-Code-Assist-PR-Poetry) project, which collects poems generated by Gemini Code Assist in GitHub pull requests.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftherealfredp3d%2Fpullpal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftherealfredp3d%2Fpullpal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftherealfredp3d%2Fpullpal/lists"}