Skip to main content

Review Merge Request Module

The Review Merge Request module provides comprehensive functionality for managing code reviews and merge requests. It enables agents to create review requests, gather feedback, manage approvals, and handle merge workflows with various strategies.

Overview

The review merge request module supports:

  • Request Lifecycle - Draft, pending review, in review, changes requested, approved, merged, rejected, closed
  • Request Types - Review-only or review with merge
  • Merge Strategies - Patch-based or git worktree
  • Review Feedback - Approvals, change requests, and comments
  • Status Tracking - Track requests by agent, swarm, or status
  • Linked Jobs - Create and track jobs from review feedback

Quick Start

import codebolt from '@codebolt/codeboltjs';

// Create a new review request
const request = await codebolt.reviewMergeRequest.create({
type: 'review_merge',
initialTask: 'Implement user authentication',
title: 'feat: Add OAuth2 login',
description: 'Adds OAuth2 authentication with Google and GitHub providers',
majorFilesChanged: ['src/auth/oauth.ts', 'src/auth/login.ts'],
diffPatch: 'diff --git a/src/auth/oauth.ts...',
agentId: 'agent_dev_001',
agentName: 'Developer Agent',
swarmId: 'swarm_frontend'
});

// Add review feedback
await codebolt.reviewMergeRequest.addReview(request.request.id, {
agentId: 'agent_reviewer_001',
agentName: 'Code Reviewer',
type: 'approve',
comment: 'LGTM! Great implementation.'
});

// Update status to approved
await codebolt.reviewMergeRequest.updateStatus(request.request.id, 'approved');

// Merge the request
await codebolt.reviewMergeRequest.merge(request.request.id, 'agent_dev_001');

Request Lifecycle

draft → pending_review → in_review → approved → review_completed → merged

changes_requested → in_review

rejected / closed

Available Methods

CRUD Operations

MethodDescription
list(filters)List review requests with filters
get(id)Get a single review request
create(data)Create a new review request
update(id, data)Update an existing request
delete(id)Delete a review request

Review Operations

MethodDescription
addReview(id, feedback)Add review feedback to a request
updateStatus(id, status)Update the request status

Merge Operations

MethodDescription
merge(id, mergedBy)Merge a request
addLinkedJob(id, jobId)Link a job to the request
removeLinkedJob(id, jobId)Unlink a job from the request

Query Operations

MethodDescription
pending()Get all pending review requests
readyToMerge()Get requests ready to merge
byAgent(agentId)Get requests by agent
bySwarm(swarmId)Get requests by swarm
statistics()Get review statistics

Request Types

Review Only

await codebolt.reviewMergeRequest.create({
type: 'review',
initialTask: 'Code review for PR #123',
title: 'Review: User profile updates',
description: 'Please review the user profile update changes',
majorFilesChanged: ['src/user/profile.ts'],
diffPatch: '...',
agentId: 'agent_dev',
agentName: 'Developer'
});

Review with Merge

await codebolt.reviewMergeRequest.create({
type: 'review_merge',
initialTask: 'Implement search feature',
title: 'feat: Add full-text search',
description: 'Implements Elasticsearch-based search',
majorFilesChanged: ['src/search/index.ts', 'src/search/query.ts'],
diffPatch: '...',
agentId: 'agent_dev',
agentName: 'Developer',
mergeConfig: {
strategy: 'git_worktree',
worktreeDetails: {
worktreePath: '/tmp/worktree',
branchName: 'feature/search',
baseBranch: 'main'
}
}
});

Common Use Cases

1. Create Code Review Request

const request = await codebolt.reviewMergeRequest.create({
type: 'review',
initialTask: 'Review authentication changes',
title: 'Review: OAuth implementation',
description: 'Please review the OAuth2 authentication implementation',
majorFilesChanged: [
'src/auth/oauth.ts',
'src/auth/providers.ts',
'src/middleware/auth.ts'
],
diffPatch: generateDiff(),
agentId: 'agent_dev_001',
agentName: 'Developer Agent',
swarmId: 'swarm_backend',
issuesFaced: ['Had to work around CORS issues'],
remainingTasks: ['Add refresh token support']
});

2. Add Multiple Reviews

// First reviewer approves
await codebolt.reviewMergeRequest.addReview(requestId, {
agentId: 'agent_reviewer_1',
agentName: 'Senior Reviewer',
type: 'approve',
comment: 'Code looks good. Approved!'
});

