Skip to content

Commit 5a5f2fd

Browse files
ashokDevsclaude
andcommitted
feat: show PR title, description, and link in activity log
- Backend now inserts a job_log entry when a PR is created (or fails) - Frontend renders a styled PR card with title, branch info, and link - Green themed card with direct link to view the PR on GitHub Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent dce1196 commit 5a5f2fd

2 files changed

Lines changed: 62 additions & 4 deletions

File tree

backend/services/pr_service.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,14 +295,37 @@ def _execute_ai_task(self, repo, issue_number, issue_title, issue_body, ai_resul
295295
pr_number=pr_result.get('pr_number'),
296296
pr_url=pr_result.get('pr_url')
297297
)
298+
if job_id:
299+
from services import db
300+
db.insert_job_log({
301+
'job_id': job_id,
302+
'role': 'assistant',
303+
'type': 'pr_created',
304+
'content': f"**Pull Request Created**\n\n**{pr_title}**\n\n{pr_body}",
305+
'metadata': {
306+
'pr_url': pr_result.get('pr_url'),
307+
'pr_number': pr_result.get('pr_number'),
308+
'pr_title': pr_title,
309+
'branch': branch_name,
310+
}
311+
})
298312
if issue_number:
299313
self.github_service.add_issue_comment(
300-
repo,
301-
issue_number,
314+
repo,
315+
issue_number,
302316
f"✅ **PR Created!**\n\nI've created a pull request to address this issue:\n→ [PR #{pr_result.get('pr_number')}: {pr_title}]({pr_result.get('pr_url')})\n\nPlease review the changes and merge if they look good."
303317
)
304318
else:
305319
logger.error("pull_request_creation_failed", error=pr_result.get('error'))
320+
if job_id:
321+
from services import db
322+
db.insert_job_log({
323+
'job_id': job_id,
324+
'role': 'assistant',
325+
'type': 'error',
326+
'content': f"**PR Creation Failed**\n\n{pr_result.get('error')}",
327+
'metadata': {'branch': branch_name}
328+
})
306329
if issue_number:
307330
self.github_service.add_issue_comment(repo, issue_number, f"⚠️ **PR Creation Failed**\n\nThe changes were validated and the branch `{branch_name}` was created, but I failed to create the Pull Request object.\nError: {pr_result.get('error')}")
308331

frontend/app/jobs/[id]/page.tsx

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import { useEffect, useState, useRef } from 'react';
44
import { useParams } from 'next/navigation';
55
import Link from 'next/link';
6-
import { ArrowLeft, FileCode, Terminal, Cpu, Zap, Loader2, AlertCircle, User, ExternalLink } from 'lucide-react';
6+
import { ArrowLeft, FileCode, Terminal, Cpu, Zap, Loader2, AlertCircle, User, ExternalLink, GitPullRequest } from 'lucide-react';
77
import Image from 'next/image';
88
import ReactDiffViewer from 'react-diff-viewer-continued';
99
import { cn } from '@/lib/utils';
@@ -15,12 +15,16 @@ interface JobLogMetadata {
1515
new_content?: string;
1616
repo?: string;
1717
url?: string;
18+
pr_url?: string;
19+
pr_number?: number;
20+
pr_title?: string;
21+
branch?: string;
1822
}
1923

2024
interface JobLogEntry {
2125
id: string;
2226
role: 'user' | 'assistant' | 'system' | 'tool';
23-
type: 'message' | 'command' | 'file_change' | 'error' | 'info' | 'screenshot';
27+
type: 'message' | 'command' | 'file_change' | 'error' | 'info' | 'screenshot' | 'pr_created';
2428
content: string;
2529
metadata?: JobLogMetadata;
2630
createdAt: string;
@@ -265,6 +269,37 @@ export default function JobDetailPage() {
265269
<span>{log.metadata?.repo || 'codebase'}</span>
266270
</div>
267271
</div>
272+
) : log.type === 'pr_created' ? (
273+
<div className="bg-emerald-500/5 border border-emerald-500/20 rounded-xl p-5 group-hover:border-emerald-500/40 transition-all">
274+
<div className="flex items-center gap-3 mb-3">
275+
<GitPullRequest className="w-5 h-5 text-emerald-500" />
276+
<span className="text-sm font-bold text-emerald-400">Pull Request Created</span>
277+
</div>
278+
<h3 className="text-base font-semibold text-zinc-200 mb-2">{log.metadata?.pr_title}</h3>
279+
{log.metadata?.branch && (
280+
<div className="flex items-center gap-2 mb-3">
281+
<span className="text-[10px] font-mono bg-zinc-800 text-zinc-400 px-2 py-0.5 rounded">{log.metadata.branch}</span>
282+
<span className="text-zinc-600 text-xs"></span>
283+
<span className="text-[10px] font-mono bg-zinc-800 text-zinc-400 px-2 py-0.5 rounded">main</span>
284+
</div>
285+
)}
286+
<div
287+
className="text-xs text-zinc-500 mb-4 whitespace-pre-wrap line-clamp-4"
288+
dangerouslySetInnerHTML={{ __html: formatMarkdown(log.content || '') }}
289+
/>
290+
{log.metadata?.pr_url && (
291+
<a
292+
href={log.metadata.pr_url}
293+
target="_blank"
294+
rel="noopener noreferrer"
295+
className="inline-flex items-center gap-2 bg-emerald-600 hover:bg-emerald-500 text-white text-xs font-bold px-4 py-2 rounded-lg transition-colors"
296+
>
297+
<GitPullRequest className="w-3.5 h-3.5" />
298+
View PR #{log.metadata.pr_number}
299+
<ExternalLink className="w-3 h-3" />
300+
</a>
301+
)}
302+
</div>
268303
) : log.type === 'command' ? (
269304
<div className="font-mono text-xs text-orange-400 bg-orange-600/5 border border-orange-500/10 rounded-lg px-4 py-3">
270305
<span className="text-orange-900 mr-2">$</span> {log.content}

0 commit comments

Comments
 (0)