@cat-factory/app 0.70.0 → 0.71.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.
Files changed (69) hide show
  1. package/app/components/auth/LoginScreen.vue +3 -2
  2. package/app/components/board/AddTaskModal.vue +7 -1
  3. package/app/components/board/AgentFailureCard.vue +3 -0
  4. package/app/components/board/RecurringPipelineModal.vue +6 -1
  5. package/app/components/board/nodes/BlockNode.vue +10 -2
  6. package/app/components/board/nodes/TaskCard.vue +12 -1
  7. package/app/components/bootstrap/BootstrapModal.vue +3 -0
  8. package/app/components/common/ConfirmDialog.vue +59 -0
  9. package/app/components/common/EmptyState.vue +35 -0
  10. package/app/components/common/KeyboardShortcutsHelp.vue +48 -0
  11. package/app/components/documents/ContextDocumentPicker.vue +8 -4
  12. package/app/components/documents/DocumentSourceConnectModal.vue +4 -3
  13. package/app/components/focus/BlockFocusView.vue +12 -7
  14. package/app/components/fragments/FragmentLibraryManager.vue +10 -0
  15. package/app/components/github/GitHubPanel.vue +9 -0
  16. package/app/components/humanTest/HumanTestWindow.vue +15 -1
  17. package/app/components/layout/AccountDeploymentSettings.vue +4 -0
  18. package/app/components/layout/AccountTeamSettings.vue +8 -2
  19. package/app/components/layout/AiProvidersBanner.vue +3 -1
  20. package/app/components/layout/BoardSwitcher.vue +11 -0
  21. package/app/components/layout/CommandBar.vue +8 -0
  22. package/app/components/layout/InfraSetupBanner.vue +192 -0
  23. package/app/components/layout/NotificationsInbox.vue +11 -0
  24. package/app/components/layout/ProviderConfigBanner.vue +3 -1
  25. package/app/components/panels/InspectorPanel.vue +18 -20
  26. package/app/components/panels/StepContainerStatus.vue +37 -0
  27. package/app/components/panels/inspector/FrontendConfig.vue +19 -4
  28. package/app/components/panels/inspector/ServiceReleaseHealthConfig.vue +4 -0
  29. package/app/components/panels/inspector/TaskDependencies.vue +18 -4
  30. package/app/components/panels/inspector/TaskExecution.vue +24 -0
  31. package/app/components/panels/inspector/TaskRunSettings.vue +8 -1
  32. package/app/components/pipeline/PipelineBuilder.vue +13 -1
  33. package/app/components/providers/ApiKeysSection.vue +4 -0
  34. package/app/components/providers/PersonalSubscriptionSection.vue +9 -0
  35. package/app/components/providers/VendorCredentialsModal.vue +12 -3
  36. package/app/components/settings/CustomManifestTypeEditor.vue +3 -0
  37. package/app/components/settings/InfraHandlersConfigurator.vue +72 -12
  38. package/app/components/settings/KubernetesEngineForm.vue +41 -5
  39. package/app/components/settings/LocalModelEndpointsPanel.vue +11 -0
  40. package/app/components/settings/MergeThresholdsPanel.vue +9 -0
  41. package/app/components/settings/ModelConfigurationPanel.vue +9 -0
  42. package/app/components/settings/ObservabilityConnectionPanel.vue +7 -0
  43. package/app/components/settings/ProviderConnectionTab.vue +2 -0
  44. package/app/components/settings/UserSecretsSection.vue +11 -0
  45. package/app/components/slack/SlackPanel.vue +9 -0
  46. package/app/components/tasks/ContextIssuePicker.vue +8 -4
  47. package/app/components/tasks/TaskSourceConnectModal.vue +4 -3
  48. package/app/composables/useBlockDeletion.ts +63 -0
  49. package/app/composables/useConfirm.ts +63 -0
  50. package/app/composables/useConfirmAction.ts +96 -0
  51. package/app/composables/useKeyboardShortcuts.ts +76 -0
  52. package/app/composables/usePipelineErrorToast.ts +2 -0
  53. package/app/composables/useWorkspaceStream.ts +26 -6
  54. package/app/pages/index.vue +28 -4
  55. package/app/stores/agentRuns.spec.ts +74 -0
  56. package/app/stores/agentRuns.ts +33 -5
  57. package/app/stores/ui.ts +33 -1
  58. package/app/stores/workspace.ts +10 -2
  59. package/app/types/domain.ts +3 -0
  60. package/app/utils/pipeline.ts +22 -0
  61. package/i18n/locales/en.json +174 -12
  62. package/i18n/locales/es.json +176 -17
  63. package/i18n/locales/fr.json +176 -17
  64. package/i18n/locales/he.json +176 -17
  65. package/i18n/locales/ja.json +176 -17
  66. package/i18n/locales/pl.json +176 -17
  67. package/i18n/locales/tr.json +176 -17
  68. package/i18n/locales/uk.json +176 -17
  69. package/package.json +3 -2
