@runeya/runeya 2.0.141 → 2.0.142

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 (81) hide show
  1. package/{chat-UQIVCG33.js → chat-X3X527EX.js} +3 -3
  2. package/{chunk-H2MAALKN.js → chunk-NSS47H26.js} +28 -11
  3. package/chunk-NSS47H26.js.map +1 -0
  4. package/{chunk-36CC5CZK.js → chunk-P73PTVII.js} +21 -55
  5. package/chunk-P73PTVII.js.map +1 -0
  6. package/{companion-EVCS2HNC.js → companion-2LHKU577.js} +2 -2
  7. package/index.js +6 -6
  8. package/{install-gate-SFHNMBWT.js → install-gate-2NNH7RM2.js} +2 -2
  9. package/package.json +1 -1
  10. package/{src-ZSQISY6W.js → src-5TEXF3SU.js} +6 -6
  11. package/{src-ZSQISY6W.js.map → src-5TEXF3SU.js.map} +1 -1
  12. package/web/assets/{AgentScalarChatInterface.vue-Df0_SDmK.js → AgentScalarChatInterface.vue-uNy1P-l4.js} +1 -1
  13. package/web/assets/{AgentTerminalPage-BGA_7YUb.js → AgentTerminalPage-CFnALyb1.js} +1 -1
  14. package/web/assets/{AiChatModals-CaGj0i1I.js → AiChatModals-B6svb69W.js} +1 -1
  15. package/web/assets/{AppLayout-CDOSGDLm.js → AppLayout-BKlJtfuQ.js} +1 -1
  16. package/web/assets/{AuditPage-BMYSSho1.js → AuditPage-BsSpX2TJ.js} +1 -1
  17. package/web/assets/{CloudAccountPage-DJNbXhOH.js → CloudAccountPage-DabrwDsa.js} +1 -1
  18. package/web/assets/{CloudMessagingPage-JXnnH4aT.js → CloudMessagingPage-BtOJO5FB.js} +1 -1
  19. package/web/assets/{DashboardPage-BjeN6ZQ3.js → DashboardPage-DMByzpgW.js} +1 -1
  20. package/web/assets/{DirectoryPickerDialog-CNIrtkmh.js → DirectoryPickerDialog-CDyk4Z_Q.js} +1 -1
  21. package/web/assets/{EnvironmentForm-DTJsmGg_.js → EnvironmentForm-BlGWpU2_.js} +1 -1
  22. package/web/assets/{EnvironmentFormPage-HNIgKqaJ.js → EnvironmentFormPage-B-dpyO0_.js} +1 -1
  23. package/web/assets/{EnvironmentListPage-DRI3aFZw.js → EnvironmentListPage-BlaOiTVh.js} +1 -1
  24. package/web/assets/{KanbanBoardPage-DocxhfeF.js → KanbanBoardPage-C52zM-Zw.js} +3 -3
  25. package/web/assets/{KanbanListPage-DR_DYt46.js → KanbanListPage-BmNdd1aP.js} +1 -1
  26. package/web/assets/{LaunchProjectPage-Dgtz9dX8.js → LaunchProjectPage-B5sXxaet.js} +1 -1
  27. package/web/assets/{LaunchServicesPage-iM8a_UHk.js → LaunchServicesPage-C1u6lV4l.js} +1 -1
  28. package/web/assets/{LaunchShell-DccCGeLx.js → LaunchShell-CeyVMzL2.js} +1 -1
  29. package/web/assets/{LogViewer-DOcy8D-m.js → LogViewer-CAvRwSZu.js} +1 -1
  30. package/web/assets/{OrgKeyPrompt-Dx95YhKV.js → OrgKeyPrompt-NDfCQ-In.js} +1 -1
  31. package/web/assets/{ProcessControls-BUMbz3Cc.js → ProcessControls-D23gTUiv.js} +1 -1
  32. package/web/assets/{ProcessDetailPage-DKVRY4sj.js → ProcessDetailPage-vHpK0Eer.js} +1 -1
  33. package/web/assets/{ProjectCreateDialog-CdYIXATf.js → ProjectCreateDialog-2PZX7tq2.js} +1 -1
  34. package/web/assets/{ProjectLocationGate-BpKnR1WI.js → ProjectLocationGate-fMAxwT0y.js} +1 -1
  35. package/web/assets/{ProjectPublishDialog-BTZXEmZh.js → ProjectPublishDialog-BylWoa0n.js} +1 -1
  36. package/web/assets/{RandomJobTestPage-BLR9jVah.js → RandomJobTestPage-DUclmkBw.js} +1 -1
  37. package/web/assets/{ScenarioEditorPage-ebK_glPw.js → ScenarioEditorPage-DbEsfuZa.js} +1 -1
  38. package/web/assets/{SendToChatDialog-VwH8FOP7.js → SendToChatDialog-DGuOMMrS.js} +1 -1
  39. package/web/assets/{ServiceControlsBar-3dlgA6Sg.js → ServiceControlsBar-D6M8hYFk.js} +1 -1
  40. package/web/assets/{ServiceDetailPage-C9MWIf-1.js → ServiceDetailPage-G-A9ryZD.js} +1 -1
  41. package/web/assets/{ServiceFormPage-DIJMr_Ij.js → ServiceFormPage-BgHSW1XX.js} +1 -1
  42. package/web/assets/{SettingsPage-4bd7gsHf.js → SettingsPage-CPFBr7QE.js} +4 -4
  43. package/web/assets/{UnlockPage-F37odjgM.js → UnlockPage-B4VEN9LN.js} +1 -1
  44. package/web/assets/{VaultMigrationPage-CT6EFAXK.js → VaultMigrationPage-9qDGbF9X.js} +1 -1
  45. package/web/assets/{VersionBadge-4MjBn5ih.js → VersionBadge-CqHdCnuJ.js} +1 -1
  46. package/web/assets/{WikiPage-Dhil7fWU.js → WikiPage-Pjosr1Vn.js} +1 -1
  47. package/web/assets/{WikiView-Ca2kGbvZ.js → WikiView-Bcxq2mQW.js} +1 -1
  48. package/web/assets/{add-scalar-classes-ny-bwITc.js → add-scalar-classes-BnJYThbS.js} +1 -1
  49. package/web/assets/{agent.store-BBUsxY3E.js → agent.store-DTyu_McS.js} +1 -1
  50. package/web/assets/{auth-DgcowXmP.js → auth-D_pCPFq7.js} +2 -2
  51. package/web/assets/{cloud-chat.store-BT0ikifC.js → cloud-chat.store-CMklOB48.js} +1 -1
  52. package/web/assets/{cloud-client-7eaj_DyS.js → cloud-client-CX0pW7Kt.js} +2 -2
  53. package/web/assets/{cloud-session-BI06sY79.js → cloud-session-ja0-uvVS.js} +2 -2
  54. package/web/assets/{editor.store-uLBvEAgM.js → editor.store-BAjGG8Ji.js} +1 -1
  55. package/web/assets/i18n-CXvcscXP.js +1 -0
  56. package/web/assets/{index-c8l1Vzb5.js → index-DTrxphh3.js} +4 -4
  57. package/web/assets/{index-CZJJuyAp.css → index-eb4FRryj.css} +1 -1
  58. package/web/assets/{modal-CNk5Pd2V.js → modal-Cvv2YgUo.js} +1 -1
  59. package/web/assets/{project-launch.store-C0TgNDYm.js → project-launch.store-C7xfTlMc.js} +1 -1
  60. package/web/assets/{project.store-Dx530iqh.js → project.store-ZpH_PaSy.js} +1 -1
  61. package/web/assets/scenario.store-F78cizck.js +7 -0
  62. package/web/assets/{service.store-CgzQ1QCL.js → service.store-Dti7eDhR.js} +1 -1
  63. package/web/assets/{settings-scope-54SF-1Hf.js → settings-scope-CUuHrUpc.js} +1 -1
  64. package/web/assets/{settings.store-Cz6g0qH2.js → settings.store-De1-3IG8.js} +1 -1
  65. package/web/assets/{src-gyxHZ5yB.js → src-C0KK-qsF.js} +1 -1
  66. package/web/assets/{src-BbRuct-7.js → src-DXlxwMXe.js} +1 -1
  67. package/web/assets/{trpc-PGQoddea.js → trpc-B5Yw_z6v.js} +3 -3
  68. package/web/assets/{useCloudOrg-DePshxqA.js → useCloudOrg-QzX8ryg1.js} +1 -1
  69. package/web/assets/{useEnvVarAutocomplete-lyIwYncA.js → useEnvVarAutocomplete-BdGgINv9.js} +1 -1
  70. package/web/assets/{useProjectCatalog-BFmo-l75.js → useProjectCatalog-Cr90BND4.js} +1 -1
  71. package/web/assets/{useProjectCloudOrg-DN7UK1So.js → useProjectCloudOrg-2wwByg2k.js} +1 -1
  72. package/web/assets/{useServiceUrlHost-D31YSsBc.js → useServiceUrlHost-CxbARDeg.js} +1 -1
  73. package/web/assets/{vue-draggable-plus-DE0HToYu.js → vue-draggable-plus-pTwVkhnN.js} +1 -1
  74. package/web/index.html +17 -17
  75. package/chunk-36CC5CZK.js.map +0 -1
  76. package/chunk-H2MAALKN.js.map +0 -1
  77. package/web/assets/i18n-m0G6Pfwe.js +0 -1
  78. package/web/assets/scenario.store-DWezewHe.js +0 -7
  79. /package/{chat-UQIVCG33.js.map → chat-X3X527EX.js.map} +0 -0
  80. /package/{companion-EVCS2HNC.js.map → companion-2LHKU577.js.map} +0 -0
  81. /package/{install-gate-SFHNMBWT.js.map → install-gate-2NNH7RM2.js.map} +0 -0
