@cat-factory/app 0.100.0 → 0.100.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/components/board/AgentFailureCard.vue +100 -14
- package/app/components/panels/inspector/ServiceTestConfig.vue +6 -45
- package/i18n/locales/en.json +7 -6
- package/i18n/locales/es.json +4 -6
- package/i18n/locales/fr.json +4 -6
- package/i18n/locales/he.json +4 -6
- package/i18n/locales/ja.json +4 -6
- package/i18n/locales/pl.json +4 -6
- package/i18n/locales/tr.json +4 -6
- package/i18n/locales/uk.json +4 -6
- package/package.json +2 -2
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
// the unified retry through the agentRuns store, so every surface (board card,
|
|
5
5
|
// inspector, task panel) gets identical behaviour from one place. Replaces the
|
|
6
6
|
// three hand-rolled bootstrap banners that used to duplicate this logic.
|
|
7
|
+
import type { EnvironmentFailureReason } from '@cat-factory/contracts'
|
|
7
8
|
import type { AgentRunSummary } from '~/stores/agentRuns'
|
|
8
9
|
import FailureDetail from '~/components/board/FailureDetail.vue'
|
|
9
10
|
|
|
@@ -14,9 +15,59 @@ const props = withDefaults(
|
|
|
14
15
|
|
|
15
16
|
const { t } = useI18n()
|
|
16
17
|
const agentRuns = useAgentRunsStore()
|
|
18
|
+
const ui = useUiStore()
|
|
19
|
+
const auth = useAuthStore()
|
|
20
|
+
const board = useBoardStore()
|
|
17
21
|
|
|
18
22
|
const compact = computed(() => props.variant === 'compact')
|
|
19
23
|
const failure = computed(() => props.run.failure)
|
|
24
|
+
// An `environment` failure is a provisioning/config problem, so offer a one-click jump to the
|
|
25
|
+
// place it's configured alongside the retry — the same "Configure…" deep-link pattern the
|
|
26
|
+
// infra-setup banners use.
|
|
27
|
+
const isEnvironmentFailure = computed(() => failure.value?.kind === 'environment')
|
|
28
|
+
const DEPLOY_RUNNER_UNWIRED: EnvironmentFailureReason = 'deploy_runner_unwired'
|
|
29
|
+
|
|
30
|
+
// The provision type of the failed run's SERVICE frame (walk up to the frame, mirroring the
|
|
31
|
+
// backend's `resolveServiceProvisioning`). Drives the K8s-specific gate below.
|
|
32
|
+
const provisionType = computed(() => {
|
|
33
|
+
const block = board.getBlock(props.run.blockId)
|
|
34
|
+
return block ? board.serviceOf(block)?.provisioning?.type : undefined
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
// Where the deep-link should land. A `deploy_runner_unwired` cause is fixed by wiring the DEPLOY
|
|
38
|
+
// RUNNER, which is the same self-hosted runner pool that runs agent containers (Infrastructure →
|
|
39
|
+
// "Agent containers" / `runner-pool`) — NOT the environment-provider connection (Infrastructure →
|
|
40
|
+
// "Test environments" / `environment`), where the generic banner would otherwise dead-end. So route
|
|
41
|
+
// that cause to the runner-pool tab on a non-local deployment; local mode's fix is an env var (the
|
|
42
|
+
// hint below, not a UI tab), and every OTHER environment failure is a provider-config problem that
|
|
43
|
+
// belongs on the environment tab.
|
|
44
|
+
const routesToRunnerPool = computed(
|
|
45
|
+
() =>
|
|
46
|
+
isEnvironmentFailure.value &&
|
|
47
|
+
failure.value?.reason === DEPLOY_RUNNER_UNWIRED &&
|
|
48
|
+
auth.localMode?.enabled !== true,
|
|
49
|
+
)
|
|
50
|
+
function openFailureSetup() {
|
|
51
|
+
ui.openProviderConnection(routesToRunnerPool.value ? 'runner-pool' : 'environment')
|
|
52
|
+
}
|
|
53
|
+
const failureSetupLabel = computed(() =>
|
|
54
|
+
routesToRunnerPool.value
|
|
55
|
+
? t('board.failure.deployRunnerSetup')
|
|
56
|
+
: t('board.failure.environmentSetup'),
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
// The env-var hint is Kubernetes+local specific, so gate it precisely rather than showing it for
|
|
60
|
+
// every environment failure: only for the machine-readable `deploy_runner_unwired` cause (NOT a
|
|
61
|
+
// helm/apply error or a transient blip), only in local mode (where the deploy runtime is an env
|
|
62
|
+
// var, not a UI connection the tab could fix), and only for a `kubernetes` provision (so a future
|
|
63
|
+
// Nomad/custom provider triggering the same cause never shows kubectl/kustomize/helm guidance).
|
|
64
|
+
const showEnvironmentLocalHint = computed(
|
|
65
|
+
() =>
|
|
66
|
+
isEnvironmentFailure.value &&
|
|
67
|
+
auth.localMode?.enabled === true &&
|
|
68
|
+
failure.value?.reason === DEPLOY_RUNNER_UNWIRED &&
|
|
69
|
+
provisionType.value === 'kubernetes',
|
|
70
|
+
)
|
|
20
71
|
const title = computed(() => {
|
|
21
72
|
// A `dispatch` failure means the container/runner never accepted the job — say so
|
|
22
73
|
// explicitly rather than the generic "Run failed", and show the verbatim provider
|
|
@@ -83,6 +134,22 @@ async function retry() {
|
|
|
83
134
|
{{ failure.hint }}
|
|
84
135
|
</p>
|
|
85
136
|
|
|
137
|
+
<!-- Local mode only: the deploy runtime is configured via env vars, not a UI connection, so
|
|
138
|
+
name the concrete .env fix rather than only pointing at the (unhelpful-here) tab. -->
|
|
139
|
+
<p
|
|
140
|
+
v-if="showEnvironmentLocalHint && !compact"
|
|
141
|
+
class="mt-1 text-[11px] leading-snug text-rose-400/70"
|
|
142
|
+
data-testid="agent-failure-environment-local-hint"
|
|
143
|
+
>
|
|
144
|
+
{{
|
|
145
|
+
t('board.failure.environmentLocalHint', {
|
|
146
|
+
runtime: 'LOCAL_DEPLOY_RUNTIME',
|
|
147
|
+
native: 'LOCAL_DEPLOY_HARNESS_ENTRY',
|
|
148
|
+
container: 'LOCAL_DEPLOY_IMAGE',
|
|
149
|
+
})
|
|
150
|
+
}}
|
|
151
|
+
</p>
|
|
152
|
+
|
|
86
153
|
<FailureDetail
|
|
87
154
|
v-if="!compact && failure"
|
|
88
155
|
:detail="failure.detail"
|
|
@@ -91,19 +158,38 @@ async function retry() {
|
|
|
91
158
|
pre-class="bg-rose-950/60 text-[10px] text-rose-200/80"
|
|
92
159
|
/>
|
|
93
160
|
|
|
94
|
-
<
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
161
|
+
<div class="mt-2 flex flex-wrap items-center gap-2">
|
|
162
|
+
<button
|
|
163
|
+
type="button"
|
|
164
|
+
class="nodrag flex items-center gap-1 rounded-md bg-rose-900/40 text-rose-200 hover:bg-rose-900/70 disabled:opacity-60"
|
|
165
|
+
:class="compact ? 'px-2 py-0.5 text-[10px]' : 'px-2 py-1 text-[11px]'"
|
|
166
|
+
:disabled="retrying"
|
|
167
|
+
data-testid="agent-failure-retry"
|
|
168
|
+
@click.stop="retry"
|
|
169
|
+
>
|
|
170
|
+
<UIcon
|
|
171
|
+
:name="retrying ? 'i-lucide-loader-circle' : 'i-lucide-rotate-ccw'"
|
|
172
|
+
:class="[compact ? 'h-3 w-3' : 'h-3.5 w-3.5', { 'animate-spin': retrying }]"
|
|
173
|
+
/>
|
|
174
|
+
{{ retrying ? t('board.failure.retrying') : compact ? t('common.retry') : retryLabel }}
|
|
175
|
+
</button>
|
|
176
|
+
|
|
177
|
+
<!-- Environment provisioning failures are almost always a deploy-backend / provider-config
|
|
178
|
+
issue, so link straight to where it's set up rather than leaving the user to hunt. The
|
|
179
|
+
destination + label follow the cause: a `deploy_runner_unwired` failure needs the runner
|
|
180
|
+
pool (Agent containers tab), every other cause needs the environment provider (Test
|
|
181
|
+
environments tab) — see `routesToRunnerPool`. -->
|
|
182
|
+
<button
|
|
183
|
+
v-if="isEnvironmentFailure"
|
|
184
|
+
type="button"
|
|
185
|
+
class="nodrag flex items-center gap-1 rounded-md bg-rose-900/20 text-rose-300 hover:bg-rose-900/50"
|
|
186
|
+
:class="compact ? 'px-2 py-0.5 text-[10px]' : 'px-2 py-1 text-[11px]'"
|
|
187
|
+
data-testid="agent-failure-configure-environment"
|
|
188
|
+
@click.stop="openFailureSetup"
|
|
189
|
+
>
|
|
190
|
+
<UIcon name="i-lucide-settings" :class="compact ? 'h-3 w-3' : 'h-3.5 w-3.5'" />
|
|
191
|
+
{{ failureSetupLabel }}
|
|
192
|
+
</button>
|
|
193
|
+
</div>
|
|
108
194
|
</div>
|
|
109
195
|
</template>
|
|
@@ -290,16 +290,7 @@ const detecting = ref(false)
|
|
|
290
290
|
// message (the backend now raises an actionable one for an unreadable repo) so the user sees why
|
|
291
291
|
// detection failed instead of a fixed, vague line.
|
|
292
292
|
const detectError = ref<string | null>(null)
|
|
293
|
-
// Set instead of `detectError` when detection fails because the ephemeral-environment
|
|
294
|
-
// integration is turned off for this deployment (the backend 503s with code `unavailable`).
|
|
295
|
-
// That's a deployment-level toggle, NOT a repo/GitHub problem, so it gets its own actionable
|
|
296
|
-
// panel (what's off + how to enable it + a docs link) rather than the generic red line.
|
|
297
|
-
const detectUnavailable = ref(false)
|
|
298
293
|
const detectResult = ref<ProvisioningRecommendation | null>(null)
|
|
299
|
-
// Where enabling the ephemeral-environment integration is documented (a deployment-level
|
|
300
|
-
// toggle set by whoever runs the server, so there is no in-app config page to link to).
|
|
301
|
-
const ENVIRONMENTS_DOCS_URL =
|
|
302
|
-
'https://github.com/kibertoad/cat-factory/blob/main/backend/docs/environments-integration.md'
|
|
303
294
|
// Advisory, LOCAL-ONLY selection: which compose `services:` key the user picked. It is NOT persisted
|
|
304
295
|
// (the compose backend targets the file, not a single service), so it lives only in component state
|
|
305
296
|
// and merely drives the chip highlight. Without it the highlight would compare `composePath` — which
|
|
@@ -313,7 +304,6 @@ watch(
|
|
|
313
304
|
() => {
|
|
314
305
|
detectResult.value = null
|
|
315
306
|
detectError.value = null
|
|
316
|
-
detectUnavailable.value = false
|
|
317
307
|
pickedComposeService.value = null
|
|
318
308
|
},
|
|
319
309
|
)
|
|
@@ -331,7 +321,6 @@ async function detectFromRepo() {
|
|
|
331
321
|
}
|
|
332
322
|
detecting.value = true
|
|
333
323
|
detectError.value = null
|
|
334
|
-
detectUnavailable.value = false
|
|
335
324
|
try {
|
|
336
325
|
const rec = await infra.detectProvisioning({
|
|
337
326
|
owner: repo.owner,
|
|
@@ -362,18 +351,12 @@ async function detectFromRepo() {
|
|
|
362
351
|
if (rec.provisioning.type === 'kubernetes') seedKubeSource(rec.provisioning.manifestSource)
|
|
363
352
|
}
|
|
364
353
|
} catch (e) {
|
|
365
|
-
//
|
|
366
|
-
//
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
// for a read fault), falling back to the generic line only when none is available.
|
|
372
|
-
detectError.value =
|
|
373
|
-
apiErrorEnvelope(e)?.message ??
|
|
374
|
-
(e instanceof Error ? e.message : null) ??
|
|
375
|
-
t('inspector.testConfig.detect.error')
|
|
376
|
-
}
|
|
354
|
+
// Surface the server's real message (an actionable "couldn't read the repo — check App access"
|
|
355
|
+
// for a read fault), falling back to the generic line only when none is available.
|
|
356
|
+
detectError.value =
|
|
357
|
+
apiErrorEnvelope(e)?.message ??
|
|
358
|
+
(e instanceof Error ? e.message : null) ??
|
|
359
|
+
t('inspector.testConfig.detect.error')
|
|
377
360
|
} finally {
|
|
378
361
|
detecting.value = false
|
|
379
362
|
}
|
|
@@ -513,28 +496,6 @@ function setSize(value: InstanceSize) {
|
|
|
513
496
|
{{ detectError }}
|
|
514
497
|
</p>
|
|
515
498
|
|
|
516
|
-
<!-- The ephemeral-environment integration is off for this deployment. Say exactly what's
|
|
517
|
-
missing (it's separate from the GitHub connection), what enables it, and link the docs. -->
|
|
518
|
-
<div
|
|
519
|
-
v-if="detectUnavailable"
|
|
520
|
-
class="space-y-1 rounded border border-amber-500/30 bg-amber-500/5 p-2"
|
|
521
|
-
>
|
|
522
|
-
<p class="text-[11px] font-medium text-amber-300/90">
|
|
523
|
-
{{ t('inspector.testConfig.detect.unavailable.title') }}
|
|
524
|
-
</p>
|
|
525
|
-
<p class="text-[11px] leading-snug text-slate-400">
|
|
526
|
-
{{ t('inspector.testConfig.detect.unavailable.body') }}
|
|
527
|
-
</p>
|
|
528
|
-
<a
|
|
529
|
-
:href="ENVIRONMENTS_DOCS_URL"
|
|
530
|
-
target="_blank"
|
|
531
|
-
rel="noopener noreferrer"
|
|
532
|
-
class="inline-block text-[11px] text-primary-400 underline hover:text-primary-300"
|
|
533
|
-
>
|
|
534
|
-
{{ t('inspector.testConfig.detect.unavailable.docs') }}
|
|
535
|
-
</a>
|
|
536
|
-
</div>
|
|
537
|
-
|
|
538
499
|
<template v-if="detectResult && !detecting">
|
|
539
500
|
<p
|
|
540
501
|
v-if="!detectResult.detected && detectResult.provisioning.type !== 'custom'"
|
package/i18n/locales/en.json
CHANGED
|
@@ -297,6 +297,12 @@
|
|
|
297
297
|
"stalled": "Run stalled",
|
|
298
298
|
"retryBootstrap": "Retry bootstrap",
|
|
299
299
|
"retryRun": "Retry run",
|
|
300
|
+
"environmentSetup": "Set up environments",
|
|
301
|
+
"deployRunnerSetup": "Set up runner pool",
|
|
302
|
+
"environmentLocalHint": "Local ephemeral environments need a deploy runtime to run kubectl/kustomize/helm. Set {runtime} in your .env: native mode runs those tools on your host ({native}), container mode runs them in the deploy image ({container}).",
|
|
303
|
+
"@environmentLocalHint": {
|
|
304
|
+
"description": "Shown only in local mode. The {runtime}/{native}/{container} placeholders are injected literal environment-variable names (LOCAL_DEPLOY_RUNTIME etc.) — keep them as placeholders, do not translate. '.env' is a filename, keep it verbatim."
|
|
305
|
+
},
|
|
300
306
|
"showDetail": "Show detail",
|
|
301
307
|
"retrying": "Retrying…",
|
|
302
308
|
"history": {
|
|
@@ -744,12 +750,7 @@
|
|
|
744
750
|
"urlSource": "Suggested environment URL source: {source}. The workspace handler owns this; set it there.",
|
|
745
751
|
"namespace": "Manifests pin namespace \"{namespace}\"; recommend honoring it on the workspace handler.",
|
|
746
752
|
"confidenceHigh": "Detected",
|
|
747
|
-
"confidenceLow": "Suggestion"
|
|
748
|
-
"unavailable": {
|
|
749
|
-
"title": "Ephemeral environments aren't enabled",
|
|
750
|
-
"body": "Autodetect reads this repo to suggest a test-environment (Kubernetes or Docker Compose) config, but the ephemeral-environment integration is turned off for this deployment. This is separate from your GitHub connection. Whoever runs the server enables it (set ENVIRONMENTS_ENABLED and an encryption key); then autodetect and provisioning become available.",
|
|
751
|
-
"docs": "How to enable ephemeral environments"
|
|
752
|
-
}
|
|
753
|
+
"confidenceLow": "Suggestion"
|
|
753
754
|
},
|
|
754
755
|
"envWizard": {
|
|
755
756
|
"title": "Compose environment setup",
|
package/i18n/locales/es.json
CHANGED
|
@@ -276,6 +276,9 @@
|
|
|
276
276
|
"stalled": "La ejecución se estancó",
|
|
277
277
|
"retryBootstrap": "Reintentar arranque",
|
|
278
278
|
"retryRun": "Reintentar ejecución",
|
|
279
|
+
"environmentSetup": "Configurar entornos",
|
|
280
|
+
"deployRunnerSetup": "Configurar pool de runners",
|
|
281
|
+
"environmentLocalHint": "Los entornos efímeros locales necesitan un runtime de despliegue para ejecutar kubectl/kustomize/helm. Define {runtime} en tu .env: el modo nativo ejecuta esas herramientas en tu host ({native}), el modo contenedor las ejecuta en la imagen de despliegue ({container}).",
|
|
279
282
|
"showDetail": "Mostrar detalle",
|
|
280
283
|
"retrying": "Reintentando…",
|
|
281
284
|
"history": {
|
|
@@ -688,12 +691,7 @@
|
|
|
688
691
|
"urlSource": "Fuente de URL del entorno sugerida: {source}. El gestor del espacio de trabajo la controla; configúrala allí.",
|
|
689
692
|
"namespace": "Los manifiestos fijan el espacio de nombres \"{namespace}\"; se recomienda respetarlo en el gestor del espacio de trabajo.",
|
|
690
693
|
"confidenceHigh": "Detectado",
|
|
691
|
-
"confidenceLow": "Sugerencia"
|
|
692
|
-
"unavailable": {
|
|
693
|
-
"title": "Los entornos efímeros no están habilitados",
|
|
694
|
-
"body": "La detección automática lee este repositorio para sugerir una configuración de entorno de prueba (Kubernetes o Docker Compose), pero la integración de entornos efímeros está desactivada en este despliegue. Esto es independiente de tu conexión con GitHub. Quien administre el servidor debe habilitarla (definir ENVIRONMENTS_ENABLED y una clave de cifrado); después, la detección automática y el aprovisionamiento estarán disponibles.",
|
|
695
|
-
"docs": "Cómo habilitar los entornos efímeros"
|
|
696
|
-
}
|
|
694
|
+
"confidenceLow": "Sugerencia"
|
|
697
695
|
},
|
|
698
696
|
"customManifestPathHint": "Se rellena con el valor predeterminado del tipo al seleccionarlo. Usa Detectar para localizar un manifiesto existente en el repositorio.",
|
|
699
697
|
"generateManifest": {
|
package/i18n/locales/fr.json
CHANGED
|
@@ -276,6 +276,9 @@
|
|
|
276
276
|
"stalled": "L’exécution est bloquée",
|
|
277
277
|
"retryBootstrap": "Relancer l’initialisation",
|
|
278
278
|
"retryRun": "Relancer l’exécution",
|
|
279
|
+
"environmentSetup": "Configurer les environnements",
|
|
280
|
+
"deployRunnerSetup": "Configurer le pool de runners",
|
|
281
|
+
"environmentLocalHint": "Les environnements éphémères locaux nécessitent un runtime de déploiement pour exécuter kubectl/kustomize/helm. Définissez {runtime} dans votre .env : le mode natif exécute ces outils sur votre hôte ({native}), le mode conteneur les exécute dans l'image de déploiement ({container}).",
|
|
279
282
|
"showDetail": "Afficher le détail",
|
|
280
283
|
"retrying": "Nouvelle tentative…",
|
|
281
284
|
"history": {
|
|
@@ -688,12 +691,7 @@
|
|
|
688
691
|
"urlSource": "Source d'URL d'environnement suggérée : {source}. Le gestionnaire de l'espace de travail la contrôle ; définissez-la là.",
|
|
689
692
|
"namespace": "Les manifestes fixent l'espace de noms « {namespace} » ; il est recommandé de le respecter sur le gestionnaire de l'espace de travail.",
|
|
690
693
|
"confidenceHigh": "Détecté",
|
|
691
|
-
"confidenceLow": "Suggestion"
|
|
692
|
-
"unavailable": {
|
|
693
|
-
"title": "Les environnements éphémères ne sont pas activés",
|
|
694
|
-
"body": "La détection automatique lit ce dépôt pour proposer une configuration d'environnement de test (Kubernetes ou Docker Compose), mais l'intégration des environnements éphémères est désactivée pour ce déploiement. C'est distinct de votre connexion GitHub. La personne qui gère le serveur doit l'activer (définir ENVIRONMENTS_ENABLED et une clé de chiffrement) ; la détection automatique et le provisionnement deviennent alors disponibles.",
|
|
695
|
-
"docs": "Comment activer les environnements éphémères"
|
|
696
|
-
}
|
|
694
|
+
"confidenceLow": "Suggestion"
|
|
697
695
|
},
|
|
698
696
|
"customManifestPathHint": "Prérempli avec la valeur par défaut du type lors de sa sélection. Utilisez Détecter pour localiser un manifeste existant dans le dépôt.",
|
|
699
697
|
"generateManifest": {
|
package/i18n/locales/he.json
CHANGED
|
@@ -276,6 +276,9 @@
|
|
|
276
276
|
"stalled": "הריצה נתקעה",
|
|
277
277
|
"retryBootstrap": "נסה שוב לאתחל",
|
|
278
278
|
"retryRun": "נסה שוב להריץ",
|
|
279
|
+
"environmentSetup": "הגדרת סביבות",
|
|
280
|
+
"deployRunnerSetup": "הגדרת מאגר ראנרים",
|
|
281
|
+
"environmentLocalHint": "סביבות זמניות מקומיות זקוקות לזמן ריצה לפריסה כדי להריץ את kubectl/kustomize/helm. הגדירו את {runtime} בקובץ ה-.env שלכם: מצב מקורי מריץ את הכלים האלה על המארח שלכם ({native}), מצב מכולה מריץ אותם בתוך תמונת הפריסה ({container}).",
|
|
279
282
|
"showDetail": "הצג פרטים",
|
|
280
283
|
"retrying": "מנסה שוב…",
|
|
281
284
|
"history": {
|
|
@@ -688,12 +691,7 @@
|
|
|
688
691
|
"urlSource": "מקור כתובת הסביבה המוצע: {source}. המטפל של המרחב שולט בכך; הגדר זאת שם.",
|
|
689
692
|
"namespace": "המניפסטים מקבעים את מרחב השמות \"{namespace}\"; מומלץ לכבד אותו במטפל של המרחב.",
|
|
690
693
|
"confidenceHigh": "זוהה",
|
|
691
|
-
"confidenceLow": "הצעה"
|
|
692
|
-
"unavailable": {
|
|
693
|
-
"title": "סביבות זמניות אינן מופעלות",
|
|
694
|
-
"body": "הזיהוי האוטומטי קורא מאגר זה כדי להציע תצורת סביבת בדיקה (Kubernetes או Docker Compose), אך שילוב הסביבות הזמניות מכובה בפריסה זו. זה נפרד מחיבור ה-GitHub שלך. מי שמפעיל את השרת צריך להפעיל אותו (להגדיר את ENVIRONMENTS_ENABLED ומפתח הצפנה); לאחר מכן הזיהוי האוטומטי וההקצאה יהיו זמינים.",
|
|
695
|
-
"docs": "כיצד להפעיל סביבות זמניות"
|
|
696
|
-
}
|
|
694
|
+
"confidenceLow": "הצעה"
|
|
697
695
|
},
|
|
698
696
|
"customManifestPathHint": "מתמלא מברירת המחדל של הסוג בעת הבחירה. השתמש ב'זיהוי' כדי לאתר מניפסט קיים במאגר.",
|
|
699
697
|
"generateManifest": {
|
package/i18n/locales/ja.json
CHANGED
|
@@ -276,6 +276,9 @@
|
|
|
276
276
|
"stalled": "実行が停止しました",
|
|
277
277
|
"retryBootstrap": "ブートストラップを再試行",
|
|
278
278
|
"retryRun": "実行を再試行",
|
|
279
|
+
"environmentSetup": "環境をセットアップ",
|
|
280
|
+
"deployRunnerSetup": "ランナープールをセットアップ",
|
|
281
|
+
"environmentLocalHint": "ローカルの一時環境では、kubectl/kustomize/helm を実行するためにデプロイランタイムが必要です。.env に {runtime} を設定してください。ネイティブモードはこれらのツールをホスト上で実行し({native})、コンテナモードはデプロイイメージ内で実行します({container})。",
|
|
279
282
|
"showDetail": "詳細を表示",
|
|
280
283
|
"retrying": "再試行中…",
|
|
281
284
|
"history": {
|
|
@@ -688,12 +691,7 @@
|
|
|
688
691
|
"urlSource": "推奨される環境 URL ソース: {source}。これはワークスペースのハンドラーが管理します。そちらで設定してください。",
|
|
689
692
|
"namespace": "マニフェストは名前空間「{namespace}」を固定しています。ワークスペースのハンドラーでそれを尊重することを推奨します。",
|
|
690
693
|
"confidenceHigh": "検出",
|
|
691
|
-
"confidenceLow": "提案"
|
|
692
|
-
"unavailable": {
|
|
693
|
-
"title": "エフェメラル環境が有効になっていません",
|
|
694
|
-
"body": "自動検出はこのリポジトリを読み取ってテスト環境(Kubernetes または Docker Compose)の設定を提案しますが、このデプロイではエフェメラル環境統合が無効になっています。これは GitHub 接続とは別のものです。サーバーを運用している担当者が有効化(ENVIRONMENTS_ENABLED と暗号化キーを設定)すると、自動検出とプロビジョニングが利用できるようになります。",
|
|
695
|
-
"docs": "エフェメラル環境を有効にする方法"
|
|
696
|
-
}
|
|
694
|
+
"confidenceLow": "提案"
|
|
697
695
|
},
|
|
698
696
|
"customManifestPathHint": "タイプを選択すると既定値が自動入力されます。リポジトリ内の既存のマニフェストを探すには「検出」を使用してください。",
|
|
699
697
|
"generateManifest": {
|
package/i18n/locales/pl.json
CHANGED
|
@@ -276,6 +276,9 @@
|
|
|
276
276
|
"stalled": "Uruchomienie utknęło",
|
|
277
277
|
"retryBootstrap": "Ponów inicjalizację",
|
|
278
278
|
"retryRun": "Ponów uruchomienie",
|
|
279
|
+
"environmentSetup": "Skonfiguruj środowiska",
|
|
280
|
+
"deployRunnerSetup": "Skonfiguruj pulę runnerów",
|
|
281
|
+
"environmentLocalHint": "Lokalne środowiska tymczasowe wymagają środowiska uruchomieniowego wdrożenia do uruchomienia kubectl/kustomize/helm. Ustaw {runtime} w pliku .env: tryb natywny uruchamia te narzędzia na twoim hoście ({native}), tryb kontenerowy uruchamia je w obrazie wdrożeniowym ({container}).",
|
|
279
282
|
"showDetail": "Pokaż szczegóły",
|
|
280
283
|
"retrying": "Ponawianie…",
|
|
281
284
|
"history": {
|
|
@@ -688,12 +691,7 @@
|
|
|
688
691
|
"urlSource": "Sugerowane źródło adresu URL środowiska: {source}. Zarządza tym handler przestrzeni roboczej; ustaw to tam.",
|
|
689
692
|
"namespace": "Manifesty ustalają przestrzeń nazw \"{namespace}\"; zaleca się jej przestrzeganie w handlerze przestrzeni roboczej.",
|
|
690
693
|
"confidenceHigh": "Wykryto",
|
|
691
|
-
"confidenceLow": "Sugestia"
|
|
692
|
-
"unavailable": {
|
|
693
|
-
"title": "Środowiska efemeryczne nie są włączone",
|
|
694
|
-
"body": "Automatyczne wykrywanie odczytuje to repozytorium, aby zaproponować konfigurację środowiska testowego (Kubernetes lub Docker Compose), ale integracja środowisk efemerycznych jest wyłączona dla tego wdrożenia. Jest to niezależne od połączenia z GitHub. Osoba zarządzająca serwerem musi ją włączyć (ustawić ENVIRONMENTS_ENABLED oraz klucz szyfrowania); wtedy automatyczne wykrywanie i udostępnianie staną się dostępne.",
|
|
695
|
-
"docs": "Jak włączyć środowiska efemeryczne"
|
|
696
|
-
}
|
|
694
|
+
"confidenceLow": "Sugestia"
|
|
697
695
|
},
|
|
698
696
|
"customManifestPathHint": "Wypełniane wartością domyślną typu po jego wybraniu. Użyj Wykryj, aby znaleźć istniejący manifest w repozytorium.",
|
|
699
697
|
"generateManifest": {
|
package/i18n/locales/tr.json
CHANGED
|
@@ -276,6 +276,9 @@
|
|
|
276
276
|
"stalled": "Çalıştırma askıda kaldı",
|
|
277
277
|
"retryBootstrap": "Bootstrap'ı yeniden dene",
|
|
278
278
|
"retryRun": "Çalıştırmayı yeniden dene",
|
|
279
|
+
"environmentSetup": "Ortamları yapılandır",
|
|
280
|
+
"deployRunnerSetup": "Runner havuzunu yapılandır",
|
|
281
|
+
"environmentLocalHint": "Yerel geçici ortamlar, kubectl/kustomize/helm çalıştırmak için bir dağıtım çalışma zamanı gerektirir. .env dosyanızda {runtime} değerini ayarlayın: yerel mod bu araçları ana makinenizde çalıştırır ({native}), konteyner modu bunları dağıtım imajında çalıştırır ({container}).",
|
|
279
282
|
"showDetail": "Ayrıntıyı göster",
|
|
280
283
|
"retrying": "Yeniden deneniyor…",
|
|
281
284
|
"history": {
|
|
@@ -688,12 +691,7 @@
|
|
|
688
691
|
"urlSource": "Önerilen ortam URL kaynağı: {source}. Bunu çalışma alanı işleyicisi yönetir; oradan ayarlayın.",
|
|
689
692
|
"namespace": "Manifestler \"{namespace}\" ad alanını sabitliyor; çalışma alanı işleyicisinde buna uymanız önerilir.",
|
|
690
693
|
"confidenceHigh": "Algılandı",
|
|
691
|
-
"confidenceLow": "Öneri"
|
|
692
|
-
"unavailable": {
|
|
693
|
-
"title": "Geçici ortamlar etkin değil",
|
|
694
|
-
"body": "Otomatik algılama, bir test ortamı (Kubernetes veya Docker Compose) yapılandırması önermek için bu depoyu okur, ancak geçici ortam entegrasyonu bu dağıtımda kapalıdır. Bu, GitHub bağlantınızdan ayrıdır. Sunucuyu çalıştıran kişi bunu etkinleştirmelidir (ENVIRONMENTS_ENABLED ve bir şifreleme anahtarı ayarlayın); ardından otomatik algılama ve sağlama kullanılabilir hale gelir.",
|
|
695
|
-
"docs": "Geçici ortamlar nasıl etkinleştirilir"
|
|
696
|
-
}
|
|
694
|
+
"confidenceLow": "Öneri"
|
|
697
695
|
},
|
|
698
696
|
"customManifestPathHint": "Türü seçtiğinizde varsayılan değeriyle doldurulur. Depodaki mevcut bir manifesti bulmak için Algıla'yı kullanın.",
|
|
699
697
|
"generateManifest": {
|
package/i18n/locales/uk.json
CHANGED
|
@@ -276,6 +276,9 @@
|
|
|
276
276
|
"stalled": "Запуск завис",
|
|
277
277
|
"retryBootstrap": "Повторити ініціалізацію",
|
|
278
278
|
"retryRun": "Повторити запуск",
|
|
279
|
+
"environmentSetup": "Налаштувати середовища",
|
|
280
|
+
"deployRunnerSetup": "Налаштувати пул раннерів",
|
|
281
|
+
"environmentLocalHint": "Локальні тимчасові середовища потребують середовища виконання розгортання для запуску kubectl/kustomize/helm. Встановіть {runtime} у вашому .env: нативний режим запускає ці інструменти на вашому хості ({native}), режим контейнера запускає їх в образі розгортання ({container}).",
|
|
279
282
|
"showDetail": "Показати деталі",
|
|
280
283
|
"retrying": "Повторення…",
|
|
281
284
|
"history": {
|
|
@@ -688,12 +691,7 @@
|
|
|
688
691
|
"urlSource": "Запропоноване джерело URL середовища: {source}. Цим керує обробник робочого простору; налаштуйте його там.",
|
|
689
692
|
"namespace": "Маніфести фіксують простір імен \"{namespace}\"; рекомендуємо дотримуватися його в обробнику робочого простору.",
|
|
690
693
|
"confidenceHigh": "Виявлено",
|
|
691
|
-
"confidenceLow": "Пропозиція"
|
|
692
|
-
"unavailable": {
|
|
693
|
-
"title": "Ефемерні середовища не ввімкнено",
|
|
694
|
-
"body": "Автоматичне визначення читає цей репозиторій, щоб запропонувати конфігурацію тестового середовища (Kubernetes або Docker Compose), але інтеграцію ефемерних середовищ вимкнено для цього розгортання. Це окремо від вашого підключення до GitHub. Той, хто керує сервером, має ввімкнути її (задати ENVIRONMENTS_ENABLED і ключ шифрування); після цього автоматичне визначення та провізіонування стануть доступними.",
|
|
695
|
-
"docs": "Як увімкнути ефемерні середовища"
|
|
696
|
-
}
|
|
694
|
+
"confidenceLow": "Пропозиція"
|
|
697
695
|
},
|
|
698
696
|
"customManifestPathHint": "Заповнюється значенням типу за замовчуванням під час вибору. Скористайтеся «Виявити», щоб знайти наявний маніфест у репозиторії.",
|
|
699
697
|
"generateManifest": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/app",
|
|
3
|
-
"version": "0.100.
|
|
3
|
+
"version": "0.100.2",
|
|
4
4
|
"description": "Reusable Nuxt layer for the Agent Architecture Board SPA (components, stores, composables, pages). Consume it from a thin deployment app via `extends: ['@cat-factory/app']` and point it at your backend with NUXT_PUBLIC_API_BASE. See deploy/frontend for an example.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -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.110.
|
|
37
|
+
"@cat-factory/contracts": "0.110.1"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@toad-contracts/testing": "0.3.2",
|