@@ -15,7 +15,36 @@
15
15
  "copy": "Copier",
16
16
  "actionFailed": "Échec de l’action",
17
17
  "close": "Fermer",
18
- "block": "Bloc"
18
+ "block": "Bloc",
19
+ "delete": "Supprimer",
20
+ "remove": "Retirer",
21
+ "confirm": {
22
+ "defaultTitle": "Êtes-vous sûr ?",
23
+ "confirm": "Confirmer",
24
+ "irreversible": "Cette action est irréversible.",
25
+ "reconnectHint": "Vous devrez le reconnecter avant de pouvoir l’utiliser à nouveau.",
26
+ "titles": {
27
+ "disconnect": "Déconnecter {name} ?",
28
+ "remove": "Supprimer {name} ?",
29
+ "revoke": "Révoquer {name} ?",
30
+ "clear": "Effacer {name} ?",
31
+ "destroy": "Détruire {name} ?"
32
+ },
33
+ "reconfigureHint": "Vous pourrez le reconfigurer plus tard."
34
+ },
35
+ "copied": "Copié dans le presse-papiers",
36
+ "disconnect": "Déconnecter",
37
+ "copyFailed": "Échec de la copie dans le presse-papiers",
38
+ "revoke": "Révoquer",
39
+ "clear": "Effacer",
40
+ "destroy": "Détruire",
41
+ "toast": {
42
+ "disconnected": "{name} déconnecté",
43
+ "removed": "{name} supprimé",
44
+ "revoked": "{name} révoqué",
45
+ "cleared": "{name} effacé",
46
+ "destroyed": "{name} détruit"
47
+ }
19
48
  },
20
49
  "nav": {
21
50
  "menu": "Menu de navigation",
@@ -235,7 +264,11 @@
235
264
  "module": "Module : {name}",
236
265
  "buildSteps": "Étapes de build",
237
266
  "reviewAndApprove": "Revoir et approuver",
238
- "clickToViewStep": "Cliquez pour voir les détails et la sortie de l’étape"
267
+ "clickToViewStep": "Cliquez pour voir les détails et la sortie de l’étape",
268
+ "startedToast": {
269
+ "title": "Exécution démarrée",
270
+ "body": "Exécution de \"{name}\"."
271
+ }
239
272
  },
240
273
  "epic": {
241
274
  "label": "Épopée",
@@ -260,7 +293,9 @@
260
293
  "no_pr_to_merge": "Aucune PR à fusionner",
261
294
  "github_not_connected": "GitHub non connecté",
262
295
  "bootstrap_not_retryable": "L’initialisation ne peut pas être relancée",
263
- "bootstrap_reference_missing": "L’architecture de référence a disparu"
296
+ "bootstrap_reference_missing": "L’architecture de référence a disparu",
297
+ "preset_unsatisfiable": "Le préréglage de modèle ne peut pas exécuter ce pipeline",
298
+ "visual_pipeline_no_frontend": "Aucun frontend à tester"
264
299
  },
265
300
  "fallbackMessage": "Cette action est en conflit avec l’état actuel.",
266
301
  "providersUnconfigured": {
@@ -322,6 +357,10 @@
322
357
  "step2": "Ouvrez le fichier d'identifiants que Codex a écrit dans ~/.codex/auth.json (sous Windows %USERPROFILE%\\.codex\\auth.json).",
323
358
  "step3": "Copiez tout le contenu de auth.json, collez-le ci-dessous et choisissez un mot de passe personnel pour le protéger."
324
359
  }