@@ -0,0 +1 @@
1
+ import{pt as e}from"./src-Ds4DOFJs.js";var t={authErrors:{default:`Une erreur est survenue. Veuillez réessayer.`,USER_ALREADY_EXISTS:`Un compte existe déjà avec cette adresse email.`,INVALID_EMAIL_OR_PASSWORD:`Email ou mot de passe incorrect.`,INVALID_EMAIL:`Adresse email invalide.`,INVALID_PASSWORD:`Mot de passe incorrect.`,EMAIL_NOT_VERIFIED:`Votre adresse email n'est pas encore vérifiée. Consultez votre boîte mail.`,PASSWORD_TOO_SHORT:`Le mot de passe doit contenir au moins 8 caractères.`,PASSWORD_TOO_LONG:`Le mot de passe est trop long.`,USER_NOT_FOUND:`Aucun compte ne correspond à cette adresse email.`,FAILED_TO_CREATE_USER:`Impossible de créer le compte. Veuillez réessayer.`,CREDENTIAL_ACCOUNT_NOT_FOUND:`Aucun compte avec mot de passe pour cette adresse.`,USER_IS_ALREADY_A_MEMBER_OF_THIS_ORGANIZATION:`Cet utilisateur est déjà membre de l'organisation.`,USER_IS_ALREADY_INVITED_TO_THIS_ORGANIZATION:`Cet utilisateur a déjà été invité à cette organisation.`,YOU_ARE_NOT_ALLOWED_TO_INVITE_USERS_TO_THIS_ORGANIZATION:`Vous n'êtes pas autorisé à inviter des membres.`,ORGANIZATION_ALREADY_EXISTS:`Une organisation avec cet identifiant existe déjà.`,SLUG_IS_TAKEN:`Cet identifiant d'organisation est déjà pris.`,INVITATION_NOT_FOUND:`Cette invitation est introuvable ou a expiré.`,YOU_ARE_NOT_ALLOWED_TO_CANCEL_THIS_INVITATION:`Vous n'êtes pas autorisé à annuler cette invitation.`},nav:{dashboard:`Dashboard`,environments:`Environnements`,agents:`Agents`,apiKeys:`Clés d'API`,apiDocs:`Docs API`,settings:`Paramètres`,aiChat:`Chat IA (Ctrl+Shift+Space)`,scenario:`Scenario`,services:`Services`,agentTerminal:`Terminal`,messaging:`Messagerie`},terminal:{splitRight:`Diviser à droite`,splitDown:`Diviser en bas`,newTab:`Nouvel onglet`,closeTab:`Fermer l’onglet`,noAgent:`Aucun agent connecté`,keyBar:{label:`Touches du terminal`,up:`Flèche haut`,down:`Flèche bas`,left:`Flèche gauche`,right:`Flèche droite`,escape:`Échap`,tab:`Tabulation`,enter:`Entrée`,interrupt:`Interrompre (Ctrl+C)`}},connection:{unreachable:`Serveur injoignable`,reconnecting:`Reconnexion en cours…`},drawer:{aiChatTitle:`Assistant IA`,expand:`Agrandir`,collapse:`Réduire`},validation:{requiredField:`Champ obligatoire`,nameRequired:`Le nom est obligatoire`},actions:{save:`Enregistrer`,cancel:`Annuler`,delete:`Supprimer`,confirm:`Confirmer`,add:`Ajouter`,edit:`Modifier`,close:`Fermer`,ok:`OK`,search:`Rechercher`,refresh:`Actualiser`,copy:`Copier`,start:`Démarrer`,stop:`Arrêter`,restart:`Redémarrer`,create:`Créer`,import:`Importer`,export:`Exporter`,back:`Retour`,next:`Suivant`,finish:`Terminer`,loading:`Chargement…`,yes:`Oui`,no:`Non`,apply:`Appliquer`,reset:`Réinitialiser`,status:`Statut`},common:{actions:`Actions`,name:`Nom`,description:`Description`,type:`Type`,status:`Statut`,value:`Valeur`,key:`Clé`,id:`ID`,url:`URL`,token:`Token`,error:`Erreur`,warning:`Avertissement`,success:`Succès`,info:`Information`,none:`Aucun`,all:`Tous`,unknown:`Inconnu`,optional:`Optionnel`,required:`Requis`,enabled:`Activé`,disabled:`Désactivé`,active:`Actif`,inactive:`Inactif`,running:`En cours`,stopped:`Arrêté`,pending:`En attente`},status:{errored:`En erreur`,running:`En cours`,stopped:`Arrêté`,starting:`Démarrage…`,stopping:`Arrêt…`,restarting:`Redémarrage…`,error:`Erreur`,unknown:`Inconnu`},setup:{title:`Configuration`,localMode:`Mode local`,cloudMode:`Mode cloud`,continue:`Continuer`},dashboard:{cloudProject:`Cloud`,editProject:`Modifier le projet`,deleteProjectMessage:`Supprimer « {name} » ? Cette action est irréversible.`,healthBand:`État général`,servicesRunning:`Services en cours`,servicesErrored:`En erreur`,servicesStopped:`Arrêtés`,filterAll:`Tous`,filterRunning:`En cours`,filterIssues:`Erreurs`,filterStopped:`Arrêtés`,noServicesForFilter:`Aucun service dans ce filtre.`,globalWiki:`Wiki global`,graphTitle:`Liens entre services`,graphHint:`Lus dans les variables des environnements`,graphZoomIn:`Zoomer`,graphZoomOut:`Dézoomer`,graphFit:`Ajuster à la fenêtre`,graphLoading:`Lecture des liens…`,graphFailed:`Les liens n’ont pas pu être lus.`,graphNoServices:`Aucun service dans ce projet.`,graphNoLinks:`Aucun service n’en nomme un autre pour l’instant.`,graphAria:`{count} lien(s) entre services`,graphVia:`Via :`,graphDangling:`{service} nomme « {slug} », qui ne correspond à aucun service ({keys}).`,unhealthy:`Health check en échec`,title:`Dashboard`,noServices:`Aucun service configuré`,projects:`Projets`,services:`Services`,agentsConnected:`Agents connectés`,noProjects:`Aucun projet pour l'instant. Créez-en un depuis la page Projets.`,agentStatus:`Statut des agents`,noAgents:`Aucun agent enregistré. Allez dans Agents pour en ajouter un.`,connected:`Connecté`,disconnected:`Déconnecté`},services:{title:`Services`,newService:`Nouveau service`,editService:`Modifier le service`,deleteService:`Supprimer le service`,deleteConfirm:`Êtes-vous sûr de vouloir supprimer ce service ?`,startAll:`Tout démarrer`,stopAll:`Tout arrêter`,restartAll:`Tout redémarrer`,logs:`Journaux`,clearLogs:`Effacer les journaux`,noLogs:`Aucun journal`},environments:{title:`Environnements`,newEnv:`Nouvel environnement`,editEnv:`Modifier l'environnement`,deleteEnv:`Supprimer l'environnement`,deleteConfirm:`Êtes-vous sûr de vouloir supprimer cet environnement ?`,variables:`Variables`,newVariable:`Nouvelle variable`,noVariables:`Aucune variable`,global:`Global`,local:`Local`,createEnvironment:`Créer un environnement`},agents:{title:`Agents`,settingsDesc:`Gérez les agents qui exécutent et surveillent vos services.`,newAgent:`Nouvel agent`,editAgent:`Modifier l'agent`,deleteAgent:`Supprimer l'agent`,deleteConfirm:`Êtes-vous sûr de vouloir supprimer cet agent ?`,connected:`Connecté`,disconnected:`Déconnecté`,local:`Local`},settings:{title:`Paramètres`,general:`Général`,theme:`Thème`,language:`Langue`,logParsers:`Parseurs de journaux`,newParser:`Nouveau parseur`,editParser:`Modifier le parseur`,deleteParser:`Supprimer le parseur`,deleteConfirm:`Êtes-vous sûr de vouloir supprimer ce parseur ?`},apiKeys:{title:`Clés d'API`,newKey:`Nouvelle clé`,editKey:`Modifier la clé`,deleteKey:`Supprimer la clé`,deleteConfirm:`Êtes-vous sûr de vouloir supprimer cette clé ?`,provider:`Fournisseur`,apiKey:`Clé API`},imageUpload:{attachButton:`Joindre une image`,limitReached:`Maximum de 5 images atteint.`,errorTooLarge:`Le fichier « {name} » dépasse la limite de 5 Mo et n'a pas été joint.`,errorTooMany:`Vous pouvez joindre 5 images maximum par message. Certains fichiers ont été ignorés.`,errorUnsupportedType:`Le fichier « {name} » n'est pas pris en charge. Utilisez PNG, JPG, WEBP ou GIF.`,errorNetwork:`L'envoi de « {name} » a échoué. Vérifiez votre connexion et réessayez.`,selectImages:`Sélectionner des images`,removeImage:`Supprimer {name}`},imageHistory:{expired:`Image expirée`},aiChat:{companionRawNotice:`Transcript brut — {n} tour(s), du plus ancien au plus récent. Le verdict courant est le DERNIER, tout en bas.`,companionMore:`Autres actions`,companionRawOff:`Masquer le transcript brut`,companionResize:`Glisser pour redimensionner`,companionRaw:`Transcript brut`,companionRawHint:`Affiche tout l'échange avec le compagnon — le prompt reçu et ses réponses entières, sans filtre.`,companionDelivery_pty:`→ Message transmis au chat principal (écrit dans son terminal).`,companionDelivery_headless:`→ Message transmis au chat principal.`,companionDelivery_failed:`→ Message NON transmis : le chat principal était injoignable.`,companionRunNow:`Relancer maintenant`,companionRunNowHint:`Relance une relecture sur le dernier aller-retour, sans attendre la fin du prochain tour.`,companionSkip_noAnswer:`Sa dernière lecture s’est arrêtée sans rien écrire`,companionSkip_nothingNew:`Rien de neuf à relire depuis sa dernière lecture`,companionSkip_relaunchCap:`Chaîne de relances arrêtée — il repartira au prochain message`,companionSkip_startFailed:`Sa dernière lecture n’a pas pu démarrer`,companionTestBridge:`Tester le pont`,companionTestBridgeHint:`Envoie un message de test au chat principal par le chemin réel — vérifie la plomberie, pas le jugement du compagnon.`,companionReadingNow:`Relecture du dernier tour en cours…`,companionPitchLead:`Une seconde IA relit chaque tour de cette conversation et signale ce qui cloche.`,companionEnable:`Activer le compagnon — il relit chaque tour`,companionDisable:`Couper le compagnon`,companionRunner:`Runner du compagnon`,companionPanelTitle:`Compagnon`,companionReading:`relecture en cours…`,companionNoRunYet:`Le compagnon n'a pas encore relu de tour.`,companionToggleFailed:`Impossible de changer le compagnon`,title:`Chat IA`,placeholder:`Votre message…`,newConversation:`Nouvelle conversation`,deleteConversation:`Supprimer la conversation`,rename:`Renommer`,openTerminal:`Ouvrir un terminal`,menu:`Autres actions`,syncTranscript:`Resynchroniser depuis le transcript`,terminalTitle:`Terminal de la conversation`,terminalKill:`Fermer la session (le shell est arrêté)`,viewGitChanges:`Voir les changements Git`,gitChangesNotice:`Ces changements concernent l'ensemble du dépôt, et non uniquement cette conversation.`,send:`Envoyer`,stop:`Arrêter`,thinking:`Réflexion en cours…`,noConversations:`Aucune conversation`,searchPlaceholder:`Rechercher une conversation…`,searchNoMatch:`Aucune conversation ne correspond`,searchArchivedCount:`{count} dans l’archive`,errorMessage:`(erreur : {message})`,unknownError:`inconnue`,archiveError:`Impossible de modifier l'archive`,layoutError:`Impossible de ranger les conversations`,newSection:`Nouvelle section`,newSectionName:`Nouvelle section`,sectionDropHint:`Glisser une conversation ici`,sectionMove:`Déplacer la section`,sectionMenu:`Actions de la section`,sectionRename:`Renommer`,sectionDelete:`Supprimer la section`,sectionError:`Impossible de modifier la section`,pinnedGroup:`Épinglées`,pinnedDropHint:`Glisser ici pour épingler`,unpinDropHint:`Glisser ici pour détacher`,connectionError:`(erreur de connexion : {message})`,conversationIdCopied:`ID de conversation copié`,historyLoadFailed:`Impossible de charger l'historique de la conversation. Le message n'a pas été envoyé.`,attachedContext:`Contexte attaché`},aiChatPage:{tokens:{success:`Succès`,error:`Erreur`,question:`Question`},defaultModel:`Modèle par défaut`,defaultEffort:`Effort (défaut)`,scenarioRunning:`Scénario en cours`,noProviderConfigured:`Aucun provider configuré`,model:`Modèle`,configureProviderPrefix:`Configurez un provider dans`,generating:`En cours de génération…`,waitingForResponse:`En attente de votre réponse`,unreadMessages:`Messages non lus`,copyConversationId:`Copier l'ID de conversation`,archive:`Archiver`,unarchive:`Désarchiver`,pin:`Épingler`,unpin:`Détacher`,archives:`Archives ({count})`,noResults:`Aucun résultat`,welcome:`Créez une conversation ou tapez un message`,generateNameWithAI:`Générer un nom avec l'IA`,contextWindow:`Fenêtre de contexte`,tokensUsed:`Tokens utilisés`,tokensRemaining:`Tokens restants`,contextSize:`Taille du contexte`,usage:`Utilisation`,scenarioInterrupted:`L'exécution scenario a été interrompue.`,runLog:`Journal d'exécution`,finalReport:`Rapport final`,clickNodeHint:`Cliquez sur un nœud pour voir sa sortie`,viewPromptSent:`Voir le prompt envoyé`,prompt:`Prompt`,systemPrompt:`Prompt système`,viewSystemPrompt:`Voir le prompt système`,noCommandAvailable:`Aucune commande disponible pour ce nœud.`,viewPredecessorContext:`Voir le contexte du prédécesseur`,thinking:`Réflexion`,loadingOutput:`Chargement de la sortie…`,noOutputForNode:`Aucune sortie enregistrée pour ce nœud.`,waitingOutput:`En attente de sortie…`,nodeNotExecuted:`Ce nœud n'a pas encore été exécuté.`,replyNodePlaceholder:`Répondre au nœud… (Entrée pour envoyer)`,you:`Vous`,assistant:`Assistant`,startConversation:`Commencez la conversation…`,contextLabel:`Contexte :`,messagePlaceholder:`Écrivez un message… (Entrée pour envoyer, Shift+Entrée pour retour à la ligne)`,transcribing:`Transcription en cours…`,stopRecording:`Arrêter l'enregistrement`,dictateMessage:`Dicter un message`,scenario:{synthesisInProgress:`Synthèse du leader en cours…`,interrupted:`Le run a été interrompu.`,resumeTitle:`Reprendre le run`,resumeToAnswer:`Reprenez le run pour répondre`},noContentAvailable:`Aucun contenu disponible.`,resumeRunnerQuestion:`Avec quel runner voulez-vous reprendre ?`,runner:{keep:`Même runner`,asConfigured:`Tel que configuré`,claudeCode:`Claude Code`,codex:`Codex`},resumeRunnerHintPrefix:`Tous les nœuds restants seront exécutés avec`,resume:`Reprendre`,executionNameOptional:`Nom de l'exécution (optionnel) :`,executionNamePlaceholder:`Ex : Test du 3 mars`,aiRunner:`Runner IA :`,agentOverride:`Agent`,renameConversation:`Renommer la conversation`,newName:`Nouveau nom :`,confirmDeleteConversation:`Confirmer la suppression de cette conversation ? Cette action est irréversible.`,copied:`Copié`,conversationIdLabel:`Conversation ID: {id}`,copyFailed:`Copie impossible`,createConversationError:`Impossible de créer la conversation: {message}`,loadConversationsError:`Impossible de charger les conversations: {message}`,conversationRenamed:`Conversation renommée`,generateNameFailed:`Impossible de générer un nom`,promptWithLabel:`Prompt — {label}`,newChat:`Nouveau chat`,whichRunner:`Quel runner veux-tu utiliser ?`,runnerNotInstalled:`{runner} non installé`,startScenario:`Démarrer la conversation de scénario`,describeUserNeed:`Décris le besoin utilisateur initial. Ce brief sera écrit dans <code>USER_REQUEST.md</code> pour l'entreprise.`,enhanceWithAI:`Améliorer avec l'IA`,modelOverrideOptional:`Modèle de surcharge (optionnel)`,notAvailableWithCodex:`Non disponible avec Codex`,diffContextAttached:`Contexte diff joint`,genericContext:`Contexte attaché`,typeATask:`Tapez une tâche et appuyez sur Envoyer pour démarrer le scénario.`,clickOrgChartHint:`Cliquez sur un nœud de l'organigramme pour voir sa sortie.`},agentPage:{registerAgent:`Enregistrer un agent`,retry:`Réessayer`,empty:`Aucun agent enregistré. Enregistrez votre premier agent pour commencer à déployer des services.`,uptime:`Uptime`,lastSeen:`Dernière activité`,runners:`Runners`,actions:`Actions`,never:`Jamais`,editAgent:`Modifier l'agent`,removeAgent:`Supprimer l'agent`,remove:`Supprimer`,localCannotEdit:`L'agent local ne peut pas être modifié`,localCannotRemove:`L'agent local ne peut pas être supprimé`,toast:{updated:`Agent mis à jour`,updatedDetail:`"{name}" a été mis à jour.`,registered:`Agent enregistré`,registeredDetail:`"{name}" a été enregistré.`,removed:`Agent supprimé`,saveFailed:`Échec de l'enregistrement de l'agent`,removeFailed:`Échec de la suppression de l'agent`},confirm:{removeHeader:`Supprimer l'agent`,removeMessage:`Supprimer l’agent "{name}" ? Il ne sera plus joignable depuis ce serveur.`},dialog:{editHeader:`Modifier l'agent`,registerHeader:`Enregistrer un agent`,namePlaceholder:`production-agent-01`,urlPlaceholder:`http://localhost:4001`,urlHint:`URL HTTP où le serveur tRPC de l'agent écoute.`,passphrase:`Passphrase`,passphrasePlaceholder:`Passphrase de l'agent`,passphraseKeep:`Laisser vide pour conserver la valeur actuelle`,passphraseHint:`Passphrase configurée sur l'agent pour l'authentification.`,owner:`Appartient à`,ownerMachine:`Cette machine`,ownerHint:`Un agent d'organisation est rangé dans son coffre et la suit ; « cette machine » désigne un agent qui n'exécute des processus qu'ici.`,testConnection:`Tester la connexion`,testFailed:`Test échoué`,connectionFailed:`Connexion échouée`},passthrough:{titleShort:`Env passthrough`,header:`Environnement passthrough — {name}`,description:`Configurez les noms de variables d'environnement à transmettre depuis l'environnement hôte de l'agent vers tous les processus qu'il exécute. Les variables de service sont prioritaires sur les valeurs passthrough.`,empty:`Aucune variable passthrough configurée.`,placeholder:`ex. DISPLAY, HOST, SSH_AUTH_SOCK`,invalidVarName:`Nom de variable invalide (doit respecter [A-Za-z_][A-Za-z0-9_]*)`,alreadyInList:`Déjà dans la liste`,undefined:`(indéfinie)`,notSaved:`(non enregistrée)`,updated:`Variables passthrough mises à jour`,saveFailed:`Échec de l'enregistrement des variables passthrough`}},processControls:{startFailed:`Démarrage échoué`,startServiceFailed:`Impossible de démarrer le service`,stopFailed:`Arrêt échoué`,stopServiceFailed:`Impossible d'arrêter le service`,restartFailed:`Redémarrage échoué`,restartServiceFailed:`Impossible de redémarrer le service`},processCard:{healthy:`Sain`,unhealthy:`Dégradé`,processId:`ID Processus`,uptime:`Uptime`,restarts:`Redémarrages`,pid:`PID`},processMetrics:{cpu:`CPU`,memory:`Mémoire`,bytes:`{count} octets`},serviceDetail:{removed:`Supprimé`,deleted:`Service supprimé`,notFound:`Service introuvable.`,deleteConfirmHeader:`Supprimer le service`,deleteConfirmMessage:`Êtes-vous sûr de vouloir supprimer "{name}" ? Cette action est irréversible.`},errors:{unexpected:`Une erreur inattendue est survenue`,network:`Erreur réseau`,notFound:`Non trouvé`,unauthorized:`Non autorisé`,forbidden:`Accès refusé`,serverError:`Erreur serveur`},language:{label:`Langue`,fr:`Français`,en:`English`},aiChatPanel:{expand:`Agrandir`,collapse:`Réduire`,clear:`Effacer la conversation`,close:`Fermer`,placeholder:`Écrivez un message… (Entrée pour envoyer)`,empty:`Posez une question à l'assistant IA`},themePicker:{title:`Sélecteur de thème`,gradient:`Dégradé`,mode:`Mode`,dark:`Sombre`,light:`Clair`,accentColor:`Couleur d'accent`,customColor:`Personnalisé`,enableGradient:`Activer le dégradé`,disableGradient:`Désactiver le dégradé`},uiKit:{progressSpinner:{loading:`Chargement`},dialog:{close:`Fermer`,maximize:`Agrandir`,restore:`Rétablir`},toast:{close:`Fermer la notification`},confirm:{accept:`Oui`,reject:`Non`},password:{show:`Afficher le mot de passe`,hide:`Masquer le mot de passe`,weak:`Faible`,medium:`Moyen`,strong:`Fort`},select:{open:`Afficher les choix`,clear:`Effacer`,empty:`Aucun choix disponible`,noResults:`Aucun résultat`},multiSelect:{selected:`{count} élément choisi | {count} éléments choisis`,remove:`Retirer {label}`},colorPicker:{open:`Choisir une couleur`},datePicker:{previous:`Mois précédent`,next:`Mois suivant`,today:`Aujourd'hui`,clear:`Effacer`},dataTable:{expand:`Déplier la ligne`,collapse:`Replier la ligne`,firstPage:`Première page`,previousPage:`Page précédente`,nextPage:`Page suivante`,lastPage:`Dernière page`,rowsPerPage:`Lignes par page`}},serviceSidebar:{addService:`Ajouter un service`,searchPlaceholder:`Rechercher un service…`,noProject:`Aucun projet sélectionné.`,noServices:`Aucun service trouvé.`,healthHealthy:`Santé : sain`,healthUnhealthy:`Santé : non sain`,healthWaiting:`Santé : en attente...`,defaultGroup:`Autres`,badgeErrored:`Services en erreur`,badgeHealthy:`Services sains`,badgeRunning:`Services lancés`},git:{tabChanges:`Modifications`,tabHistory:`Historique`,tabBranches:`Branches`,tabStash:`Stash`,stash:`Stash`,stashPop:`Appliquer et retirer`,stashApply:`Appliquer (garder)`,stashDrop:`Supprimer`,stashes:`Stash ({count})`,noStashes:`Aucun stash`,stashed:`Changements mis en stash`,stashPopped:`Stash appliqué et retiré`,stashApplied:`Stash appliqué`,stashDropped:`Stash supprimé`,workingTreeClean:`Répertoire de travail propre`,selectFileForDiff:`Sélectionnez un fichier pour voir son diff`,openInEditor:`Ouvrir dans {editor}`,askAiAboutDiff:`Demander à l'IA à propos de ce diff`,aiChatDiffPrompt:`Voici le diff du fichier {path}. Peux-tu le reviewer ?`,staged:`Indexés ({count})`,unstaged:`Non indexés ({count})`,untracked:`Non suivis ({count})`,unstageAll:`Désindexer tout`,stageAll:`Indexer tout`,unstage:`Désindexer`,stage:`Indexer`,discard:`Ignorer`,diff:`Diff : {path}`,commitPlaceholder:`Message de commit…`,generateMessage:`Générer`,noProviderMessage:`Aucun fournisseur IA configuré. Ajoutez-en un dans les paramètres pour générer des messages de commit.`,goToSettings:`Aller aux paramètres`,commit:`Commiter`,noCommits:`Aucun commit`,newBranch:`Nouvelle branche`,branchNamePlaceholder:`nom-de-branche`,createAndCheckout:`Créer & basculer`,localBranches:`Branches locales ({count})`,remoteBranches:`Branches distantes`,current:`actuelle`,checkout:`Basculer`,errorTitle:`Erreur Git`,agentUnavailable:`Agent injoignable`,agentUnavailableDetail:`L'agent de ce service est inaccessible. Vérifiez qu'il est bien démarré.`,retry:`Réessayer`,commitRequired:`Le message de commit est requis`,committed:`Commité`,pushed:`Poussé`,pulled:`Tiré`,fetched:`Récupéré`,fetchedDetail:`Références distantes mises à jour`,checkedOut:`Basculé`,branchCreated:`Branche créée`,done:`Terminé`,pull:`Tirer`,push:`Pousser`,fetch:`Récupérer`,merge:`Fusionner`,rebase:`Rebaser`,merged:`Fusionné`,rebased:`Rebasé`},scenarioNodeEditor:{label:`Libellé`,systemPrompt:`Prompt système`,reportsTo:`Rapporte à`,noParent:`Aucun parent`,aiRunner:`Runner IA`,model:`Modèle`,modelAuto:`Sélectionné automatiquement par Codex.`,canSpawnNodes:`Peut créer des nœuds supplémentaires pendant un run`,injectParentOutputs:`Injecter tous les outputs des parents directs comme contexte`,injectedAncestorIds:`Outputs d'ancêtres supplémentaires à injecter`,injectedAncestorIdsPlaceholder:`Sélectionner des nœuds ancêtres…`,entryPoint:`(point d'entrée du run)`,question:`Question`,questionPlaceholder:`Question posée à l'utilisateur pendant le run…`,prompt:`Prompt`,department:`Département`,modelHaiku:`Haiku (Rapide)`,modelSonnet:`Sonnet (Équilibré)`,modelOpus:`Opus (Puissant)`},scenarioEditor:{placeholderName:`Nom du scénario`,iconHint:`Nom d’icône Tabler (ex. : ti-building, ti-users)`,placeholderDescription:`Description (optionnelle)`,tooltipSave:`Enregistrer`,tooltipPublish:`Publier (stocké dans settings.json)`,tooltipUnpublish:`Dépublier (stocké dans settings.private.json)`,noPreset:`Sans preset`,traversalHierarchical:`Hiérarchique`,traversalTopological:`Topologique`,multiParentNoticeTitle:`Connexion remplacée`,multiParentNoticeMessage:`En mode hiérarchique, un nœud ne peut avoir qu'un seul parent. La connexion précédente a été remplacée. Si vous souhaitez qu'un nœud reçoive les outputs de plusieurs parents, passez en mode Topologique.`,dontShowAgain:`Ne plus afficher`,switchToHierarchicalTitle:`Passer en mode Hiérarchique`,switchToHierarchicalMessage:`Les connexions suivantes seront supprimées (un nœud ne peut avoir qu'un seul parent en mode hiérarchique) :`,traversalHelp:`<b>Hiérarchique</b> (défaut) — Le leader délègue explicitement à ses subordonnés directs via NEXT_PERSON. Chaque manager peut relire et ré-assigner après que ses enfants ont rendu leur travail. Les branches descendent en parallèle.<br><br><b>Topologique</b> — Parcours simple de haut en bas, parent avant enfant, sans sélection de branche ni boucle de révision. Chaque personne reçoit uniquement la sortie de son parent direct.`,deleteGroupTitle:`Supprimer le groupe`,deleteGroupMessage:`Ce groupe contient {count} nœud(s) qui seront également supprimés. Cette action est irréversible.`,tooltipAutoLayout:`Mise en page automatique`,tooltipImport:`Importer`,tooltipExport:`Exporter`,tooltipCloseAI:`Fermer l'IA`,tooltipGenerateAI:`Générer avec l'IA`,aiPanelTitle:`Générer avec l'IA`,aiProvider:`Fournisseur`,aiSelectProvider:`Sélectionner un fournisseur`,aiNoProvider:`Aucun provider IA configuré. Rendez-vous dans <strong>Paramètres → IA</strong>.`,aiPromptPlaceholder:`Décrivez votre scénario : groupes, rôles, hiérarchie…`,aiGenerating:`Génération en cours…`,aiModify:`Modifier`,aiGenerate:`Générer`,aiHint:`Ctrl+Entrée pour générer`,aiValidJson:`JSON valide`,aiRawResponse:`Réponse brute`,aiApply:`Appliquer`,groupName:`Nom`,groupDescription:`Description`,groupDescriptionPlaceholder:`Décrivez le rôle et les responsabilités de ce département…`,groupAccentColor:`Couleur d'accent`,groupResetColor:`Réinitialiser la couleur`,aiNodeDesc:`Agent IA automatisé`,askNodeDesc:`Attend une saisie de l'utilisateur`,exportHeader:`Exporter le scénario`,copyJson:`Copier le JSON`,importHeader:`Importer un scénario`,importPlaceholder:`Collez le JSON du scénario ici…`,applyPresetHeader:`Appliquer le preset`,applyPresetMessage:`Le chargement de ce preset remplacera les nœuds et groupes actuels par les données initiales du preset. Votre canvas actuel sera perdu.`,applyPresetConfirm:`Appliquer le preset`,toast:{noGroupsSummary:`Aucun groupe`,noGroupsDetail:`Ajoutez un groupe avant d'ajouter un nœud.`,groupRequiredSummary:`Groupe requis`,groupRequiredDetail:`Veuillez sélectionner un groupe pour ce nœud.`,leaderSummary:`Leader`,leaderDetail:`Changez le leader avant de supprimer ce nœud.`,notFoundSummary:`Introuvable`,notFoundDetail:`Scénario introuvable`,validationSummary:`Validation`,nameRequired:`Le nom du scénario est requis.`,nodeRequired:`Au moins un nœud est requis.`,leaderRequired:`Exactement un nœud doit être défini comme leader.`,createdSummary:`Créé`,createdDetail:`Scénario créé.`,savedSummary:`Enregistré`,savedDetail:`Scénario mis à jour.`,appliedSummary:`Appliqué`,appliedDetail:`Scénario généré par l'IA.`,copiedSummary:`Copié`,importedSummary:`Importé`,invalidJson:`JSON invalide retourné par l'IA`}},kanban:{nav:`Kanban`,issuesNav:`Issues`,issues:{title:`Issues`,empty:`Aucune liste d'issues pour le moment. Créez-en une pour commencer.`,dialogs:{newBoard:`Nouvelle liste d'issues`}},cloud:{noProjectOrg:`Les tableaux appartiennent à une organisation. Le projet ouvert est local : ouvrez un projet d'organisation pour retrouver ses tableaux.`,orgNotAccessible:`Le projet ouvert appartient à une organisation à laquelle ce compte n'a pas accès : ses tableaux ne sont pas consultables ici.`,notConnectedTitle:`Les tableaux vivent dans votre organisation`,notConnectedDesc:`Connectez cette machine à Runeya Cloud pour retrouver les tableaux partagés avec votre équipe.`,connectAction:`Connecter au cloud`,readOnlyNotice:`Le kanban est réservé aux offres payantes. Vos tableaux restent consultables, mais ne peuvent plus être modifiés.`,upgradeCta:`Changer d'offre`},list:{menu:`Modèles et réglages`,boardTemplates:{manage:`Modèles de tableaux`,intro:`Un modèle enregistre les consignes IA et les colonnes d’un tableau. Enregistrez-en un depuis le menu ⋮ d’un tableau.`,empty:`Aucun modèle de tableau pour le moment.`,confirmDeleteHeader:`Supprimer le modèle`,confirmDeleteMessage:`Supprimer le modèle « {name} » ? Les tableaux déjà créés ne changent pas.`,pickLabel:`Partir d’un modèle`,pickPlaceholder:`Tableau vide`,pickHint:`Colonnes créées : {columns}`,noColumns:`aucune`},title:`Tableaux Kanban`,tabs:{active:`Actif`,archived:`Archivé ({count})`},empty:`Aucun tableau pour le moment. Créez-en un pour commencer.`,archivedEmpty:`Aucun tableau archivé.`,searchPlaceholder:`Rechercher un tableau…`,noResults:`Aucun tableau ne correspond à « {query} ».`,cards:`{count} carte(s)`,archive:`Archiver`,edit:`Modifier`,boardMenu:`Actions du tableau`,history:{open:`Voir l'historique`,title:`Historique — {name}`,hint:`Tout ce qui s'est passé sur le tableau, du plus récent au plus ancien. Les commentaires de l'IA n'y figurent pas.`,loading:`Chargement`,more:`Afficher plus`,error:`L'historique n'a pas pu être chargé.`,events:{board_renamed:`Tableau renommé de « {from} » en « {to} »`,column_added:`Colonne « {to} » ajoutée`,column_renamed:`Colonne « {from} » renommée en « {to} »`,column_deleted:`Colonne « {to} » supprimée`,card_deleted:`Carte supprimée :`}},flow:{open:`Voir les statistiques`,title:`Flux — {name}`,granularityLabel:`Unité de temps`,granularity:{day:`1 j`,week:`7 j`,month:`1 mois`,year:`1 an`},periodLabel:`Période`,weekOf:`sem. du {date}`,entries:`Entrées`,exits:`Sorties`,totalEntries:`{count} entrée(s)`,totalExits:`{count} sortie(s)`,hint:`Entrées : cartes créées ou rouvertes. Sorties : cartes archivées ou arrivées dans une colonne de cartes finalisées.`,empty:`Aucun mouvement sur la période`,loading:`Chargement`,error:`Le flux n’a pas pu être chargé.`},activity:{distribution:`Répartition des cartes : {detail}`,morePeople:`{count} autre(s) personne(s)`,weekShort:`7 j`,weekTitle:`7 derniers jours : {created} carte(s) entrée(s), {finalized} finalisée(s) (archivées ou arrivées dans une colonne finale).`,weekReopened:`Les entrées comptent {count} carte(s) rouverte(s).`},delete:`Supprimer`,restore:`Restaurer`,quota:`{used}/{limit} tableaux`,nameLabel:`Nom`,descriptionLabel:`Description`,instructionsLabel:`Instructions pour l’IA`,instructionsPlaceholder:`Ex. : une carte passe en « En cours » dès qu'un agent y travaille, et en « À valider » seulement quand les tests passent. Toujours commenter en français.`,instructionsHint:`Texte libre injecté dans le contexte des agents IA travaillant sur ce tableau.`,projects:{label:`Projets`,placeholder:`Aucun projet`,hint:`Le tableau n'apparaît que dans ces projets. Sans projet, il reste visible partout.`,filterLabel:`Filtrer par projet`,filterAll:`Tous les projets`,filterNone:`Sans projet`,sectionCurrent:`Ce projet`,sectionCurrentEmpty:`Aucun tableau rattaché à ce projet pour le moment.`,sectionUnassigned:`Organisationnelles`},cancel:`Annuler`,create:`Créer`,save:`Enregistrer`,templates:{manage:`Gérer les modèles`,new:`Nouveau modèle`,intro:`Les modèles remplissent automatiquement le corps d'une carte à sa création.`,empty:`Aucun modèle pour le moment.`,nameLabel:`Nom du modèle`,contentLabel:`Contenu (markdown)`,contentPlaceholder:`Rédigez le corps de carte que ce modèle appliquera…`,contentHint:`Ce texte sera pré-rempli dans le corps de la carte.`,confirmDeleteMessage:`Supprimer le modèle « {name} » ?`,confirmDeleteHeader:`Confirmer la suppression`},close:`Fermer`,dialogs:{newBoard:`Nouveau tableau`,editBoard:`Modifier le tableau`,confirmDeleteMessage:`Supprimer le tableau « {name} » définitivement ?`,confirmDeleteHeader:`Confirmer la suppression`}},board:{readOnly:{badge:`Lecture seule`},templates:{pickHeader:`Choisir un modèle`,pickIntro:`Partir d’un modèle, ou d’une carte vide.`,blank:`Carte vide`},actions:{menu:`Actions du tableau`},aiPopulate:`Remplir avec l'IA`,archiveBoard:{header:`Archiver le tableau`,confirm:`Archiver « {name} » ? Il quitte la liste des tableaux actifs, et se retrouve dans l’onglet « Archivé ».`,restoreHeader:`Restaurer le tableau`,restoreConfirm:`Restaurer « {name} » parmi les tableaux actifs ?`},deleteBoard:{action:`Supprimer le tableau`},editBoard:{action:`Modifier le tableau`,header:`Modifier le tableau`,save:`Enregistrer`},saveTemplate:{action:`Enregistrer en tant que modèle`,header:`Enregistrer ce tableau comme modèle`,hint:`Les consignes IA et les {count} colonne(s) sont enregistrées. Les cartes, non.`,namePlaceholder:`Nom du modèle`,save:`Enregistrer`},archive:{open:`Archive`,title:`Archive`,hint:`Les cartes sorties du tableau. Rien n’est perdu : chacune revient dans la colonne d’où elle est partie.`,searchPlaceholder:`Rechercher dans l’archive…`,allColumns:`Toutes les colonnes`,columnFilter:`Filtrer par colonne d’origine`,loading:`Chargement…`,empty:`Aucune carte archivée.`,noMatch:`Aucune carte archivée ne correspond.`,truncated:`Trop de cartes rangées pour tout afficher — affinez la recherche.`,fromColumn:`Depuis « {column} »`,restore:`Remettre au tableau`,cardTooltip:`Archiver la carte`,cardAction:`Archiver`,allFiltered:`Les {count} cartes rangées sont masquées par les filtres du tableau.`,filteredOut:`{count} carte(s) masquée(s) par les filtres du tableau.`,pickMove:`Déplacer`,pickCopy:`Copier`,editorPick:`Désarchiver dans…`,editorPickHint:`Carte archivée : choisissez une colonne pour l’y déplacer ou y créer une copie.`,editorReadOnly:`Carte rangée : elle se lit, elle ne se modifie plus. Le désarchivage la rend au tableau.`},searchPlaceholder:`Rechercher des cartes…`,searchTruncated:`trop de résultats`,placements:{label:`Emplacements`,home:`Origine`,open:`Ouvrir ce tableau`,remove:`Retirer de ce tableau`,add:`Poser aussi sur un tableau…`,addExisting:`Ajouter une carte existante…`,dialogHeader:`Ajouter une carte existante à « {column} »`,dialogIntro:`La carte reste sur son tableau et apparaît aussi ici. Ce qu'on y change se voit des deux côtés.`,searchPlaceholder:`Chercher une carte…`,searching:`Recherche…`,noResult:`Aucune carte trouvée.`,fromBoard:`Carte du tableau « {board} »`,board:`Tableau`,column:`Colonne`},issues:{openCount:`{count} ouvertes`,closedCount:`{count} fermées`,new:`Nouvelle issue`,opened:`ouverte {when}`,openedBy:`ouverte {when} par {name}`,stateOpen:`Ouverte`,stateClosed:`Fermée`,emptyOpen:`Aucune issue ouverte.`,emptyClosed:`Aucune issue fermée.`,closed:`fermée {when}`,close:`Fermer l'issue`,reopen:`Rouvrir l'issue`,confirmCloseHeader:`Fermer l'issue`,confirmCloseMessage:`Fermer « {title} » ? Elle passera dans les issues fermées, d'où on peut la rouvrir.`,selectAll:`Tout sélectionner`,select:`Sélectionner « {title} »`,selectedCount:`Sélection : {count}`,placeSelected:`Poser aussi sur un tableau…`,clearSelection:`Vider la sélection`,placed:`Issues posées : {done}`,placedPartly:`Issues posées : {done}. Échecs : {failed} (déjà sur ce tableau ou refusées), elles restent sélectionnées.`,cancel:`Annuler`},view:{defaultColumn:`À faire`},column:{menu:`Actions de la colonne`,dragHandle:`Déplacer la colonne`,deleteTooltip:`Supprimer la colonne`,collapse:`Réduire la colonne`,subscribe:`S’abonner aux mouvements`,unsubscribe:`Se désabonner`,markDone:`Colonne de cartes finalisées`,unmarkDone:`Ne plus compter comme finalisées`,doneBadge:`Colonne de cartes finalisées : y arriver compte comme finalisé`,subscribeTitle:`S’abonner à la colonne`,subscribeIntro:`Choisissez les mouvements de carte de « {column} » qui vous sont notifiés, et par quel canal.`,subscribeEventsLabel:`Mouvements notifiés`,subscribeKind:{entered:`Une carte entre dans la colonne`,left:`Une carte quitte la colonne`,created:`Une carte y est créée`,deleted:`Une carte y est supprimée`},subscribeNotReorder:`Le simple réordonnancement n’est jamais notifié`,subscribeChannelsLabel:`Canaux de diffusion`,subscribeChannel:{email:`Email`,chat:`Messagerie interne`},subscribeTargetLabel:`Abonner`,subscribeTargetMe:`Moi`,unsubscribeTeam:`Désabonner l'équipe`,subscribeTeamsFollowing:`Équipes abonnées à cette colonne : {teams}.`,subscribeOwnActions:`Vos propres actions ne vous sont jamais notifiées.`,subscribeConfirm:`S’abonner`,expand:`Déplier la colonne`,titlePlaceholder:`Titre de la colonne…`,addCard:`Ajouter une carte`,dropZone:`Déposez les cartes ici`,confirmDeleteMessage:`Supprimer la colonne « {title} » et ses {count} carte(s) ?`,confirmDeleteHeader:`Confirmer la suppression`},addColumn:`Ajouter une colonne`,addColumnButton:`Ajouter`,groups:{title:`Regroupement de colonnes`,lead:`Un regroupement coiffe plusieurs colonnes sans en être une : il ne porte aucune carte. Glissez une colonne ou un groupe sur un bandeau pour l'y ranger.`,newPlaceholder:`Nom du regroupement`,create:`Créer`,empty:`Aucun regroupement pour le moment.`,loose:`Hors regroupement`,looseEmpty:`Toutes les colonnes sont rangées.`,columnCount:`{count} colonne(s)`,moveUp:`Déplacer vers la gauche`,moveDown:`Déplacer vers la droite`,deleteHeader:`Supprimer le regroupement`,deleteConfirm:`Supprimer « {title} » ? Ses colonnes ne sont pas supprimées : elles remontent d'un cran.`},filters:{title:`Filtres`,open:`Filtrer les cartes`,reset:`Tout effacer`,clearOne:`Retirer ce filtre`,priority:`Priorité`,priorityAdd:`Filtrer sur la priorité`,priorityHint:`Une carte sans priorité ne passe aucune de ces comparaisons.`,priorityOp:{eq:`Exactement`,gte:`Au moins`,lte:`Au plus`,none:`Sans priorité`},noGroups:`Sans groupe`,noAssignees:`Non assignées`,noFamily:`Sans carte liée`,colors:`Couleurs`,groups:`Groupes`,groupsPlaceholder:`Tous les groupes`,assignees:`Assignés`,assigneesPlaceholder:`Tout le monde`,creators:`Créée par`,creatorsPlaceholder:`Tous les auteurs`,family:`Appartenance`,familyPlaceholder:`Choisir des cartes…`,familyHint:`Garde les cartes choisies et toute leur arborescence : parents, sous-cartes, et ainsi de suite.`},card:{deleteTooltip:`Supprimer`,defaultTitle:`Nouvelle carte`,untitled:`Sans titre`,inColumn:`Dans la colonne « {name} »`,hasParent:`Dépend d’une autre carte`,lastCommentBy:`Dernier commentaire : {name}`,lastCommentByAi:`une IA`,deadlineTooltip:`Échéance`,hasChildren:`Sous-cartes`},conversations:{providers:{intercom:`Intercom`,hubspot:`HubSpot`},sideLabel:`Conversations de support`,linkFrom:`Lier une conversation {name}`,linkTitle:`Lier une conversation {name}`,linkedCount:`{name} : {count} liée(s)`,searchPlaceholder:`Titre, numéro ou lien de la conversation`,search:`Chercher`,noResults:`Aucune conversation trouvée.`,empty:`Aucune conversation liée à cette carte.`,alsoOn:`Aussi suivie par :`,link:`Lier`,linked:`Liée`,unlink:`Délier la conversation`,resync:`Synchroniser la conversation`,openAtProvider:`Ouvrir`,openAtProviderHint:`Ouvre la conversation dans {name} : nécessite un compte sur cet espace {name}.`,internal:`note interne`,missingFiles:`Fichier non récupéré : {names}`,filesPending:`fichiers en cours de récupération`,filesPendingNames:`Récupération en cours : {names}`,messages:`{count} message(s)`,showEarlier:`Afficher les {count} messages précédents`,state:{open:`Ouverte`,resolved:`Résolue`},origin:{auto:`créée automatiquement`,manual:`liée à la main`},role:{customer:`client`,agent:`équipe`}},editor:{header:`Modifier la carte`,cancel:`Annuler`,close:`Fermer`,unsavedHint:`Modifications non enregistrées`,confirmDiscardMessage:`Cette carte contient des modifications non enregistrées. Les abandonner ?`,confirmDiscardHeader:`Modifications non enregistrées`,discard:`Abandonner`,keepEditing:`Continuer l’édition`,save:`Enregistrer`,tabs:{edit:`Modifier`,relations:`Relations ({count})`,comments:`Commentaires ({count})`,history:`Historique ({count})`,conversations:`{name} ({count})`},titleLabel:`Titre`,contentLabel:`Contenu`,contentPlaceholder:`Rédigez le contenu de la carte…`,createdBy:`Créée par {name}`,imagesLabel:`Images`,filesLabel:`Fichiers`,attachFile:`Joindre des fichiers`,removeFile:`Retirer ce fichier`,uploading:`Envoi en cours…`,uploadTooLarge:`fichier trop volumineux (55 Mo maximum)`,uploadEmpty:`fichier vide — il n'y a rien à envoyer`,uploadUnavailable:`stockage de fichiers non configuré sur le cloud — seules les images peuvent être jointes`,uploadFailed:`échec de l'envoi`,downloadFailed:`téléchargement impossible — le fichier est introuvable ou le cloud est injoignable`,viewerDownload:`Télécharger`,viewerEmpty:`Document vide.`,viewerFailed:`Ce fichier n’a pas pu être affiché. Téléchargez-le pour l’ouvrir.`,viewerTruncated:`Aperçu tronqué — téléchargez le fichier pour le voir en entier.`,attachImage:`Joindre une image`,assignMe:`M’assigner`,assigneesLabel:`Assigné à`,assigneesPlaceholder:`Personne`,assigneesHint:`Les personnes ajoutées reçoivent un message.`,assignedDetail:`Assignée à {names}`,ancestryLabel:`Arborescence`,priorityLabel:`Priorité`,deadlineLabel:`Échéance`,deadlineNone:`Aucune échéance`,deadlineClear:`Retirer l’échéance`,deadlineToday:`C’est aujourd’hui.`,deadlineIn:`Dans {count} jour(s).`,deadlineOverdue:`En retard de {count} jour(s).`,priorityAdd:`Définir une priorité`,priorityClear:`Retirer la priorité`,priorityNone:`Aucune priorité définie.`,groupsLabel:`Groupes`,groupsPlaceholder:`Ajouter un groupe…`,groupsHint:`Des étiquettes libres. Tapez pour en créer une.`,groupsCreate:`Créer « {name} »`,colorLabel:`Couleur`,colorNone:`Aucune couleur`,colorHint:`Un liseré en haut de la carte. À vous de décider ce qu’il signifie.`,colorCustom:`Couleur libre`,colorWheel:`Roue chromatique`,colorBrightness:`Luminosité`,colorHex:`Code hexadécimal`,colorHistory:`Récentes`,columnSettingLabel:`Colonne`,columnGroupHere:`Ce tableau`,columnSearchPlaceholder:`Rechercher un tableau ou une colonne…`,columnSearchEmpty:`Aucune colonne ne correspond.`,moveToBoardHint:`Choisir la colonne d’un autre tableau y déplace la carte, avec ses commentaires, ses pièces jointes et ses assignés.`,parentLabel:`Carte parente`,parentSearchPlaceholder:`Rechercher une carte…`,parentEmpty:`Aucune autre carte sur ce tableau.`,parentEmptyState:`Cette carte ne dépend d’aucune autre.`,parentAdd:`Relier à une carte parente…`,parentReplace:`Remplacer la carte parente…`,parentAway:`Sur le tableau « {board} »`,childrenLabel:`Sous-cartes ({count})`,childrenEmptyState:`Aucune carte ne dépend de celle-ci.`,childAdd:`Ajouter une sous-carte…`,openOnBoard:`Ouvrir sur le tableau « {board} »`,childOpen:`Ouvrir la carte`,detach:`Retirer le lien`,relationsEmpty:`Aucune carte liée.`,relationsHereBoard:`Ce tableau`,relationsColCard:`Carte`,relationsColBoard:`Tableau`,relationsColColumn:`Colonne`,relationsColAssignees:`Assignés`,relationsColComments:`Commentaires`,relationsColActions:`Actions`,moveToBoardHeader:`Déplacer la carte`,moveToBoardConfirm:`Déplacer cette carte vers « {board} », colonne « {column} » ? Elle quittera ce tableau.`,conversationsLabel:`Conversations IA disponibles`,actionsLabel:`Actions`,launchAi:`Lancer une conversation IA`,sendToChat:`Envoyer à la messagerie`,openCardLink:`Ouvrir la carte`,columnLabel:`Colonne : {column}`,deleteCard:`Supprimer cette carte`,confirmDeleteMessage:`Supprimer la carte « {title} » définitivement ? Son historique sera perdu. Pour le garder, archivez-la plutôt.`,confirmDeleteHeader:`Confirmer la suppression`,confirmRemoveImageMessage:`Retirer cette image de la carte ?`,confirmRemoveImageHeader:`Confirmer la suppression`},comments:{placeholder:`Écrire un commentaire…`,empty:`Aucun commentaire pour le moment.`,authorAi:`IA`,hideAi:`Masquer les messages de l'IA`,allAiHidden:`Tous les commentaires viennent de l'IA et sont masqués.`,authorYou:`Vous`,edit:`Modifier`,delete:`Supprimer`,edited:`(modifié)`,showMore:`Voir plus`,showLess:`Voir moins`,confirmDeleteMessage:`Supprimer ce commentaire ?`,confirmDeleteHeader:`Confirmer la suppression`,attach:`Joindre des fichiers`,send:`Commenter`,sendHint:`Ctrl + Entrée`},history:{empty:`Aucune activité enregistrée pour le moment.`,by:`par {name}`,byAi:`par l'IA`,events:{created:`Carte créée`,edited:`Contenu modifié`,moved:`Déplacée`,image_added:`Image jointe`,image_removed:`Image retirée`,title_changed:`Titre modifié`,archived:`Archivée`,unarchived:`Désarchivée`,conversation_started:`Conversation démarrée`,scenario_started:`Scénario lancé`,comment:`Commentaire`}},aiStatus:{companion:`Le compagnon relit…`,streaming:`IA en cours…`,unread:`Nouveau message IA`},launchAiDialog:{header:`Lancer une conversation IA`},populateDialog:{header:`Remplir le tableau avec l'IA`,hint:`Décris ce que tu veux. L'IA créera des cartes et les dispatche dans les colonnes existantes.`,placeholder:`Ex : Un board de gestion de projet agile avec des user stories pour une app mobile de livraison…`,generate:`Générer`,provider:`Fournisseur`},queue:{tooltip:`Ajouter à la file IA`,tooltipInQueue:`Retirer de la file IA`,addColumnTooltip:`Ajouter la colonne à la file IA`,panelHeader:`File IA`,empty:`La file est vide.`,concurrency:`Tâches simultanées max`,stopAll:`Tout arrêter`,waitingSection:`En attente ({count})`,runningSection:`En cours ({count})`,addColumnDialog:{header:`Ajouter la colonne à la file IA`,runner:`Runner`,scenario:`Scénario (optionnel)`,noScenario:`Aucun`,confirm:`Ajouter à la file`}}}},notifications:{title:`Notifications`,markAllRead:`Tout marquer comme lu`,clear:`Effacer`,empty:`Aucune notification`,openResource:`Ouvrir la ressource`,justNow:`à l'instant`,minutesAgo:`il y a {n}m`,hoursAgo:`il y a {n}h`,daysAgo:`il y a {n}j`},logDetails:{cwd:`Répertoire d’exécution`,header:`Détails du journal`,type:`Type`,rawMessage:`Message brut`,serviceId:`ID du service`,viewProcess:`Voir le processus`,pid:`PID`,timestamp:`Horodatage`,stream:`Flux`,metadata:`Métadonnées`,notAvailable:`Non disponible`},projectList:{newProject:`Nouveau projet`,descriptionLabel:`Description`,descriptionPlaceholder:`Une brève description...`,created:`Projet créé`,createdDetail:`"{name}" a été créé.`},projectDetail:{searchServices:`Rechercher des services…`,createNew:`Créer nouveau`,nameUpdated:`Nom mis à jour`,projectDeleted:`Projet supprimé`,deleteProjectTitle:`Supprimer le projet`,cloud:{localPath:`Emplacement sur cette machine`},deleteProjectCancel:`Annuler`,deleteProjectConfirm:`Supprimer`},auditPage:{timeColumn:`Heure`,actionColumn:`Action`,entityTypeColumn:`Type d'entité`,entityIdColumn:`ID de l'entité`,userColumn:`Utilisateur`,detailsColumn:`Détails`,title:`Journal d'audit`,allActions:`Toutes les actions`,actionCreate:`Créer`,actionUpdate:`Mettre à jour`,actionDelete:`Supprimer`,actionDeploy:`Déployer`,actionStart:`Démarrer`,actionStop:`Arrêter`,actionRestart:`Redémarrer`,allTypes:`Tous les types`,typeProject:`Projet`,typeService:`Service`,typeProcess:`Processus`,typeAgent:`Agent`,filterByAction:`Filtrer par action`,filterByType:`Filtrer par type`},serviceConfigEnv:{editVarsHeader:`Modifier les variables d'environnement`,previewHeader:`Aperçu de la configuration finale`,editingVarsFor:`Modification des variables de {name} dans l'environnement`,injectedVarsInfo:`Variables d'environnement qui seront injectées dans ce service :`,noActiveEnv:`Aucun environnement actif sélectionné pour ce projet.`,noVarsConfigured:`Aucune variable configurée pour ce service. Cliquez sur "Modifier les variables" pour en ajouter.`,passthroughInfo:`Ces variables sont transmises depuis l'environnement hôte de l'agent.`,activeEnvironment:`Environnement actif :`,inheritsFrom:`Hérite des variables de "{name}"`,isolated:`Isolé — pas d'héritage de "{name}"`,envVars:`Variables d'environnement`,editVariables:`Modifier les variables`,preview:`Aperçu`,inheritedVars:`Variables héritées`,undefined:`(non défini)`,error:`Erreur`,failedToUpdateInheritance:`Impossible de mettre à jour l'héritage`,failedToLoadPreview:`Impossible de charger l'aperçu`,restartTitle:`Redémarrer`,startTitle:`Démarrer le service ?`,restartConfirmMsg:`Redémarrer "{name}" pour appliquer les nouvelles variables d'environnement ?`,startConfirmMsg:`Démarrer "{name}" pour appliquer les nouvelles variables d'environnement ?`,notNow:`Pas maintenant`,serviceRestarted:`Service redémarré`,serviceStarted:`Service démarré`,failedToAction:`Impossible de {action}`},variablesTable:{empty:`Aucune variable définie. Cliquez sur "Ajouter une variable" pour en ajouter une.`,emptyReadonly:`Aucune variable définie.`,override:`surchargée`,overrideTooltip:`Surcharge une variable héritée avec la même clé`,localOverride:`Surcharge locale`,localOverrideTooltip:`Surchargée sur cette machine, depuis l'environnement «\xA0{env}\xA0»`,editParentTitle:`Modifier la variable source`,editParentHeader:`Modifier une variable partagée`,editParentWarning:`Vous êtes sur le point de modifier « {key} » dans l'environnement « {env} ». Ce changement est global : il s'applique à tout ce qui utilise cette variable.`,editParentImpact:`Impact`,editParentDefines:`définit`,editParentInherits:`hérite`,editParentLoading:`Analyse des usages…`,editParentNoUsage:`Aucun autre usage détecté dans ce projet.`,editParentNotFound:`Variable source introuvable`,editParentConfirm:`Modifier globalement`,reveal:`Afficher`,overriddenOnly:`Remplacées uniquement`,addVariable:`Ajouter une variable`},settingsAiProviders:{anthropicDesc:`Accède à la console Anthropic, crée un compte si besoin, puis va dans "API Keys" pour générer une clé.`,openaiDesc:`Connecte-toi à la plateforme OpenAI, puis va dans "API keys" pour créer une nouvelle clé secrète.`,mistralDesc:`Accède à la console Mistral AI et crée une clé API dans la section "API Keys".`,groqDesc:`Inscris-toi sur Groq Cloud et génère une clé dans "API Keys". Groq offre une inférence très rapide via son hardware LPU.`,ollamaDesc:`Ollama fait tourner des LLMs en local sur ta machine. Aucune clé API n'est nécessaire. Assure-toi qu'Ollama tourne sur le port 11434.`,ollamaUrlLabel:`ollama.com → Télécharger`},apiKeysPage:{title:`Clés d'API`,desc:`Gérez les clés d'API pour accorder aux agents IA un accès délimité à vos services et environnements.`,updated:`Mise à jour`,keyUpdated:`Clé mise à jour`,keyCreated:`Clé créée`,error:`Erreur`,deleted:`Supprimée`,keyRevoked:`Clé révoquée`,keyRenewed:`Clé renouvelée`,oldKeyRevoked:`L'ancienne clé est révoquée immédiatement.`,scopedKeysInfoPrefix:`Clés d'API scopées, utilisables par les agents IA via`,scopedKeysInfoRoute:`GET /<apikey>/llms.txt`,newApiKey:`Nouvelle API key`,loading:`Chargement…`,noApiKey:`Aucune clé d'API. Créez-en une pour contrôler l'accès à votre instance.`,shareable:`partageable`,createdOn:`Créée le`,copied:`Copié !`,copyUrl:`Copier l'URL`,copyKeyOnly:`Copier la clé seule`,aiIntegration:`Intégration IA`,written:`Écrit !`,writeFileToDisk:`Écrire le fichier sur le disque`,write:`Écrire`,copy:`Copier`,editKey:`Modifier`,revokeKey:`Révoquer`,editOrNewTitle:`Modifier la clé`,newTitle:`Nouvelle API key`,keyNameLabel:`Nom de la clé`,ownerLabel:`Appartient à`,ownerMachine:`Cette machine`,servicesAndPermissions:`Services & permissions`,searchService:`Rechercher un service…`,noResults:`Aucun résultat.`,removeService:`Retirer ce service`,read:`Lire`,secrets:`Secrets`,writePermission:`Écrire`,addEnvironment:`+ Ajouter un environnement…`,addService:`+ Ajouter un service…`,importMissing:`Importer les manquants`,noServicesAvailable:`Aucun service disponible.`,allServicesAdded:`Tous les services ont été ajoutés.`,importMissingHeader:`Importer les services manquants`,willBeAdded:`seront ajoutés avec la configuration ci-dessous.`,environments:`Environnements`,cancel:`Annuler`,importServices:`Importer {count} service(s)`,storageLabel:`Stockage de la configuration`,privateOnly:`Privé uniquement`,shareableLabel:`Partageable`,renewKey:`Renouveler la clé`,saveOrCreate:`Enregistrer`,createKey:`Créer la clé`,renewKeyHeader:`Renouveler la clé`,renewBodyLine1:`Cette action génère une nouvelle clé aléatoire.`,renewBodyLine2:`L'ancienne clé sera révoquée immédiatement — tous les outils qui l'utilisent devront être mis à jour.`,scopeSummary:`{count} service exposé | {count} services exposés`,privateOnlyHint:`non commité`,shareableHint:`committable`},builtins:{serviceName:`Le nom du service.`,serviceId:`L'identifiant du service.`,servicePort:`Le premier port déclaré ; les suivants s’écrivent service.PORT_2, _3…`,serviceUrl:`L'URL du service, une par port (service.URL_2, _3…) : le domaine local déclaré sur ce port, sinon l'hôte et le port.`,serviceBaseUrl:`L'« URL de base » saisie dans la configuration du service — souvent son adresse publique.`,serviceCwd:`Le répertoire d'exécution, résolu sur la machine qui lance le service.`,projectName:`Le nom du projet.`,envName:`Le nom de l'environnement actif — « production », « staging »…`,runeyaHost:`L'adresse d'écoute du serveur — « localhost », ou « 0.0.0.0 » en mode réseau local.`,agentHostLan:`L'IP de l'agent sur le réseau local, résolue au démarrage du service.`,agentName:`Le nom de l'agent qui exécute le service.`,agentOs:`Le système de la machine d'exécution — « linux », « darwin », « win32 ».`,agentHome:`Le dossier personnel sur la machine d'exécution.`},variableRefInput:{groupBuiltins:`Variables intégrées`,groupEnvironment:`Environnement`},missingVariables:{title:`Variables à renseigner`,intro:`Cet environnement attend {count} variable(s) avant qu'un service puisse démarrer.`,reasonRequired:`Obligatoire`,reasonOverrideOnly:`Propre à ce poste`,definedIn:`Définie dans « {environment} »`,machineOnly:`la valeur reste sur ce poste et n'est jamais synchronisée`,valuePlaceholder:`Valeur`,reveal:`Afficher`,hide:`Masquer`,save:`Enregistrer`,saveError:`Impossible d'enregistrer les variables`},variableRowEditor:{helpTitle:`Écrire une valeur`,helpReference:`Pour réutiliser une variable de l'environnement global :`,helpAutocomplete:`Commencez à taper le nom de la variable pour voir les suggestions.`,helpBuiltinsTitle:`Variables intégrées`,helpPrePost:`Le préfixe et le suffixe encadrent la valeur, et acceptent les mêmes références.`,variableNamePlaceholder:`Nom de variable…`,secret:`Secret`,secretHint:`Chiffrer la valeur au repos et la masquer dans l'interface. Un secret ne part vers aucune IA sans partage explicite.`,shareWithAi:`Lecture IA`,shareWithAiHint:`Autoriser le chat de Runeya et les agents (par le serveur MCP) à lire la valeur de ce secret.`,shareWithAiHintPublic:`Cette variable n'est pas secrète : sa valeur est déjà lisible par l'IA. La case reste réglable pour le jour où vous la passerez en secret.`,shareWithAiHintInjected:`Lecture accordée d'office : la variable est injectée dans l'environnement des agents, qui la voient donc.`,injectIntoAi:`Injection IA`,injectIntoAiHint:`Poser cette variable dans l'environnement des agents IA (Claude Code, Codex…) lancés avec cet environnement actif. Un agent qui la reçoit peut la lire : la lecture est alors accordée d'office.`,required:`Obligatoire`,requiredHint:`Un service de cet environnement ne démarrera pas tant que cette variable n'a pas de valeur.`,overrideOnly:`Seulement surchargeable`,overrideOnlyHint:`Cette variable n'a pas de valeur partagée : chaque poste doit fournir la sienne (chemin local, jeton personnel).`,overrideOnlyNotice:`Variable seulement surchargeable : la valeur partagée reste vide. Chaque poste renseigne la sienne, via l'assistant à l'activation de l'environnement ou par sa surcharge.`,description:`Description`,addDescription:`Ajouter une description`,addOverride:`Ajouter une surcharge locale`,showSharedValue:`Afficher la valeur partagée`,hideSharedValue:`Masquer`,descriptionPlaceholder:`À quoi sert cette variable, pour celui qui devra la remplir`,notSecretWarning:`Cette variable n'est pas marquée comme secrète — sa valeur sera stockée non chiffrée.`,value:`Valeur`,prefix:`Préfixe`,prefixPlaceholder:`préfixe…`,valuePlaceholder:`valeur…`,suffix:`Suffixe`,suffixPlaceholder:`suffixe…`,localOverride:`Surcharge locale`,localOverrideHint:`Une valeur propre à ce poste, qui remplace la valeur partagée pour vous seul : elle n'est jamais synchronisée ni visible par vos collègues. Pour un chemin local, un jeton personnel, un port déjà pris.`,clearOverride:`Supprimer la surcharge`,overrideValuePlaceholder:`valeur surchargée…`,saveError:`Impossible de sauvegarder la variable`,deleteError:`Impossible de supprimer la variable`,overrideError:`Impossible de sauvegarder la surcharge`,clearOverrideError:`Impossible de supprimer la surcharge`},unlockPage:{titleSetup:`Configurer Runeya`,titleLocked:`Runeya verrouillé`,subtitleLegacyMigration:`Créez un master password pour sécuriser votre clé d'encryption existante.`,subtitleHasVerifyFile:`Créez votre master password et entrez la clé d'encryption de votre équipe.`,subtitleSetup:`Créez votre master password pour protéger vos secrets.`,subtitleUnlock:`Entrez votre master password pour déverrouiller Runeya.`,masterPasswordLabel:`Master password`,masterPasswordPlaceholder:`Votre master password`,encryptionKeyLabel:`Clé d'encryption de l'équipe`,encryptionKeyPlaceholder:`64 caractères hexadécimaux`,encryptionKeyHelp:`Récupérez cette clé depuis Settings → "Afficher ma clé d'encryption" sur une machine configurée.`,machineWarning:`Votre master password est lié à cette machine via un secret stocké dans votre trousseau OS. Si vous réinstallez votre OS ou changez de machine, vous devrez reconfigurer Runeya avec la clé d'encryption de votre équipe.`,pleaseWait:`Veuillez patienter…`,configure:`Configurer`,unlock:`Déverrouiller`,serverUnreachable:`Impossible de contacter le serveur. Vérifiez que Runeya est démarré.`,unknownError:`Erreur inconnue`},aiProviderSelector:{loading:`Chargement des modèles…`,defaultModel:`Modèle par défaut`,placeholder:`Provider IA`,title:`Provider IA utilisé pour cette action`},scenarioSelector:{heading:`Choisir un scénario ou démarrer une conversation libre`,manageScenarios:`Gérer les scénarios`,nodes:`nœuds`,published:`publié`,empty:`Aucun scénario configuré.`,create:`Créer un scénario`,startFreeChat:`Démarrer un chat normal`,aiSection:`Choisir votre IA`,cliGroup:`CLIs`,cliGroupHint:`Terminal interactif, adossé à votre abonnement`,apiGroup:`Agents API`,apiGroupHint:`Facturés à l'usage par le provider`,manageProviders:`Gérer les providers`,noProviders:`Aucun provider IA configuré.`,configureProvider:`Configurer un provider`,scenariosSection:`Workflows`,agentLabel:`Agent`,defaultAgent:`Par défaut`},serviceCard:{autoRestart:`Redémarrage auto`,commands:`Commandes :`,none:`Aucune`,ports:`Ports :`,cwd:`Répertoire :`,edit:`Modifier`,deploy:`Déployer`,remove:`Supprimer`},tiptapEditor:{placeholder:`Écrivez quelque chose…`,bold:`Gras`,italic:`Italique`,underline:`Souligné`,strikethrough:`Barré`,highlight:`Surligné`,heading1:`Titre 1`,heading2:`Titre 2`,heading3:`Titre 3`,bulletList:`Liste à puces`,orderedList:`Liste numérotée`,taskList:`Liste de tâches`,quote:`Citation`,inlineCode:`Code inline`,codeBlock:`Bloc de code`,horizontalRule:`Ligne horizontale`,undo:`Annuler`,redo:`Rétablir`},environmentForm:{tabConfiguration:`Configuration`,tabVariables:`Variables`,generalInfo:`Informations générales`,appearance:`Apparence`,settings:`Paramètres`,inheritance:`Héritage`,nameLabel:`Nom`,namePlaceholder:`ex : production, staging`,descriptionLabel:`Description`,descriptionPlaceholder:`Description optionnelle`,textColorLabel:`Couleur du texte`,textColorHint:`Couleur du texte pour le badge d'environnement`,bgColorLabel:`Couleur de fond`,bgColorHint:`Couleur de fond pour le badge d'environnement`,defaultLabel:`Environnement par défaut`,defaultHint:`Quand activé, cet environnement est sélectionné au chargement du projet au lieu du premier de la liste.`,agentDefaultLabel:`Agent par défaut`,agentDefaultHint:`Agent utilisé par les services sans agent explicite quand cet environnement est actif.`,agentDefaultInherit:`— Aucun (hériter) —`,parentLabel:`Environnements parents`,parentPlaceholder:`Sélectionner des parents (les variables sont héritées dans l'ordre)`,parentFilter:`Rechercher des environnements...`,parentHint:`Les variables des parents sont héritées dans l'ordre. Les parents ultérieurs surchargent les précédents.`,inheritedVariables:`Variables héritées`,variablesAfterCreate:`Les variables peuvent être ajoutées après la création de l'environnement.`,cancel:`Annuler`,save:`Enregistrer l'environnement`,failedToSaveParents:`Impossible de sauvegarder les parents`,nameRequired:`Le nom est obligatoire`},environmentSelector:{heading:`Environnements`,label:`Environnement :`,placeholder:`Choisir un environnement`},serviceNavBar:{terminal:`Terminal`,metrics:`Métriques`,config:`Config`,git:`Git`},processDetail:{cwd:`Répertoire d’exécution`,loading:`Chargement du processus...`,goBack:`Retour`,metrics:`Métriques`,pid:`PID`,agent:`Agent`,restarts:`Redémarrages`,started:`Démarré`,exitCode:`Code de sortie`,logs:`Journaux`},serviceMetrics:{noData:`Aucune métrique disponible pour le moment.`,notRunning:`Le service n'est pas en cours d'exécution.`},errorBoundary:{title:`Une erreur s'est produite`,tryAgain:`Réessayer`},syncStatusBar:{syncing:`Synchronisation...`,connected:`Connecté`,disconnected:`Déconnecté`,conflict:`{n} conflit | {n} conflits`,pending:`{n} en attente`},logViewer:{showingHidden:`Journaux cachés affichés`,hiddenFiltered:`Journaux cachés filtrés`,hiddenLogsToggle:`{n} journal(aux) caché(s) — cliquez pour basculer`,maxLines:`Nombre max de lignes affichées`,timeSpan:`Intervalle entre le premier et le dernier journal`,throughput:`reçus/s · vidés/s`,toggleSimple:`Basculer le mode texte simple`,simpleModeOn:`Mode simple activé`,simpleModeOff:`Mode simple désactivé`,autoScrollOn:`Défilement auto activé`,autoScrollOff:`Défilement auto désactivé`,live:`En direct — cliquez pour mettre en pause`,paused:`En pause — cliquez pour reprendre et défiler vers le bas`,waitingLogs:`{n} nouveau(x) journal(aux) en attente`,loading:`Chargement des journaux...`,empty:`Aucune entrée de journal à afficher.`,sendToAi:`Envoyer à l'IA`,sendToAiTitle:`Envoyer les logs au chat IA (utilise la sélection de texte si du texte est surligné)`,sendToChat:`Envoyer à la messagerie (utilise la sélection de texte si surligné)`,logsContext:`Contexte logs`,sendToAiDialogTitle:`Envoyer les logs à l'IA`,sendToAiDialogDesc:`Choisissez le runner IA. Si du texte est sélectionné dans les logs, seule la sélection sera envoyée ; sinon, tous les logs visibles seront envoyés.`},environmentFormPage:{editTitle:`Modifier l'environnement`,createTitle:`Créer un environnement`,updated:`Environnement mis à jour`,updatedDesc:`a été enregistré avec succès.`,created:`Environnement créé`,createdDesc:`a été créé avec succès.`,saveFailed:`Échec de l'enregistrement`,saveFailedDesc:`Une erreur est survenue lors de l'enregistrement de l'environnement.`},cloudMessaging:{cardColumn:`Colonne actuelle : {column}`,title:`Messagerie`,retention:{grace:`Votre plan actuel limite l’historique à {days} jours. Les messages plus anciens seront supprimés à partir du {date}.`,enforcing:`Votre plan actuel ne conserve que les {days} derniers jours de messages. Les messages plus anciens sont automatiquement supprimés.`,pending:`Votre abonnement se termine le {date}. À partir de cette date, seuls les {days} derniers jours de messages seront conservés.`,cta:`Passer à un plan payant`},notConnected:`Connectez-vous à votre compte cloud pour accéder à la messagerie.`,notConnectedTitle:`Messagerie d’équipe`,notConnectedDesc:`La messagerie est une fonctionnalité cloud qui relie les membres de vos équipes entre eux : salons, messages directs et collaboration en temps réel.`,connectAction:`Se connecter au cloud`,noProjectOrg:`La messagerie appartient à une organisation. Le projet ouvert est local : ouvrez un projet d'organisation pour retrouver ses messages.`,orgNotAccessible:`Le projet ouvert appartient à une organisation à laquelle ce compte n'a pas accès : sa messagerie n'est pas consultable ici.`,empty:`Aucun message pour le moment. Lancez la conversation !`,newMessages:`nouveaux messages`,soundOn:`Son activé — cliquer pour couper`,soundOff:`Son coupé — cliquer pour activer`,placeholder:`Écrivez un message…`,send:`Envoyer`,channels:`Salons`,directMessages:`Messages directs`,createChannel:`Créer un salon`,channelName:`Nom du salon`,private:`Privé`,privateHint:`Sur invitation uniquement`,create:`Créer`,browse:`Parcourir / rejoindre`,join:`Rejoindre`,noBrowse:`Aucun salon public à rejoindre.`,newDm:`Nouveau message direct`,dmHint:`Sélectionnez une personne, ou plusieurs pour créer un groupe.`,startDm:`Démarrer la conversation`,startGroup:`Créer un groupe ({count})`,noMembers:`Aucun autre membre dans cette organisation.`,invite:`Inviter`,addPeople:`Sélectionnez des personnes`,addSelected:`Ajouter {count} personne(s)`,noInvitable:`Tout le monde est déjà dans ce salon.`,searchPeople:`Rechercher une personne…`,noMatch:`Aucun résultat.`,pickChannel:`Sélectionnez un salon ou une conversation.`,someone:`Quelqu'un`,select:`Sélectionner`,selectedCount:`{count} sélectionné(s)`,sendToAi:`Envoyer à l'IA`,cancel:`Annuler`,aiContextLabel:`Messages ({count})`},sendToChat:{title:`Envoyer à la messagerie`,notConnected:`Connectez-vous à votre compte cloud pour envoyer vers la messagerie.`,org:`Organisation`,orgPlaceholder:`Choisir une organisation`,target:`Destination`,targetPlaceholder:`Choisir un salon ou un message direct`,channels:`Salons`,directMessages:`Messages directs`,preview:`Aperçu`,truncated:`tronqué`,cancel:`Annuler`,send:`Envoyer`,sent:`Envoyé à la messagerie`,failed:`Échec de l'envoi`},settingsDiagnostics:{instancesTitle:`Instances Runeya sur cette machine`,instancesDesc:`Détectées par le registre local, puis confirmées en interrogeant leur port.`,instancesEmpty:`Aucune autre instance détectée.`,thisInstance:`celle-ci`,uptime:`actif depuis`,agentPort:`agent`,open:`Ouvrir`,kill:`Arrêter`,killTooltip:`Arrête l'agent, puis le serveur de cette instance.`,killConfirmTitle:`Arrêter cette instance ?`,killConfirm:`L'instance sur le port {port} ({cwd}) va être arrêtée : son agent d'abord, puis son serveur. Tout ce qu'elle exécute s'arrêtera avec elle.`,killCancel:`Annuler`,killDenied:`Ce processus appartient à un autre utilisateur : arrêt refusé par le système.`,killFailed:`L'instance n'a pas pu être arrêtée. Elle est peut-être bloquée ou protégée.`,restart:`Redémarrer`,restartTooltip:`Arrête l'instance, puis la relance avec le même exécutable, les mêmes arguments, le même répertoire et le même environnement.`,restartBlockedLegacy:`Cette instance a démarré avant que Runeya ne publie sa ligne de commande : impossible de la relancer à l'identique.`,restartBlockedSecrets:`Cette instance tient un secret hérité de son environnement (et non du .env de la pile, qui serait relu au démarrage). Le registre ne le conserve pas : la relancer donnerait un démarrage dégradé.`,restartConfirmTitle:`Redémarrer cette instance ?`,restartConfirm:`L'instance sur le port {port} ({cwd}) va être arrêtée puis relancée à l'identique. Tout ce qu'elle exécute s'arrêtera avec elle.`,restartCancel:`Annuler`,restartDone:`Instance relancée (pid {pid}).`,restartPortBusy:`Instance relancée (pid {pid}), mais le port {port} n'était pas encore libre : elle a pu démarrer ailleurs.`,restartSelfPending:`Redémarrage de cette instance en cours. La page se rechargera dès qu'elle répondra de nouveau.`,restartSelfTimeout:`Cette instance n'est pas revenue. Vérifiez le terminal ou le lanceur d'où elle a été démarrée.`,restartSelfConfirm:`Cette instance va s'arrêter puis se relancer à l'identique. La page se rechargera d'elle-même ; tout ce que Runeya exécute s'arrêtera au passage.`,refresh:`Actualiser`,logsTitle:`Journaux du serveur et de l'agent`,logsDesc:`Le flux de cette instance, en direct. L'agent écrit dans la sortie du serveur : les deux arrivent par le même canal.`,logsEmpty:`Aucune ligne à afficher.`,sourceAll:`Serveur et agent`,sourceServer:`Serveur`,sourceAgent:`Agent`,searchPlaceholder:`Filtrer les lignes...`,live:`En direct`,copy:`Copier`,clear:`Vider`,resumeScroll:`Revenir en bas`},bottomBar:{none:`Aucun`,errorChangingEnv:`Impossible de changer d'environnement`,cloudLogin:`Se connecter au cloud`,cloudAccount:`Compte Runeya Cloud`,cloudLocalProject:{title:`Projet local`,description:`Ce projet n’appartient à aucune organisation : aucun compte Runeya Cloud n’agit ici. Vos comptes restent liés à ce poste — ils reprennent la main dès que vous ouvrez un projet d’organisation.`,cta:`Gérer les comptes de ce poste`},cloudNoAccountForOrg:{title:`Organisation inconnue de ce poste`,description:`Ce projet appartient à une organisation qu’aucun compte lié à ce poste ne connaît. Tant qu’un compte ne l’a pas rejointe, son contenu cloud reste hors de portée.`,cta:`Connecter un compte`},goToProject:`Ouvrir le projet`,switchProject:`Changer de projet`,desktopMode:{title:`Mode bureau`,description:`Runeya a été lancé depuis un raccourci, sans terminal. Fermer cet onglet n'arrête pas Runeya.`,address:`Adresse :`,goToDiagnostics:`Voir le diagnostic`}},serverErrors:{LOCAL_PROJECT_EXISTS:`Ce dossier contient déjà un projet local. Choisissez un autre dossier.`,LOCAL_PROJECT_IN_MACHINE_ROOT:`Ce dossier contient les données de Runeya. Choisissez un autre dossier pour le projet local.`,LOCAL_PROJECT_CLOUD_LINKED:`Ce dossier est déjà l'emplacement d'un projet d'organisation. Choisissez un autre dossier.`,LOCAL_PROJECT_NOT_FOUND:`Ce dossier ne contient pas de projet local à importer.`,PROJECT_DELETE_FORBIDDEN:`Seul un propriétaire ou un administrateur de l’organisation peut en retirer un projet.`,PROJECT_NOT_MEMBER:`Le cloud ne vous voit pas comme membre de cette organisation. Reconnectez-vous au cloud, puis réessayez.`,CLOUD_NOT_LINKED:`Cette machine n’est pas connectée au cloud Runeya. Connectez-vous, puis réessayez.`,CLOUD_NO_ACCOUNT_FOR_PROJECT:`Aucun compte cloud de ce poste ne répond de l’organisation de ce projet. Ouvrez la page Compte pour en relier un.`,PROJECT_NOT_IN_ORG:`Ce projet ne fait plus partie de cette organisation.`,PROJECT_DELETE_FAILED:`Le cloud n’a pas pu retirer le projet. Réessayez dans un instant.`,PROJECT_HELD_ELSEWHERE:`Cette machine détient déjà un projet portant cet identifiant, pour une autre organisation. Cessez de suivre l’autre avant d’ouvrir celui-ci.`,PROJECT_NOT_LOCAL:`Ce projet n’est plus un projet local de cette machine.`,ORG_KEY_ALREADY_CURRENT:`Ce coffre utilise déjà cette clé : il n'y a rien à convertir.`,ORG_KEY_DOES_NOT_OPEN_VAULT:`Cette clé n'ouvre pas le coffre de cette organisation. L'installer effacerait le repère qui permet encore de reconnaître la bonne.`,PROJECT_ALREADY_IN_ORG:`Cette organisation porte déjà un projet sous cet identifiant. Publier le projet d’ici écraserait le sien : retirez-le de l’organisation, ou repartez du projet du cloud.`,ORG_KEY_MISMATCH:`Cette organisation est chiffrée par une autre clé que celle de cette machine. Demandez la clé à un membre : elle vous sera réclamée ici même.`,ORG_VAULT_UNREADABLE:`Le coffre de cette organisation est chiffré par une clé que cette machine n'a pas. Demandez-la à un membre : elle vous sera réclamée ici même.`,CANARY_UNAVAILABLE:`Impossible de vérifier la clé de cette organisation auprès du cloud. Réessayez une fois la connexion rétablie.`},projectPalette:{title:`Changer de projet`,placeholder:`Rechercher un projet…`,recent:`Récents`,noRecent:`Aucun autre projet ouvert récemment.`,noMatch:`Aucun projet ne correspond.`},projectSwitcher:{recent:`Récents`,folderLabel:`Dossier`,folderNone:`Aucun dossier choisi`,folderChoose:`Choisir un dossier`,folderChange:`Changer`,heading:`Projets`,signInMore:`Connectez-vous au cloud pour voir les autres projets de vos organisations.`,unknownOrg:`Organisation {id}…`,local:`Local`,noLocal:`Aucun projet local`,noProjects:`Aucun projet dans cette organisation`,orgsFailed:`Impossible de récupérer vos organisations.`,pullTimeout:`Le projet n'est pas encore arrivé sur cette machine. Réessayez dans un instant.`,syncKeyMismatch:`Cette organisation est chiffrée par une autre clé que celle de cette machine : le projet n'arrivera pas tant qu'elle n'aura pas été fournie.`,syncPaused:`La synchronisation de cette organisation est en pause : reconnectez-vous au cloud, puis réessayez.`,syncOutdated:`Le cloud refuse cette version de l’application. Mettez Runeya à jour, puis réessayez.`,untrack:`Retirer de cette machine`,deleteFromOrg:`Retirer de l’organisation {org}`,deleteFromOrgTitle:`Retirer le projet de l’organisation`,deleteFromOrgConfirm:`Retirer « {project} » de l’organisation {org} ? Le projet disparaîtra pour tous ses membres, pas seulement sur cette machine. Cette action est définitive.`,deleteFromOrgAccept:`Retirer de l’organisation`,signInHint:`Connectez-vous au cloud pour voir les projets de vos organisations.`,create:`Créer un projet`,createTitle:`Nouveau projet`,nameLabel:`Nom du projet`,namePlaceholder:`mon-projet`,targetLabel:`Emplacement`,localHint:`Ce projet reste sur cette machine et n’est jamais synchronisé.`,cloudHint:`Ce projet est partagé avec les membres de l’organisation.`,createFailed:`Impossible de créer le projet.`,publish:`Publier dans une organisation`,keyPromptTitle:`Clé de chiffrement de l'organisation`,keyPromptHint:`Ce projet est chiffré par une clé que ce poste n'a pas encore. Demandez-la à un membre et collez-la ici : elle sera éprouvée contre le canari publié par l'organisation, puis installée, et la récupération reprendra.`,keyPromptUse:`Installer et récupérer`,publishTitle:`Publier « {project} »`,publishOrgLabel:`Organisation`,publishHint:`Le projet quitte cette machine pour l’organisation : il n’en reste pas de copie locale, et ses membres y ont accès.`,publishAccept:`Publier`,publishFailed:`Impossible de publier le projet.`},launchProject:{recent:`Récents :`,importOrCreateLocal:`Importer ou créer un projet local`,search:`Rechercher un projet…`,noMatch:`Aucun projet ne correspond.`,missingTitle:`Je ne vois pas mes projets`,missingText:`Les projets de vos organisations vivent sur Runeya Cloud. Connectez-vous pour les retrouver ici.`,connectCloud:`Me connecter au cloud`,cloudUnreachable:`Impossible de joindre Runeya Cloud. Vérifiez la configuration du serveur local.`,notPulled:`Pas encore téléchargé sur cette machine`,groupLocal:`Projets locaux`,groupUnknownOrg:`Organisation {id}…`,subtitle:`Orchestration de processus pour développeurs`,selectProject:`Sélectionner un projet`,groupEmpty:`Aucun projet ici pour le moment.`,noDescription:`Aucune description`,createHere:`Créer un projet dans {group}`,serviceCount:`{n} service | {n} services`},launchServices:{subtitle:`Orchestration de processus pour développeurs`,selectServices:`Sélectionner les services à lancer`,noServices:`Aucun service dans ce projet.`,skip:`Ignorer`,noAgents:`Aucun agent connecté. Vous pouvez tout de même enregistrer votre sélection et ignorer.`,filter:`Filtrer les services...`,deselectAll:`Tout désélectionner`,selectAll:`Tout sélectionner`,noCommands:`Aucune commande`,launch:`Lancer`,someServicesFailed:`Certains services n'ont pas pu démarrer`,defaultGroup:`Autres`,selectedCount:`Aucun service sélectionné | {n} service sélectionné | {n} services sélectionnés`},serviceConfigView:{title:`Configuration`,remove:`Supprimer`,tabGeneral:`Général`,tabCommands:`Commandes`,tabShortcuts:`Raccourcis`,tabEnvironment:`Environnement`,tabHealthCheck:`Santé`,tabLogParsers:`Parseurs de logs`,tabLogSources:`Sources de logs`},serviceConfigGeneral:{name:`Nom`,workingDirectory:`Répertoire de travail`,cwdHint:`Répertoire de travail par défaut pour toutes les commandes`,ports:`Ports`,portsPlaceholder:`Ajouter un port...`,portsHint:`Liste des ports utilisés par ce service`,groups:`Groupes`,groupsPlaceholder:`Ajouter un groupe...`,groupsHint:`Assigner des groupes à ce service (ex. backend, frontend)`,description:`Description`,descriptionHint:`Courte description de ce service`,url:`URL`,urlHint:`URL de base du service`,localUrl:`URL locale (Traefik)`,localUrlHint:`Domaine local pour accéder au service en HTTPS via Traefik (ex: mon-app.local.mondomaine.com)`,openapiUrl:`URL OpenAPI`,openapiUrlHint:`URL de la spécification OpenAPI/Swagger`,git:`Git`,gitRemoteHint:`Remote — URL de clonage/push`,gitHomeHint:`Home — URL web à ouvrir dans le navigateur`,meta:`Meta`,metaHint:`Paires clé/valeur personnalisées attachées à ce service`,metaKeyPlaceholder:`Clé`,metaValuePlaceholder:`Valeur`,addEntry:`Ajouter une entrée`,autoRestart:`Redémarrage automatique`,clearLogs:`Vider les logs au démarrage / redémarrage`},serviceConfigCommands:{agent:`Agent`,runner:`Runner`,native:`Natif`,docker:`Docker`,labelPlaceholder:`Libellé`,commandPlaceholder:`Commande`,addCommand:`Ajouter une commande`,noCommands:`Aucune commande configurée.`,online:`En ligne`,offline:`Hors ligne`,cwdPlaceholder:`Répertoire personnalisé`},serviceConfigHealthCheck:{enable:`Activer la santé`,type:`Type`,path:`Chemin`,method:`Méthode`,expectedStatus:`Statut attendu`,command:`Commande`,commandHint:`Commande à exécuter. Code de sortie 0 = sain, non-zéro = défaillant`,interval:`Intervalle (ms)`,timeout:`Délai (ms)`,retries:`Tentatives`,initialDelay:`Délai initial (ms)`},serviceConfigLogs:{jsParsers:`Parseurs JavaScript`,jsParsersHint:`Assigner des parseurs JavaScript globaux à ce service. Les parseurs s'exécutent en pipeline dans l'ordre indiqué — chacun enrichit la ligne de log. La détection de niveau par défaut (regex) s'exécute en premier, puis les parseurs dans l'ordre.`,executionOrder:`Ordre d'exécution`,executionOrderHint:`Glisser pour réordonner — premier = s'exécute en premier`,builtin:`Intégré`,disabled:`Désactivé`,empty:`Aucun parseur JS sélectionné. Ajoutez-en un ci-dessous ou créez-en de nouveaux dans les Paramètres.`,addParser:`Ajouter un parseur...`,manageParsers:`Gérer les parseurs`},serviceConfigLogSources:{title:`Sources de logs`,hint:`Définir des sources de logs supplémentaires au-delà de la console stdout/stderr par défaut. Supporte les fichiers, les collections MongoDB et les tables MySQL. Les champs sensibles (chaînes de connexion, mots de passe) sont chiffrés au repos.`,empty:`Aucune source de log supplémentaire configurée.`,emptyHint:`La console (stdout/stderr) est toujours active par défaut.`,addSource:`Ajouter une source`,addDialog:`Ajouter une source de log`,editDialog:`Modifier la source de log`,type:`Type`,path:`Chemin`,encoding:`Encodage`,startFromEnd:`Démarrer depuis la fin`,createIfNotExists:`Créer le fichier s'il n'existe pas`,connectionString:`Chaîne de connexion`,database:`Base de données`,collection:`Collection`,timestampField:`Champ timestamp`,messageField:`Champ message`,levelField:`Champ level`,host:`Hôte`,port:`Port`,user:`Utilisateur`,password:`Mot de passe`,table:`Table`,timestampColumn:`Colonne timestamp`,messageColumn:`Colonne message`,levelColumn:`Colonne level`,pollInterval:`Intervalle de polling (ms)`,customQuery:`Requête personnalisée`,consoleHint:`La source console capture stdout/stderr et est toujours active. L'ajouter ici n'a aucun effet.`,cancel:`Annuler`,save:`Enregistrer`,add:`Ajouter`,optional:`optionnel`},serviceConfigShortcuts:{empty:`Aucun raccourci configuré. Ajoutez des raccourcis pour lancer rapidement des commandes depuis le terminal.`,label:`Libellé`,labelPlaceholder:`Libellé du raccourci`,command:`Commande`,commandPlaceholder:`Commande à exécuter`,workingDir:`Répertoire de travail (optionnel)`,cwdPlaceholder:`Répertoire personnalisé`,addShortcut:`Ajouter un raccourci`},serviceForm:{editTitle:`Modifier le service`,createTitle:`Créer un service`,projectLabel:`Projet *`,projectPlaceholder:`Sélectionner un projet`,projectHint:`Le projet auquel ce service appartient.`,agentLabel:`Agent`,agentPlaceholder:`Sélectionner un agent…`,agentInherit:`— Hériter de l'environnement actif —`,agentHint:`L'agent sur lequel ce service sera exécuté. Laissez vide pour hériter de l'environnement actif.`,agentHintEdit:`L'agent sur lequel ce service s'exécute. Vide = hérite de l'environnement actif. Arrêtez le processus avant de changer.`,nameLabel:`Nom du service *`,nameLabelShort:`Nom *`,runnerLabel:`Runner`,cwdLabel:`Répertoire de travail`,portsLabel:`Ports`,portsPlaceholder:`Ajouter un port…`,nameConfigHint:`Vous pourrez configurer la commande et les autres paramètres après la création.`,autoRestart:`Redémarrage automatique en cas de crash`,envVars:`Variables d'environnement`,addEnvVar:`Ajouter`,noEnvVars:`Aucune variable d'environnement configurée.`,healthCheck:`Santé`,healthCheckPath:`Chemin de santé`,interval:`Intervalle (ms)`,timeout:`Délai (ms)`,retries:`Tentatives`,cancel:`Annuler`,create:`Créer le service`,saved:`Enregistré`,error:`Erreur`,validation:`Validation`,nameRequired:`Le nom est obligatoire.`,agentRequired:`L'agent est obligatoire.`,projectRequired:`Veuillez sélectionner un projet.`,serviceCreated:`Service créé`,configureAfterCreate:`Configurez les paramètres de votre service.`,failedToLoad:`Impossible de charger le service`,failedToSave:`Impossible de sauvegarder le service`,agentChangedServiceStopped:`Agent modifié — le service a été arrêté. Le démarrer sur le nouvel agent ?`,restartNow:`Démarrer maintenant`,restarted:`Service démarré`},logFilter:{levelsPlaceholder:`Niveaux de log`,addFilter:`Ajouter un filtre`,clearAll:`Effacer tous les filtres`,newFilter:`Nouveau filtre`,include:`Inclure`,exclude:`Exclure`,regex:`Expression régulière`,regexPlaceholder:`ex. ^ERROR|WARN$`,filterPlaceholder:`Texte du filtre…`,add:`Ajouter`,cancel:`Annuler`,removeFilter:`Supprimer le filtre`},environmentList:{title:`Environnements`,subtitle:`Gérer les environnements du projet et l'héritage des variables`,createButton:`Créer un environnement`,immutableBadge:`IMMUABLE`,activeBadge:`ACTIF`,defaultEnv:`Environnement par défaut`,setAsDefault:`Définir par défaut`,activateButton:`Activer`,editButton:`Modifier`,deleteButton:`Supprimer`,created:`Créé`,createdDesc:`Environnement créé avec succès`,createError:`Erreur`,createErrorDesc:`Impossible de créer l'environnement`,defaultSet:`Par défaut défini`,defaultSetDesc:`Cet environnement sera activé au chargement du projet`,activated:`Activé`,deleteTitle:`Confirmer la suppression`,deleted:`Supprimé`,deletedDesc:`Environnement supprimé`,failedToSetDefault:`Impossible de définir l'environnement par défaut`,failedToActivate:`Impossible d'activer l'environnement`,deleteConfirmMsg:`Supprimer l'environnement '{name}' ? Cette action est irréversible.`,failedToDelete:`Impossible de supprimer l'environnement`},appUpdate:{bannerText:`Une nouvelle version de Runeya est disponible ({latest}) — vous utilisez la {current}.`,bannerAction:`Mettre à jour`,dialogTitle:`Mettre à jour Runeya`,dialogLead:`Version installée : {current}. Dernière version publiée : {latest}.`,checking:`Vérification de node et npm…`,nodeFound:`node {version}`,npmFound:`npm {version} ({path})`,npmMissing:`npm est introuvable`,npmMissingHelp:`Runeya se met à jour avec npm, qui n'a pas répondu. Un raccourci de bureau n'hérite pas du PATH de votre terminal : si npm est installé par un gestionnaire de version (nvm, fnm, n, volta), lancez plutôt « npm install -g @runeya/runeya@latest » depuis un terminal.`,installTarget:`Installation globale dans {prefix}`,install:`Installer la mise à jour`,installing:`Installation en cours — cela peut prendre une minute…`,installed:`Version {version} installée.`,installFailed:`L'installation a échoué. La sortie de npm ci-dessous dit pourquoi.`,restartNeeded:`La nouvelle version prendra la main au prochain démarrage de Runeya.`,restartNow:`Redémarrer maintenant`,restartLater:`Plus tard`,restarting:`Redémarrage…`,retry:`Réessayer`},changelog:{title:`Nouveautés`,navTitle:`Changements`,navDesc:`Ce qui a changé dans les versions de Runeya installées sur ce poste.`,dialogLead:`Voici ce qui a changé depuis votre dernière visite.`,empty:`Rien de neuf pour le moment.`,failed:`Le journal des nouveautés est injoignable.`,retry:`Réessayer`,close:`J'ai lu`,kindFeature:`Nouveau`,kindImprovement:`Amélioré`,kindFix:`Corrigé`,kindBreaking:`Rupture`},cloudBanner:{offline:`Hors connexion — ce projet cloud ne sera pas synchronisé tant que vous n'êtes pas connecté au cloud.`,otherOrg:`Ce projet cloud appartient à une autre organisation que celle où vous êtes connecté — aucune synchronisation ne sera effectuée.`,otherCloud:`Ce projet cloud est lié à une autre instance Runeya Cloud que celle où vous êtes connecté — aucune synchronisation ne sera effectuée.`},vaultMigration:{title:`Le master password est désormais lié à la machine`,lead:`Ce répertoire possède encore son propre master password, hérité d'une version antérieure. Ses données sont chiffrées avec une clé que Runeya ne lit plus : saisissez l'ancien mot de passe pour les convertir vers le master password de cette machine.`,oldPasswordLabel:`Ancien master password de ce répertoire`,backupNote:`Une copie intégrale du coffre est conservée avant toute écriture. L'ancienne clé n'est retirée qu'après relecture réussie.`,migrate:`Migrer ce coffre`,migrating:`Migration en cours…`,failed:`La migration a échoué`,statusError:`Impossible de lire l'état du serveur`,done:`Coffre migré. Ce répertoire utilise maintenant le master password de la machine.`,rekeyed:`{file} — {count} valeur(s) re-chiffrée(s)`,moved:`Déplacés vers le coffre machine : {files}`,skipped:`Laissés en place, la machine en possédait déjà : {files}`,backupKept:`Sauvegarde conservée dans`,continue:`Continuer`},directoryPicker:{refusedUnreadable:`Ce dossier contient un projet Runeya qui ne peut pas être importé (plusieurs projets, ou un projet d'organisation). Choisissez un autre dossier.`,localTitle:`Importer ou créer un projet local`,localLead:`Choisissez le dossier du projet.`,localHint:`Si le dossier contient déjà un projet Runeya, il est importé. Sinon, un nouveau projet y est créé.`,importNamed:`Importer « {name} »`,createHere:`Créer un projet dans « {name} »`,refusedListed:`Ce dossier contient « {name} », déjà dans la liste.`,refusedCloudLinked:`Ce dossier est l'emplacement d'un projet d'organisation. Choisissez-en un autre.`,filterPlaceholder:`Filtrer les dossiers, ou coller un chemin…`,noMatch:`Aucun dossier ne correspond à « {filter} ».`,title:`Où stocker « {project} » ?`,lead:`Choisissez le répertoire où vivent les sources de ce projet cloud sur cette machine.`,leadHint:`Il servira de base aux répertoires de travail des services. Ce chemin reste local et n'est jamais synchronisé.`,up:`Dossier parent`,loading:`Lecture du répertoire…`,empty:`Aucun sous-dossier`,truncated:`Trop de sous-dossiers — affichage tronqué.`,badgeHasProject:`projet Runeya`,refusedHasProject:`Ce répertoire contient déjà un projet Runeya. Choisissez-en un autre.`,refusedTaken:`Un autre projet est déjà rattaché à ce répertoire. Choisissez-en un autre.`,refusedMissing:`Ce répertoire est introuvable.`,readError:`Impossible de lire ce répertoire`,saveError:`Impossible d'enregistrer cet emplacement`,confirm:`Utiliser ce répertoire`,root:`Racine`,confirmNamed:`Utiliser « {name} »`,crumbAria:`Chemin courant`,pathHint:`Entrée pour se rendre à ce chemin.`},settingsPage:{companionTitle:`Compagnon de relecture`,companionLead:`Une seconde IA relit chaque tour des conversations et écrit dans le fil quand elle a quelque chose à dire.`,companionEnableByDefault:`Activer sur les nouvelles conversations`,companionEnableByDefaultHint:`N'affecte que les conversations créées ensuite ; les conversations ouvertes gardent leur réglage.`,companionPrompt:`Spécificités ajoutées au compagnon`,companionPromptDefault:`Aucune spécificité ajoutée. Les consignes Runeya restent appliquées.`,companionPromptCustom:`Spécificités ajoutées aux consignes Runeya.`,companionPromptEdit:`Ajouter des spécificités`,companionPromptReset:`Retirer les spécificités`,companionPromptPlaceholder:`Ex. : surveille surtout les migrations, les risques de perte de données ou les règles propres à ce dépôt.`,companionPromptEditorHint:`Laissez vide pour n'ajouter aucune spécificité. Les consignes Runeya et le format de réponse (RAS, bornes) restent toujours appliqués.`,companionLoadFailed:`Impossible de lire les réglages du compagnon`,companionSaveFailed:`Impossible d’enregistrer les réglages du compagnon`,title:`Paramètres`,general:`Général`,generalDesc:`Mode de fonctionnement et configuration de base.`,cloud:`Cloud`,cloudSectionDesc:`Connexion à votre compte Runeya Cloud et options associées.`,cloudBannerTitle:`Vous n’êtes pas connecté au cloud`,cloudBannerText:`Connectez-vous à votre compte Runeya Cloud pour la synchronisation, la messagerie et la collaboration.`,cloudBannerAction:`Se connecter au cloud`,launcherTitle:`Raccourci de bureau`,launcherLead:`Créer une entrée dans le menu des applications qui relance cette pile, sans passer par un terminal. Équivaut à runeya install-desktop.`,launcherName:`Nom`,launcherScope:`Portée`,launcherScopeProject:`Ce projet`,launcherScopeGlobal:`Global`,launcherScopeProjectHint:`Le raccourci démarre Runeya dans ce dossier.`,launcherScopeGlobalHint:`Aucun dossier épinglé : Runeya démarrera dans votre dossier personnel.`,launcherPorts:`Ports`,launcherPort:`Runeya`,launcherAgentPort:`Agent`,launcherPortsHint:`Préremplis avec les ports de cette instance. Les figer évite qu’une autre Runeya les prenne.`,launcherCreate:`Créer le raccourci`,launcherCreated:`Raccourci créé`,launcherFailed:`Création du raccourci impossible`,launcherUninstallHint:`Pour le retirer : runeya uninstall-desktop --name <nom>.`,notifications:`Notifications`,notificationsDesc:`Paramètres de notification détaillés avec désactivation par événement.`,disableAll:`Tout désactiver`,enableAll:`Tout activer`,security:`Sécurité`,securityDesc:`Clés de chiffrement et gestion des secrets.`,encryptionKey:`Clé de chiffrement`,keyHex:`Clé (hex)`,machineKey:`Clé de cette machine`,machineKeyDesc:`Elle protège les projets locaux de ce poste. Ce n'est pas celle d'une organisation : dès qu'une organisation a la sienne, c'est cette dernière qu'il faut transmettre pour la synchronisation.`,orgKeysUnlisted:`Coffres hors du cloud`,orgKeysUnlistedDesc:`Coffres absents de l'onglet Cloud : ceux d'un autre cloud, ceux d'une organisation que le cloud ne liste plus, et tous quand le cloud ne répond pas.`,orgKeysUnlistedEmpty:`Aucun coffre de ce genre sur cette machine.`,orgKeysSeeCloud:`Les organisations de vos comptes, et leur clé, sont dans l'onglet`,adoptKey:`Renseigner la clé de l'organisation`,adoptKeyDesc:`Collez la clé sous laquelle ce coffre a été chiffré. Elle est d'abord éprouvée contre le canari du coffre — rien n'est réécrit sur une saisie non vérifiée — puis le coffre est re-chiffré, avec une sauvegarde déposée avant écriture.`,adoptKeyPlaceholder:`clé en 64 caractères hexadécimaux`,adoptKeyCheck:`Vérifier`,adoptKeyMatch:`Cette clé ouvre bien ce coffre.`,adoptKeyAlreadyCurrent:`Ce coffre utilise déjà cette clé — il n'y a rien à renseigner.`,adoptKeyDiffers:`Cette clé diffère de celle qui protège ce coffre aujourd'hui. La renseigner re-chiffrera son contenu, après une sauvegarde.`,adoptKeyNoMatch:`Cette clé n'ouvre pas ce coffre.`,adoptKeyNoCanary:`Ce coffre ne porte pas de canari : impossible de vérifier la clé d'avance. Vous pouvez la renseigner quand même, mais elle ne sera confirmée qu'après coup.`,adoptKeyConfirm:`Renseigner cette clé`,masterPassword:`Master password de cette machine`,orgKeysCurrentCloud:`Ce poste est relié à {cloud}.`,orgKeysOtherCloud:`Coffres d'un autre cloud — {cloud}`,orgKeySourceOwn:`Clé propre`,orgKeySourceMachine:`Identique à la clé machine`,orgKeySourceLocked:`Coffre verrouillé — clé illisible depuis ce poste`,orgKeyCopied:`Clé de l'organisation copiée dans le presse-papiers`,unreadableTitle:`{org} : {detail}. Ces données sont chiffrées par une clé que cette machine n'a pas. Elles sont conservées intactes sur le disque et redeviendront lisibles dès que la clé sera adoptée — aucune sauvegarde ne les efface.`,unreadableSecrets:`{count} secret illisible | {count} secrets illisibles`,unreadableApiKeys:`{count} clé d'API illisible | {count} clés d'API illisibles`,unreadableConversations:`{count} conversation illisible | {count} conversations illisibles`,hideKey:`Masquer la clé`,showKey:`Afficher la clé`,copyToClipboard:`Copier dans le presse-papiers`,codeEditor:`Éditeur de code`,codeEditorDesc:`Éditeur par défaut pour ouvrir les fichiers de service.`,preferredEditor:`Éditeur de code préféré`,preferredEditorHint:`Choisissez l'éditeur qui s'ouvre lorsque vous cliquez sur le bouton éditeur d'un service. Les remplacements par service peuvent être définis depuis l'en-tête du service.`,noEditorsDetected:`Aucun éditeur de code pris en charge n'a été détecté sur ce système.`,defaultEditor:`Éditeur par défaut`,selectEditor:`Sélectionner un éditeur`,copied:`Copié`,encryptionKeyCopied:`Clé de chiffrement copiée dans le presse-papiers`,failedToCopy:`Impossible de copier dans le presse-papiers`,failedToSavePrefs:`Impossible de sauvegarder les préférences de notification. Veuillez réessayer.`,failedToSavePref:`Impossible de sauvegarder la préférence de notification. Veuillez réessayer.`,updated:`Mis à jour`,aiProviderUpdated:`Fournisseur IA mis à jour`,created:`Créé`,aiProviderAdded:`Fournisseur IA ajouté`,activeProviderSet:`Fournisseur actif défini`,activeProviderSetDesc:`Ce fournisseur sera utilisé pour les fonctionnalités IA`,deleted:`Supprimé`,aiProviderRemoved:`Fournisseur IA supprimé`,deleteParser:`Supprimer le parseur`,navLogParsers:`Parseurs de logs`,navAiProviders:`Fournisseurs IA`,navScenario:`Scénario`,navDiagnostics:`Diagnostic`,diagnosticsDesc:`Les journaux en direct de cette instance, et les autres Runeya lancés sur cette machine.`,navAbout:`À propos`,newParser:`Nouveau parseur`,editParser:`Modifier le parseur`,setActive:`Définir actif`,addProvider:`Ajouter un fournisseur`,newScenario:`Nouveau scénario`,scenarioDesc:`Créez et gérez des hiérarchies de scénarios pour les conversations IA.`,noScenarios:`Aucun scénario configuré. Créez votre première hiérarchie d'équipe.`,scenarioNodes:`{count} nœuds`,scenarioGroups:`{count} groupes`,logParsersTitle:`Parseurs de logs JavaScript`,logParsersDesc:`Parseurs globaux appliqués aux logs de service via un pipeline.`,logParsersCardDesc:`Créez des parseurs de logs JavaScript pour une logique d'analyse avancée. Ces parseurs sont évalués avant les règles regex.`,loadingParsers:`Chargement des parseurs...`,noParsers:`Aucun parseur défini. Cliquez sur "Nouveau parseur" pour en créer un.`,noAiProviders:`Aucun fournisseur IA configuré. Cliquez sur "Ajouter un fournisseur" pour en ajouter un.`,aiProvidersOrgScope:`Ces fournisseurs appartiennent à l'organisation {org} : leurs clés sont chiffrées par la sienne.`,aiProvidersMachineScope:`Ces fournisseurs appartiennent à ce poste.`,parsersOrgScope:`Ces parseurs appartiennent à l'organisation {org} : en modifier un le change pour tous ses membres.`,parsersMachineScope:`Ces parseurs appartiennent à ce poste. Ouvrez un projet cloud pour les partager avec votre équipe.`,aiProvidersDesc:`Configurez les clés API pour les fournisseurs IA. Le fournisseur actif est utilisé dans toute l'application (chat, etc.).`,aboutDesc:`Informations sur l'application et détails d'exécution.`,applicationTitle:`Application`,versionLabel:`Version`,runtimeLabel:`Environnement d'exécution`,runtimeValue:`Node.js (serveur local)`,versionTitle:`Version`,versionStatusRow:`Statut`,versionCurrent:`Version installée`,versionLatest:`Dernière version`,versionChecking:`Vérification…`,versionUpToDate:`À jour`,versionOutdated:`Mise à jour disponible`,versionAhead:`Version de développement (en avance)`,versionDev:`Version de développement`,versionUnknown:`Impossible de vérifier les mises à jour`,versionRecheck:`Revérifier`,updateAvailable:`Mise à jour disponible`,updateAvailableDetail:`Runeya {latest} est disponible (vous avez {current}).`,systemTitle:`Système`,exportMarkdown:`Exporter en Markdown`,exportDone:`Exporté`,sysPlatform:`Plateforme`,sysOs:`Système d'exploitation`,sysHostname:`Hôte`,sysCpu:`Processeur`,sysMemory:`Mémoire (libre / totale)`,sysServerUptime:`Uptime serveur`,sysOsUptime:`Uptime OS`,dockerNotDetected:`Non détecté`,editAiProvider:`Modifier le fournisseur IA`,addAiProvider:`Ajouter un fournisseur IA`,aiProviderNamePlaceholder:`ex. Ma clé Claude`,providerLabel:`Fournisseur`,commonModels:`Modèles courants :`,apiKeyLabel:`Clé API`,apiKeyLeaveEmpty:`laisser vide pour conserver l'existante`,apiKeyKeepPlaceholder:`Laisser vide pour conserver la clé actuelle`,modelOverride:`Modèle personnalisé`,modelOverridePlaceholder:`ex. {model} (défaut du fournisseur si vide)`,optionalDesc:`Description optionnelle`,enabledLabel:`Activé`,codeLabel:`Code`,quickTemplates:`Modèles rapides`,liveSimulation:`Simulation en direct`,simRunning:`En cours…`,sampleLogs:`Logs d'exemple (un par ligne)`,simOutput:`Résultat`,simEmpty:`Saisissez des logs d'exemple pour voir les résultats`,encryptionKeyDesc:`Partagez cette clé avec vos coéquipiers pour qu'ils puissent déchiffrer les mêmes données. Gardez-la secrète — quiconque possède cette clé peut lire vos secrets chiffrés.`,detectedEditors:`Éditeurs détectés`},apiDocsPage:{authentication:`Authentification`,browserJwt:`JWT navigateur`},serviceTerminal:{logs:`Journaux`,allProcesses:`Tous les processus`,active:`actif`,running:`En cours`,stopped:`Arrêté`,exitFullscreen:`Quitter le plein écran`,fullscreen:`Plein écran`,downloadLogs:`Télécharger les journaux`,clearLogs:`Effacer les journaux`,enterCommand:`Entrer une commande...`,error:`Erreur`,failedToClearLogs:`Impossible d'effacer les journaux`,noAgent:`Aucun agent`,noAgentDesc:`Aucun agent n'est assigné à ce service`,shortcutFailed:`Échec du raccourci`,commandFailed:`Échec de la commande`},serviceConfigDocker:{bootstrapCommands:`Commandes d'amorçage`,bootstrapCommandsHint:`exécutées l’une après l’autre avant le démarrage du service`,imageSource:`Source de l'image`,pullImage:`Télécharger une image`,buildDockerfile:`Construire depuis un Dockerfile`,image:`Image`,imagePlaceholder:`nginx:latest`,editDockerfile:`Modifier le Dockerfile`,closeDockerfile:`Fermer`,buildContext:`Chemin du contexte de build`,buildArgs:`Arguments de build`,argNamePlaceholder:`NOM_ARG`,argValuePlaceholder:`valeur`,addBuildArg:`Ajouter un argument`,targetStage:`Étape cible`,targetStagePlaceholder:`production`,runtimeConfig:`Configuration d'exécution`,userGroup:`Utilisateur:Groupe`,userGroupHint:`Par défaut : uid:gid de l'hôte`,networkMode:`Mode réseau`,portMappings:`Mappages de ports`,portPlaceholder:`8080:80`,addPort:`Ajouter un port`,volumes:`Volumes`,autoMount:`Monter automatiquement le chemin racine du service dans le conteneur`,volumePlaceholder:`/chemin/hôte:/chemin/conteneur`,addVolume:`Ajouter un volume`,runNative:`Exécuter la commande native dans le conteneur`,shell:`Shell`,shellPlaceholder:`sh`,shellHint:`Shell utilisé pour exécuter votre commande dans le conteneur`,isolated:`Isolé — chaque commande dans son propre conteneur`,shared:`Partagé — toutes les commandes s'exécutent dans le même conteneur`,entrypoint:`Remplacement de l'entrypoint`,entrypointPlaceholder:`/bin/sh`,cmdOverride:`Remplacement CMD`,cmdPlaceholder:`-c 'echo hello'`,addBootstrapCommand:`Ajouter une commande`,bootstrapLabelPlaceholder:`Installer les dépendances`},serviceHeader:{docker:`Docker`,native:`Natif`,openInEditor:`Ouvrir dans l'éditeur`,editorOptions:`Options de l'éditeur`,editorSettings:`Paramètres de l'éditeur`,noAgent:`Aucun agent`,openServiceUrl:`Ouvrir l'URL du service`,useDefault:`Par défaut`,cloneRepository:`Cloner le dépôt`,cwdNotExist:`Le répertoire de travail {cwd} n'existe pas.`,editorDefault:`Défaut :`,editorThisService:`Ce service :`,editorNotSet:`Non défini`,noEditorConfigured:`Aucun éditeur configuré`,setDefaultEditorHint:`Définissez un éditeur par défaut dans les Paramètres`}},n={authErrors:{default:`Something went wrong. Please try again.`,USER_ALREADY_EXISTS:`An account already exists with this email address.`,INVALID_EMAIL_OR_PASSWORD:`Incorrect email or password.`,INVALID_EMAIL:`Invalid email address.`,INVALID_PASSWORD:`Incorrect password.`,EMAIL_NOT_VERIFIED:`Your email is not verified yet. Please check your inbox.`,PASSWORD_TOO_SHORT:`The password must be at least 8 characters long.`,PASSWORD_TOO_LONG:`The password is too long.`,USER_NOT_FOUND:`No account matches this email address.`,FAILED_TO_CREATE_USER:`Could not create the account. Please try again.`,CREDENTIAL_ACCOUNT_NOT_FOUND:`No password account for this email address.`,USER_IS_ALREADY_A_MEMBER_OF_THIS_ORGANIZATION:`This user is already a member of the organization.`,USER_IS_ALREADY_INVITED_TO_THIS_ORGANIZATION:`This user has already been invited to this organization.`,YOU_ARE_NOT_ALLOWED_TO_INVITE_USERS_TO_THIS_ORGANIZATION:`You are not allowed to invite members.`,ORGANIZATION_ALREADY_EXISTS:`An organization with this identifier already exists.`,SLUG_IS_TAKEN:`This organization identifier is already taken.`,INVITATION_NOT_FOUND:`This invitation could not be found or has expired.`,YOU_ARE_NOT_ALLOWED_TO_CANCEL_THIS_INVITATION:`You are not allowed to cancel this invitation.`},nav:{dashboard:`Dashboard`,environments:`Environments`,agents:`Agents`,apiKeys:`API Keys`,apiDocs:`API Docs`,settings:`Settings`,aiChat:`AI Chat (Ctrl+Shift+Space)`,scenario:`Scenario`,services:`Services`,agentTerminal:`Terminal`,messaging:`Messaging`},terminal:{splitRight:`Split right`,splitDown:`Split down`,newTab:`New tab`,closeTab:`Close tab`,noAgent:`No connected agent`,keyBar:{label:`Terminal keys`,up:`Arrow up`,down:`Arrow down`,left:`Arrow left`,right:`Arrow right`,escape:`Escape`,tab:`Tab`,enter:`Enter`,interrupt:`Interrupt (Ctrl+C)`}},connection:{unreachable:`Server unreachable`,reconnecting:`Reconnecting…`},drawer:{aiChatTitle:`AI assistant`,expand:`Expand`,collapse:`Collapse`},validation:{requiredField:`Required field`,nameRequired:`Name is required`},actions:{save:`Save`,cancel:`Cancel`,delete:`Delete`,confirm:`Confirm`,add:`Add`,edit:`Edit`,close:`Close`,ok:`OK`,search:`Search`,refresh:`Refresh`,copy:`Copy`,start:`Start`,stop:`Stop`,restart:`Restart`,create:`Create`,import:`Import`,export:`Export`,back:`Back`,next:`Next`,finish:`Finish`,loading:`Loading…`,yes:`Yes`,no:`No`,apply:`Apply`,reset:`Reset`,status:`Status`},common:{actions:`Actions`,name:`Name`,description:`Description`,type:`Type`,status:`Status`,value:`Value`,key:`Key`,id:`ID`,url:`URL`,token:`Token`,error:`Error`,warning:`Warning`,success:`Success`,info:`Info`,none:`None`,all:`All`,unknown:`Unknown`,optional:`Optional`,required:`Required`,enabled:`Enabled`,disabled:`Disabled`,active:`Active`,inactive:`Inactive`,running:`Running`,stopped:`Stopped`,pending:`Pending`},status:{errored:`Errored`,running:`Running`,stopped:`Stopped`,starting:`Starting…`,stopping:`Stopping…`,restarting:`Restarting…`,error:`Error`,unknown:`Unknown`},setup:{title:`Setup`,localMode:`Local mode`,cloudMode:`Cloud mode`,continue:`Continue`},dashboard:{cloudProject:`Cloud`,editProject:`Edit project`,deleteProjectMessage:`Delete “{name}”? This cannot be undone.`,healthBand:`Overall health`,servicesRunning:`Services running`,servicesErrored:`Errored`,servicesStopped:`Stopped`,filterAll:`All`,filterRunning:`Running`,filterIssues:`Errors`,filterStopped:`Stopped`,noServicesForFilter:`No service matches this filter.`,globalWiki:`Global wiki`,graphTitle:`Service links`,graphHint:`Read from environment variables`,graphZoomIn:`Zoom in`,graphZoomOut:`Zoom out`,graphFit:`Fit to view`,graphLoading:`Reading links…`,graphFailed:`Links could not be read.`,graphNoServices:`No service in this project.`,graphNoLinks:`No service names another one yet.`,graphAria:`{count} link(s) between services`,graphVia:`Via:`,graphDangling:`{service} names “{slug}”, which matches no service ({keys}).`,unhealthy:`Health check failing`,title:`Dashboard`,noServices:`No services configured`,projects:`Projects`,services:`Services`,agentsConnected:`Agents Connected`,noProjects:`No projects yet. Create one from the Projects page.`,agentStatus:`Agent Status`,noAgents:`No agents registered. Go to Agents to add one.`,connected:`Connected`,disconnected:`Disconnected`},services:{title:`Services`,newService:`New service`,editService:`Edit service`,deleteService:`Delete service`,deleteConfirm:`Are you sure you want to delete this service?`,startAll:`Start all`,stopAll:`Stop all`,restartAll:`Restart all`,logs:`Logs`,clearLogs:`Clear logs`,noLogs:`No logs`},environments:{title:`Environments`,newEnv:`New environment`,editEnv:`Edit environment`,deleteEnv:`Delete environment`,deleteConfirm:`Are you sure you want to delete this environment?`,variables:`Variables`,newVariable:`New variable`,noVariables:`No variables`,global:`Global`,local:`Local`,createEnvironment:`Create Environment`},agents:{title:`Agents`,settingsDesc:`Manage the agents that execute and monitor your services.`,newAgent:`New agent`,editAgent:`Edit agent`,deleteAgent:`Delete agent`,deleteConfirm:`Are you sure you want to delete this agent?`,connected:`Connected`,disconnected:`Disconnected`,local:`Local`},settings:{title:`Settings`,general:`General`,theme:`Theme`,language:`Language`,logParsers:`Log parsers`,newParser:`New parser`,editParser:`Edit parser`,deleteParser:`Delete parser`,deleteConfirm:`Are you sure you want to delete this parser?`},apiKeys:{title:`API Keys`,newKey:`New key`,editKey:`Edit key`,deleteKey:`Delete key`,deleteConfirm:`Are you sure you want to delete this key?`,provider:`Provider`,apiKey:`API Key`},imageUpload:{attachButton:`Attach image`,limitReached:`Maximum of 5 images reached.`,errorTooLarge:`File "{name}" exceeds the 5 MB limit and was not attached.`,errorTooMany:`You can attach a maximum of 5 images per message. Some files were ignored.`,errorUnsupportedType:`File "{name}" is not supported. Please use PNG, JPG, WEBP, or GIF.`,errorNetwork:`Upload failed for "{name}". Please check your connection and try again.`,selectImages:`Select images`,removeImage:`Remove {name}`},imageHistory:{expired:`Image expired`},aiChat:{companionRawNotice:`Raw transcript — {n} turn(s), oldest first. The current verdict is the LAST one, at the bottom.`,companionMore:`More actions`,companionRawOff:`Hide raw transcript`,companionResize:`Drag to resize`,companionRaw:`Raw transcript`,companionRawHint:`Shows the whole exchange with the companion — the prompt it received and its full answers, unfiltered.`,companionDelivery_pty:`→ Message delivered to the main chat (written into its terminal).`,companionDelivery_headless:`→ Message delivered to the main chat.`,companionDelivery_failed:`→ Message NOT delivered: the main chat was unreachable.`,companionRunNow:`Run now`,companionRunNowHint:`Runs a review of the latest exchange right away, without waiting for the next turn to end.`,companionSkip_noAnswer:`Its last read ended without writing anything`,companionSkip_nothingNew:`Nothing new to review since its last read`,companionSkip_relaunchCap:`Follow-up chain stopped — it will pick up on your next message`,companionSkip_startFailed:`Its last read could not start`,companionTestBridge:`Test the bridge`,companionTestBridgeHint:`Sends a test message to the main chat through the real path — checks the plumbing, not the companion's judgement.`,companionReadingNow:`Reviewing the last turn…`,companionPitchLead:`A second AI reviews every turn of this conversation and flags what looks wrong.`,companionEnable:`Enable the companion — it reviews every turn`,companionDisable:`Disable the companion`,companionRunner:`Companion runner`,companionPanelTitle:`Companion`,companionReading:`reviewing…`,companionNoRunYet:`The companion has not reviewed a turn yet.`,companionToggleFailed:`Could not change the companion`,title:`AI Chat`,placeholder:`Your message…`,newConversation:`New conversation`,deleteConversation:`Delete conversation`,rename:`Rename`,openTerminal:`Open a terminal`,menu:`More actions`,syncTranscript:`Resync from the transcript`,terminalTitle:`Conversation terminal`,terminalKill:`Close the session (the shell is killed)`,viewGitChanges:`View Git changes`,gitChangesNotice:`These changes span the whole repository, not just this conversation.`,send:`Send`,stop:`Stop`,thinking:`Thinking…`,noConversations:`No conversations`,searchPlaceholder:`Search conversations…`,searchNoMatch:`No conversation matches`,searchArchivedCount:`{count} in the archive`,errorMessage:`(error: {message})`,unknownError:`unknown`,archiveError:`Unable to modify the archive`,layoutError:`Unable to arrange the conversations`,newSection:`New section`,newSectionName:`New section`,sectionDropHint:`Drag a conversation here`,sectionMove:`Move section`,sectionMenu:`Section actions`,sectionRename:`Rename`,sectionDelete:`Delete section`,sectionError:`Unable to change the section`,pinnedGroup:`Pinned`,pinnedDropHint:`Drag here to pin`,unpinDropHint:`Drag here to unpin`,connectionError:`(connection error: {message})`,conversationIdCopied:`Conversation ID copied`,historyLoadFailed:`Could not load the conversation history. The message was not sent.`,attachedContext:`Attached context`},aiChatPage:{tokens:{success:`Success`,error:`Error`,question:`Question`},defaultModel:`Default model`,defaultEffort:`Default effort`,scenarioRunning:`Scenario running`,noProviderConfigured:`No provider configured`,model:`Model`,configureProviderPrefix:`Configure a provider in`,generating:`Generating…`,waitingForResponse:`Waiting for your response`,unreadMessages:`Unread messages`,copyConversationId:`Copy conversation ID`,archive:`Archive`,unarchive:`Unarchive`,pin:`Pin`,unpin:`Unpin`,archives:`Archives ({count})`,noResults:`No results`,welcome:`Create a conversation or type a message`,generateNameWithAI:`Generate name with AI`,contextWindow:`Context window`,tokensUsed:`Tokens used`,tokensRemaining:`Tokens remaining`,contextSize:`Context size`,usage:`Usage`,scenarioInterrupted:`Scenario run was interrupted.`,runLog:`Run log`,finalReport:`Final report`,clickNodeHint:`Click a node to view its output`,viewPromptSent:`View the sent prompt`,prompt:`Prompt`,systemPrompt:`System prompt`,viewSystemPrompt:`View the system prompt`,noCommandAvailable:`No command available for this node.`,viewPredecessorContext:`View predecessor context`,thinking:`Thinking`,loadingOutput:`Loading output…`,noOutputForNode:`No output recorded for this node.`,waitingOutput:`Waiting for output…`,nodeNotExecuted:`This node has not been executed yet.`,replyNodePlaceholder:`Reply to node… (Enter to send)`,you:`You`,assistant:`Assistant`,startConversation:`Start the conversation…`,contextLabel:`Context:`,messagePlaceholder:`Write a message… (Enter to send, Shift+Enter for newline)`,transcribing:`Transcribing…`,stopRecording:`Stop recording`,dictateMessage:`Dictate a message`,scenario:{synthesisInProgress:`Leader synthesis in progress…`,interrupted:`The run was interrupted.`,resumeTitle:`Resume run`,resumeToAnswer:`Resume the run to answer`},noContentAvailable:`No content available.`,resumeRunnerQuestion:`Which runner do you want to use to resume?`,runner:{keep:`Same runner`,asConfigured:`As configured`,claudeCode:`Claude Code`,codex:`Codex`},resumeRunnerHintPrefix:`All remaining nodes will run with`,resume:`Resume`,executionNameOptional:`Execution name (optional):`,executionNamePlaceholder:`Ex: March 3 test`,aiRunner:`AI runner:`,agentOverride:`Agent`,renameConversation:`Rename conversation`,newName:`New name:`,confirmDeleteConversation:`Confirm deletion of this conversation? This action is irreversible.`,copied:`Copied`,conversationIdLabel:`Conversation ID: {id}`,copyFailed:`Copy failed`,createConversationError:`Unable to create conversation: {message}`,loadConversationsError:`Unable to load conversations: {message}`,conversationRenamed:`Conversation renamed`,generateNameFailed:`Unable to generate a name`,promptWithLabel:`Prompt - {label}`,newChat:`New Chat`,whichRunner:`Which runner do you want to use?`,runnerNotInstalled:`{runner} not installed`,startScenario:`Start scenario conversation`,describeUserNeed:`Describe the initial user need. This brief will be written in <code>USER_REQUEST.md</code> for the company.`,enhanceWithAI:`Enhance with AI`,modelOverrideOptional:`Model override (optional)`,notAvailableWithCodex:`Not available with Codex`,diffContextAttached:`Diff context attached`,genericContext:`Attached context`,typeATask:`Type a task and press Send to start the scenario run.`,clickOrgChartHint:`Click on a node in the org chart to see their output.`},agentPage:{registerAgent:`Register Agent`,retry:`Retry`,empty:`No agents registered. Register your first agent to start deploying services.`,uptime:`Uptime`,lastSeen:`Last Seen`,runners:`Runners`,actions:`Actions`,never:`Never`,editAgent:`Edit agent`,removeAgent:`Remove agent`,remove:`Remove`,localCannotEdit:`Local agent cannot be edited`,localCannotRemove:`Local agent cannot be removed`,toast:{updated:`Agent updated`,updatedDetail:`"{name}" has been updated.`,registered:`Agent registered`,registeredDetail:`"{name}" has been registered.`,removed:`Agent removed`,saveFailed:`Failed to save agent`,removeFailed:`Failed to remove agent`},confirm:{removeHeader:`Remove Agent`,removeMessage:`Remove agent "{name}"? It will no longer be reachable from this server.`},dialog:{editHeader:`Edit Agent`,registerHeader:`Register Agent`,namePlaceholder:`production-agent-01`,urlPlaceholder:`http://localhost:4001`,urlHint:`The HTTP URL where the agent's tRPC server is listening.`,passphrase:`Passphrase`,passphrasePlaceholder:`Agent passphrase`,passphraseKeep:`Leave empty to keep current`,passphraseHint:`The passphrase configured on the agent for authentication.`,owner:`Belongs to`,ownerMachine:`This machine`,ownerHint:`An organization's agent is kept in its vault and follows it; 'this machine' means an agent that only runs processes here.`,testConnection:`Test Connection`,testFailed:`Test failed`,connectionFailed:`Connection failed`},passthrough:{titleShort:`Passthrough Env`,header:`Passthrough Environment - {name}`,description:`Configure environment variable names to pass through from the agent's host environment to all processes it runs. Service-level variables take priority over passthrough values.`,empty:`No passthrough variables configured.`,placeholder:`e.g. DISPLAY, HOST, SSH_AUTH_SOCK`,invalidVarName:`Invalid variable name (must match [A-Za-z_][A-Za-z0-9_]*)`,alreadyInList:`Already in list`,undefined:`(undefined)`,notSaved:`(not saved)`,updated:`Passthrough env updated`,saveFailed:`Failed to save passthrough env`}},processControls:{startFailed:`Start failed`,startServiceFailed:`Failed to start service`,stopFailed:`Stop failed`,stopServiceFailed:`Failed to stop service`,restartFailed:`Restart failed`,restartServiceFailed:`Failed to restart service`},processCard:{healthy:`Healthy`,unhealthy:`Unhealthy`,processId:`Process ID`,uptime:`Uptime`,restarts:`Restarts`,pid:`PID`},processMetrics:{cpu:`CPU`,memory:`Memory`,bytes:`{count} bytes`},serviceDetail:{removed:`Removed`,deleted:`Service deleted`,notFound:`Service not found.`,deleteConfirmHeader:`Delete service`,deleteConfirmMessage:`Are you sure you want to delete "{name}"? This action cannot be undone.`},errors:{unexpected:`An unexpected error occurred`,network:`Network error`,notFound:`Not found`,unauthorized:`Unauthorized`,forbidden:`Access denied`,serverError:`Server error`},language:{label:`Language`,fr:`Français`,en:`English`},aiChatPanel:{expand:`Expand`,collapse:`Collapse`,clear:`Clear conversation`,close:`Close`,placeholder:`Write a message… (Enter to send)`,empty:`Ask the AI assistant a question`},themePicker:{title:`Theme picker`,gradient:`Gradient`,mode:`Mode`,dark:`Dark`,light:`Light`,accentColor:`Accent color`,customColor:`Custom`,enableGradient:`Enable gradient`,disableGradient:`Disable gradient`},uiKit:{progressSpinner:{loading:`Loading`},dialog:{close:`Close`,maximize:`Maximize`,restore:`Restore`},toast:{close:`Close notification`},confirm:{accept:`Yes`,reject:`No`},password:{show:`Show password`,hide:`Hide password`,weak:`Weak`,medium:`Medium`,strong:`Strong`},select:{open:`Show options`,clear:`Clear`,empty:`No available options`,noResults:`No results found`},multiSelect:{selected:`{count} item selected | {count} items selected`,remove:`Remove {label}`},colorPicker:{open:`Pick a color`},datePicker:{previous:`Previous month`,next:`Next month`,today:`Today`,clear:`Clear`},dataTable:{expand:`Expand row`,collapse:`Collapse row`,firstPage:`First page`,previousPage:`Previous page`,nextPage:`Next page`,lastPage:`Last page`,rowsPerPage:`Rows per page`}},serviceSidebar:{addService:`Add service`,searchPlaceholder:`Search service…`,noProject:`No project selected.`,noServices:`No services found.`,healthHealthy:`Health check: healthy`,healthUnhealthy:`Health check: unhealthy`,healthWaiting:`Health check: waiting...`,defaultGroup:`Others`,badgeErrored:`Errored services`,badgeHealthy:`Healthy services`,badgeRunning:`Running services`},git:{tabChanges:`Changes`,tabHistory:`History`,tabBranches:`Branches`,tabStash:`Stash`,stash:`Stash`,stashPop:`Apply & remove`,stashApply:`Apply (keep)`,stashDrop:`Drop`,stashes:`Stashes ({count})`,noStashes:`No stash`,stashed:`Changes stashed`,stashPopped:`Stash popped`,stashApplied:`Stash applied`,stashDropped:`Stash dropped`,workingTreeClean:`Working tree clean`,selectFileForDiff:`Select a file to view its diff`,openInEditor:`Open in {editor}`,askAiAboutDiff:`Ask AI about this diff`,aiChatDiffPrompt:`Here is the diff for the file {path}. Can you review it?`,staged:`Staged ({count})`,unstaged:`Unstaged ({count})`,untracked:`Untracked ({count})`,unstageAll:`Unstage all`,stageAll:`Stage all`,unstage:`Unstage`,stage:`Stage`,discard:`Discard`,diff:`Diff: {path}`,commitPlaceholder:`Commit message…`,generateMessage:`Generate`,noProviderMessage:`No AI provider configured. Add one in settings to generate commit messages.`,goToSettings:`Go to Settings`,commit:`Commit`,noCommits:`No commits yet`,newBranch:`New branch`,branchNamePlaceholder:`branch-name`,createAndCheckout:`Create & checkout`,localBranches:`Local branches ({count})`,remoteBranches:`Remote branches`,current:`current`,checkout:`Checkout`,errorTitle:`Git error`,agentUnavailable:`Agent unavailable`,agentUnavailableDetail:`The agent for this service is not reachable. Check that it is running.`,retry:`Retry`,commitRequired:`Commit message is required`,committed:`Committed`,pushed:`Pushed`,pulled:`Pulled`,fetched:`Fetched`,fetchedDetail:`Remote refs updated`,checkedOut:`Checked out`,branchCreated:`Branch created`,done:`Done`,pull:`Pull`,push:`Push`,fetch:`Fetch`,merge:`Merge`,rebase:`Rebase`,merged:`Merged`,rebased:`Rebased`},scenarioNodeEditor:{label:`Label`,systemPrompt:`System prompt`,reportsTo:`Reports to`,noParent:`No parent`,aiRunner:`AI Runner`,model:`Model`,modelAuto:`Auto-selected by Codex context.`,canSpawnNodes:`Can spawn additional nodes during a run`,injectParentOutputs:`Inject all direct parent outputs as context`,injectedAncestorIds:`Additional ancestor outputs to inject`,injectedAncestorIdsPlaceholder:`Select ancestor nodes…`,entryPoint:`(entry point of the run)`,question:`Question`,questionPlaceholder:`Question asked to the user during the run…`,prompt:`Prompt`,department:`Department`,modelHaiku:`Haiku (Fast)`,modelSonnet:`Sonnet (Balanced)`,modelOpus:`Opus (Powerful)`},scenarioEditor:{placeholderName:`Scenario name`,iconHint:`Tabler icon name (e.g. ti-building, ti-users)`,placeholderDescription:`Description (optional)`,tooltipSave:`Save`,tooltipPublish:`Publish (stored in settings.json)`,tooltipUnpublish:`Unpublish (stored in settings.private.json)`,noPreset:`No preset`,traversalHierarchical:`Hierarchical`,traversalTopological:`Topological`,multiParentNoticeTitle:`Connection replaced`,multiParentNoticeMessage:`In hierarchical mode, a node can only have one parent. The previous connection was replaced. If you need a node to receive outputs from multiple parents, consider switching to Topological mode.`,dontShowAgain:`Don't show this again`,switchToHierarchicalTitle:`Switch to Hierarchical mode`,switchToHierarchicalMessage:`The following connections will be removed (nodes can only have one parent in hierarchical mode):`,traversalHelp:`<b>Hierarchical</b> (default) — The leader explicitly delegates to its direct subordinates via NEXT_PERSON. Each manager can review and re-assign after its children have returned their work. Branches descend in parallel.<br><br><b>Topological</b> — Simple top-down traversal, parent before child, without branch selection or review loops. Each person only receives the output of its direct parent.`,deleteGroupTitle:`Delete group`,deleteGroupMessage:`This group contains {count} node(s) which will also be deleted. This cannot be undone.`,tooltipAutoLayout:`Auto-layout`,tooltipImport:`Import`,tooltipExport:`Export`,tooltipCloseAI:`Close AI`,tooltipGenerateAI:`Generate with AI`,aiPanelTitle:`Generate with AI`,aiProvider:`Provider`,aiSelectProvider:`Select provider`,aiNoProvider:`No AI provider configured. Go to <strong>Settings → AI</strong>.`,aiPromptPlaceholder:`Describe your scenario: groups, roles, hierarchy…`,aiGenerating:`Generating…`,aiModify:`Modify`,aiGenerate:`Generate`,aiHint:`Ctrl+Enter to generate`,aiValidJson:`Valid JSON`,aiRawResponse:`Raw response`,aiApply:`Apply`,groupName:`Name`,groupDescription:`Description`,groupDescriptionPlaceholder:`Describe this department purpose and responsibilities…`,groupAccentColor:`Accent color`,groupResetColor:`Reset color`,aiNodeDesc:`Automated AI agent`,askNodeDesc:`Waits for user input`,exportHeader:`Export Scenario`,copyJson:`Copy JSON`,importHeader:`Import Scenario`,importPlaceholder:`Paste scenario JSON here…`,applyPresetHeader:`Apply preset`,applyPresetMessage:`Loading this preset will replace the current nodes and groups with the preset's initial data. Your current canvas will be lost.`,applyPresetConfirm:`Apply preset`,toast:{noGroupsSummary:`No groups`,noGroupsDetail:`Add a group first before adding a node.`,groupRequiredSummary:`Group required`,groupRequiredDetail:`Please select a group for this node.`,leaderSummary:`Leader`,leaderDetail:`Change leader before deleting this node.`,notFoundSummary:`Not found`,notFoundDetail:`Scenario not found`,validationSummary:`Validation`,nameRequired:`Scenario name is required.`,nodeRequired:`At least one node is required.`,leaderRequired:`Exactly one node must be set as leader.`,createdSummary:`Created`,createdDetail:`Scenario created.`,savedSummary:`Saved`,savedDetail:`Scenario updated.`,appliedSummary:`Applied`,appliedDetail:`Scenario generated by AI.`,copiedSummary:`Copied`,importedSummary:`Imported`,invalidJson:`Invalid JSON returned by AI`}},kanban:{nav:`Kanban`,issuesNav:`Issues`,issues:{title:`Issues`,empty:`No issue list yet. Create one to get started.`,dialogs:{newBoard:`New issue list`}},cloud:{noProjectOrg:`Boards belong to an organization. The open project is local: open a project from an organization to see its boards.`,orgNotAccessible:`The open project belongs to an organization this account cannot access: its boards are not available here.`,notConnectedTitle:`Boards live in your organization`,notConnectedDesc:`Link this machine to Runeya Cloud to find the boards shared with your team.`,connectAction:`Connect to the cloud`,readOnlyNotice:`The kanban is a paid feature. Your boards stay readable, but can no longer be edited.`,upgradeCta:`Upgrade`},list:{menu:`Templates and settings`,boardTemplates:{manage:`Board templates`,intro:`A template stores a board’s AI instructions and columns. Save one from a board’s ⋮ menu.`,empty:`No board template yet.`,confirmDeleteHeader:`Delete template`,confirmDeleteMessage:`Delete the template “{name}”? Boards already created are unaffected.`,pickLabel:`Start from a template`,pickPlaceholder:`Empty board`,pickHint:`Columns created: {columns}`,noColumns:`none`},title:`Kanban Boards`,tabs:{active:`Active`,archived:`Archived ({count})`},empty:`No boards yet. Create one to get started.`,archivedEmpty:`No archived boards.`,searchPlaceholder:`Search a board…`,noResults:`No board matches “{query}”.`,cards:`{count} card(s)`,archive:`Archive`,edit:`Edit`,boardMenu:`Board actions`,history:{open:`View history`,title:`History — {name}`,hint:`Everything that happened on the board, newest first. AI comments are not shown.`,loading:`Loading`,more:`Show more`,error:`The history could not be loaded.`,events:{board_renamed:`Board renamed from "{from}" to "{to}"`,column_added:`Column "{to}" added`,column_renamed:`Column "{from}" renamed to "{to}"`,column_deleted:`Column "{to}" deleted`,card_deleted:`Card deleted:`}},flow:{open:`View statistics`,title:`Flow — {name}`,granularityLabel:`Time unit`,granularity:{day:`1 d`,week:`7 d`,month:`1 mo`,year:`1 yr`},periodLabel:`Period`,weekOf:`week of {date}`,entries:`In`,exits:`Out`,totalEntries:`{count} in`,totalExits:`{count} out`,hint:`In: cards created or reopened. Out: cards archived or moved into a finished-cards column.`,empty:`No movement over this period`,loading:`Loading`,error:`The flow could not be loaded.`},activity:{distribution:`Cards per column: {detail}`,morePeople:`{count} more people`,weekShort:`7 d`,weekTitle:`Last 7 days: {created} card(s) in, {finalized} finalized (archived or moved into a done column).`,weekReopened:`Cards in include {count} reopened.`},delete:`Delete`,restore:`Restore`,quota:`{used}/{limit} boards`,nameLabel:`Name`,descriptionLabel:`Description`,instructionsLabel:`AI instructions`,instructionsPlaceholder:`e.g. a card moves to "In progress" as soon as an agent works on it, and to "To review" only once tests pass.`,instructionsHint:`Free text injected into the context of AI agents working on this board.`,projects:{label:`Projects`,placeholder:`No project`,hint:`The board only shows up in these projects. With no project, it stays visible everywhere.`,filterLabel:`Filter by project`,filterAll:`All projects`,filterNone:`No project`,sectionCurrent:`This project`,sectionCurrentEmpty:`No board attached to this project yet.`,sectionUnassigned:`Organization-wide`},cancel:`Cancel`,create:`Create`,save:`Save`,templates:{manage:`Manage templates`,new:`New template`,intro:`Templates prefill a card's body when it is created.`,empty:`No template yet.`,nameLabel:`Template name`,contentLabel:`Content (markdown)`,contentPlaceholder:`Write the card body this template will apply…`,contentHint:`This text is prefilled into the card body.`,confirmDeleteMessage:`Delete the template "{name}"?`,confirmDeleteHeader:`Confirm deletion`},close:`Close`,dialogs:{newBoard:`New Board`,editBoard:`Edit Board`,confirmDeleteMessage:`Delete board "{name}" permanently?`,confirmDeleteHeader:`Confirm Delete`}},board:{readOnly:{badge:`Read-only`},templates:{pickHeader:`Pick a template`,pickIntro:`Start from a template, or from a blank card.`,blank:`Blank card`},actions:{menu:`Board actions`},aiPopulate:`AI Populate`,archiveBoard:{header:`Archive board`,confirm:`Archive “{name}”? It leaves the active boards and moves to the “Archived” tab.`,restoreHeader:`Restore board`,restoreConfirm:`Restore “{name}” among the active boards?`},deleteBoard:{action:`Delete board`},editBoard:{action:`Edit board`,header:`Edit board`,save:`Save`},saveTemplate:{action:`Save as template`,header:`Save this board as a template`,hint:`The AI instructions and the {count} column(s) are saved. Cards are not.`,namePlaceholder:`Template name`,save:`Save`},archive:{open:`Archive`,title:`Archive`,hint:`Cards taken off the board. Nothing is lost: each one returns to the column it left.`,searchPlaceholder:`Search the archive…`,allColumns:`All columns`,columnFilter:`Filter by original column`,loading:`Loading…`,empty:`No archived card.`,noMatch:`No archived card matches.`,truncated:`Too many archived cards to show them all — narrow the search.`,fromColumn:`From “{column}”`,restore:`Put back on the board`,cardTooltip:`Archive the card`,cardAction:`Archive`,allFiltered:`All {count} archived cards are hidden by the board's filters.`,filteredOut:`{count} card(s) hidden by the board's filters.`,pickMove:`Move`,pickCopy:`Copy`,editorPick:`Unarchive into…`,editorPickHint:`Archived card: pick a column to move it there or put a copy there.`,editorReadOnly:`Archived card: read-only. Unarchive it to put it back on the board and edit it again.`},searchPlaceholder:`Search cards…`,searchTruncated:`too many results`,placements:{label:`Locations`,home:`Origin`,open:`Open this board`,remove:`Remove from this board`,add:`Also place on a board…`,addExisting:`Add an existing card…`,dialogHeader:`Add an existing card to “{column}”`,dialogIntro:`The card stays on its board and also shows here. Changes made here show on both.`,searchPlaceholder:`Search a card…`,searching:`Searching…`,noResult:`No card found.`,fromBoard:`Card from the “{board}” board`,board:`Board`,column:`Column`},issues:{openCount:`{count} open`,closedCount:`{count} closed`,new:`New issue`,opened:`opened {when}`,openedBy:`opened {when} by {name}`,stateOpen:`Open`,stateClosed:`Closed`,emptyOpen:`No open issue.`,emptyClosed:`No closed issue.`,closed:`closed {when}`,close:`Close issue`,reopen:`Reopen issue`,confirmCloseHeader:`Close issue`,confirmCloseMessage:`Close “{title}”? It moves to closed issues, where it can be reopened.`,selectAll:`Select all`,select:`Select “{title}”`,selectedCount:`Selected: {count}`,placeSelected:`Also place on a board…`,clearSelection:`Clear selection`,placed:`Issues placed: {done}`,placedPartly:`Issues placed: {done}. Failed: {failed} (already on that board or refused), they stay selected.`,cancel:`Cancel`},view:{defaultColumn:`To do`},column:{menu:`Column actions`,dragHandle:`Move column`,deleteTooltip:`Delete column`,collapse:`Collapse column`,subscribe:`Follow movements`,unsubscribe:`Stop following`,markDone:`Done column`,unmarkDone:`Stop counting as done`,doneBadge:`Done column: arriving here counts as finalized`,subscribeTitle:`Follow this column`,subscribeIntro:`Choose which card movements in "{column}" you get notified about, and on which channel.`,subscribeEventsLabel:`Movements notified`,subscribeKind:{entered:`A card enters the column`,left:`A card leaves the column`,created:`A card is created in it`,deleted:`A card is deleted from it`},subscribeNotReorder:`Plain reordering is never notified`,subscribeChannelsLabel:`Delivery channels`,subscribeChannel:{email:`Email`,chat:`Internal messaging`},subscribeTargetLabel:`Subscribe`,subscribeTargetMe:`Me`,unsubscribeTeam:`Unsubscribe the team`,subscribeTeamsFollowing:`Teams following this column: {teams}.`,subscribeOwnActions:`Your own actions are never notified back to you.`,subscribeConfirm:`Follow`,expand:`Expand column`,titlePlaceholder:`Column title…`,addCard:`Add card`,dropZone:`Drop cards here`,confirmDeleteMessage:`Delete column "{title}" and its {count} card(s)?`,confirmDeleteHeader:`Confirm Delete`},addColumn:`Add Column`,addColumnButton:`Add`,groups:{title:`Column groups`,lead:`A group spans several columns without being one: it holds no cards. Drag a column or a group onto a band to file it there.`,newPlaceholder:`Group name`,create:`Create`,empty:`No groups yet.`,loose:`Ungrouped`,looseEmpty:`Every column is filed.`,columnCount:`{count} column(s)`,moveUp:`Move left`,moveDown:`Move right`,deleteHeader:`Delete group`,deleteConfirm:`Delete "{title}"? Its columns are not deleted: they move up one level.`},filters:{title:`Filters`,open:`Filter cards`,reset:`Clear all`,clearOne:`Remove this filter`,priority:`Priority`,priorityAdd:`Filter on priority`,priorityHint:`A card with no priority passes none of these comparisons.`,priorityOp:{eq:`Exactly`,gte:`At least`,lte:`At most`,none:`No priority`},noGroups:`No group`,noAssignees:`Unassigned`,noFamily:`No linked card`,colors:`Colours`,groups:`Groups`,groupsPlaceholder:`All groups`,assignees:`Assignees`,assigneesPlaceholder:`Everyone`,creators:`Created by`,creatorsPlaceholder:`All authors`,family:`Belonging`,familyPlaceholder:`Pick cards…`,familyHint:`Keeps the chosen cards and their whole tree: parents, sub-cards, and so on.`},card:{deleteTooltip:`Delete`,defaultTitle:`New Card`,untitled:`Untitled`,inColumn:`In column "{name}"`,hasParent:`Depends on another card`,lastCommentBy:`Last comment: {name}`,lastCommentByAi:`an AI`,deadlineTooltip:`Due date`,hasChildren:`Sub-cards`},conversations:{providers:{intercom:`Intercom`,hubspot:`HubSpot`},sideLabel:`Support conversations`,linkFrom:`Link a {name} conversation`,linkTitle:`Link a {name} conversation`,linkedCount:`{name}: {count} linked`,searchPlaceholder:`Conversation title, number or link`,search:`Search`,noResults:`No conversation found.`,empty:`No conversation linked to this card.`,alsoOn:`Also followed by:`,link:`Link`,linked:`Linked`,unlink:`Unlink the conversation`,resync:`Sync the conversation`,openAtProvider:`Open`,openAtProviderHint:`Opens the conversation in {name}: requires an account on this {name} workspace.`,internal:`internal note`,missingFiles:`File not retrieved: {names}`,filesPending:`retrieving files`,filesPendingNames:`Retrieving: {names}`,messages:`{count} message(s)`,showEarlier:`Show {count} earlier messages`,state:{open:`Open`,resolved:`Resolved`},origin:{auto:`created automatically`,manual:`linked by hand`},role:{customer:`customer`,agent:`team`}},editor:{header:`Edit Card`,cancel:`Cancel`,close:`Close`,unsavedHint:`Unsaved changes`,confirmDiscardMessage:`This card has unsaved changes. Discard them?`,confirmDiscardHeader:`Unsaved changes`,discard:`Discard`,keepEditing:`Keep editing`,save:`Save`,tabs:{edit:`Edit`,relations:`Relations ({count})`,comments:`Comments ({count})`,history:`History ({count})`,conversations:`{name} ({count})`},titleLabel:`Title`,contentLabel:`Content`,contentPlaceholder:`Write your card content…`,createdBy:`Created by {name}`,imagesLabel:`Images`,filesLabel:`Files`,attachFile:`Attach files`,removeFile:`Remove this file`,uploading:`Uploading…`,uploadTooLarge:`file too large (55 MB maximum)`,uploadEmpty:`empty file — there is nothing to send`,uploadUnavailable:`file storage is not configured on the cloud — only images can be attached`,uploadFailed:`upload failed`,downloadFailed:`download failed — the file is missing or the cloud is unreachable`,viewerDownload:`Download`,viewerEmpty:`Empty document.`,viewerFailed:`This file could not be displayed. Download it to open it.`,viewerTruncated:`Preview truncated — download the file to see all of it.`,attachImage:`Attach image`,assignMe:`Assign me`,assigneesLabel:`Assigned to`,assigneesPlaceholder:`Nobody`,assigneesHint:`People you add receive a message.`,assignedDetail:`Assigned to {names}`,ancestryLabel:`Ancestry`,priorityLabel:`Priority`,deadlineLabel:`Due date`,deadlineNone:`No due date`,deadlineClear:`Clear the due date`,deadlineToday:`Due today.`,deadlineIn:`In {count} day(s).`,deadlineOverdue:`{count} day(s) overdue.`,priorityAdd:`Set a priority`,priorityClear:`Remove the priority`,priorityNone:`No priority set.`,groupsLabel:`Groups`,groupsPlaceholder:`Add a group…`,groupsHint:`Free-form labels. Type to create one.`,groupsCreate:`Create "{name}"`,colorLabel:`Colour`,colorNone:`No colour`,colorHint:`A stripe on top of the card. What it means is up to you.`,colorCustom:`Custom colour`,colorWheel:`Colour wheel`,colorBrightness:`Brightness`,colorHex:`Hex code`,colorHistory:`Recent`,columnSettingLabel:`Column`,columnGroupHere:`This board`,columnSearchPlaceholder:`Search a board or column…`,columnSearchEmpty:`No column matches.`,moveToBoardHint:`Picking a column on another board moves the card there, with its comments, attachments and assignees.`,parentLabel:`Parent card`,parentSearchPlaceholder:`Search a card…`,parentEmpty:`No other card on this board.`,parentEmptyState:`This card does not depend on any other.`,parentAdd:`Link to a parent card…`,parentReplace:`Replace the parent card…`,parentAway:`On board "{board}"`,childrenLabel:`Sub-cards ({count})`,childrenEmptyState:`No card depends on this one.`,childAdd:`Add a sub-card…`,openOnBoard:`Open on board "{board}"`,childOpen:`Open card`,detach:`Remove link`,relationsEmpty:`No linked card.`,relationsHereBoard:`This board`,relationsColCard:`Card`,relationsColBoard:`Board`,relationsColColumn:`Column`,relationsColAssignees:`Assignees`,relationsColComments:`Comments`,relationsColActions:`Actions`,moveToBoardHeader:`Move card`,moveToBoardConfirm:`Move this card to “{board}”, column “{column}”? It will leave this board.`,conversationsLabel:`Available AI conversations`,actionsLabel:`Actions`,launchAi:`Launch AI conversation`,sendToChat:`Send to messaging`,openCardLink:`Open the card`,columnLabel:`Column: {column}`,deleteCard:`Delete this card`,confirmDeleteMessage:`Delete card "{title}" permanently? Its history will be lost. Archive it instead to keep it.`,confirmDeleteHeader:`Confirm Delete`,confirmRemoveImageMessage:`Remove this image from the card?`,confirmRemoveImageHeader:`Confirm Remove`},comments:{placeholder:`Write a comment…`,empty:`No comments yet.`,authorAi:`AI`,hideAi:`Hide AI messages`,allAiHidden:`All comments come from the AI and are hidden.`,authorYou:`You`,edit:`Edit`,delete:`Delete`,edited:`(edited)`,showMore:`Show more`,showLess:`Show less`,confirmDeleteMessage:`Delete this comment?`,confirmDeleteHeader:`Confirm deletion`,attach:`Attach files`,send:`Comment`,sendHint:`Ctrl + Enter`},history:{empty:`No activity recorded yet.`,by:`by {name}`,byAi:`by the AI`,events:{created:`Card created`,edited:`Content edited`,moved:`Moved`,image_added:`Image attached`,image_removed:`Image removed`,title_changed:`Title changed`,archived:`Archived`,unarchived:`Unarchived`,conversation_started:`Conversation started`,scenario_started:`Scenario launched`,comment:`Comment`}},aiStatus:{companion:`Companion is reviewing…`,streaming:`AI in progress…`,unread:`New AI message`},launchAiDialog:{header:`Launch AI conversation`},populateDialog:{header:`AI Populate Board`,hint:`Describe what you want. The AI will create cards and distribute them across existing columns.`,placeholder:`Ex: An agile project management board with user stories for a mobile delivery app…`,generate:`Generate`,provider:`Provider`},queue:{tooltip:`Add to AI queue`,tooltipInQueue:`Remove from AI queue`,addColumnTooltip:`Add column to AI queue`,panelHeader:`AI Queue`,empty:`Queue is empty.`,concurrency:`Max simultaneous tasks`,stopAll:`Stop all`,waitingSection:`Waiting ({count})`,runningSection:`Running ({count})`,addColumnDialog:{header:`Add column to AI queue`,runner:`Runner`,scenario:`Scenario (optional)`,noScenario:`None`,confirm:`Add to queue`}}}},notifications:{title:`Notifications`,markAllRead:`Mark all read`,clear:`Clear`,empty:`No notifications`,openResource:`Open resource`,justNow:`just now`,minutesAgo:`{n}m ago`,hoursAgo:`{n}h ago`,daysAgo:`{n}d ago`},logDetails:{cwd:`Working directory`,header:`Log Details`,type:`Type`,rawMessage:`Raw message`,serviceId:`Service ID`,viewProcess:`View Process`,pid:`PID`,timestamp:`Timestamp`,stream:`Stream`,metadata:`Metadata`,notAvailable:`Not available`},projectList:{newProject:`New Project`,descriptionLabel:`Description`,descriptionPlaceholder:`A brief description...`,created:`Project created`,createdDetail:`"{name}" has been created.`},projectDetail:{searchServices:`Search services...`,createNew:`Create New`,nameUpdated:`Name updated`,projectDeleted:`Project deleted`,deleteProjectTitle:`Delete Project`,cloud:{localPath:`Location on this machine`},deleteProjectCancel:`Cancel`,deleteProjectConfirm:`Delete`},auditPage:{timeColumn:`Time`,actionColumn:`Action`,entityTypeColumn:`Entity Type`,entityIdColumn:`Entity ID`,userColumn:`User`,detailsColumn:`Details`,title:`Audit Log`,allActions:`All Actions`,actionCreate:`Create`,actionUpdate:`Update`,actionDelete:`Delete`,actionDeploy:`Deploy`,actionStart:`Start`,actionStop:`Stop`,actionRestart:`Restart`,allTypes:`All Types`,typeProject:`Project`,typeService:`Service`,typeProcess:`Process`,typeAgent:`Agent`,filterByAction:`Filter by action`,filterByType:`Filter by type`},serviceConfigEnv:{editVarsHeader:`Edit Environment Variables`,previewHeader:`Preview Final Configuration`,editingVarsFor:`Editing variables for {name} in environment`,injectedVarsInfo:`Environment variables that will be injected into this service:`,noActiveEnv:`No active environment selected for this project.`,noVarsConfigured:`No variables configured for this service. Click "Edit Variables" to add some.`,passthroughInfo:`These variables are passed through from the agent's host environment.`,activeEnvironment:`Active Environment:`,inheritsFrom:`Inherits variables from "{name}"`,isolated:`Isolated — no inheritance from "{name}"`,envVars:`Environment Variables`,editVariables:`Edit Variables`,preview:`Preview`,inheritedVars:`Inherited variables`,undefined:`(undefined)`,error:`Error`,failedToUpdateInheritance:`Failed to update inheritance`,failedToLoadPreview:`Failed to load preview`,restartTitle:`Restart`,startTitle:`Start service?`,restartConfirmMsg:`Restart "{name}" to apply the new environment variables?`,startConfirmMsg:`Start "{name}" to apply the new environment variables?`,notNow:`Not now`,serviceRestarted:`Service restarted`,serviceStarted:`Service started`,failedToAction:`Failed to {action}`},variablesTable:{empty:`No variables defined. Click "Add Variable" to add one.`,emptyReadonly:`No variables defined.`,override:`override`,overrideTooltip:`Overrides an inherited variable with the same key`,localOverride:`Local override`,localOverrideTooltip:`Overridden on this machine, from the “{env}” environment`,editParentTitle:`Edit the source variable`,editParentHeader:`Edit a shared variable`,editParentWarning:`You are about to edit “{key}” in the “{env}” environment. This change is global: it applies to everything using this variable.`,editParentImpact:`Impact`,editParentDefines:`defines`,editParentInherits:`inherits`,editParentLoading:`Analysing usages…`,editParentNoUsage:`No other usage found in this project.`,editParentNotFound:`Source variable not found`,editParentConfirm:`Edit globally`,reveal:`Reveal`,overriddenOnly:`Overridden only`,addVariable:`Add Variable`},settingsAiProviders:{anthropicDesc:`Go to the Anthropic console, create an account if needed, then go to "API Keys" to generate a key.`,openaiDesc:`Log in to the OpenAI platform, then go to "API keys" to create a new secret key.`,mistralDesc:`Go to the Mistral AI console and create an API key in the "API Keys" section.`,groqDesc:`Sign up on Groq Cloud and generate a key in "API Keys". Groq offers very fast inference via its LPU hardware.`,ollamaDesc:`Ollama runs LLMs locally on your machine. No API key required. Make sure Ollama is running on port 11434.`,ollamaUrlLabel:`ollama.com → Download`},apiKeysPage:{title:`API Keys`,desc:`Manage API keys to grant AI agents scoped access to your services and environments.`,updated:`Updated`,keyUpdated:`Key updated`,keyCreated:`Key created`,error:`Error`,deleted:`Deleted`,keyRevoked:`Key revoked`,keyRenewed:`Key renewed`,oldKeyRevoked:`The old key is immediately revoked.`,scopedKeysInfoPrefix:`Scoped API keys, usable by AI agents via`,scopedKeysInfoRoute:`GET /<apikey>/llms.txt`,newApiKey:`New API key`,loading:`Loading…`,noApiKey:`No API key yet. Create one to control access to your instance.`,shareable:`shareable`,createdOn:`Created on`,copied:`Copied!`,copyUrl:`Copy URL`,copyKeyOnly:`Copy key only`,aiIntegration:`AI Integration`,written:`Written!`,writeFileToDisk:`Write file to disk`,write:`Write`,copy:`Copy`,editKey:`Edit key`,revokeKey:`Revoke key`,editOrNewTitle:`Edit key`,newTitle:`New API key`,keyNameLabel:`Key name`,ownerLabel:`Belongs to`,ownerMachine:`This machine`,servicesAndPermissions:`Services & permissions`,searchService:`Search a service…`,noResults:`No results.`,removeService:`Remove this service`,read:`Read`,secrets:`Secrets`,writePermission:`Write`,addEnvironment:`+ Add an environment…`,addService:`+ Add a service…`,importMissing:`Import missing`,noServicesAvailable:`No services available.`,allServicesAdded:`All services have been added.`,importMissingHeader:`Import missing services`,willBeAdded:`will be added with the configuration below.`,environments:`Environments`,cancel:`Cancel`,importServices:`Import {count} service(s)`,storageLabel:`Configuration storage`,privateOnly:`Private only`,shareableLabel:`Shareable`,renewKey:`Renew key`,saveOrCreate:`Save`,createKey:`Create key`,renewKeyHeader:`Renew key`,renewBodyLine1:`This action generates a new random key.`,renewBodyLine2:`The old key will be revoked immediately — all tools using it will need to be updated.`,scopeSummary:`{count} service exposed | {count} services exposed`,privateOnlyHint:`not committed`,shareableHint:`committable`},builtins:{serviceName:`The service name.`,serviceId:`The service identifier.`,servicePort:`The first declared port; the others are written service.PORT_2, _3…`,serviceUrl:`The service URL, one per port (service.URL_2, _3…): the local domain declared on that port, otherwise the host and port.`,serviceBaseUrl:`The "base URL" set in the service configuration — often its public address.`,serviceCwd:`The working directory, resolved on the machine that runs the service.`,projectName:`The project name.`,envName:`The active environment name — "production", "staging"…`,runeyaHost:`The server listen address — "localhost", or "0.0.0.0" in local-network mode.`,agentHostLan:`The agent's IP on the local network, resolved when the service starts.`,agentName:`The name of the agent running the service.`,agentOs:`The operating system of the running machine — "linux", "darwin", "win32".`,agentHome:`The home directory on the running machine.`},variableRefInput:{groupBuiltins:`Built-in variables`,groupEnvironment:`Environment`},missingVariables:{title:`Variables to fill in`,intro:`This environment is waiting on {count} variable(s) before a service can start.`,reasonRequired:`Required`,reasonOverrideOnly:`This machine only`,definedIn:`Defined in “{environment}”`,machineOnly:`the value stays on this machine and is never synced`,valuePlaceholder:`Value`,reveal:`Show`,hide:`Hide`,save:`Save`,saveError:`Could not save the variables`},variableRowEditor:{helpTitle:`Writing a value`,helpReference:`To reuse a variable from the global environment:`,helpAutocomplete:`Start typing the variable name to see the suggestions.`,helpBuiltinsTitle:`Built-in variables`,helpPrePost:`The prefix and suffix wrap the value, and accept the same references.`,variableNamePlaceholder:`Variable name…`,secret:`Secret`,secretHint:`Encrypt the value at rest and mask it in the interface. A secret reaches no AI without being explicitly shared.`,shareWithAi:`AI read`,shareWithAiHint:`Let Runeya's chat and agents (through the MCP server) read this secret's value.`,shareWithAiHintPublic:`This variable is not secret: AI can already read its value. The box stays adjustable for the day you turn it into a secret.`,shareWithAiHintInjected:`Reading is granted along with injection: the variable is placed in the agents' environment, so they see it.`,injectIntoAi:`AI inject`,injectIntoAiHint:`Place this variable in the environment of AI agents (Claude Code, Codex…) spawned with this environment active. An agent that receives it can read it, so reading is granted along with it.`,required:`Required`,requiredHint:`A service in this environment will not start until this variable has a value.`,overrideOnly:`Override-only`,overrideOnlyHint:`This variable carries no shared value: every machine must provide its own (local path, personal token).`,overrideOnlyNotice:`Override-only variable: the shared value stays empty. Every machine fills in its own, through the wizard when the environment is activated or through its override.`,description:`Description`,addDescription:`Add a description`,addOverride:`Add a local override`,showSharedValue:`Show the shared value`,hideSharedValue:`Hide`,descriptionPlaceholder:`What this variable is for, for whoever has to fill it in`,notSecretWarning:`This variable is not marked as secret — its value will be stored unencrypted.`,value:`Value`,prefix:`Prefix`,prefixPlaceholder:`prefix…`,valuePlaceholder:`value…`,suffix:`Suffix`,suffixPlaceholder:`suffix…`,localOverride:`Local override`,localOverrideHint:`A value specific to this machine that replaces the shared one for you only: it is never synchronized nor visible to your teammates. For a local path, a personal token, a port already taken.`,clearOverride:`Clear override`,overrideValuePlaceholder:`override value…`,saveError:`Failed to save variable`,deleteError:`Failed to delete variable`,overrideError:`Failed to save override`,clearOverrideError:`Failed to clear override`},unlockPage:{titleSetup:`Configure Runeya`,titleLocked:`Runeya locked`,subtitleLegacyMigration:`Create a master password to secure your existing encryption key.`,subtitleHasVerifyFile:`Create your master password and enter your team's encryption key.`,subtitleSetup:`Create your master password to protect your secrets.`,subtitleUnlock:`Enter your master password to unlock Runeya.`,masterPasswordLabel:`Master password`,masterPasswordPlaceholder:`Your master password`,encryptionKeyLabel:`Team encryption key`,encryptionKeyPlaceholder:`64 hexadecimal characters`,encryptionKeyHelp:`Retrieve this key from Settings → "Show my encryption key" on a configured machine.`,machineWarning:`Your master password is tied to this machine via a secret stored in your OS keychain. If you reinstall your OS or change machines, you will need to reconfigure Runeya with your team's encryption key.`,pleaseWait:`Please wait…`,configure:`Configure`,unlock:`Unlock`,serverUnreachable:`Cannot contact the server. Please check that Runeya is running.`,unknownError:`Unknown error`},aiProviderSelector:{loading:`Loading models…`,defaultModel:`Default model`,placeholder:`AI provider`,title:`AI provider used for this action`},scenarioSelector:{heading:`Choose a scenario or start a free conversation`,manageScenarios:`Manage scenarios`,nodes:`nodes`,published:`published`,empty:`No scenario configured.`,create:`Create a scenario`,startFreeChat:`Start a normal chat`,aiSection:`Choose your AI`,cliGroup:`CLIs`,cliGroupHint:`Interactive terminal, billed to your subscription`,apiGroup:`API agents`,apiGroupHint:`Billed per usage by the provider`,manageProviders:`Manage providers`,noProviders:`No AI provider configured.`,configureProvider:`Configure a provider`,scenariosSection:`Workflows`,agentLabel:`Agent`,defaultAgent:`Default`},serviceCard:{autoRestart:`Auto-restart`,commands:`Commands:`,none:`None`,ports:`Ports:`,cwd:`CWD:`,edit:`Edit`,deploy:`Deploy`,remove:`Remove`},tiptapEditor:{placeholder:`Write something...`,bold:`Bold`,italic:`Italic`,underline:`Underline`,strikethrough:`Strikethrough`,highlight:`Highlight`,heading1:`Heading 1`,heading2:`Heading 2`,heading3:`Heading 3`,bulletList:`Bullet list`,orderedList:`Ordered list`,taskList:`Task list`,quote:`Quote`,inlineCode:`Inline code`,codeBlock:`Code block`,horizontalRule:`Horizontal rule`,undo:`Undo`,redo:`Redo`},environmentForm:{tabConfiguration:`Configuration`,tabVariables:`Variables`,generalInfo:`General Information`,appearance:`Appearance`,settings:`Settings`,inheritance:`Inheritance`,nameLabel:`Name`,namePlaceholder:`e.g., production, staging`,descriptionLabel:`Description`,descriptionPlaceholder:`Optional description`,textColorLabel:`Text Color`,textColorHint:`Text color for the environment badge`,bgColorLabel:`Background Color`,bgColorHint:`Background color for the environment badge`,defaultLabel:`Default Environment`,defaultHint:`When enabled, this environment is activated on project load instead of the first environment in the list.`,agentDefaultLabel:`Default agent`,agentDefaultHint:`Agent used by services without an explicit agent when this environment is active.`,agentDefaultInherit:`— None (inherit) —`,parentLabel:`Parent Environments`,parentPlaceholder:`Select parent environments (inherit variables in order)`,parentFilter:`Search environments...`,parentHint:`Variables from parents are inherited in order. Later parents override earlier ones.`,inheritedVariables:`Inherited variables`,variablesAfterCreate:`Variables can be added after the environment is created.`,cancel:`Cancel`,save:`Save Environment`,failedToSaveParents:`Failed to save parents`,nameRequired:`Name is required`},environmentSelector:{heading:`Environments`,label:`Environment:`,placeholder:`Choose environment`},serviceNavBar:{terminal:`Terminal`,metrics:`Metrics`,config:`Config`,git:`Git`},processDetail:{cwd:`Working directory`,loading:`Loading process...`,goBack:`Go back`,metrics:`Metrics`,pid:`PID`,agent:`Agent`,restarts:`Restarts`,started:`Started`,exitCode:`Exit Code`,logs:`Logs`},serviceMetrics:{noData:`No metrics available yet.`,notRunning:`Service is not running.`},errorBoundary:{title:`Something went wrong`,tryAgain:`Try Again`},syncStatusBar:{syncing:`Syncing...`,connected:`Connected`,disconnected:`Disconnected`,conflict:`{n} conflict | {n} conflicts`,pending:`{n} pending`},logViewer:{showingHidden:`Showing hidden logs`,hiddenFiltered:`Hidden logs filtered`,hiddenLogsToggle:`{n} hidden log(s) — click to toggle`,maxLines:`Max lines displayed`,timeSpan:`Time span between first and last log`,throughput:`received/s · flushed/s`,toggleSimple:`Toggle simple text mode`,simpleModeOn:`Simple mode on`,simpleModeOff:`Simple mode off`,autoScrollOn:`Auto-scroll on`,autoScrollOff:`Auto-scroll off`,live:`Live — click to pause`,paused:`Paused — click to resume and scroll to bottom`,waitingLogs:`{n} new log(s) waiting`,loading:`Loading logs...`,empty:`No log entries to display.`,sendToAi:`Send to AI`,sendToAiTitle:`Send logs to AI chat (uses text selection if highlighted)`,sendToChat:`Send to messaging (uses text selection if highlighted)`,logsContext:`Logs context`,sendToAiDialogTitle:`Send logs to AI`,sendToAiDialogDesc:`Choose the AI runner. If text is selected in the logs, only the selection will be sent; otherwise all visible logs will be sent.`},environmentFormPage:{editTitle:`Edit Environment`,createTitle:`Create Environment`,updated:`Environment updated`,updatedDesc:`has been saved successfully.`,created:`Environment created`,createdDesc:`has been created successfully.`,saveFailed:`Save failed`,saveFailedDesc:`An error occurred while saving the environment.`},cloudMessaging:{cardColumn:`Current column: {column}`,title:`Messaging`,retention:{grace:`Your current plan limits history to {days} days. Older messages will be deleted starting {date}.`,enforcing:`Your current plan only keeps the last {days} days of messages. Older messages are deleted automatically.`,pending:`Your subscription ends on {date}. From then on, only the last {days} days of messages will be kept.`,cta:`Upgrade your plan`},notConnected:`Sign in to your cloud account to access messaging.`,notConnectedTitle:`Team messaging`,notConnectedDesc:`Messaging is a cloud feature that connects your team members together: channels, direct messages and real-time collaboration.`,connectAction:`Sign in to the cloud`,noProjectOrg:`Messaging belongs to an organization. The open project is local: open a project from an organization to see its messages.`,orgNotAccessible:`The open project belongs to an organization this account cannot access: its messaging is not available here.`,empty:`No messages yet. Start the conversation!`,newMessages:`new messages`,soundOn:`Sound on — click to mute`,soundOff:`Sound off — click to unmute`,placeholder:`Write a message…`,send:`Send`,channels:`Channels`,directMessages:`Direct messages`,createChannel:`Create a channel`,channelName:`Channel name`,private:`Private`,privateHint:`Invite-only`,create:`Create`,browse:`Browse / join`,join:`Join`,noBrowse:`No public channel to join.`,newDm:`New direct message`,dmHint:`Pick one person, or several to create a group.`,startDm:`Start conversation`,startGroup:`Create a group ({count})`,noMembers:`No other member in this organization.`,invite:`Invite`,addPeople:`Select people`,addSelected:`Add {count} people`,noInvitable:`Everyone is already in this channel.`,searchPeople:`Search for someone…`,noMatch:`No results.`,pickChannel:`Select a channel or a conversation.`,someone:`Someone`,select:`Select`,selectedCount:`{count} selected`,sendToAi:`Send to AI`,cancel:`Cancel`,aiContextLabel:`Messages ({count})`},sendToChat:{title:`Send to messaging`,notConnected:`Sign in to your cloud account to send to messaging.`,org:`Organization`,orgPlaceholder:`Choose an organization`,target:`Destination`,targetPlaceholder:`Choose a channel or direct message`,channels:`Channels`,directMessages:`Direct messages`,preview:`Preview`,truncated:`truncated`,cancel:`Cancel`,send:`Send`,sent:`Sent to messaging`,failed:`Failed to send`},settingsDiagnostics:{instancesTitle:`Runeya instances on this machine`,instancesDesc:`Found through the local registry, then confirmed by asking their port.`,instancesEmpty:`No other instance detected.`,thisInstance:`this one`,uptime:`up`,agentPort:`agent`,open:`Open`,kill:`Stop`,killTooltip:`Stops this instance’s agent, then its server.`,killConfirmTitle:`Stop this instance?`,killConfirm:`The instance on port {port} ({cwd}) will be stopped: its agent first, then its server. Anything it is running stops with it.`,killCancel:`Cancel`,killDenied:`This process belongs to another user: the system refused to stop it.`,killFailed:`The instance could not be stopped. It may be stuck or protected.`,restart:`Restart`,restartTooltip:`Stops the instance, then relaunches it with the same executable, arguments, directory and environment.`,restartBlockedLegacy:`This instance started before Runeya published its command line: it cannot be relaunched identically.`,restartBlockedSecrets:`This instance holds a secret inherited from its environment (not from the stack .env, which would be read again at startup). The registry does not keep it: relaunching would start it degraded.`,restartConfirmTitle:`Restart this instance?`,restartConfirm:`The instance on port {port} ({cwd}) will be stopped, then relaunched identically. Everything it runs stops with it.`,restartCancel:`Cancel`,restartDone:`Instance relaunched (pid {pid}).`,restartPortBusy:`Instance relaunched (pid {pid}), but port {port} was not free yet: it may have started elsewhere.`,restartSelfPending:`Restarting this instance. The page will reload as soon as it answers again.`,restartSelfTimeout:`This instance did not come back. Check the terminal or launcher it was started from.`,restartSelfConfirm:`This instance will stop, then relaunch identically. The page reloads on its own; everything Runeya runs stops along the way.`,refresh:`Refresh`,logsTitle:`Server and agent logs`,logsDesc:`This instance's output, live. The agent writes into the server's output, so both arrive on one channel.`,logsEmpty:`Nothing to show.`,sourceAll:`Server and agent`,sourceServer:`Server`,sourceAgent:`Agent`,searchPlaceholder:`Filter lines...`,live:`Live`,copy:`Copy`,clear:`Clear`,resumeScroll:`Back to bottom`},bottomBar:{none:`None`,errorChangingEnv:`Failed to change environment`,cloudLogin:`Sign in to cloud`,cloudAccount:`Runeya Cloud account`,cloudLocalProject:{title:`Local project`,description:`This project belongs to no organisation, so no Runeya Cloud account is acting here. Your accounts stay linked to this machine — they take over again as soon as you open an organisation project.`,cta:`Manage this machine’s accounts`},cloudNoAccountForOrg:{title:`Organisation unknown to this machine`,description:`This project belongs to an organisation that none of the accounts linked to this machine knows. Until an account joins it, its cloud content stays out of reach.`,cta:`Connect an account`},goToProject:`Open project`,switchProject:`Switch project`,desktopMode:{title:`Desktop mode`,description:`Runeya was started from a shortcut, with no terminal. Closing this tab does not stop Runeya.`,address:`Address:`,goToDiagnostics:`Open diagnostics`}},serverErrors:{LOCAL_PROJECT_EXISTS:`This folder already holds a local project. Choose another folder.`,LOCAL_PROJECT_IN_MACHINE_ROOT:`This folder holds Runeya's data. Choose another folder for the local project.`,LOCAL_PROJECT_CLOUD_LINKED:`This folder is already the location of an organization project. Choose another folder.`,LOCAL_PROJECT_NOT_FOUND:`This folder holds no local project to import.`,PROJECT_DELETE_FORBIDDEN:`Only an owner or admin of the organization can remove a project from it.`,PROJECT_NOT_MEMBER:`The cloud does not see you as a member of this organization. Sign in to the cloud again, then retry.`,CLOUD_NOT_LINKED:`This machine is not connected to the Runeya cloud. Sign in, then retry.`,CLOUD_NO_ACCOUNT_FOR_PROJECT:`No cloud account on this machine answers for this project’s organization. Open the Account page to link one.`,PROJECT_NOT_IN_ORG:`This project is no longer part of this organization.`,PROJECT_DELETE_FAILED:`The cloud could not remove the project. Try again in a moment.`,PROJECT_HELD_ELSEWHERE:`This machine already holds a project with that id, for another organization. Stop following that one before opening this.`,PROJECT_NOT_LOCAL:`This project is no longer a local project of this machine.`,ORG_KEY_ALREADY_CURRENT:`This vault already uses this key: there is nothing to convert.`,ORG_KEY_DOES_NOT_OPEN_VAULT:`This key does not open this organization's vault. Installing it would erase the marker that still makes it possible to recognize the right one.`,PROJECT_ALREADY_IN_ORG:`That organization already holds a project with this id. Publishing the one from here would overwrite it: remove it from the organization, or start from the cloud project instead.`,ORG_KEY_MISMATCH:`This organization is encrypted with a different key than this machine. Ask a member for the key: you will be prompted for it right here.`,ORG_VAULT_UNREADABLE:`This organization's vault is encrypted with a key this machine does not have. Ask a member for it: you will be prompted for it right here.`,CANARY_UNAVAILABLE:`The organization key could not be checked against the cloud. Try again once the connection is back.`},projectPalette:{title:`Switch project`,placeholder:`Search for a project…`,recent:`Recent`,noRecent:`No other recently opened project.`,noMatch:`No matching project.`},projectSwitcher:{recent:`Recent`,folderLabel:`Folder`,folderNone:`No folder chosen`,folderChoose:`Choose a folder`,folderChange:`Change`,heading:`Projects`,signInMore:`Sign in to the cloud to see your organizations' other projects.`,unknownOrg:`Organization {id}…`,local:`Local`,noLocal:`No local project`,noProjects:`No project in this organization`,orgsFailed:`Could not load your organizations.`,pullTimeout:`The project has not reached this machine yet. Try again in a moment.`,syncKeyMismatch:`This organization is encrypted with a different key than this machine's: the project will not arrive until that key is provided.`,syncPaused:`Syncing this organization is paused: sign in to the cloud again, then retry.`,syncOutdated:`The cloud rejects this version of the app. Update Runeya, then retry.`,untrack:`Remove from this machine`,deleteFromOrg:`Remove from {org}`,deleteFromOrgTitle:`Remove the project from the organization`,deleteFromOrgConfirm:`Remove "{project}" from {org}? The project disappears for every member, not just on this machine. This cannot be undone.`,deleteFromOrgAccept:`Remove from organization`,signInHint:`Sign in to the cloud to see your organizations’ projects.`,create:`Create a project`,createTitle:`New project`,nameLabel:`Project name`,namePlaceholder:`my-project`,targetLabel:`Location`,localHint:`This project stays on this machine and is never synced.`,cloudHint:`This project is shared with the members of the organization.`,createFailed:`Could not create the project.`,publish:`Publish to an organization`,keyPromptTitle:`Organization's encryption key`,keyPromptHint:`This project is encrypted with a key this machine does not have yet. Ask a member for it and paste it here: it is checked against the canary the organization published, then installed, and the pull resumes.`,keyPromptUse:`Install and pull`,publishTitle:`Publish “{project}”`,publishOrgLabel:`Organization`,publishHint:`The project moves from this machine into the organization: no local copy is left behind, and its members get access.`,publishAccept:`Publish`,publishFailed:`Could not publish the project.`},launchProject:{recent:`Recent:`,importOrCreateLocal:`Import or create a local project`,search:`Search projects…`,noMatch:`No matching project.`,missingTitle:`I can't see my projects`,missingText:`Your organizations' projects live on Runeya Cloud. Sign in to find them here.`,connectCloud:`Connect to the cloud`,cloudUnreachable:`Could not reach Runeya Cloud. Check the local server configuration.`,notPulled:`Not downloaded on this machine yet`,groupLocal:`Local projects`,groupUnknownOrg:`Organization {id}…`,subtitle:`Process orchestration for developers`,selectProject:`Select a project`,groupEmpty:`Nothing here yet.`,noDescription:`No description`,createHere:`Create a project in {group}`,serviceCount:`{n} service | {n} services`},launchServices:{subtitle:`Process orchestration for developers`,selectServices:`Select services to launch`,noServices:`No services in this project.`,skip:`Skip`,noAgents:`No connected agents. You can still save your selection and skip.`,filter:`Filter services...`,deselectAll:`Deselect all`,selectAll:`Select all`,noCommands:`No commands`,launch:`Launch`,someServicesFailed:`Some services failed to launch`,defaultGroup:`Others`,selectedCount:`No service selected | {n} service selected | {n} services selected`},serviceConfigView:{title:`Configuration`,remove:`Remove`,tabGeneral:`General`,tabCommands:`Commands`,tabShortcuts:`Shortcuts`,tabEnvironment:`Environment`,tabHealthCheck:`Health Check`,tabLogParsers:`Log Parsers`,tabLogSources:`Log Sources`},serviceConfigGeneral:{name:`Name`,workingDirectory:`Working Directory`,cwdHint:`Default working directory for all commands`,ports:`Ports`,portsPlaceholder:`Add port...`,portsHint:`List of ports used by this service`,groups:`Groups`,groupsPlaceholder:`Add group...`,groupsHint:`Assign groups to this service (e.g., backend, frontend)`,description:`Description`,descriptionHint:`Short description of this service`,url:`URL`,urlHint:`Base URL of the service`,localUrl:`Local URL (Traefik)`,localUrlHint:`Local domain for accessing the service over HTTPS via Traefik (e.g. my-app.local.mydomain.com)`,openapiUrl:`OpenAPI URL`,openapiUrlHint:`OpenAPI/Swagger specification URL`,git:`Git`,gitRemoteHint:`Remote — clone/push URL`,gitHomeHint:`Home — web URL to open in browser`,meta:`Meta`,metaHint:`Custom key/value pairs attached to this service`,metaKeyPlaceholder:`Key`,metaValuePlaceholder:`Value`,addEntry:`Add entry`,autoRestart:`Auto Restart`,clearLogs:`Clear logs on start / restart`},serviceConfigCommands:{agent:`Agent`,runner:`Runner`,native:`Native`,docker:`Docker`,labelPlaceholder:`Label`,commandPlaceholder:`Command`,addCommand:`Add command`,noCommands:`No commands configured.`,online:`Online`,offline:`Offline`,cwdPlaceholder:`Custom cwd`},serviceConfigHealthCheck:{enable:`Enable Health Check`,type:`Type`,path:`Path`,method:`Method`,expectedStatus:`Expected Status`,command:`Command`,commandHint:`Command to execute. Exit code 0 = healthy, non-zero = unhealthy`,interval:`Interval (ms)`,timeout:`Timeout (ms)`,retries:`Retries`,initialDelay:`Initial Delay (ms)`},serviceConfigLogs:{jsParsers:`JavaScript Parsers`,jsParsersHint:`Assign global JavaScript parsers to this service. Parsers run as a pipeline in the order shown below — each enriches the log line. Default level detection (regex) runs first, then parsers in order.`,executionOrder:`Execution Order`,executionOrderHint:`Drag to reorder — top = runs first`,builtin:`Built-in`,disabled:`Disabled`,empty:`No JS parsers selected. Add one below or create new ones in Settings.`,addParser:`Add a parser...`,manageParsers:`Manage Parsers`},serviceConfigLogSources:{title:`Log Sources`,hint:`Define additional log sources beyond the default stdout/stderr console. Supports files, MongoDB collections, and MySQL tables. Sensitive fields (connection strings, passwords) are encrypted at rest.`,empty:`No additional log sources configured.`,emptyHint:`The console (stdout/stderr) is always active by default.`,addSource:`Add Source`,addDialog:`Add Log Source`,editDialog:`Edit Log Source`,type:`Type`,path:`Path`,encoding:`Encoding`,startFromEnd:`Start from end`,createIfNotExists:`Create file if not exists`,connectionString:`Connection String`,database:`Database`,collection:`Collection`,timestampField:`Timestamp field`,messageField:`Message field`,levelField:`Level field`,host:`Host`,port:`Port`,user:`User`,password:`Password`,table:`Table`,timestampColumn:`Timestamp column`,messageColumn:`Message column`,levelColumn:`Level column`,pollInterval:`Poll interval (ms)`,customQuery:`Custom query`,consoleHint:`The console source captures stdout/stderr and is always active. Adding it here has no effect unless you want to track it explicitly.`,cancel:`Cancel`,save:`Save`,add:`Add`,optional:`optional`},serviceConfigShortcuts:{empty:`No shortcuts configured. Add shortcuts to quickly run commands from the terminal view.`,label:`Label`,labelPlaceholder:`Shortcut label`,command:`Command`,commandPlaceholder:`Command to execute`,workingDir:`Working Dir (optional)`,cwdPlaceholder:`Custom cwd`,addShortcut:`Add Shortcut`},serviceForm:{editTitle:`Edit Service`,createTitle:`Create Service`,projectLabel:`Project *`,projectPlaceholder:`Select a project`,projectHint:`The project this service belongs to.`,agentLabel:`Agent`,agentPlaceholder:`Select agent...`,agentInherit:`— Inherit from active environment —`,agentHint:`The agent where this service will run. Leave empty to inherit from the active environment.`,agentHintEdit:`The agent where this service runs. Empty = inherit from active environment. Stop the process before changing.`,nameLabel:`Service Name *`,nameLabelShort:`Name *`,runnerLabel:`Runner`,cwdLabel:`Working Directory`,portsLabel:`Ports`,portsPlaceholder:`Add port...`,nameConfigHint:`You can configure the command and other settings after creation.`,autoRestart:`Auto-restart on crash`,envVars:`Environment Variables`,addEnvVar:`Add`,noEnvVars:`No environment variables configured.`,healthCheck:`Health Check`,healthCheckPath:`Health Check Path`,interval:`Interval (ms)`,timeout:`Timeout (ms)`,retries:`Retries`,cancel:`Cancel`,create:`Create Service`,saved:`Saved`,error:`Error`,validation:`Validation`,nameRequired:`Name is required.`,agentRequired:`Agent is required.`,projectRequired:`Please select a project.`,serviceCreated:`Service created`,configureAfterCreate:`Configure your service settings.`,failedToLoad:`Failed to load service`,failedToSave:`Failed to save service`,agentChangedServiceStopped:`Agent changed — service was stopped. Start it on the new agent?`,restartNow:`Start now`,restarted:`Service started`},environmentList:{title:`Environments`,subtitle:`Manage project environments and variable inheritance`,createButton:`Create Environment`,immutableBadge:`IMMUTABLE`,activeBadge:`ACTIVE`,defaultEnv:`Default environment`,setAsDefault:`Set as default`,activateButton:`Activate`,editButton:`Edit`,deleteButton:`Delete`,created:`Created`,createdDesc:`Environment created successfully`,createError:`Error`,createErrorDesc:`Failed to create environment`,defaultSet:`Default set`,defaultSetDesc:`This environment will be activated on project load`,activated:`Activated`,deleteTitle:`Confirm Delete`,deleted:`Deleted`,deletedDesc:`Environment deleted`,failedToSetDefault:`Failed to set default environment`,failedToActivate:`Failed to activate environment`,deleteConfirmMsg:`Delete environment '{name}'? This cannot be undone.`,failedToDelete:`Failed to delete environment`},logFilter:{levelsPlaceholder:`Log levels`,addFilter:`Add filter`,clearAll:`Clear all filters`,newFilter:`New filter`,include:`Include`,exclude:`Exclude`,regex:`Regular expression`,regexPlaceholder:`e.g. ^ERROR|WARN$`,filterPlaceholder:`Filter text…`,add:`Add`,cancel:`Cancel`,removeFilter:`Remove filter`},appUpdate:{bannerText:`A new version of Runeya is available ({latest}) — you are running {current}.`,bannerAction:`Update`,dialogTitle:`Update Runeya`,dialogLead:`Installed version: {current}. Latest published version: {latest}.`,checking:`Checking node and npm…`,nodeFound:`node {version}`,npmFound:`npm {version} ({path})`,npmMissing:`npm could not be found`,npmMissingHelp:`Runeya updates itself with npm, which did not answer. A desktop shortcut does not inherit your terminal PATH: if npm comes from a version manager (nvm, fnm, n, volta), run "npm install -g @runeya/runeya@latest" from a terminal instead.`,installTarget:`Global install into {prefix}`,install:`Install the update`,installing:`Installing — this can take a minute…`,installed:`Version {version} installed.`,installFailed:`The install failed. The npm output below says why.`,restartNeeded:`The new version takes over the next time Runeya starts.`,restartNow:`Restart now`,restartLater:`Later`,restarting:`Restarting…`,retry:`Try again`},changelog:{title:`What's new`,navTitle:`Changelog`,navDesc:`What changed across the Runeya versions installed on this machine.`,dialogLead:`Here is what changed since your last visit.`,empty:`Nothing new yet.`,failed:`The changelog is unreachable.`,retry:`Retry`,close:`Got it`,kindFeature:`New`,kindImprovement:`Improved`,kindFix:`Fixed`,kindBreaking:`Breaking`},cloudBanner:{offline:`Offline — this cloud project will not sync until you sign in to the cloud.`,otherOrg:`This cloud project belongs to an organization other than the one you are signed in to — nothing will sync.`,otherCloud:`This cloud project is linked to a different Runeya Cloud instance than the one you are signed in to — nothing will sync.`},vaultMigration:{title:`The master password now belongs to the machine`,lead:`This directory still has a master password of its own, inherited from an earlier version. Its data is encrypted with a key Runeya no longer reads: enter the old password to convert it to this machine's master password.`,oldPasswordLabel:`This directory's old master password`,backupNote:`A full copy of the vault is kept before anything is written. The old key is removed only after a successful re-read.`,migrate:`Migrate this vault`,migrating:`Migrating…`,failed:`Migration failed`,statusError:`Could not read the server status`,done:`Vault migrated. This directory now uses the machine master password.`,rekeyed:`{file} — {count} value(s) re-encrypted`,moved:`Moved to the machine vault: {files}`,skipped:`Left in place, the machine already had them: {files}`,backupKept:`Backup kept in`,continue:`Continue`},directoryPicker:{refusedUnreadable:`This folder holds a Runeya project that cannot be imported (several projects, or an organization project). Choose another folder.`,localTitle:`Import or create a local project`,localLead:`Choose the project folder.`,localHint:`If the folder already holds a Runeya project, it is imported. Otherwise a new project is created there.`,importNamed:`Import “{name}”`,createHere:`Create a project in “{name}”`,refusedListed:`This folder holds “{name}”, already in the list.`,refusedCloudLinked:`This folder is the location of an organization project. Choose another one.`,filterPlaceholder:`Filter directories, or paste a path…`,noMatch:`No directory matches "{filter}".`,title:`Where should "{project}" live?`,lead:`Pick the directory where this cloud project's sources live on this machine.`,leadHint:`It is what the services' working directories are based on. This path stays local and is never synced.`,up:`Parent directory`,loading:`Reading directory…`,empty:`No sub-directories`,truncated:`Too many sub-directories — list truncated.`,badgeHasProject:`Runeya project`,refusedHasProject:`This directory already holds a Runeya project. Pick another one.`,refusedTaken:`Another project is already attached to this directory. Pick another one.`,refusedMissing:`This directory cannot be found.`,readError:`Could not read this directory`,saveError:`Could not save this location`,confirm:`Use this directory`,root:`Root`,confirmNamed:`Use "{name}"`,crumbAria:`Current path`,pathHint:`Press Enter to go to this path.`},settingsPage:{companionTitle:`Review companion`,companionLead:`A second AI reviews every turn of your conversations and writes back when it has something to say.`,companionEnableByDefault:`Enable on new conversations`,companionEnableByDefaultHint:`Only affects conversations created afterwards; open conversations keep their setting.`,companionPrompt:`Specifics added to the companion`,companionPromptDefault:`No specifics added. Runeya's instructions still apply.`,companionPromptCustom:`Specifics added to Runeya's instructions.`,companionPromptEdit:`Add specifics`,companionPromptReset:`Remove specifics`,companionPromptPlaceholder:`E.g. focus on migrations, data-loss risks, or rules specific to this repository.`,companionPromptEditorHint:`Leave empty to add no specifics. Runeya's instructions and the response format (RAS, markers) always remain applied.`,companionLoadFailed:`Could not read the companion settings`,companionSaveFailed:`Could not save the companion settings`,title:`Settings`,general:`General`,generalDesc:`Operating mode and core configuration.`,cloud:`Cloud`,cloudSectionDesc:`Sign in to your Runeya Cloud account and related options.`,cloudBannerTitle:`You are not connected to the cloud`,cloudBannerText:`Sign in to your Runeya Cloud account for sync, messaging and collaboration.`,cloudBannerAction:`Sign in to the cloud`,launcherTitle:`Desktop shortcut`,launcherLead:`Create an entry in your application menu that starts this stack without a terminal. Same thing as runeya install-desktop.`,launcherName:`Name`,launcherScope:`Scope`,launcherScopeProject:`This project`,launcherScopeGlobal:`Global`,launcherScopeProjectHint:`The shortcut starts Runeya in this directory.`,launcherScopeGlobalHint:`No directory pinned: Runeya will start in your home directory.`,launcherPorts:`Ports`,launcherPort:`Runeya`,launcherAgentPort:`Agent`,launcherPortsHint:`Pre-filled with this instance’s ports. Pinning them keeps another Runeya from taking them.`,launcherCreate:`Create shortcut`,launcherCreated:`Shortcut created`,launcherFailed:`Could not create the shortcut`,launcherUninstallHint:`To remove it: runeya uninstall-desktop --name <name>.`,notifications:`Notifications`,notificationsDesc:`Granular notification settings with per-event mute.`,disableAll:`Disable all`,enableAll:`Enable all`,security:`Security`,securityDesc:`Encryption keys and secrets management.`,encryptionKey:`Encryption Key`,keyHex:`Key (hex)`,machineKey:`This machine's key`,machineKeyDesc:`It protects this machine's local projects. It is not an organization's key: as soon as an organization has its own, that is the one to share for syncing.`,orgKeysUnlisted:`Vaults outside the cloud`,orgKeysUnlistedDesc:`Vaults missing from the Cloud tab: those from another cloud, those of an organization the cloud no longer lists, and all of them when the cloud does not answer.`,orgKeysUnlistedEmpty:`No such vault on this machine.`,orgKeysSeeCloud:`Your accounts' organizations, and their keys, live in the tab`,adoptKey:`Set the organization key`,adoptKeyDesc:`Paste the key this vault was encrypted with. It is first checked against the vault canary — nothing is rewritten on an unverified entry — then the vault is re-encrypted, with a backup written first.`,adoptKeyPlaceholder:`64 hexadecimal characters`,adoptKeyCheck:`Check`,adoptKeyMatch:`This key does open this vault.`,adoptKeyAlreadyCurrent:`This vault already uses this key — there is nothing to set.`,adoptKeyDiffers:`This key differs from the one protecting this vault today. Setting it re-encrypts the contents, after a backup.`,adoptKeyNoMatch:`This key does not open this vault.`,adoptKeyNoCanary:`This vault has no canary: the key cannot be checked beforehand. You can still set it, but it will only be confirmed afterwards.`,adoptKeyConfirm:`Set this key`,masterPassword:`This machine's master password`,orgKeysCurrentCloud:`This machine is linked to {cloud}.`,orgKeysOtherCloud:`Vaults from another cloud — {cloud}`,orgKeySourceOwn:`Own key`,orgKeySourceMachine:`Same as the machine key`,orgKeySourceLocked:`Locked vault — key unreadable from this machine`,orgKeyCopied:`Organization key copied to clipboard`,unreadableTitle:`{org}: {detail}. This data is encrypted with a key this machine does not have. It is kept intact on disk and becomes readable again as soon as the key is adopted — no save erases it.`,unreadableSecrets:`{count} unreadable secret | {count} unreadable secrets`,unreadableApiKeys:`{count} unreadable API key | {count} unreadable API keys`,unreadableConversations:`{count} unreadable conversation | {count} unreadable conversations`,hideKey:`Hide key`,showKey:`Show key`,copyToClipboard:`Copy to clipboard`,codeEditor:`Code Editor`,codeEditorDesc:`Default editor for opening service files.`,preferredEditor:`Preferred Code Editor`,preferredEditorHint:`Choose the editor that opens when you click the editor button on a service. Per-service overrides can be set from the service header.`,noEditorsDetected:`No supported code editors were detected on this system.`,defaultEditor:`Default Editor`,selectEditor:`Select an editor`,copied:`Copied`,encryptionKeyCopied:`Encryption key copied to clipboard`,failedToCopy:`Failed to copy to clipboard`,failedToSavePrefs:`Failed to save notification preferences. Please retry.`,failedToSavePref:`Failed to save notification preference. Please retry.`,updated:`Updated`,aiProviderUpdated:`AI provider updated`,created:`Created`,aiProviderAdded:`AI provider added`,activeProviderSet:`Active provider set`,activeProviderSetDesc:`This provider will be used for AI features`,deleted:`Deleted`,aiProviderRemoved:`AI provider removed`,deleteParser:`Delete Parser`,navLogParsers:`Log Parsers`,navAiProviders:`AI Providers`,navScenario:`Scenario`,navDiagnostics:`Diagnostics`,diagnosticsDesc:`Live logs for this instance, and the other Runeya running on this machine.`,navAbout:`About`,newParser:`New Parser`,editParser:`Edit Parser`,setActive:`Set Active`,addProvider:`Add Provider`,newScenario:`New Scenario`,scenarioDesc:`Create and manage scenario hierarchies for AI conversations.`,noScenarios:`No scenarios configured. Create your first team hierarchy.`,scenarioNodes:`{count} nodes`,scenarioGroups:`{count} groups`,logParsersTitle:`JavaScript Log Parsers`,logParsersDesc:`Global parsers applied to service logs via a pipeline.`,logParsersCardDesc:`Create JavaScript-based log parsers for advanced parsing logic. These parsers are evaluated before regex rules.`,loadingParsers:`Loading parsers...`,noParsers:`No parsers defined. Click "New Parser" to create one.`,noAiProviders:`No AI providers configured. Click "Add Provider" to add one.`,aiProvidersOrgScope:`These providers belong to the {org} organization: their keys are encrypted with its own key.`,aiProvidersMachineScope:`These providers belong to this machine.`,parsersOrgScope:`These parsers belong to the {org} organization: editing one changes it for every member.`,parsersMachineScope:`These parsers belong to this machine. Open a cloud project to share them with your team.`,aiProvidersDesc:`Configure API keys for AI providers. The active provider is used across the app (chat, etc.).`,aboutDesc:`Application information and runtime details.`,applicationTitle:`Application`,versionLabel:`Version`,runtimeLabel:`Runtime`,runtimeValue:`Node.js (local server)`,versionTitle:`Version`,versionStatusRow:`Status`,versionCurrent:`Installed version`,versionLatest:`Latest version`,versionChecking:`Checking…`,versionUpToDate:`Up to date`,versionOutdated:`Update available`,versionAhead:`Development version (ahead)`,versionDev:`Development version`,versionUnknown:`Unable to check for updates`,versionRecheck:`Check again`,updateAvailable:`Update available`,updateAvailableDetail:`Runeya {latest} is available (you have {current}).`,systemTitle:`System`,exportMarkdown:`Export as Markdown`,exportDone:`Exported`,sysPlatform:`Platform`,sysOs:`Operating system`,sysHostname:`Hostname`,sysCpu:`CPU`,sysMemory:`Memory (free / total)`,sysServerUptime:`Server uptime`,sysOsUptime:`OS uptime`,dockerNotDetected:`Not detected`,editAiProvider:`Edit AI Provider`,addAiProvider:`Add AI Provider`,aiProviderNamePlaceholder:`e.g., My Claude Key`,providerLabel:`Provider`,commonModels:`Common models:`,apiKeyLabel:`API Key`,apiKeyLeaveEmpty:`leave empty to keep existing`,apiKeyKeepPlaceholder:`Leave empty to keep the current key`,modelOverride:`Model override`,modelOverridePlaceholder:`e.g. {model} (provider default if empty)`,optionalDesc:`Optional description`,enabledLabel:`Enabled`,codeLabel:`Code`,quickTemplates:`Quick templates`,liveSimulation:`Live Simulation`,simRunning:`Running…`,sampleLogs:`Sample logs (one per line)`,simOutput:`Output`,simEmpty:`Type sample logs to see results`,encryptionKeyDesc:`Share this key with your teammates so they can decrypt the same data. Keep it secret — anyone with this key can read your encrypted secrets.`,detectedEditors:`Detected editors`},apiDocsPage:{authentication:`Authentication`,browserJwt:`Browser JWT`},serviceTerminal:{logs:`Logs`,allProcesses:`All Processes`,active:`active`,running:`Running`,stopped:`Stopped`,exitFullscreen:`Exit fullscreen`,fullscreen:`Fullscreen`,downloadLogs:`Download logs`,clearLogs:`Clear logs`,enterCommand:`Enter command...`,error:`Error`,failedToClearLogs:`Failed to clear logs`,noAgent:`No agent`,noAgentDesc:`Service has no agent assigned`,shortcutFailed:`Shortcut failed`,commandFailed:`Command failed`},serviceConfigDocker:{bootstrapCommands:`Bootstrap commands`,bootstrapCommandsHint:`run sequentially before the service starts`,imageSource:`Image source`,pullImage:`Pull image`,buildDockerfile:`Build from Dockerfile`,image:`Image`,imagePlaceholder:`nginx:latest`,editDockerfile:`Edit Dockerfile`,closeDockerfile:`Close`,buildContext:`Build context path`,buildArgs:`Build arguments`,argNamePlaceholder:`ARG_NAME`,argValuePlaceholder:`value`,addBuildArg:`Add build arg`,targetStage:`Target stage`,targetStagePlaceholder:`production`,runtimeConfig:`Runtime configuration`,userGroup:`User:Group`,userGroupHint:`Default: host uid:gid`,networkMode:`Network mode`,portMappings:`Port mappings`,portPlaceholder:`8080:80`,addPort:`Add port`,volumes:`Volumes`,autoMount:`Auto-mount service root path into container`,volumePlaceholder:`/host/path:/container/path`,addVolume:`Add volume`,runNative:`Run native command inside the container`,shell:`Shell`,shellPlaceholder:`sh`,shellHint:`Shell used to run your command inside the container`,isolated:`Isolated — each command in its own container`,shared:`Shared — all commands exec inside the same container`,entrypoint:`Entrypoint override`,entrypointPlaceholder:`/bin/sh`,cmdOverride:`CMD override`,cmdPlaceholder:`-c 'echo hello'`,addBootstrapCommand:`Add Command`,bootstrapLabelPlaceholder:`Install deps`},serviceHeader:{docker:`Docker`,native:`Native`,openInEditor:`Open in editor`,editorOptions:`Editor options`,editorSettings:`Editor settings`,noAgent:`No agent`,openServiceUrl:`Open service URL`,useDefault:`Use default`,cloneRepository:`Clone repository`,cwdNotExist:`Working directory {cwd} does not exist.`,editorDefault:`Default:`,editorThisService:`This service:`,editorNotSet:`Not set`,noEditorConfigured:`No editor configured`,setDefaultEditorHint:`Set a default editor in Settings`}},r=`runeya:locale`,i=[`fr`,`en`];function a(){let e=localStorage.getItem(r);return e===`fr`||e===`en`?e:navigator.language.slice(0,2).toLowerCase()===`fr`?`fr`:`en`}var o=a();document.documentElement.setAttribute(`lang`,o);var s=e({legacy:!1,locale:o,fallbackLocale:`en`,messages:{fr:t,en:n}});function c(e){s.global.locale.value=e,localStorage.setItem(r,e),document.documentElement.setAttribute(`lang`,e)}function l(){let e=s.global.locale.value;return i.includes(e)?e:`en`}export{c as i,l as n,s as r,i as t};