@loicngr/kobo 2.1.21 → 2.1.23

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 (93) hide show
  1. package/AGENTS.md +69 -4
  2. package/CHANGELOG.md +9 -0
  3. package/CONFIGURATION.md +112 -2
  4. package/dist/mcp-server/kobo-tasks-server.js +4 -4
  5. package/dist/server/index.js +21 -6
  6. package/dist/server/services/agent/engines/claude-code/engine.js +5 -2
  7. package/dist/server/services/agent/engines/codex/engine.js +3 -0
  8. package/dist/server/services/agent/orchestrator.js +2 -0
  9. package/dist/server/services/agent/turn-liveness.js +1 -1
  10. package/dist/server/services/dev-server-service.js +41 -13
  11. package/dist/server/services/lifecycle-hook-service.js +29 -2
  12. package/dist/server/services/settings-service.js +66 -0
  13. package/dist/server/utils/script-runner.js +3 -1
  14. package/dist/shared/launch-instructions.js +8 -4
  15. package/dist/shared/memory-tools.js +2 -2
  16. package/docker-compose.vps.yml +1 -1
  17. package/docs/deployment-vps.md +36 -10
  18. package/docs/getting-started.md +11 -0
  19. package/package.json +1 -1
  20. package/scripts/kobo-update +25 -13
  21. package/src/client/dist/pwa/assets/ActivityFeed-1OKX_g3B.js +2 -0
  22. package/src/client/dist/pwa/assets/{ActivityFeed-DdJvMzRI.css → ActivityFeed-CmAFv-2c.css} +1 -1
  23. package/src/client/dist/pwa/assets/{AutoLoopFinalReviewSettings-f4VDR5dd.js → AutoLoopFinalReviewSettings-VoA9uBw0.js} +1 -1
  24. package/src/client/dist/pwa/assets/{ChangelogPage-dEWpjTlp.js → ChangelogPage-DHl3hD3t.js} +1 -1
  25. package/src/client/dist/pwa/assets/{ComparisonPanel-Bwbqgvr4.js → ComparisonPanel-D6EKTtni.js} +1 -1
  26. package/src/client/dist/pwa/assets/{CreatePage-CCCCAhrx.js → CreatePage-CZzEOVVq.js} +1 -1
  27. package/src/client/dist/pwa/assets/{DashboardPage-3byhBITf.js → DashboardPage-DjLoUvjA.js} +1 -1
  28. package/src/client/dist/pwa/assets/{DiffViewer-Bj_NTfCF.js → DiffViewer-BQ6OEmoi.js} +3 -3
  29. package/src/client/dist/pwa/assets/{DocumentsPanel-xyLDV3T1.js → DocumentsPanel-yrQviqCd.js} +1 -1
  30. package/src/client/dist/pwa/assets/{DrawerToggleButton-pwBSstQP.js → DrawerToggleButton-D5qNeXnn.js} +1 -1
  31. package/src/client/dist/pwa/assets/{GitPanel-DvIdrkVw.js → GitPanel-DCXlhcAD.js} +3 -3
  32. package/src/client/dist/pwa/assets/{HealthPage-BSwhZQRo.js → HealthPage-COicuNQn.js} +1 -1
  33. package/src/client/dist/pwa/assets/{MainLayout-DZJ9BvZw.js → MainLayout-ZcExZTqC.js} +2 -2
  34. package/src/client/dist/pwa/assets/{MemoryPanel-ChR032zP.js → MemoryPanel-D73Qz9f7.js} +1 -1
  35. package/src/client/dist/pwa/assets/{MemoryProposalList-BRKSoS4K.js → MemoryProposalList-BGlq2DkD.js} +1 -1
  36. package/src/client/dist/pwa/assets/{QBtnDropdown-o3QH0Bb8.js → QBtnDropdown-CykBCmwa.js} +1 -1
  37. package/src/client/dist/pwa/assets/{QExpansionItem-BhFHiyq9.js → QExpansionItem-CAW9J1Uv.js} +1 -1
  38. package/src/client/dist/pwa/assets/{QScrollArea-BsNY6slB.js → QScrollArea-C_d-8eO7.js} +1 -1
  39. package/src/client/dist/pwa/assets/{QSelect-bEq3g_io.js → QSelect-C1AN93yA.js} +1 -1
  40. package/src/client/dist/pwa/assets/{QTooltip-xYZ6KNu2.js → QTooltip-C9qaLW_h.js} +1 -1
  41. package/src/client/dist/pwa/assets/{SchedulePanel-DIFv_FTY.js → SchedulePanel-CQpzDhq7.js} +1 -1
  42. package/src/client/dist/pwa/assets/{SearchPage-BqTBIt5E.js → SearchPage-fZlSSEu_.js} +1 -1
  43. package/src/client/dist/pwa/assets/{SettingsPage-BRvUAZ5r.css → SettingsPage-BCOF0ssp.css} +1 -1
  44. package/src/client/dist/pwa/assets/SettingsPage-eyJZxeCJ.js +9 -0
  45. package/src/client/dist/pwa/assets/{SplitWorkspacePage-D6r2pl5g.js → SplitWorkspacePage-CfeO6TZb.js} +1 -1
  46. package/src/client/dist/pwa/assets/{TerminalPanel-CladK9Vv.js → TerminalPanel-CfDZOteT.js} +1 -1
  47. package/src/client/dist/pwa/assets/{ToolCallItem-CdzEME4w.js → ToolCallItem-CHE6tylq.js} +2 -2
  48. package/src/client/dist/pwa/assets/{TouchPan-B4gQPwGN.js → TouchPan-Csev_qU6.js} +1 -1
  49. package/src/client/dist/pwa/assets/{TourReplayButton-B0j6AZwU.js → TourReplayButton-Crr7tF1b.js} +1 -1
  50. package/src/client/dist/pwa/assets/{WorkspaceAttentionLabels-CeVhoidC.js → WorkspaceAttentionLabels-DpUZOiJv.js} +1 -1
  51. package/src/client/dist/pwa/assets/{WorkspacePage-w2bF8wTd.css → WorkspacePage-Bk-WWOYM.css} +1 -1
  52. package/src/client/dist/pwa/assets/{WorkspacePage-CK5XCuG_.js → WorkspacePage-_QSKLO42.js} +3 -3
  53. package/src/client/dist/pwa/assets/{browser-B8tNScg1.js → browser-o7ftkZex.js} +1 -1
  54. package/src/client/dist/pwa/assets/{build-path-tree-kmVAcvs_.js → build-path-tree-D6dZQpIb.js} +1 -1
  55. package/src/client/dist/pwa/assets/{custom-sounds-CJwd-8TL.js → custom-sounds-DVX9zCET.js} +1 -1
  56. package/src/client/dist/pwa/assets/{de-BaO6kbdO.js → de-DOE4H_Jf.js} +2 -2
  57. package/src/client/dist/pwa/assets/{editor.api-CgbPVW9s.js → editor.api-C8TYnUXm.js} +1 -1
  58. package/src/client/dist/pwa/assets/{efforts-y7Wf_Rgd.js → efforts-DfsG0_o0.js} +1 -1
  59. package/src/client/dist/pwa/assets/{es-DTvSsbD0.js → es-BW57JPlm.js} +2 -2
  60. package/src/client/dist/pwa/assets/{expand-template-BFbbjj7X.js → expand-template-CJZlWMfI.js} +1 -1
  61. package/src/client/dist/pwa/assets/{format-BETfc4z9.js → format-DOCqk2Dn.js} +1 -1
  62. package/src/client/dist/pwa/assets/{formatters-C22K9vlC.js → formatters-BFocC6LJ.js} +1 -1
  63. package/src/client/dist/pwa/assets/{fr-BH7V66Yz.js → fr-DnmIKHaQ.js} +2 -2
  64. package/src/client/dist/pwa/assets/{freemarker2-DiRVvp9O.js → freemarker2-CfME4WOK.js} +1 -1
  65. package/src/client/dist/pwa/assets/{handlebars-BLYRroSQ.js → handlebars-uvKdDnJl.js} +1 -1
  66. package/src/client/dist/pwa/assets/{html-DAW2vteY.js → html-BrEPgLuD.js} +1 -1
  67. package/src/client/dist/pwa/assets/i18n-BmTCjikk.js +1 -0
  68. package/src/client/dist/pwa/assets/{index-CbyHfF8I.js → index-z1Oh2-I_.js} +4 -4
  69. package/src/client/dist/pwa/assets/{it-DZGbkkoy.js → it-DSrEQgZQ.js} +2 -2
  70. package/src/client/dist/pwa/assets/{javascript-Bb5J8n0k.js → javascript-KH2xP4lQ.js} +1 -1
  71. package/src/client/dist/pwa/assets/{liquid-Dqx3adnJ.js → liquid-D08TlsVs.js} +1 -1
  72. package/src/client/dist/pwa/assets/{mdx-D_7igLV3.js → mdx-y74A51cS.js} +1 -1
  73. package/src/client/dist/pwa/assets/{monaco-contributions-C-0CbrAy.js → monaco-contributions-Cx8iaAhd.js} +1 -1
  74. package/src/client/dist/pwa/assets/{monaco.contribution-c6JPBEZI.js → monaco.contribution-CFq0guCl.js} +2 -2
  75. package/src/client/dist/pwa/assets/{network-auth-BE4qbvWm.js → network-auth-DnGOOzCV.js} +1 -1
  76. package/src/client/dist/pwa/assets/{notify-theme-BVFBBGrJ.js → notify-theme-B9lUAgQl.js} +1 -1
  77. package/src/client/dist/pwa/assets/{project-color-CHOR2jB5.js → project-color-TgENPFLi.js} +1 -1
  78. package/src/client/dist/pwa/assets/{python-Dqubw1F5.js → python-Cy3bAVPq.js} +1 -1
  79. package/src/client/dist/pwa/assets/{razor-BQphc9Kt.js → razor-gD9QOuiV.js} +1 -1
  80. package/src/client/dist/pwa/assets/{typescript-Dep00l0X.js → typescript-CEItY0bH.js} +1 -1
  81. package/src/client/dist/pwa/assets/{use-search-index-status-CQHHvHwM.js → use-search-index-status-BtJ0pOy9.js} +1 -1
  82. package/src/client/dist/pwa/assets/{use-tours-IVbXTmz2.js → use-tours-COLDth2h.js} +2 -2
  83. package/src/client/dist/pwa/assets/{use-worktree-restore-B3s5xDGR.js → use-worktree-restore-CShbwpGy.js} +1 -1
  84. package/src/client/dist/pwa/assets/{workspace-templates-CyuTpztP.js → workspace-templates-BOMNQgBl.js} +1 -1
  85. package/src/client/dist/pwa/assets/{xml-BMS2dvaF.js → xml-BJvL5qcE.js} +1 -1
  86. package/src/client/dist/pwa/assets/{yaml-CYw92aic.js → yaml-DtkVRZaX.js} +1 -1
  87. package/src/client/dist/pwa/index.html +1 -1
  88. package/src/client/dist/pwa/sw.js +1 -1
  89. package/src/mcp-server/README.md +13 -0
  90. package/src/mcp-server/kobo-tasks-server.ts +5 -4
  91. package/src/client/dist/pwa/assets/ActivityFeed-DiUxnmGJ.js +0 -2
  92. package/src/client/dist/pwa/assets/SettingsPage-BLD0xWFB.js +0 -9
  93. package/src/client/dist/pwa/assets/i18n-DnuTmw3O.js +0 -1
