@cat-factory/app 0.146.0 → 0.146.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/components/prReview/PrReviewWindow.vue +65 -1
- package/app/types/execution.ts +2 -0
- package/i18n/locales/de.json +9 -0
- package/i18n/locales/en.json +9 -0
- package/i18n/locales/es.json +9 -0
- package/i18n/locales/fr.json +9 -0
- package/i18n/locales/he.json +9 -0
- package/i18n/locales/it.json +9 -0
- package/i18n/locales/ja.json +9 -0
- package/i18n/locales/pl.json +9 -0
- package/i18n/locales/tr.json +9 -0
- package/i18n/locales/uk.json +9 -0
- package/package.json +2 -2
|
@@ -63,6 +63,12 @@ const ITEM_ICON: Record<string, string> = {
|
|
|
63
63
|
const working = computed(() => status.value === 'fixing' || status.value === 'posting')
|
|
64
64
|
const findings = computed<PrReviewFinding[]>(() => state.value?.findings ?? [])
|
|
65
65
|
|
|
66
|
+
// The outcome of the last `post` attempt (null until one runs). A partial/failed post re-parks
|
|
67
|
+
// the review at `awaiting_selection` carrying this, so the human sees what posted / what failed
|
|
68
|
+
// and can retry ONLY the posting rather than re-running the whole review.
|
|
69
|
+
const postReport = computed(() => state.value?.postReport ?? null)
|
|
70
|
+
const postedIds = computed(() => new Set(state.value?.postedFindingIds ?? []))
|
|
71
|
+
|
|
66
72
|
/** Severity → chip classes (styling, not copy). */
|
|
67
73
|
const SEVERITY_CLASS: Record<PrReviewSeverity, string> = {
|
|
68
74
|
blocker: 'bg-rose-500/15 text-rose-300 ring-rose-500/30',
|
|
@@ -260,6 +266,57 @@ async function onResolve(action: PrReviewResolution): Promise<void> {
|
|
|
260
266
|
{{ prReview.error }}
|
|
261
267
|
</p>
|
|
262
268
|
|
|
269
|
+
<!-- The outcome of the most recent `post` attempt: how many of how many comments landed,
|
|
270
|
+
which failed + why, and how many findings were folded into the summary because their
|
|
271
|
+
line isn't in the PR diff. Surfaced so a partial/failed post is legible + retryable. -->
|
|
272
|
+
<div
|
|
273
|
+
v-if="postReport"
|
|
274
|
+
data-testid="pr-review-post-report"
|
|
275
|
+
class="mb-3 rounded-lg border px-3 py-2 text-[12px]"
|
|
276
|
+
:class="
|
|
277
|
+
postReport.failures.length > 0 || postReport.bodyPosted === false
|
|
278
|
+
? 'border-amber-500/40 bg-amber-500/10 text-amber-200'
|
|
279
|
+
: 'border-emerald-500/40 bg-emerald-500/10 text-emerald-200'
|
|
280
|
+
"
|
|
281
|
+
>
|
|
282
|
+
<div class="mb-1 flex items-center gap-1.5 font-medium">
|
|
283
|
+
<UIcon
|
|
284
|
+
:name="
|
|
285
|
+
postReport.failures.length > 0 || postReport.bodyPosted === false
|
|
286
|
+
? 'i-lucide-alert-triangle'
|
|
287
|
+
: 'i-lucide-check-circle-2'
|
|
288
|
+
"
|
|
289
|
+
class="h-4 w-4 shrink-0"
|
|
290
|
+
/>
|
|
291
|
+
<span>{{ t('prReview.postReport.heading') }}</span>
|
|
292
|
+
</div>
|
|
293
|
+
<p data-testid="pr-review-post-count">
|
|
294
|
+
{{
|
|
295
|
+
t('prReview.postReport.posted', {
|
|
296
|
+
posted: postReport.posted,
|
|
297
|
+
attempted: postReport.attempted,
|
|
298
|
+
})
|
|
299
|
+
}}
|
|
300
|
+
</p>
|
|
301
|
+
<p v-if="postReport.folded > 0" class="mt-0.5 opacity-90">
|
|
302
|
+
{{ t('prReview.postReport.folded', { count: postReport.folded }) }}
|
|
303
|
+
</p>
|
|
304
|
+
<template v-if="postReport.failures.length > 0">
|
|
305
|
+
<p class="mt-1.5 font-medium">{{ t('prReview.postReport.failuresHeading') }}</p>
|
|
306
|
+
<ul class="mt-0.5 space-y-0.5" data-testid="pr-review-post-failures">
|
|
307
|
+
<li v-for="f in postReport.failures" :key="f.findingId" class="flex gap-1.5">
|
|
308
|
+
<code class="shrink-0 text-amber-100"
|
|
309
|
+
>{{ f.path }}<template v-if="f.line != null">:{{ f.line }}</template></code
|
|
310
|
+
>
|
|
311
|
+
<span class="opacity-90">— {{ f.reason }}</span>
|
|
312
|
+
</li>
|
|
313
|
+
</ul>
|
|
314
|
+
</template>
|
|
315
|
+
<p v-if="postReport.bodyPosted === false && postReport.bodyError" class="mt-1.5">
|
|
316
|
+
{{ t('prReview.postReport.bodyError', { error: postReport.bodyError }) }}
|
|
317
|
+
</p>
|
|
318
|
+
</div>
|
|
319
|
+
|
|
263
320
|
<!-- The reviewer's overall assessment. -->
|
|
264
321
|
<p
|
|
265
322
|
v-if="state?.summary"
|
|
@@ -330,6 +387,13 @@ async function onResolve(action: PrReviewResolution): Promise<void> {
|
|
|
330
387
|
<span class="rounded bg-slate-800 px-1.5 py-0.5 text-[10px] text-slate-300">
|
|
331
388
|
{{ t(`prReview.category.${f.category}`) }}
|
|
332
389
|
</span>
|
|
390
|
+
<span
|
|
391
|
+
v-if="postedIds.has(f.id)"
|
|
392
|
+
data-testid="pr-review-finding-posted"
|
|
393
|
+
class="rounded bg-emerald-500/15 px-1.5 py-0.5 text-[10px] font-semibold uppercase text-emerald-300 ring-1 ring-emerald-500/30"
|
|
394
|
+
>
|
|
395
|
+
{{ t('prReview.postReport.postedBadge') }}
|
|
396
|
+
</span>
|
|
333
397
|
<h4 class="min-w-0 flex-1 text-[13px] font-medium text-slate-100">
|
|
334
398
|
{{ f.title }}
|
|
335
399
|
</h4>
|
|
@@ -381,7 +445,7 @@ async function onResolve(action: PrReviewResolution): Promise<void> {
|
|
|
381
445
|
data-testid="pr-review-post"
|
|
382
446
|
@click="onResolve('post')"
|
|
383
447
|
>
|
|
384
|
-
{{ t('prReview.post') }}
|
|
448
|
+
{{ postReport ? t('prReview.postReport.retry') : t('prReview.post') }}
|
|
385
449
|
</UButton>
|
|
386
450
|
<UButton
|
|
387
451
|
color="primary"
|
package/app/types/execution.ts
CHANGED
package/i18n/locales/de.json
CHANGED
|
@@ -4954,6 +4954,15 @@
|
|
|
4954
4954
|
"title": "Review-Kommentare werden gepostet…",
|
|
4955
4955
|
"hint": "Die ausgewählten Befunde werden als Inline-Kommentare im Pull Request veröffentlicht."
|
|
4956
4956
|
},
|
|
4957
|
+
"postReport": {
|
|
4958
|
+
"heading": "Ergebnis der Veröffentlichung",
|
|
4959
|
+
"posted": "{posted} von {attempted} Kommentaren veröffentlicht",
|
|
4960
|
+
"folded": "Zur Zusammenfassung hinzugefügt (keine Zeile im Diff zum Verankern): {count}",
|
|
4961
|
+
"failuresHeading": "Diese Kommentare konnten nicht veröffentlicht werden:",
|
|
4962
|
+
"bodyError": "Der Zusammenfassungskommentar konnte nicht veröffentlicht werden: {error}",
|
|
4963
|
+
"postedBadge": "Veröffentlicht",
|
|
4964
|
+
"retry": "Erneut veröffentlichen"
|
|
4965
|
+
},
|
|
4957
4966
|
"severity": {
|
|
4958
4967
|
"blocker": "Blocker",
|
|
4959
4968
|
"high": "Hoch",
|
package/i18n/locales/en.json
CHANGED
|
@@ -5083,6 +5083,15 @@
|
|
|
5083
5083
|
"title": "Posting review comments…",
|
|
5084
5084
|
"hint": "Publishing the selected findings as inline comments on the pull request."
|
|
5085
5085
|
},
|
|
5086
|
+
"postReport": {
|
|
5087
|
+
"heading": "Posting result",
|
|
5088
|
+
"posted": "{posted} of {attempted} comments posted",
|
|
5089
|
+
"folded": "Added to the summary (no in-diff line to anchor to): {count}",
|
|
5090
|
+
"failuresHeading": "Could not post these comments:",
|
|
5091
|
+
"bodyError": "The summary comment failed to post: {error}",
|
|
5092
|
+
"postedBadge": "Posted",
|
|
5093
|
+
"retry": "Retry posting"
|
|
5094
|
+
},
|
|
5086
5095
|
"severity": {
|
|
5087
5096
|
"blocker": "Blocker",
|
|
5088
5097
|
"high": "High",
|
package/i18n/locales/es.json
CHANGED
|
@@ -4942,6 +4942,15 @@
|
|
|
4942
4942
|
"title": "Publicando comentarios de revisión…",
|
|
4943
4943
|
"hint": "Publicando los hallazgos seleccionados como comentarios en línea en el pull request."
|
|
4944
4944
|
},
|
|
4945
|
+
"postReport": {
|
|
4946
|
+
"heading": "Resultado de la publicación",
|
|
4947
|
+
"posted": "{posted} de {attempted} comentarios publicados",
|
|
4948
|
+
"folded": "Añadidos al resumen (sin línea en el diff donde anclar): {count}",
|
|
4949
|
+
"failuresHeading": "No se pudieron publicar estos comentarios:",
|
|
4950
|
+
"bodyError": "No se pudo publicar el comentario de resumen: {error}",
|
|
4951
|
+
"postedBadge": "Publicado",
|
|
4952
|
+
"retry": "Reintentar publicación"
|
|
4953
|
+
},
|
|
4945
4954
|
"severity": {
|
|
4946
4955
|
"blocker": "Bloqueante",
|
|
4947
4956
|
"high": "Alta",
|
package/i18n/locales/fr.json
CHANGED
|
@@ -4942,6 +4942,15 @@
|
|
|
4942
4942
|
"title": "Publication des commentaires de revue…",
|
|
4943
4943
|
"hint": "Publication des points sélectionnés en commentaires en ligne sur la pull request."
|
|
4944
4944
|
},
|
|
4945
|
+
"postReport": {
|
|
4946
|
+
"heading": "Résultat de la publication",
|
|
4947
|
+
"posted": "{posted} commentaires sur {attempted} publiés",
|
|
4948
|
+
"folded": "Ajoutés au résumé (aucune ligne du diff où les ancrer) : {count}",
|
|
4949
|
+
"failuresHeading": "Impossible de publier ces commentaires :",
|
|
4950
|
+
"bodyError": "Le commentaire de synthèse n'a pas pu être publié : {error}",
|
|
4951
|
+
"postedBadge": "Publié",
|
|
4952
|
+
"retry": "Réessayer la publication"
|
|
4953
|
+
},
|
|
4945
4954
|
"severity": {
|
|
4946
4955
|
"blocker": "Bloquant",
|
|
4947
4956
|
"high": "Élevée",
|
package/i18n/locales/he.json
CHANGED
|
@@ -4953,6 +4953,15 @@
|
|
|
4953
4953
|
"title": "מפרסם הערות בדיקה…",
|
|
4954
4954
|
"hint": "מפרסם את הממצאים שנבחרו כהערות מוטבעות בבקשת המשיכה."
|
|
4955
4955
|
},
|
|
4956
|
+
"postReport": {
|
|
4957
|
+
"heading": "תוצאת הפרסום",
|
|
4958
|
+
"posted": "פורסמו {posted} מתוך {attempted} הערות",
|
|
4959
|
+
"folded": "נוספו לסיכום (אין שורה ב-diff לעגן אליה): {count}",
|
|
4960
|
+
"failuresHeading": "לא ניתן היה לפרסם את ההערות הבאות:",
|
|
4961
|
+
"bodyError": "לא ניתן היה לפרסם את הערת הסיכום: {error}",
|
|
4962
|
+
"postedBadge": "פורסם",
|
|
4963
|
+
"retry": "נסה לפרסם שוב"
|
|
4964
|
+
},
|
|
4956
4965
|
"severity": {
|
|
4957
4966
|
"blocker": "חוסם",
|
|
4958
4967
|
"high": "גבוה",
|
package/i18n/locales/it.json
CHANGED
|
@@ -4954,6 +4954,15 @@
|
|
|
4954
4954
|
"title": "Pubblicazione dei commenti di revisione…",
|
|
4955
4955
|
"hint": "Pubblicazione dei rilievi selezionati come commenti inline sulla pull request."
|
|
4956
4956
|
},
|
|
4957
|
+
"postReport": {
|
|
4958
|
+
"heading": "Esito della pubblicazione",
|
|
4959
|
+
"posted": "{posted} di {attempted} commenti pubblicati",
|
|
4960
|
+
"folded": "Aggiunti al riepilogo (nessuna riga nel diff a cui ancorarli): {count}",
|
|
4961
|
+
"failuresHeading": "Impossibile pubblicare questi commenti:",
|
|
4962
|
+
"bodyError": "Impossibile pubblicare il commento di riepilogo: {error}",
|
|
4963
|
+
"postedBadge": "Pubblicato",
|
|
4964
|
+
"retry": "Riprova la pubblicazione"
|
|
4965
|
+
},
|
|
4957
4966
|
"severity": {
|
|
4958
4967
|
"blocker": "Bloccante",
|
|
4959
4968
|
"high": "Alta",
|
package/i18n/locales/ja.json
CHANGED
|
@@ -4954,6 +4954,15 @@
|
|
|
4954
4954
|
"title": "レビューコメントを投稿中…",
|
|
4955
4955
|
"hint": "選択した指摘をプルリクエストのインラインコメントとして公開しています。"
|
|
4956
4956
|
},
|
|
4957
|
+
"postReport": {
|
|
4958
|
+
"heading": "投稿結果",
|
|
4959
|
+
"posted": "{attempted} 件中 {posted} 件のコメントを投稿しました",
|
|
4960
|
+
"folded": "差分に対応する行がないため要約に追加: {count}",
|
|
4961
|
+
"failuresHeading": "次のコメントを投稿できませんでした:",
|
|
4962
|
+
"bodyError": "要約コメントを投稿できませんでした: {error}",
|
|
4963
|
+
"postedBadge": "投稿済み",
|
|
4964
|
+
"retry": "投稿を再試行"
|
|
4965
|
+
},
|
|
4957
4966
|
"severity": {
|
|
4958
4967
|
"blocker": "ブロッカー",
|
|
4959
4968
|
"high": "高",
|
package/i18n/locales/pl.json
CHANGED
|
@@ -4942,6 +4942,15 @@
|
|
|
4942
4942
|
"title": "Publikowanie komentarzy przeglądu…",
|
|
4943
4943
|
"hint": "Publikowanie wybranych uwag jako komentarzy w treści pull requesta."
|
|
4944
4944
|
},
|
|
4945
|
+
"postReport": {
|
|
4946
|
+
"heading": "Wynik publikacji",
|
|
4947
|
+
"posted": "Opublikowano {posted} z {attempted} komentarzy",
|
|
4948
|
+
"folded": "Dodano do podsumowania (brak wiersza w różnicy do zakotwiczenia): {count}",
|
|
4949
|
+
"failuresHeading": "Nie udało się opublikować tych komentarzy:",
|
|
4950
|
+
"bodyError": "Nie udało się opublikować komentarza podsumowującego: {error}",
|
|
4951
|
+
"postedBadge": "Opublikowano",
|
|
4952
|
+
"retry": "Ponów publikację"
|
|
4953
|
+
},
|
|
4945
4954
|
"severity": {
|
|
4946
4955
|
"blocker": "Blokujące",
|
|
4947
4956
|
"high": "Wysokie",
|
package/i18n/locales/tr.json
CHANGED
|
@@ -4954,6 +4954,15 @@
|
|
|
4954
4954
|
"title": "İnceleme yorumları gönderiliyor…",
|
|
4955
4955
|
"hint": "Seçili bulgular pull request üzerinde satır içi yorum olarak yayımlanıyor."
|
|
4956
4956
|
},
|
|
4957
|
+
"postReport": {
|
|
4958
|
+
"heading": "Gönderim sonucu",
|
|
4959
|
+
"posted": "{attempted} yorumdan {posted} tanesi gönderildi",
|
|
4960
|
+
"folded": "Özete eklendi (diff'te tutturulacak satır yok): {count}",
|
|
4961
|
+
"failuresHeading": "Bu yorumlar gönderilemedi:",
|
|
4962
|
+
"bodyError": "Özet yorumu gönderilemedi: {error}",
|
|
4963
|
+
"postedBadge": "Gönderildi",
|
|
4964
|
+
"retry": "Gönderimi yeniden dene"
|
|
4965
|
+
},
|
|
4957
4966
|
"severity": {
|
|
4958
4967
|
"blocker": "Engelleyici",
|
|
4959
4968
|
"high": "Yüksek",
|
package/i18n/locales/uk.json
CHANGED
|
@@ -4942,6 +4942,15 @@
|
|
|
4942
4942
|
"title": "Публікація коментарів огляду…",
|
|
4943
4943
|
"hint": "Публікація вибраних зауважень як вбудованих коментарів у pull request."
|
|
4944
4944
|
},
|
|
4945
|
+
"postReport": {
|
|
4946
|
+
"heading": "Результат публікації",
|
|
4947
|
+
"posted": "Опубліковано {posted} з {attempted} коментарів",
|
|
4948
|
+
"folded": "Додано до підсумку (немає рядка в різниці для прив'язки): {count}",
|
|
4949
|
+
"failuresHeading": "Не вдалося опублікувати ці коментарі:",
|
|
4950
|
+
"bodyError": "Не вдалося опублікувати підсумковий коментар: {error}",
|
|
4951
|
+
"postedBadge": "Опубліковано",
|
|
4952
|
+
"retry": "Повторити публікацію"
|
|
4953
|
+
},
|
|
4945
4954
|
"severity": {
|
|
4946
4955
|
"blocker": "Блокер",
|
|
4947
4956
|
"high": "Високий",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/app",
|
|
3
|
-
"version": "0.146.
|
|
3
|
+
"version": "0.146.1",
|
|
4
4
|
"description": "Reusable Nuxt layer for the Agent Architecture Board SPA (components, stores, composables, pages). Consume it from a thin deployment app via `extends: ['@cat-factory/app']` and point it at your backend with NUXT_PUBLIC_API_BASE. See deploy/frontend for an example.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"valibot": "^1.4.2",
|
|
41
41
|
"vue": "3.5.40",
|
|
42
42
|
"wretch": "^3.0.9",
|
|
43
|
-
"@cat-factory/contracts": "0.152.
|
|
43
|
+
"@cat-factory/contracts": "0.152.2"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@toad-contracts/testing": "0.3.2",
|