Files
WizardMerge/README.md
2025-12-27 02:17:34 +00:00

174 lines
5.0 KiB
Markdown

# WizardMerge
**Intelligent Merge Conflict Resolution**
SEE ALSO: https://github.com/JohnDoe6345789/mergebot
WizardMerge is a powerful tool for resolving merge conflicts using intelligent algorithms based on research from The University of Hong Kong. It combines dependency analysis at both text and LLVM-IR levels to provide smart merge suggestions.
## Architecture
WizardMerge uses a multi-frontend architecture with a high-performance C++ backend and multiple frontend options:
### Backend (C++)
- **Location**: `backend/`
- **Build System**: CMake + Ninja
- **Package Manager**: Conan
- **Web Framework**: Drogon
- **Features**:
- Three-way merge algorithm
- Conflict detection and auto-resolution
- HTTP API endpoints
- GitHub Pull Request integration
- Pull request conflict resolution
### Frontends
WizardMerge provides three frontend options to suit different workflows:
#### Qt6 Native Desktop (C++)
- **Location**: `frontends/qt6/`
- **Framework**: Qt6 with QML
- **Features**: Native desktop application, offline capability, high performance
- **Platforms**: Linux, Windows, macOS
#### Next.js Web UI (TypeScript)
- **Location**: `frontends/nextjs/`
- **Runtime**: bun
- **Framework**: Next.js 14
- **Features**: Web-based UI, real-time collaboration, cross-platform access
#### CLI (C++)
- **Location**: `frontends/cli/`
- **Features**: Command-line interface, automation support, scripting integration
- **Use Cases**: Batch processing, CI/CD pipelines, terminal workflows
## Roadmap
See [ROADMAP.md](ROADMAP.md) for our vision and development plan. The roadmap covers:
- Enhanced merge algorithms (three-way merge, conflict detection) ✓
- Smart semantic merging for different file types
- Advanced visualization and UI improvements
- Git workflow integration
- AI-assisted conflict resolution
## Getting Started
### C++ Backend
```sh
cd backend
./build.sh
./build/wizardmerge-cli
```
The backend server will start on port 8080. See [backend/README.md](backend/README.md) for details.
### Frontends
Choose the frontend that best fits your workflow:
#### Qt6 Desktop Application
```sh
cd frontends/qt6
mkdir build && cd build
cmake .. -G Ninja
ninja
./wizardmerge-qt6
```
See [frontends/qt6/README.md](frontends/qt6/README.md) for details.
#### Next.js Web UI
```sh
cd frontends/nextjs
bun install
bun run dev
```
Visit http://localhost:3000. See [frontends/nextjs/README.md](frontends/nextjs/README.md) for details.
#### CLI
```sh
cd frontends/cli
mkdir build && cd build
cmake .. -G Ninja
ninja
./wizardmerge-cli-frontend --help
```
See [frontends/cli/README.md](frontends/cli/README.md) for details.
## Pull Request / Merge Request Conflict Resolution
WizardMerge can automatically resolve conflicts in GitHub pull requests and GitLab merge requests using advanced merge algorithms.
### Supported Platforms
- **GitHub**: Pull requests via GitHub API
- **GitLab**: Merge requests via GitLab API
### Using the CLI
```sh
# Resolve conflicts in a GitHub pull request
./wizardmerge-cli-frontend pr-resolve --url https://github.com/owner/repo/pull/123
# Resolve conflicts in a GitLab merge request
./wizardmerge-cli-frontend pr-resolve --url https://gitlab.com/owner/repo/-/merge_requests/456
# With API token for private repos
./wizardmerge-cli-frontend pr-resolve --url https://github.com/owner/repo/pull/123 --token ghp_xxx
./wizardmerge-cli-frontend pr-resolve --url https://gitlab.com/owner/repo/-/merge_requests/456 --token glpat-xxx
# Or use environment variable
export GITHUB_TOKEN=ghp_xxx # For GitHub
export GITLAB_TOKEN=glpat-xxx # For GitLab
./wizardmerge-cli-frontend pr-resolve --url <pr_or_mr_url>
```
### Using the HTTP API
```sh
# POST /api/pr/resolve - GitHub
curl -X POST http://localhost:8080/api/pr/resolve \
-H "Content-Type: application/json" \
-d '{
"pr_url": "https://github.com/owner/repo/pull/123",
"api_token": "ghp_xxx"
}'
# POST /api/pr/resolve - GitLab
curl -X POST http://localhost:8080/api/pr/resolve \
-H "Content-Type: application/json" \
-d '{
"pr_url": "https://gitlab.com/owner/repo/-/merge_requests/456",
"api_token": "glpat-xxx"
}'
```
The API will:
1. Parse the PR/MR URL and detect the platform (GitHub or GitLab)
2. Fetch PR/MR metadata using the platform-specific API
3. Retrieve base and head versions of all modified files
4. Apply the three-way merge algorithm to each file
5. Auto-resolve conflicts using heuristics
6. Return merged content with conflict status
### Authentication
- **GitHub**: Use personal access tokens with `repo` scope
- **GitLab**: Use personal access tokens with `read_api` and `read_repository` scopes
- Tokens can be passed via `--token` flag or environment variables (`GITHUB_TOKEN`, `GITLAB_TOKEN`)
## Research Foundation
WizardMerge is based on research from The University of Hong Kong achieving:
- 28.85% reduction in conflict resolution time
- Merge suggestions for over 70% of code blocks affected by conflicts
- Dependency analysis at text and LLVM-IR levels
See [docs/PAPER.md](docs/PAPER.md) for the complete research paper.