@cat-factory/app 0.305.0 → 0.306.0
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/guidedReview/GuidedReview.logic.spec.ts +56 -0
- package/app/components/guidedReview/GuidedReview.logic.ts +39 -1
- package/app/components/guidedReview/GuidedReviewDraftCard.vue +145 -0
- package/app/components/guidedReview/GuidedReviewThread.vue +85 -8
- package/app/composables/api/guidedReview.ts +27 -0
- package/app/composables/usePipelineErrorToast.ts +8 -0
- package/app/stores/guidedReview.ts +28 -0
- package/app/types/guided-review.ts +3 -0
- package/i18n/locales/de.json +29 -4
- package/i18n/locales/en.json +29 -4
- package/i18n/locales/es.json +29 -4
- package/i18n/locales/fr.json +29 -4
- package/i18n/locales/he.json +29 -4
- package/i18n/locales/it.json +29 -4
- package/i18n/locales/ja.json +29 -4
- package/i18n/locales/pl.json +29 -4
- package/i18n/locales/tr.json +29 -4
- package/i18n/locales/uk.json +29 -4
- package/package.json +2 -2
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest'
|
|
2
|
+
import { GUIDED_REVIEW_POST_LEASE_MS } from '@cat-factory/contracts'
|
|
2
3
|
import {
|
|
3
4
|
GUIDED_REVIEW_FAILURE_REASONS,
|
|
4
5
|
guidedReviewDroppedDraftReasonSchema,
|
|
@@ -6,6 +7,9 @@ import {
|
|
|
6
7
|
import en from '../../../i18n/locales/en.json'
|
|
7
8
|
import {
|
|
8
9
|
NEW_THREAD_TAB,
|
|
10
|
+
draftEdit,
|
|
11
|
+
isEditableDraft,
|
|
12
|
+
postableSelection,
|
|
9
13
|
canAsk,
|
|
10
14
|
citationLabel,
|
|
11
15
|
draftAnchor,
|
|
@@ -121,3 +125,55 @@ describe('isStale', () => {
|
|
|
121
125
|
expect(isStale('a', null)).toBe(false)
|
|
122
126
|
})
|
|
123
127
|
})
|
|
128
|
+
|
|
129
|
+
describe('draft editing and posting', () => {
|
|
130
|
+
it('treats proposed and failed drafts as still editable', () => {
|
|
131
|
+
expect(
|
|
132
|
+
['proposed', 'failed', 'posting', 'posted', 'discarded'].map((status) =>
|
|
133
|
+
isEditableDraft({ status: status as never }),
|
|
134
|
+
),
|
|
135
|
+
).toEqual([true, true, false, false, false])
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
it('posts only the selected drafts that are still postable, in list order', () => {
|
|
139
|
+
const drafts = [
|
|
140
|
+
{ id: 'a', status: 'proposed' as const, updatedAt: 0 },
|
|
141
|
+
{ id: 'b', status: 'posted' as const, updatedAt: 0 },
|
|
142
|
+
{ id: 'c', status: 'failed' as const, updatedAt: 0 },
|
|
143
|
+
]
|
|
144
|
+
expect(postableSelection(drafts, new Set(['c', 'b', 'a']), 1)).toEqual(['a', 'c'])
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
it('offers a posting draft again only once its claim outlives the lease', () => {
|
|
148
|
+
const stranded = [{ id: 'p', status: 'posting' as const, updatedAt: 1_000 }]
|
|
149
|
+
const selected = new Set(['p'])
|
|
150
|
+
expect(postableSelection(stranded, selected, 1_000 + GUIDED_REVIEW_POST_LEASE_MS)).toEqual([])
|
|
151
|
+
expect(postableSelection(stranded, selected, 1_001 + GUIDED_REVIEW_POST_LEASE_MS)).toEqual([
|
|
152
|
+
'p',
|
|
153
|
+
])
|
|
154
|
+
})
|
|
155
|
+
|
|
156
|
+
it('sends only what an edit changed, and nothing for an untouched form', () => {
|
|
157
|
+
const draft = { body: 'Bound the retries.', line: 3, startLine: null, side: 'RIGHT' as const }
|
|
158
|
+
expect(draftEdit(draft, { body: ' Bound the retries. ', line: 3, side: 'RIGHT' })).toEqual({})
|
|
159
|
+
expect(draftEdit(draft, { body: 'Cap at three.', line: 4, side: 'RIGHT' })).toEqual({
|
|
160
|
+
body: 'Cap at three.',
|
|
161
|
+
line: 4,
|
|
162
|
+
})
|
|
163
|
+
})
|
|
164
|
+
|
|
165
|
+
it('drops the start of a multi-line draft only when the edit moves it', () => {
|
|
166
|
+
const span = { body: 'Span.', line: 8, startLine: 5, side: 'RIGHT' as const }
|
|
167
|
+
expect(draftEdit(span, { body: 'Reworded.', line: 8, side: 'RIGHT' })).toEqual({
|
|
168
|
+
body: 'Reworded.',
|
|
169
|
+
})
|
|
170
|
+
expect(draftEdit(span, { body: 'Span.', line: 3, side: 'RIGHT' })).toEqual({
|
|
171
|
+
line: 3,
|
|
172
|
+
startLine: null,
|
|
173
|
+
})
|
|
174
|
+
expect(draftEdit(span, { body: 'Span.', line: 8, side: 'LEFT' })).toEqual({
|
|
175
|
+
startLine: null,
|
|
176
|
+
side: 'LEFT',
|
|
177
|
+
})
|
|
178
|
+
})
|
|
179
|
+
})
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
isPostableDraft,
|
|
3
|
+
resolvePrNumber,
|
|
4
|
+
type GuidedReviewFailureReason,
|
|
5
|
+
} from '@cat-factory/contracts'
|
|
2
6
|
import type {
|
|
7
|
+
GuidedReviewCommentDraft,
|
|
3
8
|
GuidedReviewMessage,
|
|
4
9
|
GuidedReviewSessionView,
|
|
5
10
|
OpenGuidedReviewInput,
|
|
@@ -106,3 +111,36 @@ export function isStale(
|
|
|
106
111
|
): boolean {
|
|
107
112
|
return !!latestHeadSha && latestHeadSha !== reviewedHeadSha
|
|
108
113
|
}
|
|
114
|
+
|
|
115
|
+
/** A draft the reviewer may still edit, discard or post: `proposed`, or a `failed` post. */
|
|
116
|
+
export function isEditableDraft(draft: Pick<GuidedReviewCommentDraft, 'status'>): boolean {
|
|
117
|
+
return draft.status === 'proposed' || draft.status === 'failed'
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** The selected drafts a post may claim at `now`, in the order they are listed. */
|
|
121
|
+
export function postableSelection(
|
|
122
|
+
drafts: Pick<GuidedReviewCommentDraft, 'id' | 'status' | 'updatedAt'>[],
|
|
123
|
+
selected: ReadonlySet<string>,
|
|
124
|
+
now: number,
|
|
125
|
+
): string[] {
|
|
126
|
+
return drafts.filter((d) => selected.has(d.id) && isPostableDraft(d, now)).map((d) => d.id)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* The fields an inline edit actually changed, against the draft as loaded. Empty when nothing
|
|
131
|
+
* moved, so the editor saves nothing rather than bumping the draft's revision for no change. The
|
|
132
|
+
* editor places a single line, so moving a multi-line draft drops its start: the server would
|
|
133
|
+
* otherwise keep the old start against the new line and refuse the span.
|
|
134
|
+
*/
|
|
135
|
+
export function draftEdit(
|
|
136
|
+
draft: Pick<GuidedReviewCommentDraft, 'body' | 'line' | 'startLine' | 'side'>,
|
|
137
|
+
form: { body: string; line: number; side: 'LEFT' | 'RIGHT' },
|
|
138
|
+
): { body?: string; line?: number; startLine?: null; side?: 'LEFT' | 'RIGHT' } {
|
|
139
|
+
const moved = form.line !== draft.line || form.side !== draft.side
|
|
140
|
+
return {
|
|
141
|
+
...(form.body.trim() !== draft.body ? { body: form.body.trim() } : {}),
|
|
142
|
+
...(form.line !== draft.line ? { line: form.line } : {}),
|
|
143
|
+
...(moved && draft.startLine !== null ? { startLine: null } : {}),
|
|
144
|
+
...(form.side !== draft.side ? { side: form.side } : {}),
|
|
145
|
+
}
|
|
146
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
// One comment draft: its anchor, body and rationale, with selection for posting and an inline
|
|
3
|
+
// editor. Only a `proposed` or `failed` draft is editable, though a `posting` one whose poster died
|
|
4
|
+
// can be selected for posting again; the server refuses a stale edit as
|
|
5
|
+
// `draft_conflict` and a line outside the diff, both reported through the error funnel.
|
|
6
|
+
import type { GuidedReviewCommentDraft } from '~/types/domain'
|
|
7
|
+
import MarkdownProse from '~/components/common/MarkdownProse.vue'
|
|
8
|
+
import {
|
|
9
|
+
draftAnchor,
|
|
10
|
+
draftEdit,
|
|
11
|
+
isEditableDraft,
|
|
12
|
+
} from '~/components/guidedReview/GuidedReview.logic'
|
|
13
|
+
|
|
14
|
+
const props = defineProps<{
|
|
15
|
+
sessionId: string
|
|
16
|
+
draft: GuidedReviewCommentDraft
|
|
17
|
+
selected: boolean
|
|
18
|
+
/** Whether a post may claim this draft now, including a stranded `posting` one. */
|
|
19
|
+
postable: boolean
|
|
20
|
+
}>()
|
|
21
|
+
const emit = defineEmits<{ 'update:selected': [value: boolean] }>()
|
|
22
|
+
const { t } = useI18n()
|
|
23
|
+
const store = useGuidedReviewStore()
|
|
24
|
+
const { present } = usePipelineErrorToast()
|
|
25
|
+
|
|
26
|
+
const editing = ref(false)
|
|
27
|
+
const saving = ref(false)
|
|
28
|
+
const form = reactive({ body: '', line: 1, side: 'RIGHT' as 'LEFT' | 'RIGHT' })
|
|
29
|
+
const editable = computed(() => isEditableDraft(props.draft))
|
|
30
|
+
const STATUS_COLOR = {
|
|
31
|
+
proposed: 'neutral',
|
|
32
|
+
posting: 'info',
|
|
33
|
+
posted: 'success',
|
|
34
|
+
failed: 'error',
|
|
35
|
+
discarded: 'neutral',
|
|
36
|
+
} as const
|
|
37
|
+
|
|
38
|
+
function startEdit(): void {
|
|
39
|
+
form.body = props.draft.body
|
|
40
|
+
form.line = props.draft.line
|
|
41
|
+
form.side = props.draft.side
|
|
42
|
+
editing.value = true
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async function save(): Promise<void> {
|
|
46
|
+
const changes = draftEdit(props.draft, form)
|
|
47
|
+
if (Object.keys(changes).length === 0) {
|
|
48
|
+
editing.value = false
|
|
49
|
+
return
|
|
50
|
+
}
|
|
51
|
+
saving.value = true
|
|
52
|
+
try {
|
|
53
|
+
await store.editDraft(props.sessionId, props.draft.id, { rev: props.draft.rev, ...changes })
|
|
54
|
+
editing.value = false
|
|
55
|
+
} catch (error) {
|
|
56
|
+
present(error, 'guidedReview.errors.editDraft')
|
|
57
|
+
} finally {
|
|
58
|
+
saving.value = false
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async function discard(): Promise<void> {
|
|
63
|
+
saving.value = true
|
|
64
|
+
try {
|
|
65
|
+
await store.editDraft(props.sessionId, props.draft.id, { rev: props.draft.rev, discard: true })
|
|
66
|
+
emit('update:selected', false)
|
|
67
|
+
} catch (error) {
|
|
68
|
+
present(error, 'guidedReview.errors.editDraft')
|
|
69
|
+
} finally {
|
|
70
|
+
saving.value = false
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
</script>
|
|
74
|
+
|
|
75
|
+
<template>
|
|
76
|
+
<div
|
|
77
|
+
class="rounded-md border border-default p-2 text-sm"
|
|
78
|
+
:class="{ 'opacity-60': draft.status === 'discarded' }"
|
|
79
|
+
data-testid="guided-review-draft"
|
|
80
|
+
>
|
|
81
|
+
<div class="flex items-center gap-2">
|
|
82
|
+
<UCheckbox
|
|
83
|
+
v-if="postable"
|
|
84
|
+
:model-value="selected"
|
|
85
|
+
:aria-label="t('guidedReview.drafts.select')"
|
|
86
|
+
@update:model-value="emit('update:selected', $event === true)"
|
|
87
|
+
/>
|
|
88
|
+
<p class="flex-1 text-xs text-dimmed">
|
|
89
|
+
{{ draftAnchor(draft) }} ({{ t(`guidedReview.drafts.side.${draft.side}`) }})
|
|
90
|
+
</p>
|
|
91
|
+
<UBadge size="sm" variant="subtle" :color="STATUS_COLOR[draft.status]">
|
|
92
|
+
{{ t(`guidedReview.drafts.status.${draft.status}`) }}
|
|
93
|
+
</UBadge>
|
|
94
|
+
</div>
|
|
95
|
+
|
|
96
|
+
<div v-if="editing" class="mt-2 space-y-2">
|
|
97
|
+
<UTextarea v-model="form.body" :rows="3" autoresize class="w-full" />
|
|
98
|
+
<div class="flex flex-wrap items-center gap-2">
|
|
99
|
+
<UInputNumber
|
|
100
|
+
v-model="form.line"
|
|
101
|
+
:min="1"
|
|
102
|
+
size="sm"
|
|
103
|
+
:aria-label="t('guidedReview.drafts.line')"
|
|
104
|
+
/>
|
|
105
|
+
<USelect
|
|
106
|
+
v-model="form.side"
|
|
107
|
+
size="sm"
|
|
108
|
+
:items="[
|
|
109
|
+
{ label: t('guidedReview.drafts.side.RIGHT'), value: 'RIGHT' },
|
|
110
|
+
{ label: t('guidedReview.drafts.side.LEFT'), value: 'LEFT' },
|
|
111
|
+
]"
|
|
112
|
+
:aria-label="t('guidedReview.drafts.sideLabel')"
|
|
113
|
+
/>
|
|
114
|
+
<UButton size="sm" color="primary" :loading="saving" @click="save">
|
|
115
|
+
{{ t('guidedReview.drafts.save') }}
|
|
116
|
+
</UButton>
|
|
117
|
+
<UButton size="sm" variant="ghost" :disabled="saving" @click="editing = false">
|
|
118
|
+
{{ t('guidedReview.drafts.cancel') }}
|
|
119
|
+
</UButton>
|
|
120
|
+
</div>
|
|
121
|
+
</div>
|
|
122
|
+
<template v-else>
|
|
123
|
+
<MarkdownProse class="mt-1" :text="draft.body" />
|
|
124
|
+
<p v-if="draft.rationale" class="mt-1 text-xs text-muted">{{ draft.rationale }}</p>
|
|
125
|
+
<p v-if="draft.status === 'failed' && draft.postError" class="mt-1 text-xs text-error">
|
|
126
|
+
{{ t('guidedReview.drafts.postFailed') }}: {{ draft.postError }}
|
|
127
|
+
</p>
|
|
128
|
+
<div v-if="editable" class="mt-2 flex gap-2">
|
|
129
|
+
<UButton size="xs" variant="ghost" icon="i-lucide-pencil" @click="startEdit">
|
|
130
|
+
{{ t('guidedReview.drafts.edit') }}
|
|
131
|
+
</UButton>
|
|
132
|
+
<UButton
|
|
133
|
+
size="xs"
|
|
134
|
+
variant="ghost"
|
|
135
|
+
color="neutral"
|
|
136
|
+
icon="i-lucide-trash-2"
|
|
137
|
+
:loading="saving"
|
|
138
|
+
@click="discard"
|
|
139
|
+
>
|
|
140
|
+
{{ t('guidedReview.drafts.discard') }}
|
|
141
|
+
</UButton>
|
|
142
|
+
</div>
|
|
143
|
+
</template>
|
|
144
|
+
</div>
|
|
145
|
+
</template>
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
// One exploration thread: its messages, the comment drafts it produced, and a composer. While its
|
|
3
3
|
// own answer is pending the composer waits; other threads are unaffected.
|
|
4
|
+
import { isPostableDraft } from '@cat-factory/contracts'
|
|
4
5
|
import type { GuidedReviewCommentDraft, GuidedReviewThreadView } from '~/types/domain'
|
|
5
6
|
import MarkdownProse from '~/components/common/MarkdownProse.vue'
|
|
6
7
|
import GuidedReviewFailure from '~/components/guidedReview/GuidedReviewFailure.vue'
|
|
8
|
+
import GuidedReviewDraftCard from '~/components/guidedReview/GuidedReviewDraftCard.vue'
|
|
7
9
|
import {
|
|
8
10
|
canAsk,
|
|
9
11
|
citationLabel,
|
|
10
|
-
draftAnchor,
|
|
11
12
|
droppedAnchor,
|
|
12
13
|
isLive,
|
|
13
14
|
keptDrafts,
|
|
15
|
+
postableSelection,
|
|
14
16
|
} from '~/components/guidedReview/GuidedReview.logic'
|
|
15
17
|
|
|
16
18
|
const props = defineProps<{
|
|
@@ -49,6 +51,49 @@ async function send(): Promise<void> {
|
|
|
49
51
|
}
|
|
50
52
|
}
|
|
51
53
|
|
|
54
|
+
const selected = ref(new Set<string>())
|
|
55
|
+
const summary = ref('')
|
|
56
|
+
const posting = ref(false)
|
|
57
|
+
const postResult = ref<{
|
|
58
|
+
posted: number
|
|
59
|
+
failed: number
|
|
60
|
+
skipped: number
|
|
61
|
+
summaryError: string | null
|
|
62
|
+
} | null>(null)
|
|
63
|
+
// A `posting` draft becomes postable again once its claim outlives the lease, so the clock only
|
|
64
|
+
// runs while one is on screen.
|
|
65
|
+
const now = useNowTick(30_000, () => props.drafts.some((d) => d.status === 'posting'))
|
|
66
|
+
const toPost = computed(() => postableSelection(props.drafts, selected.value, now.value))
|
|
67
|
+
|
|
68
|
+
function setSelected(id: string, value: boolean): void {
|
|
69
|
+
const next = new Set(selected.value)
|
|
70
|
+
if (value) next.add(id)
|
|
71
|
+
else next.delete(id)
|
|
72
|
+
selected.value = next
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
async function post(): Promise<void> {
|
|
76
|
+
if (!toPost.value.length) return
|
|
77
|
+
posting.value = true
|
|
78
|
+
try {
|
|
79
|
+
const result = await store.postDrafts(props.sessionId, toPost.value, summary.value)
|
|
80
|
+
const summaryFailed = result.summary.posted === false
|
|
81
|
+
postResult.value = {
|
|
82
|
+
posted: result.posted,
|
|
83
|
+
failed: result.failed,
|
|
84
|
+
skipped: result.skipped.length,
|
|
85
|
+
summaryError: summaryFailed ? (result.summary.error ?? '') : null,
|
|
86
|
+
}
|
|
87
|
+
selected.value = new Set()
|
|
88
|
+
// A summary the host refused stays in the box, so the reviewer can post it with a retry.
|
|
89
|
+
if (!summaryFailed) summary.value = ''
|
|
90
|
+
} catch (error) {
|
|
91
|
+
present(error, 'guidedReview.errors.postDrafts')
|
|
92
|
+
} finally {
|
|
93
|
+
posting.value = false
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
52
97
|
async function draftComments(): Promise<void> {
|
|
53
98
|
if (!props.view || !ready.value) return
|
|
54
99
|
sending.value = true
|
|
@@ -126,13 +171,45 @@ async function draftComments(): Promise<void> {
|
|
|
126
171
|
<h4 class="text-xs font-semibold uppercase text-dimmed">
|
|
127
172
|
{{ t('guidedReview.drafts.title') }}
|
|
128
173
|
</h4>
|
|
129
|
-
<
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
174
|
+
<GuidedReviewDraftCard
|
|
175
|
+
v-for="d in drafts"
|
|
176
|
+
:key="d.id"
|
|
177
|
+
:session-id="sessionId"
|
|
178
|
+
:draft="d"
|
|
179
|
+
:selected="selected.has(d.id)"
|
|
180
|
+
:postable="isPostableDraft(d, now)"
|
|
181
|
+
@update:selected="setSelected(d.id, $event)"
|
|
182
|
+
/>
|
|
183
|
+
<div class="space-y-2 rounded-md bg-elevated p-2" data-testid="guided-review-post">
|
|
184
|
+
<UTextarea
|
|
185
|
+
v-model="summary"
|
|
186
|
+
:rows="2"
|
|
187
|
+
autoresize
|
|
188
|
+
class="w-full"
|
|
189
|
+
:placeholder="t('guidedReview.drafts.summaryPlaceholder')"
|
|
190
|
+
/>
|
|
191
|
+
<div class="flex flex-wrap items-center gap-2">
|
|
192
|
+
<UButton
|
|
193
|
+
color="primary"
|
|
194
|
+
icon="i-lucide-upload"
|
|
195
|
+
:loading="posting"
|
|
196
|
+
:disabled="!toPost.length"
|
|
197
|
+
data-testid="guided-review-post-drafts"
|
|
198
|
+
@click="post"
|
|
199
|
+
>
|
|
200
|
+
{{ t('guidedReview.drafts.post', { count: toPost.length }) }}
|
|
201
|
+
</UButton>
|
|
202
|
+
<p v-if="postResult" class="text-xs text-muted" data-testid="guided-review-post-result">
|
|
203
|
+
{{ t('guidedReview.drafts.postResult', postResult) }}
|
|
204
|
+
</p>
|
|
205
|
+
<p
|
|
206
|
+
v-if="postResult && postResult.summaryError !== null"
|
|
207
|
+
class="text-xs text-error"
|
|
208
|
+
data-testid="guided-review-post-summary-error"
|
|
209
|
+
>
|
|
210
|
+
{{ t('guidedReview.drafts.summaryFailed') }}: {{ postResult.summaryError }}
|
|
211
|
+
</p>
|
|
212
|
+
</div>
|
|
136
213
|
</div>
|
|
137
214
|
</div>
|
|
138
215
|
</div>
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import {
|
|
2
2
|
askGuidedReviewContract,
|
|
3
3
|
deleteGuidedReviewContract,
|
|
4
|
+
editGuidedReviewDraftContract,
|
|
4
5
|
getGuidedReviewContract,
|
|
5
6
|
getGuidedReviewThreadContract,
|
|
6
7
|
listGuidedReviewsContract,
|
|
7
8
|
openGuidedReviewContract,
|
|
8
9
|
openGuidedReviewThreadContract,
|
|
10
|
+
postGuidedReviewDraftsContract,
|
|
9
11
|
refreshGuidedReviewContract,
|
|
10
12
|
requestGuidedReviewDraftsContract,
|
|
11
13
|
} from '@cat-factory/contracts'
|
|
12
14
|
import type {
|
|
13
15
|
AskGuidedReviewInput,
|
|
16
|
+
EditGuidedReviewDraftInput,
|
|
17
|
+
PostGuidedReviewDraftsInput,
|
|
14
18
|
OpenGuidedReviewInput,
|
|
15
19
|
OpenGuidedReviewThreadInput,
|
|
16
20
|
} from '~/types/domain'
|
|
@@ -76,5 +80,28 @@ export function guidedReviewApi({ send, ws }: ApiContext) {
|
|
|
76
80
|
pathParams: { sessionId, threadId },
|
|
77
81
|
body: { instructions },
|
|
78
82
|
}),
|
|
83
|
+
|
|
84
|
+
editGuidedReviewDraft: (
|
|
85
|
+
workspaceId: string,
|
|
86
|
+
sessionId: string,
|
|
87
|
+
draftId: string,
|
|
88
|
+
body: EditGuidedReviewDraftInput,
|
|
89
|
+
) =>
|
|
90
|
+
send(editGuidedReviewDraftContract, {
|
|
91
|
+
pathPrefix: ws(workspaceId),
|
|
92
|
+
pathParams: { sessionId, draftId },
|
|
93
|
+
body,
|
|
94
|
+
}),
|
|
95
|
+
|
|
96
|
+
postGuidedReviewDrafts: (
|
|
97
|
+
workspaceId: string,
|
|
98
|
+
sessionId: string,
|
|
99
|
+
body: PostGuidedReviewDraftsInput,
|
|
100
|
+
) =>
|
|
101
|
+
send(postGuidedReviewDraftsContract, {
|
|
102
|
+
pathPrefix: ws(workspaceId),
|
|
103
|
+
pathParams: { sessionId },
|
|
104
|
+
body,
|
|
105
|
+
}),
|
|
79
106
|
}
|
|
80
107
|
}
|
|
@@ -175,6 +175,14 @@ const CONFLICT_INFO: Record<Exclude<ConflictReason, BespokeConflictReason>, Conf
|
|
|
175
175
|
titleKey: 'errors.conflict.title.thread_busy',
|
|
176
176
|
descriptionKey: 'errors.conflict.description.thread_busy',
|
|
177
177
|
},
|
|
178
|
+
draft_conflict: {
|
|
179
|
+
titleKey: 'errors.conflict.title.draft_conflict',
|
|
180
|
+
descriptionKey: 'errors.conflict.description.draft_conflict',
|
|
181
|
+
},
|
|
182
|
+
session_stale: {
|
|
183
|
+
titleKey: 'errors.conflict.title.session_stale',
|
|
184
|
+
descriptionKey: 'errors.conflict.description.session_stale',
|
|
185
|
+
},
|
|
178
186
|
task_limit_reached: {
|
|
179
187
|
titleKey: 'errors.conflict.title.task_limit_reached',
|
|
180
188
|
descriptionKey: 'errors.conflict.description.task_limit_reached',
|
|
@@ -2,6 +2,9 @@ import { defineStore } from 'pinia'
|
|
|
2
2
|
import { ref } from 'vue'
|
|
3
3
|
import type {
|
|
4
4
|
AskGuidedReviewInput,
|
|
5
|
+
EditGuidedReviewDraftInput,
|
|
6
|
+
GuidedReviewCommentDraft,
|
|
7
|
+
GuidedReviewPostResult,
|
|
5
8
|
GuidedReviewChange,
|
|
6
9
|
GuidedReviewSessionView,
|
|
7
10
|
GuidedReviewThreadView,
|
|
@@ -112,6 +115,29 @@ export const useGuidedReviewStore = defineStore('guidedReview', () => {
|
|
|
112
115
|
await Promise.all([loadThread(sessionId, threadId), loadSession(sessionId)])
|
|
113
116
|
}
|
|
114
117
|
|
|
118
|
+
async function editDraft(
|
|
119
|
+
sessionId: string,
|
|
120
|
+
draftId: string,
|
|
121
|
+
input: EditGuidedReviewDraftInput,
|
|
122
|
+
): Promise<GuidedReviewCommentDraft> {
|
|
123
|
+
const draft = await api.editGuidedReviewDraft(workspace.requireId(), sessionId, draftId, input)
|
|
124
|
+
await loadSession(sessionId)
|
|
125
|
+
return draft
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
async function postDrafts(
|
|
129
|
+
sessionId: string,
|
|
130
|
+
draftIds: string[],
|
|
131
|
+
summary?: string,
|
|
132
|
+
): Promise<GuidedReviewPostResult> {
|
|
133
|
+
const result = await api.postGuidedReviewDrafts(workspace.requireId(), sessionId, {
|
|
134
|
+
draftIds,
|
|
135
|
+
...(summary?.trim() ? { summary } : {}),
|
|
136
|
+
})
|
|
137
|
+
await loadSession(sessionId)
|
|
138
|
+
return result
|
|
139
|
+
}
|
|
140
|
+
|
|
115
141
|
function forget(sessionId: string) {
|
|
116
142
|
delete sessions.value[sessionId]
|
|
117
143
|
delete refetchFailures.value[sessionId]
|
|
@@ -193,6 +219,8 @@ export const useGuidedReviewStore = defineStore('guidedReview', () => {
|
|
|
193
219
|
openThread,
|
|
194
220
|
ask,
|
|
195
221
|
requestDrafts,
|
|
222
|
+
editDraft,
|
|
223
|
+
postDrafts,
|
|
196
224
|
applyChange,
|
|
197
225
|
resync,
|
|
198
226
|
reset,
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
// these through `~/types/domain` like every other domain type.
|
|
3
3
|
export type {
|
|
4
4
|
AskGuidedReviewInput,
|
|
5
|
+
EditGuidedReviewDraftInput,
|
|
6
|
+
GuidedReviewPostResult,
|
|
7
|
+
PostGuidedReviewDraftsInput,
|
|
5
8
|
GuidedReviewChange,
|
|
6
9
|
GuidedReviewCommentDraft,
|
|
7
10
|
GuidedReviewDraftReport,
|
package/i18n/locales/de.json
CHANGED
|
@@ -4657,7 +4657,26 @@
|
|
|
4657
4657
|
"side": {
|
|
4658
4658
|
"RIGHT": "neuer Code",
|
|
4659
4659
|
"LEFT": "alter Code"
|
|
4660
|
-
}
|
|
4660
|
+
},
|
|
4661
|
+
"select": "Diesen Entwurf zum Posten auswählen",
|
|
4662
|
+
"status": {
|
|
4663
|
+
"proposed": "Entwurf",
|
|
4664
|
+
"posting": "Wird gepostet",
|
|
4665
|
+
"posted": "Gepostet",
|
|
4666
|
+
"failed": "Nicht gepostet",
|
|
4667
|
+
"discarded": "Verworfen"
|
|
4668
|
+
},
|
|
4669
|
+
"edit": "Bearbeiten",
|
|
4670
|
+
"save": "Speichern",
|
|
4671
|
+
"cancel": "Abbrechen",
|
|
4672
|
+
"discard": "Verwerfen",
|
|
4673
|
+
"line": "Zeile",
|
|
4674
|
+
"sideLabel": "Seite",
|
|
4675
|
+
"postFailed": "Der Host hat diesen Kommentar abgelehnt",
|
|
4676
|
+
"summaryPlaceholder": "Optionaler Zusammenfassungskommentar für den Pull Request",
|
|
4677
|
+
"summaryFailed": "Der Host hat den Zusammenfassungskommentar abgelehnt",
|
|
4678
|
+
"post": "{count} im Pull Request posten",
|
|
4679
|
+
"postResult": "{posted} gepostet, {failed} nicht gepostet, {skipped} bereits erledigt."
|
|
4661
4680
|
},
|
|
4662
4681
|
"errors": {
|
|
4663
4682
|
"load": "Das Review konnte nicht geladen werden",
|
|
@@ -4665,7 +4684,9 @@
|
|
|
4665
4684
|
"open": "Das Review konnte nicht geöffnet werden",
|
|
4666
4685
|
"ask": "Die Frage konnte nicht gestellt werden",
|
|
4667
4686
|
"drafts": "Kommentarentwürfe konnten nicht angefordert werden",
|
|
4668
|
-
"refresh": "Das Review konnte nicht aktualisiert werden"
|
|
4687
|
+
"refresh": "Das Review konnte nicht aktualisiert werden",
|
|
4688
|
+
"editDraft": "Der Entwurf konnte nicht gespeichert werden",
|
|
4689
|
+
"postDrafts": "Die Entwürfe konnten nicht gepostet werden"
|
|
4669
4690
|
}
|
|
4670
4691
|
},
|
|
4671
4692
|
"pipeline": {
|
|
@@ -6392,7 +6413,9 @@
|
|
|
6392
6413
|
"delegated_executor_unwired": "Externer Executor nicht registriert",
|
|
6393
6414
|
"delegated_step_async_only": "Dieser Schritt wird abgefragt, nicht abgewartet",
|
|
6394
6415
|
"delegated_claim_missing": "Für diesen Schritt gibt es keine externe Arbeit zu prüfen",
|
|
6395
|
-
"thread_busy": "Dieser Thread antwortet noch"
|
|
6416
|
+
"thread_busy": "Dieser Thread antwortet noch",
|
|
6417
|
+
"draft_conflict": "Dieser Entwurf hat sich geändert",
|
|
6418
|
+
"session_stale": "Der Pull Request hat sich weiterentwickelt"
|
|
6396
6419
|
},
|
|
6397
6420
|
"description": {
|
|
6398
6421
|
"dependencies_unmet": "Diese Aufgabe hängt von anderen ab, die noch nicht abgeschlossen sind. Schließe sie ab oder gib sie frei und starte dann erneut.",
|
|
@@ -6450,7 +6473,9 @@
|
|
|
6450
6473
|
"delegated_executor_unwired": "Ein Schritt dieser Pipeline läuft auf einem externen Executor, den diese Installation nicht registriert; es gibt also kein Ziel für die Arbeit. Registriere den Executor im Code oder wähle für den Schritt einen, der hier läuft.",
|
|
6451
6474
|
"delegated_step_async_only": "Dieser Schritt läuft auf einem externen Executor und kann Stunden dauern. Er wird deshalb angestoßen und danach abgefragt, statt innerhalb einer Anfrage ausgeführt zu werden. Starte den Lauf über das Board; wenn du aus eigenem Code hierherkommst, steuere den Schritt über den asynchronen Pfad.",
|
|
6452
6475
|
"delegated_claim_missing": "Der Eintrag des Laufs darüber, was an den externen Executor geschickt wurde, fehlt, also gibt es nichts abzufragen. Am Executor selbst ist nichts falsch. Lade den Lauf neu und starte den Schritt erneut, falls er weiterhin hängt.",
|
|
6453
|
-
"thread_busy": "Die vorherige Frage in diesem Thread ist noch nicht beantwortet. Warte auf die Antwort oder frag in einem anderen Thread."
|
|
6476
|
+
"thread_busy": "Die vorherige Frage in diesem Thread ist noch nicht beantwortet. Warte auf die Antwort oder frag in einem anderen Thread.",
|
|
6477
|
+
"draft_conflict": "Dieser Kommentarentwurf wurde seit dem Laden bearbeitet, gepostet oder verworfen. Lade die Entwürfe neu und nimm deine Änderung erneut vor.",
|
|
6478
|
+
"session_stale": "Nach der Vorbereitung dieser Review kamen neue Commits hinzu, daher zeigen die Entwürfe möglicherweise auf falsche Zeilen. Aktualisiere die Review, prüfe die Entwürfe und poste dann."
|
|
6454
6479
|
},
|
|
6455
6480
|
"action": {
|
|
6456
6481
|
"connectGitHub": "GitHub verbinden",
|
package/i18n/locales/en.json
CHANGED
|
@@ -805,7 +805,9 @@
|
|
|
805
805
|
"delegated_executor_unwired": "External executor not registered",
|
|
806
806
|
"delegated_step_async_only": "This step is polled, not awaited",
|
|
807
807
|
"delegated_claim_missing": "This step has no external work to check",
|
|
808
|
-
"thread_busy": "This thread is still answering"
|
|
808
|
+
"thread_busy": "This thread is still answering",
|
|
809
|
+
"draft_conflict": "This draft changed",
|
|
810
|
+
"session_stale": "The pull request has moved on"
|
|
809
811
|
},
|
|
810
812
|
"description": {
|
|
811
813
|
"dependencies_unmet": "This task depends on others that aren't finished yet. Complete or unblock them, then start it again.",
|
|
@@ -866,7 +868,9 @@
|
|
|
866
868
|
"delegated_executor_unwired": "A step in this pipeline runs on an external executor this deployment does not register, so there is nowhere to send the work. Register the executor in code, or change the step to one that runs here.",
|
|
867
869
|
"delegated_step_async_only": "This step runs on an external executor, which can take hours, so it is dispatched and then polled rather than run inside one request. Start the run from the board; if you reached this from your own code, drive the step through the async path.",
|
|
868
870
|
"delegated_claim_missing": "The run’s record of what it sent to the external executor is missing, so there is nothing to poll. Nothing is wrong with the executor itself. Reload the run, and re-run the step if it is still stuck.",
|
|
869
|
-
"thread_busy": "The previous question in this thread has not been answered yet. Wait for that answer, or ask in another thread."
|
|
871
|
+
"thread_busy": "The previous question in this thread has not been answered yet. Wait for that answer, or ask in another thread.",
|
|
872
|
+
"draft_conflict": "Someone edited, posted or discarded this comment draft since you loaded it. Reload the drafts and make your change again.",
|
|
873
|
+
"session_stale": "New commits landed after this review was prepared, so its drafts may point at the wrong lines. Refresh the review, check the drafts, then post."
|
|
870
874
|
},
|
|
871
875
|
"action": {
|
|
872
876
|
"connectGitHub": "Connect GitHub",
|
|
@@ -5375,7 +5379,26 @@
|
|
|
5375
5379
|
"side": {
|
|
5376
5380
|
"RIGHT": "new code",
|
|
5377
5381
|
"LEFT": "old code"
|
|
5378
|
-
}
|
|
5382
|
+
},
|
|
5383
|
+
"select": "Select this draft for posting",
|
|
5384
|
+
"status": {
|
|
5385
|
+
"proposed": "Draft",
|
|
5386
|
+
"posting": "Posting",
|
|
5387
|
+
"posted": "Posted",
|
|
5388
|
+
"failed": "Not posted",
|
|
5389
|
+
"discarded": "Discarded"
|
|
5390
|
+
},
|
|
5391
|
+
"edit": "Edit",
|
|
5392
|
+
"save": "Save",
|
|
5393
|
+
"cancel": "Cancel",
|
|
5394
|
+
"discard": "Discard",
|
|
5395
|
+
"line": "Line",
|
|
5396
|
+
"sideLabel": "Side",
|
|
5397
|
+
"postFailed": "The host refused this comment",
|
|
5398
|
+
"summaryPlaceholder": "Optional summary comment for the pull request",
|
|
5399
|
+
"summaryFailed": "The host refused the summary comment",
|
|
5400
|
+
"post": "Post {count} to the pull request",
|
|
5401
|
+
"postResult": "{posted} posted, {failed} not posted, {skipped} already handled."
|
|
5379
5402
|
},
|
|
5380
5403
|
"errors": {
|
|
5381
5404
|
"load": "Could not load the review",
|
|
@@ -5383,7 +5406,9 @@
|
|
|
5383
5406
|
"open": "Could not open the review",
|
|
5384
5407
|
"ask": "Could not ask the question",
|
|
5385
5408
|
"drafts": "Could not request comment drafts",
|
|
5386
|
-
"refresh": "Could not refresh the review"
|
|
5409
|
+
"refresh": "Could not refresh the review",
|
|
5410
|
+
"editDraft": "Could not save the draft",
|
|
5411
|
+
"postDrafts": "Could not post the drafts"
|
|
5387
5412
|
}
|
|
5388
5413
|
},
|
|
5389
5414
|
"pipeline": {
|
package/i18n/locales/es.json
CHANGED
|
@@ -727,7 +727,9 @@
|
|
|
727
727
|
"delegated_executor_unwired": "Ejecutor externo no registrado",
|
|
728
728
|
"delegated_step_async_only": "Este paso se consulta, no se espera",
|
|
729
729
|
"delegated_claim_missing": "Este paso no tiene trabajo externo que consultar",
|
|
730
|
-
"thread_busy": "Este hilo todavía está respondiendo"
|
|
730
|
+
"thread_busy": "Este hilo todavía está respondiendo",
|
|
731
|
+
"draft_conflict": "Este borrador ha cambiado",
|
|
732
|
+
"session_stale": "La pull request ha avanzado"
|
|
731
733
|
},
|
|
732
734
|
"description": {
|
|
733
735
|
"dependencies_unmet": "Esta tarea depende de otras que aún no están terminadas. Complétalas o desbloquéalas y vuelve a iniciarla.",
|
|
@@ -785,7 +787,9 @@
|
|
|
785
787
|
"delegated_executor_unwired": "Un paso de esta canalización se ejecuta en un ejecutor externo que esta instalación no registra, así que no hay dónde enviar el trabajo. Registra el ejecutor en el código o cambia el paso por uno que se ejecute aquí.",
|
|
786
788
|
"delegated_step_async_only": "Este paso se ejecuta en un ejecutor externo y puede tardar horas, así que se lanza y luego se consulta en lugar de ejecutarse dentro de una sola petición. Inicia la ejecución desde el tablero; si has llegado aquí desde tu propio código, conduce el paso por la vía asíncrona.",
|
|
787
789
|
"delegated_claim_missing": "Falta el registro de lo que la ejecución envió al ejecutor externo, así que no hay nada que consultar. El ejecutor en sí no tiene ningún problema. Recarga la ejecución y vuelve a lanzar el paso si sigue atascado.",
|
|
788
|
-
"thread_busy": "La pregunta anterior de este hilo aún no tiene respuesta. Espera esa respuesta o pregunta en otro hilo."
|
|
790
|
+
"thread_busy": "La pregunta anterior de este hilo aún no tiene respuesta. Espera esa respuesta o pregunta en otro hilo.",
|
|
791
|
+
"draft_conflict": "Este borrador de comentario se ha editado, publicado o descartado desde que lo cargaste. Vuelve a cargar los borradores y repite tu cambio.",
|
|
792
|
+
"session_stale": "Llegaron commits nuevos después de preparar esta revisión, así que sus borradores pueden apuntar a líneas equivocadas. Actualiza la revisión, revisa los borradores y luego publica."
|
|
789
793
|
},
|
|
790
794
|
"action": {
|
|
791
795
|
"connectGitHub": "Conectar GitHub",
|
|
@@ -5181,7 +5185,26 @@
|
|
|
5181
5185
|
"side": {
|
|
5182
5186
|
"RIGHT": "código nuevo",
|
|
5183
5187
|
"LEFT": "código anterior"
|
|
5184
|
-
}
|
|
5188
|
+
},
|
|
5189
|
+
"select": "Seleccionar este borrador para publicarlo",
|
|
5190
|
+
"status": {
|
|
5191
|
+
"proposed": "Borrador",
|
|
5192
|
+
"posting": "Publicando",
|
|
5193
|
+
"posted": "Publicado",
|
|
5194
|
+
"failed": "No publicado",
|
|
5195
|
+
"discarded": "Descartado"
|
|
5196
|
+
},
|
|
5197
|
+
"edit": "Editar",
|
|
5198
|
+
"save": "Guardar",
|
|
5199
|
+
"cancel": "Cancelar",
|
|
5200
|
+
"discard": "Descartar",
|
|
5201
|
+
"line": "Línea",
|
|
5202
|
+
"sideLabel": "Lado",
|
|
5203
|
+
"postFailed": "El host rechazó este comentario",
|
|
5204
|
+
"summaryPlaceholder": "Comentario de resumen opcional para la pull request",
|
|
5205
|
+
"summaryFailed": "El host rechazó el comentario de resumen",
|
|
5206
|
+
"post": "Publicar {count} en la pull request",
|
|
5207
|
+
"postResult": "{posted} publicados, {failed} sin publicar, {skipped} ya gestionados."
|
|
5185
5208
|
},
|
|
5186
5209
|
"errors": {
|
|
5187
5210
|
"load": "No se pudo cargar la revisión",
|
|
@@ -5189,7 +5212,9 @@
|
|
|
5189
5212
|
"open": "No se pudo abrir la revisión",
|
|
5190
5213
|
"ask": "No se pudo hacer la pregunta",
|
|
5191
5214
|
"drafts": "No se pudieron pedir borradores de comentarios",
|
|
5192
|
-
"refresh": "No se pudo actualizar la revisión"
|
|
5215
|
+
"refresh": "No se pudo actualizar la revisión",
|
|
5216
|
+
"editDraft": "No se pudo guardar el borrador",
|
|
5217
|
+
"postDrafts": "No se pudieron publicar los borradores"
|
|
5193
5218
|
}
|
|
5194
5219
|
},
|
|
5195
5220
|
"pipeline": {
|
package/i18n/locales/fr.json
CHANGED
|
@@ -727,7 +727,9 @@
|
|
|
727
727
|
"delegated_executor_unwired": "Exécuteur externe non enregistré",
|
|
728
728
|
"delegated_step_async_only": "Cette étape est interrogée, pas attendue",
|
|
729
729
|
"delegated_claim_missing": "Cette étape n’a aucun travail externe à interroger",
|
|
730
|
-
"thread_busy": "Ce fil répond encore"
|
|
730
|
+
"thread_busy": "Ce fil répond encore",
|
|
731
|
+
"draft_conflict": "Ce brouillon a changé",
|
|
732
|
+
"session_stale": "La pull request a évolué"
|
|
731
733
|
},
|
|
732
734
|
"description": {
|
|
733
735
|
"dependencies_unmet": "Cette tâche dépend d'autres qui ne sont pas encore terminées. Terminez-les ou débloquez-les, puis relancez-la.",
|
|
@@ -785,7 +787,9 @@
|
|
|
785
787
|
"delegated_executor_unwired": "Une étape de ce pipeline s’exécute sur un exécuteur externe que ce déploiement n’enregistre pas : le travail n’a donc nulle part où aller. Enregistrez l’exécuteur dans le code, ou remplacez l’étape par une qui s’exécute ici.",
|
|
786
788
|
"delegated_step_async_only": "Cette étape s’exécute sur un exécuteur externe et peut durer des heures : elle est donc lancée puis interrogée, au lieu d’être exécutée dans une seule requête. Démarrez l’exécution depuis le tableau ; si vous arrivez ici depuis votre propre code, pilotez l’étape par la voie asynchrone.",
|
|
787
789
|
"delegated_claim_missing": "L’enregistrement de ce que l’exécution a envoyé à l’exécuteur externe est absent : il n’y a donc rien à interroger. L’exécuteur lui-même n’a aucun problème. Rechargez l’exécution et relancez l’étape si elle reste bloquée.",
|
|
788
|
-
"thread_busy": "La question précédente de ce fil n'a pas encore reçu de réponse. Attends cette réponse ou pose ta question dans un autre fil."
|
|
790
|
+
"thread_busy": "La question précédente de ce fil n'a pas encore reçu de réponse. Attends cette réponse ou pose ta question dans un autre fil.",
|
|
791
|
+
"draft_conflict": "Ce brouillon de commentaire a été modifié, publié ou abandonné depuis que tu l'as chargé. Recharge les brouillons et refais ta modification.",
|
|
792
|
+
"session_stale": "De nouveaux commits sont arrivés après la préparation de cette revue, donc ses brouillons peuvent viser les mauvaises lignes. Actualise la revue, vérifie les brouillons, puis publie."
|
|
789
793
|
},
|
|
790
794
|
"action": {
|
|
791
795
|
"connectGitHub": "Connecter GitHub",
|
|
@@ -5181,7 +5185,26 @@
|
|
|
5181
5185
|
"side": {
|
|
5182
5186
|
"RIGHT": "nouveau code",
|
|
5183
5187
|
"LEFT": "ancien code"
|
|
5184
|
-
}
|
|
5188
|
+
},
|
|
5189
|
+
"select": "Sélectionner ce brouillon pour le publier",
|
|
5190
|
+
"status": {
|
|
5191
|
+
"proposed": "Brouillon",
|
|
5192
|
+
"posting": "Publication",
|
|
5193
|
+
"posted": "Publié",
|
|
5194
|
+
"failed": "Non publié",
|
|
5195
|
+
"discarded": "Abandonné"
|
|
5196
|
+
},
|
|
5197
|
+
"edit": "Modifier",
|
|
5198
|
+
"save": "Enregistrer",
|
|
5199
|
+
"cancel": "Annuler",
|
|
5200
|
+
"discard": "Abandonner",
|
|
5201
|
+
"line": "Ligne",
|
|
5202
|
+
"sideLabel": "Côté",
|
|
5203
|
+
"postFailed": "L'hôte a refusé ce commentaire",
|
|
5204
|
+
"summaryPlaceholder": "Commentaire de synthèse facultatif pour la pull request",
|
|
5205
|
+
"summaryFailed": "L'hôte a refusé le commentaire de synthèse",
|
|
5206
|
+
"post": "Publier {count} sur la pull request",
|
|
5207
|
+
"postResult": "{posted} publiés, {failed} non publiés, {skipped} déjà traités."
|
|
5185
5208
|
},
|
|
5186
5209
|
"errors": {
|
|
5187
5210
|
"load": "Impossible de charger la revue",
|
|
@@ -5189,7 +5212,9 @@
|
|
|
5189
5212
|
"open": "Impossible d'ouvrir la revue",
|
|
5190
5213
|
"ask": "Impossible de poser la question",
|
|
5191
5214
|
"drafts": "Impossible de demander des brouillons de commentaires",
|
|
5192
|
-
"refresh": "Impossible d'actualiser la revue"
|
|
5215
|
+
"refresh": "Impossible d'actualiser la revue",
|
|
5216
|
+
"editDraft": "Impossible d'enregistrer le brouillon",
|
|
5217
|
+
"postDrafts": "Impossible de publier les brouillons"
|
|
5193
5218
|
}
|
|
5194
5219
|
},
|
|
5195
5220
|
"pipeline": {
|
package/i18n/locales/he.json
CHANGED
|
@@ -727,7 +727,9 @@
|
|
|
727
727
|
"delegated_executor_unwired": "המריץ החיצוני אינו רשום",
|
|
728
728
|
"delegated_step_async_only": "שלב זה נבדק מעת לעת, לא ממתינים לו",
|
|
729
729
|
"delegated_claim_missing": "לשלב זה אין עבודה חיצונית לבדיקה",
|
|
730
|
-
"thread_busy": "השרשור הזה עדיין עונה"
|
|
730
|
+
"thread_busy": "השרשור הזה עדיין עונה",
|
|
731
|
+
"draft_conflict": "הטיוטה הזו השתנתה",
|
|
732
|
+
"session_stale": "בקשת המיזוג התקדמה"
|
|
731
733
|
},
|
|
732
734
|
"description": {
|
|
733
735
|
"dependencies_unmet": "משימה זו תלויה במשימות אחרות שטרם הושלמו. השלם או שחרר אותן, ולאחר מכן הפעל אותה שוב.",
|
|
@@ -785,7 +787,9 @@
|
|
|
785
787
|
"delegated_executor_unwired": "שלב בצינור הזה רץ על מריץ חיצוני שההתקנה הזו אינה רושמת, ולכן אין לאן לשלוח את העבודה. רשמו את המריץ בקוד, או החליפו את השלב בשלב שרץ כאן.",
|
|
786
788
|
"delegated_step_async_only": "השלב רץ על מבצע חיצוני ועשוי להימשך שעות, ולכן הוא נשלח ואז נבדק מעת לעת במקום לרוץ בתוך בקשה אחת. התחילו את ההרצה מהלוח; אם הגעתם לכאן מקוד משלכם, הפעילו את השלב דרך המסלול האסינכרוני.",
|
|
787
789
|
"delegated_claim_missing": "הרישום של מה שההרצה שלחה למבצע החיצוני חסר, ולכן אין מה לבדוק. אין שום בעיה במבצע עצמו. טענו מחדש את ההרצה, והריצו את השלב שוב אם הוא עדיין תקוע.",
|
|
788
|
-
"thread_busy": "השאלה הקודמת בשרשור הזה עדיין לא נענתה. המתינו לתשובה או שאלו בשרשור אחר."
|
|
790
|
+
"thread_busy": "השאלה הקודמת בשרשור הזה עדיין לא נענתה. המתינו לתשובה או שאלו בשרשור אחר.",
|
|
791
|
+
"draft_conflict": "טיוטת התגובה נערכה, פורסמה או נמחקה מאז שנטענה. טענו מחדש את הטיוטות ובצעו את השינוי שוב.",
|
|
792
|
+
"session_stale": "נוספו קומיטים חדשים אחרי שהסקירה הוכנה, ולכן הטיוטות עלולות להצביע על שורות שגויות. רעננו את הסקירה, בדקו את הטיוטות ואז פרסמו."
|
|
789
793
|
},
|
|
790
794
|
"action": {
|
|
791
795
|
"connectGitHub": "חבר את GitHub",
|
|
@@ -5181,7 +5185,26 @@
|
|
|
5181
5185
|
"side": {
|
|
5182
5186
|
"RIGHT": "קוד חדש",
|
|
5183
5187
|
"LEFT": "קוד ישן"
|
|
5184
|
-
}
|
|
5188
|
+
},
|
|
5189
|
+
"select": "בחירת הטיוטה הזו לפרסום",
|
|
5190
|
+
"status": {
|
|
5191
|
+
"proposed": "טיוטה",
|
|
5192
|
+
"posting": "בפרסום",
|
|
5193
|
+
"posted": "פורסם",
|
|
5194
|
+
"failed": "לא פורסם",
|
|
5195
|
+
"discarded": "נמחק"
|
|
5196
|
+
},
|
|
5197
|
+
"edit": "עריכה",
|
|
5198
|
+
"save": "שמירה",
|
|
5199
|
+
"cancel": "ביטול",
|
|
5200
|
+
"discard": "מחיקה",
|
|
5201
|
+
"line": "שורה",
|
|
5202
|
+
"sideLabel": "צד",
|
|
5203
|
+
"postFailed": "השרת המארח דחה את התגובה הזו",
|
|
5204
|
+
"summaryPlaceholder": "תגובת סיכום אופציונלית לבקשת המיזוג",
|
|
5205
|
+
"summaryFailed": "השרת המארח דחה את תגובת הסיכום",
|
|
5206
|
+
"post": "פרסום {count} בבקשת המיזוג",
|
|
5207
|
+
"postResult": "{posted} פורסמו, {failed} לא פורסמו, {skipped} כבר טופלו."
|
|
5185
5208
|
},
|
|
5186
5209
|
"errors": {
|
|
5187
5210
|
"load": "לא ניתן היה לטעון את הסקירה",
|
|
@@ -5189,7 +5212,9 @@
|
|
|
5189
5212
|
"open": "לא ניתן היה לפתוח את הסקירה",
|
|
5190
5213
|
"ask": "לא ניתן היה לשאול את השאלה",
|
|
5191
5214
|
"drafts": "לא ניתן היה לבקש טיוטות הערות",
|
|
5192
|
-
"refresh": "לא ניתן היה לרענן את הסקירה"
|
|
5215
|
+
"refresh": "לא ניתן היה לרענן את הסקירה",
|
|
5216
|
+
"editDraft": "לא ניתן היה לשמור את הטיוטה",
|
|
5217
|
+
"postDrafts": "לא ניתן היה לפרסם את הטיוטות"
|
|
5193
5218
|
}
|
|
5194
5219
|
},
|
|
5195
5220
|
"pipeline": {
|
package/i18n/locales/it.json
CHANGED
|
@@ -4657,7 +4657,26 @@
|
|
|
4657
4657
|
"side": {
|
|
4658
4658
|
"RIGHT": "codice nuovo",
|
|
4659
4659
|
"LEFT": "codice precedente"
|
|
4660
|
-
}
|
|
4660
|
+
},
|
|
4661
|
+
"select": "Seleziona questa bozza per la pubblicazione",
|
|
4662
|
+
"status": {
|
|
4663
|
+
"proposed": "Bozza",
|
|
4664
|
+
"posting": "In pubblicazione",
|
|
4665
|
+
"posted": "Pubblicato",
|
|
4666
|
+
"failed": "Non pubblicato",
|
|
4667
|
+
"discarded": "Scartato"
|
|
4668
|
+
},
|
|
4669
|
+
"edit": "Modifica",
|
|
4670
|
+
"save": "Salva",
|
|
4671
|
+
"cancel": "Annulla",
|
|
4672
|
+
"discard": "Scarta",
|
|
4673
|
+
"line": "Riga",
|
|
4674
|
+
"sideLabel": "Lato",
|
|
4675
|
+
"postFailed": "L'host ha rifiutato questo commento",
|
|
4676
|
+
"summaryPlaceholder": "Commento di riepilogo facoltativo per la pull request",
|
|
4677
|
+
"summaryFailed": "L'host ha rifiutato il commento di riepilogo",
|
|
4678
|
+
"post": "Pubblica {count} nella pull request",
|
|
4679
|
+
"postResult": "{posted} pubblicati, {failed} non pubblicati, {skipped} già gestiti."
|
|
4661
4680
|
},
|
|
4662
4681
|
"errors": {
|
|
4663
4682
|
"load": "Impossibile caricare la revisione",
|
|
@@ -4665,7 +4684,9 @@
|
|
|
4665
4684
|
"open": "Impossibile aprire la revisione",
|
|
4666
4685
|
"ask": "Impossibile fare la domanda",
|
|
4667
4686
|
"drafts": "Impossibile richiedere le bozze di commenti",
|
|
4668
|
-
"refresh": "Impossibile aggiornare la revisione"
|
|
4687
|
+
"refresh": "Impossibile aggiornare la revisione",
|
|
4688
|
+
"editDraft": "Impossibile salvare la bozza",
|
|
4689
|
+
"postDrafts": "Impossibile pubblicare le bozze"
|
|
4669
4690
|
}
|
|
4670
4691
|
},
|
|
4671
4692
|
"pipeline": {
|
|
@@ -6392,7 +6413,9 @@
|
|
|
6392
6413
|
"delegated_executor_unwired": "Esecutore esterno non registrato",
|
|
6393
6414
|
"delegated_step_async_only": "Questo passo viene interrogato, non atteso",
|
|
6394
6415
|
"delegated_claim_missing": "Questo passo non ha lavoro esterno da controllare",
|
|
6395
|
-
"thread_busy": "Questa discussione sta ancora rispondendo"
|
|
6416
|
+
"thread_busy": "Questa discussione sta ancora rispondendo",
|
|
6417
|
+
"draft_conflict": "Questa bozza è cambiata",
|
|
6418
|
+
"session_stale": "La pull request è andata avanti"
|
|
6396
6419
|
},
|
|
6397
6420
|
"description": {
|
|
6398
6421
|
"dependencies_unmet": "Questa attività dipende da altre non ancora completate. Completale o sbloccale, poi avviala di nuovo.",
|
|
@@ -6450,7 +6473,9 @@
|
|
|
6450
6473
|
"delegated_executor_unwired": "Un passaggio di questa pipeline viene eseguito su un esecutore esterno che questa installazione non registra, quindi il lavoro non ha una destinazione. Registra l’esecutore nel codice oppure sostituisci il passaggio con uno eseguito qui.",
|
|
6451
6474
|
"delegated_step_async_only": "Questo passo gira su un esecutore esterno e può durare ore, quindi viene avviato e poi interrogato invece di essere eseguito dentro una sola richiesta. Avvia l’esecuzione dalla board; se sei arrivato qui dal tuo codice, guida il passo attraverso il percorso asincrono.",
|
|
6452
6475
|
"delegated_claim_missing": "Manca la registrazione di ciò che l’esecuzione ha inviato all’esecutore esterno, quindi non c’è nulla da interrogare. L’esecutore in sé non ha alcun problema. Ricarica l’esecuzione e rilancia il passo se resta bloccato.",
|
|
6453
|
-
"thread_busy": "La domanda precedente in questa discussione non ha ancora una risposta. Attendi la risposta o chiedi in un'altra discussione."
|
|
6476
|
+
"thread_busy": "La domanda precedente in questa discussione non ha ancora una risposta. Attendi la risposta o chiedi in un'altra discussione.",
|
|
6477
|
+
"draft_conflict": "Questa bozza di commento è stata modificata, pubblicata o scartata da quando l'hai caricata. Ricarica le bozze e ripeti la modifica.",
|
|
6478
|
+
"session_stale": "Sono arrivati nuovi commit dopo la preparazione di questa revisione, quindi le bozze potrebbero puntare alle righe sbagliate. Aggiorna la revisione, controlla le bozze e poi pubblica."
|
|
6454
6479
|
},
|
|
6455
6480
|
"action": {
|
|
6456
6481
|
"connectGitHub": "Collega GitHub",
|
package/i18n/locales/ja.json
CHANGED
|
@@ -727,7 +727,9 @@
|
|
|
727
727
|
"delegated_executor_unwired": "外部エグゼキューターが登録されていません",
|
|
728
728
|
"delegated_step_async_only": "このステップはポーリングされます。完了を待つことはできません",
|
|
729
729
|
"delegated_claim_missing": "このステップには確認できる外部の処理がありません",
|
|
730
|
-
"thread_busy": "このスレッドはまだ回答中です"
|
|
730
|
+
"thread_busy": "このスレッドはまだ回答中です",
|
|
731
|
+
"draft_conflict": "この下書きは変更されています",
|
|
732
|
+
"session_stale": "プルリクエストが更新されています"
|
|
731
733
|
},
|
|
732
734
|
"description": {
|
|
733
735
|
"dependencies_unmet": "このタスクは、まだ完了していない他のタスクに依存しています。それらを完了または解除してから、もう一度開始してください。",
|
|
@@ -785,7 +787,9 @@
|
|
|
785
787
|
"delegated_executor_unwired": "このパイプラインのステップは、このデプロイが登録していない外部エグゼキューターで実行されるため、処理の送り先がありません。エグゼキューターをコードに登録するか、ここで実行されるステップに変更してください。",
|
|
786
788
|
"delegated_step_async_only": "このステップは外部エグゼキューター上で実行され、数時間かかることがあります。そのため、単一のリクエスト内で実行するのではなく、ディスパッチしたうえでポーリングします。実行はボードから開始してください。独自のコードからここに到達した場合は、非同期パスでステップを駆動してください。",
|
|
787
789
|
"delegated_claim_missing": "外部エグゼキューターに何を送ったかという実行の記録が失われているため、ポーリングする対象がありません。エグゼキューター自体に問題はありません。実行を再読み込みし、まだ止まったままならステップを再実行してください。",
|
|
788
|
-
"thread_busy": "このスレッドの前の質問にまだ回答がありません。回答を待つか、別のスレッドで質問してください。"
|
|
790
|
+
"thread_busy": "このスレッドの前の質問にまだ回答がありません。回答を待つか、別のスレッドで質問してください。",
|
|
791
|
+
"draft_conflict": "読み込んだ後に、このコメントの下書きが編集、投稿、または破棄されました。下書きを再読み込みして、もう一度変更してください。",
|
|
792
|
+
"session_stale": "このレビューの準備後に新しいコミットが追加されたため、下書きが誤った行を指している可能性があります。レビューを更新し、下書きを確認してから投稿してください。"
|
|
789
793
|
},
|
|
790
794
|
"action": {
|
|
791
795
|
"connectGitHub": "GitHub に接続",
|
|
@@ -5181,7 +5185,26 @@
|
|
|
5181
5185
|
"side": {
|
|
5182
5186
|
"RIGHT": "新しいコード",
|
|
5183
5187
|
"LEFT": "古いコード"
|
|
5184
|
-
}
|
|
5188
|
+
},
|
|
5189
|
+
"select": "この下書きを投稿対象に選択",
|
|
5190
|
+
"status": {
|
|
5191
|
+
"proposed": "下書き",
|
|
5192
|
+
"posting": "投稿中",
|
|
5193
|
+
"posted": "投稿済み",
|
|
5194
|
+
"failed": "未投稿",
|
|
5195
|
+
"discarded": "破棄済み"
|
|
5196
|
+
},
|
|
5197
|
+
"edit": "編集",
|
|
5198
|
+
"save": "保存",
|
|
5199
|
+
"cancel": "キャンセル",
|
|
5200
|
+
"discard": "破棄",
|
|
5201
|
+
"line": "行",
|
|
5202
|
+
"sideLabel": "側",
|
|
5203
|
+
"postFailed": "ホストがこのコメントを拒否しました",
|
|
5204
|
+
"summaryPlaceholder": "プルリクエストへの任意のまとめコメント",
|
|
5205
|
+
"summaryFailed": "ホストが要約コメントを拒否しました",
|
|
5206
|
+
"post": "プルリクエストに {count} 件投稿",
|
|
5207
|
+
"postResult": "投稿 {posted} 件、未投稿 {failed} 件、処理済み {skipped} 件。"
|
|
5185
5208
|
},
|
|
5186
5209
|
"errors": {
|
|
5187
5210
|
"load": "レビューを読み込めませんでした",
|
|
@@ -5189,7 +5212,9 @@
|
|
|
5189
5212
|
"open": "レビューを開けませんでした",
|
|
5190
5213
|
"ask": "質問できませんでした",
|
|
5191
5214
|
"drafts": "コメントの下書きを依頼できませんでした",
|
|
5192
|
-
"refresh": "レビューを更新できませんでした"
|
|
5215
|
+
"refresh": "レビューを更新できませんでした",
|
|
5216
|
+
"editDraft": "下書きを保存できませんでした",
|
|
5217
|
+
"postDrafts": "下書きを投稿できませんでした"
|
|
5193
5218
|
}
|
|
5194
5219
|
},
|
|
5195
5220
|
"pipeline": {
|
package/i18n/locales/pl.json
CHANGED
|
@@ -727,7 +727,9 @@
|
|
|
727
727
|
"delegated_executor_unwired": "Zewnętrzny executor nie jest zarejestrowany",
|
|
728
728
|
"delegated_step_async_only": "Ten krok jest odpytywany, a nie oczekiwany",
|
|
729
729
|
"delegated_claim_missing": "Ten krok nie ma zewnętrznej pracy do sprawdzenia",
|
|
730
|
-
"thread_busy": "Ten wątek wciąż odpowiada"
|
|
730
|
+
"thread_busy": "Ten wątek wciąż odpowiada",
|
|
731
|
+
"draft_conflict": "Ten szkic się zmienił",
|
|
732
|
+
"session_stale": "Pull request poszedł dalej"
|
|
731
733
|
},
|
|
732
734
|
"description": {
|
|
733
735
|
"dependencies_unmet": "To zadanie zależy od innych, które nie zostały jeszcze ukończone. Ukończ je lub odblokuj, a następnie uruchom je ponownie.",
|
|
@@ -785,7 +787,9 @@
|
|
|
785
787
|
"delegated_executor_unwired": "Krok tego potoku działa na zewnętrznym executorze, którego ta instalacja nie rejestruje, więc pracy nie ma dokąd wysłać. Zarejestruj executor w kodzie albo zmień krok na taki, który działa tutaj.",
|
|
786
788
|
"delegated_step_async_only": "Ten krok działa na zewnętrznym wykonawcy i może trwać godzinami, więc jest wysyłany, a następnie odpytywany, zamiast wykonywany w obrębie jednego żądania. Uruchom przebieg z tablicy; jeśli trafiłeś tu z własnego kodu, steruj krokiem ścieżką asynchroniczną.",
|
|
787
789
|
"delegated_claim_missing": "Brakuje zapisu tego, co przebieg wysłał do zewnętrznego wykonawcy, więc nie ma czego odpytywać. Z samym wykonawcą wszystko jest w porządku. Odśwież przebieg i uruchom krok ponownie, jeśli nadal stoi.",
|
|
788
|
-
"thread_busy": "Poprzednie pytanie w tym wątku nie ma jeszcze odpowiedzi. Poczekaj na nią albo zapytaj w innym wątku."
|
|
790
|
+
"thread_busy": "Poprzednie pytanie w tym wątku nie ma jeszcze odpowiedzi. Poczekaj na nią albo zapytaj w innym wątku.",
|
|
791
|
+
"draft_conflict": "Od wczytania ten szkic komentarza został edytowany, opublikowany lub odrzucony. Wczytaj szkice ponownie i wprowadź zmianę jeszcze raz.",
|
|
792
|
+
"session_stale": "Po przygotowaniu tej recenzji pojawiły się nowe commity, więc szkice mogą wskazywać złe linie. Odśwież recenzję, sprawdź szkice i dopiero wtedy opublikuj."
|
|
789
793
|
},
|
|
790
794
|
"action": {
|
|
791
795
|
"connectGitHub": "Połącz GitHub",
|
|
@@ -5181,7 +5185,26 @@
|
|
|
5181
5185
|
"side": {
|
|
5182
5186
|
"RIGHT": "nowy kod",
|
|
5183
5187
|
"LEFT": "stary kod"
|
|
5184
|
-
}
|
|
5188
|
+
},
|
|
5189
|
+
"select": "Wybierz ten szkic do opublikowania",
|
|
5190
|
+
"status": {
|
|
5191
|
+
"proposed": "Szkic",
|
|
5192
|
+
"posting": "Publikowanie",
|
|
5193
|
+
"posted": "Opublikowany",
|
|
5194
|
+
"failed": "Nieopublikowany",
|
|
5195
|
+
"discarded": "Odrzucony"
|
|
5196
|
+
},
|
|
5197
|
+
"edit": "Edytuj",
|
|
5198
|
+
"save": "Zapisz",
|
|
5199
|
+
"cancel": "Anuluj",
|
|
5200
|
+
"discard": "Odrzuć",
|
|
5201
|
+
"line": "Linia",
|
|
5202
|
+
"sideLabel": "Strona",
|
|
5203
|
+
"postFailed": "Host odrzucił ten komentarz",
|
|
5204
|
+
"summaryPlaceholder": "Opcjonalny komentarz podsumowujący do pull requesta",
|
|
5205
|
+
"summaryFailed": "Host odrzucił komentarz podsumowujący",
|
|
5206
|
+
"post": "Opublikuj {count} w pull requeście",
|
|
5207
|
+
"postResult": "Opublikowane: {posted}, nieopublikowane: {failed}, już obsłużone: {skipped}."
|
|
5185
5208
|
},
|
|
5186
5209
|
"errors": {
|
|
5187
5210
|
"load": "Nie udało się wczytać przeglądu",
|
|
@@ -5189,7 +5212,9 @@
|
|
|
5189
5212
|
"open": "Nie udało się otworzyć przeglądu",
|
|
5190
5213
|
"ask": "Nie udało się zadać pytania",
|
|
5191
5214
|
"drafts": "Nie udało się poprosić o szkice komentarzy",
|
|
5192
|
-
"refresh": "Nie udało się odświeżyć przeglądu"
|
|
5215
|
+
"refresh": "Nie udało się odświeżyć przeglądu",
|
|
5216
|
+
"editDraft": "Nie udało się zapisać szkicu",
|
|
5217
|
+
"postDrafts": "Nie udało się opublikować szkiców"
|
|
5193
5218
|
}
|
|
5194
5219
|
},
|
|
5195
5220
|
"pipeline": {
|
package/i18n/locales/tr.json
CHANGED
|
@@ -727,7 +727,9 @@
|
|
|
727
727
|
"delegated_executor_unwired": "Dış yürütücü kayıtlı değil",
|
|
728
728
|
"delegated_step_async_only": "Bu adım beklenmez, yoklanır",
|
|
729
729
|
"delegated_claim_missing": "Bu adımın kontrol edilecek harici işi yok",
|
|
730
|
-
"thread_busy": "Bu konu hâlâ yanıtlanıyor"
|
|
730
|
+
"thread_busy": "Bu konu hâlâ yanıtlanıyor",
|
|
731
|
+
"draft_conflict": "Bu taslak değişti",
|
|
732
|
+
"session_stale": "Pull request ilerledi"
|
|
731
733
|
},
|
|
732
734
|
"description": {
|
|
733
735
|
"dependencies_unmet": "Bu görev henüz tamamlanmamış başka görevlere bağlı. Onları tamamla veya engelini kaldır, ardından yeniden başlat.",
|
|
@@ -785,7 +787,9 @@
|
|
|
785
787
|
"delegated_executor_unwired": "Bu hattın bir adımı, bu kurulumun kaydetmediği bir dış yürütücüde çalışıyor; dolayısıyla işin gönderileceği bir yer yok. Yürütücüyü kodda kaydedin ya da adımı burada çalışan biriyle değiştirin.",
|
|
786
788
|
"delegated_step_async_only": "Bu adım harici bir yürütücüde çalışır ve saatler sürebilir; bu yüzden tek bir istek içinde çalıştırılmak yerine gönderilip ardından yoklanır. Çalıştırmayı panodan başlatın; buraya kendi kodunuzdan geldiyseniz adımı asenkron yoldan sürün.",
|
|
787
789
|
"delegated_claim_missing": "Çalıştırmanın harici yürütücüye ne gönderdiğine dair kaydı eksik, dolayısıyla yoklanacak bir şey yok. Yürütücünün kendisinde bir sorun yok. Çalıştırmayı yeniden yükleyin ve adım hâlâ takılıysa yeniden çalıştırın.",
|
|
788
|
-
"thread_busy": "Bu konudaki önceki soru henüz yanıtlanmadı. Yanıtı bekleyin ya da başka bir konuda sorun."
|
|
790
|
+
"thread_busy": "Bu konudaki önceki soru henüz yanıtlanmadı. Yanıtı bekleyin ya da başka bir konuda sorun.",
|
|
791
|
+
"draft_conflict": "Bu yorum taslağı siz yükledikten sonra düzenlendi, gönderildi ya da atıldı. Taslakları yeniden yükleyip değişikliğinizi tekrar yapın.",
|
|
792
|
+
"session_stale": "Bu inceleme hazırlandıktan sonra yeni commit'ler geldi, bu yüzden taslaklar yanlış satırları gösteriyor olabilir. İncelemeyi yenileyin, taslakları kontrol edin, sonra gönderin."
|
|
789
793
|
},
|
|
790
794
|
"action": {
|
|
791
795
|
"connectGitHub": "GitHub'ı bağla",
|
|
@@ -5181,7 +5185,26 @@
|
|
|
5181
5185
|
"side": {
|
|
5182
5186
|
"RIGHT": "yeni kod",
|
|
5183
5187
|
"LEFT": "eski kod"
|
|
5184
|
-
}
|
|
5188
|
+
},
|
|
5189
|
+
"select": "Bu taslağı göndermek için seç",
|
|
5190
|
+
"status": {
|
|
5191
|
+
"proposed": "Taslak",
|
|
5192
|
+
"posting": "Gönderiliyor",
|
|
5193
|
+
"posted": "Gönderildi",
|
|
5194
|
+
"failed": "Gönderilmedi",
|
|
5195
|
+
"discarded": "Atıldı"
|
|
5196
|
+
},
|
|
5197
|
+
"edit": "Düzenle",
|
|
5198
|
+
"save": "Kaydet",
|
|
5199
|
+
"cancel": "İptal",
|
|
5200
|
+
"discard": "At",
|
|
5201
|
+
"line": "Satır",
|
|
5202
|
+
"sideLabel": "Taraf",
|
|
5203
|
+
"postFailed": "Sunucu bu yorumu reddetti",
|
|
5204
|
+
"summaryPlaceholder": "Pull request için isteğe bağlı özet yorumu",
|
|
5205
|
+
"summaryFailed": "Sunucu özet yorumunu reddetti",
|
|
5206
|
+
"post": "{count} tanesini pull request'e gönder",
|
|
5207
|
+
"postResult": "{posted} gönderildi, {failed} gönderilmedi, {skipped} zaten işlendi."
|
|
5185
5208
|
},
|
|
5186
5209
|
"errors": {
|
|
5187
5210
|
"load": "İnceleme yüklenemedi",
|
|
@@ -5189,7 +5212,9 @@
|
|
|
5189
5212
|
"open": "İnceleme açılamadı",
|
|
5190
5213
|
"ask": "Soru sorulamadı",
|
|
5191
5214
|
"drafts": "Yorum taslakları istenemedi",
|
|
5192
|
-
"refresh": "İnceleme yenilenemedi"
|
|
5215
|
+
"refresh": "İnceleme yenilenemedi",
|
|
5216
|
+
"editDraft": "Taslak kaydedilemedi",
|
|
5217
|
+
"postDrafts": "Taslaklar gönderilemedi"
|
|
5193
5218
|
}
|
|
5194
5219
|
},
|
|
5195
5220
|
"pipeline": {
|
package/i18n/locales/uk.json
CHANGED
|
@@ -727,7 +727,9 @@
|
|
|
727
727
|
"delegated_executor_unwired": "Зовнішній виконавець не зареєстрований",
|
|
728
728
|
"delegated_step_async_only": "Цей крок опитується, а не очікується",
|
|
729
729
|
"delegated_claim_missing": "У цього кроку немає зовнішньої роботи для перевірки",
|
|
730
|
-
"thread_busy": "Ця гілка ще відповідає"
|
|
730
|
+
"thread_busy": "Ця гілка ще відповідає",
|
|
731
|
+
"draft_conflict": "Ця чернетка змінилася",
|
|
732
|
+
"session_stale": "Pull request змінився"
|
|
731
733
|
},
|
|
732
734
|
"description": {
|
|
733
735
|
"dependencies_unmet": "Це завдання залежить від інших, які ще не завершені. Заверши або розблокуй їх, а потім запусти його знову.",
|
|
@@ -785,7 +787,9 @@
|
|
|
785
787
|
"delegated_executor_unwired": "Крок цього конвеєра виконується на зовнішньому виконавці, якого це розгортання не реєструє, тож роботу нікуди надіслати. Зареєструйте виконавця в коді або замініть крок на той, що виконується тут.",
|
|
786
788
|
"delegated_step_async_only": "Цей крок виконується на зовнішньому виконавці й може тривати годинами, тому його надсилають і потім опитують, а не виконують у межах одного запиту. Запустіть прогін з дошки; якщо ви потрапили сюди зі свого коду, керуйте кроком через асинхронний шлях.",
|
|
787
789
|
"delegated_claim_missing": "Запис про те, що прогін надіслав зовнішньому виконавцю, відсутній, тож немає чого опитувати. Із самим виконавцем усе гаразд. Перезавантажте прогін і запустіть крок повторно, якщо він і далі стоїть.",
|
|
788
|
-
"thread_busy": "На попереднє запитання в цій гілці ще немає відповіді. Дочекайтеся її або запитайте в іншій гілці."
|
|
790
|
+
"thread_busy": "На попереднє запитання в цій гілці ще немає відповіді. Дочекайтеся її або запитайте в іншій гілці.",
|
|
791
|
+
"draft_conflict": "Після завантаження цю чернетку коментаря відредагували, опублікували або відхилили. Перезавантажте чернетки й внесіть зміну ще раз.",
|
|
792
|
+
"session_stale": "Після підготовки цього рев’ю з’явилися нові коміти, тож чернетки можуть вказувати на неправильні рядки. Оновіть рев’ю, перевірте чернетки, а потім публікуйте."
|
|
789
793
|
},
|
|
790
794
|
"action": {
|
|
791
795
|
"connectGitHub": "Під'єднати GitHub",
|
|
@@ -5181,7 +5185,26 @@
|
|
|
5181
5185
|
"side": {
|
|
5182
5186
|
"RIGHT": "новий код",
|
|
5183
5187
|
"LEFT": "старий код"
|
|
5184
|
-
}
|
|
5188
|
+
},
|
|
5189
|
+
"select": "Вибрати цю чернетку для публікації",
|
|
5190
|
+
"status": {
|
|
5191
|
+
"proposed": "Чернетка",
|
|
5192
|
+
"posting": "Публікується",
|
|
5193
|
+
"posted": "Опубліковано",
|
|
5194
|
+
"failed": "Не опубліковано",
|
|
5195
|
+
"discarded": "Відхилено"
|
|
5196
|
+
},
|
|
5197
|
+
"edit": "Редагувати",
|
|
5198
|
+
"save": "Зберегти",
|
|
5199
|
+
"cancel": "Скасувати",
|
|
5200
|
+
"discard": "Відхилити",
|
|
5201
|
+
"line": "Рядок",
|
|
5202
|
+
"sideLabel": "Бік",
|
|
5203
|
+
"postFailed": "Хост відхилив цей коментар",
|
|
5204
|
+
"summaryPlaceholder": "Необов’язковий підсумковий коментар до pull request",
|
|
5205
|
+
"summaryFailed": "Хост відхилив коментар-підсумок",
|
|
5206
|
+
"post": "Опублікувати {count} у pull request",
|
|
5207
|
+
"postResult": "Опубліковано: {posted}, не опубліковано: {failed}, вже оброблено: {skipped}."
|
|
5185
5208
|
},
|
|
5186
5209
|
"errors": {
|
|
5187
5210
|
"load": "Не вдалося завантажити рев’ю",
|
|
@@ -5189,7 +5212,9 @@
|
|
|
5189
5212
|
"open": "Не вдалося відкрити рев’ю",
|
|
5190
5213
|
"ask": "Не вдалося поставити запитання",
|
|
5191
5214
|
"drafts": "Не вдалося запитати чернетки коментарів",
|
|
5192
|
-
"refresh": "Не вдалося оновити рев’ю"
|
|
5215
|
+
"refresh": "Не вдалося оновити рев’ю",
|
|
5216
|
+
"editDraft": "Не вдалося зберегти чернетку",
|
|
5217
|
+
"postDrafts": "Не вдалося опублікувати чернетки"
|
|
5193
5218
|
}
|
|
5194
5219
|
},
|
|
5195
5220
|
"pipeline": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.306.0",
|
|
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",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"access": "public"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@cat-factory/contracts": "0.
|
|
21
|
+
"@cat-factory/contracts": "0.361.0",
|
|
22
22
|
"@modular-frontend/core": "0.6.0",
|
|
23
23
|
"@modular-vue/core": "^1.5.0",
|
|
24
24
|
"@modular-vue/journeys": "^1.4.0",
|