360
+ },
361
+ "confirmDisconnect": {
362
+ "title": "Déconnecter cet abonnement ?",
363
+ "body": "Votre abonnement \"{vendor}\" sera déconnecté. Cette action est irréversible."
325
364
  }
326
365
  },
327
366
  "inspector": {
@@ -392,12 +431,14 @@
392
431
  "serveScript": "Script de service",
393
432
  "servePort": "Port de service",
394
433
  "mockMappingsPath": "Chemin des mappages de simulation",
434
+ "mockMappingsHint": "Répertoire racine de WireMock. Placez les JSON de stub dans un sous-dossier mappings/ à l'intérieur (et les corps de réponse dans __files/), p. ex. mocks/mappings/. Un dossier sans mappings/ à l'intérieur lance un mock vide.",
395
435
  "envInjection": "Injection de variables d'environnement",
396
436
  "envBuild": "À la compilation",
397
437
  "envRuntime": "À l'exécution",
398
- "envInjectionHint": "À la compilation, injecte les URL du backend comme variables d'environnement de compilation ; À l'exécution, les écrit dans un shim window.env.",
438
+ "envInjectionHint": "À la compilation, injecte les URL du backend comme variables d'environnement de compilation ; À l'exécution, les écrit dans un shim window.env. Notez que votre outil de build peut n'exposer au navigateur que les variables préfixées (p. ex. VITE_) ; nommez donc les liaisons selon sa convention.",
399
439
  "previewEnabled": "Activer l'aperçu navigable",
400
440
  "previewHint": "Maintient un aperçu servi en cours d'exécution avec une URL cliquable. Uniquement pour les runtimes Local et Node.",
441
+ "previewUnsupported": "Ce déploiement ne peut pas héberger d'aperçu navigable. Exécutez sur un déploiement Local ou Node pour conserver un aperçu servi avec une URL cliquable.",
401
442
  "bindings": {
402
443
  "title": "Liaisons du backend",
403
444
  "hint": "Chaque variable d'environnement que le frontend lit pour une URL en amont, et où elle se résout : l'environnement éphémère d'un service lié, ou un stub WireMock.",
@@ -419,7 +460,8 @@
419
460
  "saveMonitoring": "Enregistrer la surveillance",
420
461
  "savedToast": "Surveillance enregistrée",
421
462
  "saveFailed": "Impossible d'enregistrer le mappage",
422
- "clearFailed": "Impossible d'effacer le mappage"
463
+ "clearFailed": "Impossible d'effacer le mappage",
464
+ "configNoun": "la configuration de santé de la version"
423
465
  },
424
466
  "testConfig": {
425
467
  "title": "Infrastructure de test",
@@ -514,7 +556,11 @@
514
556
  "merged": "Fusionné",
515
557
  "notMerged": "Pas encore fusionné",
516
558
  "empty": "Aucune dépendance. Peut s'exécuter à tout moment.",
517
- "blocked": "Bloqué jusqu'à la fusion des dépendances."
559
+ "blocked": "Bloqué jusqu'à la fusion des dépendances.",
560
+ "confirmRemove": {
561
+ "title": "Retirer cette dépendance ?",
562
+ "body": "Cette tâche n'attendra plus \"{name}\"."
563
+ }
518
564
  },
519
565
  "estimate": {
520
566
  "title": "Estimation",
@@ -559,7 +605,11 @@
559
605
  "companionOf": "{label} (compagnon)",
560
606
  "merged": "Fusionné",
561
607
  "open": "Ouvert",
562
- "mergePr": "Fusionner la PR"
608
+ "mergePr": "Fusionner la PR",
609
+ "empty": {
610
+ "title": "Aucune exécution pour l'instant",
611
+ "body": "Lancez un pipeline pour voir l'historique d'exécution ici."
612
+ }
563
613
  },
564
614
  "structure": {
565
615
  "module": "Module",
@@ -689,7 +739,9 @@
689
739
  "done": "Finalisation"
690
740
  },
691
741
  "id": "Conteneur",
692
- "url": "Adresse"
742
+ "url": "Adresse",
743
+ "copyId": "Copier l'id du conteneur",
744
+ "copyUrl": "Copier l'adresse"
693
745
  }