// Second reviewer requests changes
await codebolt.reviewMergeRequest.addReview(requestId, {
agentId: 'agent_reviewer_2',
agentName: 'Security Reviewer',
type: 'request_changes',
comment: 'Please add rate limiting to the login endpoint.'
});

// Third reviewer leaves comment
await codebolt.reviewMergeRequest.addReview(requestId, {
agentId: 'agent_reviewer_3',
agentName: 'UI Reviewer',
type: 'comment',
comment: 'Consider adding loading states.'
});

3. Query and Filter Requests

// Get pending requests
const pending = await codebolt.reviewMergeRequest.pending();
console.log(`Pending reviews: ${pending.totalCount}`);

// Get requests ready to merge
const ready = await codebolt.reviewMergeRequest.readyToMerge();
console.log(`Ready to merge: ${ready.totalCount}`);

// Filter by status
const filtered = await codebolt.reviewMergeRequest.list({
status: ['in_review', 'pending_review'],
agentId: 'agent_dev_001',
limit: 10
});

// Get requests by swarm
const swarmRequests = await codebolt.reviewMergeRequest.bySwarm('swarm_frontend');

4. Process Review Workflow

async function processReview(requestId: string) {
// Get request details
const request = await codebolt.reviewMergeRequest.get(requestId);

// Update status to in review
await codebolt.reviewMergeRequest.updateStatus(requestId, 'in_review');

// Perform automated checks
const checksPassed = await runAutomatedChecks(request.request);

if (checksPassed) {
// Approve
await codebolt.reviewMergeRequest.addReview(requestId, {
agentId: 'agent_bot',
agentName: 'Automated Reviewer',
type: 'approve',
comment: 'All automated checks passed'
});

// Update status
await codebolt.reviewMergeRequest.updateStatus(requestId, 'approved');
} else {
// Request changes
await codebolt.reviewMergeRequest.addReview(requestId, {
agentId: 'agent_bot',
agentName: 'Automated Reviewer',
type: 'request_changes',
comment: 'Automated checks failed. Please fix linting errors.'
});

await codebolt.reviewMergeRequest.updateStatus(requestId, 'changes_requested');
}
}

5. Merge with Different Strategies

// Patch-based merge
await codebolt.reviewMergeRequest.merge(requestId, 'agent_merger', {
strategy: 'patch',
patchContent: 'diff --git a/file.ts...'
});

// Git worktree merge
await codebolt.reviewMergeRequest.merge(requestId, 'agent_merger', {
strategy: 'git_worktree',
worktreeDetails: {
worktreePath: '/tmp/worktrees/feature-branch',
branchName: 'feature/new-feature',
baseBranch: 'main',
commitHash: 'abc123'
}
});
// Create a job from review feedback
const job = await createJob({
title: 'Add rate limiting to login',
type: 'bugfix'
});

// Link job to review request
await codebolt.reviewMergeRequest.addLinkedJob(requestId, job.id);

7. Track Review Statistics

const stats = await codebolt.reviewMergeRequest.statistics();
console.log('Review Statistics:', stats.statistics);

Request Status Values

StatusDescription
draftInitial state, not yet submitted
pending_reviewSubmitted, waiting for reviewer
in_reviewCurrently being reviewed
changes_requestedReviewer requested changes
approvedApproved by reviewer(s)
review_completedReview finished, ready for merge
mergedSuccessfully merged
rejectedRejected by reviewer
closedClosed without merge

Merge Strategies

Patch Strategy

mergeConfig: {
strategy: 'patch',
patchContent: 'unified diff format...'
}

Git Worktree Strategy

mergeConfig: {
strategy: 'git_worktree',
worktreeDetails: {
worktreePath: '/path/to/worktree',
branchName: 'feature-branch',
baseBranch: 'main',
commitHash: 'commit-sha'
}
}

Error Handling

try {
const request = await codebolt.reviewMergeRequest.create(data);

if (request.request) {
console.log('Request created:', request.request.id);
}
} catch (error) {
console.error('Failed to create request:', error);
}

Notes

  • Request IDs are auto-generated
  • All timestamps in ISO 8601 format
  • Multiple reviews can be added per request
  • Status transitions follow the lifecycle flow
  • Merge can only occur after approval
  • Linked jobs track work created from reviews
  • Statistics provide aggregate metrics
  • Filtering supports complex queries
  • Requests can be filtered by agent, swarm, status, or date range
  • Review feedback includes approvals, change requests, and comments