From 0d0fccf82767be8c2ec755bd0006a2711a6a5f98 Mon Sep 17 00:00:00 2001 From: null Date: Sun, 24 May 2026 16:50:49 -0500 Subject: [PATCH] feat: add functionality to dispatch Forgejo issue details as Claude Code prompt --- .../git/ForgejoIssueDetailDialog.tsx | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/git/ForgejoIssueDetailDialog.tsx b/frontend/src/components/git/ForgejoIssueDetailDialog.tsx index 3de8484..92d0e97 100644 --- a/frontend/src/components/git/ForgejoIssueDetailDialog.tsx +++ b/frontend/src/components/git/ForgejoIssueDetailDialog.tsx @@ -2,7 +2,7 @@ import { useEffect, useMemo, useState } from "react"; -import { ExternalLink, Loader2, MessageSquarePlus, Pencil, UserPlus, XCircle } from "lucide-react"; +import { ExternalLink, Loader2, MessageSquarePlus, Pencil, Terminal, UserPlus, XCircle } from "lucide-react"; import { Dialog, @@ -131,6 +131,25 @@ export function ForgejoIssueDetailDialog({ onRefresh?.(); }; + const handleDispatchToClaudeCode = async () => { + const parts: string[] = [ + `You have been assigned a Forgejo issue.\n`, + `**Issue**: #${active.forgejo_issue_number} ${active.title}`, + `**Repository**: ${repositoryName}`, + `**State**: ${active.state}`, + ]; + if (body.trim()) { + parts.push(`\n**Description**:\n${body.trim()}`); + } + parts.push(`\n---\nPlease review this issue and begin working on it.`); + const prompt = parts.join("\n"); + try { + await navigator.clipboard.writeText(prompt); + } catch { + // clipboard unavailable — silently ignore + } + }; + const handleEditSuccess = (updated: { title: string; body: string | null; @@ -213,6 +232,16 @@ export function ForgejoIssueDetailDialog({ Assign Agent +