694
746
  },
695
747
  "stepDetail": {
@@ -759,7 +811,25 @@
759
811
  "viewRequirements": "Voir les exigences",
760
812
  "reRun": "Relancer",
761
813
  "run": "Exécuter",
762
- "focus": "Cibler"
814
+ "focus": "Cibler",
815
+ "confirmDelete": {
816
+ "task": {
817
+ "title": "Supprimer cette tâche ?",
818
+ "body": "\"{name}\" et son historique d'exécution seront supprimés. Cette action est irréversible."
819
+ },
820
+ "module": {
821
+ "title": "Supprimer ce module ?",
822
+ "body": "\"{name}\" et tout son contenu seront supprimés. Cette action est irréversible."
823
+ },
824
+ "service": {
825
+ "title": "Supprimer ce service ?",
826
+ "body": "\"{name}\" et tout son contenu seront supprimés. Cette action est irréversible."
827
+ },
828
+ "recurring": {
829
+ "title": "Supprimer ce pipeline récurrent ?",
830
+ "body": "\"{name}\", sa planification et son historique d'exécution seront supprimés. Cette action est irréversible."
831
+ }
832
+ }
763
833
  }
764
834
  },
765
835
  "observability": {
@@ -1019,7 +1089,8 @@
1019
1089
  "revokeInvite": "Impossible de révoquer l'invitation",
1020
1090
  "connectEmail": "Impossible de connecter l'expéditeur des e-mails",
1021
1091
  "disconnectEmail": "Impossible de déconnecter l'expéditeur des e-mails"
1022
- }
1092
+ },
1093
+ "emailNoun": "l’envoi d’e-mails"
1023
1094
  },
1024
1095
  "boardSwitcher": {
1025
1096
  "accountFallback": "Compte",
@@ -1063,6 +1134,10 @@
1063
1134
  "openBoardFailed": "Impossible d'ouvrir le tableau",
1064
1135
  "boardDeleted": "Tableau supprimé",
1065
1136
  "deleteBoardFailed": "Impossible de supprimer le tableau"
1137
+ },
1138
+ "confirmDelete": {
1139
+ "title": "Supprimer ce tableau ?",
1140
+ "body": "\"{name}\" et tout son contenu seront supprimés. Cette action est irréversible."
1066
1141
  }
1067
1142
  },
1068
1143
  "notifications": {
@@ -1084,6 +1159,10 @@
1084
1159
  "human_review": "Marquer comme lu",
1085
1160
  "followup_pending": "Marquer comme lu",
1086
1161
  "markRead": "Marquer comme lu"
1162
+ },
1163
+ "toast": {
1164
+ "acted": "Marqué comme traité",
1165
+ "dismissed": "Ignoré"
1087
1166
  }
1088
1167
  },
1089
1168
  "aiProvidersBanner": {
@@ -1116,6 +1195,27 @@
1116
1195
  "runner-pool": "Configurer le pool d'exécuteurs"
1117
1196
  }
1118
1197
  },