@@ -1,4 +1,4 @@
1
- var e={"groupMessage.title":`Message groupé`,"groupMessage.description":`Envoyer la même consigne à plusieurs workspaces.`,"groupMessage.devServerRunning":`Uniquement les workspaces avec un serveur de développement lancé`,"groupMessage.tags":`Tags`,"groupMessage.statuses":`Statuts des workspaces`,"groupMessage.filtersHint":`Au moins un tag sélectionné ET un statut sélectionné. Sans filtre, tous les workspaces non archivés sont inclus.`,"groupMessage.selected":`{count} destinataires sélectionnés`,"groupMessage.selectAll":`Tout sélectionner`,"groupMessage.selectNone":`Tout désélectionner`,"groupMessage.nextIteration":`Prochaine itération auto-loop`,"groupMessage.immediate":`Envoi dans le chat`,"groupMessage.empty":`Aucun workspace ne correspond aux filtres.`,"groupMessage.content":`Message`,"groupMessage.deliveryHint":`Les auto-loops reçoivent la consigne à la prochaine itération, sans être arrêtées. Les autres workspaces reçoivent un message de chat, avec reprise des agents inactifs si nécessaire.`,"groupMessage.limit":`Sélectionnez au maximum 200 workspaces par message.`,"groupMessage.finished":`Résultats de l’envoi`,"groupMessage.inProgress":`Envoi du message groupé`,"groupMessage.serverContinues":`Le serveur continue l’envoi si vous fermez cette fenêtre. « En attente » signifie enregistré pour une prochaine itération, pas encore traité.`,"groupMessage.unknownHint":`L’envoi est incertain pour certains workspaces. Consultez leur chat avant d’envoyer un nouveau message.`,"groupMessage.retryHint":`Les destinataires et le message initiaux sont conservés. Vérifier reprend cette même demande sans dupliquer les envois acceptés.`,"groupMessage.retry":`Vérifier cet envoi`,"groupMessage.newMessage":`Nouveau message`,"groupMessage.send":`Envoyer à {count} workspaces`,"groupMessage.state.pending":`À envoyer`,"groupMessage.state.sending":`Envoi en cours`,"groupMessage.state.sent":`Envoyé`,"groupMessage.state.queued":`En attente auto-loop`,"groupMessage.state.rejected":`Refusé`,"groupMessage.state.unknown":`Envoi incertain`,"groupMessage.state.not_sent":`Non envoyé`,"tours.home.groupMessage.title":`Écrire à plusieurs workspaces`,"tours.home.groupMessage.description":`Filtrez par tags, statuts et serveurs de développement lancés, vérifiez les destinataires, puis envoyez une même consigne. Les auto-loops la reçoivent à la prochaine itération. Chaque workspace affiche son résultat d’envoi.`,"autoLoop.finalReview.title":`Réglages de la review finale`,"autoLoop.finalReview.description":`Après toutes les tâches et les vérifications finales, une session séparée revoit les changements. La dernière session de travail corrige les findings, puis une nouvelle review démarre jusqu’à ce qu’il n’en reste aucun.`,"autoLoop.finalReview.enabled":`Review finale automatique`,"autoLoop.finalReview.configure":`Configurer le reviewer`,"autoLoop.finalReview.save":`Enregistrer les réglages`,"autoLoop.finalReview.hint":`Review dans une nouvelle session en lecture seule, puis retour à la dernière session de travail pour corriger les findings. Les réglages sont enregistrés avec ce workspace.`,"autoLoop.finalReview.loadFailed":`Impossible de charger les réglages de la review finale.`,"autoLoop.finalReview.saveFailed":`Impossible d’enregistrer les réglages de la review finale.`,"autoLoop.finalReview.cycle":`Cycle de review {count}`,"autoLoop.finalReview.findings":`{count} findings`,"autoLoop.finalReview.disabled":`Désactivée`,"autoLoop.finalReview.pending":`Review finale prévue`,"autoLoop.finalReview.reviewing":`Review finale en cours`,"autoLoop.finalReview.fixing":`Correction des findings`,"autoLoop.finalReview.completed":`Review finale validée`,"autoLoop.finalReview.blocked":`Review finale à débloquer`,"reviewReturn.title":`Retour de review`,"reviewReturn.reviewing":`Review en cours. Le retour à la session d’origine est enregistré.`,"reviewReturn.ready":`Review terminée. Retour à la session d’origine.`,"reviewReturn.dispatching":`Envoi du résumé de review à la session d’origine.`,"reviewReturn.unknown":`Le serveur s’est arrêté avant de confirmer la remise. La session d’origine a peut-être déjà reçu le résumé.`,"reviewReturn.blocked":`Le retour à la session d’origine nécessite une intervention.`,"reviewReturn.retry":`Réessayer le retour`,"reviewReturn.cancel":`Annuler le retour`,"reviewReturn.retryUnknown":`Réessayer la remise (risque de doublon)`,"reviewReturn.actionFailed":`Impossible de modifier le retour de review.`,"memory.panel.contextsHint":`Ce qui a été transmis au LLM pour cette conversation.`,"memory.panel.entriesHint":`Les notes persistantes que vous pouvez modifier ou réutiliser.`,"memory.panel.proposalsHint":`Les ajouts suggérés par les agents, à approuver ou refuser.`,"memory.panel.operationsHint":`Le journal des lectures et modifications de la mémoire.`,"memory.panel.openDialog":`Ouvrir la mémoire dans un dialogue`,"memory.panel.closeDialog":`Fermer le dialogue mémoire`,"tours.workspace.memorySettings.title":`Gérer les trois niveaux`,"tours.workspace.memorySettings.description":`Ce lien ouvre les paramètres Mémoire : globale pour tous vos projets, projet pour ses workspaces, workspace pour cette mission. Chaque niveau peut être effacé indépendamment, après confirmation ; cela ne retire pas les informations déjà envoyées au LLM.`,"tours.settings.memoryModes.title":`Choisir le mode de mémoire`,"tours.settings.memoryModes.description":`Hybride par défaut : l’agent mémorise dans le workspace et propose les ajouts projet/globaux à valider. Manuel : vous seul écrivez. Automatique : l’agent écrit aux trois niveaux. Cliquez sur Enregistrer pour appliquer le mode.`,"tours.settings.skills.title":`Choisir une suite de skills`,"tours.settings.skills.description":`Commencez avec Standard : aucune extension requise. Superpowers, gstack, ECC et leurs combinaisons ciblent des skills déjà installés et accessibles au moteur choisi. Sélectionner une suite change les consignes de l’agent ; cela n’installe aucun skill et n’accorde aucune permission. Personnalisé permet d’écrire vos propres consignes. Enregistrez votre choix pour l’appliquer.`,"tours.settings.git.description":`Choisissez quand les agents peuvent créer des commits, pousser ou publier. Définissez les conventions Git et les préfixes de branches.`,"tours.settings.git.title":`Fonctionnement Git`,"settings.reviewPromptHint":`Instructions transmises à l’agent au lancement d’une revue de code.`,"settings.help.git":`Préférences de commit, push et publication, conventions Git et préfixes de branches.`,"settings.nav.promptTemplates":`Templates de prompts`,"memory.scope.label":`Portée de la mémoire`,"settings.nav.memory":`Mémoire`,"settings.help.memory":`Choisissez comment Kōbō utilise la mémoire et gérez les mémoires globale, de projet et de workspace.`,"memory.settings.title":`Mémoire`,"memory.panel.title":`Mémoire`,"memory.panel.contexts":`Contextes transmis à cette conversation`,"memory.panel.noContext":`Aucun contexte mémoire transmis à cette conversation.`,"memory.panel.contextStats":`{tokens} jetons estimés · {cumulative} cumulés · {remaining} restants · {omitted} omis`,"memory.panel.entries":`Mémoires disponibles`,"memory.panel.proposals":`Propositions en attente`,"memory.panel.operations":`Opérations du workspace`,"memory.panel.add":`Ajouter une mémoire`,"memory.panel.clearWorkspace":`Effacer la mémoire du workspace`,"memory.panel.settingsLink":`Gérer les mémoires globale et de projet dans les paramètres`,"memory.panel.clearConfirm":`Effacer {entries} mémoires et {proposals} propositions de ce workspace ?`,"memory.panel.confirmClear":`Effacer la mémoire du workspace`,"memory.panel.promoteTo":`Promouvoir vers`,"memory.panel.loading":`Chargement de la mémoire du workspace…`,"memory.panel.loadFailed":`Impossible de charger la mémoire du workspace.`,"memory.panel.archived":`Archivé`,"memory.panel.purged":`Worktree purgé`,"memory.panel.changed":`Modifiée depuis ce contexte`,"memory.panel.deleted":`Supprimée depuis ce contexte`,"memory.panel.truncated":`(texte tronqué)`,"memory.engine.codex":`Codex`,"memory.tool.unexplainedError":`L’outil mémoire n’a fourni aucun détail. Si le budget de lecture est épuisé, arrêtez les lectures ; enregistrer reste possible selon les permissions. Une nouvelle conversation ou une compaction confirmée renouvelle le budget de lecture, pas un simple message.`,"memory.engine.claude-code":`Claude Code`,"memory.context.state.failed":`Échec`,"memory.context.state.prepared":`Préparé`,"memory.context.state.submitted":`Envoyé`,"memory.context.state.initialized":`Initialisé`,"memory.context.state.unknown":`Transmission inconnue`,"memory.settings.intro":`La mémoire conserve des notes explicites pour les prochaines sessions d’agent. Elle ne remplace pas l’historique du fournisseur ni celui des conversations.`,"memory.settings.mode":`Comportement automatique de la mémoire`,"memory.settings.mode.manual":`Manuel`,"memory.settings.modeHint.manual":`Les agents peuvent lire la mémoire. Vous seul pouvez créer ou modifier les notes.`,"memory.settings.mode.automatic":`Automatique`,"memory.settings.modeHint.automatic":`Les agents peuvent retrouver et mettre à jour automatiquement les mémoires pertinentes.`,"memory.settings.mode.hybrid":`Hybride`,"memory.settings.modeHint.hybrid":`Les agents peuvent modifier directement la mémoire du workspace. Les changements projet et globaux nécessitent votre approbation.`,"memory.settings.saveNote":`Le mode fait partie des paramètres et s’applique après enregistrement. Quitter sans enregistrer conserve le mode précédent.`,"memory.settings.manageTitle":`Parcourir et gérer la mémoire`,"memory.settings.independentNote":`Créer, modifier, approuver et effacer une mémoire prend effet immédiatement, indépendamment de l’enregistrement des paramètres.`,"memory.settings.add":`Ajouter une mémoire`,"memory.settings.clear":`Vider cette portée…`,"memory.settings.clearConfirmTitle":`Vider cette portée mémoire ?`,"memory.settings.clearConfirm":`Cette action supprimera {entries} mémoires et {proposals} propositions en attente de la portée {scope} sélectionnée.`,"memory.settings.clearWarning":`Cela efface uniquement les données mémoire de Kōbō, pas les conversations précédentes chez le fournisseur ni l’historique du chat.`,"memory.settings.confirmClear":`Vider la portée`,"memory.settings.cancel":`Annuler`,"memory.settings.loadFailed":`Impossible de charger les portées mémoire.`,"memory.settings.saveFailed":`Impossible d’enregistrer cette modification mémoire.`,"memory.settings.clearFailed":`Impossible d’apercevoir ou de vider cette portée mémoire.`,"memory.settings.clearConflict":`La mémoire a changé depuis l’aperçu. Les nombres ont été actualisés ; vérifiez-les avant de confirmer à nouveau.`,"memory.settings.loadMoreScopes":`Charger plus de portées`,"memory.entry.loadMore":`Charger plus de mémoires`,"memory.settings.loadingScopes":`Chargement des portées…`,"memory.settings.deleteConfirmTitle":`Confirmer la suppression mémoire`,"memory.settings.deleteConfirm":`Supprimer « {title} » de {scope} ?`,"memory.settings.deleteConfirmAction":`Supprimer la mémoire`,"memory.scope.choose":`Choisir une portée`,"memory.scope.global":`Globale`,"memory.scope.project":`Projet`,"memory.scope.workspace":`Workspace`,"memory.entry.empty":`Aucune mémoire dans cette portée.`,"memory.entry.revision":`Révision {revision}`,"memory.entry.edit":`Modifier`,"memory.entry.editAria":`Modifier {title}`,"memory.entry.delete":`Supprimer`,"memory.entry.deleteAria":`Supprimer {title}`,"memory.entry.promote":`Promouvoir`,"memory.entry.promoteAria":`Promouvoir {title}`,"memory.editor.key":`Clé stable`,"memory.editor.title":`Titre`,"memory.editor.body":`Mémoire`,"memory.editor.save":`Enregistrer la mémoire`,"memory.editor.saving":`Enregistrement…`,"memory.editor.cancel":`Annuler`,"memory.editor.conflict":`Cette mémoire a changé ailleurs. Rechargez-la ou gardez votre brouillon et rebasez-le explicitement sur la révision actuelle.`,"memory.editor.reload":`Recharger la version actuelle`,"memory.editor.rebase":`Garder le brouillon et le rebaser`,"memory.proposal.empty":`Aucune proposition en attente.`,"memory.proposal.approve":`Approuver`,"memory.proposal.approveAria":`Approuver {title}`,"memory.proposal.reject":`Refuser`,"memory.proposal.rejectAria":`Refuser {title}`,"memory.operation.empty":`Aucune opération mémoire pour le moment.`,"memory.operation.created":`Mémoire créée`,"memory.operation.updated":`Mémoire modifiée`,"memory.operation.deleted":`Mémoire supprimée`,"memory.operation.proposed":`Modification proposée`,"memory.operation.approved":`Proposition approuvée`,"memory.operation.rejected":`Proposition refusée`,"memory.operation.promoted":`Mémoire promue`,"memory.operation.cleared":`Portée vidée`,"memory.operation.read":`Mémoire renvoyée par une lecture`,"memory.operation.humanActor":`Vous`,"memory.operation.internalActor":`Agent · {engine}`,"memory.operation.externalActor":`{name} via {transport}`,"memory.operation.loadMore":`Charger les opérations précédentes`,"memory.operation.loading":`Chargement…`,"settings.nav.git":`Git`,"integration.direct":`Connexion directe`,"integration.directHint":`Optionnel : configurez une commande MCP de confiance sur ce serveur, sans configuration Claude. Placez les identifiants dans les variables d’environnement. L’enregistrement remplace toute la connexion ; activez ensuite l’intégration.`,"integration.agentScope":`Les connexions activées sont transmises à Claude Code et Codex au prochain lancement ou à la prochaine reprise. Arrêtez un agent en cours pour appliquer les changements. Les configurations MCP personnelles restent indépendantes.`,"integration.directOverrides":`La connexion directe enregistrée est prioritaire. Supprimez-la pour utiliser une entrée MCP Claude.`,"integration.stored":`Une connexion privée est enregistrée. Ses valeurs ne sont jamais renvoyées au navigateur.`,"integration.example":`Exemple : {example}`,"integration.tokenExample":`VOTRE_TOKEN_NOTION`,"integration.packageExample":`votre-paquet-mcp`,"integration.variableExample":`VOTRE_VARIABLE`,"integration.valueExample":`votre-valeur`,"integration.command":`Exécutable`,"integration.args":`Arguments (tableau JSON)`,"integration.environment":`Environnement et identifiants (objet JSON)`,"integration.failed":`Impossible de charger ou enregistrer la connexion. Vérifiez le JSON et le stockage local.`,"integration.saved":`Connexion enregistrée. Activez l’intégration puis utilisez Tester la connexion.`,"integration.save":`Remplacer la connexion`,"integration.clear":`Supprimer la connexion directe`,"settings.notificationSoundReady":`Signal de fin`,"settings.customSounds":`Sons importés`,"settings.customSoundsHint":`Importe tes propres sons de notification ({count} maximum, {size} Mo chacun, .wav .mp3 .ogg .webm). Ils sont stockés dans le dossier de données de Kōbō et apparaissent dans tous les sélecteurs ci-dessous.`,"settings.customSoundsImport":`Importer un son`,"settings.customSoundsFull":`Limite atteinte ({count} sons). Supprimes-en un avant d’en importer un autre.`,"settings.customSoundsError.type":`Format non supporté. Utilise un fichier .wav, .mp3, .ogg ou .webm.`,"settings.customSoundsError.size":`Fichier trop volumineux. La limite est de {size} Mo.`,"settings.customSoundsError.count":`Limite atteinte ({count} sons). Supprimes-en un avant d’en importer un autre.`,"settings.customSoundsError.failed":`Action impossible. Vérifie la connexion et réessaie.`,"setup.check.worktrees":`Dossier des worktrees`,"setup.fix.worktrees":`Vérifiez la destination des worktrees dans les réglages et ses droits d’écriture.`,"setup.title":`Configurer la première mission`,"setup.intro":`Choisissez un moteur et un projet Git local. Aucun skill ni intégration requis.`,"setup.project":`Dossier local du projet`,"setup.credentials":`Connectez-vous sur ce serveur avec claude /login ou codex login, ou configurez votre clé API. Ces vérifications ne lancent aucun prompt payant.`,"setup.permissions":`Commencez par un plan. Choisissez explicitement les permissions dans le formulaire de création ; un worktree ne cloisonne pas votre machine.`,"setup.check":`Vérifier l’environnement`,"setup.failed":`Cette action a échoué. Vérifiez la connexion puis réessayez.`,"setup.start":`Décrire ma première mission`,"setup.settings":`Ouvrir les réglages`,"setup.skip":`Passer pour le moment`,"setup.status.ok":`Disponible`,"setup.status.missing":`Manquant`,"setup.status.error":`À vérifier`,"setup.status.unknown":`Non vérifié`,"setup.check.node":`Node.js`,"setup.check.platform":`Plateforme`,"setup.check.git":`Git`,"setup.check.shell":`Bash`,"setup.check.storage":`Dossier de données`,"setup.check.runtime":`Paquet du moteur`,"setup.check.authentication":`Authentification`,"setup.check.model":`Accès au modèle`,"setup.check.repository":`Dépôt Git`,"setup.check.firstCommit":`Premier commit`,"setup.check.projectWritable":`Écriture dans le projet`,"setup.fix.node":`Installez Node.js 24.15 ou supérieur.`,"setup.fix.platform":`Utilisez Linux, macOS ou WSL2 ; Windows natif n’est pas pris en charge.`,"setup.fix.git":`Installez Git sur ce serveur.`,"setup.fix.shell":`Installez Bash sur ce serveur.`,"setup.fix.storage":`Vérifiez KOBO_HOME et les droits du dossier.`,"setup.fix.runtime":`Réinstallez Kōbō avec ses dépendances optionnelles de moteur.`,"setup.fix.authentication":`Connectez-vous au fournisseur choisi. La première mission vérifiera l’accès.`,"setup.fix.model":`Choisissez Auto ou un modèle accessible à votre compte.`,"setup.fix.repository":`Choisissez un dossier de travail Git existant.`,"setup.fix.firstCommit":`Créez le premier commit du projet avant de créer un worktree.`,"setup.fix.projectWritable":`Choisissez un dossier de projet accessible en écriture.`,"handoff.freshTitle":`Continuer dans une session fraîche`,"handoff.switchTitle":`Changer de LLM`,"handoff.warning":`Le travail courant est interrompu immédiatement. Une session fraîche reprend automatiquement dans le même workspace, avec les tâches et l’historique conservés.`,"handoff.generate":`Générer une passation avec l’agent actuel`,"handoff.generateHint":`Désactive cette option si son quota est épuisé. Kōbō transmettra l’objectif, les tâches, l’état Git et l’historique sans appeler le LLM actuel.`,"handoff.start":`Démarrer la session fraîche`,"handoff.stopping":`Arrêt de l’agent actuel`,"handoff.generating":`Préparation de la passation`,"handoff.starting":`Démarrage de la session fraîche`,"handoff.completed":`Session fraîche démarrée`,"handoff.failed":`Échec de la passation`,"handoff.interrupted":`Passation interrompue`,"handoff.cancelled":`Passation annulée`,"handoff.skip":`Continuer sans synthèse LLM`,"handoff.cancel":`Annuler la passation`,"handoff.report":`Lire la passation`,"handoff.source":`Session précédente`,"handoff.progress":`Passation de session en cours`,"handoff.blocked":`Résous ou annule la passation pour continuer.`,"handoff.error":`Impossible de préparer la passation de session.`,"handoff.loadFailed":`Impossible de charger l’état de la passation.`,"handoff.status":`Passation de session`,"chat.externalLlm":`LLM externe · {name}`,"search.indexing":`Indexation de l’historique : {processed}/{total}. Résultats partiels.`,"search.indexUnavailable":`Index de recherche indisponible. Réessayez plus tard.`,"blockers.setupConfiguration":`Aucun script de préparation n’est configuré. Ajoutez-en un dans la section Scripts des paramètres.`,"blockers.noWorkspace":`Sélectionnez un workspace pour utiliser cette action.`,"blockers.purged":`Restaurez le worktree depuis le bandeau du workspace avant cette action.`,"blockers.archived":`Désarchivez le workspace depuis son menu pour utiliser cette action.`,"blockers.operation":`Attendez la fin de l’opération en cours.`,"blockers.agentBusy":`Attendez la fin du tour ou arrêtez l’agent depuis la conversation.`,"blockers.configuration":`Configurez cette fonctionnalité dans les paramètres du projet.`,"blockers.settings":`Ouvrir les paramètres`,"workspaceSort.label":`Trier les workspaces`,"workspaceSort.activity":`Dernière activité`,"workspaceSort.created":`Date de création`,"workspaceSort.name":`Nom`,"workspaceSort.attention":`Priorité d’attention`,"workspaceSort.asc":`Croissant`,"workspaceSort.desc":`Décroissant`,"workspaceSort.hint":`Tri dans chaque groupe, archives comprises. Consulter un workspace ne change pas sa dernière activité.`,"model.tooltip":`Modèle utilisé par l’agent pour ce workspace`,"reasoning.tooltip":`Niveau de raisonnement utilisé par l’agent pour ce workspace`,"thinking.label":`Réflexion`,"thinking.noDetails":`L’agent réfléchit…`,"common.save":`Enregistrer`,"common.duplicate":`Dupliquer`,"common.confirm":`Confirmer`,"common.cancel":`Annuler`,"common.open":`Ouvrir`,"common.retry":`Réessayer`,"common.delete":`Supprimer`,"common.close":`Fermer`,"workspace.deleteTitle":`Supprimer le workspace`,"workspace.deleteTypeBranch":`Retapez le nom de la branche pour confirmer`,"workspace.deleteConsequences":`Cela supprime le worktree et tout l’historique.`,"workspace.deleteFailed":`Suppression du workspace impossible.`,"workspace.archiveFailed":`Archivage du workspace impossible.`,"tasks.updateFailed":`Mise à jour de la tâche impossible.`,"dashboard.tooltip":`Tableau de bord`,"dashboard.title":`Tableau de bord`,"dashboard.count":`{n} workspace | {n} workspaces`,"dashboard.empty":`Aucun workspace actif.`,"dashboard.workspace":`Workspace`,"dashboard.status":`Statut`,"dashboard.attention":`Attention`,"dashboard.pr":`PR`,"dashboard.diff":`Diff`,"dashboard.activity":`Activité`,"dashboard.prOpen":`ouverte`,"reliability.title":`Fiabilité des modèles`,"reliability.subtitle":`Comment chaque moteur et modèle s'est réellement terminé sur ce poste.`,"reliability.empty":`Aucune session terminée pour l'instant.`,"reliability.loadFailed":`Impossible de charger les chiffres de fiabilité.`,"reliability.engine":`Moteur`,"reliability.model":`Modèle`,"reliability.sessions":`Sessions`,"reliability.completed":`Terminées`,"reliability.watchdog":`Watchdog`,"reliability.killed":`Arrêtées`,"reliability.errors":`Erreurs`,"reliability.unknown":`Inconnu`,"reliability.median":`Médiane`,"reliability.durationSeconds":`{s}s`,"reliability.durationMinutes":`{m}min {s}s`,"reliability.durationHours":`{h}h {m}min`,"reliability.reset":`Réinitialiser : ne compter que les sessions terminées à partir de maintenant`,"reliability.since":`Depuis le {date}`,"reliability.showAll":`Tout afficher`,"update.available":`Une version plus récente de Kōbō est disponible : {version}`,"update.how":`Comment mettre à jour`,"common.dismiss":`Ignorer`,"common.details":`Détails`,"common.ok":`OK`,"whatsNew.title":`Quoi de neuf`,"common.loading":`Chargement...`,"common.search":`Rechercher...`,"common.refresh":`Actualiser`,"common.copy":`Copier`,"common.copied":`Copié dans le presse-papiers`,"common.copyFailed":`Échec de la copie`,"common.add":`Ajouter`,"folderPicker.title":`Choisir un dossier`,"folderPicker.parent":`Dossier parent`,"folderPicker.empty":`Aucun sous-dossier`,"folderPicker.select":`Choisir ce dossier`,"common.start":`Démarrer`,"common.stop":`Arrêter`,"common.archive":`Archiver`,"common.unarchive":`Désarchiver`,"common.selectWorkspace":`Sélectionnez un espace de travail`,"common.noResults":`Aucun résultat pour « {query} »`,"common.send":`envoyer`,"common.newLine":`nouvelle ligne`,"common.history":`historique`,"common.justNow":`a l'instant`,"common.minutesAgo":`il y a {count}m`,"common.hoursAgo":`il y a {count}h`,"common.daysAgo":`il y a {count}j`,"model.auto":`Auto`,"model.opus55":`Opus 5.5`,"model.opus55Description":`Pour les tâches complexes et quotidiennes, contexte 1M`,"model.sonnet55":`Sonnet 5.5`,"model.sonnet55Description":`Efficace pour les tâches courantes, contexte 1M`,"model.gpt61sol":`GPT-6.1 Sol`,"model.gpt61solDescription":`Dernier modèle polyvalent pour le code et le travail quotidien`,"model.gpt6sol":`GPT-6 Sol`,"model.gpt6solDescription":`Modèle polyvalent de la génération précédente`,"model.gpt6luna":`GPT-6 Luna`,"model.gpt6lunaDescription":`Modèle rapide pour les tâches simples`,"model.fable51":`Fable 5.1`,"model.fable5":`Fable 5`,"model.fable5Description":`Pour les tâches exigeantes et de longue durée`,"model.mythos51":`Mythos 5.1 (Glasswing)`,"model.mythos5":`Mythos 5 (Glasswing)`,"model.fable51Description":`Modèle le plus capable - remplace Fable 5, contexte 1M, adaptive thinking`,"model.mythos51Description":`Fable 5.1 proposé sur invitation uniquement via Project Glasswing`,"model.mythos5Description":`Fable 5.1 sans classificateurs de sécurité — accès limité (Project Glasswing)`,"model.opus":`Opus 4.6`,"model.sonnet":`Sonnet 4.6`,"model.opus5":`Opus 5`,"model.opus48":`Opus 4.8`,"model.opus47Classic":`Opus 4.7 (Classic)`,"model.opus471m":`Opus 4.7 (1M)`,"model.opusClassic":`Opus 4.6 (Classic)`,"model.opus1m":`Opus 4.6 (1M)`,"model.sonnet5":`Sonnet 5`,"model.sonnetClassic":`Sonnet 4.6 (Classic)`,"model.sonnet1m":`Sonnet 4.6 (1M)`,"model.haiku":`Haiku 4.5`,"model.autoDescription":`Claude choisit le modèle optimal`,"model.opus5Description":`Pour le coding agentique complexe et le travail en entreprise, contexte 1M`,"model.opus48Description":`Opus le plus capable — coding agentique long-horizon, contexte 1M par défaut, effort high par défaut`,"model.opus47ClassicDescription":`Dernier Opus, le plus capable`,"model.opus471mDescription":`Dernier Opus, contexte 1M`,"model.opusClassicDescription":`Le plus puissant`,"model.opus1mDescription":`Le plus puissant, contexte 1M`,"model.sonnet5Description":`Meilleure combinaison vitesse/intelligence, contexte 1M`,"model.sonnetClassicDescription":`Équilibré`,"model.sonnet1mDescription":`Équilibré, contexte 1M`,"model.haikuDescription":`Le plus rapide`,"model.gpt6astra":`GPT-6 Astra`,"model.gpt6astraDescription":`Modèle frontière le plus capable, contexte 1M (nécessite une authentification ChatGPT)`,"model.gpt56sol":`GPT-5.6 Sol`,"model.gpt56solDescription":`Modèle polyvalent de génération antérieure`,"model.gpt56terra":`GPT-5.6 Terra`,"model.gpt56terraDescription":`Modèle de codage agentique équilibré pour un usage quotidien (nécessite une authentification ChatGPT)`,"model.gpt56luna":`GPT-5.6 Luna`,"model.gpt56lunaDescription":`Modèle de codage agentique rapide et économique (nécessite une authentification ChatGPT)`,"model.gpt55":`GPT-5.5`,"model.gpt55Description":`Ancien modèle de programmation`,"model.gpt54":`GPT-5.4`,"model.gpt54Description":`Repli par défaut — raisonnement solide, compatible avec une clé API`,"model.gpt54mini":`GPT-5.4 mini`,"model.gpt54miniDescription":`Rapide et efficient — idéal pour les tâches réactives et les sous-agents`,"model.gpt52":`GPT-5.2`,"model.gpt52Description":`Optimisé pour un usage professionnel et les agents longue durée`,"model.gpt53codex":`GPT-5.3 Codex`,"model.gpt53codexDescription":`Modèle spécialisé code pour l'ingénierie logicielle complexe`,"reasoning.auto":`auto`,"reasoning.minimal":`minimal`,"reasoning.none":`aucun`,"reasoning.low":`low`,"reasoning.medium":`medium`,"reasoning.high":`high`,"reasoning.xhigh":`xhigh`,"reasoning.max":`max`,"reasoning.autoDescription":`Laisse le moteur choisir`,"reasoning.minimalDescription":`Raisonnement le plus rapide et superficiel`,"reasoning.noneDescription":`Sans raisonnement supplémentaire`,"reasoning.lowDescription":`Plus rapide, moins profond`,"reasoning.mediumDescription":`Équilibré`,"reasoning.highDescription":`Plus de profondeur`,"reasoning.xhighDescription":`Profondeur étendue, tâches longues`,"reasoning.maxDescription":`Profondeur maximale`,"agentPermissionMode.label":`Mode de permission`,"agentPermissionMode.plan":`Plan`,"agentPermissionMode.bypass":`Bypass`,"agentPermissionMode.strict":`Strict (édits)`,"agentPermissionMode.interactive":`Interactif`,"agentPermissionMode.tooltip":`Comment l'agent gère les permissions d'outils. Plan : lecture seule, aucune écriture. Bypass : aucune demande. Strict : auto-accept des éditions de fichiers, respect des allow/deny pour le reste. Interactif : demande à l'utilisateur avant chaque outil via le panneau de permission.`,"agentPermissionMode.autoLoopOverride":`L'auto-loop force un mode autre que Plan — Plan bloque les outils MCP et les éditions dont la boucle a besoin. Choisis Bypass, Strict ou Interactif.`,"agentPermissionMode.autoLoopLocked":`Verrouillé sur Bypass tant que l'auto-loop est activé — un autre mode bloquerait la boucle sur les demandes de permission. AskUserQuestion fonctionne toujours.`,"workspaceList.title":`Espaces de travail`,"workspaceList.a11y.groupToggle":`Groupe {group}, {count} workspaces`,"workspaceList.a11y.list":`Workspaces`,"workspaceList.a11y.card":`{name}, {status}`,"workspaceList.needsAttention":`Attention requise`,"workspaceList.running":`En cours`,"workspaceList.idle":`Inactif`,"workspaceList.archived":`Archivés`,"workspaceList.archivedToast":`« {name} » archivé`,"workspaceList.archivedUndo":`Annuler`,"workspaceList.unarchiveFailed":`Impossible de désarchiver ce workspace`,"workspaceList.noWorkspaces":`Aucun espace de travail`,"workspaceList.loadFailed":`Impossible de charger vos workspaces`,"workspaceList.loadFailedHint":`Il s’agit d’un échec de connexion, pas d’un compte vide.`,"workspaceList.footer":`{count} espace de travail | {count} espaces de travail`,"workspaceList.footerRunning":`{count} en cours`,"workspaceList.deleteDialog.title":`Supprimer l'espace de travail ?`,"workspaceList.deleteDialog.deleteLocal":`Supprimer la branche locale`,"workspaceList.deleteDialog.deleteRemote":`Supprimer la branche distante`,"workspaceList.deleteDialog.warning":`Attention : cette action est irréversible sur le dépôt distant.`,"workspaceList.deleteArchivedDialog.tooltip":`Supprimer tous les espaces de travail archivés`,"workspaceList.deleteArchivedDialog.title":`Supprimer tous les espaces archivés ?`,"workspaceList.deleteArchivedDialog.message":`Cela supprimera définitivement les {count} espaces de travail archivés. Cette action est irréversible.`,"workspaceList.deleteArchivedDialog.typeCount":`Tapez {count} pour confirmer`,"workspacePage.configure":`Configurer`,"workspacePage.permissions":`Permissions`,"workspacePage.selectWorkspace":`Sélectionnez un espace de travail pour commencer`,"workspacePage.commandPalettePlaceholder":`Rechercher une commande…`,"workspacePage.commandPaletteEmpty":`Aucune commande correspondante`,"workspacePage.commandFocusChat":`Placer le curseur dans le chat`,"workspacePage.commandSearchHistory":`Rechercher dans l'historique du workspace`,"workspacePage.commandTogglePanel":`Afficher ou masquer le panneau latéral`,"workspacePage.commandStartAgent":`Démarrer l'agent`,"workspacePage.commandStopAgent":`Arrêter l'agent`,"workspacePage.commandOpenSettings":`Ouvrir les réglages`,"workspacePage.commandOpenCreate":`Créer un workspace`,"workspacePage.commandOpenSearch":`Recherche globale`,"workspacePage.commandOpenHealth":`Page Santé`,"workspacePage.commandOpenChangelog":`Journal des versions`,"workspacePage.commandGroupWorkspaces":`Aller à un workspace`,"workspacePage.commandPaletteHint":`Palette de commandes`,"workspacePage.session":`Session #{n}`,"workspacePage.newSession":`+ Nouvelle session`,"workspacePage.renameSession":`Renommer`,"workspacePage.renameSessionTitle":`Renommer la session`,"workspacePage.sessionNameLabel":`Nom de la session`,"workspacePage.sessionEndedNotice":`Cette session est terminée. Crée une nouvelle session pour continuer.`,"workspacePage.renameFailed":`Échec du renommage`,"workspacePage.copySessionId":`Copier l'ID de session`,"workspacePage.deleteSession":`Supprimer la session`,"workspacePage.deleteSessionTitle":`Supprimer la session ?`,"workspacePage.deleteSessionConfirm":`Cette action supprime définitivement cette session et son historique de conversation.`,"workspacePage.deleteSessionFailed":`Échec de la suppression de la session`,"workspacePage.noEngineSessionId":`Pas encore d'ID de session — l'agent n'a pas encore démarré cette session`,"workspacePage.createSessionFailed":`Échec de la création de la session`,"workspacePage.startFailed":`Échec du démarrage`,"workspacePage.stopFailed":`Échec de l'arrêt`,"workspacePage.interrupt":`Interrompre`,"workspacePage.interrupted":`Agent interrompu — en attente de votre prochain message`,"workspacePage.lastAgentEvent":`Dernier événement {when}`,"workspacePage.agentStopping":`Arrêt en cours…`,"workspacePage.agentNotRunning":`Aucun agent en cours — le statut est périmé`,"contextMenu.restoreWorktree":`Restaurer le worktree`,"workspacePage.restoringWorktree":`Restauration…`,"workspacePage.worktreeRestoreSuccess":`Worktree restauré`,"workspacePage.worktreeRestoreLimitations":`Recrée les fichiers Git commités. Les dépendances et les fichiers locaux supprimés précédemment ne sont pas restaurés.`,"workspacePage.restoreError.not-found":`Ce workspace n’existe plus. Actualisez la liste des workspaces.`,"workspacePage.restoreError.not-purged":`Ce workspace n’est pas marqué comme purgé. Actualisez-le et vérifiez son répertoire de travail.`,"workspacePage.restoreError.workspace-busy":`Une autre opération est en cours sur ce workspace. Attendez sa fin, puis réessayez.`,"workspacePage.restoreError.worktree-not-owned":`Ce worktree n’est pas géré par Kōbō. Restaurez-le manuellement dans son projet d’origine.`,"workspacePage.restoreError.project-unavailable":`Le projet d’origine est indisponible. Reconnectez son disque ou restaurez le projet à son emplacement initial, puis réessayez.`,"workspacePage.restoreError.path-conflict":`Le chemin du worktree est occupé par un autre dossier ou dépôt. Déplacez le dossier en conflit ou suivez les instructions de récupération manuelle dans Détails.`,"workspacePage.restoreError.branch-in-use":`La branche de travail est déjà utilisée ailleurs. Utilisez ce worktree ou libérez sa branche avant de réessayer.`,"workspacePage.restoreError.recovery-source-unavailable":`La branche de travail et le commit sauvegardé sont introuvables. Vérifiez l’accès au dépôt distant ou consultez la récupération manuelle dans Détails.`,"workspacePage.restoreError.git-failed":`La restauration a échoué. Vérifiez l’accès à Git et les permissions du disque, puis réessayez. Détails ouvre le guide de récupération manuelle.`,"workspacePage.archivedBanner":`Workspace archivé — lecture seule`,"workspacePage.worktreePurgedBanner":`Worktree supprimé — historique conservé`,"workspacePage.worktreePurgedTooltip":`Restaurer le worktree recrée le répertoire de travail et désarchive ce workspace. La conversation, les tâches et les sessions sont conservées. Aucun agent ni serveur de développement ne démarre.`,"workspacePage.pendingInitialPromptBanner":`Un prompt initial est en attente — l'agent ne l'a jamais reçu (le script de setup a planté ou le workspace n'a jamais été démarré). Cliquez sur Démarrer pour l'envoyer.`,"workspacePage.unarchived":`Workspace désarchivé`,"workspacePage.unarchiveFailed":`Échec du désarchivage`,"workspacePage.interruptFailed":`Échec de l'interruption`,"workspacePage.interruptHint":`Interrompre le tour en cours sans terminer la session.`,"workspacePage.interruptTooltip":`Interruption douce (comme Escape) — arrête le tool en cours mais garde la session active`,"workspacePage.pendingNextRun":`Appliqué au prochain démarrage`,"workspacePage.activeSessionModel":`En cours : {model}`,"workspacePage.activeSessionModelTooltip":`Modèle effectivement utilisé par la session sélectionnée`,"workspacePage.switchEngine":`Changer d’engine`,"workspacePage.switchEngineHint":`Continuer ce workspace avec un autre engine agent`,"workspacePage.moreActions":`Plus d'actions`,"workspacePage.switchEngineTitle":`Changer d’engine agent`,"workspacePage.switchEngineWarning":`L’agent actuel sera arrêté et une nouvelle session démarrera dans le même worktree.`,"workspacePage.engineLabel":`Engine`,"workspacePage.engineClaude":`Claude Code`,"workspacePage.engineCodex":`Codex`,"workspacePage.engineHandoff":`Passation pour le nouvel engine`,"workspacePage.engineHandoffHint":`Relisez ou modifiez le contexte envoyé au nouvel agent.`,"workspacePage.confirmSwitchEngine":`Changer d’engine`,"workspacePage.switchEngineFailed":`Échec du changement d’engine`,"whip.dispatchFailed":`Impossible d'envoyer le message du fouet`,"whip.phrase1":`Continue, s’il te plaît.`,"whip.phrase2":`Poursuis les tâches prévues.`,"whip.phrase3":`Passe à l’étape suivante.`,"whip.phrase4":`Vérifie la progression et continue.`,"whip.phrase5":`Continue dans le périmètre convenu.`,"search.title":`Recherche`,"search.tooltip":`Rechercher dans l'historique des agents`,"search.placeholder":`Rechercher dans tous les messages agents…`,"search.includeArchived":`Inclure les workspaces archivés`,"search.loading":`Recherche en cours…`,"search.noResults":`Aucun résultat`,"search.error":`Échec de la recherche : {message}`,"search.resultCount":`{n} résultat(s)`,"search.eventType.userMessage":`Vous`,"search.eventType.agentOutput":`Agent`,"activityFeed.empty":`Aucune activité`,"activityFeed.emptyHint":`Démarrez un espace de travail pour voir la sortie de l'agent ici`,"activityFeed.initialPrompt":`Prompt initial`,"activityFeed.you":`Vous`,"activityFeed.agent":`Agent`,"activityFeed.question":`Question`,"activityFeed.goToPrevious":`Aller au message précédent`,"activityFeed.scrollToBottom":`Défiler vers le bas`,"activityFeed.sendAnswers":`Envoyer les réponses`,"agentBusy.banner":`L'agent est occupé`,"agentBusy.subagentsRunning":`1 sous-agent en cours | {n} sous-agents en cours`,"agentBusy.viewSubagents":`Voir les sous-agents`,"agentBusy.pendingMessage":`En attente — l'agent est occupé`,"terminal.title":`Terminal`,"terminal.open":`Ouvrir le terminal`,"terminal.close":`Fermer le terminal`,"terminal.noWorkspace":`Sélectionnez un espace de travail`,"terminal.noWorktree":`Worktree pas encore créé`,"terminal.error":`Erreur du terminal`,"terminal.exited":`Terminal fermé`,"terminal.disconnected":`Connexion perdue`,"terminal.outputMayBeMissing":`[Connexion interrompue. Une partie de la sortie du terminal peut manquer.]`,"terminal.reconnecting":`Reconnexion… (essai {attempt} sur {max})`,"terminal.reconnect":`Reconnecter`,"chatInput.placeholder":`Message... (/ pour les skills)`,"chatInput.fileSearchHint":`chercher un fichier`,"chatInput.skills":`Skills`,"chatInput.attachImage":`Joindre une image`,"chatInput.queueBanner":`Message en file d'attente — sera envoyé quand l'agent aura terminé`,"chatInput.forceQueue":`forcer l’envoi`,"chatInput.searchHistory":`rechercher`,"chatInput.commandPalette":`commandes`,"chatInput.shortcuts":`Raccourcis clavier`,"chatInput.cancelQueue":`Annuler la file d'attente`,"chatInput.autoLoopBanner":`L'auto-loop tourne — arrête-le pour envoyer un message`,"chatInput.awaitingUserBanner":`L'agent attend ta réponse ci-dessus — réponds via le panneau de question`,"chatInput.autoLoopStop":`Arrêter`,"koboCommand.checkProgressDesc":`Vérifier la progression des tâches et critères d'acceptation`,"chatInput.uploading":`Envoi en cours...`,"voice.title":`Transcription vocale`,"voice.enabled":`Activer la transcription vocale locale`,"voice.pttKey":`Touche push-to-talk`,"voice.pttAlt":`Alt`,"voice.pttCtrlSpace":`Ctrl+Espace`,"voice.language":`Langue (auto ou code)`,"voice.model":`Modèle actif`,"voice.commandPath":`Chemin du binaire Whisper (optionnel)`,"voice.ffmpegPath":`Chemin du binaire ffmpeg (optionnel)`,"voice.temperature":`Température`,"voice.temperatureHint":`Plus bas = plus déterministe ; plus haut = plus flexible mais moins stable.`,"voice.initialPrompt":`Prompt initial (optionnel)`,"voice.initialPromptHint":`Contexte optionnel pour aider Whisper sur les noms, acronymes ou jargon métier.`,"voice.translateToEnglish":`Traduire vers anglais`,"voice.translateToEnglishHint":`Si activé, la parole non anglaise est traduite en anglais au lieu d’être transcrite telle quelle.`,"voice.suppressNst":`Supprimer les tokens non vocaux`,"voice.suppressNstHint":`Essaie de réduire les artefacts non vocaux dans la transcription.`,"voice.installLink":`Installer whisper.cpp`,"voice.installGuideTitle":`Guide d'installation`,"voice.installGuideIntro":`Installe whisper.cpp et ffmpeg, puis renseigne les chemins binaires ci-dessous si nécessaire.`,"voice.installGuideUbuntuTitle":`Ubuntu / Debian`,"voice.installGuideWindowsTitle":`Windows`,"voice.installGuideBinaryPathHint":`Après le build CMake, le binaire Whisper est généralement ici : whisper.cpp/build/bin/whisper-cli`,"voice.installGuideSettingsHint":`Ensuite, renseigne "Chemin du binaire Whisper" et "Chemin du binaire ffmpeg" dans cette section (ou laisse vide si c’est dans le PATH).`,"voice.noneModel":`Aucun modèle actif`,"voice.notInstalled":`non installé`,"voice.download":`Télécharger`,"voice.delete":`Supprimer`,"voice.holdToTalk":`Maintiens pour parler`,"voice.recording":`Enregistrement...`,"voice.transcribing":`Transcription...`,"voice.notSupported":`L'enregistrement vocal n'est pas supporté par ce navigateur`,"voice.errorMicPermission":`Permission micro refusée`,"voice.errorTranscription":`La transcription vocale a échoué`,"voice.downloadFailed":`Échec du téléchargement du modèle`,"voice.deleteFailed":`Échec de la suppression du modèle`,"voice.errorDisabled":`La transcription vocale est désactivée dans les réglages`,"voice.errorModelMissing":`Aucun modèle vocal actif n'est configuré`,"voice.errorModelNotInstalled":`Le modèle vocal actif n'est pas installé`,"voice.errorAudioInvalid":`La capture audio est invalide ou vide`,"voice.errorLanguageInvalid":`La configuration de langue vocale est invalide`,"voice.errorRuntimeMissing":`Le runtime Whisper n'est pas installé ou pas dans le PATH`,"voice.maxDurationReached":`Durée maximale d'enregistrement atteinte`,"voice.runtimeReady":`Runtime prêt : {command}`,"voice.runtimeMissing":`Runtime manquant : {command}`,"voice.ffmpegReady":`ffmpeg prêt`,"voice.ffmpegMissing":`ffmpeg manquant`,"voice.sectionRuntime":`État du runtime`,"voice.sectionActivation":`Activation`,"voice.sectionModels":`Modèles Whisper`,"voice.sectionAdvanced":`Options avancées`,"voice.sectionBehavior":`Comportement de la transcription`,"voice.sectionBinaries":`Chemins des binaires`,"voice.downloadModels":`Télécharger un modèle`,"voice.cancelFailed":`Échec de l'annulation du téléchargement`,"attachments.error.upload":`Échec de l’envoi du fichier. Retirez la pièce jointe puis réessayez.`,"attachments.add":`Joindre des fichiers`,"attachments.remove":`Retirer la pièce jointe`,"attachments.hint":`Collez ou déposez vos fichiers ici · {count} maximum · {size} Mo chacun · {total} Mo au total`,"attachments.error.type":`Utilisez des images PNG, JPEG, GIF ou WebP, des PDF, du Markdown ou des documents texte (TXT, CSV, JSON, YAML, XML, LOG, RST, TOML).`,"attachments.error.size":`Chaque fichier doit être non vide et ne pas dépasser 50 Mo.`,"attachments.error.count":`Vous pouvez joindre jusqu’à 10 fichiers.`,"attachments.error.total":`Les pièces jointes ne doivent pas dépasser 50 Mo au total.`,"attachments.descriptionRequired":`Saisissez une description ou joignez un fichier.`,"createPage.title":`Créer un workspace`,"createPage.fromTemplate":`Depuis un template`,"createPage.fromTemplateNone":`Aucun`,"createPage.saveAsTemplate":`Enregistrer comme template`,"createPage.saveTemplateTitle":`Enregistrer ce formulaire comme template`,"createPage.saveTemplateName":`Nom du template`,"createPage.saveTemplateOverwrite":`Un template nommé « {name} » existe. L'écraser ?`,"createPage.templateSaved":`Template « {name} » enregistré`,"createPage.templateApplied":`Template « {name} » appliqué`,"createPage.duplicatedFrom":`Dupliqué depuis « {name} »`,"createPage.duplicateLoadFailed":`Impossible de charger le workspace à dupliquer.`,"createPage.templateSaveFailed":`Impossible d'enregistrer le template.`,"createPage.presetProjectUnknown":`Ce template vise un projet qui n'est plus configuré ; le projet actuel a été conservé.`,"createPage.copySuffix":`(copie)`,"createPage.subtitle":`Décrivez la mission, choisissez un projet, puis configurez l’agent.`,"createPage.sectionMission":`Mission`,"createPage.sectionMissionHint":`Donnez à l’agent un objectif clair et le contexte nécessaire pour le réaliser.`,"createPage.workspaceNameLabel":`Nom du workspace`,"createPage.descriptionLabel":`Description de la mission`,"createPage.tagsLabel":`Tags`,"createPage.tagsHint":`Classifiez ce workspace`,"createPage.sources":`Sources facultatives`,"createPage.sectionGit":`Projet Git`,"createPage.sectionGitHint":`Choisissez le dépôt, la branche de départ et le mode de worktree.`,"createPage.worktreeMode":`Mode de worktree`,"createPage.worktreeNew":`Nouveau worktree isolé`,"createPage.worktreeExisting":`Réutiliser un worktree existant`,"createPage.projectLabel":`Projet`,"createPage.sourceBranch":`Branche de départ`,"createPage.workingBranchPreview":`Aperçu de la branche de travail`,"createPage.branchNamePending":`nom-du-workspace`,"createPage.sectionAgent":`Agent`,"createPage.sectionAgentHint":`Vérifiez les réglages d’exécution ou activez l’automatisation.`,"createPage.configureAgent":`Configurer l’agent`,"createPage.advancedOptions":`Options avancées`,"createPage.keyboardHint":`Appuyez sur Ctrl/Cmd + Entrée pour créer le workspace.`,"createPage.createWorkspace":`Créer le workspace`,"createPage.compareEngines":`Comparer deux moteurs`,"createPage.engineA":`Moteur A`,"createPage.engineB":`Moteur B`,"createPage.compareBrainstormLocked":`Mode comparaison : chaque moteur brainstorme avec le modèle et l'effort définis dans son bloc ci-dessus.`,"createPage.compareEnginesHint":`Crée deux workspaces à partir de cette tâche, un par moteur, dans des worktrees frères. Leurs diffs peuvent ensuite être comparés côte à côte.`,"createPage.compareNeedsNewWorktree":`Comparer deux moteurs nécessite deux nouveaux worktrees. Désactivez d'abord « utiliser un worktree existant ».`,"createPage.compareNeedsSecondEngine":`Choisissez un second moteur, différent du premier, pour la comparaison.`,"comparison.title":`Comparaison de moteurs`,"comparison.hint":`La même tâche, exécutée par chaque moteur dans son propre worktree.`,"comparison.engine":`Moteur`,"comparison.status":`Statut`,"comparison.tasks":`Tâches`,"comparison.commits":`Commits`,"comparison.files":`Fichiers`,"comparison.diff":`Diff`,"comparison.messages":`Messages`,"comparison.messagesTitle":`Messages de l'agent / vos messages`,"comparison.questions":`Questions`,"comparison.tools":`Outils`,"comparison.errors":`Erreurs`,"comparison.tokens":`Tokens`,"comparison.tokensTitle":`Tokens en entrée / en sortie`,"comparison.sessions":`Sessions`,"comparison.duration":`Durée`,"comparison.exportCsv":`Exporter en CSV`,"comparison.open":`Ouvrir`,"comparison.current":`Celui-ci`,"comparison.archived":`archivé`,"comparison.incomplete":`Un seul workspace de cette comparaison existe. L'autre n'a jamais été créé, ou a été supprimé.`,"createPage.comparisonPartial":`Seulement {count} workspace(s) sur {total} ont été créés. Celui qui existe est utilisable tel quel ; supprimez-le si vous préférez recommencer.`,"createPage.notionEnabled":`Notion activé`,"createPage.importNotion":`Importer depuis Notion`,"createPage.notionPlaceholder":`https://www.notion.so/workspace/Page-title-abc123...`,"createPage.notionValidation":`L'URL doit commencer par https://www.notion.so/ ou https://app.notion.com/`,"createPage.notionAutoExtract":`Les sous-tâches et critères d'acceptation seront extraits automatiquement.`,"createPage.notionPanelChoiceLabel":`Cette URL pointe vers une sous-page (?p=). Sur laquelle veux-tu travailler ?`,"createPage.notionPanelOption":`Sous-page (panel)`,"createPage.notionPanelOptionDesc":`La page que tu consultais — recommandé`,"createPage.notionParentOption":`Page parente`,"createPage.notionParentOptionDesc":`L'epic / database qui la contient`,"createPage.importSentry":`Importer Sentry`,"createPage.sentryEnabled":`Sentry activé`,"createPage.sentryPlaceholder":`https://votre-org.sentry.io/issues/123456`,"createPage.sentryValidation":`L'URL doit pointer vers une issue Sentry (/issues/<id>)`,"createPage.sentryAutoExtract":`L'issue Sentry sera importée automatiquement`,"createPage.sentryExtractHint":`Kobo va extraire l'issue et l'écrire dans .ai/thoughts/`,"createPage.importPr":`Importer depuis une PR`,"createPage.importPrRequiresProject":`Choisir d'abord un projet`,"createPage.importPrNotSupported":`Le forge de ce projet ne permet pas de lister les pull requests`,"createPage.lockedToPr":`Verrouillé sur la PR #{number}`,"createPage.prReadyToCreate":`PR #{number} importée — le workspace peut être créé.`,"createPage.prResumeIntro":`Reprise du travail sur la pull request existante #{number} « {title} » ({url}).`,"createPage.unlockPrCheckout":`Déverrouiller`,"createPage.workspaceName":`Nom de l'espace de travail (par défaut le titre de la page Notion)`,"createPage.workspaceNamePlaceholder":`Nom de l'espace de travail...`,"createPage.instructions":`Instructions supplémentaires (optionnel)...`,"createPage.instructionsPlaceholder":`Décrivez la tâche...`,"createPage.tasks":`Tâches ({count})`,"createPage.addTask":`Ajouter une tâche...`,"createPage.acceptanceCriteria":`Critères d'acceptation ({count})`,"createPage.addCriterion":`Ajouter un critère...`,"createPage.projectPath":`Chemin du projet`,"createPage.branchType":`Type de branche`,"createPage.branch":`Branche`,"createPage.noBranches":`Aucune branche trouvée`,"createPage.enterPath":`Entrez le chemin du projet`,"createPage.skipSetupScript":`Ignorer le script de setup`,"createPage.worktreePickerLabel":`Worktree existant`,"createPage.noOrphanWorktrees":`Aucun worktree orphelin pour ce projet`,"createPage.pickWorktreeRequired":`Sélectionne un worktree à réutiliser`,"createPage.notionExtractHint":`Les sous-tâches et critères d'acceptation seront extraits de la page Notion.`,"createPage.errorCreating":`Erreur lors de la création de l'espace de travail.`,"createPage.branchAdjusted":"Branche déjà existante — création de `{branch}` à la place. Le dossier worktree correspondant utilise le même suffixe.","createPage.localSourceFallback":`Workspace créé à partir de la branche locale (origin injoignable) — la base peut être périmée.`,"createPage.validationNotionUrl":`Veuillez coller une URL Notion valide (https://www.notion.so/... ou https://app.notion.com/...).`,"createPage.validationDescription":`Veuillez décrire la tâche.`,"createPage.validationName":`Veuillez fournir un nom d'espace de travail.`,"createPage.validationPath":`Veuillez entrer le chemin du projet.`,"createPage.validationBranch":`Veuillez sélectionner une branche.`,"createPage.validationFocusHint":`Le champ à corriger est mis en évidence ci-dessous.`,"createPage.progress.validate":`Validation de la demande…`,"createPage.progress.fetch-source-branch":`Récupération de la branche source depuis origin…`,"createPage.progress.inspect-worktree":`Inspection du worktree existant…`,"createPage.progress.extract-notion":`Extraction de la page Notion…`,"createPage.progress.extract-sentry":`Extraction de l’issue Sentry…`,"createPage.progress.create-record":`Création du workspace…`,"createPage.progress.create-tasks":`Création des tâches et critères d’acceptation…`,"createPage.progress.create-worktree":`Création du worktree git…`,"createPage.progress.write-conventions":`Écriture des conventions git…`,"createPage.progress.write-context-files":`Écriture des fichiers de contexte…`,"createPage.progress.build-prompt":`Construction du prompt initial…`,"createPage.progress.setup-script":`Exécution de votre script d’installation…`,"createPage.progress.start-agent":`Démarrage de l’agent…`,"createPage.progress.rollback":`Annulation de la création échouée…`,"createPage.progress.done":`Terminé`,"createPage.progress.step":`Étape {index} sur {total}`,"createPage.errorAtStep":`La création a échoué à l’étape « {step} » : {message}`,"createPage.override.title":`Deux de vos choix ont été remplacés`,"createPage.override.setup-script-forced":`Script d’installation ignoré : le relancer sur un worktree que vous avez déjà préparé pourrait en détruire le contenu.`,"createPage.override.permission-mode-downgraded":`Mode de permission passé de Plan à Bypass : une boucle autonome ne peut pas tourner en Plan, qui bloque les outils et les modifications.`,"settings.title":`Paramètres`,"settings.language":`Langue`,"settings.projectColor":`Couleur`,"settings.projectColorClear":`Effacer`,"settings.projectColorDefault":`Par défaut (gris)`,"settings.workspaceListSection":`Liste des workspaces`,"settings.flattenWorkspaceList":`Afficher en liste plate`,"settings.flattenWorkspaceListHint":`Affiche tous les espaces de travail en liste plate avec un badge projet, plutôt que regroupés par projet.`,"workflow.title":`Fonctionnement Git`,"workflow.hint":`Ces préférences guident les agents ; elles ne remplacent pas les permissions système. Les instructions utilisateur plus restrictives restent prioritaires. Publier ne permet jamais de fusionner. Les nouveaux espaces conservent une copie de ces choix.`,"workflow.commit":`Créer des commits`,"workflow.push":`Pousser la branche`,"workflow.publish":`Publier une PR/MR ou des commentaires`,"workflow.manual":`Manuel — demande explicite`,"workflow.automatic":`Automatique — si nécessaire`,"workflow.inherit":`Hériter`,"workflow.locked":`Arrête l’agent pour modifier ces préférences. La session en cours les a déjà reçues.`,"workflow.updateFailed":`Impossible d’enregistrer la préférence. Vérifie la connexion et réessaie.`,"workflow.save":`Enregistrer les préférences Git`,"workflow.saved":`Préférences Git enregistrées.`,"workflow.planExecution":`Plan permet de préparer la mission. Pour exécuter, choisissez explicitement un mode de permissions compatible puis reprenez la boucle.`,"settings.skillSuite.standard":`Standard (sans extension)`,"settings.skillSuite.standardHint":`Fonctionnement intégré sans suite de skills requise.`,"settings.skillSuite.section":`Suite de skills`,"settings.skillSuite.superpowers":`Superpowers`,"settings.skillSuite.gstack":`gstack`,"settings.skillSuite.custom":`Personnalisé`,"settings.skillSuite.superpowersHint":`Workflow opiné TDD / brainstorm / plan (github.com/obra/superpowers).`,"settings.skillSuite.gstackHint":`Suite de Garry Tan — /review, /ship, /qa, /office-hours, etc. (github.com/garrytan/gstack).`,"settings.skillSuite.superpowersGstack":`Superpowers + gstack`,"settings.skillSuite.superpowersGstackHint":`Les deux suites s'empilent — superpowers pour la méthodo (brainstorm / TDD / plans / review au niveau principes), gstack pour les workflows concrets (/review, /qa, /browse, /design-review, /investigate).`,"settings.skillSuite.ecc":`ECC`,"settings.skillSuite.eccHint":`Framework agentique d'affaan-m — agents, skills, rules et hooks pour planifier, tester, implémenter, relire et mémoriser (github.com/affaan-m/ECC).`,"settings.skillSuite.allThree":`Superpowers + gstack + ECC`,"settings.skillSuite.allThreeHint":`Les trois suites s'empilent — superpowers pour la méthodo, gstack pour les workflows concrets, ECC pour des passes de relecture/implémentation multi-agents structurées.`,"settings.skillSuite.customHint":`Compose les cinq prompts ci-dessous à partir des templates de ton choix, puis modifie-les librement.`,"settings.skillSuite.reloadDefaults":`Recharger les valeurs par défaut`,"settings.skillSuite.reloadDefaultsConfirm":`Remplacer les cinq prompts personnalisés par les valeurs agnostiques par défaut ?`,"settings.skillSuite.customPrompts":`Prompts personnalisés`,"settings.skillSuite.agnostic":`Base agnostique`,"settings.skillSuite.importPrompt":`Importer un template`,"settings.skillSuite.imported":`Template importé. Tu peux maintenant le modifier.`,"settings.skillSuite.importFailed":`Impossible d'importer le template`,"settings.skillSuite.reviewTemplate":`Template de relecture`,"settings.skillSuite.autoLoopReviewGate":`Gate de relecture auto-loop`,"settings.skillSuite.autoLoopGroomingIntro":`Intro de grooming auto-loop`,"settings.skillSuite.qaTemplate":`Template QA`,"settings.skillSuite.brainstormingInstruction":`Instruction phase brainstorming`,"settings.global":`Général`,"settings.projects":`Projets`,"settings.globalSettings":`Paramètres généraux`,"settings.defaultModel":`Modèle par défaut`,"settings.defaultModelClaude":`Modèle par défaut (Claude Code)`,"settings.defaultModelCodex":`Modèle par défaut (OpenAI Codex)`,"settings.agentPermissions":`Permissions de l'agent`,"settings.skipPermissions":`Ignorer les invites de permission (--dangerously-skip-permissions)`,"settings.skipPermissionsWarning":`Attention : désactiver cette option entraînera le refus automatique de toutes les permissions d'outils (Write, Edit, Bash...) en mode headless. L'agent ne pourra que lire.`,"settings.notifications":`Notifications`,"settings.browserNotifications":`Notification navigateur quand l'agent termine`,"settings.audioNotifications":`Notification sonore quand l'agent termine`,"settings.enableBrowserNotifications":`Activer les notifications navigateur`,"settings.testBrowserNotification":`Tester la notification`,"settings.browserNotificationGranted":`Notifications du navigateur autorisées`,"settings.browserNotificationDenied":`Notifications du navigateur bloquées`,"settings.browserNotificationAsk":`Autorisation du navigateur requise`,"settings.browserNotificationUnsupported":`Notifications du navigateur indisponibles`,"settings.browserNotificationPermissionNeeded":`Autorisez les notifications du navigateur pour envoyer un test.`,"settings.browserNotificationTestTitle":`Test de notification Kōbō`,"settings.browserNotificationTestBody":`Les notifications du navigateur fonctionnent.`,"settings.enableAudio":`Activer l'audio`,"settings.notificationSound":`Son de notification`,"settings.notificationSoundHint":`Joué quand l'agent termine ou demande une permission.`,"settings.questionSound":`Son des questions`,"settings.questionSoundHint":`Joué uniquement quand l'agent te pose une question.`,"settings.workspaceCreatedSound":`Son de création d'espace de travail`,"settings.workspaceCreatedSoundHint":`Joué après la création d'un espace de travail.`,"settings.notificationSoundPreview":`Écouter`,"settings.notificationVolume":`Volume`,"settings.notificationSoundHey":`Hey`,"settings.agentErrorSound":`Erreurs de l’agent`,"settings.agentErrorSoundHint":`Joué pour les quotas, rate limits et erreurs de l’agent.`,"settings.notificationSoundBasic":`Notification basique`,"settings.notificationSoundWorkspaceCreated":`Warcraft III — Travail`,"settings.notificationSoundTravailTermine":`Travail terminé`,"settings.notificationSoundFaaah":`Faaah`,"settings.notificationSoundCaVaPeter":`Ça va péter`,"settings.notificationSoundDryFart":`Dry fart`,"settings.notificationSoundForShure":`For shure`,"settings.prSoundSection":`PR / MR et CI`,"settings.soundGeneral":`Son général`,"settings.soundNone":`Aucun son`,"settings.prCiFailedSound":`CI en échec`,"settings.prCiRecoveredSound":`CI rétablie`,"settings.prChangesRequestedSound":`Modifications demandées`,"settings.prApprovedSound":`PR approuvée`,"settings.prMergeConflictSound":`Conflit de merge`,"settings.prReadyToMergeSound":`Prête à merger`,"settings.prMergedSound":`PR mergée`,"settings.prCiFailedSoundHint":`Joué quand la CI passe en échec.`,"settings.prCiRecoveredSoundHint":`Joué quand la CI se rétablit après un échec.`,"settings.prChangesRequestedSoundHint":`Joué quand une review demande des modifications.`,"settings.prApprovedSoundHint":`Joué quand la pull request est approuvée.`,"settings.prMergeConflictSoundHint":`Joué quand un conflit de merge est détecté.`,"settings.prReadyToMergeSoundHint":`Joué quand la pull request devient prête à merger.`,"settings.prMergedSoundHint":`Joué quand la pull request est mergée.`,"settings.notificationSoundSeptiemeCompagnie03":`7ème compagnie 03`,"settings.notificationSoundAllerFtg":`Aller FTG`,"settings.notificationSoundArreteDeMentir":`Arrête de mentir`,"settings.notificationSoundArretezLesMessages":`Arrêtez d'envoyer les messages`,"settings.notificationSoundBahAlorsOnEstNul":`Bah alors, on est nul`,"settings.notificationSoundGtaVDeath":`GTA V — Death`,"settings.notificationSoundNanTuDegages":`Nan, tu dégages`,"settings.notificationSoundNanWallahPardon":`Nan, wallah, pardon`,"settings.notificationSoundOuaisCestGreg":`Ouais, c'est Greg`,"settings.notificationSoundPasCaZinedine":`Pas ça, Zinedine`,"settings.notificationSoundTaGueule":`Ta gueule`,"settings.notificationSoundTuVasLaFermer":`Tu vas la fermer`,"settings.notificationSoundYaaa":`Yaaa`,"settings.notificationSoundMaisLaisseMoiDormirZebi":`Mais laisse-moi dormir zebi`,"settings.defaultPermissionMode":`Mode de permission par défaut`,"settings.defaultPermissionModeClaude":`Mode de permission par défaut (Claude Code)`,"settings.defaultPermissionModeCodex":`Mode de permission par défaut (OpenAI Codex)`,"settings.defaultPermissionModeHint":`Mode appliqué à la création d'un workspace. Plan = lecture seule, Bypass = sans prompt, Strict = auto-accept des éditions avec allow-list, Interactif = demande avant chaque outil.`,"settings.activityFeed":`Flux d'activité`,"settings.verboseMessages":`Afficher les messages système détaillés (task_progress, task_started)`,"settings.showThinkingBlocks":`Afficher les blocs de réflexion des agents`,"settings.whipSettings":`Fouet`,"settings.whipSettingsHint":`Configurez le raccourci et le volume du fouet optionnel.`,"settings.whipEnabled":`Activer le fouet`,"settings.whipEnabledHint":`Affiche le fouet interactif dans les workspaces actifs compatibles.`,"settings.whipVolume":`Volume du fouet`,"settings.whipVolumeMasterAudioDisabled":`L’audio principal est désactivé. Activez les notifications audio pour régler le volume du fouet ; la valeur enregistrée est conservée.`,"whip.overlayLabel":`Fouet interactif`,"whip.overlayInstructions":`Déplacez le pointeur pour contrôler le fouet. Appuyez sur Entrée ou Espace pour le faire claquer. Appuyez sur Échap pour fermer.`,"settings.whipShortcut":`Raccourci du fouet`,"settings.whipShortcutHint":`Cliquez, puis appuyez sur le raccourci à utiliser.`,"settings.whipShortcutRecording":`Appuyez sur un raccourci…`,"settings.whipShortcutButtonLabel":`Raccourci du fouet : {shortcut}`,"settings.whipShortcutRecordingLabel":`Enregistrement du raccourci du fouet. Appuyez sur un raccourci…`,"settings.whipShortcutReset":`Réinitialiser le raccourci`,"settings.whipShortcutReserved":`Ce raccourci est réservé par le navigateur.`,"settings.testIntegration":`Tester la connexion`,"pwa.offline":`Vous êtes hors ligne. Le chat et les agents nécessitent le serveur Kōbō.`,"pwa.reconnecting":`Reconnexion au serveur Kōbō…`,"pwa.installReady":`Installez Kōbō comme application.`,"pwa.install":`Installer`,"pwa.ignore":`Ignorer`,"pwa.updateReady":`Une mise à jour de Kōbō est disponible.`,"pwa.reload":`Recharger`,"chat.searchWorkspaceHistory":`Rechercher dans l’historique du workspace`,"chat.historySearch.user":`Vous`,"chat.historySearch.agent":`Agent`,"chat.openInGitDiff":`Ouvrir dans le diff Git`,"timeline.title":`Chronologie des sessions`,"timeline.export":`Exporter le diagnostic`,"timeline.unnamed":`Session agent`,"timeline.tools":`{count} outils`,"timeline.errors":`{count} erreurs`,"settings.availableVariables":`Variables disponibles dans les modèles de prompt`,"settings.prPromptTemplate":`Modèle de prompt PR`,"settings.prPromptPlaceholder":`Instructions pour l'agent lors de la création de PR GitHub...`,"settings.prPromptHint":`Utilisez les variables listées ci-dessus (syntaxe doubles accolades).`,"settings.reviewPromptTemplate":`Modèle de prompt de review`,"settings.reviewPromptPlaceholder":`Instructions pour l'agent lors de la review des changes de la branche...`,"settings.ciFixPromptTemplate":`Modèle de prompt « Fix CI »`,"settings.ciFixPromptHint":`Envoyé à l'agent quand un workspace voit sa CI échouer. Variables (syntaxe double-accolades) : pr_url, pr_number, pr_title, branch_name, source_branch, workspace_name, workspace_id, project_name, failed_jobs, ci_run_url.`,"settings.ciFixPromptPlaceholder":`Demande à l'agent de diagnostiquer et de corriger les jobs CI en échec...`,"settings.finalizationPromptTemplate":`Prompt de finalisation de l'auto-loop`,"settings.finalizationPromptHint":`Prompt par défaut pour la dernière itération de l'auto-loop (contrôles qualité finaux). Utilisé quand un projet laisse son propre prompt de finalisation vide.`,"settings.finalizationPromptPlaceholder":`Run final quality checks before closing the workspace...`,"settings.notionInitialPrompt":`Prompt initial Notion`,"settings.notionInitialPrompt.help":`Ajouté au prompt de création de workspace quand le workspace a un ticket Notion. Variables : {variables}.`,"settings.notionInitialPrompt.project":`Prompt initial Notion (override)`,"settings.sentryInitialPrompt":`Prompt initial Sentry`,"settings.sentryInitialPrompt.help":`Ajouté au prompt de création de workspace quand le workspace a une issue Sentry. Variables : {variables}.`,"settings.sentryInitialPrompt.project":`Prompt initial Sentry (override)`,"settings.initialPrompt.inheritHint":`Laisser vide pour hériter. Saisir un caractère d'espacement pour désactiver l'injection à ce niveau.`,"settings.resetToDefault":`Réinitialiser`,"settings.resetFailed":`Échec du chargement de la valeur par défaut`,"settings.sentryIntegration":`Intégration Sentry`,"settings.var.prNumber":`Numéro de PR (ex : 42)`,"settings.var.prUrl":`URL complète de la PR créée`,"settings.var.branchName":`Nom de la branche de travail`,"settings.var.sourceBranch":`Branche source ciblée par la PR`,"settings.var.workspaceName":`Nom du workspace`,"settings.var.projectName":`Dernier segment du chemin du projet`,"settings.var.notionUrl":`URL Notion si définie, vide sinon`,"settings.var.commits":`Liste à puces des commits entre source et head`,"settings.var.diffStats":`Résumé shortstat Git (fichiers, insertions, suppressions)`,"settings.var.tasks":`Tâches classiques en liste à cocher`,"settings.var.acceptanceCriteria":`Critères d'acceptation en liste à cocher`,"settings.gitConventions":`Conventions Git (global)`,"settings.gitConventionsPlaceholder":`# Conventions Git...`,"settings.gitConventionsHint":`Ces conventions sont écrites dans .ai/.git-conventions.md pour chaque nouvel espace de travail et doivent être respectées par l'agent avant toute opération Git. Remplacées par les conventions par projet si définies.`,"settings.setupScript":`Script de setup`,"settings.cleanupScript":`Script de cleanup`,"settings.archiveScript":`Script d'archivage`,"settings.archiveScriptHint":`Script shell exécuté côté serveur dans le worktree quand un workspace est archivé. Laisser vide pour désactiver.`,"settings.archiveScriptPlaceholder":`ex. nettoyer des conteneurs, libérer de l'espace disque…`,"settings.hook.sessionEndedTitle":`Hook : fin de session`,"settings.hook.sessionEndedHint":`Exécuté quand une session d'agent se termine, quelle qu'en soit la raison. Lit KOBO_SESSION_END_REASON (completed / error / killed / watchdog), KOBO_SESSION_STOP_CAUSE, KOBO_AUTOLOOP_ACTIVE, KOBO_SESSION_ID et KOBO_SESSION_EXIT_CODE. Vide = désactivé.`,"settings.hook.sessionEndedPlaceholder":`ex. npm test, ou notifier un canal de discussion…`,"settings.hook.prMergedTitle":`Hook : PR mergée`,"settings.hook.prMergedHint":`Exécuté quand une PR est détectée comme mergée, avant l'archivage ou la purge du workspace - le worktree est encore sur le disque. Lit KOBO_PR_NUMBER et KOBO_PR_URL. Vide = désactivé.`,"settings.hook.prMergedPlaceholder":`ex. déclencher un déploiement, taguer une release…`,"settings.hook.autoLoopDisabledTitle":`Hook : auto-loop arrêtée`,"settings.hook.autoLoopDisabledHint":`Exécuté à chaque désactivation de l'auto-loop, par Kōbō ou par vous. Lit KOBO_AUTOLOOP_REASON (completed / stall / error / user-action / awaiting-clarification) et KOBO_TASKS_PENDING. Vide = désactivé.`,"settings.hook.autoLoopDisabledPlaceholder":`ex. envoyer une notification quand la boucle bloque…`,"settings.changeSourceBranchScript":`Script de changement de branche source`,"settings.changeSourceBranchScript.help":`Remplace le cherry-pick intégré quand non vide. Le script possède git, base de PR, force-push et conflits ; Kōbō refuse seulement si l'agent tourne et met à jour la métadonnée source à exit 0.`,"settings.changeSourceBranchScript.envHelp":`KOBO_NEW_BASE — nouvelle branche source choisie dans le dialogue
1
+ var e={"groupMessage.title":`Message groupé`,"groupMessage.description":`Envoyer la même consigne à plusieurs workspaces.`,"groupMessage.devServerRunning":`Uniquement les workspaces avec un serveur de développement lancé`,"groupMessage.tags":`Tags`,"groupMessage.statuses":`Statuts des workspaces`,"groupMessage.filtersHint":`Au moins un tag sélectionné ET un statut sélectionné. Sans filtre, tous les workspaces non archivés sont inclus.`,"groupMessage.selected":`{count} destinataires sélectionnés`,"groupMessage.selectAll":`Tout sélectionner`,"groupMessage.selectNone":`Tout désélectionner`,"groupMessage.nextIteration":`Prochaine itération auto-loop`,"groupMessage.immediate":`Envoi dans le chat`,"groupMessage.empty":`Aucun workspace ne correspond aux filtres.`,"groupMessage.content":`Message`,"groupMessage.deliveryHint":`Les auto-loops reçoivent la consigne à la prochaine itération, sans être arrêtées. Les autres workspaces reçoivent un message de chat, avec reprise des agents inactifs si nécessaire.`,"groupMessage.limit":`Sélectionnez au maximum 200 workspaces par message.`,"groupMessage.finished":`Résultats de l’envoi`,"groupMessage.inProgress":`Envoi du message groupé`,"groupMessage.serverContinues":`Le serveur continue l’envoi si vous fermez cette fenêtre. « En attente » signifie enregistré pour une prochaine itération, pas encore traité.`,"groupMessage.unknownHint":`L’envoi est incertain pour certains workspaces. Consultez leur chat avant d’envoyer un nouveau message.`,"groupMessage.retryHint":`Les destinataires et le message initiaux sont conservés. Vérifier reprend cette même demande sans dupliquer les envois acceptés.`,"groupMessage.retry":`Vérifier cet envoi`,"groupMessage.newMessage":`Nouveau message`,"groupMessage.send":`Envoyer à {count} workspaces`,"groupMessage.state.pending":`À envoyer`,"groupMessage.state.sending":`Envoi en cours`,"groupMessage.state.sent":`Envoyé`,"groupMessage.state.queued":`En attente auto-loop`,"groupMessage.state.rejected":`Refusé`,"groupMessage.state.unknown":`Envoi incertain`,"groupMessage.state.not_sent":`Non envoyé`,"tours.home.groupMessage.title":`Écrire à plusieurs workspaces`,"tours.home.groupMessage.description":`Filtrez par tags, statuts et serveurs de développement lancés, vérifiez les destinataires, puis envoyez une même consigne. Les auto-loops la reçoivent à la prochaine itération. Chaque workspace affiche son résultat d’envoi.`,"autoLoop.finalReview.title":`Réglages de la review finale`,"autoLoop.finalReview.description":`Après toutes les tâches et les vérifications finales, une session séparée revoit les changements. La dernière session de travail corrige les findings, puis une nouvelle review démarre jusqu’à ce qu’il n’en reste aucun.`,"autoLoop.finalReview.enabled":`Review finale automatique`,"autoLoop.finalReview.configure":`Configurer le reviewer`,"autoLoop.finalReview.save":`Enregistrer les réglages`,"autoLoop.finalReview.hint":`Review dans une nouvelle session en lecture seule, puis retour à la dernière session de travail pour corriger les findings. Les réglages sont enregistrés avec ce workspace.`,"autoLoop.finalReview.loadFailed":`Impossible de charger les réglages de la review finale.`,"autoLoop.finalReview.saveFailed":`Impossible d’enregistrer les réglages de la review finale.`,"autoLoop.finalReview.cycle":`Cycle de review {count}`,"autoLoop.finalReview.findings":`{count} findings`,"autoLoop.finalReview.disabled":`Désactivée`,"autoLoop.finalReview.pending":`Review finale prévue`,"autoLoop.finalReview.reviewing":`Review finale en cours`,"autoLoop.finalReview.fixing":`Correction des findings`,"autoLoop.finalReview.completed":`Review finale validée`,"autoLoop.finalReview.blocked":`Review finale à débloquer`,"reviewReturn.title":`Retour de review`,"reviewReturn.reviewing":`Review en cours. Le retour à la session d’origine est enregistré.`,"reviewReturn.ready":`Review terminée. Retour à la session d’origine.`,"reviewReturn.dispatching":`Envoi du résumé de review à la session d’origine.`,"reviewReturn.unknown":`Le serveur s’est arrêté avant de confirmer la remise. La session d’origine a peut-être déjà reçu le résumé.`,"reviewReturn.blocked":`Le retour à la session d’origine nécessite une intervention.`,"reviewReturn.retry":`Réessayer le retour`,"reviewReturn.cancel":`Annuler le retour`,"reviewReturn.retryUnknown":`Réessayer la remise (risque de doublon)`,"reviewReturn.actionFailed":`Impossible de modifier le retour de review.`,"memory.panel.contextsHint":`Ce qui a été transmis au LLM pour cette conversation.`,"memory.panel.entriesHint":`Les notes persistantes que vous pouvez modifier ou réutiliser.`,"memory.panel.proposalsHint":`Les ajouts suggérés par les agents, à approuver ou refuser.`,"memory.panel.operationsHint":`Le journal des lectures et modifications de la mémoire.`,"memory.panel.openDialog":`Ouvrir la mémoire dans un dialogue`,"memory.panel.closeDialog":`Fermer le dialogue mémoire`,"tours.workspace.memorySettings.title":`Gérer les trois niveaux`,"tours.workspace.memorySettings.description":`Ce lien ouvre les paramètres Mémoire : globale pour tous vos projets, projet pour ses workspaces, workspace pour cette mission. Chaque niveau peut être effacé indépendamment, après confirmation ; cela ne retire pas les informations déjà envoyées au LLM.`,"tours.settings.memoryModes.title":`Choisir le mode de mémoire`,"tours.settings.memoryModes.description":`Hybride par défaut : l’agent mémorise dans le workspace et propose les ajouts projet/globaux à valider. Manuel : vous seul écrivez. Automatique : l’agent écrit aux trois niveaux. Cliquez sur Enregistrer pour appliquer le mode.`,"tours.settings.skills.title":`Choisir une suite de skills`,"tours.settings.skills.description":`Commencez avec Standard : aucune extension requise. Superpowers, gstack, ECC et leurs combinaisons ciblent des skills déjà installés et accessibles au moteur choisi. Sélectionner une suite change les consignes de l’agent ; cela n’installe aucun skill et n’accorde aucune permission. Personnalisé permet d’écrire vos propres consignes. Enregistrez votre choix pour l’appliquer.`,"tours.settings.git.description":`Choisissez quand les agents peuvent créer des commits, pousser ou publier. Définissez les conventions Git et les préfixes de branches.`,"tours.settings.git.title":`Fonctionnement Git`,"settings.reviewPromptHint":`Instructions transmises à l’agent au lancement d’une revue de code.`,"settings.help.git":`Préférences de commit, push et publication, conventions Git et préfixes de branches.`,"settings.nav.promptTemplates":`Templates de prompts`,"memory.scope.label":`Portée de la mémoire`,"settings.nav.memory":`Mémoire`,"settings.help.memory":`Choisissez comment Kōbō utilise la mémoire et gérez les mémoires globale, de projet et de workspace.`,"memory.settings.title":`Mémoire`,"memory.panel.title":`Mémoire`,"memory.panel.contexts":`Contextes transmis à cette conversation`,"memory.panel.noContext":`Aucun contexte mémoire transmis à cette conversation.`,"memory.panel.contextStats":`{tokens} jetons estimés · {cumulative} cumulés · {remaining} restants · {omitted} omis`,"memory.panel.entries":`Mémoires disponibles`,"memory.panel.proposals":`Propositions en attente`,"memory.panel.operations":`Opérations du workspace`,"memory.panel.add":`Ajouter une mémoire`,"memory.panel.clearWorkspace":`Effacer la mémoire du workspace`,"memory.panel.settingsLink":`Gérer les mémoires globale et de projet dans les paramètres`,"memory.panel.clearConfirm":`Effacer {entries} mémoires et {proposals} propositions de ce workspace ?`,"memory.panel.confirmClear":`Effacer la mémoire du workspace`,"memory.panel.promoteTo":`Promouvoir vers`,"memory.panel.loading":`Chargement de la mémoire du workspace…`,"memory.panel.loadFailed":`Impossible de charger la mémoire du workspace.`,"memory.panel.archived":`Archivé`,"memory.panel.purged":`Worktree purgé`,"memory.panel.changed":`Modifiée depuis ce contexte`,"memory.panel.deleted":`Supprimée depuis ce contexte`,"memory.panel.truncated":`(texte tronqué)`,"memory.engine.codex":`Codex`,"memory.tool.unexplainedError":`L’outil mémoire n’a fourni aucun détail. Si le budget de lecture est épuisé, arrêtez les lectures ; enregistrer reste possible selon les permissions. Une nouvelle conversation ou une compaction confirmée renouvelle le budget de lecture, pas un simple message.`,"memory.engine.claude-code":`Claude Code`,"memory.context.state.failed":`Échec`,"memory.context.state.prepared":`Préparé`,"memory.context.state.submitted":`Envoyé`,"memory.context.state.initialized":`Initialisé`,"memory.context.state.unknown":`Transmission inconnue`,"memory.settings.intro":`La mémoire conserve des notes explicites pour les prochaines sessions d’agent. Elle ne remplace pas l’historique du fournisseur ni celui des conversations.`,"memory.settings.mode":`Comportement automatique de la mémoire`,"memory.settings.mode.manual":`Manuel`,"memory.settings.modeHint.manual":`Les agents peuvent lire la mémoire. Vous seul pouvez créer ou modifier les notes.`,"memory.settings.mode.automatic":`Automatique`,"memory.settings.modeHint.automatic":`Les agents peuvent retrouver et mettre à jour automatiquement les mémoires pertinentes.`,"memory.settings.mode.hybrid":`Hybride`,"memory.settings.modeHint.hybrid":`Les agents peuvent modifier directement la mémoire du workspace. Les changements projet et globaux nécessitent votre approbation.`,"memory.settings.saveNote":`Le mode fait partie des paramètres et s’applique après enregistrement. Quitter sans enregistrer conserve le mode précédent.`,"memory.settings.manageTitle":`Parcourir et gérer la mémoire`,"memory.settings.independentNote":`Créer, modifier, approuver et effacer une mémoire prend effet immédiatement, indépendamment de l’enregistrement des paramètres.`,"memory.settings.add":`Ajouter une mémoire`,"memory.settings.clear":`Vider cette portée…`,"memory.settings.clearConfirmTitle":`Vider cette portée mémoire ?`,"memory.settings.clearConfirm":`Cette action supprimera {entries} mémoires et {proposals} propositions en attente de la portée {scope} sélectionnée.`,"memory.settings.clearWarning":`Cela efface uniquement les données mémoire de Kōbō, pas les conversations précédentes chez le fournisseur ni l’historique du chat.`,"memory.settings.confirmClear":`Vider la portée`,"memory.settings.cancel":`Annuler`,"memory.settings.loadFailed":`Impossible de charger les portées mémoire.`,"memory.settings.saveFailed":`Impossible d’enregistrer cette modification mémoire.`,"memory.settings.clearFailed":`Impossible d’apercevoir ou de vider cette portée mémoire.`,"memory.settings.clearConflict":`La mémoire a changé depuis l’aperçu. Les nombres ont été actualisés ; vérifiez-les avant de confirmer à nouveau.`,"memory.settings.loadMoreScopes":`Charger plus de portées`,"memory.entry.loadMore":`Charger plus de mémoires`,"memory.settings.loadingScopes":`Chargement des portées…`,"memory.settings.deleteConfirmTitle":`Confirmer la suppression mémoire`,"memory.settings.deleteConfirm":`Supprimer « {title} » de {scope} ?`,"memory.settings.deleteConfirmAction":`Supprimer la mémoire`,"memory.scope.choose":`Choisir une portée`,"memory.scope.global":`Globale`,"memory.scope.project":`Projet`,"memory.scope.workspace":`Workspace`,"memory.entry.empty":`Aucune mémoire dans cette portée.`,"memory.entry.revision":`Révision {revision}`,"memory.entry.edit":`Modifier`,"memory.entry.editAria":`Modifier {title}`,"memory.entry.delete":`Supprimer`,"memory.entry.deleteAria":`Supprimer {title}`,"memory.entry.promote":`Promouvoir`,"memory.entry.promoteAria":`Promouvoir {title}`,"memory.editor.key":`Clé stable`,"memory.editor.title":`Titre`,"memory.editor.body":`Mémoire`,"memory.editor.save":`Enregistrer la mémoire`,"memory.editor.saving":`Enregistrement…`,"memory.editor.cancel":`Annuler`,"memory.editor.conflict":`Cette mémoire a changé ailleurs. Rechargez-la ou gardez votre brouillon et rebasez-le explicitement sur la révision actuelle.`,"memory.editor.reload":`Recharger la version actuelle`,"memory.editor.rebase":`Garder le brouillon et le rebaser`,"memory.proposal.empty":`Aucune proposition en attente.`,"memory.proposal.approve":`Approuver`,"memory.proposal.approveAria":`Approuver {title}`,"memory.proposal.reject":`Refuser`,"memory.proposal.rejectAria":`Refuser {title}`,"memory.operation.empty":`Aucune opération mémoire pour le moment.`,"memory.operation.created":`Mémoire créée`,"memory.operation.updated":`Mémoire modifiée`,"memory.operation.deleted":`Mémoire supprimée`,"memory.operation.proposed":`Modification proposée`,"memory.operation.approved":`Proposition approuvée`,"memory.operation.rejected":`Proposition refusée`,"memory.operation.promoted":`Mémoire promue`,"memory.operation.cleared":`Portée vidée`,"memory.operation.read":`Mémoire renvoyée par une lecture`,"memory.operation.humanActor":`Vous`,"memory.operation.internalActor":`Agent · {engine}`,"memory.operation.externalActor":`{name} via {transport}`,"memory.operation.loadMore":`Charger les opérations précédentes`,"memory.operation.loading":`Chargement…`,"settings.nav.git":`Git`,"integration.direct":`Connexion directe`,"integration.directHint":`Optionnel : configurez une commande MCP de confiance sur ce serveur, sans configuration Claude. Placez les identifiants dans les variables d’environnement. L’enregistrement remplace toute la connexion ; activez ensuite l’intégration.`,"integration.agentScope":`Les connexions activées sont transmises à Claude Code et Codex au prochain lancement ou à la prochaine reprise. Arrêtez un agent en cours pour appliquer les changements. Les configurations MCP personnelles restent indépendantes.`,"integration.directOverrides":`La connexion directe enregistrée est prioritaire. Supprimez-la pour utiliser une entrée MCP Claude.`,"integration.stored":`Une connexion privée est enregistrée. Ses valeurs ne sont jamais renvoyées au navigateur.`,"integration.example":`Exemple : {example}`,"integration.tokenExample":`VOTRE_TOKEN_NOTION`,"integration.packageExample":`votre-paquet-mcp`,"integration.variableExample":`VOTRE_VARIABLE`,"integration.valueExample":`votre-valeur`,"integration.command":`Exécutable`,"integration.args":`Arguments (tableau JSON)`,"integration.environment":`Environnement et identifiants (objet JSON)`,"integration.failed":`Impossible de charger ou enregistrer la connexion. Vérifiez le JSON et le stockage local.`,"integration.saved":`Connexion enregistrée. Activez l’intégration puis utilisez Tester la connexion.`,"integration.save":`Remplacer la connexion`,"integration.clear":`Supprimer la connexion directe`,"settings.notificationSoundReady":`Signal de fin`,"settings.customSounds":`Sons importés`,"settings.customSoundsHint":`Importe tes propres sons de notification ({count} maximum, {size} Mo chacun, .wav .mp3 .ogg .webm). Ils sont stockés dans le dossier de données de Kōbō et apparaissent dans tous les sélecteurs ci-dessous.`,"settings.customSoundsImport":`Importer un son`,"settings.customSoundsFull":`Limite atteinte ({count} sons). Supprimes-en un avant d’en importer un autre.`,"settings.customSoundsError.type":`Format non supporté. Utilise un fichier .wav, .mp3, .ogg ou .webm.`,"settings.customSoundsError.size":`Fichier trop volumineux. La limite est de {size} Mo.`,"settings.customSoundsError.count":`Limite atteinte ({count} sons). Supprimes-en un avant d’en importer un autre.`,"settings.customSoundsError.failed":`Action impossible. Vérifie la connexion et réessaie.`,"setup.check.worktrees":`Dossier des worktrees`,"setup.fix.worktrees":`Vérifiez la destination des worktrees dans les réglages et ses droits d’écriture.`,"setup.title":`Configurer la première mission`,"setup.intro":`Choisissez un moteur et un projet Git local. Aucun skill ni intégration requis.`,"setup.project":`Dossier local du projet`,"setup.credentials":`Connectez-vous sur ce serveur avec claude /login ou codex login, ou configurez votre clé API. Ces vérifications ne lancent aucun prompt payant.`,"setup.permissions":`Commencez par un plan. Choisissez explicitement les permissions dans le formulaire de création ; un worktree ne cloisonne pas votre machine.`,"setup.check":`Vérifier l’environnement`,"setup.failed":`Cette action a échoué. Vérifiez la connexion puis réessayez.`,"setup.start":`Décrire ma première mission`,"setup.settings":`Ouvrir les réglages`,"setup.skip":`Passer pour le moment`,"setup.status.ok":`Disponible`,"setup.status.missing":`Manquant`,"setup.status.error":`À vérifier`,"setup.status.unknown":`Non vérifié`,"setup.check.node":`Node.js`,"setup.check.platform":`Plateforme`,"setup.check.git":`Git`,"setup.check.shell":`Bash`,"setup.check.storage":`Dossier de données`,"setup.check.runtime":`Paquet du moteur`,"setup.check.authentication":`Authentification`,"setup.check.model":`Accès au modèle`,"setup.check.repository":`Dépôt Git`,"setup.check.firstCommit":`Premier commit`,"setup.check.projectWritable":`Écriture dans le projet`,"setup.fix.node":`Installez Node.js 24.15 ou supérieur.`,"setup.fix.platform":`Utilisez Linux, macOS ou WSL2 ; Windows natif n’est pas pris en charge.`,"setup.fix.git":`Installez Git sur ce serveur.`,"setup.fix.shell":`Installez Bash sur ce serveur.`,"setup.fix.storage":`Vérifiez KOBO_HOME et les droits du dossier.`,"setup.fix.runtime":`Réinstallez Kōbō avec ses dépendances optionnelles de moteur.`,"setup.fix.authentication":`Connectez-vous au fournisseur choisi. La première mission vérifiera l’accès.`,"setup.fix.model":`Choisissez Auto ou un modèle accessible à votre compte.`,"setup.fix.repository":`Choisissez un dossier de travail Git existant.`,"setup.fix.firstCommit":`Créez le premier commit du projet avant de créer un worktree.`,"setup.fix.projectWritable":`Choisissez un dossier de projet accessible en écriture.`,"handoff.freshTitle":`Continuer dans une session fraîche`,"handoff.switchTitle":`Changer de LLM`,"handoff.warning":`Le travail courant est interrompu immédiatement. Une session fraîche reprend automatiquement dans le même workspace, avec les tâches et l’historique conservés.`,"handoff.generate":`Générer une passation avec l’agent actuel`,"handoff.generateHint":`Désactive cette option si son quota est épuisé. Kōbō transmettra l’objectif, les tâches, l’état Git et l’historique sans appeler le LLM actuel.`,"handoff.start":`Démarrer la session fraîche`,"handoff.stopping":`Arrêt de l’agent actuel`,"handoff.generating":`Préparation de la passation`,"handoff.starting":`Démarrage de la session fraîche`,"handoff.completed":`Session fraîche démarrée`,"handoff.failed":`Échec de la passation`,"handoff.interrupted":`Passation interrompue`,"handoff.cancelled":`Passation annulée`,"handoff.skip":`Continuer sans synthèse LLM`,"handoff.cancel":`Annuler la passation`,"handoff.report":`Lire la passation`,"handoff.source":`Session précédente`,"handoff.progress":`Passation de session en cours`,"handoff.blocked":`Résous ou annule la passation pour continuer.`,"handoff.error":`Impossible de préparer la passation de session.`,"handoff.loadFailed":`Impossible de charger l’état de la passation.`,"handoff.status":`Passation de session`,"chat.externalLlm":`LLM externe · {name}`,"search.indexing":`Indexation de l’historique : {processed}/{total}. Résultats partiels.`,"search.indexUnavailable":`Index de recherche indisponible. Réessayez plus tard.`,"blockers.setupConfiguration":`Aucun script de préparation n’est configuré. Ajoutez-en un dans la section Scripts des paramètres.`,"blockers.noWorkspace":`Sélectionnez un workspace pour utiliser cette action.`,"blockers.purged":`Restaurez le worktree depuis le bandeau du workspace avant cette action.`,"blockers.archived":`Désarchivez le workspace depuis son menu pour utiliser cette action.`,"blockers.operation":`Attendez la fin de l’opération en cours.`,"blockers.agentBusy":`Attendez la fin du tour ou arrêtez l’agent depuis la conversation.`,"blockers.configuration":`Configurez cette fonctionnalité dans les paramètres du projet.`,"blockers.settings":`Ouvrir les paramètres`,"workspaceSort.label":`Trier les workspaces`,"workspaceSort.activity":`Dernière activité`,"workspaceSort.created":`Date de création`,"workspaceSort.name":`Nom`,"workspaceSort.attention":`Priorité d’attention`,"workspaceSort.asc":`Croissant`,"workspaceSort.desc":`Décroissant`,"workspaceSort.hint":`Tri dans chaque groupe, archives comprises. Consulter un workspace ne change pas sa dernière activité.`,"model.tooltip":`Modèle utilisé par l’agent pour ce workspace`,"reasoning.tooltip":`Niveau de raisonnement utilisé par l’agent pour ce workspace`,"thinking.label":`Réflexion`,"thinking.noDetails":`L’agent réfléchit…`,"common.save":`Enregistrer`,"common.duplicate":`Dupliquer`,"common.confirm":`Confirmer`,"common.cancel":`Annuler`,"common.open":`Ouvrir`,"common.retry":`Réessayer`,"common.delete":`Supprimer`,"common.close":`Fermer`,"workspace.deleteTitle":`Supprimer le workspace`,"workspace.deleteTypeBranch":`Retapez le nom de la branche pour confirmer`,"workspace.deleteConsequences":`Cela supprime le worktree et tout l’historique.`,"workspace.deleteFailed":`Suppression du workspace impossible.`,"workspace.archiveFailed":`Archivage du workspace impossible.`,"tasks.updateFailed":`Mise à jour de la tâche impossible.`,"dashboard.tooltip":`Tableau de bord`,"dashboard.title":`Tableau de bord`,"dashboard.count":`{n} workspace | {n} workspaces`,"dashboard.empty":`Aucun workspace actif.`,"dashboard.workspace":`Workspace`,"dashboard.status":`Statut`,"dashboard.attention":`Attention`,"dashboard.pr":`PR`,"dashboard.diff":`Diff`,"dashboard.activity":`Activité`,"dashboard.prOpen":`ouverte`,"reliability.title":`Fiabilité des modèles`,"reliability.subtitle":`Comment chaque moteur et modèle s'est réellement terminé sur ce poste.`,"reliability.empty":`Aucune session terminée pour l'instant.`,"reliability.loadFailed":`Impossible de charger les chiffres de fiabilité.`,"reliability.engine":`Moteur`,"reliability.model":`Modèle`,"reliability.sessions":`Sessions`,"reliability.completed":`Terminées`,"reliability.watchdog":`Watchdog`,"reliability.killed":`Arrêtées`,"reliability.errors":`Erreurs`,"reliability.unknown":`Inconnu`,"reliability.median":`Médiane`,"reliability.durationSeconds":`{s}s`,"reliability.durationMinutes":`{m}min {s}s`,"reliability.durationHours":`{h}h {m}min`,"reliability.reset":`Réinitialiser : ne compter que les sessions terminées à partir de maintenant`,"reliability.since":`Depuis le {date}`,"reliability.showAll":`Tout afficher`,"update.available":`Une version plus récente de Kōbō est disponible : {version}`,"update.how":`Comment mettre à jour`,"common.dismiss":`Ignorer`,"common.details":`Détails`,"common.ok":`OK`,"whatsNew.title":`Quoi de neuf`,"common.loading":`Chargement...`,"common.search":`Rechercher...`,"common.refresh":`Actualiser`,"common.copy":`Copier`,"common.copied":`Copié dans le presse-papiers`,"common.copyFailed":`Échec de la copie`,"common.add":`Ajouter`,"folderPicker.title":`Choisir un dossier`,"folderPicker.parent":`Dossier parent`,"folderPicker.empty":`Aucun sous-dossier`,"folderPicker.select":`Choisir ce dossier`,"common.start":`Démarrer`,"common.stop":`Arrêter`,"common.archive":`Archiver`,"common.unarchive":`Désarchiver`,"common.selectWorkspace":`Sélectionnez un espace de travail`,"common.noResults":`Aucun résultat pour « {query} »`,"common.send":`envoyer`,"common.newLine":`nouvelle ligne`,"common.history":`historique`,"common.justNow":`a l'instant`,"common.minutesAgo":`il y a {count}m`,"common.hoursAgo":`il y a {count}h`,"common.daysAgo":`il y a {count}j`,"model.auto":`Auto`,"model.opus55":`Opus 5.5`,"model.opus55Description":`Pour les tâches complexes et quotidiennes, contexte 1M`,"model.sonnet55":`Sonnet 5.5`,"model.sonnet55Description":`Efficace pour les tâches courantes, contexte 1M`,"model.gpt61sol":`GPT-6.1 Sol`,"model.gpt61solDescription":`Dernier modèle polyvalent pour le code et le travail quotidien`,"model.gpt6sol":`GPT-6 Sol`,"model.gpt6solDescription":`Modèle polyvalent de la génération précédente`,"model.gpt6luna":`GPT-6 Luna`,"model.gpt6lunaDescription":`Modèle rapide pour les tâches simples`,"model.fable51":`Fable 5.1`,"model.fable5":`Fable 5`,"model.fable5Description":`Pour les tâches exigeantes et de longue durée`,"model.mythos51":`Mythos 5.1 (Glasswing)`,"model.mythos5":`Mythos 5 (Glasswing)`,"model.fable51Description":`Modèle le plus capable - remplace Fable 5, contexte 1M, adaptive thinking`,"model.mythos51Description":`Fable 5.1 proposé sur invitation uniquement via Project Glasswing`,"model.mythos5Description":`Fable 5.1 sans classificateurs de sécurité — accès limité (Project Glasswing)`,"model.opus":`Opus 4.6`,"model.sonnet":`Sonnet 4.6`,"model.opus5":`Opus 5`,"model.opus48":`Opus 4.8`,"model.opus47Classic":`Opus 4.7 (Classic)`,"model.opus471m":`Opus 4.7 (1M)`,"model.opusClassic":`Opus 4.6 (Classic)`,"model.opus1m":`Opus 4.6 (1M)`,"model.sonnet5":`Sonnet 5`,"model.sonnetClassic":`Sonnet 4.6 (Classic)`,"model.sonnet1m":`Sonnet 4.6 (1M)`,"model.haiku":`Haiku 4.5`,"model.autoDescription":`Claude choisit le modèle optimal`,"model.opus5Description":`Pour le coding agentique complexe et le travail en entreprise, contexte 1M`,"model.opus48Description":`Opus le plus capable — coding agentique long-horizon, contexte 1M par défaut, effort high par défaut`,"model.opus47ClassicDescription":`Dernier Opus, le plus capable`,"model.opus471mDescription":`Dernier Opus, contexte 1M`,"model.opusClassicDescription":`Le plus puissant`,"model.opus1mDescription":`Le plus puissant, contexte 1M`,"model.sonnet5Description":`Meilleure combinaison vitesse/intelligence, contexte 1M`,"model.sonnetClassicDescription":`Équilibré`,"model.sonnet1mDescription":`Équilibré, contexte 1M`,"model.haikuDescription":`Le plus rapide`,"model.gpt6astra":`GPT-6 Astra`,"model.gpt6astraDescription":`Modèle frontière le plus capable, contexte 1M (nécessite une authentification ChatGPT)`,"model.gpt56sol":`GPT-5.6 Sol`,"model.gpt56solDescription":`Modèle polyvalent de génération antérieure`,"model.gpt56terra":`GPT-5.6 Terra`,"model.gpt56terraDescription":`Modèle de codage agentique équilibré pour un usage quotidien (nécessite une authentification ChatGPT)`,"model.gpt56luna":`GPT-5.6 Luna`,"model.gpt56lunaDescription":`Modèle de codage agentique rapide et économique (nécessite une authentification ChatGPT)`,"model.gpt55":`GPT-5.5`,"model.gpt55Description":`Ancien modèle de programmation`,"model.gpt54":`GPT-5.4`,"model.gpt54Description":`Repli par défaut — raisonnement solide, compatible avec une clé API`,"model.gpt54mini":`GPT-5.4 mini`,"model.gpt54miniDescription":`Rapide et efficient — idéal pour les tâches réactives et les sous-agents`,"model.gpt52":`GPT-5.2`,"model.gpt52Description":`Optimisé pour un usage professionnel et les agents longue durée`,"model.gpt53codex":`GPT-5.3 Codex`,"model.gpt53codexDescription":`Modèle spécialisé code pour l'ingénierie logicielle complexe`,"reasoning.auto":`auto`,"reasoning.minimal":`minimal`,"reasoning.none":`aucun`,"reasoning.low":`low`,"reasoning.medium":`medium`,"reasoning.high":`high`,"reasoning.xhigh":`xhigh`,"reasoning.max":`max`,"reasoning.autoDescription":`Laisse le moteur choisir`,"reasoning.minimalDescription":`Raisonnement le plus rapide et superficiel`,"reasoning.noneDescription":`Sans raisonnement supplémentaire`,"reasoning.lowDescription":`Plus rapide, moins profond`,"reasoning.mediumDescription":`Équilibré`,"reasoning.highDescription":`Plus de profondeur`,"reasoning.xhighDescription":`Profondeur étendue, tâches longues`,"reasoning.maxDescription":`Profondeur maximale`,"agentPermissionMode.label":`Mode de permission`,"agentPermissionMode.plan":`Plan`,"agentPermissionMode.bypass":`Bypass`,"agentPermissionMode.strict":`Strict (édits)`,"agentPermissionMode.interactive":`Interactif`,"agentPermissionMode.tooltip":`Comment l'agent gère les permissions d'outils. Plan : lecture seule, aucune écriture. Bypass : aucune demande. Strict : auto-accept des éditions de fichiers, respect des allow/deny pour le reste. Interactif : demande à l'utilisateur avant chaque outil via le panneau de permission.`,"agentPermissionMode.autoLoopOverride":`L'auto-loop force un mode autre que Plan — Plan bloque les outils MCP et les éditions dont la boucle a besoin. Choisis Bypass, Strict ou Interactif.`,"agentPermissionMode.autoLoopLocked":`Verrouillé sur Bypass tant que l'auto-loop est activé — un autre mode bloquerait la boucle sur les demandes de permission. AskUserQuestion fonctionne toujours.`,"workspaceList.title":`Espaces de travail`,"workspaceList.a11y.groupToggle":`Groupe {group}, {count} workspaces`,"workspaceList.a11y.list":`Workspaces`,"workspaceList.a11y.card":`{name}, {status}`,"workspaceList.needsAttention":`Attention requise`,"workspaceList.running":`En cours`,"workspaceList.idle":`Inactif`,"workspaceList.archived":`Archivés`,"workspaceList.archivedToast":`« {name} » archivé`,"workspaceList.archivedUndo":`Annuler`,"workspaceList.unarchiveFailed":`Impossible de désarchiver ce workspace`,"workspaceList.noWorkspaces":`Aucun espace de travail`,"workspaceList.loadFailed":`Impossible de charger vos workspaces`,"workspaceList.loadFailedHint":`Il s’agit d’un échec de connexion, pas d’un compte vide.`,"workspaceList.footer":`{count} espace de travail | {count} espaces de travail`,"workspaceList.footerRunning":`{count} en cours`,"workspaceList.deleteDialog.title":`Supprimer l'espace de travail ?`,"workspaceList.deleteDialog.deleteLocal":`Supprimer la branche locale`,"workspaceList.deleteDialog.deleteRemote":`Supprimer la branche distante`,"workspaceList.deleteDialog.warning":`Attention : cette action est irréversible sur le dépôt distant.`,"workspaceList.deleteArchivedDialog.tooltip":`Supprimer tous les espaces de travail archivés`,"workspaceList.deleteArchivedDialog.title":`Supprimer tous les espaces archivés ?`,"workspaceList.deleteArchivedDialog.message":`Cela supprimera définitivement les {count} espaces de travail archivés. Cette action est irréversible.`,"workspaceList.deleteArchivedDialog.typeCount":`Tapez {count} pour confirmer`,"workspacePage.configure":`Configurer`,"workspacePage.permissions":`Permissions`,"workspacePage.selectWorkspace":`Sélectionnez un espace de travail pour commencer`,"workspacePage.commandPalettePlaceholder":`Rechercher une commande…`,"workspacePage.commandPaletteEmpty":`Aucune commande correspondante`,"workspacePage.commandFocusChat":`Placer le curseur dans le chat`,"workspacePage.commandSearchHistory":`Rechercher dans l'historique du workspace`,"workspacePage.commandTogglePanel":`Afficher ou masquer le panneau latéral`,"workspacePage.commandStartAgent":`Démarrer l'agent`,"workspacePage.commandStopAgent":`Arrêter l'agent`,"workspacePage.commandOpenSettings":`Ouvrir les réglages`,"workspacePage.commandOpenCreate":`Créer un workspace`,"workspacePage.commandOpenSearch":`Recherche globale`,"workspacePage.commandOpenHealth":`Page Santé`,"workspacePage.commandOpenChangelog":`Journal des versions`,"workspacePage.commandGroupWorkspaces":`Aller à un workspace`,"workspacePage.commandPaletteHint":`Palette de commandes`,"workspacePage.session":`Session #{n}`,"workspacePage.newSession":`+ Nouvelle session`,"workspacePage.renameSession":`Renommer`,"workspacePage.renameSessionTitle":`Renommer la session`,"workspacePage.sessionNameLabel":`Nom de la session`,"workspacePage.sessionEndedNotice":`Cette session est terminée. Crée une nouvelle session pour continuer.`,"workspacePage.renameFailed":`Échec du renommage`,"workspacePage.copySessionId":`Copier l'ID de session`,"workspacePage.deleteSession":`Supprimer la session`,"workspacePage.deleteSessionTitle":`Supprimer la session ?`,"workspacePage.deleteSessionConfirm":`Cette action supprime définitivement cette session et son historique de conversation.`,"workspacePage.deleteSessionFailed":`Échec de la suppression de la session`,"workspacePage.noEngineSessionId":`Pas encore d'ID de session — l'agent n'a pas encore démarré cette session`,"workspacePage.createSessionFailed":`Échec de la création de la session`,"workspacePage.startFailed":`Échec du démarrage`,"workspacePage.stopFailed":`Échec de l'arrêt`,"workspacePage.interrupt":`Interrompre`,"workspacePage.interrupted":`Agent interrompu — en attente de votre prochain message`,"workspacePage.lastAgentEvent":`Dernier événement {when}`,"workspacePage.agentStopping":`Arrêt en cours…`,"workspacePage.agentNotRunning":`Aucun agent en cours — le statut est périmé`,"contextMenu.restoreWorktree":`Restaurer le worktree`,"workspacePage.restoringWorktree":`Restauration…`,"workspacePage.worktreeRestoreSuccess":`Worktree restauré`,"workspacePage.worktreeRestoreLimitations":`Recrée les fichiers Git commités. Les dépendances et les fichiers locaux supprimés précédemment ne sont pas restaurés.`,"workspacePage.restoreError.not-found":`Ce workspace n’existe plus. Actualisez la liste des workspaces.`,"workspacePage.restoreError.not-purged":`Ce workspace n’est pas marqué comme purgé. Actualisez-le et vérifiez son répertoire de travail.`,"workspacePage.restoreError.workspace-busy":`Une autre opération est en cours sur ce workspace. Attendez sa fin, puis réessayez.`,"workspacePage.restoreError.worktree-not-owned":`Ce worktree n’est pas géré par Kōbō. Restaurez-le manuellement dans son projet d’origine.`,"workspacePage.restoreError.project-unavailable":`Le projet d’origine est indisponible. Reconnectez son disque ou restaurez le projet à son emplacement initial, puis réessayez.`,"workspacePage.restoreError.path-conflict":`Le chemin du worktree est occupé par un autre dossier ou dépôt. Déplacez le dossier en conflit ou suivez les instructions de récupération manuelle dans Détails.`,"workspacePage.restoreError.branch-in-use":`La branche de travail est déjà utilisée ailleurs. Utilisez ce worktree ou libérez sa branche avant de réessayer.`,"workspacePage.restoreError.recovery-source-unavailable":`La branche de travail et le commit sauvegardé sont introuvables. Vérifiez l’accès au dépôt distant ou consultez la récupération manuelle dans Détails.`,"workspacePage.restoreError.git-failed":`La restauration a échoué. Vérifiez l’accès à Git et les permissions du disque, puis réessayez. Détails ouvre le guide de récupération manuelle.`,"workspacePage.archivedBanner":`Workspace archivé — lecture seule`,"workspacePage.worktreePurgedBanner":`Worktree supprimé — historique conservé`,"workspacePage.worktreePurgedTooltip":`Restaurer le worktree recrée le répertoire de travail et désarchive ce workspace. La conversation, les tâches et les sessions sont conservées. Aucun agent ni serveur de développement ne démarre.`,"workspacePage.pendingInitialPromptBanner":`Un prompt initial est en attente — l'agent ne l'a jamais reçu (le script de setup a planté ou le workspace n'a jamais été démarré). Cliquez sur Démarrer pour l'envoyer.`,"workspacePage.unarchived":`Workspace désarchivé`,"workspacePage.unarchiveFailed":`Échec du désarchivage`,"workspacePage.interruptFailed":`Échec de l'interruption`,"workspacePage.interruptHint":`Interrompre le tour en cours sans terminer la session.`,"workspacePage.interruptTooltip":`Interruption douce (comme Escape) — arrête le tool en cours mais garde la session active`,"workspacePage.pendingNextRun":`Appliqué au prochain démarrage`,"workspacePage.activeSessionModel":`En cours : {model}`,"workspacePage.activeSessionModelTooltip":`Modèle effectivement utilisé par la session sélectionnée`,"workspacePage.switchEngine":`Changer d’engine`,"workspacePage.switchEngineHint":`Continuer ce workspace avec un autre engine agent`,"workspacePage.moreActions":`Plus d'actions`,"workspacePage.switchEngineTitle":`Changer d’engine agent`,"workspacePage.switchEngineWarning":`L’agent actuel sera arrêté et une nouvelle session démarrera dans le même worktree.`,"workspacePage.engineLabel":`Engine`,"workspacePage.engineClaude":`Claude Code`,"workspacePage.engineCodex":`Codex`,"workspacePage.engineHandoff":`Passation pour le nouvel engine`,"workspacePage.engineHandoffHint":`Relisez ou modifiez le contexte envoyé au nouvel agent.`,"workspacePage.confirmSwitchEngine":`Changer d’engine`,"workspacePage.switchEngineFailed":`Échec du changement d’engine`,"whip.dispatchFailed":`Impossible d'envoyer le message du fouet`,"whip.phrase1":`Continue, s’il te plaît.`,"whip.phrase2":`Poursuis les tâches prévues.`,"whip.phrase3":`Passe à l’étape suivante.`,"whip.phrase4":`Vérifie la progression et continue.`,"whip.phrase5":`Continue dans le périmètre convenu.`,"search.title":`Recherche`,"search.tooltip":`Rechercher dans l'historique des agents`,"search.placeholder":`Rechercher dans tous les messages agents…`,"search.includeArchived":`Inclure les workspaces archivés`,"search.loading":`Recherche en cours…`,"search.noResults":`Aucun résultat`,"search.error":`Échec de la recherche : {message}`,"search.resultCount":`{n} résultat(s)`,"search.eventType.userMessage":`Vous`,"search.eventType.agentOutput":`Agent`,"activityFeed.empty":`Aucune activité`,"activityFeed.emptyHint":`Démarrez un espace de travail pour voir la sortie de l'agent ici`,"activityFeed.initialPrompt":`Prompt initial`,"activityFeed.you":`Vous`,"activityFeed.agent":`Agent`,"activityFeed.question":`Question`,"activityFeed.goToPrevious":`Aller au message précédent`,"activityFeed.scrollToBottom":`Défiler vers le bas`,"activityFeed.sendAnswers":`Envoyer les réponses`,"agentBusy.banner":`L'agent est occupé`,"agentBusy.subagentsRunning":`1 sous-agent en cours | {n} sous-agents en cours`,"agentBusy.viewSubagents":`Voir les sous-agents`,"agentBusy.pendingMessage":`En attente — l'agent est occupé`,"terminal.title":`Terminal`,"terminal.open":`Ouvrir le terminal`,"terminal.close":`Fermer le terminal`,"terminal.noWorkspace":`Sélectionnez un espace de travail`,"terminal.noWorktree":`Worktree pas encore créé`,"terminal.error":`Erreur du terminal`,"terminal.exited":`Terminal fermé`,"terminal.disconnected":`Connexion perdue`,"terminal.outputMayBeMissing":`[Connexion interrompue. Une partie de la sortie du terminal peut manquer.]`,"terminal.reconnecting":`Reconnexion… (essai {attempt} sur {max})`,"terminal.reconnect":`Reconnecter`,"chatInput.placeholder":`Message... (/ pour les skills)`,"chatInput.fileSearchHint":`chercher un fichier`,"chatInput.skills":`Skills`,"chatInput.attachImage":`Joindre une image`,"chatInput.queueBanner":`Message en file d'attente — sera envoyé quand l'agent aura terminé`,"chatInput.forceQueue":`forcer l’envoi`,"chatInput.searchHistory":`rechercher`,"chatInput.commandPalette":`commandes`,"chatInput.shortcuts":`Raccourcis clavier`,"chatInput.cancelQueue":`Annuler la file d'attente`,"chatInput.autoLoopBanner":`L'auto-loop tourne — arrête-le pour envoyer un message`,"chatInput.awaitingUserBanner":`L'agent attend ta réponse ci-dessus — réponds via le panneau de question`,"chatInput.autoLoopStop":`Arrêter`,"koboCommand.checkProgressDesc":`Vérifier la progression des tâches et critères d'acceptation`,"chatInput.uploading":`Envoi en cours...`,"voice.title":`Transcription vocale`,"voice.enabled":`Activer la transcription vocale locale`,"voice.pttKey":`Touche push-to-talk`,"voice.pttAlt":`Alt`,"voice.pttCtrlSpace":`Ctrl+Espace`,"voice.language":`Langue (auto ou code)`,"voice.model":`Modèle actif`,"voice.commandPath":`Chemin du binaire Whisper (optionnel)`,"voice.ffmpegPath":`Chemin du binaire ffmpeg (optionnel)`,"voice.temperature":`Température`,"voice.temperatureHint":`Plus bas = plus déterministe ; plus haut = plus flexible mais moins stable.`,"voice.initialPrompt":`Prompt initial (optionnel)`,"voice.initialPromptHint":`Contexte optionnel pour aider Whisper sur les noms, acronymes ou jargon métier.`,"voice.translateToEnglish":`Traduire vers anglais`,"voice.translateToEnglishHint":`Si activé, la parole non anglaise est traduite en anglais au lieu d’être transcrite telle quelle.`,"voice.suppressNst":`Supprimer les tokens non vocaux`,"voice.suppressNstHint":`Essaie de réduire les artefacts non vocaux dans la transcription.`,"voice.installLink":`Installer whisper.cpp`,"voice.installGuideTitle":`Guide d'installation`,"voice.installGuideIntro":`Installe whisper.cpp et ffmpeg, puis renseigne les chemins binaires ci-dessous si nécessaire.`,"voice.installGuideUbuntuTitle":`Ubuntu / Debian`,"voice.installGuideWindowsTitle":`Windows`,"voice.installGuideBinaryPathHint":`Après le build CMake, le binaire Whisper est généralement ici : whisper.cpp/build/bin/whisper-cli`,"voice.installGuideSettingsHint":`Ensuite, renseigne "Chemin du binaire Whisper" et "Chemin du binaire ffmpeg" dans cette section (ou laisse vide si c’est dans le PATH).`,"voice.noneModel":`Aucun modèle actif`,"voice.notInstalled":`non installé`,"voice.download":`Télécharger`,"voice.delete":`Supprimer`,"voice.holdToTalk":`Maintiens pour parler`,"voice.recording":`Enregistrement...`,"voice.transcribing":`Transcription...`,"voice.notSupported":`L'enregistrement vocal n'est pas supporté par ce navigateur`,"voice.errorMicPermission":`Permission micro refusée`,"voice.errorTranscription":`La transcription vocale a échoué`,"voice.downloadFailed":`Échec du téléchargement du modèle`,"voice.deleteFailed":`Échec de la suppression du modèle`,"voice.errorDisabled":`La transcription vocale est désactivée dans les réglages`,"voice.errorModelMissing":`Aucun modèle vocal actif n'est configuré`,"voice.errorModelNotInstalled":`Le modèle vocal actif n'est pas installé`,"voice.errorAudioInvalid":`La capture audio est invalide ou vide`,"voice.errorLanguageInvalid":`La configuration de langue vocale est invalide`,"voice.errorRuntimeMissing":`Le runtime Whisper n'est pas installé ou pas dans le PATH`,"voice.maxDurationReached":`Durée maximale d'enregistrement atteinte`,"voice.runtimeReady":`Runtime prêt : {command}`,"voice.runtimeMissing":`Runtime manquant : {command}`,"voice.ffmpegReady":`ffmpeg prêt`,"voice.ffmpegMissing":`ffmpeg manquant`,"voice.sectionRuntime":`État du runtime`,"voice.sectionActivation":`Activation`,"voice.sectionModels":`Modèles Whisper`,"voice.sectionAdvanced":`Options avancées`,"voice.sectionBehavior":`Comportement de la transcription`,"voice.sectionBinaries":`Chemins des binaires`,"voice.downloadModels":`Télécharger un modèle`,"voice.cancelFailed":`Échec de l'annulation du téléchargement`,"attachments.error.upload":`Échec de l’envoi du fichier. Retirez la pièce jointe puis réessayez.`,"attachments.add":`Joindre des fichiers`,"attachments.remove":`Retirer la pièce jointe`,"attachments.hint":`Collez ou déposez vos fichiers ici · {count} maximum · {size} Mo chacun · {total} Mo au total`,"attachments.error.type":`Utilisez des images PNG, JPEG, GIF ou WebP, des PDF, du Markdown ou des documents texte (TXT, CSV, JSON, YAML, XML, LOG, RST, TOML).`,"attachments.error.size":`Chaque fichier doit être non vide et ne pas dépasser 50 Mo.`,"attachments.error.count":`Vous pouvez joindre jusqu’à 10 fichiers.`,"attachments.error.total":`Les pièces jointes ne doivent pas dépasser 50 Mo au total.`,"attachments.descriptionRequired":`Saisissez une description ou joignez un fichier.`,"createPage.title":`Créer un workspace`,"createPage.fromTemplate":`Depuis un template`,"createPage.fromTemplateNone":`Aucun`,"createPage.saveAsTemplate":`Enregistrer comme template`,"createPage.saveTemplateTitle":`Enregistrer ce formulaire comme template`,"createPage.saveTemplateName":`Nom du template`,"createPage.saveTemplateOverwrite":`Un template nommé « {name} » existe. L'écraser ?`,"createPage.templateSaved":`Template « {name} » enregistré`,"createPage.templateApplied":`Template « {name} » appliqué`,"createPage.duplicatedFrom":`Dupliqué depuis « {name} »`,"createPage.duplicateLoadFailed":`Impossible de charger le workspace à dupliquer.`,"createPage.templateSaveFailed":`Impossible d'enregistrer le template.`,"createPage.presetProjectUnknown":`Ce template vise un projet qui n'est plus configuré ; le projet actuel a été conservé.`,"createPage.copySuffix":`(copie)`,"createPage.subtitle":`Décrivez la mission, choisissez un projet, puis configurez l’agent.`,"createPage.sectionMission":`Mission`,"createPage.sectionMissionHint":`Donnez à l’agent un objectif clair et le contexte nécessaire pour le réaliser.`,"createPage.workspaceNameLabel":`Nom du workspace`,"createPage.descriptionLabel":`Description de la mission`,"createPage.tagsLabel":`Tags`,"createPage.tagsHint":`Classifiez ce workspace`,"createPage.sources":`Sources facultatives`,"createPage.sectionGit":`Projet Git`,"createPage.sectionGitHint":`Choisissez le dépôt, la branche de départ et le mode de worktree.`,"createPage.worktreeMode":`Mode de worktree`,"createPage.worktreeNew":`Nouveau worktree isolé`,"createPage.worktreeExisting":`Réutiliser un worktree existant`,"createPage.projectLabel":`Projet`,"createPage.sourceBranch":`Branche de départ`,"createPage.workingBranchPreview":`Aperçu de la branche de travail`,"createPage.branchNamePending":`nom-du-workspace`,"createPage.sectionAgent":`Agent`,"createPage.sectionAgentHint":`Vérifiez les réglages d’exécution ou activez l’automatisation.`,"createPage.configureAgent":`Configurer l’agent`,"createPage.advancedOptions":`Options avancées`,"createPage.keyboardHint":`Appuyez sur Ctrl/Cmd + Entrée pour créer le workspace.`,"createPage.createWorkspace":`Créer le workspace`,"createPage.compareEngines":`Comparer deux moteurs`,"createPage.engineA":`Moteur A`,"createPage.engineB":`Moteur B`,"createPage.compareBrainstormLocked":`Mode comparaison : chaque moteur brainstorme avec le modèle et l'effort définis dans son bloc ci-dessus.`,"createPage.compareEnginesHint":`Crée deux workspaces à partir de cette tâche, un par moteur, dans des worktrees frères. Leurs diffs peuvent ensuite être comparés côte à côte.`,"createPage.compareNeedsNewWorktree":`Comparer deux moteurs nécessite deux nouveaux worktrees. Désactivez d'abord « utiliser un worktree existant ».`,"createPage.compareNeedsSecondEngine":`Choisissez un second moteur, différent du premier, pour la comparaison.`,"comparison.title":`Comparaison de moteurs`,"comparison.hint":`La même tâche, exécutée par chaque moteur dans son propre worktree.`,"comparison.engine":`Moteur`,"comparison.status":`Statut`,"comparison.tasks":`Tâches`,"comparison.commits":`Commits`,"comparison.files":`Fichiers`,"comparison.diff":`Diff`,"comparison.messages":`Messages`,"comparison.messagesTitle":`Messages de l'agent / vos messages`,"comparison.questions":`Questions`,"comparison.tools":`Outils`,"comparison.errors":`Erreurs`,"comparison.tokens":`Tokens`,"comparison.tokensTitle":`Tokens en entrée / en sortie`,"comparison.sessions":`Sessions`,"comparison.duration":`Durée`,"comparison.exportCsv":`Exporter en CSV`,"comparison.open":`Ouvrir`,"comparison.current":`Celui-ci`,"comparison.archived":`archivé`,"comparison.incomplete":`Un seul workspace de cette comparaison existe. L'autre n'a jamais été créé, ou a été supprimé.`,"createPage.comparisonPartial":`Seulement {count} workspace(s) sur {total} ont été créés. Celui qui existe est utilisable tel quel ; supprimez-le si vous préférez recommencer.`,"createPage.notionEnabled":`Notion activé`,"createPage.importNotion":`Importer depuis Notion`,"createPage.notionPlaceholder":`https://www.notion.so/workspace/Page-title-abc123...`,"createPage.notionValidation":`L'URL doit commencer par https://www.notion.so/ ou https://app.notion.com/`,"createPage.notionAutoExtract":`Les sous-tâches et critères d'acceptation seront extraits automatiquement.`,"createPage.notionPanelChoiceLabel":`Cette URL pointe vers une sous-page (?p=). Sur laquelle veux-tu travailler ?`,"createPage.notionPanelOption":`Sous-page (panel)`,"createPage.notionPanelOptionDesc":`La page que tu consultais — recommandé`,"createPage.notionParentOption":`Page parente`,"createPage.notionParentOptionDesc":`L'epic / database qui la contient`,"createPage.importSentry":`Importer Sentry`,"createPage.sentryEnabled":`Sentry activé`,"createPage.sentryPlaceholder":`https://votre-org.sentry.io/issues/123456`,"createPage.sentryValidation":`L'URL doit pointer vers une issue Sentry (/issues/<id>)`,"createPage.sentryAutoExtract":`L'issue Sentry sera importée automatiquement`,"createPage.sentryExtractHint":`Kobo va extraire l'issue et l'écrire dans .ai/thoughts/`,"createPage.importPr":`Importer depuis une PR`,"createPage.importPrRequiresProject":`Choisir d'abord un projet`,"createPage.importPrNotSupported":`Le forge de ce projet ne permet pas de lister les pull requests`,"createPage.lockedToPr":`Verrouillé sur la PR #{number}`,"createPage.prReadyToCreate":`PR #{number} importée — le workspace peut être créé.`,"createPage.prResumeIntro":`Reprise du travail sur la pull request existante #{number} « {title} » ({url}).`,"createPage.unlockPrCheckout":`Déverrouiller`,"createPage.workspaceName":`Nom de l'espace de travail (par défaut le titre de la page Notion)`,"createPage.workspaceNamePlaceholder":`Nom de l'espace de travail...`,"createPage.instructions":`Instructions supplémentaires (optionnel)...`,"createPage.instructionsPlaceholder":`Décrivez la tâche...`,"createPage.tasks":`Tâches ({count})`,"createPage.addTask":`Ajouter une tâche...`,"createPage.acceptanceCriteria":`Critères d'acceptation ({count})`,"createPage.addCriterion":`Ajouter un critère...`,"createPage.projectPath":`Chemin du projet`,"createPage.branchType":`Type de branche`,"createPage.branch":`Branche`,"createPage.noBranches":`Aucune branche trouvée`,"createPage.enterPath":`Entrez le chemin du projet`,"createPage.skipSetupScript":`Ignorer le script de setup`,"createPage.worktreePickerLabel":`Worktree existant`,"createPage.noOrphanWorktrees":`Aucun worktree orphelin pour ce projet`,"createPage.pickWorktreeRequired":`Sélectionne un worktree à réutiliser`,"createPage.notionExtractHint":`Les sous-tâches et critères d'acceptation seront extraits de la page Notion.`,"createPage.errorCreating":`Erreur lors de la création de l'espace de travail.`,"createPage.branchAdjusted":"Branche déjà existante — création de `{branch}` à la place. Le dossier worktree correspondant utilise le même suffixe.","createPage.localSourceFallback":`Workspace créé à partir de la branche locale (origin injoignable) — la base peut être périmée.`,"createPage.validationNotionUrl":`Veuillez coller une URL Notion valide (https://www.notion.so/... ou https://app.notion.com/...).`,"createPage.validationDescription":`Veuillez décrire la tâche.`,"createPage.validationName":`Veuillez fournir un nom d'espace de travail.`,"createPage.validationPath":`Veuillez entrer le chemin du projet.`,"createPage.validationBranch":`Veuillez sélectionner une branche.`,"createPage.validationFocusHint":`Le champ à corriger est mis en évidence ci-dessous.`,"createPage.progress.validate":`Validation de la demande…`,"createPage.progress.fetch-source-branch":`Récupération de la branche source depuis origin…`,"createPage.progress.inspect-worktree":`Inspection du worktree existant…`,"createPage.progress.extract-notion":`Extraction de la page Notion…`,"createPage.progress.extract-sentry":`Extraction de l’issue Sentry…`,"createPage.progress.create-record":`Création du workspace…`,"createPage.progress.create-tasks":`Création des tâches et critères d’acceptation…`,"createPage.progress.create-worktree":`Création du worktree git…`,"createPage.progress.write-conventions":`Écriture des conventions git…`,"createPage.progress.write-context-files":`Écriture des fichiers de contexte…`,"createPage.progress.build-prompt":`Construction du prompt initial…`,"createPage.progress.setup-script":`Exécution de votre script d’installation…`,"createPage.progress.start-agent":`Démarrage de l’agent…`,"createPage.progress.rollback":`Annulation de la création échouée…`,"createPage.progress.done":`Terminé`,"createPage.progress.step":`Étape {index} sur {total}`,"createPage.errorAtStep":`La création a échoué à l’étape « {step} » : {message}`,"createPage.override.title":`Deux de vos choix ont été remplacés`,"createPage.override.setup-script-forced":`Script d’installation ignoré : le relancer sur un worktree que vous avez déjà préparé pourrait en détruire le contenu.`,"createPage.override.permission-mode-downgraded":`Mode de permission passé de Plan à Bypass : une boucle autonome ne peut pas tourner en Plan, qui bloque les outils et les modifications.`,"settings.title":`Paramètres`,"settings.language":`Langue`,"settings.projectColor":`Couleur`,"settings.projectColorClear":`Effacer`,"settings.projectColorDefault":`Par défaut (gris)`,"settings.workspaceListSection":`Liste des workspaces`,"settings.flattenWorkspaceList":`Afficher en liste plate`,"settings.flattenWorkspaceListHint":`Affiche tous les espaces de travail en liste plate avec un badge projet, plutôt que regroupés par projet.`,"workflow.title":`Fonctionnement Git`,"workflow.hint":`Ces préférences guident les agents ; elles ne remplacent pas les permissions système. Les instructions utilisateur plus restrictives restent prioritaires. Publier ne permet jamais de fusionner. Les nouveaux espaces conservent une copie de ces choix.`,"workflow.commit":`Créer des commits`,"workflow.push":`Pousser la branche`,"workflow.publish":`Publier une PR/MR ou des commentaires`,"workflow.manual":`Manuel — demande explicite`,"workflow.automatic":`Automatique — si nécessaire`,"workflow.inherit":`Hériter`,"workflow.locked":`Arrête l’agent pour modifier ces préférences. La session en cours les a déjà reçues.`,"workflow.updateFailed":`Impossible d’enregistrer la préférence. Vérifie la connexion et réessaie.`,"workflow.save":`Enregistrer les préférences Git`,"workflow.saved":`Préférences Git enregistrées.`,"workflow.planExecution":`Plan permet de préparer la mission. Pour exécuter, choisissez explicitement un mode de permissions compatible puis reprenez la boucle.`,"settings.skillSuite.standard":`Standard (sans extension)`,"settings.skillSuite.standardHint":`Fonctionnement intégré sans suite de skills requise.`,"settings.skillSuite.section":`Suite de skills`,"settings.skillSuite.superpowers":`Superpowers`,"settings.skillSuite.gstack":`gstack`,"settings.skillSuite.custom":`Personnalisé`,"settings.skillSuite.superpowersHint":`Workflow opiné TDD / brainstorm / plan (github.com/obra/superpowers).`,"settings.skillSuite.gstackHint":`Suite de Garry Tan — /review, /ship, /qa, /office-hours, etc. (github.com/garrytan/gstack).`,"settings.skillSuite.superpowersGstack":`Superpowers + gstack`,"settings.skillSuite.superpowersGstackHint":`Les deux suites s'empilent — superpowers pour la méthodo (brainstorm / TDD / plans / review au niveau principes), gstack pour les workflows concrets (/review, /qa, /browse, /design-review, /investigate).`,"settings.skillSuite.ecc":`ECC`,"settings.skillSuite.eccHint":`Framework agentique d'affaan-m — agents, skills, rules et hooks pour planifier, tester, implémenter, relire et mémoriser (github.com/affaan-m/ECC).`,"settings.skillSuite.allThree":`Superpowers + gstack + ECC`,"settings.skillSuite.allThreeHint":`Les trois suites s'empilent — superpowers pour la méthodo, gstack pour les workflows concrets, ECC pour des passes de relecture/implémentation multi-agents structurées.`,"settings.skillSuite.customHint":`Compose les cinq prompts ci-dessous à partir des templates de ton choix, puis modifie-les librement.`,"settings.skillSuite.reloadDefaults":`Recharger les valeurs par défaut`,"settings.skillSuite.reloadDefaultsConfirm":`Remplacer les cinq prompts personnalisés par les valeurs agnostiques par défaut ?`,"settings.skillSuite.customPrompts":`Prompts personnalisés`,"settings.skillSuite.agnostic":`Base agnostique`,"settings.skillSuite.importPrompt":`Importer un template`,"settings.skillSuite.imported":`Template importé. Tu peux maintenant le modifier.`,"settings.skillSuite.importFailed":`Impossible d'importer le template`,"settings.skillSuite.reviewTemplate":`Template de relecture`,"settings.skillSuite.autoLoopReviewGate":`Gate de relecture auto-loop`,"settings.skillSuite.autoLoopGroomingIntro":`Intro de grooming auto-loop`,"settings.skillSuite.qaTemplate":`Template QA`,"settings.skillSuite.brainstormingInstruction":`Instruction phase brainstorming`,"settings.global":`Général`,"settings.projects":`Projets`,"settings.globalSettings":`Paramètres généraux`,"settings.defaultModel":`Modèle par défaut`,"settings.defaultModelClaude":`Modèle par défaut (Claude Code)`,"settings.defaultModelCodex":`Modèle par défaut (OpenAI Codex)`,"settings.agentPermissions":`Permissions de l'agent`,"settings.skipPermissions":`Ignorer les invites de permission (--dangerously-skip-permissions)`,"settings.skipPermissionsWarning":`Attention : désactiver cette option entraînera le refus automatique de toutes les permissions d'outils (Write, Edit, Bash...) en mode headless. L'agent ne pourra que lire.`,"settings.notifications":`Notifications`,"settings.browserNotifications":`Notification navigateur quand l'agent termine`,"settings.audioNotifications":`Notification sonore quand l'agent termine`,"settings.enableBrowserNotifications":`Activer les notifications navigateur`,"settings.testBrowserNotification":`Tester la notification`,"settings.browserNotificationGranted":`Notifications du navigateur autorisées`,"settings.browserNotificationDenied":`Notifications du navigateur bloquées`,"settings.browserNotificationAsk":`Autorisation du navigateur requise`,"settings.browserNotificationUnsupported":`Notifications du navigateur indisponibles`,"settings.browserNotificationPermissionNeeded":`Autorisez les notifications du navigateur pour envoyer un test.`,"settings.browserNotificationTestTitle":`Test de notification Kōbō`,"settings.browserNotificationTestBody":`Les notifications du navigateur fonctionnent.`,"settings.enableAudio":`Activer l'audio`,"settings.notificationSound":`Son de notification`,"settings.notificationSoundHint":`Joué quand l'agent termine ou demande une permission.`,"settings.questionSound":`Son des questions`,"settings.questionSoundHint":`Joué uniquement quand l'agent te pose une question.`,"settings.workspaceCreatedSound":`Son de création d'espace de travail`,"settings.workspaceCreatedSoundHint":`Joué après la création d'un espace de travail.`,"settings.notificationSoundPreview":`Écouter`,"settings.notificationVolume":`Volume`,"settings.notificationSoundHey":`Hey`,"settings.agentErrorSound":`Erreurs de l’agent`,"settings.agentErrorSoundHint":`Joué pour les quotas, rate limits et erreurs de l’agent.`,"settings.notificationSoundBasic":`Notification basique`,"settings.notificationSoundWorkspaceCreated":`Warcraft III — Travail`,"settings.notificationSoundTravailTermine":`Travail terminé`,"settings.notificationSoundFaaah":`Faaah`,"settings.notificationSoundCaVaPeter":`Ça va péter`,"settings.notificationSoundDryFart":`Dry fart`,"settings.notificationSoundForShure":`For shure`,"settings.prSoundSection":`PR / MR et CI`,"settings.soundGeneral":`Son général`,"settings.soundNone":`Aucun son`,"settings.prCiFailedSound":`CI en échec`,"settings.prCiRecoveredSound":`CI rétablie`,"settings.prChangesRequestedSound":`Modifications demandées`,"settings.prApprovedSound":`PR approuvée`,"settings.prMergeConflictSound":`Conflit de merge`,"settings.prReadyToMergeSound":`Prête à merger`,"settings.prMergedSound":`PR mergée`,"settings.prCiFailedSoundHint":`Joué quand la CI passe en échec.`,"settings.prCiRecoveredSoundHint":`Joué quand la CI se rétablit après un échec.`,"settings.prChangesRequestedSoundHint":`Joué quand une review demande des modifications.`,"settings.prApprovedSoundHint":`Joué quand la pull request est approuvée.`,"settings.prMergeConflictSoundHint":`Joué quand un conflit de merge est détecté.`,"settings.prReadyToMergeSoundHint":`Joué quand la pull request devient prête à merger.`,"settings.prMergedSoundHint":`Joué quand la pull request est mergée.`,"settings.notificationSoundSeptiemeCompagnie03":`7ème compagnie 03`,"settings.notificationSoundAllerFtg":`Aller FTG`,"settings.notificationSoundArreteDeMentir":`Arrête de mentir`,"settings.notificationSoundArretezLesMessages":`Arrêtez d'envoyer les messages`,"settings.notificationSoundBahAlorsOnEstNul":`Bah alors, on est nul`,"settings.notificationSoundGtaVDeath":`GTA V — Death`,"settings.notificationSoundNanTuDegages":`Nan, tu dégages`,"settings.notificationSoundNanWallahPardon":`Nan, wallah, pardon`,"settings.notificationSoundOuaisCestGreg":`Ouais, c'est Greg`,"settings.notificationSoundPasCaZinedine":`Pas ça, Zinedine`,"settings.notificationSoundTaGueule":`Ta gueule`,"settings.notificationSoundTuVasLaFermer":`Tu vas la fermer`,"settings.notificationSoundYaaa":`Yaaa`,"settings.notificationSoundMaisLaisseMoiDormirZebi":`Mais laisse-moi dormir zebi`,"settings.defaultPermissionMode":`Mode de permission par défaut`,"settings.defaultPermissionModeClaude":`Mode de permission par défaut (Claude Code)`,"settings.defaultPermissionModeCodex":`Mode de permission par défaut (OpenAI Codex)`,"settings.defaultPermissionModeHint":`Mode appliqué à la création d'un workspace. Plan = lecture seule, Bypass = sans prompt, Strict = auto-accept des éditions avec allow-list, Interactif = demande avant chaque outil.`,"settings.activityFeed":`Flux d'activité`,"settings.verboseMessages":`Afficher les messages système détaillés (task_progress, task_started)`,"settings.showThinkingBlocks":`Afficher les blocs de réflexion des agents`,"settings.whipSettings":`Fouet`,"settings.whipSettingsHint":`Configurez le raccourci et le volume du fouet optionnel.`,"settings.whipEnabled":`Activer le fouet`,"settings.whipEnabledHint":`Affiche le fouet interactif dans les workspaces actifs compatibles.`,"settings.whipVolume":`Volume du fouet`,"settings.whipVolumeMasterAudioDisabled":`L’audio principal est désactivé. Activez les notifications audio pour régler le volume du fouet ; la valeur enregistrée est conservée.`,"whip.overlayLabel":`Fouet interactif`,"whip.overlayInstructions":`Déplacez le pointeur pour contrôler le fouet. Appuyez sur Entrée ou Espace pour le faire claquer. Appuyez sur Échap pour fermer.`,"settings.whipShortcut":`Raccourci du fouet`,"settings.whipShortcutHint":`Cliquez, puis appuyez sur le raccourci à utiliser.`,"settings.whipShortcutRecording":`Appuyez sur un raccourci…`,"settings.whipShortcutButtonLabel":`Raccourci du fouet : {shortcut}`,"settings.whipShortcutRecordingLabel":`Enregistrement du raccourci du fouet. Appuyez sur un raccourci…`,"settings.whipShortcutReset":`Réinitialiser le raccourci`,"settings.whipShortcutReserved":`Ce raccourci est réservé par le navigateur.`,"settings.testIntegration":`Tester la connexion`,"pwa.offline":`Vous êtes hors ligne. Le chat et les agents nécessitent le serveur Kōbō.`,"pwa.reconnecting":`Reconnexion au serveur Kōbō…`,"pwa.installReady":`Installez Kōbō comme application.`,"pwa.install":`Installer`,"pwa.ignore":`Ignorer`,"pwa.updateReady":`Une mise à jour de Kōbō est disponible.`,"pwa.reload":`Recharger`,"chat.searchWorkspaceHistory":`Rechercher dans l’historique du workspace`,"chat.historySearch.user":`Vous`,"chat.historySearch.agent":`Agent`,"chat.openInGitDiff":`Ouvrir dans le diff Git`,"timeline.title":`Chronologie des sessions`,"timeline.export":`Exporter le diagnostic`,"timeline.unnamed":`Session agent`,"timeline.tools":`{count} outils`,"timeline.errors":`{count} erreurs`,"settings.availableVariables":`Variables disponibles dans les modèles de prompt`,"settings.prPromptTemplate":`Modèle de prompt PR`,"settings.prPromptPlaceholder":`Instructions pour l'agent lors de la création de PR GitHub...`,"settings.prPromptHint":`Utilisez les variables listées ci-dessus (syntaxe doubles accolades).`,"settings.reviewPromptTemplate":`Modèle de prompt de review`,"settings.reviewPromptPlaceholder":`Instructions pour l'agent lors de la review des changes de la branche...`,"settings.ciFixPromptTemplate":`Modèle de prompt « Fix CI »`,"settings.ciFixPromptHint":`Envoyé à l'agent quand un workspace voit sa CI échouer. Variables (syntaxe double-accolades) : pr_url, pr_number, pr_title, branch_name, source_branch, workspace_name, workspace_id, project_name, failed_jobs, ci_run_url.`,"settings.ciFixPromptPlaceholder":`Demande à l'agent de diagnostiquer et de corriger les jobs CI en échec...`,"settings.finalizationPromptTemplate":`Prompt de finalisation de l'auto-loop`,"settings.finalizationPromptHint":`Prompt par défaut pour la dernière itération de l'auto-loop (contrôles qualité finaux). Utilisé quand un projet laisse son propre prompt de finalisation vide.`,"settings.finalizationPromptPlaceholder":`Run final quality checks before closing the workspace...`,"settings.notionInitialPrompt":`Prompt initial Notion`,"settings.notionInitialPrompt.help":`Ajouté au prompt de création de workspace quand le workspace a un ticket Notion. Variables : {variables}.`,"settings.notionInitialPrompt.project":`Prompt initial Notion (override)`,"settings.sentryInitialPrompt":`Prompt initial Sentry`,"settings.sentryInitialPrompt.help":`Ajouté au prompt de création de workspace quand le workspace a une issue Sentry. Variables : {variables}.`,"settings.sentryInitialPrompt.project":`Prompt initial Sentry (override)`,"settings.initialPrompt.inheritHint":`Laisser vide pour hériter. Saisir un caractère d'espacement pour désactiver l'injection à ce niveau.`,"settings.resetToDefault":`Réinitialiser`,"settings.resetFailed":`Échec du chargement de la valeur par défaut`,"settings.sentryIntegration":`Intégration Sentry`,"settings.var.prNumber":`Numéro de PR (ex : 42)`,"settings.var.prUrl":`URL complète de la PR créée`,"settings.var.branchName":`Nom de la branche de travail`,"settings.var.sourceBranch":`Branche source ciblée par la PR`,"settings.var.workspaceName":`Nom du workspace`,"settings.var.projectName":`Dernier segment du chemin du projet`,"settings.var.notionUrl":`URL Notion si définie, vide sinon`,"settings.var.commits":`Liste à puces des commits entre source et head`,"settings.var.diffStats":`Résumé shortstat Git (fichiers, insertions, suppressions)`,"settings.var.tasks":`Tâches classiques en liste à cocher`,"settings.var.acceptanceCriteria":`Critères d'acceptation en liste à cocher`,"settings.gitConventions":`Conventions Git (global)`,"settings.gitConventionsPlaceholder":`# Conventions Git...`,"settings.gitConventionsHint":`Ces conventions sont écrites dans .ai/.git-conventions.md pour chaque nouvel espace de travail et doivent être respectées par l'agent avant toute opération Git. Remplacées par les conventions par projet si définies.`,"settings.setupScript":`Script de setup`,"settings.cleanupScript":`Script de cleanup`,"settings.archiveScript":`Script d'archivage`,"settings.archiveScriptHint":`Script shell exécuté côté serveur dans le worktree quand un workspace est archivé. Laisser vide pour désactiver.`,"settings.archiveScriptPlaceholder":`ex. nettoyer des conteneurs, libérer de l'espace disque…`,"settings.stopDevServersOnShutdown":`Arrêter les serveurs de dev à la fermeture de Kōbō`,"settings.stopDevServersOnShutdownHint":`Activé par défaut. Désactivez pour conserver les conteneurs Docker pendant une mise à jour. Les processus locaux sont toujours arrêtés. Les scripts d’arrêt restent exécutés.`,"settings.hook.shutdownTitle":`Hook : arrêt de Kōbō`,"settings.hook.shutdownHint":`Exécuté dans chaque worktree existant, même archivé, après les agents et processus locaux, avant l’arrêt automatique de Docker. Limite : 1 minute par script. PROJECT_NAME et INSTANCE identifient sa stack Docker ; PROJECT_NAME est vide si aucune instance n’est connue. Une surcharge par projet remplace ce script. Une commande Docker ici peut arrêter les conteneurs même si leur arrêt automatique est désactivé.`,"settings.hook.shutdownPlaceholder":`ex. arrêter les conteneurs Docker de ce workspace…`,"tours.settings.shutdown.title":`Arrêt de Kōbō`,"tours.settings.shutdown.description":`Choisissez si Kōbō arrête les conteneurs Docker à sa fermeture. Le hook global s’exécute dans chaque worktree existant (1 minute maximum) ; un script par projet peut le remplacer. Les processus locaux sont toujours arrêtés.`,"settings.hook.sessionEndedTitle":`Hook : fin de session`,"settings.hook.sessionEndedHint":`Exécuté quand une session d'agent se termine, quelle qu'en soit la raison. Lit KOBO_SESSION_END_REASON (completed / error / killed / watchdog), KOBO_SESSION_STOP_CAUSE, KOBO_AUTOLOOP_ACTIVE, KOBO_SESSION_ID et KOBO_SESSION_EXIT_CODE. Vide = désactivé.`,"settings.hook.sessionEndedPlaceholder":`ex. npm test, ou notifier un canal de discussion…`,"settings.hook.prMergedTitle":`Hook : PR mergée`,"settings.hook.prMergedHint":`Exécuté quand une PR est détectée comme mergée, avant l'archivage ou la purge du workspace - le worktree est encore sur le disque. Lit KOBO_PR_NUMBER et KOBO_PR_URL. Vide = désactivé.`,"settings.hook.prMergedPlaceholder":`ex. déclencher un déploiement, taguer une release…`,"settings.hook.autoLoopDisabledTitle":`Hook : auto-loop arrêtée`,"settings.hook.autoLoopDisabledHint":`Exécuté à chaque désactivation de l'auto-loop, par Kōbō ou par vous. Lit KOBO_AUTOLOOP_REASON (completed / stall / error / user-action / awaiting-clarification) et KOBO_TASKS_PENDING. Vide = désactivé.`,"settings.hook.autoLoopDisabledPlaceholder":`ex. envoyer une notification quand la boucle bloque…`,"settings.changeSourceBranchScript":`Script de changement de branche source`,"settings.changeSourceBranchScript.help":`Remplace le cherry-pick intégré quand non vide. Le script possède git, base de PR, force-push et conflits ; Kōbō refuse seulement si l'agent tourne et met à jour la métadonnée source à exit 0.`,"settings.changeSourceBranchScript.envHelp":`KOBO_NEW_BASE — nouvelle branche source choisie dans le dialogue
2
2
  KOBO_OLD_BASE — précédente branche source du workspace
3
3
  KOBO_WORKING_BRANCH — branche de travail du workspace
4
4
  KOBO_WORKTREE_PATH — chemin absolu du worktree (et cwd)
@@ -8,7 +8,7 @@ KOBO_WORKSPACE_ID — id Kōbō du workspace (stable après renommage)
8
8
  KOBO_WORKSPACE_NAME — nom affiché du workspace
9
9
  KOBO_FORGE — forge résolue : github / gitlab / none
10
10
  KOBO_PR_NUMBER — numéro de PR/MR sur la forge résolue (vide si aucune ouverte)`,"settings.changeSourceBranchScript.placeholder":`#!/usr/bin/env bash
11
- # ton script — utilise $KOBO_NEW_BASE / $KOBO_OLD_BASE / $KOBO_WORKING_BRANCH …`,"settings.changeSourceBranchScript.resetDefault":`Réinitialiser au défaut Kōbō`,"settings.changeSourceBranchScript.replaceConfirmTitle":`Réinitialiser le script ?`,"settings.changeSourceBranchScript.replaceConfirm":`Tes modifications seront remplacées par le script Kōbō par défaut. Continuer ?`,"settings.cleanupScriptHint":`Script shell exécuté dans le worktree après chaque fin de session de l'agent. En mode auto-loop, il ne s'exécute qu'une fois toutes les tâches terminées. Laisser vide pour désactiver.`,"settings.cleanupScriptPlaceholder":`ex. supprimer des fichiers temporaires, arrêter des conteneurs…`,"settings.cleanupScriptMode":`Quand l'exécuter`,"settings.cleanupScriptMode.idle":`À chaque fin de session — même s'il reste des tâches`,"settings.cleanupScriptMode.noTasks":`Uniquement quand plus aucune tâche Kōbō`,"settings.cleanupScriptOnlyOnChanges":`Lancer uniquement si des fichiers ont été modifiés, ajoutés ou supprimés`,"settings.cleanupScriptMode.inherit":`Hériter du réglage global`,"settings.taskPromptTemplate":`Prompt de tâche`,"settings.taskPromptTemplatePlaceholder":`Prompt inséré automatiquement dans la description de tâche…`,"settings.taskPromptTemplateHint":`Injecté automatiquement dans la description de tâche sur la page de création quand ce projet est sélectionné. S'il n'est pas modifié, il est remplacé en changeant de projet ; dès que vous l'éditez, votre texte est conservé.`,"settings.setupScriptPlaceholder":`npm install`,"settings.setupScriptHint":`Exécuté avec bash dans le worktree après sa création, avant le démarrage de l'agent. Pas besoin de shebang. En cas d'échec, le workspace passe en erreur. Timeout : 5 minutes.`,"settings.e2e.title":`Tests E2E`,"settings.e2e.framework":`Framework`,"settings.e2e.frameworkNone":`Aucun`,"settings.e2e.frameworkOther":`Autre`,"settings.e2e.skill":`Skill (optionnel)`,"settings.e2e.skillPlaceholder":`ex : cypress-tester`,"settings.e2e.prompt":`Guidance personnalisée (optionnel)`,"settings.e2e.promptPlaceholder":`ex : utiliser le page-object, cibler les data-testid`,"settings.e2e.helpText":`Quand configuré, l'agent de grooming auto-loop insère des sous-tâches E2E pour les fonctionnalités UI.`,"settings.finalization.title":`Finalisation de l'auto-loop`,"settings.finalization.helpText":`Optionnel : un prompt que l'agent exécute lors de la toute dernière itération de l'auto-loop. Typiquement utilisé pour les contrôles qualité finaux (lint, typecheck, tests). L'étape de grooming créera une tâche préfixée [FINAL] qui utilisera ce prompt.`,"settings.finalization.prompt":`Prompt de finalisation`,"settings.finalization.promptPlaceholder":`ex. Lance npm run lint et npm test, puis marque cette tâche comme terminée.`,"settings.editorCommand":`Commande éditeur`,"settings.editorCommandPlaceholder":`code, phpstorm, subl, vim...`,"settings.editorCommandHint":`Commande utilisée pour ouvrir le worktree dans votre éditeur. Le chemin du worktree est passé en argument.`,"settings.fileManagerCommand":`Commande explorateur de fichiers`,"settings.fileManagerCommandPlaceholder":`xdg-open, open, nautilus, dolphin, explorer...`,"settings.fileManagerCommandHint":`Commande utilisée pour ouvrir le worktree dans votre explorateur de fichiers. Le chemin du worktree est passé en argument. Laissez vide pour masquer le bouton.`,"settings.terminalCommand":`Commande du terminal`,"settings.terminalCommandHint":`Commande pour lancer le terminal dans le worktree. Placeholder {path} optionnel pour le répertoire.`,"settings.terminalCommandPlaceholder":`kitty · alacritty · gnome-terminal --working-directory={path}`,"settings.mcpSelection":`Sélection MCP Claude`,"settings.mcpAutoSelect":`Auto (premier MCP actif correspondant)`,"settings.notionMcp":`Clé MCP Notion`,"settings.sentryMcp":`Clé MCP Sentry`,"settings.mcpSelectionHint":`Les entrées actives sont lues depuis ~/.claude.json. Laisser Auto pour utiliser le comportement par défaut.`,"settings.configuredProjects":`Projets configurés`,"settings.noProjects":`Aucun projet configuré`,"settings.addProject":`Ajouter un projet`,"settings.copyFrom":`Copier les settings depuis`,"settings.copyFromPlaceholder":`(aucun — partir des valeurs par défaut)`,"settings.copyFromHint":`Copie tous les settings sauf le path, le nom affiché et la branche source.`,"settings.copyFromConfirmTitle":`Écraser les valeurs actuelles ?`,"settings.copyFromConfirm":`Cela écrasera les valeurs du formulaire avec les settings de « {project} ». Continuer ?`,"settings.newProject":`Nouveau projet`,"settings.editProject":`Modifier le projet`,"help.title":`Aide`,"help.tours":`Visites guidées`,"help.steps":`{n} étape | {n} étapes`,"help.markAllSeen":`Marquer toutes comme vues`,"help.markAllSeenHint":`Valide les visites actuelles sans les lancer.`,"help.resetAll":`Réinitialiser toutes les visites`,"help.resetAllHint":`Relance l'accueil ; chaque écran rejouera sa visite à la prochaine ouverture.`,"help.status.unseen":`non vue`,"help.status.partial":`en partie`,"help.status.seen":`vue`,"help.replayThis":`Rejouer la visite de cet écran`,"tours.next":`Suivant`,"tours.prev":`Précédent`,"tours.done":`Terminé`,"tours.exitConfirm":`Quitter la visite guidée ? Elle ne se relancera plus automatiquement ; vous pourrez la rejouer à tout moment depuis le menu Aide.`,"tours.home.title":`S'orienter`,"tours.home.list.title":`Workspaces`,"tours.home.list.description":`Chaque mission vit ici avec son statut. Les badges signalent une CI en échec, une review demandant des changements ou une PR prête à merger. Faites glisser le bord intérieur d’un panneau avec la souris ou le doigt pour le redimensionner. Les boutons du haut passent sur plusieurs lignes si nécessaire.`,"tours.home.create.title":`Créer un workspace`,"tours.home.create.description":`Un workspace, c'est un worktree Git, une branche et une session d'agent pour une tâche.`,"tours.home.search.title":`Recherche`,"tours.home.search.description":`Filtrez la liste par nom. L'icône de recherche en haut ouvre la recherche plein texte dans les conversations des agents.`,"tours.home.dashboard.title":`Tableau de bord`,"tours.home.dashboard.description":`Un tableau pour tous les workspaces actifs : statut, attention, PR, diff, activité, plus la fiabilité des moteurs.`,"tours.home.health.title":`Santé et changelog`,"tours.home.health.description":`Vérifiez la base de données, les runtimes et les agents actifs. Le bouton voisin liste ce qui a changé à chaque version.`,"tours.home.settings.title":`Paramètres`,"tours.home.settings.description":`Moteurs, intégrations, automatisation, worktrees et projets. Créez maintenant votre premier workspace.`,"tours.create.title":`Créer un workspace`,"tours.create.project.title":`Projet et branche`,"tours.create.project.description":`Choisissez le projet et la branche de départ du worktree.`,"tours.create.mission.title":`Mission`,"tours.create.mission.description":`Décrivez la tâche, ou importez-la depuis une page Notion ou une issue Sentry.`,"tours.create.template.title":`Templates`,"tours.create.template.description":`Appliquez un preset enregistré, ou enregistrez ce formulaire comme preset. « Dupliquer » sur une carte de workspace ouvre ce formulaire prérempli.`,"tours.create.engine.title":`Moteur et modèle`,"tours.create.engine.description":`Claude Code ou Codex, le modèle, l'effort de raisonnement et ce que l'agent peut faire sans demander.`,"tours.create.brainstorm.title":`Brainstorm sur un autre modèle`,"tours.create.brainstorm.description":`Lancez la première session de brainstorming sur un autre modèle, puis revenez au modèle principal pour les itérations.`,"tours.create.autoloop.title":`Auto-loop`,"tours.create.autoloop.description":`Laissez l’agent terminer les tâches et les vérifications finales. Une review finale indépendante peut ensuite se répéter après correction jusqu’à zéro finding ; un blocage suspend la boucle.`,"tours.create.finalReview.title":`Configurer la review finale`,"tours.create.finalReview.description":`Choisissez à l’avance le moteur, le modèle, l’effort et les instructions du reviewer. La review tourne dans une session séparée en lecture seule ; l’agent d’origine corrige les findings, puis la review recommence jusqu’à ce qu’il n’en reste aucun.`,"tours.workspace.finalReview.title":`Review finale et corrections`,"tours.workspace.finalReview.description":`Configurez ici le reviewer final optionnel avant son lancement. Après les tâches et les vérifications finales, une session séparée examine le travail. Les findings reviennent dans la session d’origine pour correction automatique et nouvelle review. Fermer Kōbō préserve ce cycle.`,"tours.workspace.reviewReturn.title":`Retour de review`,"tours.workspace.reviewReturn.description":`Le résumé revient dans la session d’origine, même après redémarrage de Kōbō. Si la livraison est incertaine, consultez cette conversation avant Réessayer ; Annuler abandonne le retour. Une review manuelle attend vos instructions avant de corriger ; l’auto-loop corrige automatiquement.`,"tours.create.comparison.title":`Comparer deux moteurs`,"tours.create.comparison.description":`Créez deux workspaces jumeaux sur la même tâche et comparez leurs commits, tâches et activité.`,"tours.workspace.sessions.title":`Sessions du workspace`,"tours.workspace.sessions.description":`Clique sur le titre pour choisir une session, en créer une, la renommer ou retrouver son identifiant.`,"tours.workspace.actions.title":`Actions du workspace`,"tours.workspace.actions.description":`Le menu ⋯ regroupe la vue côte à côte, la palette de commandes, le panneau latéral et la visite guidée.`,"tours.workspace.title":`Dans un workspace`,"tours.workspace.chat.title":`Conversation`,"tours.workspace.chat.description":`La sortie de l'agent, en direct : messages, appels d'outils, questions et erreurs.`,"tours.workspace.input.title":`Parler à l'agent`,"tours.workspace.input.description":`Envoyez un message, utilisez les slash commands, dictez à la voix ou joignez des fichiers.`,"tours.workspace.selectors.title":`Réglages de session`,"tours.workspace.selectors.description":`Ouvre Configurer pour régler le modèle, l’effort, les permissions et l’auto-loop. Le moteur actuel y est indiqué.`,"tours.workspace.status.title":`Statut`,"tours.workspace.status.description":`L'état de la session en cours ; arrêtez-la ici si besoin.`,"tours.workspace.git.title":`Git`,"tours.workspace.git.description":`Commits, diff, push, rebase et la PR de cette branche.`,"tours.workspace.tasks.title":`Tâches`,"tours.workspace.tasks.description":`Ce que l'agent prévoit de faire, et les critères d'acceptation à respecter.`,"tours.workspace.timeline.title":`Chronologie`,"tours.workspace.timeline.description":`Toutes les sessions de ce workspace ; ouvrez-en une plus ancienne pour la relire.`,"tours.workspace.subagents.title":`Sous-agents`,"tours.workspace.subagents.description":`Suivez les sous-agents lancés par l'agent, avec leur progression en direct.`,"tours.workspace.documents.title":`Documents`,"tours.workspace.documents.description":`Plans et fichiers écrits par l'agent, consultables sans quitter le chat.`,"tours.workspace.schedule.title":`Programmation`,"tours.workspace.schedule.description":`Réveils et crons qui relancent l'agent plus tard.`,"tours.workspace.memory.title":`Mémoire du workspace`,"tours.workspace.memory.description":`Consultez la mémoire transmise à la conversation sélectionnée, les propositions en attente et les opérations du workspace. Son effacement ne modifie pas l’historique du fournisseur.`,"tours.workspace.handoff.title":`Repartir avec un contexte frais`,"tours.workspace.handoff.description":`Une longue conversation ? Démarre une session fraîche ici, ou utilise « Changer de LLM ». Le travail courant est interrompu immédiatement et la nouvelle session reprend automatiquement dans le même workspace. La synthèse de passation est facultative : désactive-la si le quota du LLM actuel est épuisé. Le suivi, le rapport et le lien vers la session précédente apparaissent sous ce bouton.`,"tours.workspace.terminal.title":`Terminal`,"tours.workspace.terminal.description":`Un shell dans le worktree, sans quitter Kōbō.`,"tours.gitPr.title":`Pull request`,"tours.gitPr.panel.title":`Statut de la PR`,"tours.gitPr.panel.description":`Résultat de la CI, décision de review et reviewers, rafraîchis toutes les 30 secondes.`,"tours.gitPr.actions.title":`Actions Git`,"tours.gitPr.actions.description":`Push, pull, rebase ou changement de branche de base. Pendant un conflit, un bouton laisse l'agent le résoudre.`,"tours.gitPr.attention.title":`Badges d'attention`,"tours.gitPr.attention.description":`La carte affiche une CI en échec, des changements demandés ou une PR prête à merger.`,"tours.settings.title":`Paramètres`,"tours.settings.engines.title":`Moteurs et modèles`,"tours.settings.engines.description":`Modèles, permissions par défaut et limites de relance automatique.`,"tours.settings.integrations.title":`Intégrations`,"tours.settings.integrations.description":`Connexions Notion et Sentry, et identifiants Bitbucket. GitHub et GitLab utilisent votre connexion CLI locale.`,"tours.settings.automation.title":`Automatisation`,"tours.settings.automation.description":`Scripts de setup et de cleanup, hooks de cycle de vie, templates de prompts, templates de workspace et skills.`,"tours.settings.worktrees.title":`Worktrees`,"tours.settings.memory.title":`Mémoire`,"tours.settings.memory.description":`Choisissez le mode manuel, automatique ou hybride, puis parcourez les portées et vérifiez ou effacez leurs données mémoire exactes. Les opérations mémoire sont immédiates ; le changement de mode passe par Enregistrer.`,"tours.settings.worktrees.description":`Où vivent les worktrees, combien de temps garder ceux qui sont mergés, et la purge automatique.`,"tours.settings.projects.title":`Projets`,"tours.settings.projects.description":`Les projets enregistrés et leurs surcharges par projet.`,"tours.settings.misc.title":`Général, voix, notifications, export`,"tours.settings.misc.description":`Langue, accès réseau, dictée, sons et notifications navigateur, et un export complet de vos réglages.`,"tours.dashboard.title":`Tableau de bord`,"tours.dashboard.overview.title":`Vue d'ensemble`,"tours.dashboard.overview.description":`Tous les workspaces actifs dans un tableau ; cliquez sur une ligne pour l'ouvrir.`,"tours.dashboard.reliability.title":`Fiabilité des moteurs`,"tours.dashboard.reliability.description":`Sessions, erreurs et durées par moteur et par modèle.`,"tours.health.title":`Santé`,"tours.health.checks.title":`Vérifications`,"tours.health.checks.description":`Environnement, base de données, runtimes, workspaces et sessions.`,"tours.health.active.title":`État actif`,"tours.health.active.description":`Les back-offs de quota, les réveils en attente et les auto-loops en cours en ce moment.`,"tours.search.title":`Recherche`,"tours.search.input.title":`Requête`,"tours.search.input.description":`Recherche dans les noms de workspaces et les conversations des agents.`,"tours.search.archived.title":`Archivés`,"tours.search.archived.description":`Inclure les workspaces archivés dans les résultats.`,"tours.changelog.title":`Nouveautés`,"tours.changelog.list.title":`Versions`,"tours.changelog.list.description":`Ce qui a changé à chaque version, la plus récente en premier.`,"settings.projectGroup.identity":`Identité`,"settings.projectGroup.defaults":`Valeurs par défaut`,"settings.projectGroup.prompts":`Prompts`,"settings.projectGroup.scripts":`Scripts`,"settings.projectPath":`Chemin du projet`,"settings.projectPathPlaceholder":`/chemin/vers/le/projet`,"settings.displayName":`Nom affiché`,"settings.displayNamePlaceholder":`Mon projet`,"settings.defaultSourceBranch":`Branche source par défaut`,"settings.defaultModel.project":`Modèle par défaut`,"settings.skipPermissions.project":`Ignorer les invites de permission`,"settings.prPromptTemplate.project":`Modèle de prompt PR`,"settings.prPromptPlaceholder.project":`Instructions spécifiques au projet pour la création de PR...`,"settings.reviewPromptTemplate.project":`Modèle de prompt de review`,"settings.ciFixPromptTemplate.project":`Modèle de prompt « Fix CI »`,"settings.gitConventions.project":`Conventions Git (projet)`,"settings.gitConventionsEmpty":`Laisser vide pour utiliser les conventions globales.`,"settings.notionStatus":`Statut ticket Notion`,"settings.notionStatusProperty":`Nom de la propriété`,"settings.notionStatusPropertyPlaceholder":`État, Status...`,"settings.notionInProgressStatus":`Valeur à définir`,"settings.notionInProgressStatusPlaceholder":`En cours, In progress...`,"settings.notionStatusHint":`Quand un workspace est créé avec un ticket Notion, la propriété spécifiée est mise à cette valeur. Les deux champs sont requis. Laisser vide pour désactiver.`,"settings.notionAssignee":`Assignation Notion`,"settings.notionAssigneeHint":`Quand un workspace est créé avec un ticket Notion, l'utilisateur authentifié sur le MCP Notion est ajouté à cette propriété People — uniquement si elle n'a pas déjà d'assigné. Laisser vide pour désactiver.`,"settings.notionAssigneeProperty":`Nom de la propriété`,"settings.notionAssigneePropertyPlaceholder":`Développeurs, Assignees...`,"settings.notionUserId":`Ton UUID Notion`,"settings.notionUserIdPlaceholder":`135d872b-594c-8126-9604-00024ad6e5b5`,"settings.notionUserIdHint":`Sélectionne ton compte dans la liste. Notion refuse l'assignation d'un bot — ce champ est obligatoire pour activer l'auto-assignation.`,"settings.notionUsersRefresh":`Rafraîchir`,"settings.notionUsersLoading":`Chargement des utilisateurs Notion…`,"settings.notionUsersLoadFailed":`Impossible de récupérer la liste : {error}`,"settings.notionUsersManualFallback":`Liste indisponible — colle ton UUID Notion manuellement.`,"settings.devServer":`Serveur de dev`,"settings.devServerStart":`Script de démarrage`,"settings.devServerStartPlaceholder":`npm run dev`,"settings.devServerStop":`Script d'arrêt`,"settings.devServerStopPlaceholder":`Optionnel — le processus sera tué automatiquement si vide`,"settings.selectProject":`Sélectionnez un projet ou ajoutez-en un nouveau`,"settings.useGlobal":`Utiliser le global`,"settings.saved":`Paramètres généraux enregistrés.`,"settings.unsavedChanges":`Modifications non enregistrées`,"settings.nav.general":`Général`,"settings.nav.agents":`Agents`,"settings.nav.skills":`Skills`,"settings.nav.prompts":`Prompts`,"settings.nav.scripts":`Scripts`,"settings.nav.workspaceTemplates":`Templates de workspace`,"workspaceTemplates.title":`Templates de workspace`,"workspaceTemplates.hint":`Préréglages enregistrés du formulaire de création. Choisissez-en un sur la page de création ; pour en modifier un, chargez-le là, ajustez, puis réenregistrez-le sous le même nom.`,"workspaceTemplates.empty":`Aucun template pour l'instant. Remplissez le formulaire de création et utilisez « Enregistrer comme template ».`,"workspaceTemplates.anyProject":`Tout projet`,"workspaceTemplates.rename":`Renommer`,"workspaceTemplates.renameTitle":`Renommer le template`,"workspaceTemplates.deleteConfirm":`Supprimer le template « {name} » ?`,"workspaceTemplates.deleted":`Template « {name} » supprimé`,"settings.nav.notion":`Notion`,"settings.nav.forge":`Forge`,"settings.bitbucketCommunity":`Bitbucket Community`,"settings.bitbucketCommunityHint":`Les identifiants restent locaux et sont utilisés uniquement par bkt.`,"settings.bitbucketUsername":`E-mail Atlassian`,"settings.bitbucketToken":`Token API Bitbucket`,"settings.nav.sentry":`Sentry`,"settings.nav.voice":`Voix`,"settings.nav.notifications":`Notifications`,"settings.nav.worktrees":`Worktrees`,"settings.nav.export":`Export`,"settings.help.general":`Langue, accès réseau et valeurs par défaut dont hérite chaque projet.`,"settings.help.agents":`Modèles et permissions par défaut, ainsi que les limites de relance automatique.`,"settings.help.skills":`Les suites de skills que l'agent est invité à utiliser.`,"settings.help.prompts":`Instructions des agents après ouverture d’une PR/MR, pour les revues de code, les corrections CI et la finalisation.`,"settings.help.scripts":`Scripts de setup, de nettoyage et de changement de branche source, plus les hooks de cycle de vie.`,"settings.help.notion":`Importer une page Notion comme source de vérité d'un workspace.`,"settings.help.sentry":`Créer un workspace à partir d'une issue Sentry.`,"settings.help.forge":`Identifiants Bitbucket. GitHub et GitLab utilisent vos CLI gh/glab authentifiées ; choisissez la forge par projet.`,"settings.help.voice":`Dictée et push-to-talk.`,"settings.help.notifications":`Sons, notifications navigateur et rappel des questions sans réponse.`,"settings.help.worktrees":`Où les worktrees sont créés, rétention et purge automatique.`,"settings.help.projects":`Projets enregistrés et leurs surcharges par projet.`,"settings.help.templates":`Templates de prompt développés dans la zone de saisie du chat.`,"settings.help.workspaceTemplates":`Presets enregistrés du formulaire de création.`,"settings.help.export":`Exporter et importer tous les paramètres en JSON.`,"settings.openNav":`Ouvrir la navigation`,"settings.saveError":`Erreur lors de l'enregistrement des paramètres.`,"settings.projectSaved":`Projet enregistré.`,"settings.projectSaveError":`Erreur lors de l'enregistrement du projet.`,"settings.projectDeleted":`Projet supprimé.`,"settings.deleteProjectConfirmTitle":`Supprimer le projet ?`,"settings.deleteProjectConfirmMessage":`Retirer « {name} » de vos projets ? Cela supprime uniquement ses réglages Kōbō — votre code et vos worktrees ne sont pas touchés.`,"settings.projectDeleteError":`Erreur lors de la suppression du projet.`,"settings.projectPathRequired":`Le chemin du projet est requis.`,"templates.title":`Modèles`,"templates.newTemplate":`Nouveau modèle`,"templates.editTemplate":`Modifier le modèle`,"templates.deleteTemplate":`Supprimer le modèle`,"templates.deleteConfirm":`Supprimer le modèle '/{slug}' ?`,"templates.deleteConfirmMessage":`Cette action est irréversible.`,"templates.slug":`Slug`,"templates.slugHint":`Lettres minuscules, chiffres, tirets. Max 64 caractères.`,"templates.slugInvalid":`Le slug ne peut contenir que des lettres minuscules, chiffres et tirets`,"templates.slugDuplicate":`Un modèle avec ce slug existe déjà`,"templates.description":`Description`,"templates.descriptionHint":`Libellé court affiché dans le dropdown.`,"templates.descriptionRequired":`La description est requise`,"templates.contentRequired":`Le contenu est requis`,"templates.content":`Contenu`,"templates.contentHint":`Contenu du modèle. Utilise {variable_name} pour les substitutions.`,"templates.availableVars":`Variables disponibles`,"templates.filePath":`Fichier : {path}`,"templates.empty":`Aucun modèle pour l'instant.`,"templates.createFailed":`Échec de la création du modèle`,"templates.updateFailed":`Échec de la modification du modèle`,"templates.deleteFailed":`Échec de la suppression du modèle`,"templates.save":`Enregistrer`,"templates.create":`Créer`,"templates.reloadDefaults":`Recharger les modèles par défaut`,"templates.reloadDefaultsHint":`Ajoute uniquement les modèles par défaut manquants. Les modèles existants (même modifiés) ne sont jamais écrasés.`,"templates.reloadDefaultsConfirmMessage":`Cette action ajoute les modèles par défaut absents de la liste. Les modèles existants — y compris ceux que tu as modifiés — ne seront pas touchés. Si tu veux récupérer la version d'origine d'un modèle modifié, supprime-le d'abord puis relance cette action.`,"templates.reloadDefaultsSuccess":`{added} ajouté(s), {kept} conservé(s)`,"templates.reloadDefaultsFailed":`Échec du rechargement des modèles par défaut`,"templates.resetToDefault":`Réinitialiser au défaut`,"templates.resetConfirmTitle":`Réinitialiser le template au défaut ?`,"templates.resetConfirmMessage":`Cela écrase vos modifications locales de /{slug} par le défaut intégré. Action irréversible.`,"templates.resetSuccess":`Template /{slug} réinitialisé au défaut`,"templates.resetFailed":`Échec de la réinitialisation du template`,"chatInput.dropdownSkills":`Skills Claude`,"chatInput.dropdownKobo":`Commandes Kōbō`,"chatInput.dropdownTemplates":`Modèles`,"documents.title":`Documents`,"documents.empty":`Aucun document trouvé`,"documents.refresh":`Actualiser`,"documents.back":`Retour`,"documents.loadFailed":`Échec du chargement du document`,"git.title":`Git`,"git.outputDialogTitle":`Git a signalé une erreur`,"git.statsFailed":`L’état git n’a pas pu être lu`,"git.section.repository":`Dépôt`,"git.section.changes":`Modifications`,"git.section.pullRequest":`Pull request`,"git.section.actions":`Actions`,"git.actions.more":`Plus`,"git.localOnly":`local uniquement`,"git.pushed":`pushé`,"git.unpushed":`{count} non pushé`,"git.commits":`{count} commit | {count} commits`,"git.commits.loading":`Chargement des commits…`,"git.commits.empty":`Aucun commit sur cette branche`,"git.commits.pushed":`Pushé`,"git.commits.unpushed":`Non pushé`,"git.commits.clickToAppend":`clique pour ajouter le SHA au chat`,"git.commits.diffThisCommit":`Diff de ce commit (vs parent)`,"git.compareCommits":`Comparer des commits…`,"git.files":`{count} fichier | {count} fichiers`,"git.staged":`{count} indexé`,"git.modified":`{count} modifié`,"git.untracked":`{count} non suivi`,"git.workingTreeEmpty":`Aucune modification non commitée`,"git.fileStaged":`Indexé`,"git.fileModified":`Modifié`,"git.fileUntracked":`Non suivi`,"git.push":`Push`,"git.forcePush":`Force push`,"git.forcePushToggle":`Force push (--force-with-lease)`,"git.pushRejectedHistory":`Push refusé : la branche locale et la branche distante ont des historiques différents. Après un rebase de commits déjà publiés, utilisez « Force push » avec confirmation. Sinon, récupérez et intégrez les changements distants avant de réessayer.`,"git.pushRejectedLease":`Push forcé refusé : la branche distante a changé depuis votre dernière récupération. Récupérez et vérifiez ces changements avant de réessayer.`,"git.pushFailed":`Impossible de pousser la branche. Ouvrez les détails pour connaître la cause.`,"git.pushBlockedByOperation":`Terminez ou abandonnez d'abord l'opération {operation} en cours`,"git.pushUpToDate":`Rien à pousser : la branche est déjà à jour sur origin`,"git.forcePushHint":`Plus sûr que --force : le push est rejeté si le remote a des commits que tu n’as pas vus. À utiliser après un rebase ou un amend de commits déjà push.`,"git.branchForcePushed":`Branche force-pushée`,"git.pull":`Pull`,"git.pullNoUpstream":`Pas d'upstream pour cette branche — push-la d'abord pour activer Pull.`,"git.sync":`Sync`,"git.createPrNoRemote":`Push la branche d'abord`,"git.viewRequest":`Voir la {request}`,"git.createRequest":`Créer une {request}`,"git.changeRequestBase":`Changer la branche cible de la {request}`,"git.forgeCliMissing":`{cli} n'est pas installé — installez-le pour les fonctions {request}`,"git.forgeNotAuthenticated":`Non authentifié — exécutez {cli} auth login`,"settings.forge":`Forge`,"settings.forge.auto":`Détection automatique`,"settings.forge.github":`GitHub`,"settings.forge.gitlab":`GitLab`,"settings.forge.bitbucketCommunity":`Bitbucket Community (bkt)`,"settings.forge.none":`Aucune`,"git.pullConfirmTitle":`Pull la branche ?`,"git.pullConfirmMessage":`Pull {branch} depuis la remote (fast-forward uniquement).`,"git.branchPulled":`Branche pull`,"git.pullFailed":`Échec du pull`,"git.renameBranch":`Renommer la branche`,"git.renameBranchPrompt":"Renommer `{branch}` en :","git.renameBranchSuccess":"Branche renommée en `{branch}`","git.renameBranchFailed":`Échec du renommage`,"git.renameBranchExists":"La branche `{branch}` existe déjà (locale ou sur origin)","git.diff":`Diff`,"git.diffReview":`Diff`,"git.diffReviewTooltip":`Ouvre le diff viewer en mode Review — commentaires inline + soumission groupée à l'agent`,"pr.baseChanged":`Base de la PR modifiée : {oldBase} → {newBase}`,"pr.openPr":`Ouvrir la PR`,"pr.openWorkspace":`Ouvrir le workspace`,"pr.dismiss":`Fermer`,"git.rebase":`Rebase`,"git.rebaseConfirmTitle":`Rebase la branche ?`,"git.rebaseConfirmMessage":`Rebase sur {branch}. Des conflits peuvent survenir.`,"git.rebaseSuccess":`Rebase terminé`,"git.rebaseFailed":`Rebase échoué`,"git.merge":`Merge`,"git.fetch":`Fetch`,"git.fetchSuccess":`Dépôt récupéré`,"git.fetchFailed":`Échec du fetch : {error}`,"git.mergeConfirmTitle":`Fusionner la branche ?`,"git.mergeConfirmMessage":`Fusionner {branch} dans cette branche. Des conflits sont possibles.`,"git.mergeSuccess":`Merge terminé`,"git.mergeFailed":`Merge échoué`,"git.commitFailed":`Commit échoué`,"git.commitChanges":`Committer les modifications`,"git.commitDialogTitle":`Committer les modifications non commitées`,"git.commitDialogDescription":`Saisissez votre message ou demandez à l’agent d’inspecter et de créer le commit.`,"git.commitMessage":`Message de commit`,"git.commitManual":`Committer`,"git.commitWithAgent":`Demander à l’agent`,"git.commitAgentSuccess":`Demande de commit envoyée à l’agent`,"git.discardFailed":`Abandon échoué`,"git.conflictTitleMerge":`Conflits de merge détectés`,"git.conflictTitleRebase":`Conflits de rebase détectés`,"git.operationPausedTitle":`Opération Git à poursuivre`,"git.operationPausedSubtitle":`Aucun fichier en conflit. Git attend simplement que tu poursuives l’opération.`,"git.conflictSubtitle":`{count} fichier(s) en conflit. Choisis comment continuer.`,"git.conflictAbortConfirmTitle":`Abandonner la résolution du conflit ?`,"git.conflictAbortConfirmMessage":`Tout ce que tu as résolu dans ce {op} est jeté et le worktree revient à son état d’avant. C’est irréversible.`,"git.conflictAbort":`Abandonner`,"git.conflictContinue":`Continuer`,"git.conflictContinued":`Opération Git poursuivie`,"git.conflictResolveWithAgent":`Demander à l'agent de résoudre`,"git.conflictAborted":`Opération abandonnée`,"git.conflictHandoffSuccess":`L'agent résout les conflits`,"git.dirtyTitleRebase":`Des modifications non commitées bloquent le rebase`,"git.dirtyTitleMerge":`Des modifications non commitées bloquent le merge`,"git.dirtyTitlePull":`Des modifications non commitées bloquent le pull`,"git.dirtySubtitle":`{modified} modifié(s), {staged} indexé(s), {untracked} non suivi(s). Choisis comment continuer.`,"git.dirtyStash":`Stash & réessayer`,"git.dirtyCommit":`Commit d'abord`,"git.dirtyCommitPlaceholder":`Message de commit`,"git.dirtyCommitConfirm":`Commit & réessayer`,"git.dirtyDiscard":`Abandonner les modifs`,"git.dirtyDiscardConfirmTitle":`Abandonner toutes les modifications non commitées ?`,"git.dirtyDiscardConfirmMessage":`Les modifications suivies seront perdues (git reset --hard). Les fichiers non suivis sont conservés. Action irréversible.`,"git.pushConfirmTitle":`Pusher la branche ?`,"git.pushConfirmMessage":`Pusher {branch} vers le dépôt distant.`,"git.pushConfirmMessagePrefix":`Pusher la branche`,"git.pushConfirmMessageSuffix":`vers le dépôt distant.`,"git.changePrBaseTitle":`Changer la branche cible`,"git.changePrBaseMessage":`Entrez la nouvelle branche cible pour la {request}.`,"git.changePrBaseSuccess":`Branche cible de la {request} mise à jour`,"git.changePrBaseFailed":`Impossible de changer la branche cible de la {request}`,"git.mergeRequest":`Fusionner la {request}`,"git.mergeRequestConfirmTitle":`Fusionner la {request} ?`,"git.mergeRequestConfirmMessage":`Cette action fusionne la {request} ouverte dans sa branche cible.`,"git.mergeRequestSuccess":`{request} fusionnée`,"git.mergeRequestFailed":`Impossible de fusionner la {request}`,"git.deleteRemoteBranch":`Supprimer la branche distante`,"git.deleteRemoteBranchTitle":`Supprimer la branche distante ?`,"git.deleteRemoteBranchMessage":`La demande a été fusionnée. Supprimer la branche distante {branch} ?`,"git.deleteRemoteBranchSuccess":`Branche distante {branch} supprimée`,"git.deleteRemoteBranchFailed":`Impossible de supprimer la branche distante`,"git.changeSourceBranch":`Changer la branche source`,"git.changeSourceBranchTitle":`Changer la branche source`,"git.changeSourceBranchMessage":`Choisis la nouvelle branche source. La branche de travail sera reconstruite par-dessus.`,"git.changeSourceBranchDone":`Branche source changée vers {branch}`,"git.changeSourceBranchAligned":`Branche source changée vers {branch} (la branche n'avait aucun commit propre)`,"git.changeSourceBranchTooMany":`La branche a trop de commits propres ({n}) — rebase-la manuellement`,"git.changeSourceBranchDirty":`Commit ou stash tes changements avant de changer la branche source`,"git.changeSourceBranchAgentRunning":`Arrête l'agent avant de changer la branche source`,"git.changeSourceBranchErrorTitle":`Échec du changement de branche source`,"git.changeSourceBranchErrorOngoing":`Une opération {op} est encore en cours sur le worktree. Annule-la pour revenir à un état propre.`,"git.changeSourceBranchErrorAbort":`Annuler l'opération`,"git.changeSourceBranchLoading":`Changement de la branche source…`,"git.changeSourceForcePushTitle":`Force-push de la branche réécrite ?`,"git.changeSourceForcePushMessage":`L'historique de la branche a été réécrit. La force-pusher vers le remote avec --force-with-lease ?`,"git.changeSourceForcePushDone":`Branche force-pushée`,"git.openEditor":`Ouvrir dans l'éditeur`,"git.openEditorFailed":`Impossible d'ouvrir l'éditeur`,"git.branchPushed":`Branche pushée`,"git.pushFirst":`La branche n'est pas sur le dépôt distant. Cliquez d'abord sur Push.`,"git.unpushedCommits":`Les commits locaux ne sont pas pushés. Cliquez d'abord sur Push.`,"git.from":`depuis`,"git.aheadBehindTooltip":`{ahead} commits en avance, {behind} en retard sur {source}`,"git.divergence.title":`Divergence de branche`,"git.divergence.subtitle":`vs {source}`,"git.divergence.ahead":`↑ {count} en avance`,"git.divergence.behind":`↓ {count} en retard`,"git.divergence.empty.ahead":`Aucun commit en avance.`,"git.divergence.empty.behind":`Aucun commit en retard.`,"git.divergence.close":`Fermer`,"git.divergence.loading":`Chargement des commits…`,"git.divergence.failed":`Échec du chargement de la divergence`,"git.divergence.retry":`Réessayer`,"git.prCreated":`{request} #{n} créée`,"git.pr.author":`Auteur`,"git.pr.reviewers":`Relecteurs`,"git.pr.assignees":`Assignés`,"git.pr.labels":`Labels`,"git.pr.changesRequestedBadge":`Modifications demandées`,"git.pr.approvedBadge":`Approuvée`,"git.pr.ci.passed":`CI OK`,"git.pr.ci.failed":`CI en échec`,"git.pr.ci.pending":`CI en cours`,"git.pr.ci.failedCount":`{n} en échec`,"git.pr.ci.pendingCount":`{n} en cours`,"git.pr.ci.passedCount":`{n} OK`,"git.pr.ci.skippedCount":`{n} ignoré(s)`,"git.pr.ci.showPassed":`Afficher les {n} jobs réussis`,"git.pr.ci.hidePassed":`Masquer les jobs réussis`,"toast.prChangesRequested":`Des modifications ont été demandées sur la PR #{n}`,"toast.prApproved":`La PR #{n} a été approuvée`,"toast.prReadyToMerge":`La PR #{n} est prête à merger`,"toast.prCiFailed":`La CI de la PR #{n} est en échec`,"toast.prCiRecovered":`La CI de la PR #{n} est rétablie`,"toast.prMergeConflict":`La PR #{n} a un conflit de merge`,"toast.prMerged":`La PR #{n} a été mergée`,"devServer.title":`Serveur de dev`,"devServer.noWorkspace":`Aucun espace de travail sélectionné`,"devServer.notConfigured":`Non configuré —`,"devServer.goToSettings":`Paramètres`,"devServer.logs":`Logs`,"devServer.running":`En cours`,"devServer.starting":`Démarrage`,"devServer.stopping":`Arrêt`,"devServer.error":`Erreur`,"devServer.stopped":`Arrêté`,"devServer.unknown":`Inconnu`,"devServer.containers":`{count} conteneur | {count} conteneurs`,"devServer.logDialog.title":`Logs du serveur de dev`,"devServer.logDialog.empty":`Aucun log disponible`,"notion.title":`Notion`,"tasks.title":`Tâches`,"notion.addTask":`Ajouter une tâche`,"notion.noUrl":`Aucune URL Notion`,"notion.subtasks":`{done}/{total} sous-tâches`,"notion.noTasks":`Aucune tâche`,"notion.newTask":`Nouvelle tâche... (Entrée pour ajouter, Échap pour annuler)`,"acceptance.title":`Critères d'acceptation`,"acceptance.addCriterion":`Ajouter un critère`,"acceptance.newCriterion":`Nouveau critère... (Entrée pour ajouter, Échap pour annuler)`,"acceptance.empty":`Aucun critère d'acceptation`,"tasks.askProgress":`Demander à l'agent de vérifier sa progression`,"agentTodos.title":`Todos de l'agent`,"agentTodos.empty":`Aucun todo de l'agent`,"subagents.title":`Sub-agents`,"subagents.empty":`Aucune activité de sous-agent`,"subagents.tools":`{count} outils`,"subagents.running":`En cours : `,"subagents.status.running":`En cours`,"subagents.status.done":`Terminé`,"subagents.status.failed":`Échec`,"subagents.status.stopped":`Arrêté`,"subagents.ambient":`Surveillance en arrière-plan`,"subagents.ambientTooltip":`Surveillance en arrière-plan (ex. Monitor) : non comptée comme activité de l'agent`,"subagents.stop":`Arrêter ce sous-agent`,"subagents.stopAll":`Tout arrêter`,"subagents.stopFailed":`Impossible d'arrêter le sous-agent : {error}`,"subagents.activity":`Activité du sous-agent`,"subagents.noActivity":`Aucune activité visible du fournisseur pour le moment`,"chat.subagentActivity":`Activité d’un sous-agent`,"chat.openSubagentActivity":`Ouvrir ce sous-agent dans le panneau latéral`,"stats.resetsAt":`Reset {value}`,"stats.usageBucket":`Quota {n}`,"quotaFooter.lastUpdated":`Dernière mise à jour : {time}`,"quotaFooter.empty":`Chargement…`,"quotaFooter.popover.title":`Utilisation Claude Code`,"quotaFooter.popover.refreshNow":`Rafraîchir`,"quotaFooter.popover.resetsIn":`Réinitialise à {value}`,"quotaFooter.popover.unauthenticated":`Auth requise`,"quotaFooter.popover.unauthenticatedHint":`Lancez "claude" une fois pour vous authentifier.`,"quotaFooter.popover.error":`Erreur`,"quotaFooter.bucket.fiveHour":`5 heures`,"quotaFooter.bucket.sevenDay":`7 jours`,"agent.error.spawn_failed":`Échec du lancement de l'agent`,"agent.error.parse_error":`Impossible d'analyser un message de l'agent`,"agent.error.rate_limit":`Limite de débit atteinte`,"agent.error.resume_failed":`Session introuvable — démarrage en session fraîche`,"agent.error.other":`Erreur de l'agent`,"quotaBackoff.banner.title":`Reprise auto à {time}`,"quotaBackoff.banner.transientTitle":`Reprise auto après interruption à {time}`,"quotaBackoff.resumeNow":`Reprendre maintenant`,"quotaBackoff.banner.tooltip":`Quota Claude épuisé. L'auto-loop reprendra automatiquement quand le quota se libère à {resets_at}.`,"quotaBackoff.banner.cancel":`Annuler la reprise`,"quotaBackoff.cancelled":`Reprise auto annulée — tu peux relancer manuellement à tout moment`,"rateLimitType.fiveHour":`Session 5h`,"rateLimitType.sevenDay":`Hebdo`,"tooltip.addTask":`Ajouter une tâche`,"tooltip.removeTask":`Supprimer la tâche`,"tooltip.addCriterion":`Ajouter un critère`,"tooltip.removeCriterion":`Supprimer le critère`,"tooltip.startDevServer":`Démarrer le serveur de dev`,"tooltip.stopDevServer":`Arrêter le serveur de dev`,"tooltip.closeDiffViewer":`Fermer le diff`,"tooltip.refreshLogs":`Actualiser les logs`,"tooltip.closeDialog":`Fermer`,"tooltip.refreshGitStats":`Actualiser les stats Git`,"tooltip.removeImage":`Supprimer l'image`,"tooltip.sendMessage":`Envoyer le message`,"tools.title":`Outils`,"tools.runSetupScript":`Relancer le script de setup`,"tools.runSetupScriptTooltip":`Exécuter le script de setup du projet dans le worktree`,"tools.runSetupScriptConfirm":`Relancer le script de setup dans cette tâche ? Les artefacts existants peuvent être écrasés.`,"tools.runSetupScriptBusy":`Impossible de relancer le setup pendant que l'agent travaille.`,"tools.noSetupScript":`Aucun script de setup configuré —`,"tools.setupScriptSuccess":`Script de setup terminé avec succès.`,"tools.setupScriptFailed":`Échec du script de setup.`,"tools.openNotion":`Ouvrir dans Notion`,"tools.openSentry":`Ouvrir dans Sentry`,"tools.review":`Reviewer les changes`,"tools.reviewTooltip":`Demander à l'agent de reviewer les changes de cette branche`,"tools.reviewBusy":`Agent occupé — attends qu'il soit idle`,"tools.fixCi":`Réparer la CI`,"tools.fixCiTooltip":`Demander à l'agent de diagnostiquer et corriger les jobs CI en échec`,"tools.fixCiLaunched":`Action « Fix CI » envoyée à l'agent`,"tools.fixCiFailed":`Échec du lancement de l'action « Fix CI »`,"tools.openFileManager":`Ouvrir dans l'explorateur de fichiers`,"tools.openFileManagerTooltip":`Ouvrir le dossier du worktree dans votre explorateur de fichiers configuré`,"tools.openFileManagerFailed":`Échec de l'ouverture de l'explorateur de fichiers`,"tools.openTerminal":`Ouvrir dans un terminal`,"tools.openTerminalTooltip":`Ouvrir le worktree dans le terminal configuré`,"tools.openTerminalFailed":`Échec de l'ouverture du terminal`,"review.title":`Lancer une review`,"review.subtitle":`Demande à l'agent de reviewer tes changes et de te faire des retours.`,"review.additionalInstructions":`Instructions supplémentaires (optionnel)`,"review.additionalInstructionsPlaceholder":`Ajoute des instructions spécifiques pour la review…`,"review.newSession":`Nouvelle session`,"review.newSessionHint":`Démarre une nouvelle session d'agent au lieu de continuer la courante.`,"review.newSessionRequired":`Une nouvelle session est nécessaire pour changer les réglages de l’agent ou revenir automatiquement.`,"review.returnToSession":`Revenir à la session actuelle après la review`,"review.returnToSessionHint":`Reprend cette session avec le résumé final du reviewer. Sinon, la conversation continue dans la session de review.`,"review.readOnlyForced":`Une review qui revient à cette session tourne en lecture seule (Plan) : elle ne peut ni modifier de fichiers ni poser de questions.`,"review.returnUnavailable":`La session actuelle doit avoir démarré pour pouvoir être reprise.`,"review.start":`Lancer la review`,"review.cancel":`Annuler`,"review.launched":`Review lancée`,"review.failed":`Échec du lancement de la review`,"diff.title":`Diff`,"diff.side":`Côte à côte`,"diff.inline":`En ligne`,"diff.hideUnchanged":`Masquer le code inchangé`,"diff.showUnchanged":`Afficher le code inchangé`,"diff.showUntracked":`Afficher les fichiers non suivis`,"diff.hideUntracked":`Masquer les fichiers non suivis`,"diff.rollbackToRemote":`Revenir à la version distante`,"diff.rollbackConfirm":`Restaurer {path} à sa version distante (origin) ? Les modifications locales sur ce fichier seront perdues.`,"diff.rollbackConfirmOk":`Rollback`,"diff.rollbackDone":`Fichier restauré à la version distante`,"diff.rollbackDoneRemote":`Fichier restauré à la version distante`,"diff.rollbackDoneHead":`Modifications locales annulées (fichier restauré au dernier commit)`,"diff.rollbackDoneDeleted":`Fichier non suivi supprimé`,"diff.deleteUntracked":`Supprimer le fichier non suivi`,"diff.deleteUntrackedConfirm":`Supprimer définitivement {path} ? Ce fichier n'est pas suivi par git — son contenu sera perdu.`,"diff.deleteUntrackedConfirmOk":`Supprimer`,"diff.rollbackFailed":`Échec du rollback`,"diff.rollbackFailedDetail":`Échec du rollback : {error}`,"diff.modeInspect":`Édition`,"diff.modeReview":`Review`,"diff.addComment":`Ajouter un commentaire`,"diff.replyComment":`Répondre`,"diff.editComment":`Modifier`,"diff.deleteComment":`Supprimer`,"diff.deleteCommentConfirm":`Supprimer ce commentaire ?`,"diff.commentPlaceholder":`Écris un commentaire de revue… (Markdown accepté)`,"diff.reviewDraft":`Brouillon de revue`,"diff.reviewEmpty":`Aucun commentaire — survole une ligne dans le diff et clique + pour en ajouter un.`,"diff.reviewGlobalPlaceholder":`Ajoute un message global de revue (optionnel)`,"diff.submitReview":`Soumettre la revue ({n})`,"diff.reviewPending":`Une revue est déjà en cours d’envoi.`,"diff.reviewEmptySubmission":`La revue est vide.`,"diff.reviewNotAccepted":`Le message n’a pas été accepté. Votre revue a été conservée.`,"diff.reviewSubmitted":`Revue soumise à l'agent`,"diff.reviewSubmitFailed":`Échec de la soumission : {error}`,"diff.scopeBranch":`Branche`,"diff.scopeUnpushed":`Non pushé`,"diff.noChanges":`Aucun changement`,"diff.searchFiles":`Rechercher des fichiers…`,"diff.noFileMatch":`Aucun fichier correspondant`,"diff.selectFile":`Sélectionnez un fichier pour voir le diff`,"diff.fileLoadFailed":`Ce diff n’a pas pu être chargé`,"diff.fileLoadFailedHint":`Le fichier sur le disque est intact — seul le chargement du diff a échoué.`,"diff.fileListLoadFailed":`La liste des fichiers n’a pas pu être chargée`,"diff.fileListLoadFailedHint":`Il s’agit d’un échec de requête, pas d’une branche sans modification.`,"diff.addToChat":`Ajouter au chat`,"diff.compareTitle":`Comparer des commits`,"diff.compareFrom":`De`,"diff.compareTo":`À`,"diff.compareSubmit":`Comparer`,"diff.compareSourceBase":`{branch} (base de la branche)`,"diff.commitsReadOnly":`lecture seule`,"diffViewer.save":`Enregistrer`,"diffViewer.savedAt":`Enregistré`,"diffViewer.saveFailed":`Échec de l’enregistrement`,"diffViewer.saveFailedDetail":`Échec de l’enregistrement : {error}`,"diffViewer.unsavedChanges.title":`Modifications non enregistrées`,"diffViewer.unsavedChanges.message":`Tu as des modifications non enregistrées. Que veux-tu faire ?`,"diffViewer.unsavedChanges.save":`Enregistrer`,"diffViewer.unsavedChanges.cancel":`Annuler`,"diffViewer.conflict.title":`Fichier modifié sur le disque`,"diffViewer.conflict.message":`Le fichier a été modifié hors de Kōbō depuis que tu l’as ouvert.`,"diffViewer.conflict.reload":`Recharger (perdre les modifs locales)`,"diffViewer.conflict.keep":`Garder les miennes`,"diffViewer.conflict.overwrite":`Écraser quand même`,"diffViewer.conflict.overwriteHint":`Remplace le fichier sur le disque par ta version. L’autre modification est perdue.`,"diffViewer.conflict.keepHint":`Garde tes modifications dans l’éditeur et adopte la nouvelle signature du disque, pour que la prochaine sauvegarde fonctionne.`,"diffViewer.saveBlocked":`L’agent tourne — arrête-le pour enregistrer tes modifications.`,"diffViewer.unsavedBanner":`Modifications non enregistrées. Arrête l’agent pour les sauvegarder.`,"diffViewer.closeConfirm.title":`Modifications non enregistrées`,"diffViewer.closeConfirm.message":`Ce fichier contient des modifications jamais enregistrées. Fermer le visualiseur de diff les perdra.`,"diffViewer.closeConfirm.discard":`Fermer sans enregistrer`,"diffViewer.criteriaRail":`Checklist de revue`,"diffViewer.criteriaRailShow":`Afficher la checklist de revue`,"diffViewer.criteriaRailHide":`Masquer la checklist de revue`,"diffViewer.fileTreeShow":`Afficher l’arbre des fichiers`,"diffViewer.fileTreeHide":`Masquer l’arbre des fichiers`,"diffViewer.closeConfirm.saveAndClose":`Enregistrer et fermer`,"diffViewer.agentRunning":`L’agent tourne — arrête-le pour éditer`,"diffViewer.fileDeleted":`Fichier supprimé`,"notification.agentFinished":`{name} — Agent terminé`,"notification.agentQuestion":`{name} — L'agent te pose une question`,"notification.awaitingReminder":`{name} - attend toujours votre réponse ({minutes} min)`,"notification.agentPermissionRequest":`{name} — L'agent demande une permission`,"notification.autoLoopCompleted":`{name} — Auto-loop terminé`,"notification.autoLoopWaitingForSlot":`{name} - L'auto-loop attend un slot d'agent libre ({running}/{limit} en cours)`,"notification.autoLoopStalled":`{name} — Auto-loop bloqué (aucun progrès)`,"notification.autoLoopError":`{name} — Auto-loop arrêté sur erreur`,"notification.autoLoopAwaitingClarification":`{name} — Auto-loop en pause, en attente de votre précision`,"notification.autoLoopPermissionOverridden":`{name} — Auto-loop a forcé le mode plan en bypass`,"notification.agentError":`{name} — Erreur agent`,"contextMenu.rename":`Renommer`,"contextMenu.editDescription":`Modifier la description`,"contextMenu.copyPath":`Copier le chemin du worktree`,"contextMenu.copyWorkspaceId":`Copier l'identifiant du workspace`,"contextMenu.openEditor":`Ouvrir dans l'éditeur`,"contextMenu.openFileManager":`Ouvrir dans l'explorateur de fichiers`,"contextMenu.unarchiveDisabledPurged":`Restaurez d’abord le worktree avec Restaurer le worktree, ou recréez-le manuellement. Kōbō détecte automatiquement les worktrees correspondants.`,"workspaceList.unarchiveBlockedPurged":`Restaurez d’abord le worktree avec Restaurer le worktree, ou recréez-le manuellement. Kōbō détecte automatiquement les worktrees correspondants.`,"contextMenu.purgeWorktree":`Libérer l'espace disque (supprimer le worktree)`,"contextMenu.purgeWorktreeTooltip":`Supprime le worktree du disque pour récupérer de l'espace — l'historique des messages et sessions est conservé. Archive automatiquement le workspace.`,"contextMenu.purgeWorktreeDialogTitle":`Libérer l'espace disque ?`,"contextMenu.purgeWorktreeDialogMessage":`Le dossier worktree de « {name} » va être supprimé du disque. L'historique des messages et sessions est conservé. Le workspace sera archivé automatiquement. Cette action ne peut pas être annulée dans la version actuelle.`,"contextMenu.purgeWorktreeDialogConfirm":`Supprimer le worktree`,"contextMenu.purgeWorktreeSuccess":`Worktree supprimé — espace disque récupéré.`,"settings.autoPurgeOnPrMerged":`Purger le worktree quand la PR est mergée`,"settings.autoPurgeOnPrMergedHint":`Quand activé, le worktree est supprimé du disque dès que la PR est mergée (en plus de l'archivage auto). L'historique des messages est conservé.`,"settings.autoLoopMaxRetries":`Nombre maximal de nouvelles tentatives`,"settings.awaitingUserReminder":`Rappel de question sans réponse`,"settings.awaitingUserReminderHint":`Minutes pendant lesquelles un workspace peut attendre votre réponse avant que Kōbō ne vous relance, puis à chaque intervalle suivant. 0 désactive.`,"settings.localeLoadFailed":`Impossible de charger cette langue ; la langue actuelle est conservée.`,"settings.autoLoopMaxRetriesHint":`Met la mission en pause après ce nombre de pannes temporaires du moteur ou du serveur. Les quotas attendent leur réinitialisation sans consommer cette limite.`,"settings.retentionTitle":`Rétention de l'historique de conversation (désactivée par défaut)`,"settings.retentionWarning":`Activer cette option supprime définitivement de la base l'historique de conversation des agents, à commencer par tout ce qui est déjà plus vieux que la fenêtre. Les événements supprimés sont irrécupérables.`,"settings.retentionHint":`Exécutée une fois au démarrage du serveur. Les workspaces, tâches, sessions, branches et worktrees ne sont jamais touchés — seule la sortie enregistrée des agents l'est.`,"settings.retentionDaysLabel":`Supprimer les événements plus vieux que (jours)`,"settings.retentionDaysHint":`0 — la valeur par défaut — conserve tous les événements indéfiniment. Renseignez une valeur pour activer la rétention.`,"settings.retentionKeepLabel":`Événements toujours conservés par workspace`,"settings.retentionKeepHint":`Les événements les plus récents de chaque workspace survivent quel que soit leur âge, pour qu'un workspace ancien mais toujours ouvert garde un historique lisible. Suggéré : 5000.`,"settings.retentionDisabledHint":`Rétention désactivée : rien ne sera jamais supprimé.`,"settings.retentionConfirmTitle":`Supprimer définitivement de l'historique de conversation ?`,"settings.retentionConfirmMessage":`Ne conserver que {days} jour(s) d'historique supprimera définitivement, au prochain démarrage du serveur, {count} des {total} événements d'agent enregistrés — y compris tout ce qui est déjà plus ancien. C'est irréversible. Continuer ?`,"settings.retentionConfirmMessageUnknown":`Ne conserver que {days} jour(s) d'historique supprimera définitivement, au prochain démarrage du serveur, tous les événements d'agent plus anciens — y compris tout ce qui est déjà accumulé. Le volume exact n'a pas pu être calculé. C'est irréversible. Continuer ?`,"settings.purgeDocsTitle":`Comment ça marche — restauration & permissions`,"settings.purgeDocsRestoreTitle":`Restaurer un worktree purgé (détection automatique)`,"settings.purgeDocsRestoreIntro":`Un workspace purgé conserve son historique de chat et les métadonnées de la PR, mais le dossier worktree n'existe plus. Recrée-le manuellement avec l'une de ces commandes — Kōbō détecte la réapparition du dossier dans les 30 secondes et réactive automatiquement le workspace (désarchive + clear flag purge) :`,"settings.purgeDocsRestoreCommands":`# GitHub (via le CLI gh) :
11
+ # ton script — utilise $KOBO_NEW_BASE / $KOBO_OLD_BASE / $KOBO_WORKING_BRANCH …`,"settings.changeSourceBranchScript.resetDefault":`Réinitialiser au défaut Kōbō`,"settings.changeSourceBranchScript.replaceConfirmTitle":`Réinitialiser le script ?`,"settings.changeSourceBranchScript.replaceConfirm":`Tes modifications seront remplacées par le script Kōbō par défaut. Continuer ?`,"settings.cleanupScriptHint":`Script shell exécuté dans le worktree après chaque fin de session de l'agent. En mode auto-loop, il ne s'exécute qu'une fois toutes les tâches terminées. Laisser vide pour désactiver.`,"settings.cleanupScriptPlaceholder":`ex. supprimer des fichiers temporaires, arrêter des conteneurs…`,"settings.cleanupScriptMode":`Quand l'exécuter`,"settings.cleanupScriptMode.idle":`À chaque fin de session — même s'il reste des tâches`,"settings.cleanupScriptMode.noTasks":`Uniquement quand plus aucune tâche Kōbō`,"settings.cleanupScriptOnlyOnChanges":`Lancer uniquement si des fichiers ont été modifiés, ajoutés ou supprimés`,"settings.cleanupScriptMode.inherit":`Hériter du réglage global`,"settings.taskPromptTemplate":`Prompt de tâche`,"settings.taskPromptTemplatePlaceholder":`Prompt inséré automatiquement dans la description de tâche…`,"settings.taskPromptTemplateHint":`Injecté automatiquement dans la description de tâche sur la page de création quand ce projet est sélectionné. S'il n'est pas modifié, il est remplacé en changeant de projet ; dès que vous l'éditez, votre texte est conservé.`,"settings.setupScriptPlaceholder":`npm install`,"settings.setupScriptHint":`Exécuté avec bash dans le worktree après sa création, avant le démarrage de l'agent. Pas besoin de shebang. En cas d'échec, le workspace passe en erreur. Timeout : 5 minutes.`,"settings.e2e.title":`Tests E2E`,"settings.e2e.framework":`Framework`,"settings.e2e.frameworkNone":`Aucun`,"settings.e2e.frameworkOther":`Autre`,"settings.e2e.skill":`Skill (optionnel)`,"settings.e2e.skillPlaceholder":`ex : cypress-tester`,"settings.e2e.prompt":`Guidance personnalisée (optionnel)`,"settings.e2e.promptPlaceholder":`ex : utiliser le page-object, cibler les data-testid`,"settings.e2e.helpText":`Quand configuré, l'agent de grooming auto-loop insère des sous-tâches E2E pour les fonctionnalités UI.`,"settings.finalization.title":`Finalisation de l'auto-loop`,"settings.finalization.helpText":`Optionnel : un prompt que l'agent exécute lors de la toute dernière itération de l'auto-loop. Typiquement utilisé pour les contrôles qualité finaux (lint, typecheck, tests). L'étape de grooming créera une tâche préfixée [FINAL] qui utilisera ce prompt.`,"settings.finalization.prompt":`Prompt de finalisation`,"settings.finalization.promptPlaceholder":`ex. Lance npm run lint et npm test, puis marque cette tâche comme terminée.`,"settings.editorCommand":`Commande éditeur`,"settings.editorCommandPlaceholder":`code, phpstorm, subl, vim...`,"settings.editorCommandHint":`Commande utilisée pour ouvrir le worktree dans votre éditeur. Le chemin du worktree est passé en argument.`,"settings.fileManagerCommand":`Commande explorateur de fichiers`,"settings.fileManagerCommandPlaceholder":`xdg-open, open, nautilus, dolphin, explorer...`,"settings.fileManagerCommandHint":`Commande utilisée pour ouvrir le worktree dans votre explorateur de fichiers. Le chemin du worktree est passé en argument. Laissez vide pour masquer le bouton.`,"settings.terminalCommand":`Commande du terminal`,"settings.terminalCommandHint":`Commande pour lancer le terminal dans le worktree. Placeholder {path} optionnel pour le répertoire.`,"settings.terminalCommandPlaceholder":`kitty · alacritty · gnome-terminal --working-directory={path}`,"settings.mcpSelection":`Sélection MCP Claude`,"settings.mcpAutoSelect":`Auto (premier MCP actif correspondant)`,"settings.notionMcp":`Clé MCP Notion`,"settings.sentryMcp":`Clé MCP Sentry`,"settings.mcpSelectionHint":`Les entrées actives sont lues depuis ~/.claude.json. Laisser Auto pour utiliser le comportement par défaut.`,"settings.configuredProjects":`Projets configurés`,"settings.noProjects":`Aucun projet configuré`,"settings.addProject":`Ajouter un projet`,"settings.copyFrom":`Copier les settings depuis`,"settings.copyFromPlaceholder":`(aucun — partir des valeurs par défaut)`,"settings.copyFromHint":`Copie tous les settings sauf le path, le nom affiché et la branche source.`,"settings.copyFromConfirmTitle":`Écraser les valeurs actuelles ?`,"settings.copyFromConfirm":`Cela écrasera les valeurs du formulaire avec les settings de « {project} ». Continuer ?`,"settings.newProject":`Nouveau projet`,"settings.editProject":`Modifier le projet`,"help.title":`Aide`,"help.tours":`Visites guidées`,"help.steps":`{n} étape | {n} étapes`,"help.markAllSeen":`Marquer toutes comme vues`,"help.markAllSeenHint":`Valide les visites actuelles sans les lancer.`,"help.resetAll":`Réinitialiser toutes les visites`,"help.resetAllHint":`Relance l'accueil ; chaque écran rejouera sa visite à la prochaine ouverture.`,"help.status.unseen":`non vue`,"help.status.partial":`en partie`,"help.status.seen":`vue`,"help.replayThis":`Rejouer la visite de cet écran`,"tours.next":`Suivant`,"tours.prev":`Précédent`,"tours.done":`Terminé`,"tours.exitConfirm":`Quitter la visite guidée ? Elle ne se relancera plus automatiquement ; vous pourrez la rejouer à tout moment depuis le menu Aide.`,"tours.home.title":`S'orienter`,"tours.home.list.title":`Workspaces`,"tours.home.list.description":`Chaque mission vit ici avec son statut. Les badges signalent une CI en échec, une review demandant des changements ou une PR prête à merger. Faites glisser le bord intérieur d’un panneau avec la souris ou le doigt pour le redimensionner. Les boutons du haut passent sur plusieurs lignes si nécessaire.`,"tours.home.create.title":`Créer un workspace`,"tours.home.create.description":`Un workspace, c'est un worktree Git, une branche et une session d'agent pour une tâche.`,"tours.home.search.title":`Recherche`,"tours.home.search.description":`Filtrez la liste par nom. L'icône de recherche en haut ouvre la recherche plein texte dans les conversations des agents.`,"tours.home.dashboard.title":`Tableau de bord`,"tours.home.dashboard.description":`Un tableau pour tous les workspaces actifs : statut, attention, PR, diff, activité, plus la fiabilité des moteurs.`,"tours.home.health.title":`Santé et changelog`,"tours.home.health.description":`Vérifiez la base de données, les runtimes et les agents actifs. Le bouton voisin liste ce qui a changé à chaque version.`,"tours.home.settings.title":`Paramètres`,"tours.home.settings.description":`Moteurs, intégrations, automatisation, worktrees et projets. Créez maintenant votre premier workspace.`,"tours.create.title":`Créer un workspace`,"tours.create.project.title":`Projet et branche`,"tours.create.project.description":`Choisissez le projet et la branche de départ du worktree.`,"tours.create.mission.title":`Mission`,"tours.create.mission.description":`Décrivez la tâche, ou importez-la depuis une page Notion ou une issue Sentry.`,"tours.create.template.title":`Templates`,"tours.create.template.description":`Appliquez un preset enregistré, ou enregistrez ce formulaire comme preset. « Dupliquer » sur une carte de workspace ouvre ce formulaire prérempli.`,"tours.create.engine.title":`Moteur et modèle`,"tours.create.engine.description":`Claude Code ou Codex, le modèle, l'effort de raisonnement et ce que l'agent peut faire sans demander.`,"tours.create.brainstorm.title":`Brainstorm sur un autre modèle`,"tours.create.brainstorm.description":`Lancez la première session de brainstorming sur un autre modèle, puis revenez au modèle principal pour les itérations.`,"tours.create.autoloop.title":`Auto-loop`,"tours.create.autoloop.description":`Laissez l’agent terminer les tâches et les vérifications finales. Une review finale indépendante peut ensuite se répéter après correction jusqu’à zéro finding ; un blocage suspend la boucle.`,"tours.create.finalReview.title":`Configurer la review finale`,"tours.create.finalReview.description":`Choisissez à l’avance le moteur, le modèle, l’effort et les instructions du reviewer. La review tourne dans une session séparée en lecture seule ; l’agent d’origine corrige les findings, puis la review recommence jusqu’à ce qu’il n’en reste aucun.`,"tours.workspace.finalReview.title":`Review finale et corrections`,"tours.workspace.finalReview.description":`Configurez ici le reviewer final optionnel avant son lancement. Après les tâches et les vérifications finales, une session séparée examine le travail. Les findings reviennent dans la session d’origine pour correction automatique et nouvelle review. Fermer Kōbō préserve ce cycle.`,"tours.workspace.reviewReturn.title":`Retour de review`,"tours.workspace.reviewReturn.description":`Le résumé revient dans la session d’origine, même après redémarrage de Kōbō. Si la livraison est incertaine, consultez cette conversation avant Réessayer ; Annuler abandonne le retour. Une review manuelle attend vos instructions avant de corriger ; l’auto-loop corrige automatiquement.`,"tours.create.comparison.title":`Comparer deux moteurs`,"tours.create.comparison.description":`Créez deux workspaces jumeaux sur la même tâche et comparez leurs commits, tâches et activité.`,"tours.workspace.sessions.title":`Sessions du workspace`,"tours.workspace.sessions.description":`Clique sur le titre pour choisir une session, en créer une, la renommer ou retrouver son identifiant.`,"tours.workspace.actions.title":`Actions du workspace`,"tours.workspace.actions.description":`Le menu ⋯ regroupe la vue côte à côte, la palette de commandes, le panneau latéral et la visite guidée.`,"tours.workspace.title":`Dans un workspace`,"tours.workspace.chat.title":`Conversation`,"tours.workspace.chat.description":`La sortie de l'agent, en direct : messages, appels d'outils, questions et erreurs.`,"tours.workspace.input.title":`Parler à l'agent`,"tours.workspace.input.description":`Envoyez un message, utilisez les slash commands, dictez à la voix ou joignez des fichiers.`,"tours.workspace.selectors.title":`Réglages de session`,"tours.workspace.selectors.description":`Ouvre Configurer pour régler le modèle, l’effort, les permissions et l’auto-loop. Le moteur actuel y est indiqué.`,"tours.workspace.status.title":`Statut`,"tours.workspace.status.description":`L'état de la session en cours ; arrêtez-la ici si besoin.`,"tours.workspace.git.title":`Git`,"tours.workspace.git.description":`Commits, diff, push, rebase et la PR de cette branche.`,"tours.workspace.tasks.title":`Tâches`,"tours.workspace.tasks.description":`Ce que l'agent prévoit de faire, et les critères d'acceptation à respecter.`,"tours.workspace.timeline.title":`Chronologie`,"tours.workspace.timeline.description":`Toutes les sessions de ce workspace ; ouvrez-en une plus ancienne pour la relire.`,"tours.workspace.subagents.title":`Sous-agents`,"tours.workspace.subagents.description":`Suivez les sous-agents lancés par l'agent, avec leur progression en direct.`,"tours.workspace.documents.title":`Documents`,"tours.workspace.documents.description":`Plans et fichiers écrits par l'agent, consultables sans quitter le chat.`,"tours.workspace.schedule.title":`Programmation`,"tours.workspace.schedule.description":`Réveils et crons qui relancent l'agent plus tard.`,"tours.workspace.memory.title":`Mémoire du workspace`,"tours.workspace.memory.description":`Consultez la mémoire transmise à la conversation sélectionnée, les propositions en attente et les opérations du workspace. Son effacement ne modifie pas l’historique du fournisseur.`,"tours.workspace.handoff.title":`Repartir avec un contexte frais`,"tours.workspace.handoff.description":`Une longue conversation ? Démarre une session fraîche ici, ou utilise « Changer de LLM ». Le travail courant est interrompu immédiatement et la nouvelle session reprend automatiquement dans le même workspace. La synthèse de passation est facultative : désactive-la si le quota du LLM actuel est épuisé. Le suivi, le rapport et le lien vers la session précédente apparaissent sous ce bouton.`,"tours.workspace.terminal.title":`Terminal`,"tours.workspace.terminal.description":`Un shell dans le worktree, sans quitter Kōbō.`,"tours.gitPr.title":`Pull request`,"tours.gitPr.panel.title":`Statut de la PR`,"tours.gitPr.panel.description":`Résultat de la CI, décision de review et reviewers, rafraîchis toutes les 30 secondes.`,"tours.gitPr.actions.title":`Actions Git`,"tours.gitPr.actions.description":`Push, pull, rebase ou changement de branche de base. Pendant un conflit, un bouton laisse l'agent le résoudre.`,"tours.gitPr.attention.title":`Badges d'attention`,"tours.gitPr.attention.description":`La carte affiche une CI en échec, des changements demandés ou une PR prête à merger.`,"tours.settings.title":`Paramètres`,"tours.settings.engines.title":`Moteurs et modèles`,"tours.settings.engines.description":`Modèles, permissions par défaut et limites de relance automatique.`,"tours.settings.integrations.title":`Intégrations`,"tours.settings.integrations.description":`Connexions Notion et Sentry, et identifiants Bitbucket. GitHub et GitLab utilisent votre connexion CLI locale.`,"tours.settings.automation.title":`Automatisation`,"tours.settings.automation.description":`Scripts de setup et de cleanup, hooks de cycle de vie, templates de prompts, templates de workspace et skills.`,"tours.settings.worktrees.title":`Worktrees`,"tours.settings.memory.title":`Mémoire`,"tours.settings.memory.description":`Choisissez le mode manuel, automatique ou hybride, puis parcourez les portées et vérifiez ou effacez leurs données mémoire exactes. Les opérations mémoire sont immédiates ; le changement de mode passe par Enregistrer.`,"tours.settings.worktrees.description":`Où vivent les worktrees, combien de temps garder ceux qui sont mergés, et la purge automatique.`,"tours.settings.projects.title":`Projets`,"tours.settings.projects.description":`Les projets enregistrés et leurs surcharges par projet.`,"tours.settings.misc.title":`Général, voix, notifications, export`,"tours.settings.misc.description":`Langue, accès réseau, dictée, sons et notifications navigateur, et un export complet de vos réglages.`,"tours.dashboard.title":`Tableau de bord`,"tours.dashboard.overview.title":`Vue d'ensemble`,"tours.dashboard.overview.description":`Tous les workspaces actifs dans un tableau ; cliquez sur une ligne pour l'ouvrir.`,"tours.dashboard.reliability.title":`Fiabilité des moteurs`,"tours.dashboard.reliability.description":`Sessions, erreurs et durées par moteur et par modèle.`,"tours.health.title":`Santé`,"tours.health.checks.title":`Vérifications`,"tours.health.checks.description":`Environnement, base de données, runtimes, workspaces et sessions.`,"tours.health.active.title":`État actif`,"tours.health.active.description":`Les back-offs de quota, les réveils en attente et les auto-loops en cours en ce moment.`,"tours.search.title":`Recherche`,"tours.search.input.title":`Requête`,"tours.search.input.description":`Recherche dans les noms de workspaces et les conversations des agents.`,"tours.search.archived.title":`Archivés`,"tours.search.archived.description":`Inclure les workspaces archivés dans les résultats.`,"tours.changelog.title":`Nouveautés`,"tours.changelog.list.title":`Versions`,"tours.changelog.list.description":`Ce qui a changé à chaque version, la plus récente en premier.`,"settings.projectGroup.identity":`Identité`,"settings.projectGroup.defaults":`Valeurs par défaut`,"settings.projectGroup.prompts":`Prompts`,"settings.projectGroup.scripts":`Scripts`,"settings.projectPath":`Chemin du projet`,"settings.projectPathPlaceholder":`/chemin/vers/le/projet`,"settings.displayName":`Nom affiché`,"settings.displayNamePlaceholder":`Mon projet`,"settings.defaultSourceBranch":`Branche source par défaut`,"settings.defaultModel.project":`Modèle par défaut`,"settings.skipPermissions.project":`Ignorer les invites de permission`,"settings.prPromptTemplate.project":`Modèle de prompt PR`,"settings.prPromptPlaceholder.project":`Instructions spécifiques au projet pour la création de PR...`,"settings.reviewPromptTemplate.project":`Modèle de prompt de review`,"settings.ciFixPromptTemplate.project":`Modèle de prompt « Fix CI »`,"settings.gitConventions.project":`Conventions Git (projet)`,"settings.gitConventionsEmpty":`Laisser vide pour utiliser les conventions globales.`,"settings.notionStatus":`Statut ticket Notion`,"settings.notionStatusProperty":`Nom de la propriété`,"settings.notionStatusPropertyPlaceholder":`État, Status...`,"settings.notionInProgressStatus":`Valeur à définir`,"settings.notionInProgressStatusPlaceholder":`En cours, In progress...`,"settings.notionStatusHint":`Quand un workspace est créé avec un ticket Notion, la propriété spécifiée est mise à cette valeur. Les deux champs sont requis. Laisser vide pour désactiver.`,"settings.notionAssignee":`Assignation Notion`,"settings.notionAssigneeHint":`Quand un workspace est créé avec un ticket Notion, l'utilisateur authentifié sur le MCP Notion est ajouté à cette propriété People — uniquement si elle n'a pas déjà d'assigné. Laisser vide pour désactiver.`,"settings.notionAssigneeProperty":`Nom de la propriété`,"settings.notionAssigneePropertyPlaceholder":`Développeurs, Assignees...`,"settings.notionUserId":`Ton UUID Notion`,"settings.notionUserIdPlaceholder":`135d872b-594c-8126-9604-00024ad6e5b5`,"settings.notionUserIdHint":`Sélectionne ton compte dans la liste. Notion refuse l'assignation d'un bot — ce champ est obligatoire pour activer l'auto-assignation.`,"settings.notionUsersRefresh":`Rafraîchir`,"settings.notionUsersLoading":`Chargement des utilisateurs Notion…`,"settings.notionUsersLoadFailed":`Impossible de récupérer la liste : {error}`,"settings.notionUsersManualFallback":`Liste indisponible — colle ton UUID Notion manuellement.`,"settings.devServer":`Serveur de dev`,"settings.devServerStart":`Script de démarrage`,"settings.devServerStartPlaceholder":`npm run dev`,"settings.devServerStop":`Script d'arrêt`,"settings.devServerStopPlaceholder":`Optionnel — le processus sera tué automatiquement si vide`,"settings.selectProject":`Sélectionnez un projet ou ajoutez-en un nouveau`,"settings.useGlobal":`Utiliser le global`,"settings.saved":`Paramètres généraux enregistrés.`,"settings.unsavedChanges":`Modifications non enregistrées`,"settings.nav.general":`Général`,"settings.nav.agents":`Agents`,"settings.nav.skills":`Skills`,"settings.nav.prompts":`Prompts`,"settings.nav.scripts":`Scripts`,"settings.nav.workspaceTemplates":`Templates de workspace`,"workspaceTemplates.title":`Templates de workspace`,"workspaceTemplates.hint":`Préréglages enregistrés du formulaire de création. Choisissez-en un sur la page de création ; pour en modifier un, chargez-le là, ajustez, puis réenregistrez-le sous le même nom.`,"workspaceTemplates.empty":`Aucun template pour l'instant. Remplissez le formulaire de création et utilisez « Enregistrer comme template ».`,"workspaceTemplates.anyProject":`Tout projet`,"workspaceTemplates.rename":`Renommer`,"workspaceTemplates.renameTitle":`Renommer le template`,"workspaceTemplates.deleteConfirm":`Supprimer le template « {name} » ?`,"workspaceTemplates.deleted":`Template « {name} » supprimé`,"settings.nav.notion":`Notion`,"settings.nav.forge":`Forge`,"settings.bitbucketCommunity":`Bitbucket Community`,"settings.bitbucketCommunityHint":`Les identifiants restent locaux et sont utilisés uniquement par bkt.`,"settings.bitbucketUsername":`E-mail Atlassian`,"settings.bitbucketToken":`Token API Bitbucket`,"settings.nav.sentry":`Sentry`,"settings.nav.voice":`Voix`,"settings.nav.notifications":`Notifications`,"settings.nav.worktrees":`Worktrees`,"settings.nav.export":`Export`,"settings.help.general":`Langue, accès réseau et valeurs par défaut dont hérite chaque projet.`,"settings.help.agents":`Modèles et permissions par défaut, ainsi que les limites de relance automatique.`,"settings.help.skills":`Les suites de skills que l'agent est invité à utiliser.`,"settings.help.prompts":`Instructions des agents après ouverture d’une PR/MR, pour les revues de code, les corrections CI et la finalisation.`,"settings.help.scripts":`Scripts de setup, de nettoyage et de changement de branche source, plus les hooks de cycle de vie.`,"settings.help.notion":`Importer une page Notion comme source de vérité d'un workspace.`,"settings.help.sentry":`Créer un workspace à partir d'une issue Sentry.`,"settings.help.forge":`Identifiants Bitbucket. GitHub et GitLab utilisent vos CLI gh/glab authentifiées ; choisissez la forge par projet.`,"settings.help.voice":`Dictée et push-to-talk.`,"settings.help.notifications":`Sons, notifications navigateur et rappel des questions sans réponse.`,"settings.help.worktrees":`Où les worktrees sont créés, rétention et purge automatique.`,"settings.help.projects":`Projets enregistrés et leurs surcharges par projet.`,"settings.help.templates":`Templates de prompt développés dans la zone de saisie du chat.`,"settings.help.workspaceTemplates":`Presets enregistrés du formulaire de création.`,"settings.help.export":`Exporter et importer tous les paramètres en JSON.`,"settings.openNav":`Ouvrir la navigation`,"settings.saveError":`Erreur lors de l'enregistrement des paramètres.`,"settings.projectSaved":`Projet enregistré.`,"settings.projectSaveError":`Erreur lors de l'enregistrement du projet.`,"settings.projectDeleted":`Projet supprimé.`,"settings.deleteProjectConfirmTitle":`Supprimer le projet ?`,"settings.deleteProjectConfirmMessage":`Retirer « {name} » de vos projets ? Cela supprime uniquement ses réglages Kōbō — votre code et vos worktrees ne sont pas touchés.`,"settings.projectDeleteError":`Erreur lors de la suppression du projet.`,"settings.projectPathRequired":`Le chemin du projet est requis.`,"templates.title":`Modèles`,"templates.newTemplate":`Nouveau modèle`,"templates.editTemplate":`Modifier le modèle`,"templates.deleteTemplate":`Supprimer le modèle`,"templates.deleteConfirm":`Supprimer le modèle '/{slug}' ?`,"templates.deleteConfirmMessage":`Cette action est irréversible.`,"templates.slug":`Slug`,"templates.slugHint":`Lettres minuscules, chiffres, tirets. Max 64 caractères.`,"templates.slugInvalid":`Le slug ne peut contenir que des lettres minuscules, chiffres et tirets`,"templates.slugDuplicate":`Un modèle avec ce slug existe déjà`,"templates.description":`Description`,"templates.descriptionHint":`Libellé court affiché dans le dropdown.`,"templates.descriptionRequired":`La description est requise`,"templates.contentRequired":`Le contenu est requis`,"templates.content":`Contenu`,"templates.contentHint":`Contenu du modèle. Utilise {variable_name} pour les substitutions.`,"templates.availableVars":`Variables disponibles`,"templates.filePath":`Fichier : {path}`,"templates.empty":`Aucun modèle pour l'instant.`,"templates.createFailed":`Échec de la création du modèle`,"templates.updateFailed":`Échec de la modification du modèle`,"templates.deleteFailed":`Échec de la suppression du modèle`,"templates.save":`Enregistrer`,"templates.create":`Créer`,"templates.reloadDefaults":`Recharger les modèles par défaut`,"templates.reloadDefaultsHint":`Ajoute uniquement les modèles par défaut manquants. Les modèles existants (même modifiés) ne sont jamais écrasés.`,"templates.reloadDefaultsConfirmMessage":`Cette action ajoute les modèles par défaut absents de la liste. Les modèles existants — y compris ceux que tu as modifiés — ne seront pas touchés. Si tu veux récupérer la version d'origine d'un modèle modifié, supprime-le d'abord puis relance cette action.`,"templates.reloadDefaultsSuccess":`{added} ajouté(s), {kept} conservé(s)`,"templates.reloadDefaultsFailed":`Échec du rechargement des modèles par défaut`,"templates.resetToDefault":`Réinitialiser au défaut`,"templates.resetConfirmTitle":`Réinitialiser le template au défaut ?`,"templates.resetConfirmMessage":`Cela écrase vos modifications locales de /{slug} par le défaut intégré. Action irréversible.`,"templates.resetSuccess":`Template /{slug} réinitialisé au défaut`,"templates.resetFailed":`Échec de la réinitialisation du template`,"chatInput.dropdownSkills":`Skills Claude`,"chatInput.dropdownKobo":`Commandes Kōbō`,"chatInput.dropdownTemplates":`Modèles`,"documents.title":`Documents`,"documents.empty":`Aucun document trouvé`,"documents.refresh":`Actualiser`,"documents.back":`Retour`,"documents.loadFailed":`Échec du chargement du document`,"git.title":`Git`,"git.outputDialogTitle":`Git a signalé une erreur`,"git.statsFailed":`L’état git n’a pas pu être lu`,"git.section.repository":`Dépôt`,"git.section.changes":`Modifications`,"git.section.pullRequest":`Pull request`,"git.section.actions":`Actions`,"git.actions.more":`Plus`,"git.localOnly":`local uniquement`,"git.pushed":`pushé`,"git.unpushed":`{count} non pushé`,"git.commits":`{count} commit | {count} commits`,"git.commits.loading":`Chargement des commits…`,"git.commits.empty":`Aucun commit sur cette branche`,"git.commits.pushed":`Pushé`,"git.commits.unpushed":`Non pushé`,"git.commits.clickToAppend":`clique pour ajouter le SHA au chat`,"git.commits.diffThisCommit":`Diff de ce commit (vs parent)`,"git.compareCommits":`Comparer des commits…`,"git.files":`{count} fichier | {count} fichiers`,"git.staged":`{count} indexé`,"git.modified":`{count} modifié`,"git.untracked":`{count} non suivi`,"git.workingTreeEmpty":`Aucune modification non commitée`,"git.fileStaged":`Indexé`,"git.fileModified":`Modifié`,"git.fileUntracked":`Non suivi`,"git.push":`Push`,"git.forcePush":`Force push`,"git.forcePushToggle":`Force push (--force-with-lease)`,"git.pushRejectedHistory":`Push refusé : la branche locale et la branche distante ont des historiques différents. Après un rebase de commits déjà publiés, utilisez « Force push » avec confirmation. Sinon, récupérez et intégrez les changements distants avant de réessayer.`,"git.pushRejectedLease":`Push forcé refusé : la branche distante a changé depuis votre dernière récupération. Récupérez et vérifiez ces changements avant de réessayer.`,"git.pushFailed":`Impossible de pousser la branche. Ouvrez les détails pour connaître la cause.`,"git.pushBlockedByOperation":`Terminez ou abandonnez d'abord l'opération {operation} en cours`,"git.pushUpToDate":`Rien à pousser : la branche est déjà à jour sur origin`,"git.forcePushHint":`Plus sûr que --force : le push est rejeté si le remote a des commits que tu n’as pas vus. À utiliser après un rebase ou un amend de commits déjà push.`,"git.branchForcePushed":`Branche force-pushée`,"git.pull":`Pull`,"git.pullNoUpstream":`Pas d'upstream pour cette branche — push-la d'abord pour activer Pull.`,"git.sync":`Sync`,"git.createPrNoRemote":`Push la branche d'abord`,"git.viewRequest":`Voir la {request}`,"git.createRequest":`Créer une {request}`,"git.changeRequestBase":`Changer la branche cible de la {request}`,"git.forgeCliMissing":`{cli} n'est pas installé — installez-le pour les fonctions {request}`,"git.forgeNotAuthenticated":`Non authentifié — exécutez {cli} auth login`,"settings.forge":`Forge`,"settings.forge.auto":`Détection automatique`,"settings.forge.github":`GitHub`,"settings.forge.gitlab":`GitLab`,"settings.forge.bitbucketCommunity":`Bitbucket Community (bkt)`,"settings.forge.none":`Aucune`,"git.pullConfirmTitle":`Pull la branche ?`,"git.pullConfirmMessage":`Pull {branch} depuis la remote (fast-forward uniquement).`,"git.branchPulled":`Branche pull`,"git.pullFailed":`Échec du pull`,"git.renameBranch":`Renommer la branche`,"git.renameBranchPrompt":"Renommer `{branch}` en :","git.renameBranchSuccess":"Branche renommée en `{branch}`","git.renameBranchFailed":`Échec du renommage`,"git.renameBranchExists":"La branche `{branch}` existe déjà (locale ou sur origin)","git.diff":`Diff`,"git.diffReview":`Diff`,"git.diffReviewTooltip":`Ouvre le diff viewer en mode Review — commentaires inline + soumission groupée à l'agent`,"pr.baseChanged":`Base de la PR modifiée : {oldBase} → {newBase}`,"pr.openPr":`Ouvrir la PR`,"pr.openWorkspace":`Ouvrir le workspace`,"pr.dismiss":`Fermer`,"git.rebase":`Rebase`,"git.rebaseConfirmTitle":`Rebase la branche ?`,"git.rebaseConfirmMessage":`Rebase sur {branch}. Des conflits peuvent survenir.`,"git.rebaseSuccess":`Rebase terminé`,"git.rebaseFailed":`Rebase échoué`,"git.merge":`Merge`,"git.fetch":`Fetch`,"git.fetchSuccess":`Dépôt récupéré`,"git.fetchFailed":`Échec du fetch : {error}`,"git.mergeConfirmTitle":`Fusionner la branche ?`,"git.mergeConfirmMessage":`Fusionner {branch} dans cette branche. Des conflits sont possibles.`,"git.mergeSuccess":`Merge terminé`,"git.mergeFailed":`Merge échoué`,"git.commitFailed":`Commit échoué`,"git.commitChanges":`Committer les modifications`,"git.commitDialogTitle":`Committer les modifications non commitées`,"git.commitDialogDescription":`Saisissez votre message ou demandez à l’agent d’inspecter et de créer le commit.`,"git.commitMessage":`Message de commit`,"git.commitManual":`Committer`,"git.commitWithAgent":`Demander à l’agent`,"git.commitAgentSuccess":`Demande de commit envoyée à l’agent`,"git.discardFailed":`Abandon échoué`,"git.conflictTitleMerge":`Conflits de merge détectés`,"git.conflictTitleRebase":`Conflits de rebase détectés`,"git.operationPausedTitle":`Opération Git à poursuivre`,"git.operationPausedSubtitle":`Aucun fichier en conflit. Git attend simplement que tu poursuives l’opération.`,"git.conflictSubtitle":`{count} fichier(s) en conflit. Choisis comment continuer.`,"git.conflictAbortConfirmTitle":`Abandonner la résolution du conflit ?`,"git.conflictAbortConfirmMessage":`Tout ce que tu as résolu dans ce {op} est jeté et le worktree revient à son état d’avant. C’est irréversible.`,"git.conflictAbort":`Abandonner`,"git.conflictContinue":`Continuer`,"git.conflictContinued":`Opération Git poursuivie`,"git.conflictResolveWithAgent":`Demander à l'agent de résoudre`,"git.conflictAborted":`Opération abandonnée`,"git.conflictHandoffSuccess":`L'agent résout les conflits`,"git.dirtyTitleRebase":`Des modifications non commitées bloquent le rebase`,"git.dirtyTitleMerge":`Des modifications non commitées bloquent le merge`,"git.dirtyTitlePull":`Des modifications non commitées bloquent le pull`,"git.dirtySubtitle":`{modified} modifié(s), {staged} indexé(s), {untracked} non suivi(s). Choisis comment continuer.`,"git.dirtyStash":`Stash & réessayer`,"git.dirtyCommit":`Commit d'abord`,"git.dirtyCommitPlaceholder":`Message de commit`,"git.dirtyCommitConfirm":`Commit & réessayer`,"git.dirtyDiscard":`Abandonner les modifs`,"git.dirtyDiscardConfirmTitle":`Abandonner toutes les modifications non commitées ?`,"git.dirtyDiscardConfirmMessage":`Les modifications suivies seront perdues (git reset --hard). Les fichiers non suivis sont conservés. Action irréversible.`,"git.pushConfirmTitle":`Pusher la branche ?`,"git.pushConfirmMessage":`Pusher {branch} vers le dépôt distant.`,"git.pushConfirmMessagePrefix":`Pusher la branche`,"git.pushConfirmMessageSuffix":`vers le dépôt distant.`,"git.changePrBaseTitle":`Changer la branche cible`,"git.changePrBaseMessage":`Entrez la nouvelle branche cible pour la {request}.`,"git.changePrBaseSuccess":`Branche cible de la {request} mise à jour`,"git.changePrBaseFailed":`Impossible de changer la branche cible de la {request}`,"git.mergeRequest":`Fusionner la {request}`,"git.mergeRequestConfirmTitle":`Fusionner la {request} ?`,"git.mergeRequestConfirmMessage":`Cette action fusionne la {request} ouverte dans sa branche cible.`,"git.mergeRequestSuccess":`{request} fusionnée`,"git.mergeRequestFailed":`Impossible de fusionner la {request}`,"git.deleteRemoteBranch":`Supprimer la branche distante`,"git.deleteRemoteBranchTitle":`Supprimer la branche distante ?`,"git.deleteRemoteBranchMessage":`La demande a été fusionnée. Supprimer la branche distante {branch} ?`,"git.deleteRemoteBranchSuccess":`Branche distante {branch} supprimée`,"git.deleteRemoteBranchFailed":`Impossible de supprimer la branche distante`,"git.changeSourceBranch":`Changer la branche source`,"git.changeSourceBranchTitle":`Changer la branche source`,"git.changeSourceBranchMessage":`Choisis la nouvelle branche source. La branche de travail sera reconstruite par-dessus.`,"git.changeSourceBranchDone":`Branche source changée vers {branch}`,"git.changeSourceBranchAligned":`Branche source changée vers {branch} (la branche n'avait aucun commit propre)`,"git.changeSourceBranchTooMany":`La branche a trop de commits propres ({n}) — rebase-la manuellement`,"git.changeSourceBranchDirty":`Commit ou stash tes changements avant de changer la branche source`,"git.changeSourceBranchAgentRunning":`Arrête l'agent avant de changer la branche source`,"git.changeSourceBranchErrorTitle":`Échec du changement de branche source`,"git.changeSourceBranchErrorOngoing":`Une opération {op} est encore en cours sur le worktree. Annule-la pour revenir à un état propre.`,"git.changeSourceBranchErrorAbort":`Annuler l'opération`,"git.changeSourceBranchLoading":`Changement de la branche source…`,"git.changeSourceForcePushTitle":`Force-push de la branche réécrite ?`,"git.changeSourceForcePushMessage":`L'historique de la branche a été réécrit. La force-pusher vers le remote avec --force-with-lease ?`,"git.changeSourceForcePushDone":`Branche force-pushée`,"git.openEditor":`Ouvrir dans l'éditeur`,"git.openEditorFailed":`Impossible d'ouvrir l'éditeur`,"git.branchPushed":`Branche pushée`,"git.pushFirst":`La branche n'est pas sur le dépôt distant. Cliquez d'abord sur Push.`,"git.unpushedCommits":`Les commits locaux ne sont pas pushés. Cliquez d'abord sur Push.`,"git.from":`depuis`,"git.aheadBehindTooltip":`{ahead} commits en avance, {behind} en retard sur {source}`,"git.divergence.title":`Divergence de branche`,"git.divergence.subtitle":`vs {source}`,"git.divergence.ahead":`↑ {count} en avance`,"git.divergence.behind":`↓ {count} en retard`,"git.divergence.empty.ahead":`Aucun commit en avance.`,"git.divergence.empty.behind":`Aucun commit en retard.`,"git.divergence.close":`Fermer`,"git.divergence.loading":`Chargement des commits…`,"git.divergence.failed":`Échec du chargement de la divergence`,"git.divergence.retry":`Réessayer`,"git.prCreated":`{request} #{n} créée`,"git.pr.author":`Auteur`,"git.pr.reviewers":`Relecteurs`,"git.pr.assignees":`Assignés`,"git.pr.labels":`Labels`,"git.pr.changesRequestedBadge":`Modifications demandées`,"git.pr.approvedBadge":`Approuvée`,"git.pr.ci.passed":`CI OK`,"git.pr.ci.failed":`CI en échec`,"git.pr.ci.pending":`CI en cours`,"git.pr.ci.failedCount":`{n} en échec`,"git.pr.ci.pendingCount":`{n} en cours`,"git.pr.ci.passedCount":`{n} OK`,"git.pr.ci.skippedCount":`{n} ignoré(s)`,"git.pr.ci.showPassed":`Afficher les {n} jobs réussis`,"git.pr.ci.hidePassed":`Masquer les jobs réussis`,"toast.prChangesRequested":`Des modifications ont été demandées sur la PR #{n}`,"toast.prApproved":`La PR #{n} a été approuvée`,"toast.prReadyToMerge":`La PR #{n} est prête à merger`,"toast.prCiFailed":`La CI de la PR #{n} est en échec`,"toast.prCiRecovered":`La CI de la PR #{n} est rétablie`,"toast.prMergeConflict":`La PR #{n} a un conflit de merge`,"toast.prMerged":`La PR #{n} a été mergée`,"devServer.title":`Serveur de dev`,"devServer.noWorkspace":`Aucun espace de travail sélectionné`,"devServer.notConfigured":`Non configuré —`,"devServer.goToSettings":`Paramètres`,"devServer.logs":`Logs`,"devServer.running":`En cours`,"devServer.starting":`Démarrage`,"devServer.stopping":`Arrêt`,"devServer.error":`Erreur`,"devServer.stopped":`Arrêté`,"devServer.unknown":`Inconnu`,"devServer.containers":`{count} conteneur | {count} conteneurs`,"devServer.logDialog.title":`Logs du serveur de dev`,"devServer.logDialog.empty":`Aucun log disponible`,"notion.title":`Notion`,"tasks.title":`Tâches`,"notion.addTask":`Ajouter une tâche`,"notion.noUrl":`Aucune URL Notion`,"notion.subtasks":`{done}/{total} sous-tâches`,"notion.noTasks":`Aucune tâche`,"notion.newTask":`Nouvelle tâche... (Entrée pour ajouter, Échap pour annuler)`,"acceptance.title":`Critères d'acceptation`,"acceptance.addCriterion":`Ajouter un critère`,"acceptance.newCriterion":`Nouveau critère... (Entrée pour ajouter, Échap pour annuler)`,"acceptance.empty":`Aucun critère d'acceptation`,"tasks.askProgress":`Demander à l'agent de vérifier sa progression`,"agentTodos.title":`Todos de l'agent`,"agentTodos.empty":`Aucun todo de l'agent`,"subagents.title":`Sub-agents`,"subagents.empty":`Aucune activité de sous-agent`,"subagents.tools":`{count} outils`,"subagents.running":`En cours : `,"subagents.status.running":`En cours`,"subagents.status.done":`Terminé`,"subagents.status.failed":`Échec`,"subagents.status.stopped":`Arrêté`,"subagents.ambient":`Surveillance en arrière-plan`,"subagents.ambientTooltip":`Surveillance en arrière-plan (ex. Monitor) : non comptée comme activité de l'agent`,"subagents.stop":`Arrêter ce sous-agent`,"subagents.stopAll":`Tout arrêter`,"subagents.stopFailed":`Impossible d'arrêter le sous-agent : {error}`,"subagents.activity":`Activité du sous-agent`,"subagents.noActivity":`Aucune activité visible du fournisseur pour le moment`,"chat.subagentActivity":`Activité d’un sous-agent`,"chat.openSubagentActivity":`Ouvrir ce sous-agent dans le panneau latéral`,"stats.resetsAt":`Reset {value}`,"stats.usageBucket":`Quota {n}`,"quotaFooter.lastUpdated":`Dernière mise à jour : {time}`,"quotaFooter.empty":`Chargement…`,"quotaFooter.popover.title":`Utilisation Claude Code`,"quotaFooter.popover.refreshNow":`Rafraîchir`,"quotaFooter.popover.resetsIn":`Réinitialise à {value}`,"quotaFooter.popover.unauthenticated":`Auth requise`,"quotaFooter.popover.unauthenticatedHint":`Lancez "claude" une fois pour vous authentifier.`,"quotaFooter.popover.error":`Erreur`,"quotaFooter.bucket.fiveHour":`5 heures`,"quotaFooter.bucket.sevenDay":`7 jours`,"agent.error.spawn_failed":`Échec du lancement de l'agent`,"agent.error.parse_error":`Impossible d'analyser un message de l'agent`,"agent.error.rate_limit":`Limite de débit atteinte`,"agent.error.resume_failed":`Session introuvable — démarrage en session fraîche`,"agent.error.other":`Erreur de l'agent`,"quotaBackoff.banner.title":`Reprise auto à {time}`,"quotaBackoff.banner.transientTitle":`Reprise auto après interruption à {time}`,"quotaBackoff.resumeNow":`Reprendre maintenant`,"quotaBackoff.banner.tooltip":`Quota Claude épuisé. L'auto-loop reprendra automatiquement quand le quota se libère à {resets_at}.`,"quotaBackoff.banner.cancel":`Annuler la reprise`,"quotaBackoff.cancelled":`Reprise auto annulée — tu peux relancer manuellement à tout moment`,"rateLimitType.fiveHour":`Session 5h`,"rateLimitType.sevenDay":`Hebdo`,"tooltip.addTask":`Ajouter une tâche`,"tooltip.removeTask":`Supprimer la tâche`,"tooltip.addCriterion":`Ajouter un critère`,"tooltip.removeCriterion":`Supprimer le critère`,"tooltip.startDevServer":`Démarrer le serveur de dev`,"tooltip.stopDevServer":`Arrêter le serveur de dev`,"tooltip.closeDiffViewer":`Fermer le diff`,"tooltip.refreshLogs":`Actualiser les logs`,"tooltip.closeDialog":`Fermer`,"tooltip.refreshGitStats":`Actualiser les stats Git`,"tooltip.removeImage":`Supprimer l'image`,"tooltip.sendMessage":`Envoyer le message`,"tools.title":`Outils`,"tools.runSetupScript":`Relancer le script de setup`,"tools.runSetupScriptTooltip":`Exécuter le script de setup du projet dans le worktree`,"tools.runSetupScriptConfirm":`Relancer le script de setup dans cette tâche ? Les artefacts existants peuvent être écrasés.`,"tools.runSetupScriptBusy":`Impossible de relancer le setup pendant que l'agent travaille.`,"tools.noSetupScript":`Aucun script de setup configuré —`,"tools.setupScriptSuccess":`Script de setup terminé avec succès.`,"tools.setupScriptFailed":`Échec du script de setup.`,"tools.openNotion":`Ouvrir dans Notion`,"tools.openSentry":`Ouvrir dans Sentry`,"tools.review":`Reviewer les changes`,"tools.reviewTooltip":`Demander à l'agent de reviewer les changes de cette branche`,"tools.reviewBusy":`Agent occupé — attends qu'il soit idle`,"tools.fixCi":`Réparer la CI`,"tools.fixCiTooltip":`Demander à l'agent de diagnostiquer et corriger les jobs CI en échec`,"tools.fixCiLaunched":`Action « Fix CI » envoyée à l'agent`,"tools.fixCiFailed":`Échec du lancement de l'action « Fix CI »`,"tools.openFileManager":`Ouvrir dans l'explorateur de fichiers`,"tools.openFileManagerTooltip":`Ouvrir le dossier du worktree dans votre explorateur de fichiers configuré`,"tools.openFileManagerFailed":`Échec de l'ouverture de l'explorateur de fichiers`,"tools.openTerminal":`Ouvrir dans un terminal`,"tools.openTerminalTooltip":`Ouvrir le worktree dans le terminal configuré`,"tools.openTerminalFailed":`Échec de l'ouverture du terminal`,"review.title":`Lancer une review`,"review.subtitle":`Demande à l'agent de reviewer tes changes et de te faire des retours.`,"review.additionalInstructions":`Instructions supplémentaires (optionnel)`,"review.additionalInstructionsPlaceholder":`Ajoute des instructions spécifiques pour la review…`,"review.newSession":`Nouvelle session`,"review.newSessionHint":`Démarre une nouvelle session d'agent au lieu de continuer la courante.`,"review.newSessionRequired":`Une nouvelle session est nécessaire pour changer les réglages de l’agent ou revenir automatiquement.`,"review.returnToSession":`Revenir à la session actuelle après la review`,"review.returnToSessionHint":`Reprend cette session avec le résumé final du reviewer. Sinon, la conversation continue dans la session de review.`,"review.readOnlyForced":`Une review qui revient à cette session tourne en lecture seule (Plan) : elle ne peut ni modifier de fichiers ni poser de questions.`,"review.returnUnavailable":`La session actuelle doit avoir démarré pour pouvoir être reprise.`,"review.start":`Lancer la review`,"review.cancel":`Annuler`,"review.launched":`Review lancée`,"review.failed":`Échec du lancement de la review`,"diff.title":`Diff`,"diff.side":`Côte à côte`,"diff.inline":`En ligne`,"diff.hideUnchanged":`Masquer le code inchangé`,"diff.showUnchanged":`Afficher le code inchangé`,"diff.showUntracked":`Afficher les fichiers non suivis`,"diff.hideUntracked":`Masquer les fichiers non suivis`,"diff.rollbackToRemote":`Revenir à la version distante`,"diff.rollbackConfirm":`Restaurer {path} à sa version distante (origin) ? Les modifications locales sur ce fichier seront perdues.`,"diff.rollbackConfirmOk":`Rollback`,"diff.rollbackDone":`Fichier restauré à la version distante`,"diff.rollbackDoneRemote":`Fichier restauré à la version distante`,"diff.rollbackDoneHead":`Modifications locales annulées (fichier restauré au dernier commit)`,"diff.rollbackDoneDeleted":`Fichier non suivi supprimé`,"diff.deleteUntracked":`Supprimer le fichier non suivi`,"diff.deleteUntrackedConfirm":`Supprimer définitivement {path} ? Ce fichier n'est pas suivi par git — son contenu sera perdu.`,"diff.deleteUntrackedConfirmOk":`Supprimer`,"diff.rollbackFailed":`Échec du rollback`,"diff.rollbackFailedDetail":`Échec du rollback : {error}`,"diff.modeInspect":`Édition`,"diff.modeReview":`Review`,"diff.addComment":`Ajouter un commentaire`,"diff.replyComment":`Répondre`,"diff.editComment":`Modifier`,"diff.deleteComment":`Supprimer`,"diff.deleteCommentConfirm":`Supprimer ce commentaire ?`,"diff.commentPlaceholder":`Écris un commentaire de revue… (Markdown accepté)`,"diff.reviewDraft":`Brouillon de revue`,"diff.reviewEmpty":`Aucun commentaire — survole une ligne dans le diff et clique + pour en ajouter un.`,"diff.reviewGlobalPlaceholder":`Ajoute un message global de revue (optionnel)`,"diff.submitReview":`Soumettre la revue ({n})`,"diff.reviewPending":`Une revue est déjà en cours d’envoi.`,"diff.reviewEmptySubmission":`La revue est vide.`,"diff.reviewNotAccepted":`Le message n’a pas été accepté. Votre revue a été conservée.`,"diff.reviewSubmitted":`Revue soumise à l'agent`,"diff.reviewSubmitFailed":`Échec de la soumission : {error}`,"diff.scopeBranch":`Branche`,"diff.scopeUnpushed":`Non pushé`,"diff.noChanges":`Aucun changement`,"diff.searchFiles":`Rechercher des fichiers…`,"diff.noFileMatch":`Aucun fichier correspondant`,"diff.selectFile":`Sélectionnez un fichier pour voir le diff`,"diff.fileLoadFailed":`Ce diff n’a pas pu être chargé`,"diff.fileLoadFailedHint":`Le fichier sur le disque est intact — seul le chargement du diff a échoué.`,"diff.fileListLoadFailed":`La liste des fichiers n’a pas pu être chargée`,"diff.fileListLoadFailedHint":`Il s’agit d’un échec de requête, pas d’une branche sans modification.`,"diff.addToChat":`Ajouter au chat`,"diff.compareTitle":`Comparer des commits`,"diff.compareFrom":`De`,"diff.compareTo":`À`,"diff.compareSubmit":`Comparer`,"diff.compareSourceBase":`{branch} (base de la branche)`,"diff.commitsReadOnly":`lecture seule`,"diffViewer.save":`Enregistrer`,"diffViewer.savedAt":`Enregistré`,"diffViewer.saveFailed":`Échec de l’enregistrement`,"diffViewer.saveFailedDetail":`Échec de l’enregistrement : {error}`,"diffViewer.unsavedChanges.title":`Modifications non enregistrées`,"diffViewer.unsavedChanges.message":`Tu as des modifications non enregistrées. Que veux-tu faire ?`,"diffViewer.unsavedChanges.save":`Enregistrer`,"diffViewer.unsavedChanges.cancel":`Annuler`,"diffViewer.conflict.title":`Fichier modifié sur le disque`,"diffViewer.conflict.message":`Le fichier a été modifié hors de Kōbō depuis que tu l’as ouvert.`,"diffViewer.conflict.reload":`Recharger (perdre les modifs locales)`,"diffViewer.conflict.keep":`Garder les miennes`,"diffViewer.conflict.overwrite":`Écraser quand même`,"diffViewer.conflict.overwriteHint":`Remplace le fichier sur le disque par ta version. L’autre modification est perdue.`,"diffViewer.conflict.keepHint":`Garde tes modifications dans l’éditeur et adopte la nouvelle signature du disque, pour que la prochaine sauvegarde fonctionne.`,"diffViewer.saveBlocked":`L’agent tourne — arrête-le pour enregistrer tes modifications.`,"diffViewer.unsavedBanner":`Modifications non enregistrées. Arrête l’agent pour les sauvegarder.`,"diffViewer.closeConfirm.title":`Modifications non enregistrées`,"diffViewer.closeConfirm.message":`Ce fichier contient des modifications jamais enregistrées. Fermer le visualiseur de diff les perdra.`,"diffViewer.closeConfirm.discard":`Fermer sans enregistrer`,"diffViewer.criteriaRail":`Checklist de revue`,"diffViewer.criteriaRailShow":`Afficher la checklist de revue`,"diffViewer.criteriaRailHide":`Masquer la checklist de revue`,"diffViewer.fileTreeShow":`Afficher l’arbre des fichiers`,"diffViewer.fileTreeHide":`Masquer l’arbre des fichiers`,"diffViewer.closeConfirm.saveAndClose":`Enregistrer et fermer`,"diffViewer.agentRunning":`L’agent tourne — arrête-le pour éditer`,"diffViewer.fileDeleted":`Fichier supprimé`,"notification.agentFinished":`{name} — Agent terminé`,"notification.agentQuestion":`{name} — L'agent te pose une question`,"notification.awaitingReminder":`{name} - attend toujours votre réponse ({minutes} min)`,"notification.agentPermissionRequest":`{name} — L'agent demande une permission`,"notification.autoLoopCompleted":`{name} — Auto-loop terminé`,"notification.autoLoopWaitingForSlot":`{name} - L'auto-loop attend un slot d'agent libre ({running}/{limit} en cours)`,"notification.autoLoopStalled":`{name} — Auto-loop bloqué (aucun progrès)`,"notification.autoLoopError":`{name} — Auto-loop arrêté sur erreur`,"notification.autoLoopAwaitingClarification":`{name} — Auto-loop en pause, en attente de votre précision`,"notification.autoLoopPermissionOverridden":`{name} — Auto-loop a forcé le mode plan en bypass`,"notification.agentError":`{name} — Erreur agent`,"contextMenu.rename":`Renommer`,"contextMenu.editDescription":`Modifier la description`,"contextMenu.copyPath":`Copier le chemin du worktree`,"contextMenu.copyWorkspaceId":`Copier l'identifiant du workspace`,"contextMenu.openEditor":`Ouvrir dans l'éditeur`,"contextMenu.openFileManager":`Ouvrir dans l'explorateur de fichiers`,"contextMenu.unarchiveDisabledPurged":`Restaurez d’abord le worktree avec Restaurer le worktree, ou recréez-le manuellement. Kōbō détecte automatiquement les worktrees correspondants.`,"workspaceList.unarchiveBlockedPurged":`Restaurez d’abord le worktree avec Restaurer le worktree, ou recréez-le manuellement. Kōbō détecte automatiquement les worktrees correspondants.`,"contextMenu.purgeWorktree":`Libérer l'espace disque (supprimer le worktree)`,"contextMenu.purgeWorktreeTooltip":`Supprime le worktree du disque pour récupérer de l'espace — l'historique des messages et sessions est conservé. Archive automatiquement le workspace.`,"contextMenu.purgeWorktreeDialogTitle":`Libérer l'espace disque ?`,"contextMenu.purgeWorktreeDialogMessage":`Le dossier worktree de « {name} » va être supprimé du disque. L'historique des messages et sessions est conservé. Le workspace sera archivé automatiquement. Cette action ne peut pas être annulée dans la version actuelle.`,"contextMenu.purgeWorktreeDialogConfirm":`Supprimer le worktree`,"contextMenu.purgeWorktreeSuccess":`Worktree supprimé — espace disque récupéré.`,"settings.autoPurgeOnPrMerged":`Purger le worktree quand la PR est mergée`,"settings.autoPurgeOnPrMergedHint":`Quand activé, le worktree est supprimé du disque dès que la PR est mergée (en plus de l'archivage auto). L'historique des messages est conservé.`,"settings.showProgressBars":`Afficher les barres de progression`,"settings.showProgressBarsHint":`Activé par défaut. Masquer les barres ne ferme aucune activité et ne suspend pas leur suivi. Le changement s’applique dès l’enregistrement.`,"tours.settings.progressBars.title":`Barres de progression`,"tours.settings.progressBars.description":`Affichez ou masquez les barres au-dessus du champ de message. Leur suivi continue même lorsqu’elles sont masquées.`,"settings.agentWatchdogEnabled":`Activer les watchdogs d’inactivité des agents`,"settings.agentWatchdogHint":`Désactivés par défaut. Si activés, Kōbō peut arrêter Claude ou Codex après un silence prolongé, y compris les outils, sous-agents et compactages. Pris en compte au prochain démarrage ou à la prochaine reprise de l’agent.`,"tours.settings.agentWatchdog.title":`Watchdogs d’inactivité des agents`,"tours.settings.agentWatchdog.description":`Laissez cette option désactivée pour permettre aux tâches longues d’attendre sans activité visible. Activez-la pour fermer automatiquement les sessions bloquées. Le changement s’applique au prochain démarrage ou à la prochaine reprise de l’agent.`,"settings.autoLoopMaxRetries":`Nombre maximal de nouvelles tentatives`,"settings.awaitingUserReminder":`Rappel de question sans réponse`,"settings.awaitingUserReminderHint":`Minutes pendant lesquelles un workspace peut attendre votre réponse avant que Kōbō ne vous relance, puis à chaque intervalle suivant. 0 désactive.`,"settings.localeLoadFailed":`Impossible de charger cette langue ; la langue actuelle est conservée.`,"settings.autoLoopMaxRetriesHint":`Met la mission en pause après ce nombre de pannes temporaires du moteur ou du serveur. Les quotas attendent leur réinitialisation sans consommer cette limite.`,"settings.retentionTitle":`Rétention de l'historique de conversation (désactivée par défaut)`,"settings.retentionWarning":`Activer cette option supprime définitivement de la base l'historique de conversation des agents, à commencer par tout ce qui est déjà plus vieux que la fenêtre. Les événements supprimés sont irrécupérables.`,"settings.retentionHint":`Exécutée une fois au démarrage du serveur. Les workspaces, tâches, sessions, branches et worktrees ne sont jamais touchés — seule la sortie enregistrée des agents l'est.`,"settings.retentionDaysLabel":`Supprimer les événements plus vieux que (jours)`,"settings.retentionDaysHint":`0 — la valeur par défaut — conserve tous les événements indéfiniment. Renseignez une valeur pour activer la rétention.`,"settings.retentionKeepLabel":`Événements toujours conservés par workspace`,"settings.retentionKeepHint":`Les événements les plus récents de chaque workspace survivent quel que soit leur âge, pour qu'un workspace ancien mais toujours ouvert garde un historique lisible. Suggéré : 5000.`,"settings.retentionDisabledHint":`Rétention désactivée : rien ne sera jamais supprimé.`,"settings.retentionConfirmTitle":`Supprimer définitivement de l'historique de conversation ?`,"settings.retentionConfirmMessage":`Ne conserver que {days} jour(s) d'historique supprimera définitivement, au prochain démarrage du serveur, {count} des {total} événements d'agent enregistrés — y compris tout ce qui est déjà plus ancien. C'est irréversible. Continuer ?`,"settings.retentionConfirmMessageUnknown":`Ne conserver que {days} jour(s) d'historique supprimera définitivement, au prochain démarrage du serveur, tous les événements d'agent plus anciens — y compris tout ce qui est déjà accumulé. Le volume exact n'a pas pu être calculé. C'est irréversible. Continuer ?`,"settings.purgeDocsTitle":`Comment ça marche — restauration & permissions`,"settings.purgeDocsRestoreTitle":`Restaurer un worktree purgé (détection automatique)`,"settings.purgeDocsRestoreIntro":`Un workspace purgé conserve son historique de chat et les métadonnées de la PR, mais le dossier worktree n'existe plus. Recrée-le manuellement avec l'une de ces commandes — Kōbō détecte la réapparition du dossier dans les 30 secondes et réactive automatiquement le workspace (désarchive + clear flag purge) :`,"settings.purgeDocsRestoreCommands":`# GitHub (via le CLI gh) :
12
12
  gh pr checkout [numéro-pr] --recurse-submodules
13
13
 
14
14
  # Ou directement via git (fonctionne sur GitHub même après suppression de la branche) :