@cat-factory/app 0.104.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.
@@ -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
- * `providers_unconfigured` and `binary_storage_unconfigured` are excluded: each has bespoke
32
- * handling (a "configure X" action) + its own key namespace, so neither reaches the generic
33
- * lookup below.
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
- const CONFLICT_TITLE_KEYS: Record<
36
- Exclude<ConflictReason, 'providers_unconfigured' | 'binary_storage_unconfigured'>,
37
- string
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'),
@@ -3654,7 +3654,6 @@
3654
3654
  "github_not_connected": "GitHub nicht verbunden",
3655
3655
  "bootstrap_not_retryable": "Bootstrap kann nicht wiederholt werden",
3656
3656
  "bootstrap_reference_missing": "Referenzarchitektur ist nicht mehr vorhanden",
3657
- "provision_type_unhandled": "Kein Handler für diesen Bereitstellungstyp",
3658
3657
  "preset_unsatisfiable": "Modell-Preset kann diese Pipeline nicht ausführen",
3659
3658
  "visual_pipeline_no_frontend": "Kein Frontend zum Testen",
3660
3659
  "model_policy_blocked": "Modell durch Kontorichtlinie blockiert",
@@ -3671,6 +3670,21 @@
3671
3670
  "title": "Kein Speicher für diese Pipeline",
3672
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.",
3673
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"
3674
3688
  }
3675
3689
  }
3676
3690
  },
@@ -443,7 +443,6 @@
443
443
  "github_not_connected": "GitHub not connected",
444
444
  "bootstrap_not_retryable": "Bootstrap can’t be retried",
445
445
  "bootstrap_reference_missing": "Reference architecture is gone",
446
- "provision_type_unhandled": "No handler for this provision type",
447
446
  "preset_unsatisfiable": "Model preset can't run this pipeline",
448
447
  "visual_pipeline_no_frontend": "No frontend to test",
449
448
  "model_policy_blocked": "Model blocked by account policy",
@@ -463,6 +462,30 @@
463
462
  "title": "No storage for this pipeline",
464
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.",
465
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"
466
489
  }
467
490
  }
468
491
  },
@@ -420,6 +420,21 @@
420
420
  "title": "No hay almacenamiento para esta canalización",
421
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.",
422
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"
423
438
  }
424
439
  }
425
440
  },
@@ -420,6 +420,21 @@
420
420
  "title": "Aucun stockage pour ce pipeline",
421
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.",
422
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"
423
438
  }
424
439
  }
425
440
  },
@@ -420,6 +420,21 @@
420
420
  "title": "אין אחסון לצינור הזה",
421
421
  "body": "צינור זה כולל סוכן שזקוק לאחסון בינארי (בודק ה-UI מעלה את צילומי המסך שלו), אך לחשבון זה לא מוגדר אחסון תוכן. הגדר אחסון תוכן כדי להריץ אותו.",
422
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": "הגדר תשתית"
423
438
  }
424
439
  }
425
440
  },
@@ -3654,7 +3654,6 @@
3654
3654
  "github_not_connected": "GitHub non connesso",
3655
3655
  "bootstrap_not_retryable": "Impossibile ripetere l'inizializzazione",
3656
3656
  "bootstrap_reference_missing": "L'architettura di riferimento non esiste più",
3657
- "provision_type_unhandled": "Nessun gestore per questo tipo di provisioning",
3658
3657
  "preset_unsatisfiable": "Il preset del modello non può eseguire questa pipeline",
3659
3658
  "visual_pipeline_no_frontend": "Nessun frontend da testare",
3660
3659
  "model_policy_blocked": "Modello bloccato dalla policy dell'account",
@@ -3671,6 +3670,21 @@
3671
3670
  "title": "Nessuno storage per questa pipeline",
3672
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.",
3673
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"
3674
3688
  }
3675
3689
  }
3676
3690
  },
@@ -420,6 +420,21 @@
420
420
  "title": "このパイプライン用のストレージがありません",
421
421
  "body": "このパイプラインには、バイナリストレージを必要とするエージェントが含まれています(UI テスターがスクリーンショットをアップロードします)。ただし、このアカウントにはコンテンツストレージが設定されていません。実行するにはコンテンツストレージを設定してください。",
422
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": "インフラを設定"
423
438
  }
424
439
  }
425
440
  },
@@ -420,6 +420,21 @@
420
420
  "title": "Brak magazynu dla tego potoku",
421
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ć.",
422
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ę"
423
438
  }
424
439
  }
425
440
  },
@@ -420,6 +420,21 @@
420
420
  "title": "Bu işlem hattı için depolama yok",
421
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.",
422
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"
423
438
  }
424
439
  }
425
440
  },
@@ -420,6 +420,21 @@
420
420
  "title": "Немає сховища для цього конвеєра",
421
421
  "body": "Цей конвеєр містить агента, якому потрібне бінарне сховище (тестувальник інтерфейсу завантажує свої знімки екрана), але для цього облікового запису не налаштовано сховище вмісту. Налаштуйте сховище вмісту, щоб запустити його.",
422
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": "Налаштувати інфраструктуру"
423
438
  }
424
439
  }
425
440
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/app",
3
- "version": "0.104.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.114.0"
37
+ "@cat-factory/contracts": "0.115.0"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@toad-contracts/testing": "0.3.2",