mirror of
https://github.com/Kilo-Org/kilocode.git
synced 2026-09-17 06:31:43 +08:00
Merge pull request #13358 from Kilo-Org/improve-review-comments-ui
feat(vscode): improve review comment previews
This commit is contained in:
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:fbdc00f26ece2fc49d25c26b128b9f69fa562c2c0b2d54c4fd88f8c476145046
|
||||
size 25076
|
||||
+2
-2
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2ae8197b9d63cf977fa5112a1b02eb48bc22a1577b4dee15abd475805f0db5b0
|
||||
size 11769
|
||||
oid sha256:efeff70e266d94ae5b40b05694eb2011c84d2da9e91eafe2dc01f775797e9135
|
||||
size 19048
|
||||
|
||||
+3
-5
@@ -181,18 +181,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "إرسال الكل إلى الدردشة ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "تعليق المراجعة",
|
||||
"agentManager.review.inlineCount": "تعليقات المراجعة ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} ملفًا",
|
||||
"agentManager.review.showMore": "إظهار {{count}} أخرى",
|
||||
"agentManager.review.showLess": "إظهار أقل",
|
||||
"agentManager.review.clearAll": "مسح الكل",
|
||||
"agentManager.review.commentOnLine": "تعليق على السطر {{line}}",
|
||||
"agentManager.review.editCommentOnLine": "تعديل التعليق على السطر {{line}}",
|
||||
"agentManager.review.commentPlaceholder": "اترك تعليقًا...",
|
||||
"agentManager.review.commentAction": "تعليق",
|
||||
"agentManager.review.sendToChat": "إرسال إلى الدردشة",
|
||||
"agentManager.review.metaFile": "الملف",
|
||||
"agentManager.review.metaLine": "السطر",
|
||||
"agentManager.review.metaComment": "تعليق المستخدم",
|
||||
"agentManager.review.metaAuthor": "المؤلف",
|
||||
"agentManager.pr.comment.title": "التعليقات",
|
||||
"agentManager.pr.copyLink": "نسخ رابط PR",
|
||||
"agentManager.pr.comment.unresolvedCount": "{{count}} غير محلولة",
|
||||
|
||||
+3
-5
@@ -184,18 +184,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "Enviar tudo para o chat ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "Comentário de revisão",
|
||||
"agentManager.review.inlineCount": "Comentários de revisão ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} arquivos",
|
||||
"agentManager.review.showMore": "Mostrar mais {{count}}",
|
||||
"agentManager.review.showLess": "Mostrar menos",
|
||||
"agentManager.review.clearAll": "Limpar tudo",
|
||||
"agentManager.review.commentOnLine": "Comentar na linha {{line}}",
|
||||
"agentManager.review.editCommentOnLine": "Editar comentário na linha {{line}}",
|
||||
"agentManager.review.commentPlaceholder": "Deixe um comentário...",
|
||||
"agentManager.review.commentAction": "Comentar",
|
||||
"agentManager.review.sendToChat": "Enviar para o chat",
|
||||
"agentManager.review.metaFile": "Arquivo",
|
||||
"agentManager.review.metaLine": "Linha",
|
||||
"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",
|
||||
|
||||
+3
-5
@@ -184,18 +184,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "Pošalji sve u chat ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "Komentar pregleda",
|
||||
"agentManager.review.inlineCount": "Komentari pregleda ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} datoteka",
|
||||
"agentManager.review.showMore": "Prikaži još {{count}}",
|
||||
"agentManager.review.showLess": "Prikaži manje",
|
||||
"agentManager.review.clearAll": "Očisti sve",
|
||||
"agentManager.review.commentOnLine": "Komentar na liniji {{line}}",
|
||||
"agentManager.review.editCommentOnLine": "Uredi komentar na liniji {{line}}",
|
||||
"agentManager.review.commentPlaceholder": "Ostavi komentar...",
|
||||
"agentManager.review.commentAction": "Komentariši",
|
||||
"agentManager.review.sendToChat": "Pošalji u chat",
|
||||
"agentManager.review.metaFile": "Datoteka",
|
||||
"agentManager.review.metaLine": "Linija",
|
||||
"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",
|
||||
|
||||
+3
-5
@@ -185,18 +185,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "Send alt til chat ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "Review-kommentar",
|
||||
"agentManager.review.inlineCount": "Review-kommentarer ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} filer",
|
||||
"agentManager.review.showMore": "Vis {{count}} mere",
|
||||
"agentManager.review.showLess": "Vis mindre",
|
||||
"agentManager.review.clearAll": "Ryd alle",
|
||||
"agentManager.review.commentOnLine": "Kommenter på linje {{line}}",
|
||||
"agentManager.review.editCommentOnLine": "Rediger kommentar på linje {{line}}",
|
||||
"agentManager.review.commentPlaceholder": "Skriv en kommentar...",
|
||||
"agentManager.review.commentAction": "Kommenter",
|
||||
"agentManager.review.sendToChat": "Send til chat",
|
||||
"agentManager.review.metaFile": "Fil",
|
||||
"agentManager.review.metaLine": "Linje",
|
||||
"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",
|
||||
|
||||
@@ -186,18 +186,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "Alles an den Chat senden ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "Review-Kommentar",
|
||||
"agentManager.review.inlineCount": "Review-Kommentare ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} Dateien",
|
||||
"agentManager.review.showMore": "{{count}} weitere anzeigen",
|
||||
"agentManager.review.showLess": "Weniger anzeigen",
|
||||
"agentManager.review.clearAll": "Alle löschen",
|
||||
"agentManager.review.commentOnLine": "Kommentar zu Zeile {{line}}",
|
||||
"agentManager.review.editCommentOnLine": "Kommentar zu Zeile {{line}} bearbeiten",
|
||||
"agentManager.review.commentPlaceholder": "Kommentar hinterlassen...",
|
||||
"agentManager.review.commentAction": "Kommentieren",
|
||||
"agentManager.review.sendToChat": "An Chat senden",
|
||||
"agentManager.review.metaFile": "Datei",
|
||||
"agentManager.review.metaLine": "Zeile",
|
||||
"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",
|
||||
|
||||
@@ -187,18 +187,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "Send all to chat ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "Review comment",
|
||||
"agentManager.review.inlineCount": "Review comments ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} files",
|
||||
"agentManager.review.showMore": "Show {{count}} more",
|
||||
"agentManager.review.showLess": "Show less",
|
||||
"agentManager.review.clearAll": "Clear all",
|
||||
"agentManager.review.commentOnLine": "Comment on line {{line}}",
|
||||
"agentManager.review.editCommentOnLine": "Edit comment on line {{line}}",
|
||||
"agentManager.review.commentPlaceholder": "Leave a comment...",
|
||||
"agentManager.review.commentAction": "Comment",
|
||||
"agentManager.review.sendToChat": "Send to chat",
|
||||
"agentManager.review.metaFile": "File",
|
||||
"agentManager.review.metaLine": "Line",
|
||||
"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",
|
||||
|
||||
+3
-5
@@ -185,18 +185,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "Enviar todo al chat ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "Comentario de revisión",
|
||||
"agentManager.review.inlineCount": "Comentarios de revisión ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} archivos",
|
||||
"agentManager.review.showMore": "Mostrar {{count}} más",
|
||||
"agentManager.review.showLess": "Mostrar menos",
|
||||
"agentManager.review.clearAll": "Borrar todo",
|
||||
"agentManager.review.commentOnLine": "Comentar en la línea {{line}}",
|
||||
"agentManager.review.editCommentOnLine": "Editar comentario en la línea {{line}}",
|
||||
"agentManager.review.commentPlaceholder": "Deja un comentario...",
|
||||
"agentManager.review.commentAction": "Comentar",
|
||||
"agentManager.review.sendToChat": "Enviar al chat",
|
||||
"agentManager.review.metaFile": "Archivo",
|
||||
"agentManager.review.metaLine": "Línea",
|
||||
"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",
|
||||
|
||||
+3
-5
@@ -188,18 +188,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "ارسال همه به چت ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "بررسی نظر",
|
||||
"agentManager.review.inlineCount": "نظرات بررسی ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} فایل",
|
||||
"agentManager.review.showMore": "نمایش {{count}} مورد بیشتر",
|
||||
"agentManager.review.showLess": "نمایش کمتر",
|
||||
"agentManager.review.clearAll": "پاک کردن همه",
|
||||
"agentManager.review.commentOnLine": "نظر در خط {{line}}",
|
||||
"agentManager.review.editCommentOnLine": "ویرایش نظر در خط {{line}}",
|
||||
"agentManager.review.commentPlaceholder": "یک نظر بگذارید...",
|
||||
"agentManager.review.commentAction": "نظر",
|
||||
"agentManager.review.sendToChat": "ارسال به چت",
|
||||
"agentManager.review.metaFile": "فایل",
|
||||
"agentManager.review.metaLine": "خط",
|
||||
"agentManager.review.metaComment": "نظر کاربر",
|
||||
"agentManager.review.metaAuthor": "نویسنده",
|
||||
"agentManager.pr.comment.title": "نظرات",
|
||||
"agentManager.pr.copyLink": "کپی پیوند PR",
|
||||
"agentManager.pr.comment.unresolvedCount": "{{count}} حلنشده",
|
||||
|
||||
+3
-5
@@ -186,18 +186,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "Tout envoyer au chat ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "Commentaire de révision",
|
||||
"agentManager.review.inlineCount": "Commentaires de révision ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} fichiers",
|
||||
"agentManager.review.showMore": "Afficher {{count}} de plus",
|
||||
"agentManager.review.showLess": "Afficher moins",
|
||||
"agentManager.review.clearAll": "Tout effacer",
|
||||
"agentManager.review.commentOnLine": "Commenter la ligne {{line}}",
|
||||
"agentManager.review.editCommentOnLine": "Modifier le commentaire de la ligne {{line}}",
|
||||
"agentManager.review.commentPlaceholder": "Laisser un commentaire...",
|
||||
"agentManager.review.commentAction": "Commenter",
|
||||
"agentManager.review.sendToChat": "Envoyer au chat",
|
||||
"agentManager.review.metaFile": "Fichier",
|
||||
"agentManager.review.metaLine": "Ligne",
|
||||
"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",
|
||||
|
||||
+3
-5
@@ -191,18 +191,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "Invia tutto alla chat ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "Cmd+Invio",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Invio",
|
||||
"agentManager.review.modalTitle": "Commento di revisione",
|
||||
"agentManager.review.inlineCount": "Commenti di revisione ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} file",
|
||||
"agentManager.review.showMore": "Mostra altri {{count}}",
|
||||
"agentManager.review.showLess": "Mostra meno",
|
||||
"agentManager.review.clearAll": "Cancella tutto",
|
||||
"agentManager.review.commentOnLine": "Commenta la riga {{line}}",
|
||||
"agentManager.review.editCommentOnLine": "Modifica commento alla riga {{line}}",
|
||||
"agentManager.review.commentPlaceholder": "Lascia un commento...",
|
||||
"agentManager.review.commentAction": "Commenta",
|
||||
"agentManager.review.sendToChat": "Invia alla chat",
|
||||
"agentManager.review.metaFile": "File",
|
||||
"agentManager.review.metaLine": "Riga",
|
||||
"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",
|
||||
|
||||
+3
-5
@@ -185,18 +185,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "すべてをチャットに送信 ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "レビューコメント",
|
||||
"agentManager.review.inlineCount": "レビューコメント ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} ファイル",
|
||||
"agentManager.review.showMore": "さらに {{count}} 件を表示",
|
||||
"agentManager.review.showLess": "表示を減らす",
|
||||
"agentManager.review.clearAll": "すべてクリア",
|
||||
"agentManager.review.commentOnLine": "{{line}} 行目にコメント",
|
||||
"agentManager.review.editCommentOnLine": "{{line}} 行目のコメントを編集",
|
||||
"agentManager.review.commentPlaceholder": "コメントを入力...",
|
||||
"agentManager.review.commentAction": "コメント",
|
||||
"agentManager.review.sendToChat": "チャットに送信",
|
||||
"agentManager.review.metaFile": "ファイル",
|
||||
"agentManager.review.metaLine": "行",
|
||||
"agentManager.review.metaComment": "ユーザーコメント",
|
||||
"agentManager.review.metaAuthor": "作成者",
|
||||
"agentManager.pr.comment.title": "コメント",
|
||||
"agentManager.pr.copyLink": "PRリンクをコピー",
|
||||
"agentManager.pr.comment.unresolvedCount": "{{count}} 件未解決",
|
||||
|
||||
+3
-5
@@ -183,18 +183,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "모두 채팅으로 보내기 ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "리뷰 코멘트",
|
||||
"agentManager.review.inlineCount": "리뷰 코멘트 ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}}개 파일",
|
||||
"agentManager.review.showMore": "{{count}}개 더 보기",
|
||||
"agentManager.review.showLess": "간략히 보기",
|
||||
"agentManager.review.clearAll": "모두 지우기",
|
||||
"agentManager.review.commentOnLine": "{{line}}줄에 댓글",
|
||||
"agentManager.review.editCommentOnLine": "{{line}}줄 댓글 편집",
|
||||
"agentManager.review.commentPlaceholder": "댓글을 남기세요...",
|
||||
"agentManager.review.commentAction": "댓글",
|
||||
"agentManager.review.sendToChat": "채팅으로 보내기",
|
||||
"agentManager.review.metaFile": "파일",
|
||||
"agentManager.review.metaLine": "라인",
|
||||
"agentManager.review.metaComment": "사용자 코멘트",
|
||||
"agentManager.review.metaAuthor": "작성자",
|
||||
"agentManager.pr.comment.title": "댓글",
|
||||
"agentManager.pr.copyLink": "PR 링크 복사",
|
||||
"agentManager.pr.comment.unresolvedCount": "{{count}}개 미해결",
|
||||
|
||||
+3
-5
@@ -190,18 +190,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "Alles naar chat sturen ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "Opmerking bekijken",
|
||||
"agentManager.review.inlineCount": "Opmerkingen bekijken ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} bestanden",
|
||||
"agentManager.review.showMore": "{{count}} meer weergeven",
|
||||
"agentManager.review.showLess": "Minder weergeven",
|
||||
"agentManager.review.clearAll": "Alles wissen",
|
||||
"agentManager.review.commentOnLine": "Opmerking op regel {{line}}",
|
||||
"agentManager.review.editCommentOnLine": "Opmerking op regel {{line}} bewerken",
|
||||
"agentManager.review.commentPlaceholder": "Laat een opmerking achter...",
|
||||
"agentManager.review.commentAction": "Opmerking",
|
||||
"agentManager.review.sendToChat": "Naar chat sturen",
|
||||
"agentManager.review.metaFile": "Bestand",
|
||||
"agentManager.review.metaLine": "Regel",
|
||||
"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",
|
||||
|
||||
+3
-5
@@ -182,18 +182,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "Send alt til chat ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "Review-kommentar",
|
||||
"agentManager.review.inlineCount": "Review-kommentarer ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} filer",
|
||||
"agentManager.review.showMore": "Vis {{count}} flere",
|
||||
"agentManager.review.showLess": "Vis færre",
|
||||
"agentManager.review.clearAll": "Fjern alle",
|
||||
"agentManager.review.commentOnLine": "Kommenter på linje {{line}}",
|
||||
"agentManager.review.editCommentOnLine": "Rediger kommentar på linje {{line}}",
|
||||
"agentManager.review.commentPlaceholder": "Legg igjen en kommentar...",
|
||||
"agentManager.review.commentAction": "Kommenter",
|
||||
"agentManager.review.sendToChat": "Send til chat",
|
||||
"agentManager.review.metaFile": "Fil",
|
||||
"agentManager.review.metaLine": "Linje",
|
||||
"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",
|
||||
|
||||
+3
-5
@@ -184,18 +184,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "Wyślij wszystko do czatu ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "Komentarz do przeglądu",
|
||||
"agentManager.review.inlineCount": "Komentarze do przeglądu ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} plików",
|
||||
"agentManager.review.showMore": "Pokaż {{count}} więcej",
|
||||
"agentManager.review.showLess": "Pokaż mniej",
|
||||
"agentManager.review.clearAll": "Wyczyść wszystko",
|
||||
"agentManager.review.commentOnLine": "Skomentuj linię {{line}}",
|
||||
"agentManager.review.editCommentOnLine": "Edytuj komentarz do linii {{line}}",
|
||||
"agentManager.review.commentPlaceholder": "Zostaw komentarz...",
|
||||
"agentManager.review.commentAction": "Komentuj",
|
||||
"agentManager.review.sendToChat": "Wyślij do czatu",
|
||||
"agentManager.review.metaFile": "Plik",
|
||||
"agentManager.review.metaLine": "Linia",
|
||||
"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",
|
||||
|
||||
+3
-5
@@ -185,18 +185,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "Отправить всё в чат ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "Комментарий к ревью",
|
||||
"agentManager.review.inlineCount": "Комментарии к ревью ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} файлов",
|
||||
"agentManager.review.showMore": "Показать ещё {{count}}",
|
||||
"agentManager.review.showLess": "Показать меньше",
|
||||
"agentManager.review.clearAll": "Очистить всё",
|
||||
"agentManager.review.commentOnLine": "Комментарий к строке {{line}}",
|
||||
"agentManager.review.editCommentOnLine": "Редактировать комментарий к строке {{line}}",
|
||||
"agentManager.review.commentPlaceholder": "Оставьте комментарий...",
|
||||
"agentManager.review.commentAction": "Комментировать",
|
||||
"agentManager.review.sendToChat": "Отправить в чат",
|
||||
"agentManager.review.metaFile": "Файл",
|
||||
"agentManager.review.metaLine": "Строка",
|
||||
"agentManager.review.metaComment": "Комментарий пользователя",
|
||||
"agentManager.review.metaAuthor": "Автор",
|
||||
"agentManager.pr.comment.title": "Комментарии",
|
||||
"agentManager.pr.copyLink": "Копировать ссылку на PR",
|
||||
"agentManager.pr.comment.unresolvedCount": "{{count}} нерешённых",
|
||||
|
||||
+3
-5
@@ -179,18 +179,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "ส่งทั้งหมดไปยังแชท ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "ความคิดเห็นการตรวจสอบ",
|
||||
"agentManager.review.inlineCount": "ความคิดเห็นการตรวจสอบ ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} ไฟล์",
|
||||
"agentManager.review.showMore": "แสดงเพิ่มอีก {{count}} รายการ",
|
||||
"agentManager.review.showLess": "แสดงน้อยลง",
|
||||
"agentManager.review.clearAll": "ล้างทั้งหมด",
|
||||
"agentManager.review.commentOnLine": "แสดงความคิดเห็นที่บรรทัด {{line}}",
|
||||
"agentManager.review.editCommentOnLine": "แก้ไขความคิดเห็นที่บรรทัด {{line}}",
|
||||
"agentManager.review.commentPlaceholder": "แสดงความคิดเห็น...",
|
||||
"agentManager.review.commentAction": "แสดงความคิดเห็น",
|
||||
"agentManager.review.sendToChat": "ส่งไปยังแชท",
|
||||
"agentManager.review.metaFile": "ไฟล์",
|
||||
"agentManager.review.metaLine": "บรรทัด",
|
||||
"agentManager.review.metaComment": "ความคิดเห็นของผู้ใช้",
|
||||
"agentManager.review.metaAuthor": "ผู้เขียน",
|
||||
"agentManager.pr.comment.title": "ความคิดเห็น",
|
||||
"agentManager.pr.copyLink": "คัดลอกลิงก์ PR",
|
||||
"agentManager.pr.comment.unresolvedCount": "ยังไม่แก้ไข {{count}} รายการ",
|
||||
|
||||
+3
-5
@@ -192,18 +192,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "Tümünü sohbete gönder ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "Yorumu gözden geçir",
|
||||
"agentManager.review.inlineCount": "Yorumları gözden geçir ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} dosya",
|
||||
"agentManager.review.showMore": "{{count}} tane daha göster",
|
||||
"agentManager.review.showLess": "Daha az göster",
|
||||
"agentManager.review.clearAll": "Tümünü temizle",
|
||||
"agentManager.review.commentOnLine": "{{line}}. satıra yorum yap",
|
||||
"agentManager.review.editCommentOnLine": "{{line}}. satırdaki yorumu düzenle",
|
||||
"agentManager.review.commentPlaceholder": "Bir yorum bırakın...",
|
||||
"agentManager.review.commentAction": "Yorum Yap",
|
||||
"agentManager.review.sendToChat": "Sohbete gönder",
|
||||
"agentManager.review.metaFile": "Dosya",
|
||||
"agentManager.review.metaLine": "Satır",
|
||||
"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ş",
|
||||
|
||||
+3
-5
@@ -193,18 +193,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "Надіслати все до чату ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "Перегляд коментаря",
|
||||
"agentManager.review.inlineCount": "Переглянути коментарі ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} файлів",
|
||||
"agentManager.review.showMore": "Показати ще {{count}}",
|
||||
"agentManager.review.showLess": "Показати менше",
|
||||
"agentManager.review.clearAll": "Очистити все",
|
||||
"agentManager.review.commentOnLine": "Коментар до рядка {{line}}",
|
||||
"agentManager.review.editCommentOnLine": "Редагувати коментар до рядка {{line}}",
|
||||
"agentManager.review.commentPlaceholder": "Залишити коментар...",
|
||||
"agentManager.review.commentAction": "Коментувати",
|
||||
"agentManager.review.sendToChat": "Надіслати до чату",
|
||||
"agentManager.review.metaFile": "Файл",
|
||||
"agentManager.review.metaLine": "Рядок",
|
||||
"agentManager.review.metaComment": "Коментар користувача",
|
||||
"agentManager.review.metaAuthor": "Автор",
|
||||
"agentManager.pr.comment.title": "Коментарі",
|
||||
"agentManager.pr.copyLink": "Копіювати посилання на PR",
|
||||
"agentManager.pr.comment.unresolvedCount": "{{count}} невирішених",
|
||||
|
||||
+3
-5
@@ -177,18 +177,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "全部发送到聊天 ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "审查评论",
|
||||
"agentManager.review.inlineCount": "审查评论 ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} 个文件",
|
||||
"agentManager.review.showMore": "显示更多 {{count}} 条",
|
||||
"agentManager.review.showLess": "显示更少",
|
||||
"agentManager.review.clearAll": "全部清除",
|
||||
"agentManager.review.commentOnLine": "在第 {{line}} 行评论",
|
||||
"agentManager.review.editCommentOnLine": "编辑第 {{line}} 行评论",
|
||||
"agentManager.review.commentPlaceholder": "留下评论...",
|
||||
"agentManager.review.commentAction": "评论",
|
||||
"agentManager.review.sendToChat": "发送到聊天",
|
||||
"agentManager.review.metaFile": "文件",
|
||||
"agentManager.review.metaLine": "行",
|
||||
"agentManager.review.metaComment": "用户评论",
|
||||
"agentManager.review.metaAuthor": "作者",
|
||||
"agentManager.pr.comment.title": "评论",
|
||||
"agentManager.pr.copyLink": "复制 PR 链接",
|
||||
"agentManager.pr.comment.unresolvedCount": "{{count}} 个未解决",
|
||||
|
||||
+3
-5
@@ -177,18 +177,16 @@ export const dict = {
|
||||
"agentManager.review.sendAllToChatWithCount": "全部傳送到聊天 ({{count}})",
|
||||
"agentManager.review.sendAllShortcut.mac": "⌘Enter",
|
||||
"agentManager.review.sendAllShortcut.other": "Ctrl+Enter",
|
||||
"agentManager.review.modalTitle": "審查評論",
|
||||
"agentManager.review.inlineCount": "審查評論 ({{count}})",
|
||||
"agentManager.review.fileCount": "{{count}} 個檔案",
|
||||
"agentManager.review.showMore": "顯示更多 {{count}} 則",
|
||||
"agentManager.review.showLess": "顯示更少",
|
||||
"agentManager.review.clearAll": "全部清除",
|
||||
"agentManager.review.commentOnLine": "在第 {{line}} 行留言",
|
||||
"agentManager.review.editCommentOnLine": "編輯第 {{line}} 行留言",
|
||||
"agentManager.review.commentPlaceholder": "留下留言...",
|
||||
"agentManager.review.commentAction": "留言",
|
||||
"agentManager.review.sendToChat": "傳送到聊天",
|
||||
"agentManager.review.metaFile": "檔案",
|
||||
"agentManager.review.metaLine": "行",
|
||||
"agentManager.review.metaComment": "使用者評論",
|
||||
"agentManager.review.metaAuthor": "作者",
|
||||
"agentManager.pr.comment.title": "留言",
|
||||
"agentManager.pr.copyLink": "複製 PR 連結",
|
||||
"agentManager.pr.comment.unresolvedCount": "{{count}} 個未解決",
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
import { For, Show, type Component } from "solid-js"
|
||||
import { For, Show, createMemo, createSignal, type Component } from "solid-js"
|
||||
import { Button } from "@kilocode/kilo-ui/button"
|
||||
import { Dialog } from "@kilocode/kilo-ui/dialog"
|
||||
import { Icon } from "@kilocode/kilo-ui/icon"
|
||||
import { IconButton } from "@kilocode/kilo-ui/icon-button"
|
||||
import { Markdown } from "@kilocode/kilo-ui/markdown"
|
||||
import { Tooltip } from "@kilocode/kilo-ui/tooltip"
|
||||
import { useDialog } from "@kilocode/kilo-ui/context/dialog"
|
||||
import { isPRReviewComment } from "../../../../src/shared/review-comments"
|
||||
import { useLanguage } from "../../context/language"
|
||||
import { useVSCode } from "../../context/vscode"
|
||||
@@ -20,94 +18,51 @@ interface ReviewCommentsProps {
|
||||
onClear?: () => void
|
||||
}
|
||||
|
||||
/** Rows rendered before the "show more" toggle takes over. */
|
||||
const PREVIEW = 3
|
||||
/** Rows after which the expanded list becomes internally scrollable. */
|
||||
const SCROLL = 6
|
||||
|
||||
export const ReviewComments: Component<ReviewCommentsProps> = (props) => {
|
||||
const language = useLanguage()
|
||||
const vscode = useVSCode()
|
||||
const dialog = useDialog()
|
||||
const [open, setOpen] = createSignal(true)
|
||||
const [all, setAll] = createSignal(false)
|
||||
const [full, setFull] = createSignal<string[]>([])
|
||||
|
||||
const author = (item: ReviewCommentEntry) => (isPRReviewComment(item) ? item.author : "")
|
||||
const side = (item: ReviewCommentEntry) => (isPRReviewComment(item) ? "" : item.side === "deletions" ? "-" : "+")
|
||||
const line = (item: ReviewCommentEntry) => (item.line ? `${side(item)}${item.line}` : "")
|
||||
const body = (item: ReviewCommentEntry) => (isPRReviewComment(item) ? item.body : item.comment)
|
||||
const snippet = (item: ReviewCommentEntry) => (isPRReviewComment(item) ? item.diffHunk : item.selectedText)
|
||||
const label = (item: ReviewCommentEntry) => (item.file ? fileName(item.file) : `@${author(item)}`)
|
||||
const title = (item: ReviewCommentEntry) => {
|
||||
const at = line(item)
|
||||
return at ? `${label(item)} ${at}` : label(item)
|
||||
}
|
||||
const outdated = (item: ReviewCommentEntry) => isPRReviewComment(item) && item.outdated === true
|
||||
|
||||
const open = (item: ReviewCommentEntry) => {
|
||||
const files = createMemo(() => new Set(props.comments.filter((item) => item.file).map((item) => item.file)).size)
|
||||
// Collapsing a single extra row is not worth a toggle, so only hide from two up.
|
||||
const hidden = createMemo(() => (props.comments.length > PREVIEW + 1 ? props.comments.length - PREVIEW : 0))
|
||||
const rows = createMemo(() => (hidden() > 0 && !all() ? props.comments.slice(0, PREVIEW) : props.comments))
|
||||
|
||||
const toggle = (id: string) =>
|
||||
setFull((prev) => (prev.includes(id) ? prev.filter((entry) => entry !== id) : [...prev, id]))
|
||||
|
||||
const reveal = (item: ReviewCommentEntry) => {
|
||||
if (!item.file) return
|
||||
// An outdated PR thread is anchored to a line that has since moved, so
|
||||
// jumping there lands on unrelated code. Open the file at the top instead.
|
||||
const at = outdated(item) ? undefined : item.line
|
||||
const event = new CustomEvent("kilo:open-file", {
|
||||
cancelable: true,
|
||||
detail: { filePath: item.file, line: item.line, column: 1, sessionID: props.sessionID },
|
||||
detail: { filePath: item.file, line: at, column: 1, sessionID: props.sessionID },
|
||||
})
|
||||
if (window.dispatchEvent(event))
|
||||
vscode.postMessage({
|
||||
type: "openFile",
|
||||
filePath: item.file,
|
||||
line: item.line,
|
||||
line: at,
|
||||
column: 1,
|
||||
sessionID: props.sessionID,
|
||||
})
|
||||
dialog.close()
|
||||
}
|
||||
|
||||
const show = (item: ReviewCommentEntry) => {
|
||||
dialog.show(() => (
|
||||
<Dialog title={language.t("agentManager.review.modalTitle")} fit>
|
||||
<div class="prompt-review-modal">
|
||||
<div class="prompt-review-modal-head">
|
||||
<span class="prompt-review-modal-headline">{title(item)}</span>
|
||||
<Show when={item.file}>
|
||||
<Tooltip value={language.t("agentManager.diff.openFile")} placement="top">
|
||||
<IconButton
|
||||
icon="go-to-file"
|
||||
size="small"
|
||||
variant="ghost"
|
||||
label={language.t("agentManager.diff.openFile")}
|
||||
onClick={() => open(item)}
|
||||
/>
|
||||
</Tooltip>
|
||||
</Show>
|
||||
</div>
|
||||
|
||||
<div class="prompt-review-modal-grid">
|
||||
<Show when={author(item)}>
|
||||
{(login) => (
|
||||
<>
|
||||
<span class="prompt-review-modal-label">{language.t("agentManager.review.metaAuthor")}</span>
|
||||
<span class="prompt-review-modal-value">@{login()}</span>
|
||||
</>
|
||||
)}
|
||||
</Show>
|
||||
<Show when={item.file}>
|
||||
{(file) => (
|
||||
<>
|
||||
<span class="prompt-review-modal-label">{language.t("agentManager.review.metaFile")}</span>
|
||||
<code class="prompt-review-modal-value">{file()}</code>
|
||||
</>
|
||||
)}
|
||||
</Show>
|
||||
<Show when={item.line}>
|
||||
{(value) => (
|
||||
<>
|
||||
<span class="prompt-review-modal-label">{language.t("agentManager.review.metaLine")}</span>
|
||||
<span class="prompt-review-modal-value">L{value()}</span>
|
||||
</>
|
||||
)}
|
||||
</Show>
|
||||
<span class="prompt-review-modal-label">{language.t("agentManager.review.metaComment")}</span>
|
||||
<span class="prompt-review-modal-value">
|
||||
<Show when={isPRReviewComment(item)} fallback={body(item)}>
|
||||
<Markdown text={body(item)} />
|
||||
</Show>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<Show when={snippet(item)}>{(value) => <pre class="prompt-review-modal-snippet">{value()}</pre>}</Show>
|
||||
</div>
|
||||
</Dialog>
|
||||
))
|
||||
}
|
||||
|
||||
return (
|
||||
@@ -117,48 +72,110 @@ export const ReviewComments: Component<ReviewCommentsProps> = (props) => {
|
||||
data-component="review-comments"
|
||||
>
|
||||
<div class="prompt-review-comments-header">
|
||||
<span class="prompt-review-comments-title">
|
||||
{language.t("agentManager.review.inlineCount", { count: props.comments.length })}
|
||||
</span>
|
||||
<button
|
||||
type="button"
|
||||
class="prompt-review-comments-toggle"
|
||||
aria-expanded={open()}
|
||||
onClick={() => setOpen(!open())}
|
||||
>
|
||||
<Icon name={open() ? "chevron-down" : "chevron-right"} size="small" />
|
||||
<span class="prompt-review-comments-title">
|
||||
{language.t("agentManager.review.inlineCount", { count: props.comments.length })}
|
||||
</span>
|
||||
<Show when={files() > 1}>
|
||||
<span class="prompt-review-comments-meta">
|
||||
{language.t("agentManager.review.fileCount", { count: files() })}
|
||||
</span>
|
||||
</Show>
|
||||
</button>
|
||||
<Show when={props.onClear}>
|
||||
<Button variant="ghost" size="small" onClick={() => props.onClear?.()}>
|
||||
{language.t("agentManager.review.clearAll")}
|
||||
</Button>
|
||||
</Show>
|
||||
</div>
|
||||
<div class="prompt-review-chip-list">
|
||||
<For each={props.comments}>
|
||||
{(item) => (
|
||||
<div class="prompt-review-chip">
|
||||
<button
|
||||
type="button"
|
||||
class="prompt-review-chip-body"
|
||||
onClick={() => (isPRReviewComment(item) ? show(item) : open(item))}
|
||||
>
|
||||
<span class="prompt-review-chip-icon">
|
||||
<Icon name={isPRReviewComment(item) ? "github" : "comment"} size="small" />
|
||||
</span>
|
||||
<span class="prompt-review-chip-copy">
|
||||
<span class="prompt-review-chip-main">
|
||||
<span class="prompt-review-chip-title">{label(item)}</span>
|
||||
<Show when={line(item)}>{(value) => <span class="prompt-review-chip-line">{value()}</span>}</Show>
|
||||
|
||||
<Show when={open()}>
|
||||
<div
|
||||
class="prompt-review-list"
|
||||
classList={{ "prompt-review-list--scroll": all() && props.comments.length > SCROLL }}
|
||||
>
|
||||
<For each={rows()}>
|
||||
{(item) => (
|
||||
<div class="prompt-review-row" classList={{ "prompt-review-row--full": full().includes(item.id) }}>
|
||||
<div class="prompt-review-row-top">
|
||||
<span class="prompt-review-row-icon">
|
||||
<Icon name={isPRReviewComment(item) ? "github" : "comment"} size="small" />
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
<Show when={props.onRemove}>
|
||||
<button
|
||||
type="button"
|
||||
class="prompt-review-chip-remove"
|
||||
onClick={() => props.onRemove?.(item.id)}
|
||||
aria-label={language.t("common.delete")}
|
||||
>
|
||||
×
|
||||
</button>
|
||||
</Show>
|
||||
</div>
|
||||
)}
|
||||
</For>
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
class="prompt-review-row-main"
|
||||
aria-expanded={full().includes(item.id)}
|
||||
onClick={() => toggle(item.id)}
|
||||
>
|
||||
<span class="prompt-review-row-head">
|
||||
<span class="prompt-review-row-label">{label(item)}</span>
|
||||
<Show when={line(item)}>{(value) => <span class="prompt-review-row-line">{value()}</span>}</Show>
|
||||
<Show when={item.file && author(item)}>
|
||||
<span class="prompt-review-row-author">@{author(item)}</span>
|
||||
</Show>
|
||||
<Show when={outdated(item)}>
|
||||
<span class="prompt-review-row-badge">{language.t("agentManager.pr.comment.outdated")}</span>
|
||||
</Show>
|
||||
</span>
|
||||
<Show when={!full().includes(item.id)}>
|
||||
<span class="prompt-review-row-preview">{body(item)}</span>
|
||||
</Show>
|
||||
</button>
|
||||
<Show when={item.file}>
|
||||
<Tooltip value={language.t("agentManager.diff.openFile")} placement="top">
|
||||
<IconButton
|
||||
icon="go-to-file"
|
||||
size="small"
|
||||
variant="ghost"
|
||||
label={language.t("agentManager.diff.openFile")}
|
||||
onClick={() => reveal(item)}
|
||||
/>
|
||||
</Tooltip>
|
||||
</Show>
|
||||
<Show when={props.onRemove}>
|
||||
<button
|
||||
type="button"
|
||||
class="prompt-review-row-remove"
|
||||
onClick={() => props.onRemove?.(item.id)}
|
||||
aria-label={language.t("common.delete")}
|
||||
>
|
||||
×
|
||||
</button>
|
||||
</Show>
|
||||
</div>
|
||||
|
||||
<Show when={full().includes(item.id)}>
|
||||
<div class="prompt-review-row-detail">
|
||||
<Show when={item.file}>{(file) => <code class="prompt-review-row-path">{file()}</code>}</Show>
|
||||
<div class="prompt-review-row-text">
|
||||
<Show when={isPRReviewComment(item)} fallback={body(item)}>
|
||||
<Markdown text={body(item)} />
|
||||
</Show>
|
||||
</div>
|
||||
<Show when={snippet(item)}>
|
||||
{(value) => <pre class="prompt-review-row-snippet">{value()}</pre>}
|
||||
</Show>
|
||||
</div>
|
||||
</Show>
|
||||
</div>
|
||||
)}
|
||||
</For>
|
||||
</div>
|
||||
|
||||
<Show when={hidden() > 0}>
|
||||
<button type="button" class="prompt-review-more" onClick={() => setAll(!all())}>
|
||||
{all()
|
||||
? language.t("agentManager.review.showLess")
|
||||
: language.t("agentManager.review.showMore", { count: hidden() })}
|
||||
</button>
|
||||
</Show>
|
||||
</Show>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ import type {
|
||||
Part,
|
||||
QuestionRequest,
|
||||
ReviewComment,
|
||||
ReviewCommentEntry,
|
||||
SessionModelUsage,
|
||||
SuggestionRequest,
|
||||
TodoItem,
|
||||
@@ -236,6 +237,29 @@ export const ChatViewSessionDockStability: Story = {
|
||||
},
|
||||
}
|
||||
|
||||
/** Builds the user message a review-comment send produces: markdown prefix + review metadata. */
|
||||
function reviewMessage(comments: ReviewCommentEntry[]) {
|
||||
const prefix = formatReviewCommentsMarkdown(comments)
|
||||
const message: Message = {
|
||||
id: "review-user-message",
|
||||
sessionID: SESSION_ID,
|
||||
role: "user",
|
||||
createdAt: new Date(0).toISOString(),
|
||||
time: { created: 0 },
|
||||
}
|
||||
const parts: Part[] = [
|
||||
{
|
||||
id: "review-user-part",
|
||||
sessionID: SESSION_ID,
|
||||
messageID: message.id,
|
||||
type: "text",
|
||||
text: `${prefix}\n\nPlease address these review comments.`,
|
||||
metadata: reviewMetadata({ version: 1, comments }),
|
||||
},
|
||||
]
|
||||
return <VscodeUserMessage message={message} parts={parts} />
|
||||
}
|
||||
|
||||
export const UserMessageReviewComments: Story = {
|
||||
name: "User message — interactive review comments",
|
||||
render: () => {
|
||||
@@ -253,36 +277,38 @@ export const UserMessageReviewComments: Story = {
|
||||
file: "resources/messages/KiloBundle_bs.properties",
|
||||
side: "deletions",
|
||||
line: 235,
|
||||
comment: "Translate the modified setting description.",
|
||||
comment:
|
||||
"Translate the modified setting description. The Bosnian bundle still ships the English sentence, so the settings panel shows mixed languages for anyone running a localized IDE.",
|
||||
selectedText: "settings.models.smallModel.description=The lightweight model used for quick tasks.",
|
||||
},
|
||||
]
|
||||
const prefix = formatReviewCommentsMarkdown(comments)
|
||||
const text = `${prefix}\n\nPlease address these review comments.`
|
||||
const review = { version: 1 as const, comments }
|
||||
const message: Message = {
|
||||
id: "review-user-message",
|
||||
sessionID: SESSION_ID,
|
||||
role: "user",
|
||||
createdAt: new Date(0).toISOString(),
|
||||
time: { created: 0 },
|
||||
}
|
||||
const parts: Part[] = [
|
||||
{
|
||||
id: "review-user-part",
|
||||
sessionID: SESSION_ID,
|
||||
messageID: message.id,
|
||||
type: "text",
|
||||
text,
|
||||
metadata: reviewMetadata(review),
|
||||
},
|
||||
]
|
||||
|
||||
return (
|
||||
<StoryProviders sessionID={SESSION_ID} status="idle">
|
||||
<div style={{ "max-height": "400px", padding: "12px" }}>
|
||||
<VscodeUserMessage message={message} parts={parts} />
|
||||
</div>
|
||||
<div style={{ "max-height": "400px", padding: "12px" }}>{reviewMessage(comments)}</div>
|
||||
</StoryProviders>
|
||||
)
|
||||
},
|
||||
}
|
||||
|
||||
/**
|
||||
* Many local review comments at once. Locks in the collapsed preview + "show
|
||||
* more" behavior so a large paste cannot take over the transcript.
|
||||
*/
|
||||
export const UserMessageManyReviewComments: Story = {
|
||||
name: "User message — many review comments",
|
||||
render: () => {
|
||||
const local: ReviewCommentEntry[] = Array.from({ length: 8 }, (_, index) => ({
|
||||
id: `local-${index}`,
|
||||
file: `src/agent-manager/handlers/worktree-${index}.ts`,
|
||||
side: index % 2 === 0 ? "additions" : "deletions",
|
||||
line: 40 + index * 17,
|
||||
comment: `Guard the ${index % 2 === 0 ? "apply" : "discard"} path against a missing worktree before touching git.`,
|
||||
selectedText: `const worktree = state.worktrees[${index}]`,
|
||||
}))
|
||||
return (
|
||||
<StoryProviders sessionID={SESSION_ID} status="idle">
|
||||
<div style={{ "max-height": "620px", padding: "12px" }}>{reviewMessage(local)}</div>
|
||||
</StoryProviders>
|
||||
)
|
||||
},
|
||||
|
||||
@@ -11,7 +11,7 @@ body.vscode-high-contrast-light {
|
||||
.feedback-button,
|
||||
.startup-error-retry,
|
||||
.image-attachment-remove,
|
||||
.prompt-review-chip-remove,
|
||||
.prompt-review-row-remove,
|
||||
.session-tab-bar .am-tab-close,
|
||||
[data-slot="question-progress-nav"],
|
||||
[data-slot="question-collapse-toggle"] {
|
||||
@@ -100,8 +100,8 @@ body.vscode-high-contrast-light {
|
||||
border-color: var(--vscode-contrastBorder, transparent) !important;
|
||||
}
|
||||
|
||||
/* Prompt review chips */
|
||||
.prompt-review-chip {
|
||||
/* Prompt review rows */
|
||||
.prompt-review-row {
|
||||
border-color: var(--vscode-contrastBorder, var(--vscode-input-border));
|
||||
}
|
||||
|
||||
|
||||
@@ -55,12 +55,45 @@
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.prompt-review-comments-toggle {
|
||||
all: unset;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
min-width: 0;
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
cursor: pointer;
|
||||
color: var(--text-weak, var(--vscode-descriptionForeground));
|
||||
}
|
||||
|
||||
.prompt-review-comments-toggle:focus-visible {
|
||||
outline: 1px solid var(--border-focus, var(--vscode-focusBorder));
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.prompt-review-comments-title {
|
||||
flex-shrink: 0;
|
||||
font-size: var(--kilo-font-size-11);
|
||||
font-weight: 600;
|
||||
color: var(--vscode-foreground);
|
||||
}
|
||||
|
||||
/* The file summary is the first thing to give up room in a narrow sidebar. */
|
||||
.prompt-review-comments-meta {
|
||||
min-width: 0;
|
||||
font-size: var(--kilo-font-size-10);
|
||||
color: var(--text-weaker, var(--vscode-descriptionForeground));
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.prompt-review-comments-meta::before {
|
||||
content: "·";
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.prompt-review-comments-header [data-component="button"] {
|
||||
min-height: 20px;
|
||||
height: 20px;
|
||||
@@ -68,53 +101,48 @@
|
||||
font-size: var(--kilo-font-size-10);
|
||||
}
|
||||
|
||||
.prompt-review-chip-list {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, minmax(0, 280px));
|
||||
gap: 6px;
|
||||
max-height: 124px;
|
||||
overflow: auto;
|
||||
align-content: start;
|
||||
justify-content: start;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.prompt-review-chip {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1fr) auto;
|
||||
align-items: center;
|
||||
border: 1px solid var(--vscode-input-border, var(--vscode-panel-border));
|
||||
border-radius: 6px;
|
||||
background: var(--vscode-editor-background, rgba(127, 127, 127, 0.08));
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.prompt-review-chip-body {
|
||||
all: unset;
|
||||
.prompt-review-list {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
width: 100%;
|
||||
flex-direction: column;
|
||||
gap: 4px;
|
||||
min-width: 0;
|
||||
box-sizing: border-box;
|
||||
padding: 6px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.prompt-review-chip:hover {
|
||||
border-color: var(--border-focus, var(--vscode-focusBorder));
|
||||
.prompt-review-list--scroll {
|
||||
max-height: 320px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.prompt-review-chip-body:focus-visible {
|
||||
outline: 1px solid var(--border-focus, var(--vscode-focusBorder));
|
||||
.prompt-review-row {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 6px;
|
||||
background: var(--surface-inset-base, rgba(127, 127, 127, 0.08));
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.prompt-review-chip-icon {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
.prompt-review-row:hover {
|
||||
border-color: var(--border-weak-base, var(--vscode-panel-border));
|
||||
}
|
||||
|
||||
.prompt-review-row--full {
|
||||
border-color: var(--border-weak-base, var(--vscode-panel-border));
|
||||
background: var(--vscode-editor-background, rgba(127, 127, 127, 0.12));
|
||||
}
|
||||
|
||||
.prompt-review-row-top {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 6px;
|
||||
min-width: 0;
|
||||
padding: 6px;
|
||||
}
|
||||
|
||||
.prompt-review-row-icon {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
border-radius: 5px;
|
||||
background: var(--surface-inset-base, rgba(127, 127, 127, 0.12));
|
||||
color: var(--text-weak, var(--vscode-descriptionForeground));
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -122,21 +150,29 @@
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.prompt-review-chip-copy {
|
||||
min-width: 0;
|
||||
.prompt-review-row-main {
|
||||
all: unset;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 2px;
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.prompt-review-chip-main {
|
||||
.prompt-review-row-main:focus-visible {
|
||||
outline: 1px solid var(--border-focus, var(--vscode-focusBorder));
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.prompt-review-row-head {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.prompt-review-chip-title {
|
||||
flex: 1;
|
||||
.prompt-review-row-label {
|
||||
min-width: 0;
|
||||
font-size: var(--kilo-font-size-10);
|
||||
font-weight: 600;
|
||||
@@ -146,17 +182,104 @@
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.prompt-review-chip-line {
|
||||
.prompt-review-row-line,
|
||||
.prompt-review-row-author {
|
||||
flex-shrink: 0;
|
||||
font-size: var(--kilo-font-size-10);
|
||||
font-weight: 600;
|
||||
color: var(--text-weak, var(--vscode-descriptionForeground));
|
||||
}
|
||||
|
||||
.prompt-review-chip-remove {
|
||||
margin-right: 4px;
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
.prompt-review-row-badge {
|
||||
flex-shrink: 0;
|
||||
padding: 0 4px;
|
||||
border-radius: 4px;
|
||||
background: var(--surface-inset-base-hover, rgba(127, 127, 127, 0.2));
|
||||
font-size: var(--kilo-font-size-10);
|
||||
color: var(--text-weak, var(--vscode-descriptionForeground));
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.prompt-review-row-preview {
|
||||
font-size: var(--kilo-font-size-11);
|
||||
line-height: 1.35;
|
||||
color: var(--vscode-foreground);
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
line-clamp: 2;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
overflow-wrap: anywhere;
|
||||
text-align: start;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
.prompt-review-row-detail {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 6px;
|
||||
padding: 0 6px 6px 30px;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.prompt-review-row-path {
|
||||
font-family: var(--vscode-editor-font-family, var(--vscode-font-family));
|
||||
font-size: var(--kilo-font-size-10);
|
||||
color: var(--text-weaker, var(--vscode-descriptionForeground));
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.prompt-review-row-text {
|
||||
font-size: var(--kilo-font-size-11);
|
||||
line-height: 1.4;
|
||||
color: var(--vscode-foreground);
|
||||
white-space: pre-wrap;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
/* Markdown bodies are authored for full-width panels; keep them compact here.
|
||||
Flex on the root also drops the whitespace line box the renderer emits. */
|
||||
.prompt-review-row-text [data-component="markdown"] {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 4px;
|
||||
font-size: var(--kilo-font-size-11);
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.prompt-review-row-text :where(p, ul, ol, pre, blockquote, h1, h2, h3, h4, h5, h6) {
|
||||
margin: 0 0 4px;
|
||||
font-size: inherit;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
.prompt-review-row-text :where(p, ul, ol, pre, blockquote, h1, h2, h3, h4, h5, h6):last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.prompt-review-row-text :where(code) {
|
||||
font-size: var(--kilo-font-size-10);
|
||||
}
|
||||
|
||||
.prompt-review-row-snippet {
|
||||
margin: 0;
|
||||
padding: 6px 8px;
|
||||
border-radius: 6px;
|
||||
border: 1px solid var(--vscode-panel-border);
|
||||
background: var(--vscode-textCodeBlock-background, rgba(127, 127, 127, 0.12));
|
||||
font-family: var(--vscode-editor-font-family, var(--vscode-font-family));
|
||||
font-size: var(--kilo-font-size-10);
|
||||
line-height: 1.35;
|
||||
max-height: 160px;
|
||||
overflow: auto;
|
||||
white-space: pre-wrap;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.prompt-review-row-remove {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
flex-shrink: 0;
|
||||
border: none;
|
||||
border-radius: 999px;
|
||||
background: var(--surface-inset-base, rgba(127, 127, 127, 0.16));
|
||||
@@ -170,91 +293,32 @@
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.prompt-review-chip-remove:hover {
|
||||
.prompt-review-row-remove:hover {
|
||||
color: var(--vscode-foreground);
|
||||
background: var(--surface-inset-base-hover, rgba(127, 127, 127, 0.24));
|
||||
}
|
||||
|
||||
.prompt-review-chip-remove:focus-visible {
|
||||
.prompt-review-row-remove:focus-visible {
|
||||
outline: 1px solid var(--border-focus, var(--vscode-focusBorder));
|
||||
}
|
||||
|
||||
.prompt-review-modal {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
padding: 0 20px 10px;
|
||||
min-width: 360px;
|
||||
max-width: 600px;
|
||||
}
|
||||
|
||||
.prompt-review-modal-head {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.prompt-review-modal-headline {
|
||||
font-size: var(--font-size-base);
|
||||
.prompt-review-more {
|
||||
all: unset;
|
||||
align-self: flex-start;
|
||||
padding: 2px 4px;
|
||||
border-radius: 4px;
|
||||
font-size: var(--kilo-font-size-10);
|
||||
font-weight: 600;
|
||||
color: var(--text-weak, var(--vscode-descriptionForeground));
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.prompt-review-more:hover {
|
||||
color: var(--vscode-foreground);
|
||||
}
|
||||
|
||||
.prompt-review-modal-grid {
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr;
|
||||
gap: 6px 12px;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.prompt-review-modal-label {
|
||||
font-size: var(--kilo-font-size-10);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.3px;
|
||||
color: var(--text-weaker, var(--vscode-descriptionForeground));
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.prompt-review-modal-value {
|
||||
margin: 0;
|
||||
min-width: 0;
|
||||
font-size: var(--kilo-font-size-11);
|
||||
line-height: 1.35;
|
||||
color: var(--vscode-foreground);
|
||||
white-space: pre-wrap;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.prompt-review-modal-grid code.prompt-review-modal-value {
|
||||
font-family: var(--vscode-editor-font-family, var(--vscode-font-family));
|
||||
}
|
||||
|
||||
.prompt-review-modal-snippet {
|
||||
margin: 0;
|
||||
padding: 6px 8px;
|
||||
border-radius: 6px;
|
||||
border: 1px solid var(--vscode-panel-border);
|
||||
background: var(--vscode-textCodeBlock-background, rgba(127, 127, 127, 0.12));
|
||||
font-family: var(--vscode-editor-font-family, var(--vscode-font-family));
|
||||
font-size: var(--kilo-font-size-10);
|
||||
line-height: 1.35;
|
||||
max-height: 120px;
|
||||
overflow: auto;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
@media (max-width: 700px) {
|
||||
.prompt-review-chip-list {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.prompt-review-modal {
|
||||
min-width: min(360px, calc(100vw - 32px));
|
||||
max-width: calc(100vw - 24px);
|
||||
padding: 0 16px 10px;
|
||||
}
|
||||
.prompt-review-more:focus-visible {
|
||||
outline: 1px solid var(--border-focus, var(--vscode-focusBorder));
|
||||
}
|
||||
|
||||
/* Image Attachments */
|
||||
|
||||
Reference in New Issue
Block a user