1198
+ "infraSetupBanner": {
1199
+ "agentExecutor": {
1200
+ "title": "Exécuteur d'agents non configuré",
1201
+ "body": "Ce déploiement exécute les agents sur un pool de runners auto-hébergé, mais aucun n'est enregistré, donc aucun agent ne pourra s'exécuter tant que vous n'en connectez pas un.",
1202
+ "action": "Configurer le pool de runners"
1203
+ },
1204
+ "ephemeralEnvironments": {
1205
+ "title": "Environnement de test non configuré",
1206
+ "body": "Aucun fournisseur d'environnements éphémères n'est enregistré, donc les agents de test qui nécessitent un environnement actif ne peuvent pas s'exécuter. Connectez-en un pour les activer.",
1207
+ "action": "Configurer l'environnement"
1208
+ },
1209
+ "binaryStorage": {
1210
+ "title": "Stockage de contenu non configuré",
1211
+ "body": "Aucun backend de stockage binaire n'est configuré pour ce compte, donc les captures d'écran de l'interface et les images de référence n'ont nulle part où être stockées et les contrôles visuels sont ignorés. Configurez le stockage pour les activer.",
1212
+ "action": "Configurer le stockage"
1213
+ },
1214
+ "dismiss": {
1215
+ "session": "Ignorer pour cette session",
1216
+ "permanent": "J'accepte les limitations, ne plus me notifier"
1217
+ }
1218
+ },
1119
1219
  "spendWarningBanner": {
1120
1220
  "title": "Limite de dépense atteinte, exécution des agents en pause",
1121
1221
  "body": "La dépense en jetons de ce mois a atteint le budget configuré, les pipelines en cours ont donc été mis en pause pour éviter des coûts supplémentaires. L'exécution reprend automatiquement au renouvellement du budget le mois prochain, ou dès que la limite est relevée.",
@@ -1183,7 +1283,8 @@
1183
1283
  "serviceFragmentDefaults": "Bonnes pratiques de service par défaut",
1184
1284
  "accountSettings": "Paramètres du compte",
1185
1285
  "localModels": "Mes exécuteurs locaux",
1186
- "sandbox": "Ouvrir le bac à sable"
1286
+ "sandbox": "Ouvrir le bac à sable",
1287
+ "shortcuts": "Raccourcis clavier"
1187
1288
  },
1188
1289
  "keywords": {
1189
1290
  "newPipeline": "pipeline agents chaîne",
@@ -1202,7 +1303,8 @@
1202
1303
  "serviceFragmentDefaults": "fragment bonnes pratiques directive service par défaut sensible au code",
1203
1304
  "accountSettings": "compte équipe membres rôles invitations e-mail clés api fragment bonnes pratiques bibliothèque contexte organisation personnel",
1204
1305
  "localModels": "modèle local exécuteur ollama lm studio llamacpp vllm endpoint",
1205
- "sandbox": "bac à sable prompt modèle test expérience juge fixture benchmark évaluer"
1306
+ "sandbox": "bac à sable prompt modèle test expérience juge fixture benchmark évaluer",
1307
+ "shortcuts": "raccourcis clavier touches aide"
1206
1308
  }
1207
1309
  },
1208
1310
  "integrationsHub": {
@@ -1275,6 +1377,13 @@
1275
1377
  "description": "Vos exécuteurs de modèles sur votre propre machine (Ollama, LM Studio, vLLM…)."
1276
1378
  }
1277
1379
  }
1380
+ },
1381
+ "shortcuts": {
1382
+ "title": "Raccourcis clavier",
1383
+ "commandBar": "Ouvrir la barre de commandes",
1384
+ "deselect": "Désélectionner / fermer l'inspecteur",
1385
+ "deleteBlock": "Supprimer le bloc sélectionné",
1386
+ "help": "Afficher cet aide-mémoire"
1278
1387
  }
1279
1388
  },
1280
1389
  "settings": {
@@ -1317,6 +1426,10 @@
1317
1426
  "nameRequiredTitle": "Nom requis",
1318
1427
  "nameRequiredBody": "Donnez un nom au préréglage.",
1319
1428
  "saveFailed": "Impossible d'enregistrer le préréglage"
1429
+ },
1430
+ "confirmDelete": {
1431
+ "title": "Supprimer ce préréglage de modèle ?",
1432
+ "body": "\"{name}\" sera supprimé. Les tâches qui l'utilisent reviendront au préréglage par défaut de l'espace de travail."
1320
1433
  }
1321
1434
  },
1322
1435
  "account": {
@@ -1536,6 +1649,10 @@
1536
1649
  "saveFailed": "Impossible d'enregistrer le secret",
1537
1650
  "removed": "Secret supprimé",
1538
1651
  "removeFailed": "Impossible de supprimer le secret"
1652
+ },
1653
+ "confirmRemove": {
1654
+ "title": "Supprimer ce secret ?",
1655
+ "body": "\"{name}\" sera supprimé. Cette action est irréversible."
1539
1656
  }
1540
1657
  },
