feat(agent-manager): add PR link copy button (#13353)

This commit is contained in:
Marius
2026-08-24 12:08:01 +02:00
committed by GitHub
parent e2186def65
commit 2a9dcbe895
25 changed files with 41 additions and 1 deletions
+5
View File
@@ -0,0 +1,5 @@
---
"kilo-code": patch
---
Add a button to copy pull request links from the Agent Manager PR panel.
@@ -194,6 +194,7 @@ export const dict = {
"agentManager.review.metaComment": "تعليق المستخدم",
"agentManager.review.metaAuthor": "المؤلف",
"agentManager.pr.comment.title": "التعليقات",
"agentManager.pr.copyLink": "نسخ رابط PR",
"agentManager.pr.comment.unresolvedCount": "{{count}} غير محلولة",
"agentManager.pr.comment.resolvedGroup": "تم الحل ({{count}})",
"agentManager.pr.comment.sendAll": "إرسال {{count}} غير محلولة إلى الوكيل",
@@ -197,6 +197,7 @@ export const dict = {
"agentManager.review.metaComment": "Comentário do usuário",
"agentManager.review.metaAuthor": "Autor",
"agentManager.pr.comment.title": "Comentários",
"agentManager.pr.copyLink": "Copiar link do PR",
"agentManager.pr.comment.unresolvedCount": "{{count}} não resolvidos",
"agentManager.pr.comment.resolvedGroup": "Resolvidos ({{count}})",
"agentManager.pr.comment.sendAll": "Enviar {{count}} não resolvidos para o agente",
@@ -197,6 +197,7 @@ export const dict = {
"agentManager.review.metaComment": "Komentar korisnika",
"agentManager.review.metaAuthor": "Autor",
"agentManager.pr.comment.title": "Komentari",
"agentManager.pr.copyLink": "Kopiraj PR vezu",
"agentManager.pr.comment.unresolvedCount": "{{count}} neriješenih",
"agentManager.pr.comment.resolvedGroup": "Riješeno ({{count}})",
"agentManager.pr.comment.sendAll": "Pošalji {{count}} neriješenih agentu",
@@ -198,6 +198,7 @@ export const dict = {
"agentManager.review.metaComment": "Brugerkommentar",
"agentManager.review.metaAuthor": "Forfatter",
"agentManager.pr.comment.title": "Kommentarer",
"agentManager.pr.copyLink": "Kopiér PR-link",
"agentManager.pr.comment.unresolvedCount": "{{count}} uløste",
"agentManager.pr.comment.resolvedGroup": "Løste ({{count}})",
"agentManager.pr.comment.sendAll": "Send {{count}} uløste til agenten",
@@ -199,6 +199,7 @@ export const dict = {
"agentManager.review.metaComment": "Benutzerkommentar",
"agentManager.review.metaAuthor": "Autor",
"agentManager.pr.comment.title": "Kommentare",
"agentManager.pr.copyLink": "PR-Link kopieren",
"agentManager.pr.comment.unresolvedCount": "{{count}} ungelöst",
"agentManager.pr.comment.resolvedGroup": "Gelöst ({{count}})",
"agentManager.pr.comment.sendAll": "{{count}} ungelöste an Agent senden",
@@ -200,6 +200,7 @@ export const dict = {
"agentManager.review.metaComment": "User comment",
"agentManager.review.metaAuthor": "Author",
"agentManager.pr.comment.title": "Comments",
"agentManager.pr.copyLink": "Copy PR link",
"agentManager.pr.comment.unresolvedCount": "{{count}} unresolved",
"agentManager.pr.comment.resolvedGroup": "Resolved ({{count}})",
"agentManager.pr.comment.sendAll": "Send {{count}} unresolved to agent",
@@ -198,6 +198,7 @@ export const dict = {
"agentManager.review.metaComment": "Comentario del usuario",
"agentManager.review.metaAuthor": "Autor",
"agentManager.pr.comment.title": "Comentarios",
"agentManager.pr.copyLink": "Copiar enlace del PR",
"agentManager.pr.comment.unresolvedCount": "{{count}} sin resolver",
"agentManager.pr.comment.resolvedGroup": "Resueltos ({{count}})",
"agentManager.pr.comment.sendAll": "Enviar {{count}} sin resolver al agente",
@@ -201,6 +201,7 @@ export const dict = {
"agentManager.review.metaComment": "نظر کاربر",
"agentManager.review.metaAuthor": "نویسنده",
"agentManager.pr.comment.title": "نظرات",
"agentManager.pr.copyLink": "کپی پیوند PR",
"agentManager.pr.comment.unresolvedCount": "{{count}} حل‌نشده",
"agentManager.pr.comment.resolvedGroup": "حل‌شده ({{count}})",
"agentManager.pr.comment.sendAll": "ارسال {{count}} مورد حل‌نشده به عامل",
@@ -199,6 +199,7 @@ export const dict = {
"agentManager.review.metaComment": "Commentaire de l'utilisateur",
"agentManager.review.metaAuthor": "Auteur",
"agentManager.pr.comment.title": "Commentaires",
"agentManager.pr.copyLink": "Copier le lien du PR",
"agentManager.pr.comment.unresolvedCount": "{{count}} non résolus",
"agentManager.pr.comment.resolvedGroup": "Résolus ({{count}})",
"agentManager.pr.comment.sendAll": "Envoyer {{count}} non résolus à lagent",
@@ -204,6 +204,7 @@ export const dict = {
"agentManager.review.metaComment": "Commento utente",
"agentManager.review.metaAuthor": "Autore",
"agentManager.pr.comment.title": "Commenti",
"agentManager.pr.copyLink": "Copia link PR",
"agentManager.pr.comment.unresolvedCount": "{{count}} non risolti",
"agentManager.pr.comment.resolvedGroup": "Risolti ({{count}})",
"agentManager.pr.comment.sendAll": "Invia {{count}} non risolti all'agente",
@@ -198,6 +198,7 @@ export const dict = {
"agentManager.review.metaComment": "ユーザーコメント",
"agentManager.review.metaAuthor": "作成者",
"agentManager.pr.comment.title": "コメント",
"agentManager.pr.copyLink": "PRリンクをコピー",
"agentManager.pr.comment.unresolvedCount": "{{count}} 件未解決",
"agentManager.pr.comment.resolvedGroup": "解決済み ({{count}})",
"agentManager.pr.comment.sendAll": "{{count}} 件の未解決コメントをエージェントに送信",
@@ -196,6 +196,7 @@ export const dict = {
"agentManager.review.metaComment": "사용자 코멘트",
"agentManager.review.metaAuthor": "작성자",
"agentManager.pr.comment.title": "댓글",
"agentManager.pr.copyLink": "PR 링크 복사",
"agentManager.pr.comment.unresolvedCount": "{{count}}개 미해결",
"agentManager.pr.comment.resolvedGroup": "해결됨 ({{count}})",
"agentManager.pr.comment.sendAll": "{{count}}개 미해결 댓글을 에이전트로 보내기",
@@ -203,6 +203,7 @@ export const dict = {
"agentManager.review.metaComment": "Gebruikersopmerking",
"agentManager.review.metaAuthor": "Auteur",
"agentManager.pr.comment.title": "Opmerkingen",
"agentManager.pr.copyLink": "PR-link kopiëren",
"agentManager.pr.comment.unresolvedCount": "{{count}} onopgelost",
"agentManager.pr.comment.resolvedGroup": "Opgelost ({{count}})",
"agentManager.pr.comment.sendAll": "{{count}} onopgeloste opmerkingen naar agent sturen",
@@ -195,6 +195,7 @@ export const dict = {
"agentManager.review.metaComment": "Brukerkommentar",
"agentManager.review.metaAuthor": "Forfatter",
"agentManager.pr.comment.title": "Kommentarer",
"agentManager.pr.copyLink": "Kopier PR-lenke",
"agentManager.pr.comment.unresolvedCount": "{{count}} uløste",
"agentManager.pr.comment.resolvedGroup": "Løste ({{count}})",
"agentManager.pr.comment.sendAll": "Send {{count}} uløste til agenten",
@@ -197,6 +197,7 @@ export const dict = {
"agentManager.review.metaComment": "Komentarz użytkownika",
"agentManager.review.metaAuthor": "Autor",
"agentManager.pr.comment.title": "Komentarze",
"agentManager.pr.copyLink": "Kopiuj link do PR",
"agentManager.pr.comment.unresolvedCount": "{{count}} nierozwiązanych",
"agentManager.pr.comment.resolvedGroup": "Rozwiązane ({{count}})",
"agentManager.pr.comment.sendAll": "Wyślij {{count}} nierozwiązanych do agenta",
@@ -198,6 +198,7 @@ export const dict = {
"agentManager.review.metaComment": "Комментарий пользователя",
"agentManager.review.metaAuthor": "Автор",
"agentManager.pr.comment.title": "Комментарии",
"agentManager.pr.copyLink": "Копировать ссылку на PR",
"agentManager.pr.comment.unresolvedCount": "{{count}} нерешённых",
"agentManager.pr.comment.resolvedGroup": "Решённые ({{count}})",
"agentManager.pr.comment.sendAll": "Отправить {{count}} нерешённых агенту",
@@ -192,6 +192,7 @@ export const dict = {
"agentManager.review.metaComment": "ความคิดเห็นของผู้ใช้",
"agentManager.review.metaAuthor": "ผู้เขียน",
"agentManager.pr.comment.title": "ความคิดเห็น",
"agentManager.pr.copyLink": "คัดลอกลิงก์ PR",
"agentManager.pr.comment.unresolvedCount": "ยังไม่แก้ไข {{count}} รายการ",
"agentManager.pr.comment.resolvedGroup": "แก้ไขแล้ว ({{count}})",
"agentManager.pr.comment.sendAll": "ส่งความคิดเห็นที่ยังไม่แก้ไข {{count}} รายการไปยังเอเจนต์",
@@ -205,6 +205,7 @@ export const dict = {
"agentManager.review.metaComment": "Kullanıcı yorumu",
"agentManager.review.metaAuthor": "Yazar",
"agentManager.pr.comment.title": "Yorumlar",
"agentManager.pr.copyLink": "PR bağlantısını kopyala",
"agentManager.pr.comment.unresolvedCount": "{{count}} çözülmemiş",
"agentManager.pr.comment.resolvedGroup": "Çözüldü ({{count}})",
"agentManager.pr.comment.sendAll": "{{count}} çözülmemiş yorumu ajana gönder",
@@ -206,6 +206,7 @@ export const dict = {
"agentManager.review.metaComment": "Коментар користувача",
"agentManager.review.metaAuthor": "Автор",
"agentManager.pr.comment.title": "Коментарі",
"agentManager.pr.copyLink": "Копіювати посилання на PR",
"agentManager.pr.comment.unresolvedCount": "{{count}} невирішених",
"agentManager.pr.comment.resolvedGroup": "Вирішено ({{count}})",
"agentManager.pr.comment.sendAll": "Надіслати {{count}} невирішених агенту",
@@ -190,6 +190,7 @@ export const dict = {
"agentManager.review.metaComment": "用户评论",
"agentManager.review.metaAuthor": "作者",
"agentManager.pr.comment.title": "评论",
"agentManager.pr.copyLink": "复制 PR 链接",
"agentManager.pr.comment.unresolvedCount": "{{count}} 个未解决",
"agentManager.pr.comment.resolvedGroup": "已解决 ({{count}})",
"agentManager.pr.comment.sendAll": "将 {{count}} 个未解决评论发送给代理",
@@ -190,6 +190,7 @@ export const dict = {
"agentManager.review.metaComment": "使用者評論",
"agentManager.review.metaAuthor": "作者",
"agentManager.pr.comment.title": "留言",
"agentManager.pr.copyLink": "複製 PR 連結",
"agentManager.pr.comment.unresolvedCount": "{{count}} 個未解決",
"agentManager.pr.comment.resolvedGroup": "已解決 ({{count}})",
"agentManager.pr.comment.sendAll": "將 {{count}} 個未解決留言傳送給代理",
@@ -1,11 +1,13 @@
/** @jsxImportSource solid-js */
import { createSignal } from "solid-js"
import { IconButton } from "@kilocode/kilo-ui/icon-button"
import { useVSCode } from "../../src/context/vscode"
export function CopyButton(props: { text: string; label?: string; class?: string }) {
const vscode = useVSCode()
const [copied, setCopied] = createSignal(false)
const copy = () => {
navigator.clipboard.writeText(props.text)
vscode.postMessage({ type: "agentManager.copyToClipboard", text: props.text })
setCopied(true)
setTimeout(() => setCopied(false), 1500)
}
@@ -4,6 +4,7 @@ import { IconButton } from "@kilocode/kilo-ui/icon-button"
import { Tooltip } from "@kilocode/kilo-ui/tooltip"
import type { WorktreeState } from "../../src/types/messages"
import type { PRStatus } from "../../src/types/messages"
import { useLanguage } from "../../src/context/language"
import { PRBadge } from "./PRBadge"
import { PROverview } from "./PROverview"
import { PRReviewers } from "./PRReviewers"
@@ -12,6 +13,7 @@ import { PRChecks } from "./PRChecks"
import { PRComments } from "./PRComments"
import { commentScroll, setCommentScroll } from "./pr-comment-state"
import { PRSummary } from "./PRSummary"
import { CopyButton } from "./CopyButton"
import "./pr-panel.css"
interface PRPanelProps {
@@ -27,6 +29,7 @@ interface PRPanelProps {
}
export const PRPanel: Component<PRPanelProps> = (props) => {
const { t } = useLanguage()
let commentsRef: HTMLDivElement | undefined
let bodyRef: HTMLDivElement | undefined
let capture: number | undefined
@@ -117,6 +120,9 @@ export const PRPanel: Component<PRPanelProps> = (props) => {
<span class="am-pr-panel-number">#{props.pr.number}</span>
</div>
<div class="am-pr-panel-actions am-pr-row">
<Tooltip value={t("agentManager.pr.copyLink")} placement="bottom">
<CopyButton text={props.pr.url} label={t("agentManager.pr.copyLink")} />
</Tooltip>
<Tooltip value="Open in browser" placement="bottom">
<IconButton
icon="link"
@@ -822,6 +822,11 @@ export interface OpenWorktreeRequest {
worktreeId: string
}
export interface AgentManagerCopyToClipboardRequest {
type: "agentManager.copyToClipboard"
text: string
}
// Copy text to the system clipboard via the extension host
export interface CopyToClipboardRequest {
type: "copyToClipboard"
@@ -1591,6 +1596,7 @@ export type WebviewMessage =
| ShowLocalTerminalRequest
| ShowWorktreeTerminalRequest
| OpenWorktreeRequest
| AgentManagerCopyToClipboardRequest
| CopyToClipboardRequest
| ShowExistingLocalTerminalRequest
| AgentManagerOpenFileRequest