@cat-factory/app 0.242.2 → 0.243.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/board/RecurringPipelineModal.vue +12 -3
- package/app/components/settings/IssueTrackerPanel.vue +32 -205
- package/app/components/settings/TaskSourceCard.vue +143 -0
- package/app/stores/tasks.spec.ts +3 -0
- package/i18n/locales/de.json +9 -14
- package/i18n/locales/en.json +9 -14
- package/i18n/locales/es.json +9 -14
- package/i18n/locales/fr.json +9 -14
- package/i18n/locales/he.json +9 -14
- package/i18n/locales/it.json +9 -14
- package/i18n/locales/ja.json +9 -14
- package/i18n/locales/pl.json +9 -14
- package/i18n/locales/tr.json +9 -14
- package/i18n/locales/uk.json +9 -14
- package/package.json +2 -2
|
@@ -175,8 +175,11 @@ const intakeDispatch = computed<'queue' | 'per-ticket'>(() =>
|
|
|
175
175
|
isBugIntake.value ? 'queue' : 'per-ticket',
|
|
176
176
|
)
|
|
177
177
|
|
|
178
|
-
// Sources that can back intake right now
|
|
179
|
-
|
|
178
|
+
// Sources that can back intake right now: connected / App-installed AND enabled, AND able to run
|
|
179
|
+
// the predicate search intake fires. The last is not a refinement of the first two — a source
|
|
180
|
+
// without it saves a schedule that can never produce a ticket — so it is asked of the server
|
|
181
|
+
// (`supportsIntake`, derived from the registered provider) rather than inferred from the id here.
|
|
182
|
+
const intakeSources = computed(() => tasks.offeredSources.filter((s) => s.supportsIntake))
|
|
180
183
|
|
|
181
184
|
watch(open, (isOpen) => {
|
|
182
185
|
if (!isOpen) return
|
|
@@ -490,8 +493,14 @@ async function add() {
|
|
|
490
493
|
<p class="text-[11px] text-slate-500">
|
|
491
494
|
{{ t('board.recurring.intakeHint') }}
|
|
492
495
|
</p>
|
|
496
|
+
<!-- Two different remedies: connect something, versus connect something ELSE. A source
|
|
497
|
+
that is connected but cannot run a scheduled search is not an absent connection. -->
|
|
493
498
|
<p v-if="intakeSources.length === 0" class="text-[11px] text-amber-500">
|
|
494
|
-
{{
|
|
499
|
+
{{
|
|
500
|
+
tasks.anyOffered
|
|
501
|
+
? t('board.recurring.intakeNoIntakeSources')
|
|
502
|
+
: t('board.recurring.intakeNoSources')
|
|
503
|
+
}}
|
|
495
504
|
</p>
|
|
496
505
|
<div v-else class="flex flex-wrap gap-1">
|
|
497
506
|
<UButton
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
// directly; linking is the source toggle), so both are shown explicitly to undo
|
|
16
16
|
// the common confusion that "I have the GitHub App, why is nothing surfaced?".
|
|
17
17
|
import { computed, onMounted, ref, watch } from 'vue'
|
|
18
|
-
import type {
|
|
18
|
+
import type { TaskSourceKind, TaskSourceState, TrackerKind } from '~/types/domain'
|
|
19
|
+
import TaskSourceCard from '~/components/settings/TaskSourceCard.vue'
|
|
19
20
|
|
|
20
21
|
const { t } = useI18n()
|
|
21
22
|
const tracker = useTrackerStore()
|
|
@@ -50,15 +51,12 @@ onMounted(() => {
|
|
|
50
51
|
// (no deep traversal) catches every change.
|
|
51
52
|
watch(() => tracker.settings, hydrate)
|
|
52
53
|
|
|
53
|
-
// Per-source live state (available = usable now; enabled = offered to the workspace).
|
|
54
|
-
const github = computed(() => tasks.descriptorFor('github'))
|
|
55
|
-
const jira = computed(() => tasks.descriptorFor('jira'))
|
|
56
|
-
const linear = computed(() => tasks.descriptorFor('linear'))
|
|
57
|
-
|
|
58
54
|
// A tracker can only file where it can authenticate: GitHub rides the installed
|
|
59
55
|
// App, Jira/Linear need a connection. Selecting an unusable tracker is allowed (it
|
|
60
|
-
// just won't file until set up), but we surface the gap inline.
|
|
61
|
-
|
|
56
|
+
// just won't file until set up), but we surface the gap inline. (The FILING picker is a
|
|
57
|
+
// closed list of the three trackers the `tracker` step can file into, unlike the LINKING
|
|
58
|
+
// list below, which is whatever the deployment registered.)
|
|
59
|
+
const githubAvailable = computed(() => tasks.descriptorFor('github')?.available ?? false)
|
|
62
60
|
const jiraConnected = computed(() => tasks.isConnected('jira'))
|
|
63
61
|
const linearConnected = computed(() => tasks.isConnected('linear'))
|
|
64
62
|
|
|
@@ -135,6 +133,18 @@ async function save() {
|
|
|
135
133
|
// --- linking sources (per-source toggle, saved immediately) -------------------
|
|
136
134
|
const togglingSource = ref<TaskSourceKind | null>(null)
|
|
137
135
|
|
|
136
|
+
/**
|
|
137
|
+
* Open whatever a source needs before it can be offered. A VCS-backed source (GitHub Issues,
|
|
138
|
+
* GitLab Issues) is missing its workspace VCS connection, which is set up on the VCS integration
|
|
139
|
+
* surface and NOT here: that one panel serves both providers, so a GitLab deployment lands on
|
|
140
|
+
* its PAT form and a GitHub one on the App install. Everything else is missing its own
|
|
141
|
+
* credentials, which is this source's connect form.
|
|
142
|
+
*/
|
|
143
|
+
function openRemedy(source: TaskSourceState) {
|
|
144
|
+
if (source.ridesVcsProvider) ui.openGitHub()
|
|
145
|
+
else ui.openTaskConnect(source.source)
|
|
146
|
+
}
|
|
147
|
+
|
|
138
148
|
async function toggleSource(source: TaskSourceKind, enabled: boolean) {
|
|
139
149
|
togglingSource.value = source
|
|
140
150
|
try {
|
|
@@ -187,20 +197,6 @@ async function checkSetup(source: TaskSourceKind) {
|
|
|
187
197
|
})
|
|
188
198
|
}
|
|
189
199
|
}
|
|
190
|
-
|
|
191
|
-
// Status → presentation for a setup-check verdict.
|
|
192
|
-
const STATUS_UI: Record<
|
|
193
|
-
TaskSourceDiagnosticStatus,
|
|
194
|
-
{ color: 'success' | 'warning' | 'error' | 'neutral'; icon: string }
|
|
195
|
-
> = {
|
|
196
|
-
ready: { color: 'success', icon: 'i-lucide-circle-check' },
|
|
197
|
-
not_installed: { color: 'warning', icon: 'i-lucide-download' },
|
|
198
|
-
not_connected: { color: 'warning', icon: 'i-lucide-plug' },
|
|
199
|
-
auth_failed: { color: 'error', icon: 'i-lucide-key-round' },
|
|
200
|
-
forbidden: { color: 'error', icon: 'i-lucide-shield-x' },
|
|
201
|
-
unreachable: { color: 'error', icon: 'i-lucide-wifi-off' },
|
|
202
|
-
error: { color: 'error', icon: 'i-lucide-triangle-alert' },
|
|
203
|
-
}
|
|
204
200
|
</script>
|
|
205
201
|
|
|
206
202
|
<template>
|
|
@@ -370,190 +366,21 @@ const STATUS_UI: Record<
|
|
|
370
366
|
</p>
|
|
371
367
|
</div>
|
|
372
368
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
githubAvailable
|
|
385
|
-
? t('settings.issueTracker.linking.github.available')
|
|
386
|
-
: t('settings.issueTracker.linking.github.unavailable')
|
|
387
|
-
}}
|
|
388
|
-
</div>
|
|
389
|
-
</div>
|
|
390
|
-
</div>
|
|
391
|
-
<div class="flex shrink-0 items-center gap-2">
|
|
392
|
-
<UButton
|
|
393
|
-
size="xs"
|
|
394
|
-
color="neutral"
|
|
395
|
-
variant="ghost"
|
|
396
|
-
icon="i-lucide-stethoscope"
|
|
397
|
-
:loading="tasks.checking === 'github'"
|
|
398
|
-
@click="checkSetup('github')"
|
|
399
|
-
>
|
|
400
|
-
{{ t('settings.issueTracker.linking.checkSetup') }}
|
|
401
|
-
</UButton>
|
|
402
|
-
<USwitch
|
|
403
|
-
v-if="githubAvailable"
|
|
404
|
-
:model-value="github?.enabled ?? false"
|
|
405
|
-
:loading="togglingSource === 'github'"
|
|
406
|
-
@update:model-value="(v: boolean) => toggleSource('github', v)"
|
|
407
|
-
/>
|
|
408
|
-
<UButton
|
|
409
|
-
v-else
|
|
410
|
-
size="xs"
|
|
411
|
-
color="neutral"
|
|
412
|
-
variant="soft"
|
|
413
|
-
icon="i-lucide-github"
|
|
414
|
-
@click="ui.openGitHub()"
|
|
415
|
-
>
|
|
416
|
-
{{ t('settings.issueTracker.linking.install') }}
|
|
417
|
-
</UButton>
|
|
418
|
-
</div>
|
|
419
|
-
</div>
|
|
420
|
-
<UAlert
|
|
421
|
-
v-if="tasks.diagnostics.github"
|
|
422
|
-
class="mt-2.5"
|
|
423
|
-
:color="STATUS_UI[tasks.diagnostics.github.status].color"
|
|
424
|
-
variant="subtle"
|
|
425
|
-
:icon="STATUS_UI[tasks.diagnostics.github.status].icon"
|
|
426
|
-
:description="
|
|
427
|
-
tasks.diagnostics.github.message +
|
|
428
|
-
(tasks.diagnostics.github.detail ? ` ${tasks.diagnostics.github.detail}` : '')
|
|
429
|
-
"
|
|
430
|
-
:ui="{ description: 'text-[11px]' }"
|
|
431
|
-
/>
|
|
432
|
-
</div>
|
|
433
|
-
|
|
434
|
-
<!-- Jira source -->
|
|
435
|
-
<div class="rounded-lg border border-slate-800 bg-slate-800/40 px-3 py-2.5">
|
|
436
|
-
<div class="flex items-center justify-between gap-2">
|
|
437
|
-
<div class="flex min-w-0 items-center gap-2.5">
|
|
438
|
-
<UIcon name="i-lucide-trello" class="h-5 w-5 shrink-0 text-slate-300" />
|
|
439
|
-
<div class="min-w-0">
|
|
440
|
-
<div class="text-sm font-medium text-slate-200">
|
|
441
|
-
{{ t('settings.issueTracker.vendor.jira') }}
|
|
442
|
-
</div>
|
|
443
|
-
<div class="text-[11px] text-slate-500">
|
|
444
|
-
{{
|
|
445
|
-
jiraConnected
|
|
446
|
-
? t('settings.issueTracker.linking.connected')
|
|
447
|
-
: t('settings.issueTracker.linking.jira.connectHint')
|
|
448
|
-
}}
|
|
449
|
-
</div>
|
|
450
|
-
</div>
|
|
451
|
-
</div>
|
|
452
|
-
<div class="flex shrink-0 items-center gap-2">
|
|
453
|
-
<UButton
|
|
454
|
-
v-if="jiraConnected"
|
|
455
|
-
size="xs"
|
|
456
|
-
color="neutral"
|
|
457
|
-
variant="ghost"
|
|
458
|
-
icon="i-lucide-stethoscope"
|
|
459
|
-
:loading="tasks.checking === 'jira'"
|
|
460
|
-
@click="checkSetup('jira')"
|
|
461
|
-
>
|
|
462
|
-
{{ t('settings.issueTracker.linking.checkSetup') }}
|
|
463
|
-
</UButton>
|
|
464
|
-
<USwitch
|
|
465
|
-
v-if="jira?.available"
|
|
466
|
-
:model-value="jira?.enabled ?? false"
|
|
467
|
-
:loading="togglingSource === 'jira'"
|
|
468
|
-
@update:model-value="(v: boolean) => toggleSource('jira', v)"
|
|
469
|
-
/>
|
|
470
|
-
<UButton
|
|
471
|
-
v-else
|
|
472
|
-
size="xs"
|
|
473
|
-
color="neutral"
|
|
474
|
-
variant="soft"
|
|
475
|
-
icon="i-lucide-plug"
|
|
476
|
-
@click="ui.openTaskConnect('jira')"
|
|
477
|
-
>
|
|
478
|
-
{{ t('settings.issueTracker.linking.connect') }}
|
|
479
|
-
</UButton>
|
|
480
|
-
</div>
|
|
481
|
-
</div>
|
|
482
|
-
<UAlert
|
|
483
|
-
v-if="tasks.diagnostics.jira"
|
|
484
|
-
class="mt-2.5"
|
|
485
|
-
:color="STATUS_UI[tasks.diagnostics.jira.status].color"
|
|
486
|
-
variant="subtle"
|
|
487
|
-
:icon="STATUS_UI[tasks.diagnostics.jira.status].icon"
|
|
488
|
-
:description="
|
|
489
|
-
tasks.diagnostics.jira.message +
|
|
490
|
-
(tasks.diagnostics.jira.detail ? ` ${tasks.diagnostics.jira.detail}` : '')
|
|
491
|
-
"
|
|
492
|
-
:ui="{ description: 'text-[11px]' }"
|
|
493
|
-
/>
|
|
494
|
-
</div>
|
|
369
|
+
<TaskSourceCard
|
|
370
|
+
v-for="source in tasks.sources"
|
|
371
|
+
:key="source.source"
|
|
372
|
+
:state="source"
|
|
373
|
+
:diagnostic="tasks.diagnostics[source.source] ?? null"
|
|
374
|
+
:checking="tasks.checking === source.source"
|
|
375
|
+
:toggling="togglingSource === source.source"
|
|
376
|
+
@check="checkSetup(source.source)"
|
|
377
|
+
@toggle="(enabled: boolean) => toggleSource(source.source, enabled)"
|
|
378
|
+
@remedy="openRemedy(source)"
|
|
379
|
+
/>
|
|
495
380
|
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
<div class="flex min-w-0 items-center gap-2.5">
|
|
500
|
-
<UIcon name="i-lucide-square-kanban" class="h-5 w-5 shrink-0 text-slate-300" />
|
|
501
|
-
<div class="min-w-0">
|
|
502
|
-
<div class="text-sm font-medium text-slate-200">
|
|
503
|
-
{{ t('settings.issueTracker.vendor.linear') }}
|
|
504
|
-
</div>
|
|
505
|
-
<div class="text-[11px] text-slate-500">
|
|
506
|
-
{{
|
|
507
|
-
linearConnected
|
|
508
|
-
? t('settings.issueTracker.linking.connected')
|
|
509
|
-
: t('settings.issueTracker.linking.linear.connectHint')
|
|
510
|
-
}}
|
|
511
|
-
</div>
|
|
512
|
-
</div>
|
|
513
|
-
</div>
|
|
514
|
-
<div class="flex shrink-0 items-center gap-2">
|
|
515
|
-
<UButton
|
|
516
|
-
v-if="linearConnected"
|
|
517
|
-
size="xs"
|
|
518
|
-
color="neutral"
|
|
519
|
-
variant="ghost"
|
|
520
|
-
icon="i-lucide-stethoscope"
|
|
521
|
-
:loading="tasks.checking === 'linear'"
|
|
522
|
-
@click="checkSetup('linear')"
|
|
523
|
-
>
|
|
524
|
-
{{ t('settings.issueTracker.linking.checkSetup') }}
|
|
525
|
-
</UButton>
|
|
526
|
-
<USwitch
|
|
527
|
-
v-if="linear?.available"
|
|
528
|
-
:model-value="linear?.enabled ?? false"
|
|
529
|
-
:loading="togglingSource === 'linear'"
|
|
530
|
-
@update:model-value="(v: boolean) => toggleSource('linear', v)"
|
|
531
|
-
/>
|
|
532
|
-
<UButton
|
|
533
|
-
v-else
|
|
534
|
-
size="xs"
|
|
535
|
-
color="neutral"
|
|
536
|
-
variant="soft"
|
|
537
|
-
icon="i-lucide-plug"
|
|
538
|
-
@click="ui.openTaskConnect('linear')"
|
|
539
|
-
>
|
|
540
|
-
{{ t('settings.issueTracker.linking.connect') }}
|
|
541
|
-
</UButton>
|
|
542
|
-
</div>
|
|
543
|
-
</div>
|
|
544
|
-
<UAlert
|
|
545
|
-
v-if="tasks.diagnostics.linear"
|
|
546
|
-
class="mt-2.5"
|
|
547
|
-
:color="STATUS_UI[tasks.diagnostics.linear.status].color"
|
|
548
|
-
variant="subtle"
|
|
549
|
-
:icon="STATUS_UI[tasks.diagnostics.linear.status].icon"
|
|
550
|
-
:description="
|
|
551
|
-
tasks.diagnostics.linear.message +
|
|
552
|
-
(tasks.diagnostics.linear.detail ? ` ${tasks.diagnostics.linear.detail}` : '')
|
|
553
|
-
"
|
|
554
|
-
:ui="{ description: 'text-[11px]' }"
|
|
555
|
-
/>
|
|
556
|
-
</div>
|
|
381
|
+
<p v-if="tasks.sources.length === 0" class="text-[11px] text-slate-500">
|
|
382
|
+
{{ t('settings.issueTracker.linking.none') }}
|
|
383
|
+
</p>
|
|
557
384
|
</section>
|
|
558
385
|
|
|
559
386
|
<!-- 3. Writeback ---------------------------------------------------------->
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
// One connected-source row of the issue-tracker settings panel: what the source is, whether the
|
|
3
|
+
// workspace can use it, the live setup check, and the on/off toggle.
|
|
4
|
+
//
|
|
5
|
+
// It renders from the source's own STATE (the descriptor the backend registry serves plus the
|
|
6
|
+
// workspace's live availability), so a source is a row here the moment its provider is
|
|
7
|
+
// registered. That is the whole reason this component exists: the panel used to hold one
|
|
8
|
+
// hard-coded card per built-in, which meant a newly shipped source had no setup check and no
|
|
9
|
+
// toggle until someone remembered to paste a fourth copy, and a deployment-registered source
|
|
10
|
+
// never got one at all.
|
|
11
|
+
//
|
|
12
|
+
// The single thing that still varies per source is the REMEDY for an unavailable one, and it
|
|
13
|
+
// varies along an axis the state names: `ridesVcsProvider` says the source authenticates through
|
|
14
|
+
// the workspace's VCS connection (so the fix lives on the VCS integration surface, and the copy
|
|
15
|
+
// names that provider), while a null one carries its own credentials (so the fix is this
|
|
16
|
+
// source's own connect form). Both are emitted as one `remedy` event; where it navigates is the
|
|
17
|
+
// panel's business.
|
|
18
|
+
import { computed } from 'vue'
|
|
19
|
+
import type { TaskSourceDiagnosticStatus, TaskSourceState } from '~/types/domain'
|
|
20
|
+
import { VCS_PROVIDER_LABELS } from '~/utils/vcs'
|
|
21
|
+
|
|
22
|
+
const props = defineProps<{
|
|
23
|
+
state: TaskSourceState
|
|
24
|
+
/** The last live setup-check verdict for this source, if one has been run. */
|
|
25
|
+
diagnostic?: {
|
|
26
|
+
status: TaskSourceDiagnosticStatus
|
|
27
|
+
message: string
|
|
28
|
+
detail?: string | null
|
|
29
|
+
} | null
|
|
30
|
+
/** A setup check is in flight for this source. */
|
|
31
|
+
checking?: boolean
|
|
32
|
+
/** The enable/disable toggle is in flight for this source. */
|
|
33
|
+
toggling?: boolean
|
|
34
|
+
}>()
|
|
35
|
+
|
|
36
|
+
const emit = defineEmits<{
|
|
37
|
+
check: []
|
|
38
|
+
toggle: [enabled: boolean]
|
|
39
|
+
remedy: []
|
|
40
|
+
}>()
|
|
41
|
+
|
|
42
|
+
const { t } = useI18n()
|
|
43
|
+
|
|
44
|
+
/** The brand name of the VCS connection this source rides, or null when it carries credentials. */
|
|
45
|
+
const vcsLabel = computed(() =>
|
|
46
|
+
props.state.ridesVcsProvider ? VCS_PROVIDER_LABELS[props.state.ridesVcsProvider] : null,
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The one-line explanation under the source name: what makes it usable, or what is missing.
|
|
51
|
+
* Four cases rather than two, because "rides a connection you already have" and "connected with
|
|
52
|
+
* its own credentials" are different facts, and so are the two ways of fixing an unavailable one.
|
|
53
|
+
*/
|
|
54
|
+
const subtitle = computed(() => {
|
|
55
|
+
const provider = vcsLabel.value
|
|
56
|
+
if (provider) {
|
|
57
|
+
return props.state.available
|
|
58
|
+
? t('settings.issueTracker.linking.state.ridesConnected', { provider })
|
|
59
|
+
: t('settings.issueTracker.linking.state.ridesMissing', { provider })
|
|
60
|
+
}
|
|
61
|
+
return props.state.available
|
|
62
|
+
? t('settings.issueTracker.linking.connected')
|
|
63
|
+
: t('settings.issueTracker.linking.state.notConnected')
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
/** The label of the button that leads to whatever is missing. */
|
|
67
|
+
const remedyLabel = computed(() =>
|
|
68
|
+
vcsLabel.value
|
|
69
|
+
? t('settings.issueTracker.linking.connectProvider', { provider: vcsLabel.value })
|
|
70
|
+
: t('settings.issueTracker.linking.connect'),
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
// Status → presentation for a setup-check verdict. Exhaustive over the status vocabulary, so a
|
|
74
|
+
// new verdict fails the typecheck here rather than rendering with no icon.
|
|
75
|
+
const STATUS_UI: Record<
|
|
76
|
+
TaskSourceDiagnosticStatus,
|
|
77
|
+
{ color: 'success' | 'warning' | 'error' | 'neutral'; icon: string }
|
|
78
|
+
> = {
|
|
79
|
+
ready: { color: 'success', icon: 'i-lucide-circle-check' },
|
|
80
|
+
not_installed: { color: 'warning', icon: 'i-lucide-download' },
|
|
81
|
+
not_connected: { color: 'warning', icon: 'i-lucide-plug' },
|
|
82
|
+
auth_failed: { color: 'error', icon: 'i-lucide-key-round' },
|
|
83
|
+
forbidden: { color: 'error', icon: 'i-lucide-shield-x' },
|
|
84
|
+
unreachable: { color: 'error', icon: 'i-lucide-wifi-off' },
|
|
85
|
+
error: { color: 'error', icon: 'i-lucide-triangle-alert' },
|
|
86
|
+
}
|
|
87
|
+
</script>
|
|
88
|
+
|
|
89
|
+
<template>
|
|
90
|
+
<div class="rounded-lg border border-slate-800 bg-slate-800/40 px-3 py-2.5">
|
|
91
|
+
<div class="flex items-center justify-between gap-2">
|
|
92
|
+
<div class="flex min-w-0 items-center gap-2.5">
|
|
93
|
+
<UIcon :name="state.icon" class="h-5 w-5 shrink-0 text-slate-300" />
|
|
94
|
+
<div class="min-w-0">
|
|
95
|
+
<div class="text-sm font-medium text-slate-200">{{ state.label }}</div>
|
|
96
|
+
<div class="text-[11px] text-slate-500">{{ subtitle }}</div>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
<div class="flex shrink-0 items-center gap-2">
|
|
100
|
+
<!-- Offered whatever the state: the check is precisely the "why is this not working"
|
|
101
|
+
affordance, and its verdict distinguishes a missing connection from a broken one. -->
|
|
102
|
+
<UButton
|
|
103
|
+
size="xs"
|
|
104
|
+
color="neutral"
|
|
105
|
+
variant="ghost"
|
|
106
|
+
icon="i-lucide-stethoscope"
|
|
107
|
+
:loading="checking"
|
|
108
|
+
:data-testid="`task-source-check-${state.source}`"
|
|
109
|
+
@click="emit('check')"
|
|
110
|
+
>
|
|
111
|
+
{{ t('settings.issueTracker.linking.checkSetup') }}
|
|
112
|
+
</UButton>
|
|
113
|
+
<USwitch
|
|
114
|
+
v-if="state.available"
|
|
115
|
+
:model-value="state.enabled"
|
|
116
|
+
:loading="toggling"
|
|
117
|
+
:data-testid="`task-source-toggle-${state.source}`"
|
|
118
|
+
@update:model-value="(v: boolean) => emit('toggle', v)"
|
|
119
|
+
/>
|
|
120
|
+
<UButton
|
|
121
|
+
v-else
|
|
122
|
+
size="xs"
|
|
123
|
+
color="neutral"
|
|
124
|
+
variant="soft"
|
|
125
|
+
:icon="state.icon"
|
|
126
|
+
:data-testid="`task-source-remedy-${state.source}`"
|
|
127
|
+
@click="emit('remedy')"
|
|
128
|
+
>
|
|
129
|
+
{{ remedyLabel }}
|
|
130
|
+
</UButton>
|
|
131
|
+
</div>
|
|
132
|
+
</div>
|
|
133
|
+
<UAlert
|
|
134
|
+
v-if="diagnostic"
|
|
135
|
+
class="mt-2.5"
|
|
136
|
+
:color="STATUS_UI[diagnostic.status].color"
|
|
137
|
+
variant="subtle"
|
|
138
|
+
:icon="STATUS_UI[diagnostic.status].icon"
|
|
139
|
+
:description="diagnostic.message + (diagnostic.detail ? ` ${diagnostic.detail}` : '')"
|
|
140
|
+
:ui="{ description: 'text-[11px]' }"
|
|
141
|
+
/>
|
|
142
|
+
</div>
|
|
143
|
+
</template>
|
package/app/stores/tasks.spec.ts
CHANGED
|
@@ -32,6 +32,9 @@ const jiraDescriptor: TaskSourceState = {
|
|
|
32
32
|
refPlaceholder: 'PROJ-123',
|
|
33
33
|
available: true,
|
|
34
34
|
enabled: true,
|
|
35
|
+
supportsIntake: true,
|
|
36
|
+
// Jira carries its own credentials, so it rides no VCS connection.
|
|
37
|
+
ridesVcsProvider: null,
|
|
35
38
|
}
|
|
36
39
|
|
|
37
40
|
const jiraConnection: TaskConnection = { source: 'jira', label: 'acme', connectedAt: 0 }
|
package/i18n/locales/de.json
CHANGED
|
@@ -377,27 +377,21 @@
|
|
|
377
377
|
"linearTeamSearchPlaceholder": "Teams suchen…"
|
|
378
378
|
},
|
|
379
379
|
"vendor": {
|
|
380
|
-
"github": "GitHub Issues"
|
|
381
|
-
"jira": "Jira",
|
|
382
|
-
"linear": "Linear"
|
|
380
|
+
"github": "GitHub Issues"
|
|
383
381
|
},
|
|
384
382
|
"linking": {
|
|
385
383
|
"heading": "Issues als Kontext verknüpfen",
|
|
386
384
|
"description": "Wenn eine Quelle angeboten wird, kannst du ihre Issues importieren und an eine Aufgabe anhängen, sodass Agenten die Issue-Beschreibung und Kommentare während der Umsetzung sehen. Dies ist unabhängig vom Ablage-Tracker oben.",
|
|
387
|
-
"github": {
|
|
388
|
-
"available": "Nutzt deine installierte GitHub-App — keine Zugangsdaten nötig.",
|
|
389
|
-
"unavailable": "Installiere die GitHub-App (Integrationen → GitHub), um diese Quelle anzubieten."
|
|
390
|
-
},
|
|
391
385
|
"checkSetup": "Einrichtung prüfen",
|
|
392
|
-
"install": "Installieren",
|
|
393
386
|
"connected": "Verbunden.",
|
|
394
|
-
"
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
"
|
|
387
|
+
"connect": "Verbinden",
|
|
388
|
+
"state": {
|
|
389
|
+
"ridesConnected": "Nutzt die {provider}-Verbindung dieses Workspace und braucht daher keine eigenen Zugangsdaten.",
|
|
390
|
+
"ridesMissing": "Verbinde {provider} unter Integrationen, um diese Quelle anzubieten.",
|
|
391
|
+
"notConnected": "Noch nicht verbunden."
|
|
399
392
|
},
|
|
400
|
-
"
|
|
393
|
+
"connectProvider": "{provider} verbinden",
|
|
394
|
+
"none": "In diesem Deployment sind keine Aufgabenquellen konfiguriert."
|
|
401
395
|
},
|
|
402
396
|
"writeback": {
|
|
403
397
|
"heading": "Rückschreiben",
|
|
@@ -2914,6 +2908,7 @@
|
|
|
2914
2908
|
"intake": "Issue-Aufnahme",
|
|
2915
2909
|
"intakeHint": "Jeder Lauf wählt ein passendes offenes Issue aus dem Tracker und bearbeitet es von Anfang bis Ende.",
|
|
2916
2910
|
"intakeNoSources": "Verbinden Sie zuerst eine Task-Quelle, um Issues daraus zu ziehen.",
|
|
2911
|
+
"intakeNoIntakeSources": "Eine Task-Quelle ist verbunden, aber keine der verbundenen Quellen kann bereits eine geplante Issue-Suche ausführen.",
|
|
2917
2912
|
"intakeGithubRepo": "Repository",
|
|
2918
2913
|
"intakeBoardId": "Board-ID",
|
|
2919
2914
|
"intakeBoardIdHelp": "Das Board, Projekt oder die Warteschlange, auf die dieser Tracker die Aufnahme eingrenzt. Das Format gibt der Tracker vor.",
|
package/i18n/locales/en.json
CHANGED
|
@@ -384,6 +384,7 @@
|
|
|
384
384
|
"intake": "Issue intake",
|
|
385
385
|
"intakeHint": "Each run picks one matching open issue from the tracker and works it end to end.",
|
|
386
386
|
"intakeNoSources": "Connect a task source first to pull issues from it.",
|
|
387
|
+
"intakeNoIntakeSources": "A task source is connected, but none of the connected sources can run a scheduled issue search yet.",
|
|
387
388
|
"intakeGithubRepo": "Repository",
|
|
388
389
|
"intakeBoardId": "Board id",
|
|
389
390
|
"intakeBoardIdHelp": "The board, project or queue this tracker scopes intake to. Its format is defined by the tracker.",
|
|
@@ -3010,27 +3011,21 @@
|
|
|
3010
3011
|
"linearTeamSearchPlaceholder": "Search teams…"
|
|
3011
3012
|
},
|
|
3012
3013
|
"vendor": {
|
|
3013
|
-
"github": "GitHub Issues"
|
|
3014
|
-
"jira": "Jira",
|
|
3015
|
-
"linear": "Linear"
|
|
3014
|
+
"github": "GitHub Issues"
|
|
3016
3015
|
},
|
|
3017
3016
|
"linking": {
|
|
3018
3017
|
"heading": "Link issues as context",
|
|
3019
3018
|
"description": "When a source is offered you can import its issues and attach them to a task, so agents see the issue description and comments while implementing. This is independent of the filing tracker above.",
|
|
3020
|
-
"github": {
|
|
3021
|
-
"available": "Rides your installed GitHub App — no credentials needed.",
|
|
3022
|
-
"unavailable": "Install the GitHub App (Integrations → GitHub) to offer this source."
|
|
3023
|
-
},
|
|
3024
3019
|
"checkSetup": "Check setup",
|
|
3025
|
-
"install": "Install",
|
|
3026
3020
|
"connected": "Connected.",
|
|
3027
|
-
"
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
|
-
"
|
|
3021
|
+
"connect": "Connect",
|
|
3022
|
+
"state": {
|
|
3023
|
+
"ridesConnected": "Rides this workspace's {provider} connection, so it needs no credentials of its own.",
|
|
3024
|
+
"ridesMissing": "Connect {provider} under Integrations to offer this source.",
|
|
3025
|
+
"notConnected": "Not connected yet."
|
|
3032
3026
|
},
|
|
3033
|
-
"
|
|
3027
|
+
"connectProvider": "Connect {provider}",
|
|
3028
|
+
"none": "This deployment has no task sources configured."
|
|
3034
3029
|
},
|
|
3035
3030
|
"writeback": {
|
|
3036
3031
|
"heading": "Writeback",
|
package/i18n/locales/es.json
CHANGED
|
@@ -345,6 +345,7 @@
|
|
|
345
345
|
"intake": "Admisión de incidencias",
|
|
346
346
|
"intakeHint": "Cada ejecución toma una incidencia abierta que coincide del rastreador y la resuelve de principio a fin.",
|
|
347
347
|
"intakeNoSources": "Primero conecta una fuente de tareas para extraer incidencias de ella.",
|
|
348
|
+
"intakeNoIntakeSources": "Hay una fuente de tareas conectada, pero ninguna de las fuentes conectadas puede ejecutar todavía una búsqueda programada de incidencias.",
|
|
348
349
|
"intakeGithubRepo": "Repositorio",
|
|
349
350
|
"intakeBoardId": "ID del tablero",
|
|
350
351
|
"intakeBoardIdHelp": "El tablero, proyecto o cola al que este rastreador limita la admisión. El formato lo define el rastreador.",
|
|
@@ -2759,27 +2760,21 @@
|
|
|
2759
2760
|
"linearTeamSearchPlaceholder": "Buscar equipos…"
|
|
2760
2761
|
},
|
|
2761
2762
|
"vendor": {
|
|
2762
|
-
"github": "GitHub Issues"
|
|
2763
|
-
"jira": "Jira",
|
|
2764
|
-
"linear": "Linear"
|
|
2763
|
+
"github": "GitHub Issues"
|
|
2765
2764
|
},
|
|
2766
2765
|
"linking": {
|
|
2767
2766
|
"heading": "Vincular incidencias como contexto",
|
|
2768
2767
|
"description": "Cuando se ofrece una fuente, puedes importar sus incidencias y adjuntarlas a una tarea, para que los agentes vean la descripción de la incidencia y los comentarios mientras implementan. Esto es independiente del gestor de registro de arriba.",
|
|
2769
|
-
"github": {
|
|
2770
|
-
"available": "Usa tu GitHub App instalada: no se necesitan credenciales.",
|
|
2771
|
-
"unavailable": "Instala la GitHub App (Integraciones → GitHub) para ofrecer esta fuente."
|
|
2772
|
-
},
|
|
2773
2768
|
"checkSetup": "Comprobar configuración",
|
|
2774
|
-
"install": "Instalar",
|
|
2775
2769
|
"connected": "Conectado.",
|
|
2776
|
-
"
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
|
|
2780
|
-
"
|
|
2770
|
+
"connect": "Conectar",
|
|
2771
|
+
"state": {
|
|
2772
|
+
"ridesConnected": "Usa la conexión de {provider} de este espacio de trabajo, así que no necesita credenciales propias.",
|
|
2773
|
+
"ridesMissing": "Conecta {provider} en Integraciones para ofrecer esta fuente.",
|
|
2774
|
+
"notConnected": "Aún sin conectar."
|
|
2781
2775
|
},
|
|
2782
|
-
"
|
|
2776
|
+
"connectProvider": "Conectar {provider}",
|
|
2777
|
+
"none": "Este despliegue no tiene fuentes de tareas configuradas."
|
|
2783
2778
|
},
|
|
2784
2779
|
"writeback": {
|
|
2785
2780
|
"heading": "Escritura de vuelta",
|
package/i18n/locales/fr.json
CHANGED
|
@@ -345,6 +345,7 @@
|
|
|
345
345
|
"intake": "Prise en charge des tickets",
|
|
346
346
|
"intakeHint": "Chaque exécution sélectionne un ticket ouvert correspondant dans le suivi et le traite de bout en bout.",
|
|
347
347
|
"intakeNoSources": "Connectez d'abord une source de tâches pour en extraire des tickets.",
|
|
348
|
+
"intakeNoIntakeSources": "Une source de tâches est connectée, mais aucune des sources connectées ne peut encore exécuter une recherche de tickets planifiée.",
|
|
348
349
|
"intakeGithubRepo": "Dépôt",
|
|
349
350
|
"intakeBoardId": "ID du tableau",
|
|
350
351
|
"intakeBoardIdHelp": "Le tableau, projet ou file d’attente auquel ce traqueur limite la prise en charge. Son format est défini par le traqueur.",
|
|
@@ -2759,27 +2760,21 @@
|
|
|
2759
2760
|
"linearTeamSearchPlaceholder": "Rechercher des équipes…"
|
|
2760
2761
|
},
|
|
2761
2762
|
"vendor": {
|
|
2762
|
-
"github": "GitHub Issues"
|
|
2763
|
-
"jira": "Jira",
|
|
2764
|
-
"linear": "Linear"
|
|
2763
|
+
"github": "GitHub Issues"
|
|
2765
2764
|
},
|
|
2766
2765
|
"linking": {
|
|
2767
2766
|
"heading": "Lier des tickets comme contexte",
|
|
2768
2767
|
"description": "Lorsqu'une source est proposée, vous pouvez importer ses tickets et les rattacher à une tâche, afin que les agents voient la description du ticket et les commentaires pendant l'implémentation. C'est indépendant du suivi de création ci-dessus.",
|
|
2769
|
-
"github": {
|
|
2770
|
-
"available": "S'appuie sur votre GitHub App installée : aucun identifiant nécessaire.",
|
|
2771
|
-
"unavailable": "Installez la GitHub App (Intégrations → GitHub) pour proposer cette source."
|
|
2772
|
-
},
|
|
2773
2768
|
"checkSetup": "Vérifier la configuration",
|
|
2774
|
-
"install": "Installer",
|
|
2775
2769
|
"connected": "Connecté.",
|
|
2776
|
-
"
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
|
|
2780
|
-
"
|
|
2770
|
+
"connect": "Connecter",
|
|
2771
|
+
"state": {
|
|
2772
|
+
"ridesConnected": "Utilise la connexion {provider} de cet espace de travail, donc aucun identifiant propre n'est nécessaire.",
|
|
2773
|
+
"ridesMissing": "Connectez {provider} dans Intégrations pour proposer cette source.",
|
|
2774
|
+
"notConnected": "Pas encore connecté."
|
|
2781
2775
|
},
|
|
2782
|
-
"
|
|
2776
|
+
"connectProvider": "Connecter {provider}",
|
|
2777
|
+
"none": "Ce déploiement n'a aucune source de tâches configurée."
|
|
2783
2778
|
},
|
|
2784
2779
|
"writeback": {
|
|
2785
2780
|
"heading": "Écriture en retour",
|
package/i18n/locales/he.json
CHANGED
|
@@ -345,6 +345,7 @@
|
|
|
345
345
|
"intake": "קליטת תקלות",
|
|
346
346
|
"intakeHint": "כל הרצה בוחרת תקלה פתוחה תואמת אחת מהמעקב ומטפלת בה מקצה לקצה.",
|
|
347
347
|
"intakeNoSources": "חבר תחילה מקור משימות כדי למשוך ממנו תקלות.",
|
|
348
|
+
"intakeNoIntakeSources": "מקור משימות מחובר, אך אף אחד מהמקורות המחוברים אינו יכול עדיין להריץ חיפוש תקלות מתוזמן.",
|
|
348
349
|
"intakeGithubRepo": "מאגר",
|
|
349
350
|
"intakeBoardId": "מזהה לוח",
|
|
350
351
|
"intakeBoardIdHelp": "הלוח, הפרויקט או התור שאליהם מערכת המעקב מגבילה את הקליטה. התבנית נקבעת על ידי מערכת המעקב.",
|
|
@@ -2900,27 +2901,21 @@
|
|
|
2900
2901
|
"linearTeamSearchPlaceholder": "חיפוש צוותים…"
|
|
2901
2902
|
},
|
|
2902
2903
|
"vendor": {
|
|
2903
|
-
"github": "GitHub Issues"
|
|
2904
|
-
"jira": "Jira",
|
|
2905
|
-
"linear": "Linear"
|
|
2904
|
+
"github": "GitHub Issues"
|
|
2906
2905
|
},
|
|
2907
2906
|
"linking": {
|
|
2908
2907
|
"heading": "קשר כרטיסים כהקשר",
|
|
2909
2908
|
"description": "כשמקור מוצע אתה יכול לייבא את הכרטיסים שלו ולצרף אותם למשימה, כך שסוכנים יראו את תיאור הכרטיס וההערות בזמן המימוש. זה בלתי תלוי במעקב ההגשה למעלה.",
|
|
2910
|
-
"github": {
|
|
2911
|
-
"available": "רוכב על אפליקציית ה-GitHub המותקנת שלך — לא נדרשים אישורים.",
|
|
2912
|
-
"unavailable": "התקן את אפליקציית ה-GitHub (אינטגרציות ← GitHub) כדי להציע מקור זה."
|
|
2913
|
-
},
|
|
2914
2909
|
"checkSetup": "בדוק הגדרה",
|
|
2915
|
-
"install": "התקן",
|
|
2916
2910
|
"connected": "מחובר.",
|
|
2917
|
-
"
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
"
|
|
2911
|
+
"connect": "התחבר",
|
|
2912
|
+
"state": {
|
|
2913
|
+
"ridesConnected": "משתמש בחיבור {provider} של סביבת העבודה, ולכן אינו זקוק לאישורי גישה משלו.",
|
|
2914
|
+
"ridesMissing": "חבר את {provider} תחת אינטגרציות כדי להציע מקור זה.",
|
|
2915
|
+
"notConnected": "עדיין לא מחובר."
|
|
2922
2916
|
},
|
|
2923
|
-
"
|
|
2917
|
+
"connectProvider": "חבר את {provider}",
|
|
2918
|
+
"none": "בפריסה זו לא מוגדרים מקורות משימות."
|
|
2924
2919
|
},
|
|
2925
2920
|
"writeback": {
|
|
2926
2921
|
"heading": "כתיבה חזרה",
|
package/i18n/locales/it.json
CHANGED
|
@@ -377,27 +377,21 @@
|
|
|
377
377
|
"linearTeamSearchPlaceholder": "Cerca team…"
|
|
378
378
|
},
|
|
379
379
|
"vendor": {
|
|
380
|
-
"github": "GitHub Issues"
|
|
381
|
-
"jira": "Jira",
|
|
382
|
-
"linear": "Linear"
|
|
380
|
+
"github": "GitHub Issues"
|
|
383
381
|
},
|
|
384
382
|
"linking": {
|
|
385
383
|
"heading": "Collega gli issue come contesto",
|
|
386
384
|
"description": "Quando una sorgente e disponibile, puoi importare i suoi issue e allegarli a un'attivita, cosicche gli agenti vedano la descrizione e i commenti dell'issue durante l'implementazione. Questo e indipendente dal tracker di registrazione qui sopra.",
|
|
387
|
-
"github": {
|
|
388
|
-
"available": "Si appoggia alla tua GitHub App installata — nessuna credenziale necessaria.",
|
|
389
|
-
"unavailable": "Installa la GitHub App (Integrazioni → GitHub) per offrire questa sorgente."
|
|
390
|
-
},
|
|
391
385
|
"checkSetup": "Verifica la configurazione",
|
|
392
|
-
"install": "Installa",
|
|
393
386
|
"connected": "Connesso.",
|
|
394
|
-
"
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
"
|
|
387
|
+
"connect": "Connetti",
|
|
388
|
+
"state": {
|
|
389
|
+
"ridesConnected": "Usa la connessione {provider} di questo workspace, quindi non richiede credenziali proprie.",
|
|
390
|
+
"ridesMissing": "Collega {provider} in Integrazioni per offrire questa sorgente.",
|
|
391
|
+
"notConnected": "Non ancora collegato."
|
|
399
392
|
},
|
|
400
|
-
"
|
|
393
|
+
"connectProvider": "Collega {provider}",
|
|
394
|
+
"none": "Questo deployment non ha sorgenti di attività configurate."
|
|
401
395
|
},
|
|
402
396
|
"writeback": {
|
|
403
397
|
"heading": "Writeback",
|
|
@@ -2914,6 +2908,7 @@
|
|
|
2914
2908
|
"intake": "Acquisizione issue",
|
|
2915
2909
|
"intakeHint": "Ogni esecuzione seleziona una issue aperta corrispondente dal tracker e la porta a termine dall'inizio alla fine.",
|
|
2916
2910
|
"intakeNoSources": "Connetti prima una sorgente di attività per estrarne le issue.",
|
|
2911
|
+
"intakeNoIntakeSources": "Una sorgente di attività è connessa, ma nessuna delle sorgenti connesse può ancora eseguire una ricerca pianificata delle issue.",
|
|
2917
2912
|
"intakeGithubRepo": "Repository",
|
|
2918
2913
|
"intakeBoardId": "ID della board",
|
|
2919
2914
|
"intakeBoardIdHelp": "La board, il progetto o la coda a cui questo tracker limita l’acquisizione. Il formato è definito dal tracker.",
|
package/i18n/locales/ja.json
CHANGED
|
@@ -345,6 +345,7 @@
|
|
|
345
345
|
"intake": "課題の取り込み",
|
|
346
346
|
"intakeHint": "各実行はトラッカーから条件に一致する未解決の課題を1件選び、最後まで対応します。",
|
|
347
347
|
"intakeNoSources": "課題を取り込むには、まずタスクソースを接続してください。",
|
|
348
|
+
"intakeNoIntakeSources": "タスクソースは接続されていますが、接続済みのソースはいずれもまだ定期的な課題検索を実行できません。",
|
|
348
349
|
"intakeGithubRepo": "リポジトリ",
|
|
349
350
|
"intakeBoardId": "ボード ID",
|
|
350
351
|
"intakeBoardIdHelp": "このトラッカーが取り込み対象とするボード、プロジェクト、またはキュー。形式はトラッカーが定めます。",
|
|
@@ -2900,27 +2901,21 @@
|
|
|
2900
2901
|
"linearTeamSearchPlaceholder": "チームを検索…"
|
|
2901
2902
|
},
|
|
2902
2903
|
"vendor": {
|
|
2903
|
-
"github": "GitHub Issues"
|
|
2904
|
-
"jira": "Jira",
|
|
2905
|
-
"linear": "Linear"
|
|
2904
|
+
"github": "GitHub Issues"
|
|
2906
2905
|
},
|
|
2907
2906
|
"linking": {
|
|
2908
2907
|
"heading": "課題をコンテキストとしてリンク",
|
|
2909
2908
|
"description": "ソースが提供されている場合、その課題をインポートしてタスクに添付できます。これにより、エージェントは実装中に課題の説明とコメントを参照できます。これは上記の起票トラッカーとは独立しています。",
|
|
2910
|
-
"github": {
|
|
2911
|
-
"available": "インストール済みの GitHub App を利用します。認証情報は不要です。",
|
|
2912
|
-
"unavailable": "このソースを提供するには GitHub App (Integrations → GitHub) をインストールしてください。"
|
|
2913
|
-
},
|
|
2914
2909
|
"checkSetup": "セットアップを確認",
|
|
2915
|
-
"install": "インストール",
|
|
2916
2910
|
"connected": "接続済み。",
|
|
2917
|
-
"
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
"
|
|
2911
|
+
"connect": "接続",
|
|
2912
|
+
"state": {
|
|
2913
|
+
"ridesConnected": "このワークスペースの {provider} 接続を利用するため、独自の認証情報は不要です。",
|
|
2914
|
+
"ridesMissing": "このソースを利用するには、連携設定で {provider} を接続してください。",
|
|
2915
|
+
"notConnected": "まだ接続されていません。"
|
|
2922
2916
|
},
|
|
2923
|
-
"
|
|
2917
|
+
"connectProvider": "{provider} を接続",
|
|
2918
|
+
"none": "このデプロイにはタスクソースが設定されていません。"
|
|
2924
2919
|
},
|
|
2925
2920
|
"writeback": {
|
|
2926
2921
|
"heading": "ライトバック",
|
package/i18n/locales/pl.json
CHANGED
|
@@ -345,6 +345,7 @@
|
|
|
345
345
|
"intake": "Pobieranie zgłoszeń",
|
|
346
346
|
"intakeHint": "Każde uruchomienie wybiera jedno pasujące otwarte zgłoszenie z trackera i realizuje je od początku do końca.",
|
|
347
347
|
"intakeNoSources": "Najpierw połącz źródło zadań, aby pobierać z niego zgłoszenia.",
|
|
348
|
+
"intakeNoIntakeSources": "Źródło zadań jest połączone, ale żadne z połączonych źródeł nie może jeszcze uruchomić zaplanowanego wyszukiwania zgłoszeń.",
|
|
348
349
|
"intakeGithubRepo": "Repozytorium",
|
|
349
350
|
"intakeBoardId": "ID tablicy",
|
|
350
351
|
"intakeBoardIdHelp": "Tablica, projekt lub kolejka, do której ten tracker ogranicza pozyskiwanie. Format określa tracker.",
|
|
@@ -2759,27 +2760,21 @@
|
|
|
2759
2760
|
"linearTeamSearchPlaceholder": "Szukaj zespołów…"
|
|
2760
2761
|
},
|
|
2761
2762
|
"vendor": {
|
|
2762
|
-
"github": "GitHub Issues"
|
|
2763
|
-
"jira": "Jira",
|
|
2764
|
-
"linear": "Linear"
|
|
2763
|
+
"github": "GitHub Issues"
|
|
2765
2764
|
},
|
|
2766
2765
|
"linking": {
|
|
2767
2766
|
"heading": "Wiąż zgłoszenia jako kontekst",
|
|
2768
2767
|
"description": "Gdy źródło jest dostępne, możesz zaimportować jego zgłoszenia i dołączyć je do zadania, aby agenci widzieli opis zgłoszenia i komentarze podczas implementacji. Jest to niezależne od systemu rejestrowania powyżej.",
|
|
2769
|
-
"github": {
|
|
2770
|
-
"available": "Korzysta z zainstalowanej aplikacji GitHub App — bez poświadczeń.",
|
|
2771
|
-
"unavailable": "Zainstaluj aplikację GitHub App (Integracje → GitHub), aby udostępnić to źródło."
|
|
2772
|
-
},
|
|
2773
2768
|
"checkSetup": "Sprawdź konfigurację",
|
|
2774
|
-
"install": "Zainstaluj",
|
|
2775
2769
|
"connected": "Połączono.",
|
|
2776
|
-
"
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
|
|
2780
|
-
"
|
|
2770
|
+
"connect": "Połącz",
|
|
2771
|
+
"state": {
|
|
2772
|
+
"ridesConnected": "Korzysta z połączenia {provider} tego obszaru roboczego, więc nie wymaga własnych poświadczeń.",
|
|
2773
|
+
"ridesMissing": "Połącz {provider} w sekcji Integracje, aby udostępnić to źródło.",
|
|
2774
|
+
"notConnected": "Jeszcze nie połączono."
|
|
2781
2775
|
},
|
|
2782
|
-
"
|
|
2776
|
+
"connectProvider": "Połącz {provider}",
|
|
2777
|
+
"none": "To wdrożenie nie ma skonfigurowanych źródeł zadań."
|
|
2783
2778
|
},
|
|
2784
2779
|
"writeback": {
|
|
2785
2780
|
"heading": "Zapis zwrotny",
|
package/i18n/locales/tr.json
CHANGED
|
@@ -345,6 +345,7 @@
|
|
|
345
345
|
"intake": "Sorun alımı",
|
|
346
346
|
"intakeHint": "Her çalıştırma, izleyiciden eşleşen açık bir sorunu seçer ve baştan sona işler.",
|
|
347
347
|
"intakeNoSources": "Sorunları çekmek için önce bir görev kaynağı bağlayın.",
|
|
348
|
+
"intakeNoIntakeSources": "Bir görev kaynağı bağlı, ancak bağlı kaynakların hiçbiri henüz zamanlanmış bir sorun aramasını çalıştıramıyor.",
|
|
348
349
|
"intakeGithubRepo": "Depo",
|
|
349
350
|
"intakeBoardId": "Pano kimliği",
|
|
350
351
|
"intakeBoardIdHelp": "Bu izleyicinin alımı kapsamlandırdığı pano, proje veya kuyruk. Biçimini izleyici belirler.",
|
|
@@ -2900,27 +2901,21 @@
|
|
|
2900
2901
|
"linearTeamSearchPlaceholder": "Ekiplerde ara…"
|
|
2901
2902
|
},
|
|
2902
2903
|
"vendor": {
|
|
2903
|
-
"github": "GitHub Issues"
|
|
2904
|
-
"jira": "Jira",
|
|
2905
|
-
"linear": "Linear"
|
|
2904
|
+
"github": "GitHub Issues"
|
|
2906
2905
|
},
|
|
2907
2906
|
"linking": {
|
|
2908
2907
|
"heading": "Sorunları bağlam olarak bağla",
|
|
2909
2908
|
"description": "Bir kaynak sunulduğunda, sorunlarını içe aktarıp bir göreve ekleyebilirsiniz; böylece ajanlar uygularken sorun açıklamasını ve yorumları görür. Bu, yukarıdaki kayıt izleyicisinden bağımsızdır.",
|
|
2910
|
-
"github": {
|
|
2911
|
-
"available": "Yüklü GitHub App'inizi kullanır — kimlik bilgisi gerekmez.",
|
|
2912
|
-
"unavailable": "Bu kaynağı sunmak için GitHub App'i yükleyin (Entegrasyonlar → GitHub)."
|
|
2913
|
-
},
|
|
2914
2909
|
"checkSetup": "Kurulumu kontrol et",
|
|
2915
|
-
"install": "Yükle",
|
|
2916
2910
|
"connected": "Bağlandı.",
|
|
2917
|
-
"
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
"
|
|
2911
|
+
"connect": "Bağlan",
|
|
2912
|
+
"state": {
|
|
2913
|
+
"ridesConnected": "Bu çalışma alanının {provider} bağlantısını kullanır, bu yüzden kendi kimlik bilgilerine gerek duymaz.",
|
|
2914
|
+
"ridesMissing": "Bu kaynağı sunmak için Entegrasyonlar altında {provider} bağlantısını kurun.",
|
|
2915
|
+
"notConnected": "Henüz bağlanmadı."
|
|
2922
2916
|
},
|
|
2923
|
-
"
|
|
2917
|
+
"connectProvider": "{provider} bağlan",
|
|
2918
|
+
"none": "Bu dağıtımda yapılandırılmış görev kaynağı yok."
|
|
2924
2919
|
},
|
|
2925
2920
|
"writeback": {
|
|
2926
2921
|
"heading": "Geri yazma",
|
package/i18n/locales/uk.json
CHANGED
|
@@ -345,6 +345,7 @@
|
|
|
345
345
|
"intake": "Приймання завдань",
|
|
346
346
|
"intakeHint": "Кожен запуск вибирає одне відкрите завдання з трекера, що відповідає умовам, і опрацьовує його від початку до кінця.",
|
|
347
347
|
"intakeNoSources": "Спочатку підключіть джерело завдань, щоб отримувати з нього завдання.",
|
|
348
|
+
"intakeNoIntakeSources": "Джерело завдань підключено, але жодне з підключених джерел ще не може виконувати заплановий пошук завдань.",
|
|
348
349
|
"intakeGithubRepo": "Репозиторій",
|
|
349
350
|
"intakeBoardId": "ID дошки",
|
|
350
351
|
"intakeBoardIdHelp": "Дошка, проєкт або черга, якими цей трекер обмежує приймання. Формат визначає трекер.",
|
|
@@ -2759,27 +2760,21 @@
|
|
|
2759
2760
|
"linearTeamSearchPlaceholder": "Пошук команд…"
|
|
2760
2761
|
},
|
|
2761
2762
|
"vendor": {
|
|
2762
|
-
"github": "GitHub Issues"
|
|
2763
|
-
"jira": "Jira",
|
|
2764
|
-
"linear": "Linear"
|
|
2763
|
+
"github": "GitHub Issues"
|
|
2765
2764
|
},
|
|
2766
2765
|
"linking": {
|
|
2767
2766
|
"heading": "Пов'язуйте тикети як контекст",
|
|
2768
2767
|
"description": "Коли джерело доступне, ви можете імпортувати його тикети та прикріпити їх до завдання, щоб агенти бачили опис тикета й коментарі під час реалізації. Це незалежно від трекера реєстрації вище.",
|
|
2769
|
-
"github": {
|
|
2770
|
-
"available": "Використовує встановлений GitHub App — облікові дані не потрібні.",
|
|
2771
|
-
"unavailable": "Встановіть GitHub App (Інтеграції → GitHub), щоб запропонувати це джерело."
|
|
2772
|
-
},
|
|
2773
2768
|
"checkSetup": "Перевірити налаштування",
|
|
2774
|
-
"install": "Встановити",
|
|
2775
2769
|
"connected": "Під'єднано.",
|
|
2776
|
-
"
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
|
|
2780
|
-
"
|
|
2770
|
+
"connect": "Під'єднати",
|
|
2771
|
+
"state": {
|
|
2772
|
+
"ridesConnected": "Використовує з'єднання {provider} цього робочого простору, тож власні облікові дані не потрібні.",
|
|
2773
|
+
"ridesMissing": "Підключіть {provider} у розділі Інтеграції, щоб пропонувати це джерело.",
|
|
2774
|
+
"notConnected": "Ще не підключено."
|
|
2781
2775
|
},
|
|
2782
|
-
"
|
|
2776
|
+
"connectProvider": "Підключити {provider}",
|
|
2777
|
+
"none": "У цьому розгортанні не налаштовано джерел завдань."
|
|
2783
2778
|
},
|
|
2784
2779
|
"writeback": {
|
|
2785
2780
|
"heading": "Зворотний запис",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.243.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",
|
|
@@ -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.
|
|
43
|
+
"@cat-factory/contracts": "0.265.0"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@toad-contracts/testing": "0.3.2",
|