1541
1658
  "mergeThresholds": {
@@ -1582,7 +1699,11 @@
1582
1699
  "deleteFailed": "Impossible de supprimer le préréglage"
1583
1700
  },
1584
1701
  "autoMergeOnHint": "Fusionner automatiquement si dans les seuils.",
1585
- "autoMergeOffHint": "Toujours envoyer la PR en revue humaine."
1702
+ "autoMergeOffHint": "Toujours envoyer la PR en revue humaine.",
1703
+ "confirmDelete": {
1704
+ "title": "Supprimer ce préréglage de fusion ?",
1705
+ "body": "\"{name}\" sera supprimé. Les tâches qui l'utilisent reviendront au préréglage par défaut de l'espace de travail."
1706
+ }
1586
1707
  },
1587
1708
  "observabilityConnection": {
1588
1709
  "title": "Santé post-publication",
@@ -1622,7 +1743,9 @@
1622
1743
  "connected": "Observabilité connectée",
1623
1744
  "connectFailed": "Impossible d'enregistrer la connexion",
1624
1745
  "disconnectFailed": "Impossible de déconnecter"
1625
- }
1746
+ },
1747
+ "connectionNoun": "la connexion d’observabilité",
1748
+ "incidentNoun": "le fournisseur d’incidents"
1626
1749
  },
1627
1750
  "localMode": {
1628
1751
  "title": "Mode local",
@@ -1789,6 +1912,10 @@
1789
1912
  "saveFailed": "Impossible d'enregistrer le runner",
1790
1913
  "removed": "Runner supprimé",
1791
1914
  "removeFailed": "Impossible de supprimer le runner"
1915
+ },
1916
+ "confirmRemove": {
1917
+ "title": "Supprimer ce runner ?",
1918
+ "body": "\"{name}\" sera supprimé. Cette action est irréversible."
1792
1919
  }
1793
1920
  },
1794
1921
  "infrastructure": {
@@ -1823,6 +1950,9 @@
1823
1950
  "apiServerUrlHelp": "La racine du kube-apiserver, p. ex. https://my-cluster.example:6443.",
1824
1951
  "apiToken": "Jeton ServiceAccount",
1825
1952
  "apiTokenHelp": "En écriture seule ; ressaisissez-le pour le faire tourner. Stocké chiffré, jamais renvoyé.",
1953
+ "apiTokenHelpStored": "Un jeton est enregistré et réutilisé pour les tests. Laissez vide pour le conserver, ou saisissez-en un nouveau pour le remplacer.",
1954
+ "apiTokenPlaceholderStored": "Laissez vide pour conserver le jeton enregistré",
1955
+ "tokenSaved": "Enregistré",
1826
1956
  "urlSourceLabel": "Source de l'URL de l'environnement",
1827
1957
  "urlIngressTemplate": "Modèle d'hôte Ingress",
1828
1958
  "urlIngressStatus": "Statut de l'Ingress",
@@ -1875,6 +2005,9 @@
1875
2005
  "handler": {
1876
2006
  "intro": "Configurez la manière dont chaque type de provisionnement déclaré par un service est géré: le moteur et la connexion. Les manifestes ou le chemin compose d'un service (le quoi/où) se définissent sur le service.",
1877
2007
  "activeEngine": "Moteur :",
2008
+ "connectionEstablished": "Connexion établie",
2009
+ "notConnected": "Aucune connexion configurée pour l'instant",
2010
+ "disconnect": "Supprimer la connexion",
1878
2011
  "engineLabel": "Moteur",
1879
2012
  "customHandlerTitle": "Gestionnaire remote-custom",
1880
2013
  "customTypeLabel": "Type personnalisé",
@@ -1888,7 +2021,10 @@
1888
2021
  "overrideActive": "Active",
1889
2022
  "personalOverrideHint": "Surchargez le gestionnaire de l'espace de travail pour ce type de provisionnement sur votre propre machine. Stocké par utilisateur.",
1890
2023
  "removeOverride": "Supprimer la surcharge",
1891
- "loading": "Chargement de la configuration de l'infrastructure…"
2024
+ "loading": "Chargement de la configuration de l'infrastructure…",
2025
+ "kubeNoun": "le gestionnaire Kubernetes",
2026
+ "kubeOverrideNoun": "le remplacement Kubernetes",
2027
+ "customNoun": "ce gestionnaire"
1892
2028
  }
1893
2029
  }
