@cat-factory/app 0.103.0 → 0.105.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/auth/AuthGate.vue +3 -0
- package/app/components/auth/BackendMisconfiguredScreen.vue +55 -0
- package/app/composables/usePipelineErrorToast.ts +101 -14
- package/app/stores/auth.ts +25 -1
- package/i18n/locales/de.json +23 -2
- package/i18n/locales/en.json +32 -2
- package/i18n/locales/es.json +23 -1
- package/i18n/locales/fr.json +23 -1
- package/i18n/locales/he.json +23 -1
- package/i18n/locales/it.json +23 -2
- package/i18n/locales/ja.json +23 -1
- package/i18n/locales/pl.json +23 -1
- package/i18n/locales/tr.json +23 -1
- package/i18n/locales/uk.json +23 -1
- package/package.json +2 -2
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { computed } from 'vue'
|
|
3
|
+
import BackendMisconfiguredScreen from '~/components/auth/BackendMisconfiguredScreen.vue'
|
|
3
4
|
import LoginScreen from '~/components/auth/LoginScreen.vue'
|
|
4
5
|
|
|
5
6
|
// Resolves auth state once on mount, then either renders the app (auth off, or
|
|
@@ -25,6 +26,8 @@ onMounted(() => auth.bootstrap())
|
|
|
25
26
|
<span class="text-sm">{{ t('auth.gate.loading') }}</span>
|
|
26
27
|
</div>
|
|
27
28
|
|
|
29
|
+
<BackendMisconfiguredScreen v-else-if="auth.isMisconfigured" />
|
|
30
|
+
|
|
28
31
|
<slot v-else-if="isPublicRoute" />
|
|
29
32
|
|
|
30
33
|
<LoginScreen v-else-if="auth.needsLogin" />
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { ConfigProblem } from '@cat-factory/contracts'
|
|
3
|
+
|
|
4
|
+
// Shown when the backend booted into its misconfiguration fallback: it couldn't start normally
|
|
5
|
+
// because one or more mandatory environment variables / bindings are missing or invalid. We list
|
|
6
|
+
// each one with what it is for and how to fill it, so the developer can fix their env and reload
|
|
7
|
+
// rather than staring at a generic "can't reach the backend" panel. The `problems` never carry a
|
|
8
|
+
// secret value — only the variable name, its meaning, and the remedy.
|
|
9
|
+
const auth = useAuthStore()
|
|
10
|
+
const { t } = useI18n()
|
|
11
|
+
|
|
12
|
+
const problems = computed<ConfigProblem[]>(() => auth.misconfigured?.problems ?? [])
|
|
13
|
+
|
|
14
|
+
function reload() {
|
|
15
|
+
window.location.reload()
|
|
16
|
+
}
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<div
|
|
21
|
+
class="flex h-screen w-screen flex-col items-center justify-center bg-slate-950 p-6 text-slate-200"
|
|
22
|
+
>
|
|
23
|
+
<div class="w-full max-w-2xl">
|
|
24
|
+
<div class="mb-6 text-center">
|
|
25
|
+
<UIcon name="i-lucide-server-cog" class="mx-auto mb-3 h-10 w-10 text-amber-400" />
|
|
26
|
+
<h1 class="text-lg font-semibold">{{ t('app.misconfigured.title') }}</h1>
|
|
27
|
+
<p class="mx-auto mt-2 max-w-lg text-sm text-slate-400">
|
|
28
|
+
{{ t('app.misconfigured.intro') }}
|
|
29
|
+
</p>
|
|
30
|
+
</div>
|
|
31
|
+
|
|
32
|
+
<ul class="space-y-3">
|
|
33
|
+
<li
|
|
34
|
+
v-for="problem in problems"
|
|
35
|
+
:key="problem.key"
|
|
36
|
+
class="rounded-lg border border-slate-800 bg-slate-900/60 p-4"
|
|
37
|
+
>
|
|
38
|
+
<code class="text-sm font-semibold text-amber-300">{{ problem.key }}</code>
|
|
39
|
+
<p class="mt-1 text-sm text-slate-300">{{ problem.summary }}</p>
|
|
40
|
+
<p class="mt-2 text-sm text-slate-400">
|
|
41
|
+
<span class="font-medium text-slate-300">{{ t('app.misconfigured.howToFix') }}</span>
|
|
42
|
+
{{ problem.remedy }}
|
|
43
|
+
</p>
|
|
44
|
+
</li>
|
|
45
|
+
</ul>
|
|
46
|
+
|
|
47
|
+
<div class="mt-6 flex items-center justify-center gap-3">
|
|
48
|
+
<UButton color="primary" icon="i-lucide-rotate-ccw" @click="reload">
|
|
49
|
+
{{ t('app.misconfigured.reload') }}
|
|
50
|
+
</UButton>
|
|
51
|
+
</div>
|
|
52
|
+
<p class="mt-4 text-center text-xs text-slate-500">{{ t('app.misconfigured.hint') }}</p>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
</template>
|
|
@@ -28,14 +28,19 @@ interface ConflictDetails {
|
|
|
28
28
|
* fails THIS typecheck until it is mapped here. (The typed-message-keys feature can't see the
|
|
29
29
|
* `t()` lookup because the key is resolved at runtime via this map, not written as a literal —
|
|
30
30
|
* so the exhaustiveness of the map, not `t()`, is what makes a missing reason a build error.)
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
31
|
+
* The reasons with BESPOKE handling below (a "configure X" action + their own key namespace) are
|
|
32
|
+
* excluded, since none reaches this generic lookup: `providers_unconfigured`,
|
|
33
|
+
* `binary_storage_unconfigured`, and the deployment-environment trio `provision_type_unhandled` /
|
|
34
|
+
* `deployer_service_provisioning_incomplete` / `deployer_connection_test_failed`.
|
|
34
35
|
*/
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
type BespokeConflictReason =
|
|
37
|
+
| 'providers_unconfigured'
|
|
38
|
+
| 'binary_storage_unconfigured'
|
|
39
|
+
| 'provision_type_unhandled'
|
|
40
|
+
| 'deployer_service_provisioning_incomplete'
|
|
41
|
+
| 'deployer_connection_test_failed'
|
|
42
|
+
|
|
43
|
+
const CONFLICT_TITLE_KEYS: Record<Exclude<ConflictReason, BespokeConflictReason>, string> = {
|
|
39
44
|
dependencies_unmet: 'errors.conflict.title.dependencies_unmet',
|
|
40
45
|
task_limit_reached: 'errors.conflict.title.task_limit_reached',
|
|
41
46
|
tester_infra_unsupported: 'errors.conflict.title.tester_infra_unsupported',
|
|
@@ -45,7 +50,6 @@ const CONFLICT_TITLE_KEYS: Record<
|
|
|
45
50
|
github_not_connected: 'errors.conflict.title.github_not_connected',
|
|
46
51
|
bootstrap_not_retryable: 'errors.conflict.title.bootstrap_not_retryable',
|
|
47
52
|
bootstrap_reference_missing: 'errors.conflict.title.bootstrap_reference_missing',
|
|
48
|
-
provision_type_unhandled: 'errors.conflict.title.provision_type_unhandled',
|
|
49
53
|
preset_unsatisfiable: 'errors.conflict.title.preset_unsatisfiable',
|
|
50
54
|
visual_pipeline_no_frontend: 'errors.conflict.title.visual_pipeline_no_frontend',
|
|
51
55
|
model_policy_blocked: 'errors.conflict.title.model_policy_blocked',
|
|
@@ -137,17 +141,100 @@ export function usePipelineErrorToast() {
|
|
|
137
141
|
return
|
|
138
142
|
}
|
|
139
143
|
|
|
144
|
+
// A pipeline includes a Deployer, but the SERVICE's ephemeral-environment config (the in-repo
|
|
145
|
+
// "what/where") is incomplete for its declared type. Steer the user straight to THAT service's
|
|
146
|
+
// environment config — the compose wizard for docker-compose, the service inspector otherwise —
|
|
147
|
+
// falling back to the workspace infrastructure window if the frame id wasn't carried.
|
|
148
|
+
if (conflict?.reason === 'deployer_service_provisioning_incomplete') {
|
|
149
|
+
const frameId =
|
|
150
|
+
typeof conflict.details.frameId === 'string' ? conflict.details.frameId : undefined
|
|
151
|
+
const provisionType =
|
|
152
|
+
typeof conflict.details.provisionType === 'string'
|
|
153
|
+
? conflict.details.provisionType
|
|
154
|
+
: undefined
|
|
155
|
+
const missing = Array.isArray(conflict.details.missing)
|
|
156
|
+
? conflict.details.missing.join(', ')
|
|
157
|
+
: ''
|
|
158
|
+
toast.add({
|
|
159
|
+
title: t('errors.conflict.deployerServiceConfig.title'),
|
|
160
|
+
description: missing
|
|
161
|
+
? t('errors.conflict.deployerServiceConfig.body', { missing })
|
|
162
|
+
: (conflict.message ?? t('errors.conflict.fallbackMessage')),
|
|
163
|
+
color: 'error',
|
|
164
|
+
icon: 'i-lucide-server',
|
|
165
|
+
// Sticky, like the other actionable conflicts: keep the "Fix configuration" jump reachable.
|
|
166
|
+
duration: 0,
|
|
167
|
+
actions: [
|
|
168
|
+
{
|
|
169
|
+
label: t('errors.conflict.deployerServiceConfig.action'),
|
|
170
|
+
icon: 'i-lucide-settings',
|
|
171
|
+
onClick: () => {
|
|
172
|
+
if (frameId && provisionType === 'docker-compose') ui.openEnvironmentSetup(frameId)
|
|
173
|
+
else if (frameId) ui.select(frameId)
|
|
174
|
+
else ui.openProviderConnection('environment')
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
],
|
|
178
|
+
})
|
|
179
|
+
return
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// A pipeline includes a Deployer and the service config is sound, but no WORKSPACE handler
|
|
183
|
+
// resolves for the service's provision type (missing or ambiguous). Steer to the Infrastructure
|
|
184
|
+
// window's Test-environments tab. (Also raised by the Tester start gate — same fix applies.)
|
|
185
|
+
if (conflict?.reason === 'provision_type_unhandled') {
|
|
186
|
+
const type =
|
|
187
|
+
typeof conflict.details.provisionType === 'string' ? conflict.details.provisionType : ''
|
|
188
|
+
toast.add({
|
|
189
|
+
title: t('errors.conflict.provisionTypeUnhandled.title'),
|
|
190
|
+
description: type
|
|
191
|
+
? t('errors.conflict.provisionTypeUnhandled.body', { type })
|
|
192
|
+
: (conflict.message ?? t('errors.conflict.fallbackMessage')),
|
|
193
|
+
color: 'error',
|
|
194
|
+
icon: 'i-lucide-server-cog',
|
|
195
|
+
duration: 0,
|
|
196
|
+
actions: [
|
|
197
|
+
{
|
|
198
|
+
label: t('errors.conflict.provisionTypeUnhandled.action'),
|
|
199
|
+
icon: 'i-lucide-settings',
|
|
200
|
+
onClick: () => ui.openProviderConnection('environment'),
|
|
201
|
+
},
|
|
202
|
+
],
|
|
203
|
+
})
|
|
204
|
+
return
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// A pipeline includes a Deployer, the config is structurally complete, but the live connection
|
|
208
|
+
// probe of the resolved deployment integration failed (unreachable endpoint / apiserver, bad
|
|
209
|
+
// token). Surface the provider's failure detail and steer to the handler to fix + re-test it.
|
|
210
|
+
if (conflict?.reason === 'deployer_connection_test_failed') {
|
|
211
|
+
const detail =
|
|
212
|
+
typeof conflict.details.detail === 'string' ? conflict.details.detail : undefined
|
|
213
|
+
toast.add({
|
|
214
|
+
title: t('errors.conflict.deployerConnectionFailed.title'),
|
|
215
|
+
description: detail
|
|
216
|
+
? t('errors.conflict.deployerConnectionFailed.body', { detail })
|
|
217
|
+
: (conflict.message ?? t('errors.conflict.fallbackMessage')),
|
|
218
|
+
color: 'error',
|
|
219
|
+
icon: 'i-lucide-plug',
|
|
220
|
+
duration: 0,
|
|
221
|
+
actions: [
|
|
222
|
+
{
|
|
223
|
+
label: t('errors.conflict.deployerConnectionFailed.action'),
|
|
224
|
+
icon: 'i-lucide-settings',
|
|
225
|
+
onClick: () => ui.openProviderConnection('environment'),
|
|
226
|
+
},
|
|
227
|
+
],
|
|
228
|
+
})
|
|
229
|
+
return
|
|
230
|
+
}
|
|
231
|
+
|
|
140
232
|
if (conflict) {
|
|
141
233
|
// Per-reason title key from the exhaustive map; fall back to the caller's title key when
|
|
142
234
|
// this reason has no mapped/translated copy (`te` = translation-exists, so a key missing
|
|
143
235
|
// in the active locale never leaks as raw text). An unknown reason isn't in the map.
|
|
144
236
|
const reasonKey =
|
|
145
|
-
CONFLICT_TITLE_KEYS[
|
|
146
|
-
conflict.reason as Exclude<
|
|
147
|
-
ConflictReason,
|
|
148
|
-
'providers_unconfigured' | 'binary_storage_unconfigured'
|
|
149
|
-
>
|
|
150
|
-
]
|
|
237
|
+
CONFLICT_TITLE_KEYS[conflict.reason as Exclude<ConflictReason, BespokeConflictReason>]
|
|
151
238
|
toast.add({
|
|
152
239
|
title: reasonKey && te(reasonKey) ? t(reasonKey) : t(fallbackTitleKey),
|
|
153
240
|
description: conflict.message ?? t('errors.conflict.fallbackMessage'),
|
package/app/stores/auth.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
BackendMisconfigured,
|
|
3
|
+
InfrastructureCapabilities,
|
|
4
|
+
LocalModeConfig,
|
|
5
|
+
} from '@cat-factory/contracts'
|
|
2
6
|
import { defineStore } from 'pinia'
|
|
3
7
|
import { computed, ref } from 'vue'
|
|
4
8
|
import type { AuthUser } from '~/types/domain'
|
|
@@ -60,6 +64,14 @@ export const useAuthStore = defineStore(
|
|
|
60
64
|
const autoLoginProvider = ref<'github' | 'gitlab' | null>(null)
|
|
61
65
|
/** True once the initial auth handshake has settled. */
|
|
62
66
|
const ready = ref(false)
|
|
67
|
+
/**
|
|
68
|
+
* Set when the backend answered its boot handshake but reported that it is MISCONFIGURED — it
|
|
69
|
+
* failed to start normally because a mandatory env var / binding is missing, and is serving the
|
|
70
|
+
* fallback backend that lists the problems (each carries only a name + meaning + remedy, never a
|
|
71
|
+
* secret). Present ⇒ the SPA renders the dedicated misconfiguration screen instead of the
|
|
72
|
+
* login/board. Null on a normally-booted backend.
|
|
73
|
+
*/
|
|
74
|
+
const misconfigured = ref<BackendMisconfigured | null>(null)
|
|
63
75
|
/**
|
|
64
76
|
* Mothership mode: the last mothership sign-in failure (node unreachable / rejected session),
|
|
65
77
|
* or null. Set when the post-OAuth connect exchange fails, so the login screen can tell the
|
|
@@ -84,6 +96,9 @@ export const useAuthStore = defineStore(
|
|
|
84
96
|
/** May the app render? True when auth is off, or on with a known user. */
|
|
85
97
|
const isAuthenticated = computed(() => !required.value || user.value !== null)
|
|
86
98
|
|
|
99
|
+
/** Whether the backend reported itself misconfigured (drives the dedicated error screen). */
|
|
100
|
+
const isMisconfigured = computed(() => misconfigured.value !== null)
|
|
101
|
+
|
|
87
102
|
/**
|
|
88
103
|
* Whether the SPA must show the login screen before the board.
|
|
89
104
|
*
|
|
@@ -176,7 +191,14 @@ export const useAuthStore = defineStore(
|
|
|
176
191
|
testingNoAuth.value = config.testingNoAuth ?? false
|
|
177
192
|
localMode.value = config.localMode ?? null
|
|
178
193
|
infrastructure.value = config.infrastructure ?? null
|
|
194
|
+
misconfigured.value = config.misconfigured ?? null
|
|
179
195
|
configLoaded.value = true
|
|
196
|
+
// A misconfigured backend serves only the fallback app; there's no session/board to
|
|
197
|
+
// resolve, so settle here and let the SPA render the misconfiguration screen.
|
|
198
|
+
if (misconfigured.value) {
|
|
199
|
+
ready.value = true
|
|
200
|
+
return
|
|
201
|
+
}
|
|
180
202
|
} catch {
|
|
181
203
|
// Backend unreachable — let the board's own error UI handle it (configLoaded stays
|
|
182
204
|
// false, so we never mistake this for an unauthenticated session and gate it).
|
|
@@ -335,8 +357,10 @@ export const useAuthStore = defineStore(
|
|
|
335
357
|
ready,
|
|
336
358
|
mothershipError,
|
|
337
359
|
configLoaded,
|
|
360
|
+
misconfigured,
|
|
338
361
|
isLocalFacade,
|
|
339
362
|
isAuthenticated,
|
|
363
|
+
isMisconfigured,
|
|
340
364
|
needsLogin,
|
|
341
365
|
bootstrap,
|
|
342
366
|
login,
|
package/i18n/locales/de.json
CHANGED
|
@@ -3552,7 +3552,14 @@
|
|
|
3552
3552
|
"loadingBoard": "Board wird geladen…",
|
|
3553
3553
|
"backendUnreachable": "Backend nicht erreichbar",
|
|
3554
3554
|
"reconnecting": "Verbindung wird wiederhergestellt…",
|
|
3555
|
-
"offline": "Keine Live-Updates"
|
|
3555
|
+
"offline": "Keine Live-Updates",
|
|
3556
|
+
"misconfigured": {
|
|
3557
|
+
"title": "Backend nicht konfiguriert",
|
|
3558
|
+
"intro": "Der Server wurde gestartet, kann aber erst laufen, wenn die folgenden Einstellungen vorhanden sind. Ergänze die fehlenden Werte in deiner Umgebung und lade neu.",
|
|
3559
|
+
"howToFix": "So behebst du es:",
|
|
3560
|
+
"reload": "Neu laden",
|
|
3561
|
+
"hint": "Hier werden nur Variablennamen und deren Einrichtung angezeigt, niemals geheime Werte."
|
|
3562
|
+
}
|
|
3556
3563
|
},
|
|
3557
3564
|
"language": {
|
|
3558
3565
|
"switcher": "Sprache",
|
|
@@ -3647,7 +3654,6 @@
|
|
|
3647
3654
|
"github_not_connected": "GitHub nicht verbunden",
|
|
3648
3655
|
"bootstrap_not_retryable": "Bootstrap kann nicht wiederholt werden",
|
|
3649
3656
|
"bootstrap_reference_missing": "Referenzarchitektur ist nicht mehr vorhanden",
|
|
3650
|
-
"provision_type_unhandled": "Kein Handler für diesen Bereitstellungstyp",
|
|
3651
3657
|
"preset_unsatisfiable": "Modell-Preset kann diese Pipeline nicht ausführen",
|
|
3652
3658
|
"visual_pipeline_no_frontend": "Kein Frontend zum Testen",
|
|
3653
3659
|
"model_policy_blocked": "Modell durch Kontorichtlinie blockiert",
|
|
@@ -3664,6 +3670,21 @@
|
|
|
3664
3670
|
"title": "Kein Speicher für diese Pipeline",
|
|
3665
3671
|
"body": "Diese Pipeline enthält einen Agenten, der Binärspeicher benötigt (der UI-Tester lädt seine Screenshots hoch), aber für dieses Konto ist kein Inhaltsspeicher konfiguriert. Konfiguriere Inhaltsspeicher, um sie auszuführen.",
|
|
3666
3672
|
"action": "Speicher konfigurieren"
|
|
3673
|
+
},
|
|
3674
|
+
"deployerServiceConfig": {
|
|
3675
|
+
"title": "Umgebungskonfiguration des Dienstes unvollständig",
|
|
3676
|
+
"body": "Diese Pipeline enthält einen Deployer, aber die Umgebungskonfiguration dieses Dienstes ist unvollständig (fehlt: {missing}). Vervollständige die Umgebungskonfiguration des Dienstes, um sie auszuführen.",
|
|
3677
|
+
"action": "Dienstkonfiguration korrigieren"
|
|
3678
|
+
},
|
|
3679
|
+
"provisionTypeUnhandled": {
|
|
3680
|
+
"title": "Kein Handler für diesen Bereitstellungstyp",
|
|
3681
|
+
"body": "Für den Bereitstellungstyp {type} dieses Arbeitsbereichs ist kein Infrastruktur-Handler konfiguriert, daher hat der Deployer keine Umgebung zum Bereitstellen. Konfiguriere einen Handler oder setze den Dienst auf infraless, um sie auszuführen.",
|
|
3682
|
+
"action": "Infrastruktur konfigurieren"
|
|
3683
|
+
},
|
|
3684
|
+
"deployerConnectionFailed": {
|
|
3685
|
+
"title": "Bereitstellungsintegration funktioniert nicht",
|
|
3686
|
+
"body": "Die Bereitstellungsintegration dieses Dienstes hat den Verbindungstest nicht bestanden: {detail}. Überprüfe ihren Endpunkt und ihre Anmeldedaten und teste die Verbindung erneut, um sie auszuführen.",
|
|
3687
|
+
"action": "Infrastruktur konfigurieren"
|
|
3667
3688
|
}
|
|
3668
3689
|
}
|
|
3669
3690
|
},
|
package/i18n/locales/en.json
CHANGED
|
@@ -4,7 +4,14 @@
|
|
|
4
4
|
"loadingBoard": "Loading board…",
|
|
5
5
|
"backendUnreachable": "Can't reach the backend",
|
|
6
6
|
"reconnecting": "Reconnecting…",
|
|
7
|
-
"offline": "Not receiving live updates"
|
|
7
|
+
"offline": "Not receiving live updates",
|
|
8
|
+
"misconfigured": {
|
|
9
|
+
"title": "Backend not configured",
|
|
10
|
+
"intro": "The server started but can't run until the settings below are provided. Add the missing values to your environment, then reload.",
|
|
11
|
+
"howToFix": "How to fix:",
|
|
12
|
+
"reload": "Reload",
|
|
13
|
+
"hint": "Only variable names and how to set them are shown here, never any secret values."
|
|
14
|
+
}
|
|
8
15
|
},
|
|
9
16
|
"language": {
|
|
10
17
|
"switcher": "Language",
|
|
@@ -436,7 +443,6 @@
|
|
|
436
443
|
"github_not_connected": "GitHub not connected",
|
|
437
444
|
"bootstrap_not_retryable": "Bootstrap can’t be retried",
|
|
438
445
|
"bootstrap_reference_missing": "Reference architecture is gone",
|
|
439
|
-
"provision_type_unhandled": "No handler for this provision type",
|
|
440
446
|
"preset_unsatisfiable": "Model preset can't run this pipeline",
|
|
441
447
|
"visual_pipeline_no_frontend": "No frontend to test",
|
|
442
448
|
"model_policy_blocked": "Model blocked by account policy",
|
|
@@ -456,6 +462,30 @@
|
|
|
456
462
|
"title": "No storage for this pipeline",
|
|
457
463
|
"body": "This pipeline includes an agent that needs binary storage (the UI Tester uploads its screenshots), but this account has no content storage configured. Configure content storage to run it.",
|
|
458
464
|
"action": "Configure storage"
|
|
465
|
+
},
|
|
466
|
+
"deployerServiceConfig": {
|
|
467
|
+
"title": "Service environment config incomplete",
|
|
468
|
+
"body": "This pipeline includes a Deployer, but this service's environment configuration is incomplete (missing: {missing}). Complete the service's environment configuration to run it.",
|
|
469
|
+
"@body": {
|
|
470
|
+
"description": "Keep the named placeholder for the missing field list intact (a comma-separated list of config field names is injected at runtime)."
|
|
471
|
+
},
|
|
472
|
+
"action": "Fix service config"
|
|
473
|
+
},
|
|
474
|
+
"provisionTypeUnhandled": {
|
|
475
|
+
"title": "No handler for this provision type",
|
|
476
|
+
"body": "No infrastructure handler is configured for this workspace's {type} provision type, so the Deployer has no environment to stand up. Configure a handler, or set the service to infraless, to run it.",
|
|
477
|
+
"@body": {
|
|
478
|
+
"description": "Keep the named placeholder for the provision type intact (e.g. kubernetes / docker-compose / custom, injected at runtime)."
|
|
479
|
+
},
|
|
480
|
+
"action": "Configure infrastructure"
|
|
481
|
+
},
|
|
482
|
+
"deployerConnectionFailed": {
|
|
483
|
+
"title": "Deployment integration not working",
|
|
484
|
+
"body": "The deployment integration for this service failed its connection test: {detail}. Check its endpoint and credentials, then re-test the connection to run it.",
|
|
485
|
+
"@body": {
|
|
486
|
+
"description": "Keep the named placeholder for the failure detail intact (the provider's connection-test error message, injected at runtime)."
|
|
487
|
+
},
|
|
488
|
+
"action": "Configure infrastructure"
|
|
459
489
|
}
|
|
460
490
|
}
|
|
461
491
|
},
|
package/i18n/locales/es.json
CHANGED
|
@@ -4,7 +4,14 @@
|
|
|
4
4
|
"loadingBoard": "Cargando tablero…",
|
|
5
5
|
"backendUnreachable": "No se puede conectar con el backend",
|
|
6
6
|
"reconnecting": "Reconectando…",
|
|
7
|
-
"offline": "No se reciben actualizaciones en vivo"
|
|
7
|
+
"offline": "No se reciben actualizaciones en vivo",
|
|
8
|
+
"misconfigured": {
|
|
9
|
+
"title": "Backend sin configurar",
|
|
10
|
+
"intro": "El servidor se inició pero no puede funcionar hasta que se proporcionen los ajustes siguientes. Añade los valores que faltan a tu entorno y vuelve a cargar.",
|
|
11
|
+
"howToFix": "Cómo solucionarlo:",
|
|
12
|
+
"reload": "Recargar",
|
|
13
|
+
"hint": "Aquí solo se muestran los nombres de las variables y cómo definirlas, nunca valores secretos."
|
|
14
|
+
}
|
|
8
15
|
},
|
|
9
16
|
"language": {
|
|
10
17
|
"switcher": "Idioma",
|
|
@@ -413,6 +420,21 @@
|
|
|
413
420
|
"title": "No hay almacenamiento para esta canalización",
|
|
414
421
|
"body": "Esta canalización incluye un agente que necesita almacenamiento binario (el probador de UI sube sus capturas de pantalla), pero esta cuenta no tiene almacenamiento de contenido configurado. Configura el almacenamiento de contenido para ejecutarla.",
|
|
415
422
|
"action": "Configurar almacenamiento"
|
|
423
|
+
},
|
|
424
|
+
"deployerServiceConfig": {
|
|
425
|
+
"title": "Configuración de entorno del servicio incompleta",
|
|
426
|
+
"body": "Esta canalización incluye un Deployer, pero la configuración de entorno de este servicio está incompleta (falta: {missing}). Completa la configuración de entorno del servicio para ejecutarla.",
|
|
427
|
+
"action": "Corregir configuración del servicio"
|
|
428
|
+
},
|
|
429
|
+
"provisionTypeUnhandled": {
|
|
430
|
+
"title": "No hay gestor para este tipo de aprovisionamiento",
|
|
431
|
+
"body": "No hay ningún gestor de infraestructura configurado para el tipo de aprovisionamiento {type} de este espacio de trabajo, por lo que el Deployer no tiene ningún entorno que levantar. Configura un gestor o marca el servicio como infraless para ejecutarla.",
|
|
432
|
+
"action": "Configurar infraestructura"
|
|
433
|
+
},
|
|
434
|
+
"deployerConnectionFailed": {
|
|
435
|
+
"title": "La integración de despliegue no funciona",
|
|
436
|
+
"body": "La integración de despliegue de este servicio falló la prueba de conexión: {detail}. Revisa su endpoint y credenciales y vuelve a probar la conexión para ejecutarla.",
|
|
437
|
+
"action": "Configurar infraestructura"
|
|
416
438
|
}
|
|
417
439
|
}
|
|
418
440
|
},
|
package/i18n/locales/fr.json
CHANGED
|
@@ -4,7 +4,14 @@
|
|
|
4
4
|
"loadingBoard": "Chargement du tableau…",
|
|
5
5
|
"backendUnreachable": "Impossible de joindre le backend",
|
|
6
6
|
"reconnecting": "Reconnexion…",
|
|
7
|
-
"offline": "Mises à jour en direct non reçues"
|
|
7
|
+
"offline": "Mises à jour en direct non reçues",
|
|
8
|
+
"misconfigured": {
|
|
9
|
+
"title": "Backend non configuré",
|
|
10
|
+
"intro": "Le serveur a démarré mais ne peut pas fonctionner tant que les paramètres ci-dessous ne sont pas fournis. Ajoutez les valeurs manquantes à votre environnement, puis rechargez.",
|
|
11
|
+
"howToFix": "Comment corriger :",
|
|
12
|
+
"reload": "Recharger",
|
|
13
|
+
"hint": "Seuls les noms des variables et la façon de les définir sont affichés ici, jamais de valeurs secrètes."
|
|
14
|
+
}
|
|
8
15
|
},
|
|
9
16
|
"language": {
|
|
10
17
|
"switcher": "Langue",
|
|
@@ -413,6 +420,21 @@
|
|
|
413
420
|
"title": "Aucun stockage pour ce pipeline",
|
|
414
421
|
"body": "Ce pipeline inclut un agent qui a besoin d’un stockage binaire (le testeur d’UI téléverse ses captures d’écran), mais aucun stockage de contenu n’est configuré pour ce compte. Configurez le stockage de contenu pour l’exécuter.",
|
|
415
422
|
"action": "Configurer le stockage"
|
|
423
|
+
},
|
|
424
|
+
"deployerServiceConfig": {
|
|
425
|
+
"title": "Configuration d’environnement du service incomplète",
|
|
426
|
+
"body": "Ce pipeline inclut un Deployer, mais la configuration d’environnement de ce service est incomplète (manquant : {missing}). Complétez la configuration d’environnement du service pour l’exécuter.",
|
|
427
|
+
"action": "Corriger la configuration du service"
|
|
428
|
+
},
|
|
429
|
+
"provisionTypeUnhandled": {
|
|
430
|
+
"title": "Aucun gestionnaire pour ce type d’approvisionnement",
|
|
431
|
+
"body": "Aucun gestionnaire d’infrastructure n’est configuré pour le type d’approvisionnement {type} de cet espace de travail ; le Deployer n’a donc aucun environnement à provisionner. Configurez un gestionnaire ou définissez le service comme infraless pour l’exécuter.",
|
|
432
|
+
"action": "Configurer l’infrastructure"
|
|
433
|
+
},
|
|
434
|
+
"deployerConnectionFailed": {
|
|
435
|
+
"title": "L’intégration de déploiement ne fonctionne pas",
|
|
436
|
+
"body": "L’intégration de déploiement de ce service a échoué au test de connexion : {detail}. Vérifiez son point de terminaison et ses identifiants, puis retestez la connexion pour l’exécuter.",
|
|
437
|
+
"action": "Configurer l’infrastructure"
|
|
416
438
|
}
|
|
417
439
|
}
|
|
418
440
|
},
|
package/i18n/locales/he.json
CHANGED
|
@@ -4,7 +4,14 @@
|
|
|
4
4
|
"loadingBoard": "טוען לוח…",
|
|
5
5
|
"backendUnreachable": "לא ניתן להתחבר לבקאנד",
|
|
6
6
|
"reconnecting": "מתחבר מחדש…",
|
|
7
|
-
"offline": "לא מתקבלים עדכונים חיים"
|
|
7
|
+
"offline": "לא מתקבלים עדכונים חיים",
|
|
8
|
+
"misconfigured": {
|
|
9
|
+
"title": "השרת אינו מוגדר",
|
|
10
|
+
"intro": "השרת עלה אך אינו יכול לפעול עד שהערכים הבאים יסופקו. הוסיפו את הערכים החסרים לסביבה שלכם וטענו מחדש.",
|
|
11
|
+
"howToFix": "איך לתקן:",
|
|
12
|
+
"reload": "טעינה מחדש",
|
|
13
|
+
"hint": "כאן מוצגים רק שמות המשתנים וכיצד להגדיר אותם, לעולם לא ערכים סודיים."
|
|
14
|
+
}
|
|
8
15
|
},
|
|
9
16
|
"language": {
|
|
10
17
|
"switcher": "שפה",
|
|
@@ -413,6 +420,21 @@
|
|
|
413
420
|
"title": "אין אחסון לצינור הזה",
|
|
414
421
|
"body": "צינור זה כולל סוכן שזקוק לאחסון בינארי (בודק ה-UI מעלה את צילומי המסך שלו), אך לחשבון זה לא מוגדר אחסון תוכן. הגדר אחסון תוכן כדי להריץ אותו.",
|
|
415
422
|
"action": "הגדר אחסון"
|
|
423
|
+
},
|
|
424
|
+
"deployerServiceConfig": {
|
|
425
|
+
"title": "תצורת סביבת השירות אינה שלמה",
|
|
426
|
+
"body": "צינור זה כולל Deployer, אך תצורת הסביבה של שירות זה אינה שלמה (חסר: {missing}). השלם את תצורת הסביבה של השירות כדי להריץ אותו.",
|
|
427
|
+
"action": "תקן את תצורת השירות"
|
|
428
|
+
},
|
|
429
|
+
"provisionTypeUnhandled": {
|
|
430
|
+
"title": "אין מטפל לסוג האספקה הזה",
|
|
431
|
+
"body": "לא הוגדר מטפל תשתית עבור סוג האספקה {type} במרחב עבודה זה, ולכן ל-Deployer אין סביבה להקים. הגדר מטפל או הגדר את השירות כ-infraless כדי להריץ אותו.",
|
|
432
|
+
"action": "הגדר תשתית"
|
|
433
|
+
},
|
|
434
|
+
"deployerConnectionFailed": {
|
|
435
|
+
"title": "אינטגרציית הפריסה אינה פועלת",
|
|
436
|
+
"body": "אינטגרציית הפריסה של שירות זה נכשלה בבדיקת החיבור: {detail}. בדוק את נקודת הקצה והאישורים שלה, ואז בדוק שוב את החיבור כדי להריץ אותו.",
|
|
437
|
+
"action": "הגדר תשתית"
|
|
416
438
|
}
|
|
417
439
|
}
|
|
418
440
|
},
|
package/i18n/locales/it.json
CHANGED
|
@@ -3552,7 +3552,14 @@
|
|
|
3552
3552
|
"loadingBoard": "Caricamento della board…",
|
|
3553
3553
|
"backendUnreachable": "Impossibile raggiungere il backend",
|
|
3554
3554
|
"reconnecting": "Riconnessione…",
|
|
3555
|
-
"offline": "Aggiornamenti in tempo reale non ricevuti"
|
|
3555
|
+
"offline": "Aggiornamenti in tempo reale non ricevuti",
|
|
3556
|
+
"misconfigured": {
|
|
3557
|
+
"title": "Backend non configurato",
|
|
3558
|
+
"intro": "Il server è avviato ma non può funzionare finché non vengono forniti i parametri seguenti. Aggiungi i valori mancanti al tuo ambiente e ricarica.",
|
|
3559
|
+
"howToFix": "Come risolvere:",
|
|
3560
|
+
"reload": "Ricarica",
|
|
3561
|
+
"hint": "Qui vengono mostrati solo i nomi delle variabili e come impostarle, mai valori segreti."
|
|
3562
|
+
}
|
|
3556
3563
|
},
|
|
3557
3564
|
"language": {
|
|
3558
3565
|
"switcher": "Lingua",
|
|
@@ -3647,7 +3654,6 @@
|
|
|
3647
3654
|
"github_not_connected": "GitHub non connesso",
|
|
3648
3655
|
"bootstrap_not_retryable": "Impossibile ripetere l'inizializzazione",
|
|
3649
3656
|
"bootstrap_reference_missing": "L'architettura di riferimento non esiste più",
|
|
3650
|
-
"provision_type_unhandled": "Nessun gestore per questo tipo di provisioning",
|
|
3651
3657
|
"preset_unsatisfiable": "Il preset del modello non può eseguire questa pipeline",
|
|
3652
3658
|
"visual_pipeline_no_frontend": "Nessun frontend da testare",
|
|
3653
3659
|
"model_policy_blocked": "Modello bloccato dalla policy dell'account",
|
|
@@ -3664,6 +3670,21 @@
|
|
|
3664
3670
|
"title": "Nessuno storage per questa pipeline",
|
|
3665
3671
|
"body": "Questa pipeline include un agente che richiede storage binario (il Tester dell'interfaccia carica i suoi screenshot), ma questo account non ha alcuno storage di contenuti configurato. Configura lo storage di contenuti per eseguirla.",
|
|
3666
3672
|
"action": "Configura storage"
|
|
3673
|
+
},
|
|
3674
|
+
"deployerServiceConfig": {
|
|
3675
|
+
"title": "Configurazione dell’ambiente del servizio incompleta",
|
|
3676
|
+
"body": "Questa pipeline include un Deployer, ma la configurazione dell’ambiente di questo servizio è incompleta (mancante: {missing}). Completa la configurazione dell’ambiente del servizio per eseguirla.",
|
|
3677
|
+
"action": "Correggi configurazione del servizio"
|
|
3678
|
+
},
|
|
3679
|
+
"provisionTypeUnhandled": {
|
|
3680
|
+
"title": "Nessun gestore per questo tipo di provisioning",
|
|
3681
|
+
"body": "Nessun gestore di infrastruttura è configurato per il tipo di provisioning {type} di questo spazio di lavoro, quindi il Deployer non ha alcun ambiente da avviare. Configura un gestore o imposta il servizio su infraless per eseguirla.",
|
|
3682
|
+
"action": "Configura infrastruttura"
|
|
3683
|
+
},
|
|
3684
|
+
"deployerConnectionFailed": {
|
|
3685
|
+
"title": "Integrazione di deployment non funzionante",
|
|
3686
|
+
"body": "L’integrazione di deployment di questo servizio non ha superato il test di connessione: {detail}. Controlla il suo endpoint e le credenziali, poi riprova la connessione per eseguirla.",
|
|
3687
|
+
"action": "Configura infrastruttura"
|
|
3667
3688
|
}
|
|
3668
3689
|
}
|
|
3669
3690
|
},
|
package/i18n/locales/ja.json
CHANGED
|
@@ -4,7 +4,14 @@
|
|
|
4
4
|
"loadingBoard": "ボードを読み込み中…",
|
|
5
5
|
"backendUnreachable": "バックエンドに接続できません",
|
|
6
6
|
"reconnecting": "再接続中…",
|
|
7
|
-
"offline": "ライブ更新を受信していません"
|
|
7
|
+
"offline": "ライブ更新を受信していません",
|
|
8
|
+
"misconfigured": {
|
|
9
|
+
"title": "バックエンドが設定されていません",
|
|
10
|
+
"intro": "サーバーは起動しましたが、以下の設定が指定されるまで動作できません。不足している値を環境に追加してから再読み込みしてください。",
|
|
11
|
+
"howToFix": "対処方法:",
|
|
12
|
+
"reload": "再読み込み",
|
|
13
|
+
"hint": "ここに表示されるのは変数名と設定方法のみで、秘密の値は表示されません。"
|
|
14
|
+
}
|
|
8
15
|
},
|
|
9
16
|
"language": {
|
|
10
17
|
"switcher": "言語",
|
|
@@ -413,6 +420,21 @@
|
|
|
413
420
|
"title": "このパイプライン用のストレージがありません",
|
|
414
421
|
"body": "このパイプラインには、バイナリストレージを必要とするエージェントが含まれています(UI テスターがスクリーンショットをアップロードします)。ただし、このアカウントにはコンテンツストレージが設定されていません。実行するにはコンテンツストレージを設定してください。",
|
|
415
422
|
"action": "ストレージを設定"
|
|
423
|
+
},
|
|
424
|
+
"deployerServiceConfig": {
|
|
425
|
+
"title": "サービスの環境設定が不完全です",
|
|
426
|
+
"body": "このパイプラインには Deployer が含まれていますが、このサービスの環境設定が不完全です(不足: {missing})。実行するにはサービスの環境設定を完了してください。",
|
|
427
|
+
"action": "サービス設定を修正"
|
|
428
|
+
},
|
|
429
|
+
"provisionTypeUnhandled": {
|
|
430
|
+
"title": "このプロビジョニングタイプのハンドラーがありません",
|
|
431
|
+
"body": "このワークスペースの {type} プロビジョニングタイプに対応するインフラハンドラーが設定されていないため、Deployer が立ち上げる環境がありません。ハンドラーを設定するか、サービスを infraless に設定して実行してください。",
|
|
432
|
+
"action": "インフラを設定"
|
|
433
|
+
},
|
|
434
|
+
"deployerConnectionFailed": {
|
|
435
|
+
"title": "デプロイ連携が機能していません",
|
|
436
|
+
"body": "このサービスのデプロイ連携が接続テストに失敗しました: {detail}。エンドポイントと認証情報を確認し、接続を再テストしてから実行してください。",
|
|
437
|
+
"action": "インフラを設定"
|
|
416
438
|
}
|
|
417
439
|
}
|
|
418
440
|
},
|
package/i18n/locales/pl.json
CHANGED
|
@@ -4,7 +4,14 @@
|
|
|
4
4
|
"loadingBoard": "Ładowanie tablicy…",
|
|
5
5
|
"backendUnreachable": "Nie można połączyć się z backendem",
|
|
6
6
|
"reconnecting": "Ponowne łączenie…",
|
|
7
|
-
"offline": "Brak aktualizacji na żywo"
|
|
7
|
+
"offline": "Brak aktualizacji na żywo",
|
|
8
|
+
"misconfigured": {
|
|
9
|
+
"title": "Backend nie jest skonfigurowany",
|
|
10
|
+
"intro": "Serwer wystartował, ale nie zadziała, dopóki nie uzupełnisz poniższych ustawień. Dodaj brakujące wartości do swojego środowiska i odśwież.",
|
|
11
|
+
"howToFix": "Jak naprawić:",
|
|
12
|
+
"reload": "Odśwież",
|
|
13
|
+
"hint": "Tutaj pokazujemy tylko nazwy zmiennych i sposób ich ustawienia, nigdy wartości sekretnych."
|
|
14
|
+
}
|
|
8
15
|
},
|
|
9
16
|
"language": {
|
|
10
17
|
"switcher": "Język",
|
|
@@ -413,6 +420,21 @@
|
|
|
413
420
|
"title": "Brak magazynu dla tego potoku",
|
|
414
421
|
"body": "Ten potok zawiera agenta, który wymaga magazynu binarnego (tester UI przesyła swoje zrzuty ekranu), ale to konto nie ma skonfigurowanego magazynu treści. Skonfiguruj magazyn treści, aby go uruchomić.",
|
|
415
422
|
"action": "Skonfiguruj magazyn"
|
|
423
|
+
},
|
|
424
|
+
"deployerServiceConfig": {
|
|
425
|
+
"title": "Niekompletna konfiguracja środowiska usługi",
|
|
426
|
+
"body": "Ten potok zawiera Deployer, ale konfiguracja środowiska tej usługi jest niekompletna (brakuje: {missing}). Uzupełnij konfigurację środowiska usługi, aby go uruchomić.",
|
|
427
|
+
"action": "Popraw konfigurację usługi"
|
|
428
|
+
},
|
|
429
|
+
"provisionTypeUnhandled": {
|
|
430
|
+
"title": "Brak obsługi dla tego typu provisioningu",
|
|
431
|
+
"body": "Dla typu provisioningu {type} w tym obszarze roboczym nie skonfigurowano żadnego handlera infrastruktury, więc Deployer nie ma środowiska do postawienia. Skonfiguruj handler lub ustaw usługę jako infraless, aby go uruchomić.",
|
|
432
|
+
"action": "Skonfiguruj infrastrukturę"
|
|
433
|
+
},
|
|
434
|
+
"deployerConnectionFailed": {
|
|
435
|
+
"title": "Integracja wdrożeniowa nie działa",
|
|
436
|
+
"body": "Integracja wdrożeniowa tej usługi nie przeszła testu połączenia: {detail}. Sprawdź jej punkt końcowy i poświadczenia, a następnie ponownie przetestuj połączenie, aby go uruchomić.",
|
|
437
|
+
"action": "Skonfiguruj infrastrukturę"
|
|
416
438
|
}
|
|
417
439
|
}
|
|
418
440
|
},
|
package/i18n/locales/tr.json
CHANGED
|
@@ -4,7 +4,14 @@
|
|
|
4
4
|
"loadingBoard": "Pano yükleniyor…",
|
|
5
5
|
"backendUnreachable": "Arka uca ulaşılamıyor",
|
|
6
6
|
"reconnecting": "Yeniden bağlanılıyor…",
|
|
7
|
-
"offline": "Canlı güncellemeler alınmıyor"
|
|
7
|
+
"offline": "Canlı güncellemeler alınmıyor",
|
|
8
|
+
"misconfigured": {
|
|
9
|
+
"title": "Arka uç yapılandırılmadı",
|
|
10
|
+
"intro": "Sunucu başladı ancak aşağıdaki ayarlar sağlanana kadar çalışamaz. Eksik değerleri ortamınıza ekleyip yeniden yükleyin.",
|
|
11
|
+
"howToFix": "Nasıl düzeltilir:",
|
|
12
|
+
"reload": "Yeniden yükle",
|
|
13
|
+
"hint": "Burada yalnızca değişken adları ve nasıl ayarlanacakları gösterilir, asla gizli değerler değil."
|
|
14
|
+
}
|
|
8
15
|
},
|
|
9
16
|
"language": {
|
|
10
17
|
"switcher": "Dil",
|
|
@@ -413,6 +420,21 @@
|
|
|
413
420
|
"title": "Bu işlem hattı için depolama yok",
|
|
414
421
|
"body": "Bu işlem hattı, ikili depolama gerektiren bir ajan içeriyor (UI test ekran görüntülerini yükler), ancak bu hesapta yapılandırılmış içerik depolaması yok. Çalıştırmak için içerik depolaması yapılandırın.",
|
|
415
422
|
"action": "Depolamayı yapılandır"
|
|
423
|
+
},
|
|
424
|
+
"deployerServiceConfig": {
|
|
425
|
+
"title": "Hizmet ortam yapılandırması eksik",
|
|
426
|
+
"body": "Bu ardışık düzen bir Deployer içeriyor, ancak bu hizmetin ortam yapılandırması eksik (eksik: {missing}). Çalıştırmak için hizmetin ortam yapılandırmasını tamamlayın.",
|
|
427
|
+
"action": "Hizmet yapılandırmasını düzelt"
|
|
428
|
+
},
|
|
429
|
+
"provisionTypeUnhandled": {
|
|
430
|
+
"title": "Bu sağlama türü için işleyici yok",
|
|
431
|
+
"body": "Bu çalışma alanının {type} sağlama türü için yapılandırılmış bir altyapı işleyicisi yok, bu nedenle Deployer'ın ayağa kaldıracağı bir ortam yok. Çalıştırmak için bir işleyici yapılandırın veya hizmeti infraless olarak ayarlayın.",
|
|
432
|
+
"action": "Altyapıyı yapılandır"
|
|
433
|
+
},
|
|
434
|
+
"deployerConnectionFailed": {
|
|
435
|
+
"title": "Dağıtım entegrasyonu çalışmıyor",
|
|
436
|
+
"body": "Bu hizmetin dağıtım entegrasyonu bağlantı testinde başarısız oldu: {detail}. Uç noktasını ve kimlik bilgilerini kontrol edin, ardından çalıştırmak için bağlantıyı yeniden test edin.",
|
|
437
|
+
"action": "Altyapıyı yapılandır"
|
|
416
438
|
}
|
|
417
439
|
}
|
|
418
440
|
},
|
package/i18n/locales/uk.json
CHANGED
|
@@ -4,7 +4,14 @@
|
|
|
4
4
|
"loadingBoard": "Завантаження дошки…",
|
|
5
5
|
"backendUnreachable": "Не вдається зʼєднатися з бекендом",
|
|
6
6
|
"reconnecting": "Повторне зʼєднання…",
|
|
7
|
-
"offline": "Оновлення в реальному часі не надходять"
|
|
7
|
+
"offline": "Оновлення в реальному часі не надходять",
|
|
8
|
+
"misconfigured": {
|
|
9
|
+
"title": "Бекенд не налаштовано",
|
|
10
|
+
"intro": "Сервер запустився, але не працюватиме, доки не буде задано наведені нижче параметри. Додайте відсутні значення до свого середовища та перезавантажте.",
|
|
11
|
+
"howToFix": "Як виправити:",
|
|
12
|
+
"reload": "Перезавантажити",
|
|
13
|
+
"hint": "Тут показано лише назви змінних і як їх задати, ніколи не секретні значення."
|
|
14
|
+
}
|
|
8
15
|
},
|
|
9
16
|
"language": {
|
|
10
17
|
"switcher": "Мова",
|
|
@@ -413,6 +420,21 @@
|
|
|
413
420
|
"title": "Немає сховища для цього конвеєра",
|
|
414
421
|
"body": "Цей конвеєр містить агента, якому потрібне бінарне сховище (тестувальник інтерфейсу завантажує свої знімки екрана), але для цього облікового запису не налаштовано сховище вмісту. Налаштуйте сховище вмісту, щоб запустити його.",
|
|
415
422
|
"action": "Налаштувати сховище"
|
|
423
|
+
},
|
|
424
|
+
"deployerServiceConfig": {
|
|
425
|
+
"title": "Конфігурація середовища сервісу неповна",
|
|
426
|
+
"body": "Цей конвеєр містить Deployer, але конфігурація середовища цього сервісу неповна (відсутнє: {missing}). Завершіть конфігурацію середовища сервісу, щоб запустити його.",
|
|
427
|
+
"action": "Виправити конфігурацію сервісу"
|
|
428
|
+
},
|
|
429
|
+
"provisionTypeUnhandled": {
|
|
430
|
+
"title": "Немає обробника для цього типу провізіювання",
|
|
431
|
+
"body": "Для типу провізіювання {type} у цьому робочому просторі не налаштовано жодного обробника інфраструктури, тому Deployer не має середовища для розгортання. Налаштуйте обробник або встановіть сервіс як infraless, щоб запустити його.",
|
|
432
|
+
"action": "Налаштувати інфраструктуру"
|
|
433
|
+
},
|
|
434
|
+
"deployerConnectionFailed": {
|
|
435
|
+
"title": "Інтеграція розгортання не працює",
|
|
436
|
+
"body": "Інтеграція розгортання цього сервісу не пройшла перевірку з’єднання: {detail}. Перевірте її кінцеву точку та облікові дані, потім повторно перевірте з’єднання, щоб запустити його.",
|
|
437
|
+
"action": "Налаштувати інфраструктуру"
|
|
416
438
|
}
|
|
417
439
|
}
|
|
418
440
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.105.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",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"valibot": "^1.4.2",
|
|
35
35
|
"vue": "3.5.39",
|
|
36
36
|
"wretch": "^3.0.9",
|
|
37
|
-
"@cat-factory/contracts": "0.
|
|
37
|
+
"@cat-factory/contracts": "0.115.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@toad-contracts/testing": "0.3.2",
|