@cat-factory/app 0.147.0 → 0.147.2
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/board/nodes/TaskPipelineMini.vue +23 -2
- package/app/components/pipeline/PipelineProgress.vue +25 -1
- package/app/components/prReview/PrReviewPhaseBadge.vue +74 -0
- package/app/components/prReview/PrReviewWindow.vue +458 -361
- package/app/utils/prReviewProgress.spec.ts +122 -0
- package/app/utils/prReviewProgress.ts +79 -0
- package/i18n/locales/de.json +24 -3
- package/i18n/locales/en.json +24 -3
- package/i18n/locales/es.json +24 -3
- package/i18n/locales/fr.json +24 -3
- package/i18n/locales/he.json +24 -3
- package/i18n/locales/it.json +24 -3
- package/i18n/locales/ja.json +24 -3
- package/i18n/locales/pl.json +24 -3
- package/i18n/locales/tr.json +24 -3
- package/i18n/locales/uk.json +24 -3
- package/package.json +1 -1
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import type { PrReviewStepState, StepSubtasks } from '~/types/execution'
|
|
3
|
+
import {
|
|
4
|
+
activeChunkLabels,
|
|
5
|
+
chunkReviewPercent,
|
|
6
|
+
isSlicingChunks,
|
|
7
|
+
prReviewPhase,
|
|
8
|
+
} from './prReviewProgress'
|
|
9
|
+
|
|
10
|
+
const subtasks = (over: Partial<StepSubtasks>): StepSubtasks => ({
|
|
11
|
+
completed: 0,
|
|
12
|
+
inProgress: 0,
|
|
13
|
+
total: 0,
|
|
14
|
+
...over,
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
describe('isSlicingChunks', () => {
|
|
18
|
+
it('is slicing when there is no todo list yet (null/undefined or empty)', () => {
|
|
19
|
+
// No plan committed → the reviewer is still grouping the diff into chunks.
|
|
20
|
+
expect(isSlicingChunks(null)).toBe(true)
|
|
21
|
+
expect(isSlicingChunks(undefined)).toBe(true)
|
|
22
|
+
expect(isSlicingChunks(subtasks({ total: 0 }))).toBe(true)
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
it('is not slicing once the todo list exists (slicing is done)', () => {
|
|
26
|
+
expect(isSlicingChunks(subtasks({ total: 3, completed: 1 }))).toBe(false)
|
|
27
|
+
// A single-chunk plan still counts as sliced — a plan of size 1 is a committed plan.
|
|
28
|
+
expect(isSlicingChunks(subtasks({ total: 1 }))).toBe(false)
|
|
29
|
+
})
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
describe('chunkReviewPercent', () => {
|
|
33
|
+
it('is 0 with no plan (avoids 0/0 → NaN)', () => {
|
|
34
|
+
expect(chunkReviewPercent(null)).toBe(0)
|
|
35
|
+
expect(chunkReviewPercent(subtasks({ total: 0, completed: 0 }))).toBe(0)
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
it('rounds completion to an integer percent', () => {
|
|
39
|
+
expect(chunkReviewPercent(subtasks({ total: 4, completed: 1 }))).toBe(25)
|
|
40
|
+
// 1/3 → 33.33… rounds to 33 (the old inline math emitted a fractional width).
|
|
41
|
+
expect(chunkReviewPercent(subtasks({ total: 3, completed: 1 }))).toBe(33)
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
it('clamps to 0..100 even if counts are inconsistent', () => {
|
|
45
|
+
expect(chunkReviewPercent(subtasks({ total: 2, completed: 5 }))).toBe(100)
|
|
46
|
+
expect(chunkReviewPercent(subtasks({ total: 2, completed: -1 }))).toBe(0)
|
|
47
|
+
})
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
describe('activeChunkLabels', () => {
|
|
51
|
+
it('returns only the in-progress chunk labels, in order', () => {
|
|
52
|
+
const s = subtasks({
|
|
53
|
+
total: 3,
|
|
54
|
+
completed: 1,
|
|
55
|
+
inProgress: 1,
|
|
56
|
+
items: [
|
|
57
|
+
{ label: 'auth', status: 'completed' },
|
|
58
|
+
{ label: 'db layer', status: 'in_progress' },
|
|
59
|
+
{ label: 'ui', status: 'pending' },
|
|
60
|
+
],
|
|
61
|
+
})
|
|
62
|
+
expect(activeChunkLabels(s)).toEqual(['db layer'])
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
it('is empty with no items or no in-progress chunk', () => {
|
|
66
|
+
expect(activeChunkLabels(null)).toEqual([])
|
|
67
|
+
expect(activeChunkLabels(subtasks({ total: 2 }))).toEqual([])
|
|
68
|
+
expect(
|
|
69
|
+
activeChunkLabels(
|
|
70
|
+
subtasks({
|
|
71
|
+
total: 1,
|
|
72
|
+
completed: 1,
|
|
73
|
+
items: [{ label: 'only', status: 'completed' }],
|
|
74
|
+
}),
|
|
75
|
+
),
|
|
76
|
+
).toEqual([])
|
|
77
|
+
})
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
// `prReviewPhase` reads only `status`; the other PrReviewStepState fields are irrelevant here.
|
|
81
|
+
const state = (status: PrReviewStepState['status']): PrReviewStepState =>
|
|
82
|
+
({ status }) as PrReviewStepState
|
|
83
|
+
|
|
84
|
+
describe('prReviewPhase', () => {
|
|
85
|
+
it('is null with no live review or a terminal/passed-through status', () => {
|
|
86
|
+
expect(prReviewPhase(null, null)).toBeNull()
|
|
87
|
+
expect(prReviewPhase(undefined, subtasks({ total: 3, completed: 3 }))).toBeNull()
|
|
88
|
+
expect(prReviewPhase(state('done'), subtasks({ total: 3, completed: 3 }))).toBeNull()
|
|
89
|
+
expect(prReviewPhase(state('skipped'), null)).toBeNull()
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
it('is slicing while reviewing with no todo list yet (counts zeroed)', () => {
|
|
93
|
+
// No plan committed → don't leak a misleading 0/0 slice count.
|
|
94
|
+
expect(prReviewPhase(state('reviewing'), null)).toEqual({
|
|
95
|
+
kind: 'slicing',
|
|
96
|
+
completed: 0,
|
|
97
|
+
total: 0,
|
|
98
|
+
})
|
|
99
|
+
expect(prReviewPhase(state('reviewing'), subtasks({ total: 0 }))).toEqual({
|
|
100
|
+
kind: 'slicing',
|
|
101
|
+
completed: 0,
|
|
102
|
+
total: 0,
|
|
103
|
+
})
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
it('is reviewing with the slice counts once the todo list exists', () => {
|
|
107
|
+
expect(prReviewPhase(state('reviewing'), subtasks({ total: 4, completed: 1 }))).toEqual({
|
|
108
|
+
kind: 'reviewing',
|
|
109
|
+
completed: 1,
|
|
110
|
+
total: 4,
|
|
111
|
+
})
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
it('maps the parked / resolving statuses to their phase', () => {
|
|
115
|
+
expect(
|
|
116
|
+
prReviewPhase(state('awaiting_selection'), subtasks({ total: 4, completed: 4 }))?.kind,
|
|
117
|
+
).toBe('awaiting')
|
|
118
|
+
expect(prReviewPhase(state('challenging'), null)?.kind).toBe('challenging')
|
|
119
|
+
expect(prReviewPhase(state('fixing'), null)?.kind).toBe('fixing')
|
|
120
|
+
expect(prReviewPhase(state('posting'), null)?.kind).toBe('posting')
|
|
121
|
+
})
|
|
122
|
+
})
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { PrReviewStepState, StepSubtasks } from '~/types/execution'
|
|
2
|
+
|
|
3
|
+
// Pure derivation of the PR deep-reviewer's `reviewing`-phase progress, factored out of
|
|
4
|
+
// `PrReviewWindow.vue` so it is unit-testable independently of the Vue component.
|
|
5
|
+
//
|
|
6
|
+
// The reviewer maintains a per-slice todo list (`step.subtasks`) once it has grouped the diff
|
|
7
|
+
// into cohesive chunks. The PRESENCE of that list is the signal that slicing is done, so the two
|
|
8
|
+
// `reviewing` sub-phases are told apart by it:
|
|
9
|
+
// - no todo list yet (`total === 0`) → still SLICING the diff into chunks (no plan committed).
|
|
10
|
+
// - todo list present (`total > 0`) → slicing DONE, working through the chunks.
|
|
11
|
+
|
|
12
|
+
/** True while the reviewer is still grouping the diff into chunks (it has not committed a plan). */
|
|
13
|
+
export function isSlicingChunks(subtasks: StepSubtasks | null | undefined): boolean {
|
|
14
|
+
return (subtasks?.total ?? 0) <= 0
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Chunk-review completion as an integer percent, clamped 0..100, for the progress bar. */
|
|
18
|
+
export function chunkReviewPercent(subtasks: StepSubtasks | null | undefined): number {
|
|
19
|
+
const total = subtasks?.total ?? 0
|
|
20
|
+
if (total <= 0) return 0
|
|
21
|
+
const completed = subtasks?.completed ?? 0
|
|
22
|
+
return Math.min(100, Math.max(0, Math.round((completed / total) * 100)))
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Labels of the chunk(s) the reviewer is actively working through right now (for the callout). */
|
|
26
|
+
export function activeChunkLabels(subtasks: StepSubtasks | null | undefined): string[] {
|
|
27
|
+
return subtasks?.items?.filter((i) => i.status === 'in_progress').map((i) => i.label) ?? []
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* The at-a-glance phase of a `pr-reviewer` step, collapsing its `prReview.status` (+ the
|
|
32
|
+
* slicing-vs-reviewing signal from the todo list) into a single kind the board surfaces label
|
|
33
|
+
* without re-deriving. `completed`/`total` carry the slice counts for the `reviewing` kind.
|
|
34
|
+
* Returns `null` for the terminal / passed-through states (`done`/`skipped`) and when there is
|
|
35
|
+
* no live review — those have no in-flight phase to show.
|
|
36
|
+
*/
|
|
37
|
+
export type PrReviewPhaseKind =
|
|
38
|
+
| 'slicing'
|
|
39
|
+
| 'reviewing'
|
|
40
|
+
| 'awaiting'
|
|
41
|
+
| 'challenging'
|
|
42
|
+
| 'fixing'
|
|
43
|
+
| 'posting'
|
|
44
|
+
|
|
45
|
+
export interface PrReviewPhase {
|
|
46
|
+
kind: PrReviewPhaseKind
|
|
47
|
+
/** Slices whose review is finished (0 while slicing). */
|
|
48
|
+
completed: number
|
|
49
|
+
/** Total slices the reviewer grouped the diff into (0 while slicing). */
|
|
50
|
+
total: number
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function prReviewPhase(
|
|
54
|
+
state: PrReviewStepState | null | undefined,
|
|
55
|
+
subtasks: StepSubtasks | null | undefined,
|
|
56
|
+
): PrReviewPhase | null {
|
|
57
|
+
const status = state?.status
|
|
58
|
+
if (!status) return null
|
|
59
|
+
const completed = subtasks?.completed ?? 0
|
|
60
|
+
const total = subtasks?.total ?? 0
|
|
61
|
+
switch (status) {
|
|
62
|
+
case 'reviewing':
|
|
63
|
+
// No todo list yet ⇒ still grouping the diff; otherwise working through the chunks.
|
|
64
|
+
return isSlicingChunks(subtasks)
|
|
65
|
+
? { kind: 'slicing', completed: 0, total: 0 }
|
|
66
|
+
: { kind: 'reviewing', completed, total }
|
|
67
|
+
case 'awaiting_selection':
|
|
68
|
+
return { kind: 'awaiting', completed, total }
|
|
69
|
+
case 'challenging':
|
|
70
|
+
return { kind: 'challenging', completed, total }
|
|
71
|
+
case 'fixing':
|
|
72
|
+
return { kind: 'fixing', completed, total }
|
|
73
|
+
case 'posting':
|
|
74
|
+
return { kind: 'posting', completed, total }
|
|
75
|
+
default:
|
|
76
|
+
// done / skipped — no live phase to surface.
|
|
77
|
+
return null
|
|
78
|
+
}
|
|
79
|
+
}
|
package/i18n/locales/de.json
CHANGED
|
@@ -4943,10 +4943,31 @@
|
|
|
4943
4943
|
"suggestedFix": "Lösungsvorschlag:",
|
|
4944
4944
|
"line": "Zeile {line}",
|
|
4945
4945
|
"reviewing": {
|
|
4946
|
-
"
|
|
4947
|
-
|
|
4946
|
+
"slicing": {
|
|
4947
|
+
"title": "Diff wird in Abschnitte zerlegt…",
|
|
4948
|
+
"hint": "Die geänderten Dateien werden in zusammenhängende Abschnitte gruppiert, damit jeder einzeln geprüft werden kann. Die Abschnittsliste erscheint hier, sobald die Zerlegung abgeschlossen ist."
|
|
4949
|
+
},
|
|
4950
|
+
"reviewingChunks": {
|
|
4951
|
+
"title": "Abschnitte werden geprüft…",
|
|
4952
|
+
"hint": "Die Zerlegung ist abgeschlossen. Jeder Abschnitt wird nacheinander geprüft und die Ergebnisse werden gesammelt."
|
|
4953
|
+
},
|
|
4948
4954
|
"chunks": "{completed} von {total} Abschnitten geprüft",
|
|
4949
|
-
"inProgress": "{count} in Bearbeitung"
|
|
4955
|
+
"inProgress": "{count} in Bearbeitung",
|
|
4956
|
+
"activeHeading": "Wird jetzt geprüft",
|
|
4957
|
+
"chunksHeading": "Abschnitte",
|
|
4958
|
+
"chunkStatus": {
|
|
4959
|
+
"completed": "Geprüft",
|
|
4960
|
+
"in_progress": "Wird geprüft…",
|
|
4961
|
+
"pending": "In Warteschlange"
|
|
4962
|
+
}
|
|
4963
|
+
},
|
|
4964
|
+
"phase": {
|
|
4965
|
+
"slicing": "Wird aufgeteilt…",
|
|
4966
|
+
"reviewing": "Prüfe {completed}/{total} Abschnitte",
|
|
4967
|
+
"awaiting": "Ergebnisse bereit",
|
|
4968
|
+
"challenging": "Wird untersucht…",
|
|
4969
|
+
"fixing": "Wird behoben…",
|
|
4970
|
+
"posting": "Wird veröffentlicht…"
|
|
4950
4971
|
},
|
|
4951
4972
|
"challenge": {
|
|
4952
4973
|
"action": "Anfechten",
|
package/i18n/locales/en.json
CHANGED
|
@@ -5072,10 +5072,31 @@
|
|
|
5072
5072
|
"suggestedFix": "Suggested fix:",
|
|
5073
5073
|
"line": "line {line}",
|
|
5074
5074
|
"reviewing": {
|
|
5075
|
-
"
|
|
5076
|
-
|
|
5075
|
+
"slicing": {
|
|
5076
|
+
"title": "Slicing the diff into chunks…",
|
|
5077
|
+
"hint": "Grouping the changed files into cohesive chunks so each can be reviewed on its own. The chunk list appears here once slicing is done."
|
|
5078
|
+
},
|
|
5079
|
+
"reviewingChunks": {
|
|
5080
|
+
"title": "Reviewing the chunks…",
|
|
5081
|
+
"hint": "Slicing is done. Working through each chunk one at a time and collecting findings."
|
|
5082
|
+
},
|
|
5077
5083
|
"chunks": "{completed} of {total} chunks reviewed",
|
|
5078
|
-
"inProgress": "{count} in progress"
|
|
5084
|
+
"inProgress": "{count} in progress",
|
|
5085
|
+
"activeHeading": "Reviewing now",
|
|
5086
|
+
"chunksHeading": "Chunks",
|
|
5087
|
+
"chunkStatus": {
|
|
5088
|
+
"completed": "Reviewed",
|
|
5089
|
+
"in_progress": "Reviewing…",
|
|
5090
|
+
"pending": "Queued"
|
|
5091
|
+
}
|
|
5092
|
+
},
|
|
5093
|
+
"phase": {
|
|
5094
|
+
"slicing": "Slicing…",
|
|
5095
|
+
"reviewing": "Reviewing {completed}/{total} slices",
|
|
5096
|
+
"awaiting": "Findings ready",
|
|
5097
|
+
"challenging": "Investigating…",
|
|
5098
|
+
"fixing": "Fixing…",
|
|
5099
|
+
"posting": "Posting…"
|
|
5079
5100
|
},
|
|
5080
5101
|
"challenge": {
|
|
5081
5102
|
"action": "Challenge",
|
package/i18n/locales/es.json
CHANGED
|
@@ -4931,10 +4931,31 @@
|
|
|
4931
4931
|
"suggestedFix": "Corrección sugerida:",
|
|
4932
4932
|
"line": "línea {line}",
|
|
4933
4933
|
"reviewing": {
|
|
4934
|
-
"
|
|
4935
|
-
|
|
4934
|
+
"slicing": {
|
|
4935
|
+
"title": "Dividiendo el diff en fragmentos…",
|
|
4936
|
+
"hint": "Agrupando los archivos modificados en fragmentos coherentes para revisar cada uno por separado. La lista de fragmentos aparecerá aquí cuando termine la división."
|
|
4937
|
+
},
|
|
4938
|
+
"reviewingChunks": {
|
|
4939
|
+
"title": "Revisando los fragmentos…",
|
|
4940
|
+
"hint": "La división ha terminado. Revisando cada fragmento de uno en uno y recopilando los hallazgos."
|
|
4941
|
+
},
|
|
4936
4942
|
"chunks": "{completed} de {total} fragmentos revisados",
|
|
4937
|
-
"inProgress": "{count} en curso"
|
|
4943
|
+
"inProgress": "{count} en curso",
|
|
4944
|
+
"activeHeading": "Revisando ahora",
|
|
4945
|
+
"chunksHeading": "Fragmentos",
|
|
4946
|
+
"chunkStatus": {
|
|
4947
|
+
"completed": "Revisado",
|
|
4948
|
+
"in_progress": "Revisando…",
|
|
4949
|
+
"pending": "En cola"
|
|
4950
|
+
}
|
|
4951
|
+
},
|
|
4952
|
+
"phase": {
|
|
4953
|
+
"slicing": "Dividiendo…",
|
|
4954
|
+
"reviewing": "Revisando {completed}/{total} secciones",
|
|
4955
|
+
"awaiting": "Resultados listos",
|
|
4956
|
+
"challenging": "Investigando…",
|
|
4957
|
+
"fixing": "Corrigiendo…",
|
|
4958
|
+
"posting": "Publicando…"
|
|
4938
4959
|
},
|
|
4939
4960
|
"challenge": {
|
|
4940
4961
|
"action": "Cuestionar",
|
package/i18n/locales/fr.json
CHANGED
|
@@ -4931,10 +4931,31 @@
|
|
|
4931
4931
|
"suggestedFix": "Correction suggérée :",
|
|
4932
4932
|
"line": "ligne {line}",
|
|
4933
4933
|
"reviewing": {
|
|
4934
|
-
"
|
|
4935
|
-
|
|
4934
|
+
"slicing": {
|
|
4935
|
+
"title": "Découpage du diff en sections…",
|
|
4936
|
+
"hint": "Regroupement des fichiers modifiés en sections cohérentes afin de pouvoir examiner chacune séparément. La liste des sections apparaîtra ici une fois le découpage terminé."
|
|
4937
|
+
},
|
|
4938
|
+
"reviewingChunks": {
|
|
4939
|
+
"title": "Revue des sections…",
|
|
4940
|
+
"hint": "Le découpage est terminé. Chaque section est examinée l'une après l'autre et les remarques sont rassemblées."
|
|
4941
|
+
},
|
|
4936
4942
|
"chunks": "{completed} sur {total} sections examinées",
|
|
4937
|
-
"inProgress": "{count} en cours"
|
|
4943
|
+
"inProgress": "{count} en cours",
|
|
4944
|
+
"activeHeading": "Revue en cours",
|
|
4945
|
+
"chunksHeading": "Sections",
|
|
4946
|
+
"chunkStatus": {
|
|
4947
|
+
"completed": "Examinée",
|
|
4948
|
+
"in_progress": "En cours d'examen…",
|
|
4949
|
+
"pending": "En attente"
|
|
4950
|
+
}
|
|
4951
|
+
},
|
|
4952
|
+
"phase": {
|
|
4953
|
+
"slicing": "Découpage…",
|
|
4954
|
+
"reviewing": "Révision {completed}/{total} sections",
|
|
4955
|
+
"awaiting": "Résultats prêts",
|
|
4956
|
+
"challenging": "Analyse en cours…",
|
|
4957
|
+
"fixing": "Correction…",
|
|
4958
|
+
"posting": "Publication…"
|
|
4938
4959
|
},
|
|
4939
4960
|
"challenge": {
|
|
4940
4961
|
"action": "Contester",
|
package/i18n/locales/he.json
CHANGED
|
@@ -4942,10 +4942,31 @@
|
|
|
4942
4942
|
"suggestedFix": "תיקון מוצע:",
|
|
4943
4943
|
"line": "שורה {line}",
|
|
4944
4944
|
"reviewing": {
|
|
4945
|
-
"
|
|
4946
|
-
|
|
4945
|
+
"slicing": {
|
|
4946
|
+
"title": "מחלק את ההבדלים למקטעים…",
|
|
4947
|
+
"hint": "מקבץ את הקבצים שהשתנו למקטעים לכידים כדי לבדוק כל אחד בנפרד. רשימת המקטעים תופיע כאן לאחר סיום החלוקה."
|
|
4948
|
+
},
|
|
4949
|
+
"reviewingChunks": {
|
|
4950
|
+
"title": "בודק את המקטעים…",
|
|
4951
|
+
"hint": "החלוקה הסתיימה. בודק כל מקטע בנפרד ואוסף את הממצאים."
|
|
4952
|
+
},
|
|
4947
4953
|
"chunks": "{completed} מתוך {total} מקטעים נבדקו",
|
|
4948
|
-
"inProgress": "{count} בתהליך"
|
|
4954
|
+
"inProgress": "{count} בתהליך",
|
|
4955
|
+
"activeHeading": "נבדק כעת",
|
|
4956
|
+
"chunksHeading": "מקטעים",
|
|
4957
|
+
"chunkStatus": {
|
|
4958
|
+
"completed": "נבדק",
|
|
4959
|
+
"in_progress": "בבדיקה…",
|
|
4960
|
+
"pending": "בתור"
|
|
4961
|
+
}
|
|
4962
|
+
},
|
|
4963
|
+
"phase": {
|
|
4964
|
+
"slicing": "מחלק…",
|
|
4965
|
+
"reviewing": "בודק {completed}/{total} מקטעים",
|
|
4966
|
+
"awaiting": "הממצאים מוכנים",
|
|
4967
|
+
"challenging": "חוקר…",
|
|
4968
|
+
"fixing": "מתקן…",
|
|
4969
|
+
"posting": "מפרסם…"
|
|
4949
4970
|
},
|
|
4950
4971
|
"challenge": {
|
|
4951
4972
|
"action": "ערער",
|
package/i18n/locales/it.json
CHANGED
|
@@ -4943,10 +4943,31 @@
|
|
|
4943
4943
|
"suggestedFix": "Correzione suggerita:",
|
|
4944
4944
|
"line": "riga {line}",
|
|
4945
4945
|
"reviewing": {
|
|
4946
|
-
"
|
|
4947
|
-
|
|
4946
|
+
"slicing": {
|
|
4947
|
+
"title": "Suddivisione del diff in blocchi…",
|
|
4948
|
+
"hint": "Raggruppamento dei file modificati in blocchi coerenti per esaminare ciascuno separatamente. L'elenco dei blocchi comparirà qui al termine della suddivisione."
|
|
4949
|
+
},
|
|
4950
|
+
"reviewingChunks": {
|
|
4951
|
+
"title": "Revisione dei blocchi…",
|
|
4952
|
+
"hint": "La suddivisione è terminata. Ogni blocco viene esaminato uno alla volta e le osservazioni vengono raccolte."
|
|
4953
|
+
},
|
|
4948
4954
|
"chunks": "{completed} di {total} sezioni esaminate",
|
|
4949
|
-
"inProgress": "{count} in corso"
|
|
4955
|
+
"inProgress": "{count} in corso",
|
|
4956
|
+
"activeHeading": "In revisione ora",
|
|
4957
|
+
"chunksHeading": "Blocchi",
|
|
4958
|
+
"chunkStatus": {
|
|
4959
|
+
"completed": "Esaminato",
|
|
4960
|
+
"in_progress": "In revisione…",
|
|
4961
|
+
"pending": "In coda"
|
|
4962
|
+
}
|
|
4963
|
+
},
|
|
4964
|
+
"phase": {
|
|
4965
|
+
"slicing": "Suddivisione…",
|
|
4966
|
+
"reviewing": "Revisione {completed}/{total} sezioni",
|
|
4967
|
+
"awaiting": "Risultati pronti",
|
|
4968
|
+
"challenging": "Analisi in corso…",
|
|
4969
|
+
"fixing": "Correzione…",
|
|
4970
|
+
"posting": "Pubblicazione…"
|
|
4950
4971
|
},
|
|
4951
4972
|
"challenge": {
|
|
4952
4973
|
"action": "Contesta",
|
package/i18n/locales/ja.json
CHANGED
|
@@ -4943,10 +4943,31 @@
|
|
|
4943
4943
|
"suggestedFix": "修正案:",
|
|
4944
4944
|
"line": "{line}行目",
|
|
4945
4945
|
"reviewing": {
|
|
4946
|
-
"
|
|
4947
|
-
|
|
4946
|
+
"slicing": {
|
|
4947
|
+
"title": "差分をチャンクに分割中…",
|
|
4948
|
+
"hint": "変更されたファイルをまとまりのあるチャンクにグループ化し、各チャンクを個別にレビューできるようにしています。分割が完了すると、ここにチャンク一覧が表示されます。"
|
|
4949
|
+
},
|
|
4950
|
+
"reviewingChunks": {
|
|
4951
|
+
"title": "チャンクをレビュー中…",
|
|
4952
|
+
"hint": "分割は完了しました。各チャンクを一つずつレビューし、指摘事項を収集しています。"
|
|
4953
|
+
},
|
|
4948
4954
|
"chunks": "{total} 個中 {completed} 個のチャンクをレビュー済み",
|
|
4949
|
-
"inProgress": "{count} 件処理中"
|
|
4955
|
+
"inProgress": "{count} 件処理中",
|
|
4956
|
+
"activeHeading": "レビュー中",
|
|
4957
|
+
"chunksHeading": "チャンク",
|
|
4958
|
+
"chunkStatus": {
|
|
4959
|
+
"completed": "レビュー済み",
|
|
4960
|
+
"in_progress": "レビュー中…",
|
|
4961
|
+
"pending": "待機中"
|
|
4962
|
+
}
|
|
4963
|
+
},
|
|
4964
|
+
"phase": {
|
|
4965
|
+
"slicing": "分割中…",
|
|
4966
|
+
"reviewing": "レビュー中 {completed}/{total} 区分",
|
|
4967
|
+
"awaiting": "指摘の準備完了",
|
|
4968
|
+
"challenging": "調査中…",
|
|
4969
|
+
"fixing": "修正中…",
|
|
4970
|
+
"posting": "投稿中…"
|
|
4950
4971
|
},
|
|
4951
4972
|
"challenge": {
|
|
4952
4973
|
"action": "異議を唱える",
|
package/i18n/locales/pl.json
CHANGED
|
@@ -4931,10 +4931,31 @@
|
|
|
4931
4931
|
"suggestedFix": "Sugerowana poprawka:",
|
|
4932
4932
|
"line": "wiersz {line}",
|
|
4933
4933
|
"reviewing": {
|
|
4934
|
-
"
|
|
4935
|
-
|
|
4934
|
+
"slicing": {
|
|
4935
|
+
"title": "Dzielenie zmian na fragmenty…",
|
|
4936
|
+
"hint": "Grupowanie zmienionych plików w spójne fragmenty, aby każdy można było przejrzeć osobno. Lista fragmentów pojawi się tutaj po zakończeniu podziału."
|
|
4937
|
+
},
|
|
4938
|
+
"reviewingChunks": {
|
|
4939
|
+
"title": "Przeglądanie fragmentów…",
|
|
4940
|
+
"hint": "Podział zakończony. Przeglądanie każdego fragmentu po kolei i zbieranie uwag."
|
|
4941
|
+
},
|
|
4936
4942
|
"chunks": "Sprawdzono {completed} z {total} fragmentów",
|
|
4937
|
-
"inProgress": "{count} w toku"
|
|
4943
|
+
"inProgress": "{count} w toku",
|
|
4944
|
+
"activeHeading": "Przeglądane teraz",
|
|
4945
|
+
"chunksHeading": "Fragmenty",
|
|
4946
|
+
"chunkStatus": {
|
|
4947
|
+
"completed": "Sprawdzony",
|
|
4948
|
+
"in_progress": "Przeglądanie…",
|
|
4949
|
+
"pending": "W kolejce"
|
|
4950
|
+
}
|
|
4951
|
+
},
|
|
4952
|
+
"phase": {
|
|
4953
|
+
"slicing": "Dzielenie…",
|
|
4954
|
+
"reviewing": "Przegląd {completed}/{total} fragmentów",
|
|
4955
|
+
"awaiting": "Wyniki gotowe",
|
|
4956
|
+
"challenging": "Analizowanie…",
|
|
4957
|
+
"fixing": "Naprawianie…",
|
|
4958
|
+
"posting": "Publikowanie…"
|
|
4938
4959
|
},
|
|
4939
4960
|
"challenge": {
|
|
4940
4961
|
"action": "Zakwestionuj",
|
package/i18n/locales/tr.json
CHANGED
|
@@ -4943,10 +4943,31 @@
|
|
|
4943
4943
|
"suggestedFix": "Önerilen düzeltme:",
|
|
4944
4944
|
"line": "satır {line}",
|
|
4945
4945
|
"reviewing": {
|
|
4946
|
-
"
|
|
4947
|
-
|
|
4946
|
+
"slicing": {
|
|
4947
|
+
"title": "Fark parçalara bölünüyor…",
|
|
4948
|
+
"hint": "Değiştirilen dosyalar, her biri ayrı ayrı incelenebilsin diye tutarlı parçalara gruplanıyor. Bölme tamamlandığında parça listesi burada görünecek."
|
|
4949
|
+
},
|
|
4950
|
+
"reviewingChunks": {
|
|
4951
|
+
"title": "Parçalar inceleniyor…",
|
|
4952
|
+
"hint": "Bölme tamamlandı. Her parça tek tek inceleniyor ve bulgular toplanıyor."
|
|
4953
|
+
},
|
|
4948
4954
|
"chunks": "{total} bölümden {completed} tanesi incelendi",
|
|
4949
|
-
"inProgress": "{count} devam ediyor"
|
|
4955
|
+
"inProgress": "{count} devam ediyor",
|
|
4956
|
+
"activeHeading": "Şimdi inceleniyor",
|
|
4957
|
+
"chunksHeading": "Parçalar",
|
|
4958
|
+
"chunkStatus": {
|
|
4959
|
+
"completed": "İncelendi",
|
|
4960
|
+
"in_progress": "İnceleniyor…",
|
|
4961
|
+
"pending": "Sırada"
|
|
4962
|
+
}
|
|
4963
|
+
},
|
|
4964
|
+
"phase": {
|
|
4965
|
+
"slicing": "Dilimleniyor…",
|
|
4966
|
+
"reviewing": "İnceleniyor {completed}/{total} bölüm",
|
|
4967
|
+
"awaiting": "Bulgular hazır",
|
|
4968
|
+
"challenging": "Araştırılıyor…",
|
|
4969
|
+
"fixing": "Düzeltiliyor…",
|
|
4970
|
+
"posting": "Yayınlanıyor…"
|
|
4950
4971
|
},
|
|
4951
4972
|
"challenge": {
|
|
4952
4973
|
"action": "İtiraz et",
|
package/i18n/locales/uk.json
CHANGED
|
@@ -4931,10 +4931,31 @@
|
|
|
4931
4931
|
"suggestedFix": "Пропоноване виправлення:",
|
|
4932
4932
|
"line": "рядок {line}",
|
|
4933
4933
|
"reviewing": {
|
|
4934
|
-
"
|
|
4935
|
-
|
|
4934
|
+
"slicing": {
|
|
4935
|
+
"title": "Поділ змін на фрагменти…",
|
|
4936
|
+
"hint": "Групування змінених файлів у цілісні фрагменти, щоб кожен можна було переглянути окремо. Список фрагментів з'явиться тут після завершення поділу."
|
|
4937
|
+
},
|
|
4938
|
+
"reviewingChunks": {
|
|
4939
|
+
"title": "Огляд фрагментів…",
|
|
4940
|
+
"hint": "Поділ завершено. Кожен фрагмент переглядається по черзі, а зауваження збираються."
|
|
4941
|
+
},
|
|
4936
4942
|
"chunks": "Перевірено {completed} з {total} фрагментів",
|
|
4937
|
-
"inProgress": "{count} у процесі"
|
|
4943
|
+
"inProgress": "{count} у процесі",
|
|
4944
|
+
"activeHeading": "Переглядається зараз",
|
|
4945
|
+
"chunksHeading": "Фрагменти",
|
|
4946
|
+
"chunkStatus": {
|
|
4947
|
+
"completed": "Переглянуто",
|
|
4948
|
+
"in_progress": "Огляд…",
|
|
4949
|
+
"pending": "У черзі"
|
|
4950
|
+
}
|
|
4951
|
+
},
|
|
4952
|
+
"phase": {
|
|
4953
|
+
"slicing": "Розбиття…",
|
|
4954
|
+
"reviewing": "Перевірка {completed}/{total} фрагментів",
|
|
4955
|
+
"awaiting": "Результати готові",
|
|
4956
|
+
"challenging": "Дослідження…",
|
|
4957
|
+
"fixing": "Виправлення…",
|
|
4958
|
+
"posting": "Публікація…"
|
|
4938
4959
|
},
|
|
4939
4960
|
"challenge": {
|
|
4940
4961
|
"action": "Оскаржити",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/app",
|
|
3
|
-
"version": "0.147.
|
|
3
|
+
"version": "0.147.2",
|
|
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",
|