1894
2030
  },
@@ -2012,7 +2148,8 @@
2012
2148
  "step1": "Générez une clé virtuelle sur votre passerelle LiteLLM (ou utilisez sa clé maîtresse).",
2013
2149
  "step2": "L'URL de base de la passerelle est définie par l'opérateur de votre déploiement (LITELLM_BASE_URL), pas ici."
2014
2150
  }
2015
- }
2151
+ },
2152
+ "keyNoun": "cette clé API"
2016
2153
  },
2017
2154
  "vendorCredentials": {
2018
2155
  "title": "Fournisseurs de LLM",
@@ -2050,6 +2187,10 @@
2050
2187
  "step2": "Copiez la clé d'API. Les étapes d'agent s'exécuteront via Claude Code sur l'endpoint Anthropic de DeepSeek avec le contexte complet.",
2051
2188
  "step3": "Collez la clé ci-dessous."
2052
2189
  }
2190
+ },
2191
+ "confirmRemove": {
2192
+ "title": "Retirer ces identifiants ?",
2193
+ "body": "\"{name}\" sera supprimé. Cette action est irréversible."
2053
2194
  }
2054
2195
  }
2055
2196
  },
@@ -2146,6 +2287,10 @@
2146
2287
  "createBranch": "Impossible de créer la branche",
2147
2288
  "openPr": "Impossible d'ouvrir la pull request",
2148
2289
  "merge": "Impossible de fusionner"
2290
+ },
2291
+ "confirmDisconnect": {
2292
+ "title": "Déconnecter GitHub ?",
2293
+ "body": "L'application perdra l'accès à vos dépôts jusqu'à la reconnexion."
2149
2294
  }
2150
2295
  },
2151
2296
  "addService": {
@@ -2254,6 +2399,10 @@
2254
2399
  "disconnect": "Impossible de deconnecter Slack",
2255
2400
  "saveRouting": "Impossible d'enregistrer le routage",
2256
2401
  "saveMap": "Impossible d'enregistrer la carte des membres"
2402
+ },
2403
+ "confirmDisconnect": {
2404
+ "title": "Déconnecter Slack ?",
2405
+ "body": "Les notifications Slack seront interrompues jusqu'à la reconnexion."
2257
2406
  }
2258
2407
  },
2259
2408
  "documents": {
@@ -2471,6 +2620,10 @@
2471
2620
  "cloned": "\"{name}\" cloné — édition de \"{copy}\" en cours",
2472
2621
  "cloneFailed": "Impossible de cloner le pipeline",
2473
2622
  "updateFailed": "Impossible de mettre à jour le pipeline"
2623
+ },
2624
+ "confirmDeletePipeline": {
2625
+ "title": "Supprimer ce pipeline ?",
2626
+ "body": "\"{name}\" sera supprimé. Cette action est irréversible."
2474
2627
  }
2475
2628
  },
2476
2629
  "progress": {
@@ -3031,7 +3184,9 @@
3031
3184
  "completed": "terminé",
3032
3185
  "failed": "échoué",
3033
3186
  "inProgress": "en cours"
3034
- }
3187
+ },
3188
+ "envNoun": "l’environnement de test",
3189
+ "destroyFailed": "Impossible de détruire l'environnement"
3035
3190
  },
3036
3191
  "testing": {
3037
3192
  "title": "Rapport de tests",
@@ -3380,6 +3535,10 @@
3380
3535
  "checkSourceFailed": "Impossible de vérifier la source",
3381
3536
  "sourceUnlinked": "Source dissociée",
3382
3537
  "unlinkSourceFailed": "Impossible de dissocier la source"
3538
+ },
3539
+ "confirmRemove": {
3540
+ "title": "Supprimer ce fragment ?",
3541
+ "body": "\"{name}\" sera supprimé. Cette action est irréversible."
3383
3542
  }
3384
3543
  },
3385
3544
  "sandbox": {