hermes-web-ui 0.6.40 → 0.6.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/js/{AppSidebar-CaSVcbCW.js → AppSidebar-CNkSiv3l.js} +1 -1
- package/dist/client/assets/js/{ChannelsView-hdAXa1hf.js → ChannelsView-6rEo6RBl.js} +1 -1
- package/dist/client/assets/js/{ChatPanel-C6sX6idm.js → ChatPanel-ANAZWluc.js} +3 -3
- package/dist/client/assets/js/{ChatView-B68k_-D9.js → ChatView-DFcPsmRF.js} +1 -1
- package/dist/client/assets/js/{CodingAgentsView-CsIjwbXR.js → CodingAgentsView-CpIY0SHT.js} +1 -1
- package/dist/client/assets/js/{DefaultCredentialPrompt-BRhb4DOa.js → DefaultCredentialPrompt-DmNeotSW.js} +1 -1
- package/dist/client/assets/js/{DesktopBrowserPanel-BlBfS64w.js → DesktopBrowserPanel-CWjTU-3y.js} +1 -1
- package/dist/client/assets/js/{DesktopBrowserView-JukL0QuS.js → DesktopBrowserView-D9Qb3fIV.js} +1 -1
- package/dist/client/assets/js/{DesktopPetView-DWq4EiRU.js → DesktopPetView-B7REtC57.js} +1 -1
- package/dist/client/assets/js/{DesktopTitleBar-DphP4oa6.js → DesktopTitleBar-Dej_16hB.js} +1 -1
- package/dist/client/assets/js/{DevicesView-BFtrfqJs.js → DevicesView--d4HCkch.js} +1 -1
- package/dist/client/assets/js/{DocxFilePreview-CmVJ9Jxx.js → DocxFilePreview-BQz6WC7r.js} +2 -2
- package/dist/client/assets/js/{FileEditor-CdkNYp7b.js → FileEditor-BBegs-5i.js} +2 -2
- package/dist/client/assets/js/{FilePreview-CJrVRPRs.js → FilePreview-B7WqYvZs.js} +2 -2
- package/dist/client/assets/js/{FileRenameModal-mghyEXU4.js → FileRenameModal-82RkAZkd.js} +1 -1
- package/dist/client/assets/js/{FilesPanel-B9cKB5lX.js → FilesPanel-BHcg6CpC.js} +2 -2
- package/dist/client/assets/js/{FilesView-iKZu70E9.js → FilesView-Dl15WTar.js} +2 -2
- package/dist/client/assets/js/{GlobalAgentView-JZsss0gx.js → GlobalAgentView-dxEX611f.js} +1 -1
- package/dist/client/assets/js/{GlobalPendingActions-BRQIt5vl.js → GlobalPendingActions-CeK96C3G.js} +1 -1
- package/dist/client/assets/js/{GroupChatLinkView-CNrV8lnT.js → GroupChatLinkView-CJhI9DVE.js} +1 -1
- package/dist/client/assets/js/{GroupChatPanel-WK4zBasl.js → GroupChatPanel-CLa3s08V.js} +3 -3
- package/dist/client/assets/js/{GroupChatView-BlMUD1MW.js → GroupChatView-CUwvu-6F.js} +1 -1
- package/dist/client/assets/js/{HistoryMessageList-D8zoQ1Zs.js → HistoryMessageList-BdD8GJYM.js} +1 -1
- package/dist/client/assets/js/{HistoryView-Bpr8N2lC.js → HistoryView-Ro92tP5R.js} +1 -1
- package/dist/client/assets/js/{HtmlFilePreview-Bj3_-hMo.js → HtmlFilePreview-xYn7YtmC.js} +1 -1
- package/dist/client/assets/js/{JobsView-CZK26gTw.js → JobsView-BaNA1Yaa.js} +2 -2
- package/dist/client/assets/js/{JourneyView-BPUsLj4o.js → JourneyView-Bw-05mCF.js} +1 -1
- package/dist/client/assets/js/{KanbanView-B7d-2_z9.js → KanbanView-BYC32l2Q.js} +1 -1
- package/dist/client/assets/js/{LoginView-BpYyv831.js → LoginView-KrpCkwOr.js} +1 -1
- package/dist/client/assets/js/{LogsView-CabFHk0v.js → LogsView-Dgm4v5sN.js} +1 -1
- package/dist/client/assets/js/{MarkdownRenderer-CVtmHZwc.js → MarkdownRenderer-BIPowjr-.js} +3 -3
- package/dist/client/assets/js/{McpManagerView-C-ou8vf3.js → McpManagerView-DTtkUIvq.js} +1 -1
- package/dist/client/assets/js/{MemoryView-QGFW4iZo.js → MemoryView-BnL7xzux.js} +2 -2
- package/dist/client/assets/js/{MessageList-DZR-TFjD.js → MessageList-5tytzhb0.js} +3 -3
- package/dist/client/assets/js/{ModelsView-DiWdSWOW.js → ModelsView-ComCz0Ce.js} +1 -1
- package/dist/client/assets/js/{OutlinePanel-Dlr5svMY.js → OutlinePanel-CF_XPCRn.js} +1 -1
- package/dist/client/assets/js/{PageSidebarFooter-Bic1fUmG.js → PageSidebarFooter-dvLzcTIm.js} +1 -1
- package/dist/client/assets/js/{PdfFilePreview-Dkpan1ay.js → PdfFilePreview-COOAoJ4V.js} +2 -2
- package/dist/client/assets/js/{PerformanceView-LrZaED_Z.js → PerformanceView-D6dKifJh.js} +1 -1
- package/dist/client/assets/js/{PetdexView-Bv8RioGL.js → PetdexView-CmvzDYwf.js} +1 -1
- package/dist/client/assets/js/{PluginsView-CbtdIGlq.js → PluginsView-zJV9FE9c.js} +1 -1
- package/dist/client/assets/js/{PptxFilePreview-5if_GbU6.js → PptxFilePreview-dC4JxV6j.js} +2 -2
- package/dist/client/assets/js/{ProfileAvatar-DI9ciJxS.js → ProfileAvatar-C8xoALCI.js} +1 -1
- package/dist/client/assets/js/{ProfilesView-C-FSiKMU.js → ProfilesView-CxVxJRN_.js} +1 -1
- package/dist/client/assets/js/{ProviderConfigurationPrompt-BUoWC41Y.js → ProviderConfigurationPrompt-zwk1UwoP.js} +1 -1
- package/dist/client/assets/js/{SessionSearchModal-CEKvSihp.js → SessionSearchModal-DhwGsV-i.js} +1 -1
- package/dist/client/assets/js/{SettingRow-CSfiJmxx.js → SettingRow-DHqhLX3M.js} +1 -1
- package/dist/client/assets/js/{SettingsCircuitBadge-DHIEFyTR.js → SettingsCircuitBadge-CnWSfQZd.js} +1 -1
- package/dist/client/assets/js/{SettingsView-DbNJroV3.js → SettingsView-Cbroga25.js} +1 -1
- package/dist/client/assets/js/{SharedGroupChatView-CTYjqWcO.js → SharedGroupChatView-DXfqtQ33.js} +1 -1
- package/dist/client/assets/js/{SkillsUsageView-BqZ3GtfT.js → SkillsUsageView-C34i3lOQ.js} +1 -1
- package/dist/client/assets/js/{SkillsView-Bhla7821.js → SkillsView-DRG_1esx.js} +2 -2
- package/dist/client/assets/js/{SpreadsheetFilePreview-CGK8HDAx.js → SpreadsheetFilePreview-DRw4kIx5.js} +1 -1
- package/dist/client/assets/js/{TerminalPanel-CtBTLOwq.js → TerminalPanel-Da1nL9P8.js} +1 -1
- package/dist/client/assets/js/{TerminalView-BID7fupB.js → TerminalView-B6z-VaGq.js} +1 -1
- package/dist/client/assets/js/{ThemeView-Cx3ucIus.js → ThemeView-CAaJ9MH-.js} +1 -1
- package/dist/client/assets/js/{UsageView-ByGCsw7o.js → UsageView-B_hLsp0k.js} +1 -1
- package/dist/client/assets/js/{VersionPreviewView-DiAK1ind.js → VersionPreviewView-DKXL6anl.js} +1 -1
- package/dist/client/assets/js/{WebPet-CdIqrnp1.js → WebPet-BUvrfjpq.js} +1 -1
- package/dist/client/assets/js/{WorkflowView-DmBOhSuq.js → WorkflowView-r46Ap9FY.js} +1 -1
- package/dist/client/assets/js/{WorkspaceDiffPreview-dHIGp-9F.js → WorkspaceDiffPreview-EwZAE18F.js} +2 -2
- package/dist/client/assets/js/{abap-Dj8IFKiF.js → abap-C7gkFu-A.js} +1 -1
- package/dist/client/assets/js/{aiden0z-pptx-renderer.es-6vi5-jAN.js → aiden0z-pptx-renderer.es-DOpVaH_k.js} +1 -1
- package/dist/client/assets/js/{apex-C3INPUEt.js → apex-DZOtRowu.js} +1 -1
- package/dist/client/assets/js/{ar-Gk9y3ZfO.js → ar-8iThLSJQ.js} +1 -1
- package/dist/client/assets/js/architecture-7EHR7CIX-BrfhYGuP.js +1 -0
- package/dist/client/assets/js/{architectureDiagram-3BPJPVTR-DLZYeivB.js → architectureDiagram-3BPJPVTR-DEsTTzKd.js} +1 -1
- package/dist/client/assets/js/{auth-D1ZFqv22.js → auth-B52zm2Ir.js} +1 -1
- package/dist/client/assets/js/{azcli-UBzLhJq5.js → azcli-KxuicZQh.js} +1 -1
- package/dist/client/assets/js/{bat-P3O4jldt.js → bat-DfFP4HF-.js} +1 -1
- package/dist/client/assets/js/{bicep-DdQR9RxE.js → bicep-Co4bntVh.js} +1 -1
- package/dist/client/assets/js/{blockDiagram-GPEHLZMM-UWFo8sm5.js → blockDiagram-GPEHLZMM-NsxYeUKd.js} +1 -1
- package/dist/client/assets/js/{c4Diagram-AAUBKEIU-jgyj0wOb.js → c4Diagram-AAUBKEIU-D68asSzm.js} +1 -1
- package/dist/client/assets/js/{cameligo-Bb4ubW_C.js → cameligo-Xi0l_9Wr.js} +1 -1
- package/dist/client/assets/js/{chat-DdHii4Qz.js → chat-fUZW3YFa.js} +1 -1
- package/dist/client/assets/js/{chat-input-height-CSPwB9it.js → chat-input-height-lvFawuv9.js} +1 -1
- package/dist/client/assets/js/{chat-timestamp-DGQ8fmtT.js → chat-timestamp-4wWFcZWv.js} +1 -1
- package/dist/client/assets/js/{chunk-2J33WTMH-Br9OWF5a.js → chunk-2J33WTMH-CEU5sLIh.js} +1 -1
- package/dist/client/assets/js/{chunk-3OPIFGDE-Cb40LuI4.js → chunk-3OPIFGDE-DEhbKkCl.js} +1 -1
- package/dist/client/assets/js/{chunk-4BX2VUAB-jYtdiafd.js → chunk-4BX2VUAB-OIZUstuy.js} +1 -1
- package/dist/client/assets/js/{chunk-55IACEB6-CBtymeHY.js → chunk-55IACEB6-DQHKZCBG.js} +1 -1
- package/dist/client/assets/js/{chunk-5ZQYHXKU-yj9xqmex.js → chunk-5ZQYHXKU-BU3pQVVl.js} +1 -1
- package/dist/client/assets/js/{chunk-727SXJPM-er_5tB5X.js → chunk-727SXJPM-jj97gdnP.js} +1 -1
- package/dist/client/assets/js/{chunk-AQP2D5EJ-C4mDD6xK.js → chunk-AQP2D5EJ-jv-oWlkb.js} +1 -1
- package/dist/client/assets/js/{chunk-BSJP7CBP-QZesZe57.js → chunk-BSJP7CBP-DkKsepNF.js} +1 -1
- package/dist/client/assets/js/{chunk-CSCIHK7Q-5LH118bT.js → chunk-CSCIHK7Q-CLgoBoCF.js} +3 -3
- package/dist/client/assets/js/{chunk-FMBD7UC4-CQho6QZ5.js → chunk-FMBD7UC4-Bx1bCKUR.js} +1 -1
- package/dist/client/assets/js/{chunk-KSCS5N6A-DONM1Omv.js → chunk-KSCS5N6A-CZHZ6pBd.js} +1 -1
- package/dist/client/assets/js/{chunk-L5ZTLDWV-FN_zFWkp.js → chunk-L5ZTLDWV-dz9D3kOb.js} +1 -1
- package/dist/client/assets/js/{chunk-LZXEDZCA-CEEUVvpS.js → chunk-LZXEDZCA-CQiSQehC.js} +2 -2
- package/dist/client/assets/js/{chunk-ND2GUHAM-DWckpxQD.js → chunk-ND2GUHAM-mWODKb8v.js} +1 -1
- package/dist/client/assets/js/{chunk-NZK2D7GU-0mKZmkuV.js → chunk-NZK2D7GU-ivCkjCOR.js} +1 -1
- package/dist/client/assets/js/{chunk-O5CBEL6O-DIDAOkT_.js → chunk-O5CBEL6O-BRUisK47.js} +1 -1
- package/dist/client/assets/js/{chunk-QZHKN3VN-D3c-TMz-.js → chunk-QZHKN3VN-BHjgTrzY.js} +1 -1
- package/dist/client/assets/js/{chunk-WU5MYG2G-BZvSpwm4.js → chunk-WU5MYG2G-CNW1rcpL.js} +1 -1
- package/dist/client/assets/js/{chunk-XPW4576I-xdyJtk-s.js → chunk-XPW4576I-DP3dJbOu.js} +1 -1
- package/dist/client/assets/js/classDiagram-4FO5ZUOK-BVBBe3DQ.js +1 -0
- package/dist/client/assets/js/classDiagram-v2-Q7XG4LA2-DJUe3i9Y.js +1 -0
- package/dist/client/assets/js/{clipboard-DQ_A8ns-.js → clipboard-DHZFaAvO.js} +1 -1
- package/dist/client/assets/js/{clipboard-files-bDrcGKPe.js → clipboard-files-CBDy-02Y.js} +1 -1
- package/dist/client/assets/js/{clojure-ku7aCU1_.js → clojure-DuyGwS8X.js} +1 -1
- package/dist/client/assets/js/{coding-agents-DfHyBvky.js → coding-agents-BNTHD6kd.js} +1 -1
- package/dist/client/assets/js/{codingAgentProviders-BM18FAW9.js → codingAgentProviders-DM_ouxbL.js} +1 -1
- package/dist/client/assets/js/{coffee-DnRIdJlY.js → coffee-C5p7vzpa.js} +1 -1
- package/dist/client/assets/js/{completion-notification-XxjbntI8.js → completion-notification-CzdnhuX3.js} +1 -1
- package/dist/client/assets/js/{cose-bilkent-S5V4N54A-w891sIF1.js → cose-bilkent-S5V4N54A-De_ZdqY0.js} +1 -1
- package/dist/client/assets/js/{cpp-CN8i6ISX.js → cpp-II5hDbTe.js} +1 -1
- package/dist/client/assets/js/{csharp-B-fxig7O.js → csharp-D0POzSpv.js} +1 -1
- package/dist/client/assets/js/{csp-Bar9LGt4.js → csp-CwtuRkR3.js} +1 -1
- package/dist/client/assets/js/{css-DFtC5xZN.js → css-Dc2fJIqQ.js} +1 -1
- package/dist/client/assets/js/{cssMode-DH5XKKL2.js → cssMode-CC6jRvHF.js} +1 -1
- package/dist/client/assets/js/{cypher-BkJexWsv.js → cypher-DBcQoWDH.js} +1 -1
- package/dist/client/assets/js/{cytoscape.esm-BDsvr8Aq.js → cytoscape.esm-C9FMRqxM.js} +1 -1
- package/dist/client/assets/js/{dagre-BM42HDAG-BuT885pa.js → dagre-BM42HDAG-CvJIC410.js} +1 -1
- package/dist/client/assets/js/{dagre-BVUDh8Sh.js → dagre-BtgEsAtK.js} +1 -1
- package/dist/client/assets/js/{dart-B7W8hAtN.js → dart-Jf_Hmp2o.js} +1 -1
- package/dist/client/assets/js/{de-LDpd8WHJ.js → de-7hLSwCEx.js} +1 -1
- package/dist/client/assets/js/{defineProperty-DdPu4ZVv.js → defineProperty-DHkErCmG.js} +1 -1
- package/dist/client/assets/js/{desktop-browser-xrRFPNUg.js → desktop-browser-C6AhY0uu.js} +1 -1
- package/dist/client/assets/js/{diagram-2AECGRRQ-B1sSf-09.js → diagram-2AECGRRQ-CvPeU5Lm.js} +1 -1
- package/dist/client/assets/js/{diagram-5GNKFQAL-BffX22pf.js → diagram-5GNKFQAL-CBniYlkH.js} +1 -1
- package/dist/client/assets/js/{diagram-KO2AKTUF-D8QvpUpn.js → diagram-KO2AKTUF-C_yFaVRj.js} +1 -1
- package/dist/client/assets/js/{diagram-LMA3HP47-DkG7p3lQ.js → diagram-LMA3HP47-BzM1IxNe.js} +1 -1
- package/dist/client/assets/js/{diagram-OG6HWLK6-RjvNNvXM.js → diagram-OG6HWLK6-yvmf_3ax.js} +1 -1
- package/dist/client/assets/js/{dist-Bk0VKtV3.js → dist-BHzBn3v7.js} +1 -1
- package/dist/client/assets/js/{dockerfile-C4m7j8sy.js → dockerfile-J3d6ZPDJ.js} +1 -1
- package/dist/client/assets/js/{docx-preview-BpTW-GN7.js → docx-preview-Rqt8wMjQ.js} +1 -1
- package/dist/client/assets/js/{download-CX8EG48r.js → download-xhRMWMda.js} +1 -1
- package/dist/client/assets/js/{ecl-EHV358Ls.js → ecl-XnlT0p97.js} +1 -1
- package/dist/client/assets/js/{editor.api2-CnHBqh_d.js → editor.api2-ChO5nUQb.js} +1 -1
- package/dist/client/assets/js/{elixir-DLfp2Dwn.js → elixir-BEJbxH-B.js} +1 -1
- package/dist/client/assets/js/{en-D6VVFwFU.js → en-D2WSXgkM.js} +1 -1
- package/dist/client/assets/js/{erDiagram-TEJ5UH35-CLlLC6xx.js → erDiagram-TEJ5UH35-DZysD9r9.js} +1 -1
- package/dist/client/assets/js/{es-BIMLuyVP.js → es-B7Mq1P0U.js} +1 -1
- package/dist/client/assets/js/{esm-C8D4M0Yn.js → esm-DnZPPtmx.js} +1 -1
- package/dist/client/assets/js/eventmodeling-FCH6USID-vlE3-g2j.js +1 -0
- package/dist/client/assets/js/{file-preview-BvgwVZXh.js → file-preview-C417aixJ.js} +1 -1
- package/dist/client/assets/js/{files-CJkCqsUx.js → files-DjI-npgn.js} +1 -1
- package/dist/client/assets/js/{flow9-CtBaUnAi.js → flow9-j5XT_8TQ.js} +1 -1
- package/dist/client/assets/js/{flowDiagram-I6XJVG4X-VTRTPnqD.js → flowDiagram-I6XJVG4X-Dt5ZtyHz.js} +1 -1
- package/dist/client/assets/js/{fr-C2lf0cY2.js → fr-DvClrDOw.js} +1 -1
- package/dist/client/assets/js/{freemarker2-XLeMvhl_.js → freemarker2-BzCf_0SN.js} +1 -1
- package/dist/client/assets/js/{fsharp-Db0uaBQv.js → fsharp-ClU_Sdjr.js} +1 -1
- package/dist/client/assets/js/{ganttDiagram-6RSMTGT7-CdKcIZ8_.js → ganttDiagram-6RSMTGT7-Bca3rPWi.js} +1 -1
- package/dist/client/assets/js/gitGraph-WXDBUCRP-Cyd4P6XH.js +1 -0
- package/dist/client/assets/js/{gitGraphDiagram-PVQCEYII-Bcuyw6fo.js → gitGraphDiagram-PVQCEYII-Co29qnTg.js} +1 -1
- package/dist/client/assets/js/{go-DwaTlB-B.js → go-D3iUyCM0.js} +1 -1
- package/dist/client/assets/js/{graphlib-vAI4Pw7R.js → graphlib-Bln6qd-Z.js} +1 -1
- package/dist/client/assets/js/{graphql-Cf2XhNJR.js → graphql-z8koqyyL.js} +1 -1
- package/dist/client/assets/js/{group-agent-avatar-CPehpiK0.js → group-agent-avatar-CwqtaKGw.js} +1 -1
- package/dist/client/assets/js/{group-chat-CY62vc77.js → group-chat-Buz8HP-N.js} +1 -1
- package/dist/client/assets/js/{group-chat-xkdjC2Jt.js → group-chat-CgFAwCtr.js} +1 -1
- package/dist/client/assets/js/{group-chat-agent-link-DdSNKasF.js → group-chat-agent-link-N5IFeN_j.js} +1 -1
- package/dist/client/assets/js/{handlebars-CNEKu_p8.js → handlebars-C_JvhUYs.js} +1 -1
- package/dist/client/assets/js/{hcl-6UZbq6h2.js → hcl-X7TzviIX.js} +1 -1
- package/dist/client/assets/js/{highlight-DwtBT6t1.js → highlight-C4yUBxwQ.js} +1 -1
- package/dist/client/assets/js/{html-DfSIHhKA.js → html-B-rCQB0N.js} +1 -1
- package/dist/client/assets/js/{htmlMode-iGw9-O-W.js → htmlMode-CAeEf_yf.js} +1 -1
- package/dist/client/assets/js/{index-DnjQJzX4.js → index-DN4SafrP.js} +5 -5
- package/dist/client/assets/js/info-J43DQDTF-B9tkQ2Sb.js +1 -0
- package/dist/client/assets/js/{infoDiagram-5YYISTIA-85450Zam.js → infoDiagram-5YYISTIA-BWQGayms.js} +1 -1
- package/dist/client/assets/js/{ini-8em8V_Af.js → ini-LTHHN4J-.js} +1 -1
- package/dist/client/assets/js/{ishikawaDiagram-YF4QCWOH-BZ4az7UA.js → ishikawaDiagram-YF4QCWOH-Dhuplz_z.js} +1 -1
- package/dist/client/assets/js/{ja-C1bBXgr_.js → ja-D7BeX2_D.js} +1 -1
- package/dist/client/assets/js/{java-CP1MdIkO.js → java-BRFX-ya0.js} +1 -1
- package/dist/client/assets/js/{javascript-Cr8_LHYa.js → javascript-ZXiVmjXn.js} +1 -1
- package/dist/client/assets/js/{journeyDiagram-JHISSGLW-DGMB8Tgc.js → journeyDiagram-JHISSGLW-CJeatAU9.js} +1 -1
- package/dist/client/assets/js/{jsonMode-HCZ-1lFH.js → jsonMode-C6FcMe0o.js} +1 -1
- package/dist/client/assets/js/{jszip.min-BkR6b8DY.js → jszip.min-skZCUzWf.js} +1 -1
- package/dist/client/assets/js/{julia-DMTMxa5q.js → julia-Bph8N3CL.js} +1 -1
- package/dist/client/assets/js/{kanban-definition-UN3LZRKU-F5cH_RpB.js → kanban-definition-UN3LZRKU-tvWuOdSr.js} +1 -1
- package/dist/client/assets/js/{katex-CYbEJAbZ.js → katex-hSGJNERm.js} +1 -1
- package/dist/client/assets/js/{ko-qgOeHd8L.js → ko-BsVa-If_.js} +1 -1
- package/dist/client/assets/js/{kotlin-Blzus47W.js → kotlin-_c4-tPQp.js} +1 -1
- package/dist/client/assets/js/{less-DWCHpDyf.js → less-5oVo4jfQ.js} +1 -1
- package/dist/client/assets/js/{lexon-YXdlYGbJ.js → lexon-DE4YtGwF.js} +1 -1
- package/dist/client/assets/js/{liquid-DSQgvRwe.js → liquid-BGfieGMG.js} +1 -1
- package/dist/client/assets/js/{lspLanguageFeatures-0Hx2Vnc-.js → lspLanguageFeatures-DU_1H2uW.js} +1 -1
- package/dist/client/assets/js/{lua-Cyv3mTkg.js → lua-7WJSZJqD.js} +1 -1
- package/dist/client/assets/js/{m3-CPY3Ym7_.js → m3-gZlfoR19.js} +1 -1
- package/dist/client/assets/js/{markdown-DaPQ1nuG.js → markdown-BYF71orA.js} +1 -1
- package/dist/client/assets/js/{mdx-BqA6Xr9V.js → mdx-CunEIV3g.js} +1 -1
- package/dist/client/assets/js/{mermaid-parser.core-D4HRUOce.js → mermaid-parser.core-DU_SX15F.js} +3 -3
- package/dist/client/assets/js/{mermaid.core-w6kHmgOG.js → mermaid.core-8vsbhG5J.js} +3 -3
- package/dist/client/assets/js/{message-scroll-position-C5yRCyBU.js → message-scroll-position-C9_YO3pX.js} +2 -2
- package/dist/client/assets/js/{mindmap-definition-RKZ34NQL-CnzhnJ7Z.js → mindmap-definition-RKZ34NQL-HPtlKqL1.js} +1 -1
- package/dist/client/assets/js/{mips-BfqBfLvN.js → mips-DXkvw9aZ.js} +1 -1
- package/dist/client/assets/js/{models-wrytxWnf.js → models-BILDy2sV.js} +1 -1
- package/dist/client/assets/js/{monaco.contribution-Bc-DesyO.js → monaco.contribution-DDqeHGl3.js} +2 -2
- package/dist/client/assets/js/{msdax-DgMip49g.js → msdax-BbHEBDvP.js} +1 -1
- package/dist/client/assets/js/{mysql-DPUvF1g2.js → mysql-7I1rlwh7.js} +1 -1
- package/dist/client/assets/js/{objective-c-BQ3llrPW.js → objective-c-Dk03REAv.js} +1 -1
- package/dist/client/assets/js/packet-YPE3B663-DlTFK3Wo.js +1 -0
- package/dist/client/assets/js/{pascal-bFWHV7MZ.js → pascal-BCfNkzYY.js} +1 -1
- package/dist/client/assets/js/{pascaligo-C8Qza2pK.js → pascaligo-D-DslS98.js} +1 -1
- package/dist/client/assets/js/{pdf-Cb7x495t.js → pdf-B_OYWxSy.js} +1 -1
- package/dist/client/assets/js/{pdf.worker.min-DDUKJ6cJ.js → pdf.worker.min--q2RLEHa.js} +1 -1
- package/dist/client/assets/js/{perl-x25gw0_p.js → perl-MUnuTclx.js} +1 -1
- package/dist/client/assets/js/{pets-BfRsvl7D.js → pets-D74G2jqA.js} +1 -1
- package/dist/client/assets/js/{pgsql-DAUcGeRq.js → pgsql-BxCBktNe.js} +1 -1
- package/dist/client/assets/js/{php-nri1eqb2.js → php-zp9UgH03.js} +1 -1
- package/dist/client/assets/js/pie-LRSECV5Y-BtnBGhFZ.js +1 -0
- package/dist/client/assets/js/{pieDiagram-4H26LBE5-4LODdtT_.js → pieDiagram-4H26LBE5-CG8_pcHr.js} +1 -1
- package/dist/client/assets/js/{pla-CHi5LWNL.js → pla-DGCtmYZC.js} +1 -1
- package/dist/client/assets/js/{postiats-Bk7jD0AA.js → postiats-DHSW8gnY.js} +1 -1
- package/dist/client/assets/js/{powerquery-UTqJ0Vs7.js → powerquery-BGsPEmJe.js} +1 -1
- package/dist/client/assets/js/{powershell-CuPY3Rqk.js → powershell-BItlb0hE.js} +1 -1
- package/dist/client/assets/js/{profiles-D-vlI-Ec.js → profiles-BK5JKD7h.js} +1 -1
- package/dist/client/assets/js/{protobuf-Be4AIz9j.js → protobuf-BIhm6JYx.js} +1 -1
- package/dist/client/assets/js/{pt-D7_udWb3.js → pt-BSORCDMm.js} +1 -1
- package/dist/client/assets/js/{pug-CZFx15Ey.js → pug-BtnM7KZj.js} +1 -1
- package/dist/client/assets/js/{python-BgRg6Ez6.js → python-DxzTx1Q_.js} +1 -1
- package/dist/client/assets/js/{qsharp-BiBiLhRS.js → qsharp-B_8MSfaB.js} +1 -1
- package/dist/client/assets/js/{quadrantDiagram-W4KKPZXB-g_q9-dXx.js → quadrantDiagram-W4KKPZXB-CsbkMYuV.js} +1 -1
- package/dist/client/assets/js/{r-DM7NVSbZ.js → r-kvKC59jk.js} +1 -1
- package/dist/client/assets/js/radar-GUYGQ44K-BTKMKX4G.js +1 -0
- package/dist/client/assets/js/{razor-CiWy0jCW.js → razor-BwZ0MkaL.js} +1 -1
- package/dist/client/assets/js/{redis-BR2LPmFL.js → redis-5j1U_i85.js} +1 -1
- package/dist/client/assets/js/{redshift-B0sdAV16.js → redshift-CX1dFLA1.js} +1 -1
- package/dist/client/assets/js/{requirementDiagram-4Y6WPE33-EedCclad.js → requirementDiagram-4Y6WPE33-CKC7CQCX.js} +1 -1
- package/dist/client/assets/js/{restructuredtext-kQOBLN1M.js → restructuredtext-MV0-Naya.js} +1 -1
- package/dist/client/assets/js/{rough.esm-Dyx_2DON.js → rough.esm-CV1rL6PC.js} +1 -1
- package/dist/client/assets/js/{ru-CVQQmreT.js → ru-JsH6TKyg.js} +1 -1
- package/dist/client/assets/js/{ruby-CbdJXy6J.js → ruby-Bhyejf9X.js} +1 -1
- package/dist/client/assets/js/{rust-DZanYksk.js → rust-CR8d_FC1.js} +1 -1
- package/dist/client/assets/js/{sankeyDiagram-5OEKKPKP-DFC0nzsd.js → sankeyDiagram-5OEKKPKP-CKlqlvAe.js} +1 -1
- package/dist/client/assets/js/{sb-C5-WiqDZ.js → sb-hLW2EM2L.js} +1 -1
- package/dist/client/assets/js/{scala-Bk7i9nV-.js → scala-DVUhALEZ.js} +1 -1
- package/dist/client/assets/js/{scheme-CaZSWmJ2.js → scheme-BS6yNanr.js} +1 -1
- package/dist/client/assets/js/{scss-ByOYuc7K.js → scss-BfoRsElt.js} +1 -1
- package/dist/client/assets/js/{sequenceDiagram-3UESZ5HK-hWjPfqXt.js → sequenceDiagram-3UESZ5HK-CTimhD6H.js} +1 -1
- package/dist/client/assets/js/{session-browser-prefs-Br8OYA4_.js → session-browser-prefs-BT1woDux.js} +1 -1
- package/dist/client/assets/js/{sessions-iGK9S6zk.js → sessions-IkLKgnN6.js} +1 -1
- package/dist/client/assets/js/{settings-pbanANH0.js → settings-roYY6G3W.js} +1 -1
- package/dist/client/assets/js/{shell-Di0TEySc.js → shell-BO_Lyczz.js} +1 -1
- package/dist/client/assets/js/{skills-DC-UPcXj.js → skills-a5LPwmiT.js} +1 -1
- package/dist/client/assets/js/{solidity-BNTjAuuA.js → solidity-D3T2Ki4l.js} +1 -1
- package/dist/client/assets/js/{sophia-LY__8Yob.js → sophia-iJmIEvi8.js} +1 -1
- package/dist/client/assets/js/{sparql-CWnLfgGS.js → sparql-C2HCEExr.js} +1 -1
- package/dist/client/assets/js/{sql-B0ypQ9lR.js → sql-DM6_3GBc.js} +1 -1
- package/dist/client/assets/js/{src-BihFroE7.js → src-DD_TpJde.js} +1 -1
- package/dist/client/assets/js/{st-CqVFKTbZ.js → st-DSb39Fm5.js} +1 -1
- package/dist/client/assets/js/{stateDiagram-AJRCARHV-B7wEnYVe.js → stateDiagram-AJRCARHV-DwBGmBj6.js} +1 -1
- package/dist/client/assets/js/stateDiagram-v2-BHNVJYJU-5bNcwBne.js +1 -0
- package/dist/client/assets/js/{style-DDAg_jVj.js → style-B5xXhBlp.js} +1 -1
- package/dist/client/assets/js/{swift-B4ZZmDxc.js → swift-DrZYSZK3.js} +1 -1
- package/dist/client/assets/js/{systemverilog-zLt-O1mT.js → systemverilog-BAWNCaf6.js} +1 -1
- package/dist/client/assets/js/{tcl-DCSZmA-l.js → tcl-DY15ex6v.js} +1 -1
- package/dist/client/assets/js/{timeline-definition-PNZ67QCA-BN_LfleE.js → timeline-definition-PNZ67QCA-B8xuIu6g.js} +1 -1
- package/dist/client/assets/js/treeView-BLDUP644-DvZPUnGM.js +1 -0
- package/dist/client/assets/js/treemap-LRROVOQU-Bis1djYh.js +1 -0
- package/dist/client/assets/js/{tsMode-BjUcuHrq.js → tsMode-BE8JCSCE.js} +1 -1
- package/dist/client/assets/js/{ttsHelpers-BLunFYsq.js → ttsHelpers-BLNiQExI.js} +1 -1
- package/dist/client/assets/js/{twig-CuJlVpUG.js → twig-BpHF_18K.js} +1 -1
- package/dist/client/assets/js/{typescript-De40YVFt.js → typescript-FQ3z9hVG.js} +1 -1
- package/dist/client/assets/js/{typespec-8QcsIc3c.js → typespec-BKvcn6aE.js} +1 -1
- package/dist/client/assets/js/{useSttSettings-B1-KXN44.js → useSttSettings-DHX06G8A.js} +1 -1
- package/dist/client/assets/js/{vb-DEGTdhxf.js → vb-B74ucE43.js} +1 -1
- package/dist/client/assets/js/{vennDiagram-CIIHVFJN-hL8ax7wF.js → vennDiagram-CIIHVFJN-DtEu04QR.js} +1 -1
- package/dist/client/assets/js/wardley-L42UT6IY-CD4dIN63.js +1 -0
- package/dist/client/assets/js/{wardleyDiagram-YWT4CUSO-BIR-RA6Y.js → wardleyDiagram-YWT4CUSO-DdNKCPsp.js} +1 -1
- package/dist/client/assets/js/{wgsl-CmbiucmY.js → wgsl-DEf5Vdqv.js} +1 -1
- package/dist/client/assets/js/{workers-BgWBq4qY.js → workers-BbaiLVxx.js} +1 -1
- package/dist/client/assets/js/{workflow-socket-DZ9Ceffc.js → workflow-socket-DH402vxO.js} +1 -1
- package/dist/client/assets/js/{xml-SZLdwDmk.js → xml-zjE51I7v.js} +1 -1
- package/dist/client/assets/js/{xterm-D6CotCNH.js → xterm-Djy4rCx0.js} +1 -1
- package/dist/client/assets/js/{xychartDiagram-2RQKCTM6-DHa486uP.js → xychartDiagram-2RQKCTM6-CKqN7g7r.js} +1 -1
- package/dist/client/assets/js/{yaml-CgQpCgM5.js → yaml-DabeGoTc.js} +1 -1
- package/dist/client/assets/js/{zh-BDlMioZr.js → zh-CI4-L3JY.js} +1 -1
- package/dist/client/assets/js/{zh-TW-DTbLWR1A.js → zh-TW-wYlj-uOZ.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/index.js +3 -3
- package/dist/server/openapi.json +1 -1
- package/package.json +9 -1
- package/dist/client/assets/js/architecture-7EHR7CIX-Cl4Qi40R.js +0 -1
- package/dist/client/assets/js/classDiagram-4FO5ZUOK-DC0BcY8x.js +0 -1
- package/dist/client/assets/js/classDiagram-v2-Q7XG4LA2-BfDDH_fm.js +0 -1
- package/dist/client/assets/js/eventmodeling-FCH6USID-Bgzwnvkn.js +0 -1
- package/dist/client/assets/js/gitGraph-WXDBUCRP-CwFrpI3e.js +0 -1
- package/dist/client/assets/js/info-J43DQDTF-wMwkmIWM.js +0 -1
- package/dist/client/assets/js/packet-YPE3B663-DYmKXJOE.js +0 -1
- package/dist/client/assets/js/pie-LRSECV5Y-Dx0hbcjV.js +0 -1
- package/dist/client/assets/js/radar-GUYGQ44K-D-t-QJhi.js +0 -1
- package/dist/client/assets/js/stateDiagram-v2-BHNVJYJU-CoMhBVvo.js +0 -1
- package/dist/client/assets/js/treeView-BLDUP644-CMJGhbWk.js +0 -1
- package/dist/client/assets/js/treemap-LRROVOQU-_j4KoVDh.js +0 -1
- package/dist/client/assets/js/wardley-L42UT6IY-BeOvmJoM.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
var e={browser:{title:"Navigateur",settings:"Paramètres du navigateur",desktopOnly:"Le navigateur intégré est disponible uniquement dans Hermes Studio Desktop.",newTab:"Nouvel onglet",back:"Précédent",forward:"Suivant",reload:"Actualiser",stop:"Arrêter",addressPlaceholder:"Rechercher ou saisir une adresse",selectElement:"Sélectionner un élément",selectRegion:"Sélectionner une zone",annotationPlaceholder:"Décrivez ce que l’Agent doit examiner ou modifier…",selectionData:"Données de sélection du navigateur",annotationAdded:"Capture ajoutée à la zone de discussion",annotationCount:"{count} annotation(s)",annotationLabel:"Annotation {index}",clearAnnotations:"Effacer les annotations",finishAnnotation:"Terminé",agent:"Agent",agentControlling:"{agent} contrôle cet onglet",agentWaiting:"{agent} attend votre confirmation",takeOver:"Reprendre",tabCrashed:"Cet onglet a planté.",recoverTab:"Recharger",profiles:"Profils",profileName:"Nom du profil",addProfile:"Ajouter un profil",currentProfile:"Profil actif",switchProfile:"Changer de profil",editProfile:"Modifier le profil",profileDirectory:"Dossier du profil",downloadDirectory:"Dossier de téléchargement",profileRootDirectory:"Dossier racine du profil",chooseProfileRootDirectory:"Choisir un dossier vide",profileRootDirectoryHint:"Choisissez un dossier vide. Les données utiliseront {data} et les téléchargements {download}.",proxy:"Proxy",proxyMode:"Mode proxy",proxyDirect:"Connexion directe",proxySystem:"Proxy système",proxyCustom:"Proxy personnalisé",proxyServer:"Serveur proxy",proxyServerPlaceholder:"Par exemple : http://127.0.0.1:7890 ou socks5://127.0.0.1:1080",askBeforeDownload:"Demander où enregistrer",downloadConflictPolicy:"Noms de fichier en double",uniquifyDownloads:"Créer un nom unique",askOnConflict:"Demander en cas de conflit",downloads:"Téléchargements",downloadStateProgressing:"Téléchargement en cours",downloadStateCompleted:"Terminé",downloadStateCancelled:"Annulé",downloadStateInterrupted:"Interrompu",downloadStateBlocked:"Bloqué",permissions:"Autorisations",permissionsHint:"Les autorisations des pages distantes sont refusées par défaut et consignées ici.",blocked:"Bloqué",profileSwitchTitle:"Changer de profil ?",profileSwitchWarning:"{agents} opération(s) Agent, {downloads} téléchargement(s) et {annotations} annotation(s) peuvent être interrompus.",deleteProfileTitle:"Supprimer le profil ?",deleteProfileWarning:"Les données gérées seront placées dans la corbeille. Les dossiers personnalisés sont conservés.",clearCache:"Vider le cache",clearPermissionAudit:"Effacer le journal des autorisations",clearSiteData:"Effacer les données des sites",clearSiteDataWarning:"Efface les connexions, cookies et le stockage local du profil sélectionné.",dataCleared:"Données du navigateur effacées",loadFailed:"Impossible de démarrer le navigateur intégré"},kanban:{board:{defaultArchiveUnavailable:"Le tableau par défaut ne peut pas être archivé"},action:{archive:"Archiver la tâche",archiveConfirm:"Archiver cette tâche terminée ?"},message:{taskArchived:"Tâche archivée"}},login:{title:"Hermes Studio",description:"Entrez votre nom d'utilisateur et votre mot de passe pour continuer.",placeholder:"Jeton d'acces",submit:"Connexion",tokenRequired:"Veuillez entrer votre jeton d'acces",invalidToken:"Jeton invalide",connectionFailed:"Impossible de se connecter au serveur",passwordLogin:"Mot de passe",tokenLogin:"Jeton",usernamePlaceholder:"Nom d'utilisateur",passwordPlaceholder:"Mot de passe",defaultCredentialsHint:"Nom d utilisateur par defaut : admin. Mot de passe par defaut : 123456.",credentialsRequired:"Veuillez entrer le nom d'utilisateur et le mot de passe",invalidCredentials:"Nom d'utilisateur ou mot de passe incorrect",tooManyAttempts:"Trop de tentatives echouees, veuillez reessayer plus tard",lockResetHint:"Si c est votre serveur, supprimez le verrouillage de connexion avec :",defaultLoginResetHint:"Pour reinitialiser le mot de passe admin par defaut, executez :",desktopLockResetHint:"Too many failed login attempts. Open the system tray menu and choose Reset Login to reset the password.",sessionExpired:"La session a expire. Veuillez vous reconnecter.",accessDenied:"Vous n'avez pas l'autorisation d'acceder a cette ressource.",passwordMismatch:"Les mots de passe ne correspondent pas",passwordTooShort:"Le mot de passe doit contenir au moins 6 caracteres",setupSuccess:"Login par mot de passe configure avec succes",passwordChanged:"Mot de passe change avec succes",passwordRemoved:"Login par mot de passe supprime",setupPassword:"Configurer le login par mot de passe",changePassword:"Changer le mot de passe",changeUsername:"Changer le nom d'utilisateur",removePasswordLogin:"Supprimer",username:"Nom d'utilisateur",currentPassword:"Mot de passe actuel",newPassword:"Nouveau mot de passe",confirmPassword:"Confirmer le mot de passe",newUsername:"Nouveau nom d'utilisateur",usernameChanged:"Nom d'utilisateur change avec succes",usernameTooShort:"Le nom d'utilisateur doit contenir au moins 2 caracteres",setupDescription:"Gerez le nom d'utilisateur et le mot de passe utilises pour vous connecter.",removeConfirm:"Le login par mot de passe est requis pour les comptes utilisateur.",passwordLoginNotConfigured:"Login par mot de passe non configure",passwordLoginConfigured:"Compte actuel : {username}",defaultCredentialTitle:"Modifiez le compte et le mot de passe par defaut",defaultCredentialMessage:"Le compte connecte utilise encore le nom d utilisateur ou le mot de passe par defaut. Pour eviter tout acces non autorise, modifiez rapidement le nom d utilisateur et le mot de passe du compte actuel.",defaultCredentialAction:"Modifier maintenant",defaultCredentialLater:"Me le rappeler plus tard"},users:{title:"Gestion des comptes",description:"Creez des utilisateurs, attribuez des roles et controlez les profils accessibles aux administrateurs standard.",create:"Creer un utilisateur",edit:"Modifier l utilisateur",username:"Nom d utilisateur",role:"Role",statusLabel:"Statut",profiles:"Profils accessibles",profilesPlaceholder:"Selectionner les profils accessibles",allProfiles:"Tous les profils",noProfiles:"Aucun profil assigne",lastLogin:"Derniere connexion",newPasswordOptional:"Nouveau mot de passe (laisser vide pour conserver)",loadFailed:"Echec du chargement des utilisateurs",deleteConfirm:"Supprimer cet utilisateur ?",enable:"Activer",disable:"Desactiver",roles:{superAdmin:"Super admin",admin:"Admin"},status:{active:"Actif",disabled:"Desactive"}},common:{loading:"Chargement...",cancel:"Annuler",retry:"Réessayer",reset:"Réinitialiser",delete:"Supprimer",edit:"Modifier",save:"Enregistrer",saved:"Enregistre",update:"Mettre a jour",create:"Creer",saveFailed:"Echec de l'enregistrement",deleteFailed:"Echec de la suppression",ok:"OK",copied:"Copie",copy:"Copier",noData:"Aucune donnee",fetch:"Recuperer",add:"Ajouter",enable:"Activer",disable:"Desactiver",configured:"Configure",notConfigured:"Non configure",confirm:"Confirmer",expand:"Developper",collapse:"Reduire",stop:"Arrêter",start:"Démarrer",expired:"Expiré"},mcp:{title:"Serveurs MCP",loadFailed:"Echec du chargement des serveurs MCP",reloadAll:"Tout recharger",refresh:"Rafraichir",total:"Total",connected:"Connecte",disconnected:"Deconnecte",tools:"outils",tool:"Outils",searchPlaceholder:"Rechercher des serveurs...",addServer:"+ Ajouter un serveur",zeroTools:"0 outils",loading:"Chargement...",empty:"Aucun serveur MCP configure",reloaded:"{server} recharge",reloadedAll:"Tous les serveurs MCP recharges",reloadFailed:"Echec du rechargement",serverAdded:'Serveur "{name}" ajoute',addFailed:"Echec de l ajout du serveur",serverUpdated:'Serveur "{name}" mis a jour',updateFailed:"Echec de la mise a jour du serveur",saveFailed:"Echec de la sauvegarde",serverRemoved:'"{name}" supprime',enabled:"Activé : {name}",disabled:"Désactivé : {name}",connectedStatus:"Connecté",disconnectedStatus:"Déconnecté",disabledStatus:"Désactivé",toolList:"Liste des outils",count:" ",more:"de plus",removeFailed:"Echec de la suppression du serveur",testOk:"Test OK — {count} outils disponibles",testEmpty:"Le test n a retourne aucun outil",testFailed:"Echec du test",edit:"Modifier",test:"Tester",reload:"Recharger",remove:"Supprimer",confirmRemove:'Supprimer le serveur "{name}" ?',cancel:"Annuler",add:"Ajouter",save:"Enregistrer",addTitle:"Ajouter un serveur MCP",editTitle:"Modifier le serveur MCP",invalidJson:"JSON invalide",invalidYaml:"Format YAML invalide",invalidConfig:"Configuration invalide",invalidServerConfig:"Configuration du serveur invalide",missingCommandOrUrl:"Doit contenir command ou url",manageTools:"Gérer les outils",toolsVisibilityTitle:"Gestion de la visibilité des outils",fetchTools:"Récupérer la liste des outils",fetchToolsFailed:"Échec de la récupération de la liste des outils",toolsMode:"Mode :",toolsModeAll:"Tous",toolsModeInclude:"Inclure",toolsModeExclude:"Exclure",toolsListHeader:"Nom de l'outil",toolsEmpty:"Aucun outil disponible, veuillez d'abord récupérer la liste des outils",toolsSummaryAll:"{count} outils au total, tous activés",toolsSummaryInclude:"{total} outils au total, {count} sélectionnés",toolsSummaryExclude:"{total} outils au total, {count} exclus",toolsVisibilitySaved:"Visibilité des outils enregistrée",toolsSelectAll:"Tout sélectionner",toolsClearSelection:"Effacer la sélection",toolsExcludeAll:"Tout exclure",toolsClearExcluded:"Effacer les exclusions"},sidebar:{chat:"Discussion",backToChat:"Retour",search:"Rechercher",apiRelay:"API Relay",history:"Historique",jobs:"Taches planifiees",models:"Modeles",profiles:"Profils",plugins:"Plugins",mcp:"MCP",petdex:"Pets",skills:"Competences",memory:"Memoire",logs:"Journaux",usage:"Utilisation",performance:"Performance",journey:"Parcours",skillsUsage:"Utilisation des compétences",channels:"Canaux",terminal:"Terminal",browser:"Navigateur",singleChat:"Discussion",globalAgent:"Global Agent",files:"Fichiers",devices:"Appareils",groupChat:"Chat de groupe",groupConversation:"Conversation",groupConversationShort:"Conv.",groupAgent:"Agent",groupAgentShort:"Agent",groupSystem:"Systeme",groupSystemShort:"Sys",groupMonitoring:"Suivi",groupMonitoringShort:"Suivi",theme:"Thème",settings:"Parametres",connected:"Connecte",disconnected:"Deconnecte",updateTip:'Executez "hermes-web-ui update" dans le terminal pour mettre a jour',updateVersion:"Mettre a jour vers v{version}",reloadClientVersion:"Recharger pour v{version}",updating:"Mise a jour...",updateSuccess:"Mise a jour terminee. Veuillez actualiser la page sous peu. Si le service ne demarre pas apres un moment, demarrez-le manuellement.",updateFailed:"Echec de la mise a jour",logout:"Deconnexion",nodeVersionWarning:"Node.js v{version} detecte. Veuillez passer a la version 23 ou ulterieure.",changelog:"Journal des modifications",noChangelog:"Aucun journal disponible",versionManagement:"Gestion des versions",updateAvailableLabel:"(Nouvelle version)",dockerUpdateTitle:"Mise à jour Docker",dockerUpdateGuide:"Dans l'environnement Docker, veuillez tirer la dernière image et recréer le conteneur :",dockerUpdateNote:"Vos données seront conservées après la recréation du conteneur.",kanban:"Kanban",workflow:"Workflow",groupTools:"Outils",groupToolsShort:"Outils",codingAgents:"Agents de code",versionPreview:"Aperçu de version",groupPlatform:"Plateforme",gateways:"Passerelles",expand:"Déplier le menu",collapse:"Replier le menu"},runtimeVersions:{title:"Gestion des versions",runtimeTitle:"Hermes Runtime",currentHermesAgentVersion:"Version actuelle de Hermes Agent",activeRuntimeDirectory:"Chemin du Runtime actif",cliUpdateDescription:"Avec Hermes Runtime 0.19.1 et versions ultérieures, la commande suivante met uniquement à jour le Hermes Agent intégré. Elle ne met pas à jour l’application de bureau Hermes Studio ni la Web UI. Quittez complètement Hermes Studio avant de l’exécuter :",webUiTitle:"Web UI",platform:"Plateforme",currentWebUi:"Web UI actuel",activeVersion:"Version active",runtimeDirectory:"Répertoire de stockage Runtime",chooseRuntimeDirectory:"Choisir un répertoire",resetRuntimeDirectory:"Utiliser le dossier système",runtimeDirectoryHint:"Le Runtime actuel sera copié et vérifié avant les services locaux au prochain redémarrage. L’ancien stockage est conservé et les prochains téléchargements de Runtime seront enregistrés ici.",runtimeDirectorySaved:"Migration du Runtime planifiée. Redémarrez Hermes Studio pour l’exécuter.",runtimeMigrationPending:"Destination de migration en attente : {directory}",runtimeMigrationFailed:"Échec de la migration du stockage ; le stockage précédent reste actif",runtimeActivationFailed:"Le Runtime sélectionné n’a pas pu démarrer ; Hermes Studio utilise une autre version installée",active:"Active",installed:"Installée",download:"Télécharger",downloadGithub:"Télécharger depuis GitHub",downloadCf:"Télécharger depuis Cloudflare",github:"GitHub",cf:"Cloudflare",useVersion:"Utiliser au prochain redémarrage",deleteVersion:"Supprimer",deleteRuntimeConfirm:"Supprimer Hermes Runtime {version} ?",deleteWebUiConfirm:"Supprimer Web UI {version} ?",deleteRuntimeSuccess:"Runtime supprimé",deleteWebUiSuccess:"Web UI supprimé",refresh:"Actualiser",noVersions:"Aucune version disponible",remoteLoadFailed:"Impossible de charger les versions distantes",downloadTasks:"Tâches de téléchargement",downloadStarted:"Téléchargement démarré",activateSuccess:"Sélection de version enregistrée. Redémarrez Hermes Studio pour l’utiliser.",jobStatus:{queued:"En attente",running:"En cours",completed:"Terminé",failed:"Échec"},jobStageStatus:{queued:"En attente",resolve:"Résolution",download:"Téléchargement",verify:"Vérification",extract:"Extraction",install:"Installation",completed:"Terminé",failed:"Échec"},jobStage:{queued:"En attente",download:"Téléchargement",resolveRuntime:"Résolution du package Runtime",verifyRuntime:"Vérification de l’archive Runtime",extractRuntime:"Extraction de l’archive Runtime",installRuntime:"Installation du Runtime",resolveWebUi:"Résolution du package Web UI",verifyWebUi:"Vérification de l’archive Web UI",extractWebUi:"Extraction de l’archive Web UI",installWebUi:"Installation de Web UI",completed:"Terminé",failed:"Échec"}},mcuDevices:{title:"Little Box",subtitle:"View device link status",name:"Name",nameOptional:"Name is optional",deviceCode:"Device code",deviceCodePlaceholder:"Enter device code",deviceCodeRequired:"Enter device code",channel:"Channel",official:"Official",unofficial:"Unofficial",createdAt:"Added at",lanStatus:"LAN",remoteStatus:"Distant",connected:"Connecté",disconnected:"Déconnecté",remoteConnect:"Connexion distante",remoteConnected:"Distant connecté",remoteConnectFailed:"Échec de la connexion distante",remoteDisconnect:"Déconnecter",remoteDisconnected:"Distant déconnecté",remoteDisconnectFailed:"Échec de la déconnexion distante",actions:"Actions",add:"Add",addTitle:"Add MCU device",added:"MCU device added",addFailed:"Failed to add MCU device",purchase:"Buy",edit:"Edit",editNameTitle:"Edit name",nameUpdated:"Name updated",nameUpdateFailed:"Failed to update name",delete:"Delete",deleteTitle:"Delete MCU device",deleteConfirm:'Delete "{name}"?',deleted:"MCU device deleted",deleteFailed:"Failed to delete MCU device",loadFailed:"Failed to load MCU devices",close:"Close"},devices:{title:"Appareils",count:"{count} appareils",lastScanned:"Dernier scan : {time}",refresh:"Actualiser",empty:"Aucun appareil trouvé",computer:"Ordinateur",endpointLabel:"Point de terminaison",statusLabel:"Statut",online:"Online",offline:"Offline",address:"Adresse",os:"Système",agentVersion:"Agent",webUiVersion:"Web UI",responseMs:"Latence",lastSeen:"Vu pour la dernière fois",open:"Ouvrir",never:"Jamais",unknown:"Inconnu",loadFailed:"Impossible de charger les appareils",scanFailed:"Impossible de scanner les appareils",updateFailed:"Impossible de mettre à jour l'appareil",duplicateRequest:"Une demande d'appairage est déjà en attente",manualPairing:"Pair by URL",copyPairingLink:"Copy pairing link",manualUrlPlaceholder:"https://device.example.com",manualUrlRequired:"Enter a device URL",manualRequestSent:"Pairing request sent",manualRequestFailed:"Failed to request remote pairing",pairingLinkCopied:"Pairing link copied",pairingLinkCopyFailed:"Failed to copy pairing link",pairingCodeTitle:"Enter pairing code",pairingCodePlaceholder:"Pairing code",pairingCodeRequired:"Enter the pairing code",submitPairingRequest:"Submit request",processed:"Traité",unprocessed:"Non traité",deleteHistory:"Supprimer l'entrée",deleteHistoryConfirm:"Supprimer cette demande et révoquer l'accès de connexion de cet appareil ?",requests:"Demandes",requestsWithCount:"Demandes ({count})",noRequests:"Aucune demande",requestPairing:"Demander l'appairage",paired:"Appairé",approve:"Approuver",reject:"Rejeter",block:"Bloquer",unblock:"Débloquer",inboundStatus:{none:"Demande autorisée",pending:"En attente",approved:"Approuvé",rejected:"Rejeté",blocked:"Bloqué"},outboundStatus:{none:"Non appairé",pending:"Demandé",approved:"Appairé",rejected:"Rejeté",blocked:"Bloqué"},endpoint:{web:"Web",desktop:"Bureau",custom:"Personnalisé"}},performance:{title:"Performance",subtitle:"Surveiller les ressources système, Bridge Broker, Workers et sessions actives",refresh:"Actualiser",autoRefreshOn:"Actualisation auto",autoRefreshOff:"Actualisation manuelle",loadFailed:"Échec du chargement des métriques de performance",systemCpu:"CPU système",systemMemory:"Mémoire système",activeSessions:"Sessions actives",runningSessions:"En cours {count}",workers:"Workers",totalWorkerMemory:"Mémoire totale Worker",processes:"Processus",uptime:"Disponibilité",running:"En cours",stopped:"Arrêté",workerMemory:"Mémoire Worker",lastUpdated:"Mis à jour",profile:"Profile",memory:"Mémoire",sessions:"Sessions",runningActiveSessions:"En cours / Actives",lastUsed:"Dernière utilisation",status:"Statut",noWorkers:"Aucun Worker",sessionsByProfile:"Sessions par Profile",noActiveSessions:"Aucune session active"},journey:{title:"Parcours d apprentissage",play:"Lire le parcours",pause:"Mettre en pause",refresh:"Actualiser",categorySelection:"Sélection des catégories",nodeKinds:"Types de nœuds",description:"Description",canvasInstructions:"Utilisez les flèches pour prévisualiser les nœuds, Entrée pour ouvrir les détails et Échap pour effacer la sélection.",loadFailed:"Impossible de charger le parcours",nodes:"Noeuds",edges:"Connexions",skills:"Competences",memories:"Memoires",clusters:"Groupes",profile:"Profile",source:"Source",learnedSkills:"Competences apprises",memorySkillEdges:"Liens de memoire",allKinds:"Tous les types",allCategories:"Toutes les categories",searchPlaceholder:"Rechercher des noeuds",noClusters:"Aucun groupe",noNodes:"Aucun noeud de parcours",noCategory:"Sans categorie",category:"Categorie",useCount:"Utilisations",createdBy:"Cree par",timestamp:"Heure",pinned:"Epingle"},drawer:{terminal:"Terminal",files:"Espace de travail"},subagent:{title:"Tâche en arrière-plan",noGoal:"Tâche en arrière-plan sans titre",open:"Ouvrir la sortie en direct de la tâche",close:"Fermer la sortie de la tâche",waiting:"En attente de la sortie en direct…",tool:"Outil",tools:"{count} outils",tokens:"{input} entrée · {output} sortie",started:"Démarrée",running:"En cours",completed:"Terminée",failed:"Échec",cancelled:"Annulée",interrupted:"Interrompue"},realtimeVoice:{title:"Voix en temps réel",mode:"Mode vocal",open:"Ouvrir la voix en temps réel",back:"Retour au chat",connected:"Liaison vocale prête",turnMode:"Aperçu temps réel · mode tour par tour",browserStt:"Navigateur",browserTts:"Navigateur",untitledSession:"Conversation sans titre",sessionMissing:"La conversation est indisponible.",backendStreamRequired:"La voix temps réel sur mobile et ordinateur nécessite un service de transcription côté serveur configuré.",networkUnavailableNoFallback:"La reconnaissance vocale du navigateur est hors ligne et aucun STT de secours utilisable n est configuré.",liveTranscript:"Transcription en direct",transcriptPlaceholder:"Touchez le noyau vocal et commencez à parler",recentTurns:"Échanges récents",you:"Vous",mute:"Couper le son",unmute:"Rétablir le son",finishTurn:"Terminer le tour",speak:"Commencer à parler",end:"Terminer",status:{idle:"Prêt",paused:"Microphone coupé",listening:"Écoute",processing:"Transcription",thinking:"{agent} réfléchit",speaking:"{agent} parle",error:"Liaison vocale interrompue"},hint:{idle:"Touchez le centre pour commencer un tour vocal",paused:"Réactivez le microphone quand vous êtes prêt",listening:"Faites une pause pour envoyer ou touchez pour terminer",listeningManual:"Enregistrement en cours. Touchez à nouveau le centre pour arrêter et transcrire",processing:"Conversion de votre voix en texte",thinking:"Votre message a été envoyé à la conversation",speaking:"Vous pouvez interrompre à tout moment",error:"Touchez le centre pour réessayer"}},chat:{contextRemaining:"restant",contextClickToEdit:"Cliquez pour modifier la longueur du contexte",contextEditTitle:"Modifier la longueur du contexte",contextEditDesc:"Définir la limite de longueur du contexte pour le modèle actuel (en tokens)",contextEditPlaceholder:"Entrez la longueur du contexte",contextEditHint:"Valeurs courantes : 256k (Hermes par défaut), 128k (GPT-4), 32k (GPT-3.5)",contextEditSave:"Enregistrer",contextEditCancel:"Annuler",contextEditInvalid:"Veuillez entrer une longueur de contexte valide",contextEditSuccess:"Longueur du contexte mise à jour",contextEditFailed:"Échec de la mise à jour",emptyState:"Demarrer une conversation avec Hermes Agent",emptyStateAgent:"Demarrer une conversation avec {agent}",viewOlderInHistory:"Voir les messages precedents dans l’historique",scrollToBottom:"Aller en bas",outlineTitle:"Plan de la conversation",outlineEmpty:"Aucun contenu de conversation",outlineUserQuestion:"Question utilisateur",inputPlaceholder:"Tapez un message... (Entree pour envoyer, Shift+Entree pour un saut de ligne)",inputHeightResizeHint:"Faites glisser pour changer la hauteur du champ de chat, double-cliquez pour reinitialiser.",slashCommandArgs:{message:"<message>",title:"<titre>",text:"<texte>"},slashCommands:{usage:"Calculer l’utilisation de la session actuelle",status:"Afficher l’état de la session et la file",yolo:"Basculer le mode YOLO de la session et ignorer les approbations de commandes dangereuses",abort:"Arrêter l’exécution Bridge active",queue:"Mettre un message en file après l’exécution active",learn:"Apprendre une compétence réutilisable depuis les sources décrites",plan:"Rédiger un plan d’implémentation Markdown",goal:"Set a standing goal that continues across turns",goalStatus:"Show the active goal status",goalPause:"Pause the active goal loop",goalResume:"Resume the paused goal loop",goalDone:"Complete and clear the active goal",goalClear:"Clear the active goal",subgoal:"Add a criterion to the active goal",clear:"Effacer l’affichage actuel",clearHistory:"Supprimer l’historique des messages enregistrés de cette session",title:"Renommer cette session",compress:"Lancer la compression du contexte au repos",steer:"Envoyer un guidage à l’exécution Bridge active",destroy:"Libérer l’agent Bridge de cette session",reloadMcp:"Recharger les serveurs MCP",reloadSkills:"Recharger les commandes de skills",bundles:"Parcourir les bundles de compétences",bundlesCreate:"Créer un bundle de compétences"},bundlePicker:{title:"Bundles de compétences",create:"Créer un bundle",searchPlaceholder:"Rechercher des bundles...",skillCount:"{count} compétences",skillsLabel:"Compétences",noSkills:"Aucune compétence configurée",deleteBundle:"Supprimer {name}",deleteTitle:"Supprimer le bundle",deleteConfirm:"Supprimer « {name} » de ce profil ? Cette action est irréversible.",deleteFailed:"Échec de la suppression du bundle",deleted:"Bundle supprimé",noBundles:"Aucun bundle. Créez-en un pour combiner plusieurs compétences.",noMatch:"Aucun bundle correspondant"},bundleCreator:{title:"Créer un bundle de compétences",name:"Nom",namePlaceholder:"ex. PR Review Team",nameHint:"Utilisez des lettres anglaises, chiffres, espaces, tirets ou underscores.",description:"Description",descriptionPlaceholder:"À quoi ce bundle doit-il servir ?",skills:"Compétences",skillsPlaceholder:"Sélectionnez une ou plusieurs compétences",nameRequired:"Saisissez un nom de bundle",nameInvalid:"Utilisez un nom anglais contenant au moins une lettre",skillsRequired:"Sélectionnez au moins une compétence",skillsLoadFailed:"Échec du chargement des compétences",createFailed:"Échec de la création du bundle",created:"Bundle créé"},attachFiles:"Joindre des fichiers",reasoningEffort:{tooltip:"Effort de raisonnement",defaultLabel:"Par défaut",options:{default:"Par défaut (config.yaml)",none:"Aucun",minimal:"Minimal",low:"Faible",medium:"Moyen",high:"Élevé",max:"Max",xhigh:"Très élevé",ultra:"Ultra"}},showToolCalls:"Afficher les appels d’outils",hideToolCalls:"Masquer les appels d’outils",messageQueue:"File de messages",removeQueuedMessage:"Retirer le message de la file",stop:"Arreter",send:"Envoyer",contextUsed:"Contexte utilise :",sessions:"Sessions",webUiSessions:"Sessions",allProfiles:"Tous les profils",profileMissingModelsTip:'Le profil "{profile}" n’a aucun fournisseur ni modèle disponible pour cette session',sessionScopeHint:"Le chat affiche uniquement les sessions Web UI/API Server. Les sessions CLI, Telegram, Discord, Cron et autres canaux sont en lecture seule dans Historique.",openHistory:"Ouvrir l’historique",hermesHistory:"Historique Hermes",historyScopeHint:"Sessions d’historique Hermes du profil actuel en lecture seule, regroupées par source.",noSessions:"Aucune session",recent:"Récentes",recentCount:"Nombre de sessions récentes",loadMoreSessions:"Charger plus de sessions",newChat:"Nouvelle discussion",category:"Catégorie",uncategorized:"Sans catégorie",categoryPlaceholder:"Sélectionner ou créer une catégorie",categoryCreateHint:"Saisissez un nom puis appuyez sur Entrée.",categoryCreated:"Catégorie « {name} » créée",categoryCreateFailed:"Échec de la création de la catégorie",categoryLoadFailed:"Échec du chargement des catégories",moveToCategory:"Déplacer vers une catégorie",categoryUpdated:"Catégorie mise à jour",categoryUpdateFailed:"Échec de la mise à jour de la catégorie",renameCategory:"Renommer la catégorie",deleteCategory:"Supprimer la catégorie",enterCategoryName:"Saisissez le nom de la catégorie",confirmDeleteCategory:"Supprimer « {name} » ? Ses sessions passeront dans Sans catégorie.",categoryRenamed:"Catégorie renommée",categoryRenameFailed:"Échec du renommage de la catégorie",categoryDeleted:"Catégorie supprimée",categoryDeleteFailed:"Échec de la suppression de la catégorie",agent:"Agent",approvalKicker:"Permission d’outil",toolResultUnavailable:"Exécution interrompue ; aucun résultat reçu",approvalCommand:"Commande à exécuter",approvalTitle:"Vérifier l’appel d’outil avant exécution",approvalAgree:"Accepter",approvalAllowOnce:"Autoriser une fois",approvalAllowSession:"Autoriser la session",approvalAlways:"Toujours",approvalDeny:"Refuser",clarifyKicker:"L'agent a besoin d'éclaircissements",clarifyTitle:"L'agent a une question pour vous",clarifyPlaceholder:"Tapez votre réponse...",clarifySubmit:"Répondre",clarifyDismiss:"Ignorer",deleteSession:"Supprimer cette session ?",toggleBatchMode:"Sélection par lot",selectAll:"Tout sélectionner",confirmBatchDelete:"Supprimer {count} sessions sélectionnées?",batchDeleteSuccess:"{count} sessions supprimées",batchDeletePartial:"{failed} sessions ont échoué",batchDeleteFailed:"Échec de la suppression par lot",importToWebUi:"Importer dans Web UI",importSessionSuccess:"Session importée dans Web UI",importSessionAlreadyExists:"La session existe déjà dans Web UI",importSessionFailed:"Échec de l’import de la session",sessionDeleted:"Session supprimee",rename:"Renommer",archiveSession:"Archiver",unarchiveSession:"Désarchiver",pin:"Épingler",unpin:"Désépingler",pinned:"Épinglés",chatMode:"Mode chat",liveMode:"Direct",liveSessions:"Sessions en direct",recentBadge:"Récent",linkedSessions:"{count} sessions liées",noVisibleMessages:"Aucun message visible par l’humain.",monitorRoleUser:"Utilisateur",monitorRoleAssistant:"Assistant",copySessionLink:"Copier le lien de session",openSessionInNewTab:"Ouvrir dans un nouvel onglet",openSessionInNewWindow:"Ouvrir dans une nouvelle fenêtre",sessionLinkCopied:"Session link copied",copySessionId:"Copier l'ID de session",export:"Exporter",editConfig:"Modifier la configuration",exportFull:"Export complet (JSON)",exportCompressed:"Export compressé (TXT)",exportCompressing:"Compression du contexte, veuillez patienter...",exportSuccess:"Session exportée",exportFailed:"Échec de l'export",renamed:"Renomme",renameFailed:"Echec du renommage",sessionArchived:"Session archivée",archiveSessionFailed:"Échec de l'archivage de la session",sessionUnarchived:"Session désarchivée",unarchiveSessionFailed:"Échec du désarchivage de la session",renameSession:"Renommer la session",sessionNotFound:"Session non trouvee",enterNewTitle:"Entrez un nouveau titre",other:"Autre",runFailed:"Echec de l'execution",error:"Erreur",tool:"Outil",arguments:"Arguments",result:"Resultat",workspaceChanges:"Modifications du workspace",changedFiles:"{files} fichiers modifies",changesThisTurn:"Modifications de ce tour",diffUnavailable:"Diff indisponible",binaryFileDiffUnavailable:"Diff indisponible pour les fichiers binaires",truncated:"... (tronque)",unchangedLines:"{count} lignes inchangées",executionDuration:"Temps d’exécution",thinkingLabel:"Raisonnement",thinkingInProgress:"En réflexion",thinkingShow:"Afficher le raisonnement",thinkingHide:"Masquer le raisonnement",thinkingDuration:"Observé {duration}",thinkingChars:"{count} caractères",copyBubble:"Copier le message",copiedBubble:"Message copié",copyFailed:"Échec de la copie",referenceMessage:"Citer le message",cancelReference:"Annuler la citation",playSpeech:"Lire à voix haute",pauseSpeech:"Pause",resumeSpeech:"Reprendre",stopSpeech:"Arrêter",speechNotSupported:"Reproduction vocale non prise en charge dans ce navigateur",searchEnterHint:"Entrée pour ouvrir · Échap pour fermer",searchHint:"Cmd/Ctrl+K",searchScope:"Portée de recherche : base locale des sessions Web UI uniquement ; les sessions d’historique Hermes en lecture seule ne sont pas incluses.",searchFailed:"Échec de la recherche de sessions",searchNoSnippet:"Aucun extrait disponible",searchNoResults:"Aucune session correspondante",searchRecent:"Session récente",searchEmpty:"Sessions récentes",searchPlaceholder:"Rechercher des sessions...",searchSubtitle:"Rechercher par titre ou contenu des messages",searchTitle:"Rechercher des sessions",stopGateway:"Arrêter le gateway",start:"Démarrer",workspaceSetFailed:"Échec de la définition du workspace",workspaceSet:"Workspace défini",workspacePlaceholder:"Saisissez le chemin du projet, ex. /home/user/project",folderPickerEmpty:"(Vide)",folderPickerNoFolders:"Aucun dossier de workspace",folderPickerSelected:"Sélectionné :",workspaceDefault:"Par défaut",workspaceDefaultTooltip:"Cet espace de travail est défini par défaut et sera renseigné automatiquement pour les nouveaux chats",workspacePin:"Définir comme espace de travail par défaut",workspaceUnpin:"Retirer l’espace de travail par défaut",workspaceRecent:"Récent",defaultWorkspace:"Espace de travail par défaut",more:"Plus",workspace:"Espace de travail",setWorkspaceTitle:"Définir le workspace de session",setWorkspace:"Définir le workspace",modelSetFailed:"Échec de la définition du modèle",modelSet:"Modèle défini",modelSwitching:"Changement de modèle...",setModelTitle:"Définir le modèle de session",standardModels:"Modèles standards",moaPresets:"Combinaisons MoA",noMoaPresets:"Aucune combinaison MoA disponible",modelType:"Type de modèle",setModel:"Définir le modèle",newCliChat:"Nouveau CLI",cliEmptyState:"Démarrer un chat CLI",autoPlaySpeech:"Lire la voix automatiquement",voiceInput:{startCapture:"Demarrer la saisie vocale",stopCaptureAndInsert:"Arreter la saisie vocale et inserer la transcription",cancelCapture:"Annuler la saisie vocale",statusLabel:"Statut : {status}",transcriptLabel:"Transcription : {text}",errorLabel:"Erreur : {error}",recentEvents:"Evenements recents",status:{idle:"Inactif",capturing:"Ecoute",transcribing:"Transcription",sending:"Insertion dans la saisie",error:"Erreur"},browserSpeechUnsupported:"La reconnaissance vocale du navigateur n est pas prise en charge par ce navigateur.",browserSpeechFailed:"La reconnaissance vocale du navigateur a echoue.",browserSpeechFailedWithReason:"La reconnaissance vocale du navigateur a echoue : {error}.",microphoneUnsupported:"La capture micro n est pas prise en charge par ce navigateur.",microphoneRecordingFailed:"L enregistrement micro a echoue."}},jobs:{title:"Taches planifiees",createJob:"Creer une tache",editJob:"Modifier la tache",noJobs:"Aucune tache planifiee. Creez-en une pour commencer.",sortBy:"Trier",sortByName:"Par nom",sortByTime:"Par date",sortByNameHint:"Trier par nom",sortByTimeHint:"Trier par date",sortAsc:"Croissant",sortDesc:"Décroissant",name:"Nom",namePlaceholder:"Nom de la tache",schedule:"Planification (expression Cron)",schedulePlaceholder:"ex. 0 9 * * *",quickPresets:"Presets rapides",selectPreset:"Selectionner un preset...",presetEveryMinute:"Chaque minute",presetEvery5Min:"Toutes les 5 minutes",presetEveryHour:"Chaque heure",presetEveryDay:"Tous les jours a 00:00",presetEveryDay9:"Tous les jours a 09:00",presetEveryMonday:"Chaque lundi a 09:00",presetEveryMonth:"Le 1er de chaque mois a 09:00",prompt:"Invite",promptPlaceholder:"L'invite a executer",skills:"Skills",skillsPlaceholder:"Selectionner les skills...",provider:"Provider",model:"Model",defaultProvider:"Default provider",defaultModel:"Default model",deliverTarget:"Cible de livraison",origin:"Origine",local:"Local",repeatCount:"Nombre de repetitions (facultatif)",modelPlaceholder:"Modele par defaut",repeatPlaceholder:"Laisser vide pour infini",jobCreated:"Tache creee",jobUpdated:"Tache mise a jour",nameRequired:"Le nom est requis",scheduleRequired:"La planification est requise",promptRequired:"L'invite est requise",loadFailed:"Echec du chargement de la tache",jobPaused:"Tache en pause",jobResumed:"Tache reprise",jobTriggered:"Job declenche",modelUpdated:"Modele mis a jour",jobDeleted:"Tache supprimee",status:{running:"En cours",paused:"En pause",disabled:"Desactivee",scheduled:"Planifiee"},info:{model:"Modele",provider:"Provider",schedule:"Planification",lastRun:"Derniere execution",nextRun:"Prochaine execution",deliver:"Livraison",repeat:"Repetition"},action:{pause:"Pause",pauseJob:"Mettre en pause",resume:"Reprendre",resumeJob:"Reprendre la tache",runNow:"Executer maintenant",triggerImmediately:"Déclencher immédiatement"},runHistory:{title:"Historique",runs:"exécutions",noRuns:"Aucun historique trouvé."}},skills:{title:"Competences",targetFilter:"Runtime",targets:{hermes:"Hermes",claude:"Claude",codex:"Codex"},searchPlaceholder:"Rechercher des competences...",noMatch:"Aucune competence ne correspond a votre recherche",noSkills:"Aucune competence trouvee",backTo:"Retour a",attachedFiles:"Fichiers joints",loadFailed:"Echec du chargement de la competence",fileLoadFailed:"Echec du chargement du fichier",modified:"Modifié par l'utilisateur",archived:"Archivé",pinned:"Épinglé",pin:"Épingler la compétence",unpin:"Désépingler la compétence",pinFailed:"Impossible de changer le statut d'épinglage",edit:"Modifier",saving:"Enregistrement...",editorLabel:"Éditeur de skill",saveSuccess:"Compétence enregistrée",saveFailed:"Échec de l’enregistrement de la compétence",toggleFailed:"Echec de l'activation/desactivation de la competence",source:{builtin:"Intégré",hub:"Hub",local:"Local",external:"Externe"},delete:"Supprimer",deleteConfirm:'Supprimer la compétence "{name}" ? Action irréversible.',deleteSuccess:"Compétence supprimée",deleteFailed:"Échec de la suppression",import:"Importer",importTitle:"Importer une compétence",importModeZip:"Zip",importModeFolder:"Dossier",importHintZip:"Téléversez une archive .zip contenant un dossier avec SKILL.md",importHintFolder:"Sélectionnez un dossier local (doit contenir SKILL.md)",importTargetCategory:"Catégorie cible (optionnel)",importTargetCategoryPlaceholder:"Laisser vide pour misc",importSelectFile:"Choisir un fichier .zip",importSelectFolder:"Choisir un dossier",importInvalidFile:"Seules les archives .zip sont prises en charge",importFileCount:"fichiers",importNoSelection:"Veuillez d'abord choisir un fichier ou dossier",importSuccess:"Compétence importée",importFailed:"Échec de l'import",path:{local:"Local",external:"Externe"},externalDirs:{manage:"Dossiers externes",title:"Gérer les dossiers externes",hint:"Gère config.skills.external_dirs. Prend en charge ~ et $VAR ; les chemins absents sont grisés.",add:"Ajouter un dossier",placeholder:"/path/to/skills ou ~/my-skills",empty:"Aucun dossier externe",missing:"Chemin introuvable",notDir:"Pas un dossier",saveSuccess:"Dossiers externes enregistrés",saveFailed:"Échec de l'enregistrement",loadFailed:"Échec du chargement des dossiers externes",removeRow:"Retirer"},pathCopied:"Chemin copié",pathCopyFailed:"Échec de la copie du chemin",reloadHint:"Sessions actives : exécutez /reload-skills ; les nouvelles le chargent automatiquement.",writeApprovalButton:"En attente {count}",writeApprovalTitle:"Ecritures en attente de validation",writeApprovalDescription:"Approuvez ou refusez les ecritures de memoire et de skills preparees par Hermes Agent.",writeApprovalRefresh:"Actualiser",writeApprovalEmpty:"Aucune ecriture en attente.",writeApprovalUnsupported:"Cette version de Hermes Agent ne prend pas en charge la validation des ecritures. Mettez Hermes Agent a jour pour utiliser cette fonction.",writeApprovalMemory:"Memoire",writeApprovalSkills:"Skills",writeApprovalViewDiff:"Verifier",writeApprovalHideDiff:"Masquer",writeApprovalNoDiff:"Aucune difference disponible.",writeApprovalLoadFailed:"Impossible de charger les ecritures en attente",writeApprovalDiffFailed:"Impossible de charger les details de l ecriture",writeApprovalActionFailed:"Impossible de traiter l ecriture en attente",writeApprovalApproved:"Ecriture approuvee",writeApprovalRejected:"Ecriture refusee",writeApprovalApprove:"Approuver",writeApprovalReject:"Refuser",writeApprovalPendingMemoryWrite:"Ecriture de memoire en attente",writeApprovalCurrentFile:"Fichier actuel {file}",writeApprovalProposedFile:"Fichier propose {file}",writeApprovalDiffSection:"Difference",writeApprovalPatchOldStringMissing:"Le old_string du patch est introuvable dans le fichier actuel {file}; l approbation ne modifiera pas le fichier.",writeApprovalRequestedOldString:"old_string demande",writeApprovalCurrentReadFailed:"Le fichier actuel {file} n a pas pu etre lu comme texte UTF-8.",writeApprovalDeleteSkill:"Cette validation supprime le skill {skill}.",writeApprovalRemoveFile:"Cette validation supprime {file} du skill {skill}."},plugins:{title:"Plugins",refresh:"Actualiser",notice:"Inventaire des manifests de plugins Hermes détectables. Les métadonnées de découverte sont lues sans charger le code des plugins. Les plugins utilisateur standalone peuvent être activés ou désactivés ici; les changements prennent effet dans les nouvelles sessions Hermes.",loadFailed:"Échec du chargement des plugins",updateFailed:"Échec de la mise à jour du plugin",enableSuccess:"{name} activé",disableSuccess:"{name} désactivé",commandCopied:"Commande copiée",searchPlaceholder:"Rechercher key, nom, description, chemin...",source:"Source",kind:"Type",statusTitle:"Statut",configStatus:"config : {status}",notAvailable:"n/a",copyCommand:"Copier la commande",managedElsewhere:"géré ailleurs",noMatch:"Aucun plugin ne correspond aux filtres actuels",enabled:"activé",disabled:"désactivé",summary:{total:"Total",active:"Activé / auto",inactive:"Inactif",disabled:"Désactivé",providerManaged:"Géré par provider"},status:{enabled:"Activé","auto-active":"Auto-actif",inactive:"Inactif",disabled:"Désactivé","provider-managed":"Géré par provider"},statusLabel:{enabled:"Activé par configuration","auto-active":"Auto-actif",inactive:"Inactif",disabled:"Désactivé","provider-managed":"Géré par provider"},configStatuses:{enabled:"activé",disabled:"désactivé","not-enabled":"non activé",auto:"auto","provider-managed":"géré par provider"},table:{plugin:"Plugin",status:"Statut",source:"Source",kind:"Type",capabilities:"Capacités",path:"Chemin / entrypoint",manage:"Gérer"},capabilities:{tools:"{count} outils",hooks:"{count} hooks",env:"{count} env"},metadata:{agentRoot:"Racine de l’agent",python:"Python",scanCwd:"Analyser cwd",projectPlugins:"Plugins du projet"}},petdex:{title:"Petdex Pets",subtitle:"Browse the public petdex catalog used by Hermes desktop pets.",refresh:"Refresh",adopt:"Adopt",active:"Active",adopted:"Adopted {name}",adoptFailed:"Failed to adopt pet",loadFailed:"Failed to load petdex catalog",searchPlaceholder:"Search by name, slug, author, or kind",kindFilter:"Kind",spritesheet:"Spritesheet",submittedBy:"By {name}",empty:"No pets match the current filters.",showMore:"Show {count} more",summary:{total:"Catalog total",visible:"Matching",kinds:"Kinds",generatedAt:"Generated at"}},memory:{title:"Memoire",refresh:"Actualiser",loadFailed:"Echec du chargement de la memoire",myNotes:"Mes notes",noNotes:"Aucune note pour l'instant.",notesPlaceholder:"Ecrivez vos notes...",userProfile:"Profil utilisateur",noProfile:"Aucun profil pour l'instant.",profilePlaceholder:"Ecrivez votre profil...",soul:"Ame",noSoul:"Aucune configuration d'ame pour l'instant.",soulPlaceholder:"Ecrivez la configuration de l'ame..."},models:{title:"Modeles",addProvider:"Ajouter un fournisseur",noProviderPromptTitle:"Aucun fournisseur de modeles configure",noProviderPromptMessage:'Le profil actuel "{profile}" ne contient aucun fournisseur de modeles. Ouvrir les parametres des modeles maintenant ?',noProviderPromptLater:"Pas maintenant",noProviderPromptAction:"Ouvrir les parametres",refreshModelCache:"Actualiser le cache des modeles",refreshModelCacheLoading:"Actualisation du cache des modeles...",refreshModelCacheSuccess:"Cache des modeles actualise",refreshModelCacheFailed:"Impossible d actualiser le cache des modeles",refreshModels:"Actualiser les modèles",restoreModels:"Restaurer la liste précédente",refreshModelsConfirmTitle:"Confirmer les modifications de la liste des modèles",refreshModelsConfirmContent:"Cette actualisation supprimera {removed} modèle(s) et en ajoutera {added}. Supprimés : {removedList}",refreshModelsConfirmAction:"Remplacer la liste des modèles",refreshModelsSuccess:"Liste des modèles actualisée ({count} modèles, {unavailable} indisponibles)",refreshModelsFailed:"Échec de l’actualisation des modèles du fournisseur",restoreModelsSuccess:"Liste précédente restaurée ({count} modèles)",restoreModelsFailed:"Échec de la restauration de la liste précédente",providerType:"Type de fournisseur",preset:"Préréglage",custom:"Personnalise",selectProvider:"Selectionner un fournisseur",chooseProvider:"Choisir un fournisseur...",name:"Nom",autoGeneratedName:"Genere automatiquement a partir de l'URL de base",baseUrl:"URL de base",region:"Région",regionIntl:"International",regionCn:"Chine continentale",baseUrlPlaceholder:"ex. https://api.example.com/v1",apiKey:"Cle API",apiKeyPlaceholder:"sk-...",defaultModel:"Modele par defaut",selectOrInput:"Sélectionner ou saisir un modèle...",selectModel:"Selectionner un modele...",providerAdded:"Fournisseur ajoute",providerDeleted:"Fournisseur supprime",providerCredentialsCleared:"Identifiants du fournisseur effaces",clearProviderCredentials:"Effacer les identifiants",clearCredentialsConfirm:"Effacer les identifiants enregistres pour « {name} » ? Ce fournisseur integre restera dans la liste et pourra etre reutilise apres configuration des identifiants.",disableProvider:"Desactiver le fournisseur",disableProviderConfirm:"Desactiver le fournisseur integre « {name} » ? Il restera integre et pourra etre reactive plus tard.",providerDisabled:"Fournisseur desactive",defaultProviderUpdated:"Fournisseur par defaut mis a jour",defaultProviderUpdateFailed:"Echec de la mise a jour du fournisseur par defaut",defaultModelUpdated:"Modele par defaut mis a jour",defaultModelUpdateFailed:"Echec de la mise a jour du modele par defaut",deleteProvider:"Supprimer le fournisseur",deleteConfirm:'Etes-vous sur de vouloir supprimer "{name}" ?',codexLoginTitle:"Connexion OpenAI Codex",codexWaiting:"Entrez ce code sur la page d'autorisation pour vous connecter :",codexCopyCode:"Code copié",codexOpenLink:"Ouvrir la page d'autorisation",codexApproved:"Connexion réussie",codexExpired:"L'autorisation a expiré. Veuillez réessayer.",nousLoginTitle:"Connexion Nous Portal",nousWaiting:"Entrez ce code sur la page d'autorisation:",nousCopyCode:"Code copié",nousOpenLink:"Ouvrir la page d'autorisation",nousApproved:"Connexion réussie",nousDenied:"Autorisation refusée",nousExpired:"Autorisation expirée",copilotLoginTitle:"Connexion GitHub Copilot",copilotWaiting:"Ouvrez GitHub et saisissez le code ci-dessous pour autoriser. La fenêtre se fermera automatiquement après approbation.",copilotCopyCode:"Code copié",copilotOpenLink:"Ouvrir la page d'autorisation GitHub",copilotApproved:"Connexion réussie !",copilotDenied:"Autorisation refusée.",copilotExpired:"Le lien d'autorisation a expiré. Veuillez réessayer.",copilotAddDetectedTitle:"GitHub Copilot détecté",copilotAddDetected:"Un token OAuth GitHub Copilot a été détecté sur cette machine. Cliquez sur Ajouter pour activer Copilot dans Hermes.",copilotAddSourceEnv:"Source : ~/.hermes/.env (COPILOT_GITHUB_TOKEN)",copilotAddSourceGhCli:"Source : gh CLI (gh auth token)",copilotAddSourceAppsJson:"Source : extension Copilot de VS Code (apps.json)",copilotDeleteHintEnv:"Cela supprimera COPILOT_GITHUB_TOKEN dans ~/.hermes/.env. Les autres outils ne sont pas affectés.",copilotDeleteHintGhCli:"Copilot sera masqué dans Hermes. Votre connexion gh CLI n'est pas affectée — `gh auth status` indiquera toujours que vous êtes connecté.",copilotDeleteHintAppsJson:"Copilot sera masqué dans Hermes. Votre extension Copilot de VS Code reste connectée.",customBadge:"PERSONNALISÉ",previewBadge:"APERÇU",disabledBadge:"INDISPONIBLE",disabledTooltip:"Ce modèle n'est pas disponible pour votre compte.",customModelPlaceholder:"ID de modèle non listé",customModelHint:"Pour les modèles pris en charge par le fournisseur mais non renvoyés par l’API ; ce n’est pas un renommage affiché. Entrée pour charger.",noProviders:"Aucun fournisseur trouve. Ajoutez un fournisseur personnalise pour commencer.",clearVisibleModels:"Effacer la sélection",generalTitle:"Modeles generaux",combinationTitle:"Ensembles de modeles",combinationSubtitle:"Configurez les presets MoA : les modeles de reference fournissent d abord des perspectives, puis un modele agregateur produit la reponse finale et les appels d outils.",combinationPreset:"Preset",combinationName:"Nom",combinationAddModel:"Ajouter un ensemble de modeles",combinationEditModel:"Modifier l ensemble de modeles",combinationNewPreset:"Nouveau preset",combinationPresetPlaceholder:"ex. review",combinationAddPreset:"Ajouter un preset",combinationSetDefault:"Definir par defaut",combinationEnabled:"Activer les references",combinationReferenceModels:"Modeles de reference",combinationReferenceModel:"Modele de reference",combinationAddReference:"Ajouter un modele de reference",combinationAggregator:"Modele agregateur",combinationReferenceTemperature:"Temperature des references",combinationAggregatorTemperature:"Temperature de l agregateur",combinationMaxTokens:"Tokens max.",combinationNotSet:"Non defini",combinationSaved:"Ensemble de modeles enregistre",combinationLoadFailed:"Echec du chargement de l ensemble de modeles",combinationSaveFailed:"Echec de l enregistrement de l ensemble de modeles",combinationPresetExists:"Le preset existe deja",combinationNameRequired:"Saisissez un nom d ensemble de modeles",combinationNameInvalid:"Le nom ne peut contenir que des lettres, des chiffres, des underscores, des tirets et des points",combinationReferenceRequired:"Ajoutez au moins un modele de reference",combinationAggregatorRequired:"Selectionnez un modele agregateur",auxiliaryTitle:"Modèles auxiliaires",auxiliarySubtitle:"Remplacements de modèle pour les tâches secondaires comme la compression, la vision, les approbations, MCP et la maintenance en arrière-plan.",auxiliaryRefresh:"Actualiser",auxiliaryTask:"Tâche",auxiliaryTimeout:"Délai",auxiliaryDownloadTimeout:"Délai de téléchargement",auxiliaryActions:"Actions",auxiliaryDefault:"Par défaut",auxiliaryCustomEndpoint:"Endpoint personnalisé",auxiliaryProviderAuto:"Auto",auxiliaryProviderMain:"Modèle principal",auxiliaryProviderPlaceholder:"auto, main ou clé fournisseur",auxiliaryDownloadShort:"téléchargement",auxiliaryExtraBody:"JSON de corps supplémentaire",auxiliaryClear:"Réinitialiser",auxiliarySaved:"Modèles auxiliaires enregistrés",auxiliaryLoadFailed:"Impossible de charger les modèles auxiliaires",auxiliarySaveFailed:"Impossible d’enregistrer les modèles auxiliaires",auxiliaryInvalidExtraBody:"Le corps supplémentaire doit être un objet JSON",auxiliaryTaskCompression:"Compression",auxiliaryTaskVision:"Vision",auxiliaryTaskWebExtract:"Extraction web",auxiliaryTaskSkillsHub:"Hub de compétences",auxiliaryTaskApproval:"Approbation",auxiliaryTaskMcp:"MCP",auxiliaryTaskTitleGeneration:"Génération de titre",auxiliaryTaskTriageSpecifier:"Spécificateur de triage",auxiliaryTaskKanbanDecomposer:"Décomposition Kanban",auxiliaryTaskProfileDescriber:"Description du profil",auxiliaryTaskCurator:"Curateur",auxiliaryTaskSessionSearch:"Recherche de sessions",auxiliaryTaskFlushMemories:"Écriture des mémoires",currentDefault:"Par défaut actuel",defaultShort:"Défaut",setDefaultProvider:"Definir comme fournisseur par defaut",setDefault:"Definir par defaut",builtIn:"Integre",customType:"Personnalise",provider:"Fournisseur",contextLength:"Longueur du contexte",contextLengthPlaceholder:"ex. 256000 (facultatif)",apiMode:"Mode API",local:"Local ({host})",selectProviderRequired:"Veuillez selectionner un fournisseur",baseUrlRequired:"L'URL de base est requise",apiKeyRequired:"La cle API est requise",modelRequired:"Le modele par defaut est requis",enterBaseUrl:"Veuillez d'abord entrer l'URL de base",unexpectedFormat:"Format de reponse inattendu",foundModels:"{count} modeles trouves",fetchFailed:"Echec de la recuperation des modeles",xaiWaiting:"Terminez l’autorisation sur la page xAI ouverte. La fenêtre se fermera automatiquement après approbation.",xaiOpenLink:"Ouvrir la page d’autorisation xAI",xaiLoginTitle:"Connexion OAuth xAI Grok",xaiExpired:"Le lien d’autorisation a expiré. Veuillez réessayer.",xaiCopyLink:"Copier le lien d’autorisation",xaiApproved:"Connexion réussie !",anthropicLoginTitle:"Connexion OAuth Claude",anthropicWaiting:"Terminez l’autorisation sur Claude, puis collez ici le code renvoyé.",anthropicOpenLink:"Ouvrir la page d’autorisation Claude",anthropicCopyLink:"Copier le lien d’autorisation",anthropicCodePlaceholder:"Collez le code d’autorisation...",anthropicSubmitCode:"Envoyer le code",anthropicApproved:"Connexion réussie !",anthropicExpired:"L’autorisation a expiré. Veuillez réessayer.",minimaxLoginTitle:"Connexion MiniMax Coding Plan",minimaxRegionHint:"Choisissez la région MiniMax de votre compte Coding Plan.",minimaxGlobal:"International",minimaxChina:"Chine",minimaxStart:"Démarrer l’autorisation",minimaxWaiting:"Ouvrez la page d’autorisation MiniMax et saisissez ce code. Cette fenêtre se fermera automatiquement après approbation.",minimaxOpenLink:"Ouvrir la page d’autorisation MiniMax",minimaxApproved:"Connexion réussie !",minimaxExpired:"L’autorisation a expiré. Veuillez réessayer.",visibilitySelectOne:"Conserver au moins un modèle visible",visibilitySaved:"Modèles visibles enregistrés",visibilitySaveFailed:"Échec de l’enregistrement des modèles visibles",visibilityHint:"Affecte uniquement le sélecteur de modèles et la page Modèles de la Web UI. La configuration provider/model de Hermes CLI n’est pas modifiée ; les appels utilisent toujours l’ID de modèle d’origine.",showAllModels:"Afficher tous les modèles",searchPlaceholder:"Rechercher des modèles...",noResults:"Aucun résultat",noModels:"Aucun modèle",removeCustomModel:"Retirer ce modèle non listé",refresh:"Actualiser la liste des modèles (recharger config.yaml)",more:"de plus",models:"Liste des modèles",manageVisibleModelsFor:"Gérer les modèles visibles de {name}",manageVisibleModels:"Gérer les modèles visibles",getApiKey:"Obtenir une API Key",count:"modèles",aliasUseOriginal:"Restaurer l’ID d’origine",aliasTitleFor:"Nom affiché pour {model}",aliasTitle:"Nom affiché du modèle",aliasSaveFailed:"Échec de l’enregistrement du nom affiché",aliasPlaceholder:"Laisser vide pour utiliser l’ID de modèle d’origine",aliasManageFor:"Noms affichés pour {provider}",aliasManage:"Noms affichés",aliasHint:"Modifie uniquement le nom affiché dans la Web UI. Hermes reçoit toujours l’ID de modèle d’origine.",aliasEdit:"Renommer",aliasCanonical:"ID d’origine : {model}"},profiles:{title:"Profils",create:"Creer un profil",import:"Importer",export:"Exporter",rename:"Renommer",delete:"Supprimer",switchTo:"Changer Hermes Profile",switchConfirm:"Cette action execute `hermes profile use {name}` et change le active profile Hermes CLI. Continuer ?",switchSuccess:'Hermes active profile change vers "{name}"',switchFailed:"Echec du changement Hermes Profile. La passerelle peut necessiter un redemarrage manuel.",createSuccess:'Profil "{name}" cree',createFailed:"Echec de la creation du profil",renameSuccess:"Profil renomme",renameFailed:"Echec du renommage du profil",deleteConfirm:'Etes-vous sur de vouloir supprimer le profil "{name}" ?',deleteSuccess:"Profil supprime",deleteFailed:"Echec de la suppression du profil",exportSuccess:"Profil exporte",exportFailed:"Echec de l'exportation du profil",exportTimeout:"Délai d'export dépassé. Ce profil est trop volumineux à archiver — ce sont généralement les caches et environnements virtuels du workspace qui l'alourdissent.",importTimeout:"Délai d'import dépassé pendant la décompression de l'archive par le serveur. Réessayez sur un stockage plus rapide ou importez-la avec la CLI Hermes.",importSuccess:"Profil importe",importFailed:"Echec de l'importation du profil",importSelectFile:"Selectionner un fichier d'archive",importInvalidFile:"Veuillez selectionner une archive valide (.tar.gz, .tgz, .gz, .zip)",name:"Nom du profil",namePlaceholder:"Lettres, chiffres et tirets uniquement",nameValidation:"Le nom du profil ne peut contenir que des lettres minuscules, des chiffres, des tirets bas et des tirets",newName:"Nouveau nom",newNamePlaceholder:"Entrez un nouveau nom",cloneFromCurrent:"Cloner depuis le profil actuel",cloneCleanupNotice:"Lors du clonage, les identifiants de plateformes exclusives (Weixin / Telegram / Slack, etc.) sont automatiquement ignorés pour éviter les conflits avec le profil source",cloneStrippedCredentials:"{count} identifiant(s) exclusif(s) supprimé(s) : {list}",cloneDisabledPlatforms:"{count} plateforme(s) désactivée(s) : {list}",cloneStrippedConfigCredentials:"{count} identifiant(s) intégré(s) supprimé(s) de config.yaml : {list}",archivePath:"Chemin de l'archive",archivePathPlaceholder:"Chemin serveur du fichier d'archive",importName:"Nom du profil (facultatif)",importNamePlaceholder:"Laisser vide pour utiliser le nom de l'archive",active:"Actif",model:"Modele",gateway:"Passerelle",alias:"Alias",provider:"Fournisseur",path:"Chemin",skills:"Competences",hasEnv:"A un .env",hasSoulMd:"A un soul.md",noProfiles:"Aucun profil trouve. Creez-en un pour commencer.",avatar:{title:"Avatar personnalisé",customize:"Personnaliser l’avatar",upload:"Importer une image",random:"Générer au hasard",reset:"Restaurer par défaut",hint:"PNG, JPEG ou WebP, 1 Mo maximum",invalidType:"Veuillez choisir une image PNG, JPEG ou WebP",tooLarge:"L’image d’avatar ne doit pas dépasser 1 Mo",saveSuccess:"Avatar enregistré",saveFailed:"Échec de l’enregistrement de l’avatar",resetSuccess:"Avatar par défaut restauré",resetFailed:"Échec de la restauration de l’avatar par défaut"},runtime:{activeProfile:"Actuel : {name}",bridgeWorker:"État du Bridge",gateway:"Passerelle",active:"Actif",activeTag:"Actuel",idle:"Inactif",checking:"Vérification",running:"En cours",stopped:"Arrêté",restartGateway:"Redémarrer le gateway",restartProfile:"Redémarrer le profil",switchProfile:"Changer le profil frontend",gatewayRestarted:"Gateway redémarré : {name}",gatewayRestartFailed:"Échec du redémarrage du gateway",profileRestarted:"Profil redémarré : {name}",profileRestartFailed:"Échec du redémarrage du profil"}},logs:{title:"Journaux",all:"Tout",searchPlaceholder:"Rechercher...",refresh:"Actualiser",noEntries:"Aucune entree de journal"},theme:{title:"Thème",saved:"Thème enregistré",saveFailed:"Échec de l’enregistrement du thème",reset:"Rétablir les valeurs",resetSuccess:"Thème par défaut restauré",appearance:"Apparence",appearanceHint:"Les modifications sont prévisualisées dans toute l’interface",mode:"Luminosité",modeHint:"Choisissez une palette claire ou sombre",modeSystem:"Suivre le système",modeLight:"Clair",modeDark:"Sombre",style:"Style",styleHint:"Choisissez le caractère de l’interface",styleInk:"Encre",styleComic:"BD",fontSize:"Taille du texte",fontSizeHint:"Taille de base de l’interface et des conversations",textColor:"Couleur du texte",textColorHint:"Les tons secondaires sont générés automatiquement",accentColor:"Couleur de sélection",accentColorHint:"Utilisée pour les éléments actifs, sélections et boutons principaux",background:"Image d’arrière-plan",backgroundHint:"Importez un arrière-plan personnel",backgroundTypeError:"Utilisez une image PNG, JPEG, WebP ou GIF",backgroundSizeError:"L’image doit faire au maximum 10 Mo",backgroundUploaded:"Image d’arrière-plan mise à jour",backgroundUploadFailed:"Échec de l’importation de l’image",backgroundRemoved:"Image d’arrière-plan supprimée",backgroundRemoveFailed:"Échec de la suppression de l’image",backgroundReplace:"Remplacer l’image",backgroundUpload:"Importer une image",backgroundRemove:"Supprimer",backgroundEmpty:"Aucune image d’arrière-plan",backgroundNote:"L’image est liée à votre compte. Un cache local évite le scintillement.",preview:"Aperçu",previewTitle:"Votre espace, votre ambiance",previewText:"Les couleurs du texte et de sélection s’appliquent à toute l’interface.",previewAction:"Action sélectionnée"},settings:{title:"Parametres",saved:"Enregistre",saveFailed:"Echec de l'enregistrement",tabs:{display:"Affichage",account:"Compte actuel",users:"Gestion des comptes",webhooks:"Webhooks",agent:"Agent",proxy:"Proxy",memory:"Memoire",compression:"Compression",session:"Session",privacy:"Confidentialite",apiServer:"Serveur API",models:"Modèles",voice:"Voix"},webhooks:{title:"Webhooks",description:"Envoyez les événements du cycle de vie Chat Run à des systèmes externes sans bloquer l’exécution du chat.",deliveryNote:"La livraison utilise une file en mémoire limitée. Les endpoints sont traités en parallèle et chacun conserve l’ordre des événements. Les livraisons en attente ne sont pas conservées après un redémarrage du serveur.",createTitle:"Ajouter un webhook",editTitle:"Modifier le webhook",allProfiles:"Tous les profils",queued:"{count} en attente",deleteConfirm:"Supprimer ce webhook ? Ses livraisons en attente seront également abandonnées.",localInboxTitle:"Boîte de réception de test locale",localInboxDescription:"{count} événements récents reçus par le récepteur de test intégré. Ils sont conservés uniquement en mémoire et effacés au redémarrage du serveur.",localInboxEmpty:"Aucun événement de test local reçu pour le moment.",localInboxPayloadTitle:"Payload webhook reçu",clearInboxConfirm:"Effacer tous les événements de la boîte de test locale ?",columns:{name:"Nom",url:"URL",events:"Événements",profiles:"Profils",status:"État",actions:"Actions",receivedAt:"Reçu le",event:"Événement",eventId:"ID de l’événement",deliveryId:"ID de livraison"},events:{messageCreated:"Message utilisateur créé",runQueued:"Exécution en attente",runStarted:"Exécution démarrée",toolStarted:"Outil démarré",toolCompleted:"Outil terminé",toolFailed:"Échec de l’outil",approvalRequested:"Approbation demandée",approvalResolved:"Approbation traitée",clarificationRequested:"Clarification demandée",clarificationResolved:"Clarification traitée",completed:"Exécution terminée",failed:"Échec de l’exécution"},status:{enabled:"Activé",disabled:"Désactivé"},runtime:{idle:"Inactif",delivering:"Livraison en cours",retrying:"Nouvelle tentative",success:"Livré",failed:"Échec",dropped:"Abandonné"},actions:{add:"Ajouter un webhook",localTest:"Utiliser le récepteur de test local",test:"Tester",enable:"Activer",disable:"Désactiver",refresh:"Actualiser",clear:"Effacer",view:"Afficher"},form:{name:"Nom",localTestName:"Test Webhook local",namePlaceholder:"Par exemple : Notifications d’exploitation",url:"URL de l’endpoint",secret:"Secret de signature",secretPlaceholder:"Secret facultatif pour la signature HMAC-SHA256",secretKeepPlaceholder:"Laisser vide pour conserver le secret actuel",clearSecret:"Supprimer le secret enregistré",events:"Événements",profiles:"Profils",profilesPlaceholder:"Laisser vide pour recevoir tous les profils",maxRetries:"Tentatives après le premier échec (0–10)",includeContent:"Inclure le texte final de l’assistant",includeContentHint:"La réponse finale peut contenir des informations sensibles. Le raisonnement, les prompts système et les arguments d’outils ne sont jamais envoyés.",includeUserContent:"Inclure le texte du message utilisateur",includeUserContentHint:"Les messages utilisateur peuvent contenir des informations sensibles. Désactivé par défaut ; les prompts système, le raisonnement, les arguments et résultats d’outils ne sont pas inclus.",allowPrivateNetwork:"Autoriser les adresses réseau privées ou locales",allowPrivateNetworkHint:"À activer uniquement pour des endpoints internes de confiance. Le DNS est revérifié avant chaque livraison.",enabled:"Activé"},messages:{required:"Le nom et l’URL sont obligatoires",eventRequired:"Sélectionnez au moins un événement",loadFailed:"Impossible de charger les webhooks",saved:"Webhook enregistré",saveFailed:"Impossible d’enregistrer le webhook",deleted:"Webhook supprimé",deleteFailed:"Impossible de supprimer le webhook",testSucceeded:"Webhook de test livré",testFailed:"Échec du webhook de test",localTestFailed:"Impossible de créer le récepteur de test local",inboxLoadFailed:"Impossible de charger les événements de test locaux",inboxCleared:"Événements de test locaux effacés",inboxClearFailed:"Impossible d’effacer les événements de test locaux"}},display:{streaming:"Reponses en continu",streamingHint:"Afficher les reponses de l'IA en temps reel",compact:"Mode compact",compactHint:"Reduire l'espacement des messages",showReasoning:"Afficher le raisonnement",showReasoningHint:"Afficher le processus de reflexion du modele",showCost:"Afficher le cout",showCostHint:"Afficher l'utilisation des jetons dans les reponses",inlineDiffs:"Diffs en ligne",inlineDiffsHint:"Afficher les changements de code en ligne",bellOnComplete:"Son de fin",bellOnCompleteHint:"Jouer un son lorsque l'IA a termine",notifyOnComplete:"Notification de fin",notifyOnApproval:"Approval Desktop Notification",notifyOnApprovalHint:"Show a system notification when a new approval or clarification needs attention while Studio is in the background",notifyOnApprovalTest:"Approval desktop notifications are enabled.",notifyOnApprovalTestButton:"Test",notifyOnApprovalTestSent:"Approval notification sent",notifyOnApprovalTestFailed:"Failed to send approval notification",approvalNotificationTitle:"Approval required",approvalNotificationClarifyTitle:"Clarification required",approvalNotificationBody:"Open Hermes Studio to review and respond.",notifyOnCompleteHint:"Afficher une notification systeme lorsque l'IA a termine",notifyOnCompleteMacHint:"Sur macOS, autorisez les notifications du navigateur dans Reglages Systeme.",notifyOnCompleteDenied:"Autorisation de notification refusee",notifyOnCompleteInsecure:"Les notifications du navigateur exigent HTTPS ou localhost",notifyOnCompleteUnsupported:"Ce navigateur ne prend pas en charge les notifications",notifyOnCompleteTest:"Notifications activees.",notifyOnCompleteTestButton:"Tester",notifyOnCompleteTesting:"Envoi de la notification de test...",notifyOnCompleteTestSent:"Notification de test envoyee",notifyOnCompleteTestFailed:"Echec de l envoi de la notification de test",busyInputMode:"Mode saisie active",busyInputModeHint:"Permettre la saisie pendant le traitement de l'IA",theme:"Thème",themeHint:"Choisir clair, sombre ou suivre les preferences du systeme",themeLight:"Clair",themeDark:"Sombre",themeSystem:"Systeme",chatInputHeight:"Hauteur de saisie du chat",chatInputHeightHint:"Hauteur par défaut de la zone de saisie sur ordinateur, en pixels. Le mobile reste automatique."},agent:{maxTurns:"Tours maximum",maxTurnsHint:"Nombre maximum de tours d'interaction par conversation",gatewayTimeout:"Delai d'attente de la passerelle",gatewayTimeoutHint:"Delai d'attente de la requete en secondes",restartDrainTimeout:"Delai de vidange au redemarrage",restartDrainTimeoutHint:"Delai de vidange avant redemarrage en secondes",toolEnforcement:"Application des outils",toolEnforcementHint:"Controler le mode d'execution des appels d'outils",auto:"Automatique",always:"Toujours",never:"Jamais"},gatewayAutoStart:{title:"Démarrage automatique des gateways",description:"Contrôle les gateways de profils Hermes locaux que la Web UI démarre au lancement. Cette option est stockée dans la configuration Web UI, pas dans le config.yaml du profil.",enabled:"Démarrer automatiquement les gateways",enabledHint:"Si désactivé, aucun gateway de profil ne sera démarré automatiquement au lancement.",management:"Gateway unifié",managementHint:"Nécessite Hermes Agent 0.17.0 ou ultérieur. Si activé, la Web UI écrit multiplex_profiles afin que le gateway default serve tous les profils; les autres profils ne peuvent pas configurer des points d entree de messagerie distincts comme Feishu, Weixin ou QQBot. Désactiver retire cette configuration.",managementAuto:"Automatique",managementPerProfile:"Un gateway par profil",managementUnified:"Gateway default unifié",mode:"Politique des profils",modeHint:"Démarrer tous les profils détectés ou uniquement la liste incluse explicitement.",modeAll:"Tous les profils détectés",modeInclude:"Uniquement les profils inclus",include:"Profils inclus",includeHint:"Noms de profils séparés par des virgules. En mode inclusion, une liste vide ne démarre aucun profil.",exclude:"Profils exclus",excludeHint:"Noms de profils séparés par des virgules à ignorer après application de la politique.",profileListPlaceholder:"default, reviewer"},proxy:{title:"Proxy gateway",description:"Definit les variables d environnement proxy pour le gateway du profil selectionne. Les changements redemarrent le gateway afin que les plateformes de messagerie utilisent les nouveaux parametres reseau.",httpsProxy:"HTTPS_PROXY",httpsProxyHint:"Proxy pour les requetes HTTPS. C est generalement la valeur principale.",httpProxy:"HTTP_PROXY",httpProxyHint:"Proxy pour les requetes HTTP simples.",allProxy:"ALL_PROXY",allProxyHint:"Proxy de secours lorsqu aucun proxy specifique au protocole n est defini.",noProxy:"NO_PROXY",noProxyHint:"Hosts ou domaines separes par des virgules qui contournent le proxy.",save:"Enregistrer les parametres proxy"},memory:{enabled:"Activer la memoire",enabledHint:"Permettre a l'IA de memoriser le contexte de conversation",userProfile:"Profil utilisateur",userProfileHint:"Permettre a l'IA de memoriser les preferences utilisateur",charLimit:"Limite de caracteres de la memoire",charLimitHint:"Nombre maximum de caracteres pour MEMORY.md",userCharLimit:"Limite de caracteres du profil utilisateur",userCharLimitHint:"Nombre maximum de caracteres pour USER.md"},compression:{enabled:"Activer la compression",enabledHint:"Compresser automatiquement un long historique avant de depasser le contexte du modele",threshold:"Seuil de compression",thresholdHint:"Demarrer la compression quand les jetons estimes depassent ce ratio de contexte",targetRatio:"Ratio cible",targetRatioHint:"Taille cible de l'historique apres compression comme ratio du contexte",protectLastN:"Proteger les messages recents",protectLastNHint:"Garder autant de messages recents non compresses",protectFirstN:"Proteger les premiers messages",protectFirstNHint:"Garder autant de premiers messages non compresses"},session:{mode:"Mode de reinitialisation",modeHint:"Condition de declenchement de la reinitialisation de session",modeBoth:"Inactivite + Planifie",modeIdle:"Inactivite uniquement",modeDaily:"Planifie uniquement",modeNone:"Jamais (manuel uniquement)",idleMinutes:"Delai d'inactivite",idleMinutesHint:"Temps d'attente avant reinitialisation automatique (minutes)",atHour:"Heure de reinitialisation planifiee",humanOnly:"Afficher uniquement les sessions humaines",humanOnlyHint:"Masquer par défaut le bruit des sous-agents et du moniteur de session",liveMonitorHumanOnly:"Moniteur live : n’afficher que les sessions humaines",liveMonitorHumanOnlyHint:"Masquer par défaut le bruit des sous-agents et du moniteur de session dans le moniteur live",atHourHint:"Reinitialiser la session a cette heure chaque jour",requireAuth:"Autorisation de session",requireAuthHint:"Exiger une autorisation pour les operations de session",memoryWriteApproval:"Verifier les ecritures de memoire",memoryWriteApprovalHint:"Mettre les ecritures de memoire de Hermes Agent en attente de validation avant de les enregistrer.",skillsWriteApproval:"Verifier les ecritures de skills",skillsWriteApprovalHint:"Mettre les modifications de skills de Hermes Agent en attente de validation avant de les enregistrer.",writeApprovalTitle:"Ecritures en attente de validation",writeApprovalDescription:"Approuvez ou refusez les ecritures de memoire et de skills preparees par Hermes Agent.",writeApprovalRefresh:"Actualiser",writeApprovalEmpty:"Aucune ecriture en attente.",writeApprovalMemory:"Memoire",writeApprovalSkills:"Skills",writeApprovalViewDiff:"Verifier",writeApprovalHideDiff:"Masquer",writeApprovalNoDiff:"Aucune difference disponible.",writeApprovalLoadFailed:"Impossible de charger les ecritures en attente",writeApprovalDiffFailed:"Impossible de charger les details de l ecriture",writeApprovalActionFailed:"Impossible de traiter l ecriture en attente",writeApprovalApproved:"Ecriture approuvee",writeApprovalRejected:"Ecriture refusee",writeApprovalApprove:"Approuver",writeApprovalReject:"Refuser",writeApprovalPendingMemoryWrite:"Ecriture de memoire en attente",writeApprovalCurrentFile:"Fichier actuel {file}",writeApprovalProposedFile:"Fichier propose {file}",writeApprovalDiffSection:"Difference",writeApprovalPatchOldStringMissing:"Le old_string du patch est introuvable dans le fichier actuel {file}; l approbation ne modifiera pas le fichier.",writeApprovalRequestedOldString:"old_string demande",writeApprovalCurrentReadFailed:"Le fichier actuel {file} n a pas pu etre lu comme texte UTF-8.",writeApprovalDeleteSkill:"Cette validation supprime le skill {skill}.",writeApprovalRemoveFile:"Cette validation supprime {file} du skill {skill}."},privacy:{redactPii:"Masquer les DPI",redactPiiHint:"Detecter et masquer automatiquement les informations sensibles (mots de passe, cles, etc.)"},apiServer:{enable:"Activer",enableHint:"Activer le serveur API",host:"Hote",hostHint:"Adresse d'ecoute",port:"Port",portHint:"Port d'ecoute",key:"Cle",keyHint:"Cle d'acces API",cors:"Origines CORS",corsHint:"Sources cross-origin autorisees"},voice:{activeTtsApi:"API TTS active",activeSttApi:"API STT active",ttsProvidersTitle:"Fournisseurs TTS",ttsProvidersDescription:"Gerez les integrations de synthese vocale utilisees pour lire les reponses de l’assistant et les apercus vocaux.",sttProvidersTitle:"Fournisseurs STT",sttProvidersDescription:"Gerez les integrations de transcription vocale utilisees par le microphone et le flux de saisie vocale.",localSttModelTitle:"STT local chinois-anglais",localSttModelDescription:"Reconnaissance privée sur cet appareil, sans envoyer le son vers le cloud.",localSttModelUnavailable:"Téléchargez et validez le modèle STT local avant de l’activer.",localSttModelReady:"Prêt",localSttModelDownloading:"Téléchargement",localSttModelNotInstalled:"Non installé",localSttLanguages:"Langues",localSttLanguagesValue:"Chinois + anglais",localSttDownloadSize:"Taille du téléchargement",localSttRuntime:"Runtime",localSttDownloadCf:"Télécharger via Cloudflare",localSttDownloadGithub:"Télécharger via GitHub",localSttBackgroundHint:"Le téléchargement, la vérification, l’extraction et la validation se font en arrière-plan.",localSttDownloadFailed:"Échec du téléchargement du modèle STT local : {error}",localSttStage:{queued:"En attente…",resolve:"Préparation du téléchargement…",download:"Téléchargement du modèle…",verify:"Vérification du checksum…",extract:"Extraction du modèle…",validate:"Validation du modèle…",install:"Installation du modèle…",completed:"Le modèle est prêt",failed:"Échec du téléchargement"},hermesConfigTitle:"Configuration de Hermes Agent",hermesConfigDescription:"Les fournisseurs natifs existants restent dans le profil Hermes ; ceux du Web UI apparaissent comme Hermes Studio.",hermesActiveProvider:"Fournisseur actif",hermesConfiguredProviders:"Fournisseurs configures",hermesStudioProvider:"Hermes Studio",providerSpeed:"Vitesse",providerSampleRate:"Frequence d’echantillonnage",providerBitRate:"Debit binaire",providerGroupId:"ID de groupe",providerVolume:"Volume",providerEmotion:"Emotion",providerDiarize:"Diarisation des locuteurs",providerFormatText:"Formater la transcription",providerTagAudioEvents:"Marquer les evenements audio",optionEnabled:"Active",optionDisabled:"Desactive",nativeProvider:"Fournisseur natif Hermes",selectNativeProvider:"Choisir un fournisseur natif Hermes",useHermesStudioProvider:"Utiliser le fournisseur Hermes Studio",presetElevenLabsTtsLabel:"ElevenLabs TTS",presetGeminiTtsLabel:"Gemini TTS",presetXaiTtsLabel:"xAI TTS",presetMistralTtsLabel:"Mistral TTS",presetMinimaxTtsLabel:"MiniMax TTS",presetDeepInfraTtsLabel:"DeepInfra TTS",presetMistralSttLabel:"Mistral STT",presetXaiSttLabel:"xAI STT",presetElevenLabsSttLabel:"ElevenLabs STT",presetDeepInfraSttLabel:"DeepInfra STT",noneSelected:"Aucun selectionne",keyStored:"Enregistree",keyMissing:"Manquante",customApi:"API",localBuiltin:"Integre localement",ttsCardHint:"Fournisseur de synthese vocale",sttCardHint:"Fournisseur de transcription vocale",setActive:"Activer",testAction:"Tester",connect:"Connecter",presetEdgeTtsLabel:"Edge TTS",presetEdgeTtsDescription:"Voix cloud gratuites de haute qualite de Microsoft Edge.",presetOpenaiTtsLabel:"OpenAI TTS",presetMimoTtsLabel:"MiMo TTS",presetDoubaoTtsLabel:"Volcengine Doubao TTS",presetCustomTtsLabel:"TTS personnalise",presetBrowserSttLabel:"STT du navigateur",presetBrowserSttDescription:"API native de reconnaissance vocale du navigateur.",presetOpenaiWhisperLabel:"OpenAI Whisper",presetGroqSttLabel:"Groq STT",presetDoubaoSttLabel:"Volcengine Doubao STT",presetCustomSttLabel:"STT personnalise",apiCompatibility:"Compatibilite API",openaiCompatible:"Compatible OpenAI",manualCustomEndpoint:"Endpoint personnalise manuel",connectionStep:"Connexion",discoveryManualHint:"Endpoint personnalise manuel selectionne. La decouverte des modeles n est pas disponible ; saisissez le nom du modele manuellement.",discoveryCredentialHint:"Saisissez la Base URL et la cle API, puis connectez-vous pour recuperer les modeles disponibles.",discoveryNoAutoProbeHint:"Aucune requete n est envoyee pendant la saisie. Utilisez Connect quand les identifiants sont prets.",apiKeyConnectPlaceholder:"Collez la cle API pour vous connecter ; les cles stockees ne sont jamais affichees",connectFetchModels:"Connecter et recuperer les modeles",modelRecommendedSuffix:"recommande",modelConnectManualHint:"Connectez-vous pour remplir automatiquement, ou saisissez manuellement.",modelRequiredConnectManual:"Le modele est requis. Connectez-vous pour remplir automatiquement, ou saisissez manuellement.",apiKeyRequired:"La cle API est requise.",apiKeyRequiredForDiscovery:"La cle API est requise pour recuperer les modeles.",baseUrlRequired:"La Base URL est requise.",baseUrlHttpsRequired:"Veuillez utiliser http:// ou https://.",baseUrlInvalid:"Saisissez une Base URL valide, avec https://.",discoveryFailedManualFallback:"Impossible de recuperer les modeles. Vous pouvez toujours saisir le nom du modele manuellement.",completeRequiredProviderFields:"Completez les champs provider requis avant d enregistrer.",fetchingModels:"Recuperation des modeles...",recommendedModel:"Recommande : {model}.",useRecommendedModel:"Utiliser celui-ci.",modelsDiscovered:"{count} modeles decouverts. Le modele recommande est selectionne quand le champ est vide.",remove:"Supprimer",testSuccess:"Test termine",testTextRequired:"Saisissez du texte avant de tester.",keyMissingForTest:"Ajoutez une cle API avant de tester ce fournisseur.",testing:"Test en cours...",transcribing:"Transcription...",browserSttTestHint:"Le STT du navigateur se teste depuis le microphone du chat.",sttEmptyAudio:"Aucun audio capture. Reessayez.",sttTestSuccess:"Transcription terminee",sttRecordingHint:"Enregistrement... cliquez sur Arreter pour transcrire.",keepStoredKeyPlaceholder:"Laisser vide pour conserver la cle enregistree",apiKeyPlaceholder:"Saisir la cle API",lastTest:"Dernier test",notTested:"—",recording:"Enregistrement",testFailedShort:"Echec",testFailedSummary:"Le test a echoue. Verifiez les parametres du fournisseur et reessayez.",showDetails:"Afficher les details",hideDetails:"Masquer les details",moreActions:"Plus",moreActionsFor:"Plus d’actions pour {provider}",addTtsApi:"Ajouter une API TTS",addSttApi:"Ajouter une API STT",active:"Actif",builtin:"Integre",connected:"Connecte",disconnected:"Deconnecte",source:"Source",model:"Modele",voice:"Voix",doubaoVoiceHint:"Selectionnez une voix Seed TTS 2.0 ; le champ de ressource est mis a jour automatiquement.",apiKey:"Cle API",confirmDeleteSecret:"Supprimer la cle API enregistree pour cette API vocale ?",ttsTitle:"Texte vers parole",ttsSaved:"Parametres TTS enregistres sur le serveur",ttsSaveFailed:"Impossible d’enregistrer les parametres TTS",ttsTestSaved:"Ecoute reussie; parametres TTS enregistres sur le serveur",ttsTestSaving:"Enregistrement des parametres TTS avant l’ecoute...",ttsMissingBaseUrl:"La Base URL est requise avant le test. Saisissez un endpoint fournisseur puis retestez.",ttsMissingApiKey:"La cle API est requise avant le test. Collez la cle ou enregistrez d’abord une cle serveur.",ttsCleared:"Cle TTS enregistree supprimee",ttsClearFailed:"Impossible de supprimer la cle TTS enregistree",storedBaseUrlsTitle:"Base URLs enregistrées",storedBaseUrlsHint:"Endpoints vocaux enregistrés. Les champs ci-dessus effacent seulement la valeur actuelle; supprimez les URL enregistrées ici.",storedBaseUrlsEmpty:"Aucune Base URL vocale personnalisée n’est enregistrée sur le serveur.",storedBaseUrlDelete:"Supprimer URL",storedApiKeysTitle:"API keys enregistrées",storedApiKeysHint:"Liste masquée des clés vocales stockées côté serveur. Seuls l’usage et la source sont affichés; la key complète ne l’est jamais.",storedApiKeysEmpty:"Aucune API key vocale n’est enregistrée sur le serveur.",storedKeyKindTts:"TTS",storedKeyKindStt:"STT",storedApiKeyMasked:"[stored]",storedApiKeyDelete:"Supprimer key",baseUrlPresetClear:"Effacer URL",baseUrlPresetCleared:"Base URL effacée du champ.",baseUrlPresetDelete:"Supprimer URL",baseUrlPresetDeleted:"URL de base retirée de la liste enregistrée.",baseUrlPresetDeleteFailed:"Impossible de supprimer l’URL de base enregistrée.",ttsPendingSecret:"La nouvelle cle sera enregistree",ttsStoredSecret:"Le serveur a une cle enregistree : {value}",ttsClearKey:"Supprimer la cle enregistree",sttTitle:"Parole vers texte",sttProvider:"Fournisseur STT",sttProviderHint:"Choisissez comment l’entree vocale est transcrite",sttProviderBrowser:"Navigateur",sttProviderOpenai:"Compatible OpenAI",sttProviderCustom:"Personnalise",sttBrowserHint:"Utilise la reconnaissance vocale integree du navigateur lorsqu’elle est disponible.",sttApiKey:"Cle API",sttApiKeyHint:"Enregistree cote serveur pour les fournisseurs STT qui exigent une authentification.",sttStoredSecret:"Cle serveur enregistree : {value}",sttPendingSecret:"Cle serveur enregistree : sera mise a jour a l’enregistrement",sttClearKey:"Supprimer la cle enregistree",sttModel:"Modele",sttModelHint:"Modele de parole vers texte a utiliser.",sttLanguage:"Langue",sttLanguageHint:"Indice de langue facultatif, comme en ou zh.",sttPrompt:"Prompt",sttPromptHint:"Prompt de transcription facultatif.",sttAudioTranscode:"Transcodage audio",sttAudioTranscodeNone:"Envoyer l’audio original",sttAudioTranscodeFfmpeg:"Convertir en WAV avec ffmpeg",sttBaseUrl:"Base URL",sttBaseUrlHint:"Endpoint parole vers texte personnalise compatible OpenAI.",sttSave:"Enregistrer les parametres STT",sttSaved:"Parametres STT enregistres sur le serveur.",sttSaveFailed:"Impossible d’enregistrer les parametres STT.",sttCleared:"Secret STT enregistre supprime du serveur.",sttClearFailed:"Impossible de supprimer le secret STT enregistre.",sttActiveSaved:"Fournisseur STT actif enregistre sur le serveur.",sttSaveActive:"Enregistrer le fournisseur STT actif",sttEndpointHint:"Endpoint final de transcription : {endpoint}",sttTestTitle:"Tester parole vers texte",sttTestButton:"Tester l’API STT",sttTestStopButton:"Arreter et transcrire",sttTestBackendOnly:"Le test d’API STT est disponible pour les fournisseurs compatibles OpenAI et personnalises.",sttTestRecording:"Enregistrement de l’echantillon de test... cliquez sur Arreter et transcrire lorsque vous avez termine.",sttTestTranscribing:"Transcription de l’echantillon de test...",sttTestEmpty:"Aucun audio capture pour le test STT.",sttTestSucceeded:"Test STT reussi.",sttTestFailed:"Echec du test STT : {error} — {hint}",sttFailureHintMissingConfig:"Verifiez que le fournisseur est enregistre avec une Base URL/un modele et une cle API avant le test.",sttFailureHintAuth:"Verifiez la cle API. Si une cle etait deja enregistree, collez de nouveau la cle actuelle et enregistrez avant de tester.",sttFailureHintForbidden:"La cle a atteint le fournisseur, mais n’a pas l’autorisation pour ce modele STT ou ce compte. Verifiez l’acces/la facturation du fournisseur.",sttFailureHintEndpointModel:"Verifiez la Base URL et le modele. Pour Groq, utilisez {endpoint} avec whisper-large-v3-turbo ou un autre modele STT Groq.",sttFailureHintModel:"Verifiez que le modele STT selectionne existe et est active pour ce compte.",sttFailureHintQuota:"Le fournisseur signale un probleme de quota, facturation ou limite de debit. Verifiez le quota/la facturation ou reessayez plus tard.",sttFailureHintNetworkCustom:"Le serveur n’a pas pu joindre l’endpoint STT personnalise. Verifiez que {endpoint} est joignable depuis le serveur Web UI et compatible OpenAI.",sttFailureHintNetwork:"Le serveur Web UI n’a pas pu joindre le fournisseur STT. Verifiez reseau/proxy/pare-feu et reessayez.",sttFailureHintAudio:"L’audio enregistre etait vide ou rejete. Essayez un court echantillon clair, autorisez le microphone ou reessayez dans Chrome.",sttFailureHintGenericCustom:"Verifiez la cle API, la Base URL, le modele et l’endpoint final {endpoint}.",sttFailureHintGeneric:"Verifiez la cle API, le modele et l’acces au compte fournisseur, puis reessayez.",sttTestRecordFailed:"Impossible de demarrer l’enregistrement du microphone : {error}",sttTestTranscript:"Transcription : {text}",ttsProvider:"Fournisseur TTS",ttsProviderHint:"Choisir le moteur de synthese vocale pour la lecture des messages",providerWebSpeech:"WebSpeech API (Navigateur)",providerOpenai:"OpenAI TTS",providerCustom:"Point d'acces personnalise (compatible OpenAI)",providerEdge:"Edge TTS (Gratuit, sans cle API)",webspeechVoice:"Voix",webspeechVoiceHint:"Choisir une voix depuis le navigateur ou l'OS",webspeechVoicePlaceholder:"Auto (voix par defaut)",openaiKey:"Cle API",openaiKeyHint:"Votre cle API OpenAI avec acces TTS",openaiUrl:"URL de base API",openaiUrlHint:"ex. https://api.openai.com/v1/audio/speech",openaiModel:"Modele",openaiModelHint:"tts-1 (rapide) / tts-1-hd (haute qualite)",openaiVoice:"Voix",openaiVoiceHint:"Voix a utiliser pour la synthese",customHint:"Utilisez toute API TTS compatible OpenAI — fonctionne avec GPT-SoVITS, CosyVoice, etc.",customUrl:"URL API",customUrlHint:"URL de base de votre service TTS",customUrlPlaceholder:"Adresse configuree dans l'adaptateur local, ex. http://127.0.0.1:9880",customApiKey:"Cle API (optionnelle)",customApiKeyHint:"Certains points d'acces personnalises necessitent une authentification",customApiKeyPlaceholder:"Laisser vide si inutile",edgeHint:"Propulse par Microsoft Edge TTS (node-edge-tts).",edgeUrl:"URL de l'adaptateur",edgeUrlHint:"Adresse de l'adaptateur Edge TTS, ex. http://127.0.0.1:9882",edgeUrlPlaceholder:"http://127.0.0.1:9882",edgeVoice:"Voix",edgeVoiceHint:"Choisir une voix pour la synthese vocale",edgeRate:"Vitesse",edgeRateHint:"Ajuster la vitesse de la voix (0.5x ~ 2.0x)",edgePitch:"Hauteur",edgePitchHint:"Ajuster la hauteur de la voix (-20 ~ +20 Hz)",testTitle:"Test vocal",testText:"Texte de test",testTextPlaceholder:"Entrez le texte a tester...",testTextDefault:"Bonjour, ceci est un test vocal.",testButton:"Tester",testButtonPlaying:"Lecture...",testFailed:"Echec du test : {error}",providerMimo:"MiMo TTS",mimoHint:"Xiaomi MiMo TTS — voices predefinies, conception vocale et clonage vocal",mimoApiKey:"Cle API",mimoApiKeyHint:"Obtenez votre cle sur platform.xiaomimimo.com",mimoApiKeyPlaceholder:"Cle API MiMo",mimoAuthMode:"Mode d’authentification",mimoAuthModeHint:"Format d’en-tete attendu par le point de terminaison MiMo selectionne",mimoAuthModeBearer:"Jeton Bearer (Authorization)",mimoAuthModeApiKey:"En-tete API key (api-key)",mimoAuthModeBoth:"Les deux en-tetes",mimoBaseUrl:"URL de base",mimoBaseUrlHint:"URL de l'endpoint API MiMo",mimoModel:"Modele",mimoModelHint:"Selectionnez le modele de synthese vocale",mimoModelPreset:"Voix predefinies",mimoModelVoiceDesign:"Conception vocale",mimoModelVoiceClone:"Clonage vocal",mimoVoice:"Voix",mimoVoiceHint:"Selectionnez une voix predefinie",mimoVoiceDesignPrompt:"Description vocale",mimoVoiceDesignPromptHint:"Decrivez les caracteristiques vocales souhaitees",mimoVoiceDesignPromptPlaceholder:"Ex : Une voix feminine chaude et jeune, legerement lente, avec un ton magnetique",mimoCloneAudio:"Televerser un audio",mimoCloneAudioHint:"Televersez un echantillon audio pour le clonage (mp3/wav, max 10 Mo)",mimoCloneAudioUpload:"Choisir un fichier",mimoCloneAudioClear:"Effacer",mimoStylePrompt:"Invite de style",mimoStylePromptHint:"Optionnel — decrivez le style de parole en langage naturel",mimoStylePromptPlaceholder:"Ex : Ton vif et entrain, rythme rapide"},lockedIps:{title:"IPs bloquees",count:"{count} bloquees",empty:"Aucune IP bloquee",unlock:"Debloquer",unlockAll:"Tout debloquer",unlockAllConfirm:"Debloquer toutes les IPs?",unlocked:"IP debloquee",allUnlocked:"{count} IPs debloquees",type:{password:"Password",token:"API token",pairing:"Device pairing"}},userAvatar:{title:"Avatar utilisateur",upload:"Importer une image",random:"Générer aléatoirement",reset:"Rétablir par défaut",hint:"PNG, JPEG et WebP jusqu’à 1 Mo; compression automatique sous 500 Ko.",invalidType:"Choisissez une image PNG, JPEG ou WebP",tooLarge:"L’image d’avatar doit faire 1 Mo ou moins",saveSuccess:"Avatar enregistré",saveFailed:"Échec de l’enregistrement de l’avatar",resetSuccess:"Avatar réinitialisé",resetFailed:"Échec de la réinitialisation de l’avatar"},models:{apiKey:"API Key",apiKeyPlaceholder:"Saisir l’API Key",noProviders:"Aucun fournisseur configuré",save:"Enregistrer",saveFailed:"Échec de l’enregistrement",saved:"Enregistré"}},githubPreview:{title:"Aperçu de version",description:"Clone le tag GitHub sélectionné dans l’espace de prévisualisation Web UI, installe les dépendances, puis lance l’application sur les ports de développement.",refresh:"Actualiser",selectTag:"Sélectionner un tag",prepare:"Préparer le code",install:"Installer les dépendances",start:"Démarrer l’aperçu",stop:"Arrêter",note:"Le code de prévisualisation est stocké dans le dossier de données Web UI. La production reste sur le port 8648 ; la prévisualisation utilise le frontend 8651 et le backend 8650.",path:"Chemin de prévisualisation",webuiHome:"Données de prévisualisation",currentTag:"Tag actuel",repoReady:"Dépôt prêt",dependencies:"Dépendances installées",running:"État",notRunning:"Arrêté",open:"Ouvrir l’aperçu",log:"Chemin du journal d’action",logOutput:"Sortie des journaux",actionLog:"Journal d’action",devLog:"Journal du serveur dev",yes:"Oui",no:"Non",actionFailed:"Échec de l’action",nodeEnvironmentMissing:"Node/npm n’a pas été détecté. Installez Node.js puis réessayez.",prepareSuccess:"Code de prévisualisation prêt",installSuccess:"Dépendances installées",startSuccess:"Prévisualisation terminée",stopSuccess:"Prévisualisation arrêtée"},codingAgents:{title:"Agents de code",notice:"Tous les fournisseurs et modèles ne sont pas compatibles.",claudeDescription:"CLI Anthropic pour les tâches ponctuelles en print mode et les sessions de code interactives.",codexDescription:"CLI OpenAI et flux fournisseur Hermes openai-codex pour les tâches de dépôt.",copyCommand:"Copier",commandCopied:"Commande copiée",commandCopyFailed:"Échec de la copie",refresh:"Actualiser",checking:"Vérification",installStatus:"État d’installation",installed:"Installé",notInstalled:"Non installé",installRequired:"{agent} n’est pas installé. Installez-le avant de créer une session.",installNow:"Installer",installing:"Installation",installSuccess:"Installé",installFailed:"Échec de l’installation",installFailedHermesHint:"L’installation a échoué. Demandez à Hermes de l’installer pour vous.",installFailureReason:"Raison",nodeEnvironmentMissing:"Node/npm n’a pas été détecté. Installez Node.js puis réessayez.",deleteNow:"Supprimer",deleting:"Suppression",deleteSuccess:"Supprimé",deleteFailed:"Échec de la suppression",configFiles:"Fichiers de configuration",profileScope:"Profil",providerScope:"Fournisseur",providerPlaceholder:"ex. custom:glm",modelScope:"Modèle",modelPlaceholder:"Sélectionner un modèle",launchModeScope:"Mode de lancement",launchModeGlobal:"Configuration globale",launchModeScoped:"Fournisseur et modèle",protocolScope:"Protocole",protocolOpenAiChat:"OpenAI Chat Completions (/v1/chat/completions)",protocolOpenAiResponses:"OpenAI Responses (/v1/responses)",protocolAnthropicMessages:"Anthropic Messages (/v1/messages)",reloadConfig:"Recharger la configuration",configFileNotCreated:"Non créé",configLoadFailed:"Impossible de lire le fichier de configuration",loadFailed:"Impossible d’inspecter les agents de code",launch:"Lancer",launchTitle:"Lancer l’agent de code",nativeTerminal:"Terminal natif",builtInTerminal:"Terminal intégré",launchPrepared:"Configuration de lancement prête",launchPrepareFailed:"Échec de la préparation du lancement",nativeLaunchStarted:"Terminal natif ouvert",nativeLaunchFailed:"Impossible d’ouvrir le terminal natif",terminalTitle:"Terminal de l’agent de code",loadProvidersFailed:"Impossible de charger les fournisseurs du profil actuel",selectProviderModel:"Sélectionnez un fournisseur et un modèle",launchConfigDir:"Dossier de configuration de lancement",launchCommand:"Commande de lancement",table:{tool:"Outil",kind:"Étape",command:"Commande",note:"Note",action:"Action"},kinds:{install:"Installer",auth:"Auth",health:"Santé",run:"Exécuter"},notes:{claudeInstall:"Installe la CLI Claude Code globalement.",codexInstall:"Installe la CLI Codex globalement.",claudeAuth:"Vérifie l’état de connexion Claude Code ; exécutez claude une fois si la connexion manque.",codexAuth:"Ajoute les identifiants OAuth OpenAI Codex gérés par Hermes.",claudeHealth:"Vérifie le programme de mise à jour et l’état de la CLI locale.",codexHealth:"Confirme que la CLI Codex est disponible dans PATH.",claudeRun:"Print mode est le chemin le plus propre pour les tâches ponctuelles pilotées par API.",codexRun:"Les tâches ponctuelles Codex doivent s’exécuter dans un dépôt git."}},platform:{requireMention:"Exiger une mention {'@'}",requireMentionGroup:"Exiger une mention {'@'} dans les groupes pour repondre",requireMentionChannel:"Exiger une mention {'@'} dans les canaux pour repondre",requireMentionRoom:"Exiger une mention {'@'} dans les salles pour repondre",reactions:"Réactions",reactionsHint:"Reagir aux messages avec des emoji",freeResponseChats:"Discussions en reponse libre",freeResponseChatsHint:"ID de discussions repondant sans mention {'@'} (separes par des virgules)",freeResponseChannels:"Canaux en reponse libre",freeResponseChannelsHint:"ID de canaux repondant sans mention {'@'} (separes par des virgules)",freeResponseRooms:"Salles en reponse libre",freeResponseRoomsHint:"ID de salles repondant sans mention {'@'} (separes par des virgules)",mentionPatterns:"Motifs de mention personnalises",mentionPatternsHint:"Motifs de declenchement supplementaires",autoThread:"Fil automatique",autoThreadHint:"Creer automatiquement des fils de reponse apres une mention {'@'}",autoThreadHintRoom:"Creer automatiquement des fils de reponse dans les salles",dmMentionThreads:"Fils de mention en MP",dmMentionThreadsHint:"Utiliser des fils de reponse pour les mentions en MP",allowBots:"Autoriser les messages de bots",allowBotsHint:"Repondre aux messages d'autres bots",allowedChannels:"Canaux autorises",allowedChannelsHint:"Liste blanche des ID de canaux (separes par des virgules)",ignoredChannels:"Canaux ignores",ignoredChannelsHint:"Canaux ou le bot ne repond jamais (separes par des virgules)",noThreadChannels:"Canaux sans fil",noThreadChannelsHint:"Canaux ou le bot repond sans fil (separes par des virgules)",exclusiveTokenWarning:"Cette plateforme utilise un verrou de jeton exclusif. Chaque profil doit utiliser un jeton d'identite different pour eviter les conflits avec les autres profils.",clearCredentials:"Effacer les identifiants",clearCredentialsConfirm:"Effacer les identifiants enregistrés de « {name} » ? Le comportement du canal et les contrôles d’accès seront conservés.",credentialsCleared:"Identifiants du canal effacés",clearCredentialsFailed:"Échec de l’effacement des identifiants du canal",clearCredentialsUnsaved:"Enregistrez ou abandonnez les modifications non enregistrées du canal avant d’effacer les identifiants.",clearCredentialsGatewayRestartFailed:"Les identifiants ont été effacés, mais la passerelle n’a pas pu redémarrer automatiquement.",clearCredentialsGatewayRestartDisabled:"Les identifiants ont été effacés, mais le redémarrage automatique de la passerelle est désactivé. Redémarrez-la manuellement.",botToken:"Jeton de bot",botTokenHint:"Jeton de bot depuis le portail developpeur",proxyUrl:"URL du proxy",proxyUrlHint:"Proxy optionnel pour cette plateforme. Prend en charge http://, https:// et socks5://",accessToken:"Jeton d'acces",accessTokenHint:"Jeton d'acces Matrix",homeserver:"URL du serveur domestique",homeserverHint:"URL du serveur domestique Matrix",matrixUserId:"ID utilisateur Matrix",matrixUserIdHint:"Requis avec le mot de passe, facultatif avec le jeton",matrixPassword:"Mot de passe Matrix",matrixPasswordHint:"Alternative au jeton d'acces",appId:"ID de l'application",appIdHint:"ID de l'application Feishu",appSecret:"Secret de l'application",appSecretHint:"Secret de l'application Feishu",encryptKey:"Clé de chiffrement",encryptKeyHint:"Clé de chiffrement Feishu",verificationToken:"Jeton de vérification",verificationTokenHint:"Jeton de vérification Feishu",clientId:"ID client",clientIdHint:"ID client DingTalk",clientSecret:"Secret client",clientSecretHint:"Secret client DingTalk",cardTemplateId:"ID du modèle de carte IA",cardTemplateIdHint:"ID du modèle de carte IA DingTalk ; laisser vide pour désactiver les cartes IA",botId:"ID du bot",botIdHint:"ID du bot WeCom",wecomSecretHint:"Secret du bot WeCom",waEnabled:"Activer WhatsApp",waEnabledHint:"Activer WhatsApp via appairage par code QR",weixinToken:"Jeton Weixin",weixinTokenHint:"Depuis la connexion QR de la CLI weixin (hermes weixin)",accountId:"ID de compte",accountIdHint:"ID du compte Weixin",qrLogin:"Connexion QR",qrRelogin:"Reconnexion",qrFetching:"Recuperation du code QR...",qrScanHint:"Scannez avec WeChat pour vous connecter",qrScanedHint:"Scanne, veuillez confirmer sur le telephone...",qqSandboxHint:"Activer l’environnement sandbox (pour les tests)",qqSandbox:"Mode sandbox",qqQrScanHint:"Scannez le QR code avec QQ ou ouvrez le lien sur téléphone pour terminer l’association",qqMarkdownHint:"Activer les messages au format Markdown (certains clients peuvent ne pas le prendre en charge)",qqMarkdown:"Support Markdown",qqAppSecretHint:"App Secret du bot QQ Open Platform",qqAppSecret:"App Secret",qqAppIdHint:"App ID du bot QQ Open Platform",qqAppId:"App ID",allowedUsersHint:"Liste blanche d’ID utilisateur ou OpenID, séparés par des virgules",allowedUsers:"Utilisateurs autorisés",allowAllUsersHint:"Autoriser les messages de tout utilisateur ; désactivez pour utiliser la liste blanche",allowAllUsers:"Autoriser tous les utilisateurs"},language:{label:"Langue",zh:"中文",en:"English",fr:"Francais"},terminal:{sessions:"Sessions",newTab:"Nouveau terminal",closeSession:"Fermer cette session ?",sessionExited:"Terminee",processExited:"Processus termine avec le code {code}",noSessions:"Aucune session terminal",connectionFailed:"Connexion au terminal impossible",connectionError:"Erreur de connexion",connectionClosed:"Connexion fermée"},usage:{title:"Statistiques d'utilisation",refresh:"Actualiser",totalTokens:"Total des jetons",inputTokens:"Entree",outputTokens:"Sortie",totalSessions:"Total des sessions",avgPerDay:"~{n}/jour en moy.",estimatedCost:"Cout est.",cacheHitRate:"Taux de succes du cache",modelBreakdown:"Repartition par modele",agentBreakdown:"Repartition par agent",agents:{hermes:"Hermes Agent",claudeCode:"Claude Code",codex:"Codex",ekkoAgent:"Ekko Agent",unknown:"Inconnu"},dailyTrend:"Utilisation quotidienne",date:"Date",tokens:"Jetons",cache:"Cache",cacheRead:"Lecture cache",cacheWrite:"Écriture cache",sessions:"Sessions",cost:"Cout",noData:"Aucune donnee d'utilisation"},skillsUsage:{title:"Utilisation des compétences",subtitle:"Suivre les chargements et modifications de compétences dans les sessions Hermes",refresh:"Actualiser",periodSelector:"Période d'utilisation des compétences",periodLabel:"{days} j",summary:"Résumé",totalActions:"Act.",loads:"Charg.",edits:"Modif.",distinctSkills:"Comp.",topSkills:"Top comp.",dailyTrend:"Tendance",periodSummary:"{days} derniers jours",skill:"Comp.",share:"%",lastUsed:"Dern. usage",noData:"Aucune donnée d'utilisation des compétences",loadFailed:"Impossible de charger l'utilisation des compétences",otherSkills:"Autres comp."},workflow:{title:"Workflow",profile:"Profil",namePlaceholder:"Nom du Workflow",canvasAriaLabel:"Canevas du Workflow",workspace:{title:"Sélectionner un espace de travail",select:"Sélectionner un espace de travail",clear:"Effacer l’espace de travail"},actions:{newWorkflow:"Nouveau Workflow",addNode:"Ajouter un nœud",createWorkflowFirst:"Créez d’abord un Workflow",reset:"Réinitialiser",startExecution:"Démarrer l’exécution",executionPending:"L’exécution du Workflow n’est pas encore connectée",executionStarted:"Exécution du Workflow démarrée",executionCompleted:"Exécution du Workflow terminée",executionFailed:"Échec de l’exécution du Workflow",rerunDownstreamKeepNode:"Conserver ce nœud et exécuter la suite",rerunDownstreamClearNode:"Effacer ce nœud et exécuter la suite",rerunDownstreamStarted:"Réexécution de la suite démarrée",rerunFromNodeStarted:"Réexécution démarrée depuis ce nœud",rerunFailed:"Échec de la réexécution du Workflow",deleteNode:"Supprimer le nœud",deleteEdge:"Supprimer la connexion",editEdge:"Modifier la connexion",undo:"Annuler",importWorkflow:"Importer le Workflow",exportWorkflow:"Exporter le Workflow",imported:"Workflow importé",exported:"Workflow exporté",importFailed:"Échec de l’import du Workflow",exportFailed:"Échec de l’export du Workflow"},batch:{toggle:"Sélection multiple",selectAll:"Tout sélectionner",confirmDelete:"Supprimer les {count} Workflows sélectionnés ?",deleteSuccess:"{count} Workflows supprimés",deletePartial:"Échec de la suppression de {failed} Workflows",deleteFailed:"Échec de la suppression multiple"},validation:{nodesRequired:"Ajoutez au moins un nœud",nodeNameRequired:"Le nœud {node} doit avoir un nom",providerRequired:"Le nœud {node} doit avoir un fournisseur",modelRequired:"Le nœud {node} doit avoir un modèle",apiModeRequired:"Le nœud {node} doit avoir un mode API",inputRequired:"Le nœud {node} doit avoir une entrée",invalidEdge:"Une connexion fait référence à un nœud absent",invalidConnectionDirection:"Les connexions doivent aller de la sortie droite vers l’entrée gauche",orphanNode:"Le nœud {node} n’est pas connecté au Workflow",disconnectedFlow:"Le Workflow ne peut pas être divisé en plusieurs flux déconnectés",cycle:"Le Workflow contient un cycle. Modifiez les connexions avant d’enregistrer."},stats:{nodes:"nœuds",edges:"connexions"},runs:{title:"Historique des exécutions",refresh:"Actualiser",empty:"Aucune exécution",startNodes:"{count} nœuds de départ",snapshotIndicator:"Instantané immuable au lancement de cette exécution",show:"Afficher l’historique",hide:"Masquer l’historique",nodeSessionTitle:"Session du nœud – {node}",noNodeSession:"Ce nœud n’a pas encore de session enregistrée",loadNodeSessionFailed:"Impossible de charger la session du nœud",stop:"Arrêter l’exécution",stopRequested:"Arrêt demandé",stopFailed:"Impossible d’arrêter l’exécution",delete:"Supprimer l’entrée",deleteSuccess:"Entrée d’exécution supprimée"},inspector:{selected:"Nœud sélectionné",none:"Aucun nœud sélectionné"},agents:{planner:"Planificateur",researcher:"Chercheur",builder:"Réalisateur",reviewer:"Réviseur"},models:{default:"Modèle par défaut",fast:"Modèle rapide",reasoning:"Modèle de raisonnement"},initialNodes:{node1:"Nœud 1",node2:"Nœud 2",node3:"Nœud 3",plan:"Planifier",execute:"Exécuter",review:"Réviser"},initialPrompts:{node1:"Saisissez l’entrée de ce nœud.",node2:"Saisissez l’entrée de ce nœud.",node3:"Saisissez l’entrée de ce nœud.",plan:"Décomposez la demande en étapes réalisables.",execute:"Exécutez les étapes de mise en œuvre et produisez les livrables.",review:"Évaluez la qualité du résultat et identifiez les actions de suivi."},newNodeTitle:"Nœud {count}",schedule:{title:"Planifications de workflow",manage:"Gérer les planifications",createTitle:"Créer une planification",editTitle:"Modifier la planification",create:"Créer une planification",save:"Enregistrer la planification",edit:"Modifier la planification",delete:"Supprimer la planification",deleteConfirm:"Supprimer cette planification ?",deleted:"Planification supprimée",enable:"Activer la planification",disable:"Désactiver la planification",enabled:"Activée",disabled:"Désactivée",empty:"Aucune planification pour le moment",cron:"Planification Cron",cronPlaceholder:"ex. 0 9 * * * ou {'@'}daily",timezone:"Fuseau horaire",timezonePlaceholder:"Fuseau IANA, ex. Asia/Shanghai",initialInput:"Entrée initiale",initialInputPlaceholder:"Entrée facultative pour chaque exécution planifiée",startNodes:"Nœuds de départ",startNodesPlaceholder:"Nœuds de départ du workflow par défaut",timeout:"Délai total (minutes)",timeoutPlaceholder:"Aucune échéance",policies:"Concurrence : ignorer · Exécutions manquées : ignorer",lastScheduled:"Dernière planification",nextRun:"Prochaine exécution",lastRun:"Dernière exécution",never:"Jamais",loadFailed:"Impossible de charger les planifications",saveFailed:"Impossible d’enregistrer la planification",saved:"Planification enregistrée",deleteFailed:"Impossible de supprimer la planification",required:"La planification Cron et le fuseau horaire sont obligatoires",reset:"Réinitialiser",presets:{hourly:"Toutes les heures",daily:"Tous les jours",weekly:"Toutes les semaines",monthly:"Tous les mois"}},evidence:{historyPage:"Historique des exécutions",detailsPage:"Détails de l’exécution",backToRuns:"Retour à l’historique",resultStatus:"Statut",duration:"Durée",budgetLabel:"Budget",actualExecution:"Exécuté",otherJudgments:"Autres décisions",loopEvents:"Événements de boucle",evaluatedNotExecuted:"Évalué, non exécuté",ariaLabel:"Détails d’exécution du Workflow",title:"Détails d’exécution",count:"{count} éléments",intro:"Affiche les décisions de chemin, les passages de boucle et les nœuds exceptionnels de cette exécution.",empty:"Aucun détail d’exécution",loadFailed:"Impossible de charger les détails d’exécution enregistrés",summaryTitle:"Résultat de l’exécution",blockedAt:"Bloqué à {gate}",actualPath:"Chemin réellement suivi",noActualPath:"Aucun chemin utilisé",pathChecks:"Décisions de chemin",selectedPaths:"Chemins utilisés",otherPaths:"Autres décisions et événements",selectedCount:"{count} utilisés",otherCount:"{count} non utilisés",eventCount:"{count} événements",showOtherPaths:"Afficher les autres détails ({count})",hideOtherPaths:"Masquer les autres détails",runDetails:"Détails de l’exécution",actualPathSteps:"Étapes du chemin réel",nodeBudgetDetails:"Détails du budget temps",condition:"Condition",conditionMatched:"Correspond",conditionNotMatched:"Ne correspond pas",sourceOutcome:"Résultat du nœud",sourceReturned:"Réponse normale",sourceFailed:"Échec d’exécution",sourceSkippedStatus:"Non exécuté",checkedData:"Données vérifiées",entireReplyText:"Texte complet de la réponse",errorText:"Texte de l’erreur",jsonFieldValue:"Valeur d’un champ JSON",advancedPathValue:"Valeur du chemin avancé",comparison:"Comparaison",textToFind:"Texte à rechercher",expectedFieldValue:"Valeur attendue du champ",parsedBusinessDecision:"Décision métier interprétée",failedGateLabel:"Étape en échec (valeur du champ failed_gate)",failedGateValue:"Étape en échec (valeur du champ failed_gate) : {gate}",decisions:{blocked:"Bloqué",released:"Publié",verified:"Vérifié",skipped:"Aucune action nécessaire"},node:"Nœud exceptionnel",edge:"Chemin",loop:"Boucle",unknownNode:"Nœud inconnu",pathTitle:"{source} → {target}",loopPass:"Passage de boucle {count}",exceptionalNode:"Ce nœud ne s’est pas terminé normalement.",loopPassNamed:"{node} · passage {count}",technical:"Informations techniques",recordId:"ID d’enregistrement",sequence:"Séquence",rawStatus:"Statut brut",rawRoute:"Route",rawReason:"Raison",iterationPath:"Chemin d’itération",expectedValue:"Résultat attendu",actualValue:"Résultat réel de l’étape précédente",judgmentDetails:"Décision de la connexion",connectionResult:"Résultat de cette connexion",appliesWhen:"Utilisée lorsque",explanation:"Explication",technicalStatus:{pathUsed:"Cette connexion a été utilisée",pathNotUsed:"Cette connexion n’a pas été utilisée"},technicalRoute:{success:"Uniquement si le nœud précédent répond normalement",failure:"Uniquement si l’exécution du nœud précédent échoue",always:"Quel que soit le résultat du nœud précédent"},technicalReason:{conditionNotMatched:"La réponse précédente ne satisfait pas la condition de cette connexion."},statuses:{taken:"Utilisé",notTaken:"Non utilisé",evaluationFailed:"Échec de l’évaluation",timedOut:"Délai dépassé",blocked:"Bloqué"},routes:{success:"Poursuite après succès",failure:"Poursuite après échec",always:"Poursuite quel que soit le résultat"},reasons:{evaluationFailed:"Échec de l’évaluation du chemin",conditionNotMatched:"La condition ne correspond pas",iterationLimitReached:"Nombre maximal de passages atteint",routeNotMatched:"La route ne correspond pas",pathSelected:"Ce chemin a été utilisé.",pathEvaluatedNotUsed:"Cette connexion a été évaluée comme candidate, mais aucun nœud cible ne l’a consommée.",sourceSkipped:"Le nœud source n’a pas été exécuté ; ce chemin ne faisait donc pas partie de cette exécution.",failureRouteAfterSuccess:"Le nœud source a répondu normalement ; ce chemin ne sert qu’en cas d’échec d’exécution.",successRouteAfterFailure:"Le nœud source a échoué ; ce chemin ne sert qu’après une réponse normale.",businessBlocked:"« {source} » a arrêté le Workflow ({decision}) : {reason}. « {target} » n’a donc pas été exécuté.",businessBlockedWithCondition:"« {source} » a arrêté le Workflow ({decision}) : {reason}. La poursuite nécessitait « {expected} », mais le résultat précédent était « {actual} ». « {target} » n’a donc pas été exécuté.",conditionMismatchDetail:"La poursuite nécessitait « {expected} », mais le résultat précédent était « {actual} ». « {target} » n’a donc pas été exécuté."},loopOutcomes:{continued:"Condition satisfaite ; passage suivant",iterationLimitReached:"Arrêt au nombre maximal de passages",conditionNotMatched:"Arrêt car la condition ne correspond pas",finished:"Boucle terminée"}},budget:{runTitle:"Choisir le budget temporel du Run",rerunTitle:"Choisir le budget temporel du Rerun",totalLabel:"Budget total du Run",customMinutes:"Minutes personnalisées",customPlaceholder:"Minutes",invalidCustom:"Le budget personnalisé doit être compris entre 0,1 et 1440 minutes",help:"Il s’agit d’une échéance absolue partagée par tout le Run. Chaque nœud ne reçoit que le temps restant et les boucles ne réinitialisent pas le budget.",options:{unlimited:"Aucune échéance",30:"30 minutes",60:"60 minutes",90:"90 minutes",custom:"Personnalisé"},unlimitedSummary:"Aucune échéance",unlimitedHelp:"Ce Run n’a aucune échéance temporelle configurée.",summary:"Total {total} · Écoulé {elapsed} · Restant {remaining}",deadline:"Échéance : {deadline}",nodeStartRemaining:"Budget total restant au démarrage du nœud : {remaining}"},edgeEditor:{title:"Modifier la connexion",guideIntro:"Choisissez d’abord le résultat requis du nœud source. Ensuite, n’inspectez pas la réponse, vérifiez littéralement tout son texte ou comparez la valeur d’un champ JSON analysé.",connectionSummary:"{source} → {target}",selfLoopDescription:"« {node} » s’exécutera de nouveau lui-même.",continueAfter:"Continuer après",optionalCheck:"Contrôle de contenu facultatif",runTarget:"Puis",runTargetAction:"Exécuter {target}",noContentCheck:"Ne pas inspecter la réponse",sourceResultStep:"1. Résultat du nœud source",replyDataStep:"2. Données de réponse à vérifier",nextStep:"3. Puis",replyDataQuestion:"Quelles données de la réponse faut-il vérifier ?",requiredSourceResult:"Résultat requis du nœud source",loopSummary:"Retour à {target}",loopScope:"Nœuds de la boucle : {nodes}",historyLabel:"Libellé d’historique (facultatif)",advancedSettings:"Paramètres avancés",historyNode:"Nœud affiché dans l’historique",historyNodePlaceholder:"Sélectionner un nom de nœud",continueWhen:"Continuer lorsque",compareUsing:"Comparer avec",expectedType:"Type de la valeur attendue",expectedValue:"Valeur attendue",routeChoices:{success:"Réponse normale de la source",failure:"Échec de la source",always:"L’un ou l’autre résultat"},operatorChoices:{equals:"Égal à",not_equals:"Différent de",contains:"Contient",not_contains:"Ne contient pas",exists:"Existe",not_exists:"N’existe pas",greater_than:"Supérieur à",greater_than_or_equal:"Supérieur ou égal",less_than:"Inférieur à",less_than_or_equal:"Inférieur ou égal",in:"Dans la liste",not_in:"Absent de la liste"},loopMissingForwardPath:"Cette connexion de retour n’a aucun chemin direct à répéter.",loopNotNatural:"Cette boucle possède une autre entrée et ne peut donc pas se répéter de façon prévisible.",loopDuplicateScope:"Deux connexions de retour définissent les mêmes nœuds de boucle.",loopPartialOverlap:"Les boucles peuvent être séparées ou imbriquées, mais pas se chevaucher partiellement.",loopDuplicateHistoryLabel:"Chaque libellé d’historique de boucle doit être unique.",route:"Route",routes:{success:"Succès uniquement (success)",failure:"Échec uniquement (failure)",always:"Toujours (always)"},routeHelp:"Le résultat du nœud source est vérifié en premier ; une condition présente doit aussi correspondre.",routeExample:"Exemple : success pour le flux normal, failure pour les erreurs, always pour le nettoyage.",conditionPath:"Que doit vérifier cette connexion ?",conditionPathPlaceholder:"Chemin avancé, par exemple output",conditionPathOptions:{routeOnly:"Ne pas inspecter la réponse",outputRecommended:"Texte complet de la réponse réussie (output, recommandé)",output:"Texte complet de la réponse réussie (output)",outputJson:"Valeur d’un champ JSON (outputJson.*)",errorRecommended:"Texte complet de l’erreur (error, recommandé)",error:"Texte complet de l’erreur (error)",custom:"Chemin de données avancé"},structuredOutputPathPlaceholder:"Chemin du champ JSON, par exemple outputJson.route_token",structuredOutputHelp:"Analyse une réponse JSON complète ou exactement un bloc fenced json. Si le JSON manque, est invalide ou comporte plusieurs blocs, outputJson reste indisponible et la condition ne correspond pas.",conditionPathHelp:{success:"Pour success, output est recommandé. Choisissez « Route seule » si le contenu importe peu.",failure:"Pour failure, error est recommandé. Choisissez « Route seule » si le texte d’erreur importe peu.",always:"Utilisez output pour les succès ou error pour les échecs ; « Route seule » ignore le contenu."},operator:"Opérateur",operators:{equals:"Égal (equals)",not_equals:"Différent (not_equals)",contains:"Contient (contains)",not_contains:"Ne contient pas (not_contains)",exists:"Existe (exists)",not_exists:"N’existe pas (not_exists)",greater_than:"Supérieur à (greater_than)",greater_than_or_equal:"Supérieur ou égal (greater_than_or_equal)",less_than:"Inférieur à (less_than)",less_than_or_equal:"Inférieur ou égal (less_than_or_equal)",in:"Dans la liste (in)",not_in:"Hors de la liste (not_in)"},operatorHelp:{equals:"Valeur et type doivent être strictement identiques.",not_equals:"La valeur ou le type diffère.",contains:"Le texte contient un texte ou le tableau contient l’élément.",not_contains:"Le texte ou tableau ne contient pas l’élément.",exists:"Correspond si le chemin existe ; aucune valeur requise.",not_exists:"Correspond si le chemin manque ; aucune valeur requise.",greater_than:"Les deux côtés doivent être des nombres JSON ; la valeur réelle est supérieure.",greater_than_or_equal:"Les deux côtés doivent être des nombres JSON ; la valeur réelle est supérieure ou égale.",less_than:"Les deux côtés doivent être des nombres JSON ; la valeur réelle est inférieure.",less_than_or_equal:"Les deux côtés doivent être des nombres JSON ; la valeur réelle est inférieure ou égale.",in:"Valeur doit être un tableau JSON contenant la valeur réelle.",not_in:"Valeur doit être un tableau JSON ne contenant pas la valeur réelle."},value:"Valeur",invalidConditionValue:"La valeur de condition doit être un JSON valide",conditionValuePlaceholder:'JSON : "texte", 42, true, ["a"]',valueType:"Type de valeur",valueTypes:{string:"Chaîne",number:"Nombre",boolean:"Booléen",null:"Nul",array:"Tableau",object:"Objet"},valueTypeHelp:"Choisissez comment la valeur est lue et validée. Le type est déduit de la valeur JSON enregistrée et n’est pas stocké séparément.",conditionValuePlaceholders:{string:"Texte, par exemple APPROVED",number:"Nombre, par exemple 42",boolean:"true ou false",null:"null",array:'Tableau JSON, par exemple ["a", 2]',object:`Objet JSON, par exemple {'{'}"status":"ready"{'}'}`},invalidValueTypes:{string:"La valeur doit être du texte.",number:"La valeur doit être un nombre valide.",boolean:"La valeur doit être true ou false.",null:"La valeur doit être null.",array:"La valeur doit être un tableau valide.",object:"La valeur doit être un objet valide."},valueHelp:"Saisissez une valeur du type sélectionné. Les objets et tableaux utilisent JSON ; les chaînes sont saisies sans guillemets JSON.",expectedReplyText:"Texte à rechercher",expectedFieldValue:"Valeur attendue du champ",rawTextValueHelp:"Le texte complet de la réponse est contrôlé littéralement. Avec « Contient », le texte peut apparaître dans une clé ou une valeur JSON ; aucun champ JSON précis n’est consulté.",jsonFieldValueHelp:"La valeur au chemin outputJson indiqué est comparée, pas le nom du champ. Exemple : outputJson.failed_gate est égal à quality-container-setup.",canvasLabel:{withValue:"{subject} {operator} «{value}»",withoutValue:"{subject} {operator}",join:"{route} · {condition}"},conditionSemantics:"Règle réellement vérifiée",rawTextComparisonHelp:"L’opérateur sélectionné est {operator}. Il s’applique au texte complet, pas à un champ JSON. Contient/Ne contient pas peut trouver du texte dans une clé ou une valeur JSON ; Égal/Différent compare la réponse complète à la valeur configurée.",jsonFieldComparisonHelp:"Lit la valeur à {path}. {operator} compare cette value à « {value} » et jamais le nom du champ.",rawTextExistenceHelp:"Vérifie seulement la présence du texte complet, pas l’existence d’une clé JSON.",jsonFieldExistenceHelp:"Vérifie seulement que le champ JSON à {path} existe, sans comparer sa valeur.",rawTextOperatorHelp:{equals:"Correspond uniquement si le texte complet de la réponse est exactement égal à « {value} ». La value d’un champ JSON n’est ni lue ni comparée.",not_equals:"Correspond uniquement si le texte complet de la réponse diffère de « {value} ». La value d’un champ JSON n’est ni lue ni comparée.",contains:"Recherche « {value} » dans tout le texte de la réponse. Le texte peut correspondre dans une JSON key ou une JSON value ; ce n’est pas une recherche de champ JSON.",not_contains:"Correspond uniquement si « {value} » n’apparaît nulle part dans le texte complet, ni dans une JSON key ni dans une JSON value. Ce n’est pas une recherche de champ JSON.",exists:"Correspond lorsque le texte complet de la réponse est disponible. L’existence d’une JSON key n’est pas vérifiée.",not_exists:"Correspond lorsqu’aucun texte complet de réponse n’est disponible. L’absence d’une JSON key n’est pas vérifiée."},jsonFieldOperatorHelp:{equals:"Lit la value du champ à {path}. Correspond uniquement si cette valeur est exactement égale à « {value} » ; le nom du champ n’est jamais comparé.",not_equals:"Lit la value du champ à {path}. Correspond uniquement si cette valeur diffère de « {value} » ; le nom du champ n’est jamais comparé.",contains:"Lit la value du champ à {path} et vérifie si elle contient « {value} » ; le nom du champ n’est jamais recherché.",not_contains:"Lit la value du champ à {path}. Correspond uniquement si elle ne contient pas « {value} » ; le nom du champ n’est jamais recherché.",exists:"Correspond lorsque le champ JSON à {path} existe. La value du champ n’est pas comparée.",not_exists:"Correspond lorsque le champ JSON à {path} est absent. La value du champ n’est pas comparée."},feedback:"Boucle de rétroaction",feedbackHelp:"Marque cette connexion de retour comme boucle bornée. Elle répète seulement si route et condition correspondent.",maxIterations:"Nombre maximal d’itérations",maxIterationsHelp:"Nombre total de passages, de 1 à 100 ; le budget global reste applicable.",invalidIterations:"Le nombre maximal d’itérations doit être un entier de 1 à 100",loopId:"Identité de boucle",loopIdPlaceholder:"Choisir automatique ou saisir un ID",loopIdAutomatic:"Automatique (recommandé) · {id}",loopIdHelp:"Identifie seulement la boucle dans l’historique et ne modifie pas son déclenchement. Gardez automatique sauf besoin avancé.",invalidLoopId:"Format d’ID de boucle invalide"},node:{title:"Nom du nœud",agent:"Agent",model:"Modèle",apiMode:"Mode API",input:"Entrée",approvalRequired:"Approbation après le nœud",join:"Stratégie de jonction",joinAll:"Toutes les routes entrantes",joinAny:"N’importe quelle route entrante",joinAllHelp:"S’exécute seulement si toutes les routes entrantes sont prises ; sinon le nœud est ignoré.",joinAnyHelp:"S’exécute une fois dès la première route prise ; ignoré seulement si aucune ne correspond.",promptPlaceholder:"Décrivez ce que cet agent doit faire...",skillsPlaceholder:"Saisissez une compétence puis appuyez sur Entrée",uploadImages:"Téléverser des images"},status:{idle:"Inactif",queued:"En attente",running:"En cours",pending_approval:"En attente d'approbation",completed:"Terminé",skipped:"Ignoré",failed:"Échec",approval_rejected:"Approbation refusée",canceled:"Annulé"}},groupChat:{agentLinkButton:"Ajouter votre Agent",agentOwner:"Propriétaire : {name}",agentLinkTitle:"Ajouter un Agent à ce salon",agentLinkDescription:"Connectez votre propre service Hermes. Le service établit une connexion sortante chiffrée ; le salon ne reçoit jamais vos identifiants ni l’accès à votre espace de travail.",agentLinkTargetUrl:"URL de votre service Hermes",agentLinkTargetPlaceholder:"http://127.0.0.1:8748 or https://your-hermes.example.com",agentLinkTargetRequired:"Saisissez l’URL d’un service Hermes.",agentLinkInvalidTarget:"Saisissez une origine HTTP ou HTTPS sans identifiants, chemin, paramètres de requête ni fragment.",agentLinkOpenTarget:"Se connecter et choisir un Agent",agentLinkPopupBlocked:"La fenêtre d’autorisation a été bloquée. Autorisez les fenêtres contextuelles pour cette page et réessayez.",agentLinkParentUnavailable:"La fenêtre d’autorisation a perdu la connexion avec la page d’invitation. Fermez-la et recommencez.",agentLinkParentUnconfirmed:"La page d’invitation n’a pas confirmé cette demande. Gardez-la ouverte et relancez l’autorisation.",agentLinkIncompleteConfiguration:"Sélectionnez un Profile, un fournisseur et un modèle complets avant de demander l’accès.",agentLinkWaitingApproval:"En attente de l’approbation de cet Agent par le propriétaire du salon…",agentLinkApproved:"Approuvé. Connexion de votre Agent…",agentLinkConnected:"Votre Agent est connecté au salon.",agentLinkError:"Impossible de connecter cet Agent.",agentLinkRejected:"Le propriétaire du salon a refusé cette demande d’Agent.",agentLinkExpired:"Cette demande d’Agent a expiré. Lancez une nouvelle demande.",agentLinkPairingCode:"Code d’association manuel",agentLinkPairingCodeHint:"Si la fenêtre d’autorisation ne peut pas communiquer avec cette page, collez-y ce code à durée limitée.",agentLinkCopyCode:"Copier le code d’association",agentLinkAuthorizeTitle:"Autoriser l’Agent de discussion de groupe",agentLinkAuthorizeDescription:"Choisissez un Agent local à connecter. Le groupe peut lui envoyer des messages, mais ne peut pas parcourir votre espace de travail local.",agentLinkSelectAgent:"Agent",agentLinkRequestConnection:"Demander la connexion",agentLinkOrPairingCode:"ou utiliser un code d’association manuel",agentLinkPairingCodePlaceholder:"Collez un code d’association HGC1",agentLinkConnect:"Connecter l’Agent",agentLinkSecurityHint:"N’approuvez que les salons que vous reconnaissez. Les tickets d’association sont à usage unique et expirent rapidement.",agentLinkLoadFailed:"Impossible de charger les Agents locaux.",agentLinkConnectFailed:"Impossible de connecter l’Agent sélectionné.",agentLinkInvalidPairingCode:"Ce code d’association est invalide.",agentLinkClose:"Fermer",agentLinkApprovalMismatch:"La demande de connexion a changé après votre approbation. Vérifiez l’Agent et réessayez.",guestAgentsDisabled:"Le propriétaire du salon n’a pas activé les Agents invités.",guestAgentSettings:"Connexions des Agents invités",allowGuestAgents:"Autoriser les membres à ajouter leurs propres Agents",maxGuestAgentsPerMember:"Nombre maximal d’Agents par membre",ownerApprovalHint:"Chaque Agent nécessite toujours l’approbation explicite du propriétaire du salon.",allowRemoteWorkspaceAccess:"Autoriser les Agents distants à lire et écrire dans l’espace de travail du groupe",remoteWorkspaceAccessHint:"Une fois activé, chaque Agent distant approuvé reçoit un accès temporaire par exécution. Les fichiers sensibles et les chemins externes restent bloqués.",agentPairingRequestTitle:"Demande de connexion d’un Agent",agentPairingRequestDescription:"{user} souhaite connecter un Agent depuis {origin}.",approveAgent:"Approuver l’Agent",rejectAgent:"Refuser",agentPairingApproved:"Connexion de l’Agent approuvée",agentPairingRejected:"Connexion de l’Agent refusée",emptyState:"Démarrer une conversation de groupe",title:"Chat de groupe",refactorNoticeTitle:"Mise à jour du chat de groupe",refactorNoticeMessage:"Le chat de groupe a été profondément remanié. Si vous ne pouvez plus discuter dans une salle, veuillez en créer une nouvelle.",createRoom:"Créer un salon",joinByCode:"Rejoindre avec un code",shareTitle:"Rejoindre la conversation",shareSubtitle:"Saisissez le code d’invitation pour participer, sans connexion à un compte.",shareCodeHint:"Cette invitation donne uniquement accès au salon de discussion associé.",shareInvalidCode:"Ce code est invalide ou a été modifié. Demandez un nouveau lien à la personne qui l’a partagé.",shareJoining:"Connexion au chat de groupe…",shareNameSubtitle:"Choisissez un nom avant d’entrer dans le salon.",shareNameConflict:"Ce nom est déjà utilisé dans ce salon. Choisissez-en un autre.",shareNameReserved:"Ce nom est réservé. Choisissez-en un autre.",shareEnterRoom:"Entrer dans le salon",roomName:"Nom du salon",roomNamePlaceholder:"Saisissez le nom du salon",inviteCode:"Code d’invitation",autoGenerate:"Générer automatiquement",noRooms:"Aucun salon pour le moment",localRooms:"Local",remoteRooms:"Distant",remoteRoomOffline:"La connexion distante est hors ligne.",renameRemoteRoom:"Renommer le salon distant",renameRemoteRoomHint:"Cela modifie uniquement le nom affiché sur cet appareil.",remoteRoomRenamed:"Nom d’affichage du salon distant mis à jour",remoteRoomRenameFailed:"Impossible de mettre à jour le nom d’affichage du salon distant",leaveRemoteRoom:"Quitter le salon",leaveRemoteRoomConfirm:"Quitter « {name} » ? Tous les Agents connectés depuis cet appareil seront retirés du salon distant et les connexions locales seront supprimées.",remoteRoomLeft:"Salon distant quitté",remoteRoomLeaveFailed:"Impossible de quitter le salon distant",remoteRoomLeavePartial:"Les données locales ont été supprimées, mais {count} connexion(s) Agent n’ont pas pu être notifiées car le salon distant était hors ligne.",selectOrCreate:"Sélectionnez ou créez un salon pour commencer à discuter",agents:"Agents",allAgents:"Tous les Agents",addAgent:"Ajouter un agent",agentType:"Agent",agentTypes:{hermes:"Hermes",ekko:"Ekko",codex:"Codex",claude:"Claude"},selectProfile:"Sélectionner un Profile",agentAdded:"Agent ajouté",selectRoomFirst:"Sélectionnez d’abord un salon",agentAlreadyInRoom:"Cet agent est déjà dans le salon",agentAddFailedCount:"{count} agent(s) n’ont pas été ajoutés : {details}",editAgentTitle:"Modifier {name}",removeMember:"Exclure",memberRemoved:"{name} a été exclu du salon",memberRemovedNotice:"Le propriétaire vous a exclu de ce salon. Vous pouvez revenir tant que l’invitation reste valide.",noAgents:"Aucun agent dans ce salon",members:"{count} membres",roomCreated:"Salon créé",roomDeleted:"Salon supprimé",roomCloned:"Salon dupliqué",cloneRoom:"Dupliquer le salon",copyRoomLink:"Copier le lien du salon",manualCopyRoomLinkHint:"Le navigateur n’a pas pu copier automatiquement. Sélectionnez le lien et copiez-le manuellement.",deleteRoomConfirm:"Supprimer ce salon ?",clearContext:"Effacer le contexte",clearContextConfirm:"Effacer le contexte de ce salon ? Les messages et instantanés de compression seront supprimés, mais les agents et les membres seront conservés.",contextCleared:"Contexte effacé",you:"Vous",joined:"Salon rejoint",joinFailed:"Impossible de rejoindre le salon",inputPlaceholder:"Saisissez un message... (Entrée pour envoyer)",messageDisplayLimit:"Le chat de groupe affiche jusqu’à 600 messages",enterCode:"Saisissez le code d’invitation",yourName:"Votre nom",yourNamePlaceholder:"Saisissez votre nom d’affichage",yourDescription:"Description (facultatif)",yourDescriptionPlaceholder:"Présentez-vous...",agentName:"Nom de l’agent",agentNamePlaceholder:"Nom personnalisé (vide pour utiliser le nom du Profile)",agentDesc:"Description de l’agent",agentDescPlaceholder:"Décrivez le rôle de cet agent...",agentReplying:"répond...",agentCompressing:"compresse le contexte...",compressionSettings:"Paramètres de compression",triggerTokens:"Seuil de tokens",triggerTokensDesc:"Seuil de tokens déclenchant la compression du contexte",maxHistoryTokens:"Tokens d’historique maximum",maxHistoryTokensDesc:"Nombre maximal de tokens du contexte compressé envoyé au LLM",tailMessageCount:"Messages récents conservés",tailMessageCountDesc:"Nombre de messages récents conservés tels quels après compression",compressionConfig:"Configuration de la compression",compressionSaved:"Configuration de compression enregistrée",roomSettings:"Paramètres du salon",inviteCodeSettings:"Paramètres du code d’invitation",inviteCodePlaceholder:"Saisir un nouveau code d’invitation",generateInviteCode:"Générer un code d’invitation",inviteCodeRotateHint:"La mise à jour invalide l’ancien code pour les nouvelles arrivées.",inviteCodeUpdated:"Code d’invitation mis à jour",inviteCodeUpdateFailed:"Échec de la mise à jour du code d’invitation",saveCompression:"Enregistrer la compression",compressNow:"Compresser maintenant",compressingInProgress:"Compression en cours, veuillez patienter",summarySettings:"Résumé continu",summarySettingsDesc:"Un Ekko Agent propre met à jour le résumé partagé après un nombre fixe de tours humains.",summaryProvider:"Fournisseur du résumé",summaryProviderPlaceholder:"Choisir un fournisseur",summaryModel:"Modèle du résumé",summaryModelPlaceholder:"Choisir un modèle",summaryApiMode:"Mode API",summaryEveryTurns:"Résumer tous les N tours",summaryEveryTurnsDesc:"Un tour correspond à un message humain.",summaryConfigSaved:"Paramètres du résumé enregistrés",summaryConfigurationRequired:"Aucun outil de résumé n’est configuré pour ce salon. Sélectionnez un profil, un fournisseur, un modèle et un mode API, puis enregistrez.",summaryConfigurationOwnerRequired:"Aucun outil de résumé n’est configuré pour ce salon. Demandez à un administrateur de le configurer avant d’envoyer des messages.",saveSummaryConfig:"Enregistrer les paramètres",currentSummary:"Résumé actuel",summaryStatus:{idle:"En attente",summarizing:"Résumé en cours",success:"Réussi",failed:"Échec"},summaryUpdatedAt:"Dernière mise à jour",summarizedTurns:"Tours résumés",summaryAnchor:"Ancre du résumé",summaryMessagesAbove:"Messages ci-dessus résumés",summaryNoAnchor:"Aucune ancre",summaryContent:"Contenu du résumé",summaryEmpty:"Aucun résumé pour le moment",summaryEditKeepsAnchor:"Modifier le texte conserve l’ancre actuelle.",saveSummary:"Enregistrer le résumé",summaryUpdated:"Résumé mis à jour",summaryNever:"Jamais",summaryLoadFailed:"Impossible de charger le résumé de la salle"},files:{attachToChat:"Ajouter au chat",attachFailed:"Impossible d’ajouter le fichier au chat",previewMode:"Aperçu",sourceMode:"Source",tableMode:"Tableau",worksheet:"Feuille",htmlPreviewTitle:"Aperçu HTML isolé",previewLoading:"Chargement de l’aperçu...",previewFailed:"Aperçu indisponible",previewMimeMismatch:"Le type du fichier ne correspond pas au format d’aperçu.",downloadInstead:"Télécharger à la place",previousPage:"Précédente",nextPage:"Suivante",pageStatus:"Page {page} sur {total}",zoom:"Zoom",pdfPageLimit:"Seules les {count} premières pages sont affichées.",tableTruncated:"L’aperçu a été limité. Téléchargez le fichier pour voir toutes les lignes et colonnes."},changelog:{new_0_6_40_1:"Cette version couvre les 40 PR fusionnées depuis v0.6.39 : salons de groupe distants sécurisés, reconnaissance vocale locale, planification Workflow, approbations globales, webhooks Chat Run, MCU et fiabilité de Coding Agent",new_0_6_40_2:"Le chat de groupe ajoute des salons partagés sécurisés et des Agents distants, stabilise le transfert, la présence et la révocation des Agents, conserve les avatars des propriétaires hors ligne et permet de copier manuellement le lien du salon sans API de presse-papiers (#2408, #2410, #2411, #2415, #2423)",new_0_6_40_3:"Les Agents distants peuvent transférer des fichiers et les envoyer vers des workspaces cloud. Les requêtes de non-propriétaires respectent des limites renforcées pour le workspace, les informations sensibles et la mémoire privée, avec un routage corrigé de la propriété et des approbations (#2413, #2430, #2433, #2435)",new_0_6_40_4:"Le chat de groupe cesse de migrer les anciens Agent Links et sépare les listes repliables de salons locaux et distants, avec alias local, accès à la page de partage et nettoyage complet à la sortie (#2424, #2459)",new_0_6_40_5:"L’historique du chat de groupe n’est plus élagué automatiquement. Les résultats d’outils contenant des mentions sont persistés avec des identifiants bornés, et les outils orphelins, l’alignement et le routage des approbations ainsi que le blocage de la boucle par le comptage des tokens sont corrigés (#2390, #2420, #2426, #2427, #2429, #2445)",new_0_6_40_6:"Les retours sur les sessions récentes et l’activité du chat de groupe sont plus immédiats, et le panneau d’outils se déploie avec une animation fluide (#2389, #2414)",new_0_6_40_7:"Les approbations globales peuvent reprendre des demandes existantes, afficher un aperçu de commande plus clair et envoyer des notifications système pour les actions en attente (#2406, #2425, #2432)",new_0_6_40_8:"Un STT local chinois-anglais en streaming basé sur sherpa-onnx conserve les derniers mots grâce à un silence final et utilise des tampons audio compatibles Electron sur macOS et Windows (#2447, #2448, #2461)",new_0_6_40_9:"Workflow ajoute des exécutions planifiées durables et une interface complète pour créer, modifier, activer, désactiver et supprimer les planifications (#2434, #2441)",new_0_6_40_10:"Les webhooks du cycle de vie Chat Run sont ajoutés, l’ancien point de terminaison inutilisé est supprimé et le serveur reçoit un point de contrôle de disponibilité léger (#2422, #2452, #2453)",new_0_6_40_11:"Le MCU peut choisir entre les runtimes Ekko et Hermes Agent, tandis que les avatars Global Agent et les indicateurs d’état MCU sont désormais exacts (#2438, #2442)",new_0_6_40_12:"Coding Agent exige désormais une identité d’exécution et corrige l’isolation de la persistance sous Windows, les délais MCP, la relecture du reasoning entre modèles, l’estimation du contexte et les instructions Studio en double (#2387, #2392, #2395, #2396, #2398, #2416)",new_0_6_40_13:"Les préréglages MoA exposent l’intensité de raisonnement par modèle et la génération d’images désactive le stockage Responses pour éviter une conservation distante inutile (#2439, #2449)",new_0_6_39_1:"Ekko Agent initialise désormais explicitement ses ressources, exécute du code Node.js ou Python limité derrière une autorisation d’outil et peut suspendre une exécution au premier plan pour demander une précision libre ou à choix multiple avant de reprendre (#2362, #2368)",new_0_6_39_2:"Group Chat attend la confirmation d’entrée dans le salon avant d’envoyer, corrigeant les erreurs intermittentes « Not in room » lors des reconnexions. La saisie devient un heartbeat limité, visible uniquement comme une pulsation sans texte sur l’avatar des autres membres (#2373)",new_0_6_39_3:"Les événements d’outils Coding Agent de Single Chat et Group Chat suivent désormais le cycle de vie du CLI natif et n’émettent qu’un démarrage après la fin des arguments, supprimant les cartes dupliquées ou bloquées et le JSON affiché caractère par caractère dans les grands salons (#2366, #2372)",new_0_6_39_4:"Les prompts Coding Agent passent maintenant par stdin, préservant les entrées multilignes et les images tout en évitant la limite de commande Windows. Group Chat n’interrompt plus Codex, Claude Code ou Ekko après deux minutes fixes (#2354, #2357)",new_0_6_39_5:"Codex utilise le JSONL natif et la fin du processus comme état final lors des déconnexions récupérables du proxy Provider, évitant qu’un travail terminé soit signalé en échec dans Group Chat (#2375)",new_0_6_39_6:"La gestion des versions vérifie que le Runtime est complet et affiche la raison du fallback desktop. Un Runtime invalide ne peut pas être activé, et les contrôles de téléchargement ou changement du Web UI sont masqués puisque les mises à jour restent fournies par l’installateur desktop (#2353)",new_0_6_39_7:"Les en-têtes d’exécution Group Chat ne gardent que le nom de l’Agent, sans descriptions répétées, pour des groupes de messages plus clairs (#2352)",new_0_6_39_8:"Les connexions distantes ESP32-C3 maintiennent désormais Socket.IO pendant la découverte, réutilisent des tampons vocaux bornés, se reconnectent avec temporisation progressive et conservent la session lors des déconnexions temporaires de Studio, pour des recherches et échanges vocaux plus rapides et fiables (#2383)",new_0_6_38_1:"Au démarrage, le desktop Windows répare les chemins Python relatifs invalides laissés par les mises à jour de l’Agent dans les environnements Hermes Runtime en cache, restaurant le CLI, les journaux et le Gateway après une mise à jour, un changement de Runtime ou une migration du stockage",new_0_6_38_2:"Le catalogue de compatibilité du site reconnaît à nouveau Hermes 0.19.0 afin de préserver les téléchargements desktop et les contrôles de compatibilité correspondants (#2348)",new_0_6_37_1:"La priorité de cette version couvrant 14 PR est la refonte complète de Group Chat : chaque Agent choisit indépendamment son profil, provider, modèle, mode API, niveau de raisonnement, identité et workspace (#2334)",new_0_6_37_2:"Les salons démarrent désormais des exécutions neuves et isolées et regroupent chaque réponse avec son reasoning et ses outils. Ils ajoutent un résumé glissant partagé et modifiable avec état et limites, les mentions d’Agent, des drawers salon/workspace et des conseils de migration. La lecture vocale prépare à l’avance les TTS de différents Profile, limite la synthèse à une tâche par Profile et lit en FIFO strict, afin qu’une nouvelle réponse ne remplace jamais l’audio en cours (#2334)",new_0_6_37_3:"MiniMax Coding Plan OAuth prend en charge les régions Global et Chine, tandis que les identifiants Codex, xAI, Anthropic, Nous et MiniMax sont actualisés via le Runtime Bridge persistant (#2337)",new_0_6_37_4:"ESP32-C3 v1/v2 ajoutent une écoute automatique facultative avec VAD local, pré-enregistrement, fin sur silence et blocage pendant la lecture, tout en conservant le push-to-talk (#2338)",new_0_6_37_5:"MCU Global Agent utilise désormais le mode vocal concis d’Ekko, peut déléguer les tâches sûres en arrière-plan, conserve historique et workspaces, et ne transmet plus les résultats d’outils trop volumineux (#2326)",new_0_6_37_6:"Les TTS personnalisés et compatibles OpenAI réessaient automatiquement un format audio accepté par le provider et convertissent les sorties non MP3 pour Hermes (#2328)",new_0_6_37_7:"L’import et l’export des profils disposent de dix minutes, signalent clairement les délais dépassés, isolent les archives simultanées, sécurisent les noms et suppriment les fichiers temporaires (#2310, #2324)",new_0_6_37_8:"Hermes Agent Bridge applique les niveaux de raisonnement par modèle tout en conservant les réglages explicites par exécution et le fallback historique (#2325)",new_0_6_37_9:"La gestion des versions affiche séparément la version Hermes Agent réellement installée et le chemin Runtime, et précise la portée de la mise à jour CLI et la fermeture complète de Studio (#2323)",new_0_6_37_10:"Les arbres de fichiers workspace utilisent une indentation réduite afin de garder visibles les noms profondément imbriqués (#2340)",new_0_6_37_11:"Le desktop cible désormais Hermes Agent 0.20.0 depuis une source épinglée, fixe Node/npm portables, accepte les lanceurs Windows régénérés, se met à jour sans Python système et garde le Gateway géré masqué (#2321, #2344)",new_0_6_37_12:"La migration du stockage Runtime Windows traite les liens créés par les mises à jour sans droits administrateur, réajuste Python, accepte les chemins Unicode et actualise les shims CLI/MCP au premier redémarrage (#2345)",new_0_6_37_13:"La signature desktop macOS utilise désormais un keychain temporaire explicite compatible avec le mode strict des runners macOS 26 sur les deux architectures (#2315)",new_0_6_36_1:"Cette version couvre les 28 PR fusionnées après la 0.6.35 : voix, arabe et RTL, App Relay, fiabilité des agents, ergonomie du chat, Kanban, Journey, sous-titres MCU et journaux de requêtes Ekko",new_0_6_36_2:"Les réglages vocaux sont unifiés dans Modèles pour les fournisseurs natifs Hermes et Web UI ; Custom TTS permet le choix de la voix et Edge TTS accepte tout Voice ID avec des options arabes (#2260, #2265, #2267)",new_0_6_36_3:"La prise en charge complète de l’arabe et du RTL couvre le flux du document, Naive UI, le chat, le chat de groupe, Workflow, les superpositions, les tiroirs, la direction par bloc et les libellés Profile corrigés (#2269, #2270, #2271, #2273, #2277, #2294, #2303)",new_0_6_36_4:"Les délégations actives en arrière-plan maintiennent leur session Agent Bridge jusqu’à leur fin, empêchant le nettoyage d’inactivité d’interrompre les tâches longues (#2254)",new_0_6_36_5:"La liste des agents du chat de groupe est de nouveau cliquable sur ordinateur, et la fenêtre principale peut être réduite à 769 px sans passer en disposition mobile (#2259, #2263)",new_0_6_36_6:"Les workspace diffs de Codex, Claude Code et Ekko apparaissent uniquement sur le message Assistant exact qui les a produits, dans les chats actifs, restaurés et de groupe (#2264)",new_0_6_36_7:"Les README anglais et chinois reflètent désormais le produit et la CLI actuels, tandis que le manuel obsolète du site lié à la version 0.6.12 a été supprimé (#2268)",new_0_6_36_8:"Un App Relay indépendant et sans interface ajoute un appairage sécurisé et un accès distant authentifié aux API locales autorisées et au streaming du chat sans exposer directement Studio (#2275)",new_0_6_36_9:"Desktop Agent Browser peut lire en toute sécurité les longs textes accessibles par pages et activer les contrôles dont la référence de snapshot pointe vers du texte visible (#2278)",new_0_6_36_10:"Le chat gagne des contrôles Provider ancrés, la restauration du défilement par message, des rails compacts pour les outils et le terminal, des aperçus pleine taille et des workspace diffs pleine largeur (#2279, #2282, #2283, #2293)",new_0_6_36_11:"Les nouvelles sessions Ekko reçoivent des workspaces par défaut isolés par Profile, tandis que les workspaces existants et explicitement choisis restent inchangés (#2289)",new_0_6_36_12:"Les résultats d’approbation Memory et Skill sont désormais structurés et sérialisés, évitant les faux succès et les écritures concurrentes dans le même Profile (#2295)",new_0_6_36_13:"Kanban ajoute un archivage fiable des tâches et un tableau déplaçable, tandis que Journey devient une carte compacte et déterministe des relations Memory vers Skill (#2296, #2297)",new_0_6_36_14:"Le reasoning en direct reste stable entre les outils, est restauré sur le bon message ou outil et ne crée plus de bulles de sous-agent vides (#2299)",new_0_6_36_15:"La parole MCU affiche désormais des sous-titres GB2312 synchronisés et paginés sur ESP32-C3 v1 et v2 sans perturber la lecture audio (#2305)",new_0_6_36_16:"Ekko écrit désormais un journal compact model.request par tentative de modèle, y compris pour la compression du contexte, et omet tool_choice en l’absence d’outils (#2311)",new_0_6_35_1:"La mémoire persistante d’Ekko Agent est désormais activée en production, avec un stockage SQLite isolé par profil, un budget de rappel automatique de 4 000 tokens, une recherche de pertinence améliorée dans toute la mémoire et un traitement plus sûr des requêtes aux modèles (#2246)",new_0_6_34_1:"Cette version couvre les 21 PR fusionnées après la 0.6.33 : thèmes par utilisateur, améliorations d’Ekko et des Coding Agents, desktop et navigateur, automatisation et fiabilité",new_0_6_34_2:"Chaque compte peut personnaliser la taille et la couleur du texte, la couleur d’accent et le fond du workspace avec des surfaces translucides cohérentes ; les fenêtres Windows et les réglages du navigateur suivent le thème, et les commandes navigateur d’Ekko démarrent correctement sous Windows (#2242, #2243, #2244)",new_0_6_34_3:"Ekko est disponible en production avec découverte des Skills à la demande et entrée multimodale ; l’évolution protégée des Skills, les logs isolés par Profile, la persistance du protocole et les résumés de raisonnement Responses améliorent sa sécurité et ses capacités (#2215, #2236)",new_0_6_34_4:"La mémoire Ekko ajoute des catégories structurées et déterministes pour les préférences, relations, habitudes, objectifs à long terme et plus encore ; les longues conversations utilisent désormais le cycle partagé de compression de contexte fondé sur des snapshots (#2229, #2230)",new_0_6_34_5:"Les exécutions Coding Agent conservent les images entre Codex, Claude Code et les protocoles Provider ciblés, tronquent les sorties d’outils Responses trop volumineuses et isolent par session la configuration et les événements tardifs (#2222, #2232, #2238)",new_0_6_34_6:"Le contrôle des capacités Hermes Workflow ne rejette plus les cibles valides sans métadonnées de mode API ; Kanban suit les tâches et aperçus de pièces jointes de Hermes Agent 0.19, et Cron Exécuter maintenant démarre en arrière-plan avec une validation de création renforcée (#2239, #2216, #2228)",new_0_6_34_7:"Le desktop ajoute des fenêtres de discussion autonomes et ciblées, autorise l’automatisation des champs de mot de passe, paiement et fichier, et conserve séparément le nom et la description de chaque membre humain dans chaque salon Group Chat (#2209, #2210, #2212)",new_0_6_34_8:"La commande /yolo par session active ou désactive le contournement des approbations, la limite visuelle de 200 tours Agent disparaît, Markdown préserve les guillemets ASCII droits et le catalogue pt-BR récupère ses signes diacritiques manquants (#2223, #2225, #2234, #2221)",new_0_6_34_9:"Les appareils ESP32-C3 gagnent une veille connectée configurable qui réduit la consommation au repos tout en conservant le Wi-Fi, la connexion, le Profile et Socket.IO, avec réveil immédiat et délai persistant (#2218)",new_0_6_33_1:"Cette version couvre les 16 PR fusionnées après la 0.6.32 : Agent Browser desktop, preuves et délais des exécutions Workflow, interactions avec les fichiers et les discussions, actualisation des modèles Provider et fiabilité",new_0_6_33_2:"Le desktop ajoute un Agent Browser visible à plusieurs onglets avec Profiles isolés, gestion du proxy, du stockage et des téléchargements, cookies persistants chiffrés, actions Agent protégées et découverte différée des outils MCP (#2177, #2182)",new_0_6_33_3:"Les liens des discussions individuelles et de groupe ainsi que les aperçus HTML authentifiés s’ouvrent dans le navigateur intégré ; l’espacement des permissions, les icônes de navigation multiplateformes et l’alignement barre latérale–barre de titre sous Windows sont aussi améliorés (#2191, #2194, #2198)",new_0_6_33_4:"Les Runs Workflow conservent le rendu immuable du lancement, exposent un délai total de Run/Rerun avec temps écoulé et restant, et présentent historique et détails dans des pages tenant compte du chemin réellement consommé (#2171, #2173, #2180)",new_0_6_33_5:"Les fichiers peuvent être collés directement dans les discussions individuelles ou de groupe, ou joints depuis le menu contextuel du workspace ; des colonnes de métadonnées compactes laissent davantage de place aux noms de fichiers (#2175, #2176)",new_0_6_33_6:"Chaque Provider configuré peut actualiser séparément son catalogue de modèles, confirmer les suppressions, conserver les modèles par défaut indisponibles et effectuer une restauration unique ; les Provider OAuth, toutes les langues et le remplissage automatique des formulaires sont pris en charge (#2115)",new_0_6_33_7:"Les états d’arrêt et de pause sont isolés par session afin qu’une discussion en arrière-plan ne modifie plus le bouton d’arrêt actif ; les sélections de texte et champs du desktop disposent aussi d’actions natives au clic droit (#2203, #2204)",new_0_6_33_8:"La fermeture, la mise à jour et l’installation desktop utilisent un arrêt progressif borné et ne forcent les arbres de processus Agent Bridge, MCP, navigateur et Web UI restants qu’après expiration du délai de nettoyage (#2193)",new_0_6_33_9:"Les sessions vocales MCU isolent les résultats de premier plan et d’arrière-plan, tandis que les noms d’outils MCP compatibles MiniMax respectent les limites du Provider sans casser les appelants existants (#2181, #2169)",new_0_6_32_1:"Cette version couvre les 14 PR fusionnées après la 0.6.31 : organisation et compression des sessions, discussions de groupe, routage Workflow, Skill Bundles, mémoire Ekko, Hermes 0.19 et cadre des fenêtres desktop",new_0_6_32_2:"Les mentions des discussions de groupe fonctionnent désormais après du texte CJK, des emoji et de la ponctuation ; les propriétaires peuvent afficher, générer et renouveler les codes d’invitation dans les paramètres du salon (#2133, #2141)",new_0_6_32_3:"Workflow conserve la source de chaque exécution Hermes Bridge lors des transferts et reconnexions ; les nœuds Codex et Claude Code à portée limitée peuvent utiliser les protocoles pris en charge par leur launcher pour les cibles API Key valides (#2137, #2154)",new_0_6_32_4:"Les sessions gagnent des catégories globales, une recherche plus précise tenant compte de Markdown et une compression par curseur qui borne l’historique tout en restant correcte après modifications, branches et exécutions simultanées ; la conception est entièrement documentée (#2139, #2143, #2145, #2146)",new_0_6_32_5:"Les Skill Bundles propres au Profile peuvent être créés, parcourus, exécutés et supprimés directement dans le chat, avec une vue claire des Skills inclus (#2156)",new_0_6_32_6:"La mémoire Ekko utilise désormais un modèle canonique unique isolé par Profile, avec mutations vérifiées par révision, meilleur audit des sources et filtrage de pertinence plus strict (#2159)",new_0_6_32_7:"Les messages intermédiaires de l’assistant Hermes 0.19 sont diffusés et stockés dans des bulles distinctes ; les discussions individuelles peuvent livrer de façon asynchrone les résultats persistants des délégations en arrière-plan (#2160)",new_0_6_32_8:"Les nouveaux builds du Runtime desktop, chemins de repli et shims CLI Windows utilisent désormais Hermes Agent 0.19.0 par défaut (#2161)",new_0_6_32_9:"Les contrôles de fenêtre sont intégrés au cadre de la page : les feux macOS sont dans la barre latérale, les contrôles Windows au-dessus du contenu principal et Linux conserve ses décorations natives (#2162)",new_0_6_32_10:"La documentation de développement prend désormais en charge le checkout courant et les worktrees Git isolés facultatifs (#2155)"}};export{e as default};
|
|
1
|
+
var e={browser:{title:"Navigateur",settings:"Paramètres du navigateur",desktopOnly:"Le navigateur intégré est disponible uniquement dans Hermes Studio Desktop.",newTab:"Nouvel onglet",back:"Précédent",forward:"Suivant",reload:"Actualiser",stop:"Arrêter",addressPlaceholder:"Rechercher ou saisir une adresse",selectElement:"Sélectionner un élément",selectRegion:"Sélectionner une zone",annotationPlaceholder:"Décrivez ce que l’Agent doit examiner ou modifier…",selectionData:"Données de sélection du navigateur",annotationAdded:"Capture ajoutée à la zone de discussion",annotationCount:"{count} annotation(s)",annotationLabel:"Annotation {index}",clearAnnotations:"Effacer les annotations",finishAnnotation:"Terminé",agent:"Agent",agentControlling:"{agent} contrôle cet onglet",agentWaiting:"{agent} attend votre confirmation",takeOver:"Reprendre",tabCrashed:"Cet onglet a planté.",recoverTab:"Recharger",profiles:"Profils",profileName:"Nom du profil",addProfile:"Ajouter un profil",currentProfile:"Profil actif",switchProfile:"Changer de profil",editProfile:"Modifier le profil",profileDirectory:"Dossier du profil",downloadDirectory:"Dossier de téléchargement",profileRootDirectory:"Dossier racine du profil",chooseProfileRootDirectory:"Choisir un dossier vide",profileRootDirectoryHint:"Choisissez un dossier vide. Les données utiliseront {data} et les téléchargements {download}.",proxy:"Proxy",proxyMode:"Mode proxy",proxyDirect:"Connexion directe",proxySystem:"Proxy système",proxyCustom:"Proxy personnalisé",proxyServer:"Serveur proxy",proxyServerPlaceholder:"Par exemple : http://127.0.0.1:7890 ou socks5://127.0.0.1:1080",askBeforeDownload:"Demander où enregistrer",downloadConflictPolicy:"Noms de fichier en double",uniquifyDownloads:"Créer un nom unique",askOnConflict:"Demander en cas de conflit",downloads:"Téléchargements",downloadStateProgressing:"Téléchargement en cours",downloadStateCompleted:"Terminé",downloadStateCancelled:"Annulé",downloadStateInterrupted:"Interrompu",downloadStateBlocked:"Bloqué",permissions:"Autorisations",permissionsHint:"Les autorisations des pages distantes sont refusées par défaut et consignées ici.",blocked:"Bloqué",profileSwitchTitle:"Changer de profil ?",profileSwitchWarning:"{agents} opération(s) Agent, {downloads} téléchargement(s) et {annotations} annotation(s) peuvent être interrompus.",deleteProfileTitle:"Supprimer le profil ?",deleteProfileWarning:"Les données gérées seront placées dans la corbeille. Les dossiers personnalisés sont conservés.",clearCache:"Vider le cache",clearPermissionAudit:"Effacer le journal des autorisations",clearSiteData:"Effacer les données des sites",clearSiteDataWarning:"Efface les connexions, cookies et le stockage local du profil sélectionné.",dataCleared:"Données du navigateur effacées",loadFailed:"Impossible de démarrer le navigateur intégré"},kanban:{board:{defaultArchiveUnavailable:"Le tableau par défaut ne peut pas être archivé"},action:{archive:"Archiver la tâche",archiveConfirm:"Archiver cette tâche terminée ?"},message:{taskArchived:"Tâche archivée"}},login:{title:"Hermes Studio",description:"Entrez votre nom d'utilisateur et votre mot de passe pour continuer.",placeholder:"Jeton d'acces",submit:"Connexion",tokenRequired:"Veuillez entrer votre jeton d'acces",invalidToken:"Jeton invalide",connectionFailed:"Impossible de se connecter au serveur",passwordLogin:"Mot de passe",tokenLogin:"Jeton",usernamePlaceholder:"Nom d'utilisateur",passwordPlaceholder:"Mot de passe",defaultCredentialsHint:"Nom d utilisateur par defaut : admin. Mot de passe par defaut : 123456.",credentialsRequired:"Veuillez entrer le nom d'utilisateur et le mot de passe",invalidCredentials:"Nom d'utilisateur ou mot de passe incorrect",tooManyAttempts:"Trop de tentatives echouees, veuillez reessayer plus tard",lockResetHint:"Si c est votre serveur, supprimez le verrouillage de connexion avec :",defaultLoginResetHint:"Pour reinitialiser le mot de passe admin par defaut, executez :",desktopLockResetHint:"Too many failed login attempts. Open the system tray menu and choose Reset Login to reset the password.",sessionExpired:"La session a expire. Veuillez vous reconnecter.",accessDenied:"Vous n'avez pas l'autorisation d'acceder a cette ressource.",passwordMismatch:"Les mots de passe ne correspondent pas",passwordTooShort:"Le mot de passe doit contenir au moins 6 caracteres",setupSuccess:"Login par mot de passe configure avec succes",passwordChanged:"Mot de passe change avec succes",passwordRemoved:"Login par mot de passe supprime",setupPassword:"Configurer le login par mot de passe",changePassword:"Changer le mot de passe",changeUsername:"Changer le nom d'utilisateur",removePasswordLogin:"Supprimer",username:"Nom d'utilisateur",currentPassword:"Mot de passe actuel",newPassword:"Nouveau mot de passe",confirmPassword:"Confirmer le mot de passe",newUsername:"Nouveau nom d'utilisateur",usernameChanged:"Nom d'utilisateur change avec succes",usernameTooShort:"Le nom d'utilisateur doit contenir au moins 2 caracteres",setupDescription:"Gerez le nom d'utilisateur et le mot de passe utilises pour vous connecter.",removeConfirm:"Le login par mot de passe est requis pour les comptes utilisateur.",passwordLoginNotConfigured:"Login par mot de passe non configure",passwordLoginConfigured:"Compte actuel : {username}",defaultCredentialTitle:"Modifiez le compte et le mot de passe par defaut",defaultCredentialMessage:"Le compte connecte utilise encore le nom d utilisateur ou le mot de passe par defaut. Pour eviter tout acces non autorise, modifiez rapidement le nom d utilisateur et le mot de passe du compte actuel.",defaultCredentialAction:"Modifier maintenant",defaultCredentialLater:"Me le rappeler plus tard"},users:{title:"Gestion des comptes",description:"Creez des utilisateurs, attribuez des roles et controlez les profils accessibles aux administrateurs standard.",create:"Creer un utilisateur",edit:"Modifier l utilisateur",username:"Nom d utilisateur",role:"Role",statusLabel:"Statut",profiles:"Profils accessibles",profilesPlaceholder:"Selectionner les profils accessibles",allProfiles:"Tous les profils",noProfiles:"Aucun profil assigne",lastLogin:"Derniere connexion",newPasswordOptional:"Nouveau mot de passe (laisser vide pour conserver)",loadFailed:"Echec du chargement des utilisateurs",deleteConfirm:"Supprimer cet utilisateur ?",enable:"Activer",disable:"Desactiver",roles:{superAdmin:"Super admin",admin:"Admin"},status:{active:"Actif",disabled:"Desactive"}},common:{loading:"Chargement...",cancel:"Annuler",retry:"Réessayer",reset:"Réinitialiser",delete:"Supprimer",edit:"Modifier",save:"Enregistrer",saved:"Enregistre",update:"Mettre a jour",create:"Creer",saveFailed:"Echec de l'enregistrement",deleteFailed:"Echec de la suppression",ok:"OK",copied:"Copie",copy:"Copier",noData:"Aucune donnee",fetch:"Recuperer",add:"Ajouter",enable:"Activer",disable:"Desactiver",configured:"Configure",notConfigured:"Non configure",confirm:"Confirmer",expand:"Developper",collapse:"Reduire",stop:"Arrêter",start:"Démarrer",expired:"Expiré"},mcp:{title:"Serveurs MCP",loadFailed:"Echec du chargement des serveurs MCP",reloadAll:"Tout recharger",refresh:"Rafraichir",total:"Total",connected:"Connecte",disconnected:"Deconnecte",tools:"outils",tool:"Outils",searchPlaceholder:"Rechercher des serveurs...",addServer:"+ Ajouter un serveur",zeroTools:"0 outils",loading:"Chargement...",empty:"Aucun serveur MCP configure",reloaded:"{server} recharge",reloadedAll:"Tous les serveurs MCP recharges",reloadFailed:"Echec du rechargement",serverAdded:'Serveur "{name}" ajoute',addFailed:"Echec de l ajout du serveur",serverUpdated:'Serveur "{name}" mis a jour',updateFailed:"Echec de la mise a jour du serveur",saveFailed:"Echec de la sauvegarde",serverRemoved:'"{name}" supprime',enabled:"Activé : {name}",disabled:"Désactivé : {name}",connectedStatus:"Connecté",disconnectedStatus:"Déconnecté",disabledStatus:"Désactivé",toolList:"Liste des outils",count:" ",more:"de plus",removeFailed:"Echec de la suppression du serveur",testOk:"Test OK — {count} outils disponibles",testEmpty:"Le test n a retourne aucun outil",testFailed:"Echec du test",edit:"Modifier",test:"Tester",reload:"Recharger",remove:"Supprimer",confirmRemove:'Supprimer le serveur "{name}" ?',cancel:"Annuler",add:"Ajouter",save:"Enregistrer",addTitle:"Ajouter un serveur MCP",editTitle:"Modifier le serveur MCP",invalidJson:"JSON invalide",invalidYaml:"Format YAML invalide",invalidConfig:"Configuration invalide",invalidServerConfig:"Configuration du serveur invalide",missingCommandOrUrl:"Doit contenir command ou url",manageTools:"Gérer les outils",toolsVisibilityTitle:"Gestion de la visibilité des outils",fetchTools:"Récupérer la liste des outils",fetchToolsFailed:"Échec de la récupération de la liste des outils",toolsMode:"Mode :",toolsModeAll:"Tous",toolsModeInclude:"Inclure",toolsModeExclude:"Exclure",toolsListHeader:"Nom de l'outil",toolsEmpty:"Aucun outil disponible, veuillez d'abord récupérer la liste des outils",toolsSummaryAll:"{count} outils au total, tous activés",toolsSummaryInclude:"{total} outils au total, {count} sélectionnés",toolsSummaryExclude:"{total} outils au total, {count} exclus",toolsVisibilitySaved:"Visibilité des outils enregistrée",toolsSelectAll:"Tout sélectionner",toolsClearSelection:"Effacer la sélection",toolsExcludeAll:"Tout exclure",toolsClearExcluded:"Effacer les exclusions"},sidebar:{chat:"Discussion",backToChat:"Retour",search:"Rechercher",apiRelay:"API Relay",history:"Historique",jobs:"Taches planifiees",models:"Modeles",profiles:"Profils",plugins:"Plugins",mcp:"MCP",petdex:"Pets",skills:"Competences",memory:"Memoire",logs:"Journaux",usage:"Utilisation",performance:"Performance",journey:"Parcours",skillsUsage:"Utilisation des compétences",channels:"Canaux",terminal:"Terminal",browser:"Navigateur",singleChat:"Discussion",globalAgent:"Global Agent",files:"Fichiers",devices:"Appareils",groupChat:"Chat de groupe",groupConversation:"Conversation",groupConversationShort:"Conv.",groupAgent:"Agent",groupAgentShort:"Agent",groupSystem:"Systeme",groupSystemShort:"Sys",groupMonitoring:"Suivi",groupMonitoringShort:"Suivi",theme:"Thème",settings:"Parametres",connected:"Connecte",disconnected:"Deconnecte",updateTip:'Executez "hermes-web-ui update" dans le terminal pour mettre a jour',updateVersion:"Mettre a jour vers v{version}",reloadClientVersion:"Recharger pour v{version}",updating:"Mise a jour...",updateSuccess:"Mise a jour terminee. Veuillez actualiser la page sous peu. Si le service ne demarre pas apres un moment, demarrez-le manuellement.",updateFailed:"Echec de la mise a jour",logout:"Deconnexion",nodeVersionWarning:"Node.js v{version} detecte. Veuillez passer a la version 23 ou ulterieure.",changelog:"Journal des modifications",noChangelog:"Aucun journal disponible",versionManagement:"Gestion des versions",updateAvailableLabel:"(Nouvelle version)",dockerUpdateTitle:"Mise à jour Docker",dockerUpdateGuide:"Dans l'environnement Docker, veuillez tirer la dernière image et recréer le conteneur :",dockerUpdateNote:"Vos données seront conservées après la recréation du conteneur.",kanban:"Kanban",workflow:"Workflow",groupTools:"Outils",groupToolsShort:"Outils",codingAgents:"Agents de code",versionPreview:"Aperçu de version",groupPlatform:"Plateforme",gateways:"Passerelles",expand:"Déplier le menu",collapse:"Replier le menu"},runtimeVersions:{title:"Gestion des versions",runtimeTitle:"Hermes Runtime",currentHermesAgentVersion:"Version actuelle de Hermes Agent",activeRuntimeDirectory:"Chemin du Runtime actif",cliUpdateDescription:"Avec Hermes Runtime 0.19.1 et versions ultérieures, la commande suivante met uniquement à jour le Hermes Agent intégré. Elle ne met pas à jour l’application de bureau Hermes Studio ni la Web UI. Quittez complètement Hermes Studio avant de l’exécuter :",webUiTitle:"Web UI",platform:"Plateforme",currentWebUi:"Web UI actuel",activeVersion:"Version active",runtimeDirectory:"Répertoire de stockage Runtime",chooseRuntimeDirectory:"Choisir un répertoire",resetRuntimeDirectory:"Utiliser le dossier système",runtimeDirectoryHint:"Le Runtime actuel sera copié et vérifié avant les services locaux au prochain redémarrage. L’ancien stockage est conservé et les prochains téléchargements de Runtime seront enregistrés ici.",runtimeDirectorySaved:"Migration du Runtime planifiée. Redémarrez Hermes Studio pour l’exécuter.",runtimeMigrationPending:"Destination de migration en attente : {directory}",runtimeMigrationFailed:"Échec de la migration du stockage ; le stockage précédent reste actif",runtimeActivationFailed:"Le Runtime sélectionné n’a pas pu démarrer ; Hermes Studio utilise une autre version installée",active:"Active",installed:"Installée",download:"Télécharger",downloadGithub:"Télécharger depuis GitHub",downloadCf:"Télécharger depuis Cloudflare",github:"GitHub",cf:"Cloudflare",useVersion:"Utiliser au prochain redémarrage",deleteVersion:"Supprimer",deleteRuntimeConfirm:"Supprimer Hermes Runtime {version} ?",deleteWebUiConfirm:"Supprimer Web UI {version} ?",deleteRuntimeSuccess:"Runtime supprimé",deleteWebUiSuccess:"Web UI supprimé",refresh:"Actualiser",noVersions:"Aucune version disponible",remoteLoadFailed:"Impossible de charger les versions distantes",downloadTasks:"Tâches de téléchargement",downloadStarted:"Téléchargement démarré",activateSuccess:"Sélection de version enregistrée. Redémarrez Hermes Studio pour l’utiliser.",jobStatus:{queued:"En attente",running:"En cours",completed:"Terminé",failed:"Échec"},jobStageStatus:{queued:"En attente",resolve:"Résolution",download:"Téléchargement",verify:"Vérification",extract:"Extraction",install:"Installation",completed:"Terminé",failed:"Échec"},jobStage:{queued:"En attente",download:"Téléchargement",resolveRuntime:"Résolution du package Runtime",verifyRuntime:"Vérification de l’archive Runtime",extractRuntime:"Extraction de l’archive Runtime",installRuntime:"Installation du Runtime",resolveWebUi:"Résolution du package Web UI",verifyWebUi:"Vérification de l’archive Web UI",extractWebUi:"Extraction de l’archive Web UI",installWebUi:"Installation de Web UI",completed:"Terminé",failed:"Échec"}},mcuDevices:{title:"Little Box",subtitle:"View device link status",name:"Name",nameOptional:"Name is optional",deviceCode:"Device code",deviceCodePlaceholder:"Enter device code",deviceCodeRequired:"Enter device code",channel:"Channel",official:"Official",unofficial:"Unofficial",createdAt:"Added at",lanStatus:"LAN",remoteStatus:"Distant",connected:"Connecté",disconnected:"Déconnecté",remoteConnect:"Connexion distante",remoteConnected:"Distant connecté",remoteConnectFailed:"Échec de la connexion distante",remoteDisconnect:"Déconnecter",remoteDisconnected:"Distant déconnecté",remoteDisconnectFailed:"Échec de la déconnexion distante",actions:"Actions",add:"Add",addTitle:"Add MCU device",added:"MCU device added",addFailed:"Failed to add MCU device",purchase:"Buy",edit:"Edit",editNameTitle:"Edit name",nameUpdated:"Name updated",nameUpdateFailed:"Failed to update name",delete:"Delete",deleteTitle:"Delete MCU device",deleteConfirm:'Delete "{name}"?',deleted:"MCU device deleted",deleteFailed:"Failed to delete MCU device",loadFailed:"Failed to load MCU devices",close:"Close"},devices:{title:"Appareils",count:"{count} appareils",lastScanned:"Dernier scan : {time}",refresh:"Actualiser",empty:"Aucun appareil trouvé",computer:"Ordinateur",endpointLabel:"Point de terminaison",statusLabel:"Statut",online:"Online",offline:"Offline",address:"Adresse",os:"Système",agentVersion:"Agent",webUiVersion:"Web UI",responseMs:"Latence",lastSeen:"Vu pour la dernière fois",open:"Ouvrir",never:"Jamais",unknown:"Inconnu",loadFailed:"Impossible de charger les appareils",scanFailed:"Impossible de scanner les appareils",updateFailed:"Impossible de mettre à jour l'appareil",duplicateRequest:"Une demande d'appairage est déjà en attente",manualPairing:"Pair by URL",copyPairingLink:"Copy pairing link",manualUrlPlaceholder:"https://device.example.com",manualUrlRequired:"Enter a device URL",manualRequestSent:"Pairing request sent",manualRequestFailed:"Failed to request remote pairing",pairingLinkCopied:"Pairing link copied",pairingLinkCopyFailed:"Failed to copy pairing link",pairingCodeTitle:"Enter pairing code",pairingCodePlaceholder:"Pairing code",pairingCodeRequired:"Enter the pairing code",submitPairingRequest:"Submit request",processed:"Traité",unprocessed:"Non traité",deleteHistory:"Supprimer l'entrée",deleteHistoryConfirm:"Supprimer cette demande et révoquer l'accès de connexion de cet appareil ?",requests:"Demandes",requestsWithCount:"Demandes ({count})",noRequests:"Aucune demande",requestPairing:"Demander l'appairage",paired:"Appairé",approve:"Approuver",reject:"Rejeter",block:"Bloquer",unblock:"Débloquer",inboundStatus:{none:"Demande autorisée",pending:"En attente",approved:"Approuvé",rejected:"Rejeté",blocked:"Bloqué"},outboundStatus:{none:"Non appairé",pending:"Demandé",approved:"Appairé",rejected:"Rejeté",blocked:"Bloqué"},endpoint:{web:"Web",desktop:"Bureau",custom:"Personnalisé"}},performance:{title:"Performance",subtitle:"Surveiller les ressources système, Bridge Broker, Workers et sessions actives",refresh:"Actualiser",autoRefreshOn:"Actualisation auto",autoRefreshOff:"Actualisation manuelle",loadFailed:"Échec du chargement des métriques de performance",systemCpu:"CPU système",systemMemory:"Mémoire système",activeSessions:"Sessions actives",runningSessions:"En cours {count}",workers:"Workers",totalWorkerMemory:"Mémoire totale Worker",processes:"Processus",uptime:"Disponibilité",running:"En cours",stopped:"Arrêté",workerMemory:"Mémoire Worker",lastUpdated:"Mis à jour",profile:"Profile",memory:"Mémoire",sessions:"Sessions",runningActiveSessions:"En cours / Actives",lastUsed:"Dernière utilisation",status:"Statut",noWorkers:"Aucun Worker",sessionsByProfile:"Sessions par Profile",noActiveSessions:"Aucune session active"},journey:{title:"Parcours d apprentissage",play:"Lire le parcours",pause:"Mettre en pause",refresh:"Actualiser",categorySelection:"Sélection des catégories",nodeKinds:"Types de nœuds",description:"Description",canvasInstructions:"Utilisez les flèches pour prévisualiser les nœuds, Entrée pour ouvrir les détails et Échap pour effacer la sélection.",loadFailed:"Impossible de charger le parcours",nodes:"Noeuds",edges:"Connexions",skills:"Competences",memories:"Memoires",clusters:"Groupes",profile:"Profile",source:"Source",learnedSkills:"Competences apprises",memorySkillEdges:"Liens de memoire",allKinds:"Tous les types",allCategories:"Toutes les categories",searchPlaceholder:"Rechercher des noeuds",noClusters:"Aucun groupe",noNodes:"Aucun noeud de parcours",noCategory:"Sans categorie",category:"Categorie",useCount:"Utilisations",createdBy:"Cree par",timestamp:"Heure",pinned:"Epingle"},drawer:{terminal:"Terminal",files:"Espace de travail"},subagent:{title:"Tâche en arrière-plan",noGoal:"Tâche en arrière-plan sans titre",open:"Ouvrir la sortie en direct de la tâche",close:"Fermer la sortie de la tâche",waiting:"En attente de la sortie en direct…",tool:"Outil",tools:"{count} outils",tokens:"{input} entrée · {output} sortie",started:"Démarrée",running:"En cours",completed:"Terminée",failed:"Échec",cancelled:"Annulée",interrupted:"Interrompue"},realtimeVoice:{title:"Voix en temps réel",mode:"Mode vocal",open:"Ouvrir la voix en temps réel",back:"Retour au chat",connected:"Liaison vocale prête",turnMode:"Aperçu temps réel · mode tour par tour",browserStt:"Navigateur",browserTts:"Navigateur",untitledSession:"Conversation sans titre",sessionMissing:"La conversation est indisponible.",backendStreamRequired:"La voix temps réel sur mobile et ordinateur nécessite un service de transcription côté serveur configuré.",networkUnavailableNoFallback:"La reconnaissance vocale du navigateur est hors ligne et aucun STT de secours utilisable n est configuré.",liveTranscript:"Transcription en direct",transcriptPlaceholder:"Touchez le noyau vocal et commencez à parler",recentTurns:"Échanges récents",you:"Vous",mute:"Couper le son",unmute:"Rétablir le son",finishTurn:"Terminer le tour",speak:"Commencer à parler",end:"Terminer",status:{idle:"Prêt",paused:"Microphone coupé",listening:"Écoute",processing:"Transcription",thinking:"{agent} réfléchit",speaking:"{agent} parle",error:"Liaison vocale interrompue"},hint:{idle:"Touchez le centre pour commencer un tour vocal",paused:"Réactivez le microphone quand vous êtes prêt",listening:"Faites une pause pour envoyer ou touchez pour terminer",listeningManual:"Enregistrement en cours. Touchez à nouveau le centre pour arrêter et transcrire",processing:"Conversion de votre voix en texte",thinking:"Votre message a été envoyé à la conversation",speaking:"Vous pouvez interrompre à tout moment",error:"Touchez le centre pour réessayer"}},chat:{contextRemaining:"restant",contextClickToEdit:"Cliquez pour modifier la longueur du contexte",contextEditTitle:"Modifier la longueur du contexte",contextEditDesc:"Définir la limite de longueur du contexte pour le modèle actuel (en tokens)",contextEditPlaceholder:"Entrez la longueur du contexte",contextEditHint:"Valeurs courantes : 256k (Hermes par défaut), 128k (GPT-4), 32k (GPT-3.5)",contextEditSave:"Enregistrer",contextEditCancel:"Annuler",contextEditInvalid:"Veuillez entrer une longueur de contexte valide",contextEditSuccess:"Longueur du contexte mise à jour",contextEditFailed:"Échec de la mise à jour",emptyState:"Demarrer une conversation avec Hermes Agent",emptyStateAgent:"Demarrer une conversation avec {agent}",viewOlderInHistory:"Voir les messages precedents dans l’historique",scrollToBottom:"Aller en bas",outlineTitle:"Plan de la conversation",outlineEmpty:"Aucun contenu de conversation",outlineUserQuestion:"Question utilisateur",inputPlaceholder:"Tapez un message... (Entree pour envoyer, Shift+Entree pour un saut de ligne)",inputHeightResizeHint:"Faites glisser pour changer la hauteur du champ de chat, double-cliquez pour reinitialiser.",slashCommandArgs:{message:"<message>",title:"<titre>",text:"<texte>"},slashCommands:{usage:"Calculer l’utilisation de la session actuelle",status:"Afficher l’état de la session et la file",yolo:"Basculer le mode YOLO de la session et ignorer les approbations de commandes dangereuses",abort:"Arrêter l’exécution Bridge active",queue:"Mettre un message en file après l’exécution active",learn:"Apprendre une compétence réutilisable depuis les sources décrites",plan:"Rédiger un plan d’implémentation Markdown",goal:"Set a standing goal that continues across turns",goalStatus:"Show the active goal status",goalPause:"Pause the active goal loop",goalResume:"Resume the paused goal loop",goalDone:"Complete and clear the active goal",goalClear:"Clear the active goal",subgoal:"Add a criterion to the active goal",clear:"Effacer l’affichage actuel",clearHistory:"Supprimer l’historique des messages enregistrés de cette session",title:"Renommer cette session",compress:"Lancer la compression du contexte au repos",steer:"Envoyer un guidage à l’exécution Bridge active",destroy:"Libérer l’agent Bridge de cette session",reloadMcp:"Recharger les serveurs MCP",reloadSkills:"Recharger les commandes de skills",bundles:"Parcourir les bundles de compétences",bundlesCreate:"Créer un bundle de compétences"},bundlePicker:{title:"Bundles de compétences",create:"Créer un bundle",searchPlaceholder:"Rechercher des bundles...",skillCount:"{count} compétences",skillsLabel:"Compétences",noSkills:"Aucune compétence configurée",deleteBundle:"Supprimer {name}",deleteTitle:"Supprimer le bundle",deleteConfirm:"Supprimer « {name} » de ce profil ? Cette action est irréversible.",deleteFailed:"Échec de la suppression du bundle",deleted:"Bundle supprimé",noBundles:"Aucun bundle. Créez-en un pour combiner plusieurs compétences.",noMatch:"Aucun bundle correspondant"},bundleCreator:{title:"Créer un bundle de compétences",name:"Nom",namePlaceholder:"ex. PR Review Team",nameHint:"Utilisez des lettres anglaises, chiffres, espaces, tirets ou underscores.",description:"Description",descriptionPlaceholder:"À quoi ce bundle doit-il servir ?",skills:"Compétences",skillsPlaceholder:"Sélectionnez une ou plusieurs compétences",nameRequired:"Saisissez un nom de bundle",nameInvalid:"Utilisez un nom anglais contenant au moins une lettre",skillsRequired:"Sélectionnez au moins une compétence",skillsLoadFailed:"Échec du chargement des compétences",createFailed:"Échec de la création du bundle",created:"Bundle créé"},attachFiles:"Joindre des fichiers",reasoningEffort:{tooltip:"Effort de raisonnement",defaultLabel:"Par défaut",options:{default:"Par défaut (config.yaml)",none:"Aucun",minimal:"Minimal",low:"Faible",medium:"Moyen",high:"Élevé",max:"Max",xhigh:"Très élevé",ultra:"Ultra"}},showToolCalls:"Afficher les appels d’outils",hideToolCalls:"Masquer les appels d’outils",messageQueue:"File de messages",removeQueuedMessage:"Retirer le message de la file",stop:"Arreter",send:"Envoyer",contextUsed:"Contexte utilise :",sessions:"Sessions",webUiSessions:"Sessions",allProfiles:"Tous les profils",profileMissingModelsTip:'Le profil "{profile}" n’a aucun fournisseur ni modèle disponible pour cette session',sessionScopeHint:"Le chat affiche uniquement les sessions Web UI/API Server. Les sessions CLI, Telegram, Discord, Cron et autres canaux sont en lecture seule dans Historique.",openHistory:"Ouvrir l’historique",hermesHistory:"Historique Hermes",historyScopeHint:"Sessions d’historique Hermes du profil actuel en lecture seule, regroupées par source.",noSessions:"Aucune session",recent:"Récentes",recentCount:"Nombre de sessions récentes",loadMoreSessions:"Charger plus de sessions",newChat:"Nouvelle discussion",category:"Catégorie",uncategorized:"Sans catégorie",categoryPlaceholder:"Sélectionner ou créer une catégorie",categoryCreateHint:"Saisissez un nom puis appuyez sur Entrée.",categoryCreated:"Catégorie « {name} » créée",categoryCreateFailed:"Échec de la création de la catégorie",categoryLoadFailed:"Échec du chargement des catégories",moveToCategory:"Déplacer vers une catégorie",categoryUpdated:"Catégorie mise à jour",categoryUpdateFailed:"Échec de la mise à jour de la catégorie",renameCategory:"Renommer la catégorie",deleteCategory:"Supprimer la catégorie",enterCategoryName:"Saisissez le nom de la catégorie",confirmDeleteCategory:"Supprimer « {name} » ? Ses sessions passeront dans Sans catégorie.",categoryRenamed:"Catégorie renommée",categoryRenameFailed:"Échec du renommage de la catégorie",categoryDeleted:"Catégorie supprimée",categoryDeleteFailed:"Échec de la suppression de la catégorie",agent:"Agent",approvalKicker:"Permission d’outil",toolResultUnavailable:"Exécution interrompue ; aucun résultat reçu",approvalCommand:"Commande à exécuter",approvalTitle:"Vérifier l’appel d’outil avant exécution",approvalAgree:"Accepter",approvalAllowOnce:"Autoriser une fois",approvalAllowSession:"Autoriser la session",approvalAlways:"Toujours",approvalDeny:"Refuser",clarifyKicker:"L'agent a besoin d'éclaircissements",clarifyTitle:"L'agent a une question pour vous",clarifyPlaceholder:"Tapez votre réponse...",clarifySubmit:"Répondre",clarifyDismiss:"Ignorer",deleteSession:"Supprimer cette session ?",toggleBatchMode:"Sélection par lot",selectAll:"Tout sélectionner",confirmBatchDelete:"Supprimer {count} sessions sélectionnées?",batchDeleteSuccess:"{count} sessions supprimées",batchDeletePartial:"{failed} sessions ont échoué",batchDeleteFailed:"Échec de la suppression par lot",importToWebUi:"Importer dans Web UI",importSessionSuccess:"Session importée dans Web UI",importSessionAlreadyExists:"La session existe déjà dans Web UI",importSessionFailed:"Échec de l’import de la session",sessionDeleted:"Session supprimee",rename:"Renommer",archiveSession:"Archiver",unarchiveSession:"Désarchiver",pin:"Épingler",unpin:"Désépingler",pinned:"Épinglés",chatMode:"Mode chat",liveMode:"Direct",liveSessions:"Sessions en direct",recentBadge:"Récent",linkedSessions:"{count} sessions liées",noVisibleMessages:"Aucun message visible par l’humain.",monitorRoleUser:"Utilisateur",monitorRoleAssistant:"Assistant",copySessionLink:"Copier le lien de session",openSessionInNewTab:"Ouvrir dans un nouvel onglet",openSessionInNewWindow:"Ouvrir dans une nouvelle fenêtre",sessionLinkCopied:"Session link copied",copySessionId:"Copier l'ID de session",export:"Exporter",editConfig:"Modifier la configuration",exportFull:"Export complet (JSON)",exportCompressed:"Export compressé (TXT)",exportCompressing:"Compression du contexte, veuillez patienter...",exportSuccess:"Session exportée",exportFailed:"Échec de l'export",renamed:"Renomme",renameFailed:"Echec du renommage",sessionArchived:"Session archivée",archiveSessionFailed:"Échec de l'archivage de la session",sessionUnarchived:"Session désarchivée",unarchiveSessionFailed:"Échec du désarchivage de la session",renameSession:"Renommer la session",sessionNotFound:"Session non trouvee",enterNewTitle:"Entrez un nouveau titre",other:"Autre",runFailed:"Echec de l'execution",error:"Erreur",tool:"Outil",arguments:"Arguments",result:"Resultat",workspaceChanges:"Modifications du workspace",changedFiles:"{files} fichiers modifies",changesThisTurn:"Modifications de ce tour",diffUnavailable:"Diff indisponible",binaryFileDiffUnavailable:"Diff indisponible pour les fichiers binaires",truncated:"... (tronque)",unchangedLines:"{count} lignes inchangées",executionDuration:"Temps d’exécution",thinkingLabel:"Raisonnement",thinkingInProgress:"En réflexion",thinkingShow:"Afficher le raisonnement",thinkingHide:"Masquer le raisonnement",thinkingDuration:"Observé {duration}",thinkingChars:"{count} caractères",copyBubble:"Copier le message",copiedBubble:"Message copié",copyFailed:"Échec de la copie",referenceMessage:"Citer le message",cancelReference:"Annuler la citation",playSpeech:"Lire à voix haute",pauseSpeech:"Pause",resumeSpeech:"Reprendre",stopSpeech:"Arrêter",speechNotSupported:"Reproduction vocale non prise en charge dans ce navigateur",searchEnterHint:"Entrée pour ouvrir · Échap pour fermer",searchHint:"Cmd/Ctrl+K",searchScope:"Portée de recherche : base locale des sessions Web UI uniquement ; les sessions d’historique Hermes en lecture seule ne sont pas incluses.",searchFailed:"Échec de la recherche de sessions",searchNoSnippet:"Aucun extrait disponible",searchNoResults:"Aucune session correspondante",searchRecent:"Session récente",searchEmpty:"Sessions récentes",searchPlaceholder:"Rechercher des sessions...",searchSubtitle:"Rechercher par titre ou contenu des messages",searchTitle:"Rechercher des sessions",stopGateway:"Arrêter le gateway",start:"Démarrer",workspaceSetFailed:"Échec de la définition du workspace",workspaceSet:"Workspace défini",workspacePlaceholder:"Saisissez le chemin du projet, ex. /home/user/project",folderPickerEmpty:"(Vide)",folderPickerNoFolders:"Aucun dossier de workspace",folderPickerSelected:"Sélectionné :",workspaceDefault:"Par défaut",workspaceDefaultTooltip:"Cet espace de travail est défini par défaut et sera renseigné automatiquement pour les nouveaux chats",workspacePin:"Définir comme espace de travail par défaut",workspaceUnpin:"Retirer l’espace de travail par défaut",workspaceRecent:"Récent",defaultWorkspace:"Espace de travail par défaut",more:"Plus",workspace:"Espace de travail",setWorkspaceTitle:"Définir le workspace de session",setWorkspace:"Définir le workspace",modelSetFailed:"Échec de la définition du modèle",modelSet:"Modèle défini",modelSwitching:"Changement de modèle...",setModelTitle:"Définir le modèle de session",standardModels:"Modèles standards",moaPresets:"Combinaisons MoA",noMoaPresets:"Aucune combinaison MoA disponible",modelType:"Type de modèle",setModel:"Définir le modèle",newCliChat:"Nouveau CLI",cliEmptyState:"Démarrer un chat CLI",autoPlaySpeech:"Lire la voix automatiquement",voiceInput:{startCapture:"Demarrer la saisie vocale",stopCaptureAndInsert:"Arreter la saisie vocale et inserer la transcription",cancelCapture:"Annuler la saisie vocale",statusLabel:"Statut : {status}",transcriptLabel:"Transcription : {text}",errorLabel:"Erreur : {error}",recentEvents:"Evenements recents",status:{idle:"Inactif",capturing:"Ecoute",transcribing:"Transcription",sending:"Insertion dans la saisie",error:"Erreur"},browserSpeechUnsupported:"La reconnaissance vocale du navigateur n est pas prise en charge par ce navigateur.",browserSpeechFailed:"La reconnaissance vocale du navigateur a echoue.",browserSpeechFailedWithReason:"La reconnaissance vocale du navigateur a echoue : {error}.",microphoneUnsupported:"La capture micro n est pas prise en charge par ce navigateur.",microphoneRecordingFailed:"L enregistrement micro a echoue."}},jobs:{title:"Taches planifiees",createJob:"Creer une tache",editJob:"Modifier la tache",noJobs:"Aucune tache planifiee. Creez-en une pour commencer.",sortBy:"Trier",sortByName:"Par nom",sortByTime:"Par date",sortByNameHint:"Trier par nom",sortByTimeHint:"Trier par date",sortAsc:"Croissant",sortDesc:"Décroissant",name:"Nom",namePlaceholder:"Nom de la tache",schedule:"Planification (expression Cron)",schedulePlaceholder:"ex. 0 9 * * *",quickPresets:"Presets rapides",selectPreset:"Selectionner un preset...",presetEveryMinute:"Chaque minute",presetEvery5Min:"Toutes les 5 minutes",presetEveryHour:"Chaque heure",presetEveryDay:"Tous les jours a 00:00",presetEveryDay9:"Tous les jours a 09:00",presetEveryMonday:"Chaque lundi a 09:00",presetEveryMonth:"Le 1er de chaque mois a 09:00",prompt:"Invite",promptPlaceholder:"L'invite a executer",skills:"Skills",skillsPlaceholder:"Selectionner les skills...",provider:"Provider",model:"Model",defaultProvider:"Default provider",defaultModel:"Default model",deliverTarget:"Cible de livraison",origin:"Origine",local:"Local",repeatCount:"Nombre de repetitions (facultatif)",modelPlaceholder:"Modele par defaut",repeatPlaceholder:"Laisser vide pour infini",jobCreated:"Tache creee",jobUpdated:"Tache mise a jour",nameRequired:"Le nom est requis",scheduleRequired:"La planification est requise",promptRequired:"L'invite est requise",loadFailed:"Echec du chargement de la tache",jobPaused:"Tache en pause",jobResumed:"Tache reprise",jobTriggered:"Job declenche",modelUpdated:"Modele mis a jour",jobDeleted:"Tache supprimee",status:{running:"En cours",paused:"En pause",disabled:"Desactivee",scheduled:"Planifiee"},info:{model:"Modele",provider:"Provider",schedule:"Planification",lastRun:"Derniere execution",nextRun:"Prochaine execution",deliver:"Livraison",repeat:"Repetition"},action:{pause:"Pause",pauseJob:"Mettre en pause",resume:"Reprendre",resumeJob:"Reprendre la tache",runNow:"Executer maintenant",triggerImmediately:"Déclencher immédiatement"},runHistory:{title:"Historique",runs:"exécutions",noRuns:"Aucun historique trouvé."}},skills:{title:"Competences",targetFilter:"Runtime",targets:{hermes:"Hermes",claude:"Claude",codex:"Codex"},searchPlaceholder:"Rechercher des competences...",noMatch:"Aucune competence ne correspond a votre recherche",noSkills:"Aucune competence trouvee",backTo:"Retour a",attachedFiles:"Fichiers joints",loadFailed:"Echec du chargement de la competence",fileLoadFailed:"Echec du chargement du fichier",modified:"Modifié par l'utilisateur",archived:"Archivé",pinned:"Épinglé",pin:"Épingler la compétence",unpin:"Désépingler la compétence",pinFailed:"Impossible de changer le statut d'épinglage",edit:"Modifier",saving:"Enregistrement...",editorLabel:"Éditeur de skill",saveSuccess:"Compétence enregistrée",saveFailed:"Échec de l’enregistrement de la compétence",toggleFailed:"Echec de l'activation/desactivation de la competence",source:{builtin:"Intégré",hub:"Hub",local:"Local",external:"Externe"},delete:"Supprimer",deleteConfirm:'Supprimer la compétence "{name}" ? Action irréversible.',deleteSuccess:"Compétence supprimée",deleteFailed:"Échec de la suppression",import:"Importer",importTitle:"Importer une compétence",importModeZip:"Zip",importModeFolder:"Dossier",importHintZip:"Téléversez une archive .zip contenant un dossier avec SKILL.md",importHintFolder:"Sélectionnez un dossier local (doit contenir SKILL.md)",importTargetCategory:"Catégorie cible (optionnel)",importTargetCategoryPlaceholder:"Laisser vide pour misc",importSelectFile:"Choisir un fichier .zip",importSelectFolder:"Choisir un dossier",importInvalidFile:"Seules les archives .zip sont prises en charge",importFileCount:"fichiers",importNoSelection:"Veuillez d'abord choisir un fichier ou dossier",importSuccess:"Compétence importée",importFailed:"Échec de l'import",path:{local:"Local",external:"Externe"},externalDirs:{manage:"Dossiers externes",title:"Gérer les dossiers externes",hint:"Gère config.skills.external_dirs. Prend en charge ~ et $VAR ; les chemins absents sont grisés.",add:"Ajouter un dossier",placeholder:"/path/to/skills ou ~/my-skills",empty:"Aucun dossier externe",missing:"Chemin introuvable",notDir:"Pas un dossier",saveSuccess:"Dossiers externes enregistrés",saveFailed:"Échec de l'enregistrement",loadFailed:"Échec du chargement des dossiers externes",removeRow:"Retirer"},pathCopied:"Chemin copié",pathCopyFailed:"Échec de la copie du chemin",reloadHint:"Sessions actives : exécutez /reload-skills ; les nouvelles le chargent automatiquement.",writeApprovalButton:"En attente {count}",writeApprovalTitle:"Ecritures en attente de validation",writeApprovalDescription:"Approuvez ou refusez les ecritures de memoire et de skills preparees par Hermes Agent.",writeApprovalRefresh:"Actualiser",writeApprovalEmpty:"Aucune ecriture en attente.",writeApprovalUnsupported:"Cette version de Hermes Agent ne prend pas en charge la validation des ecritures. Mettez Hermes Agent a jour pour utiliser cette fonction.",writeApprovalMemory:"Memoire",writeApprovalSkills:"Skills",writeApprovalViewDiff:"Verifier",writeApprovalHideDiff:"Masquer",writeApprovalNoDiff:"Aucune difference disponible.",writeApprovalLoadFailed:"Impossible de charger les ecritures en attente",writeApprovalDiffFailed:"Impossible de charger les details de l ecriture",writeApprovalActionFailed:"Impossible de traiter l ecriture en attente",writeApprovalApproved:"Ecriture approuvee",writeApprovalRejected:"Ecriture refusee",writeApprovalApprove:"Approuver",writeApprovalReject:"Refuser",writeApprovalPendingMemoryWrite:"Ecriture de memoire en attente",writeApprovalCurrentFile:"Fichier actuel {file}",writeApprovalProposedFile:"Fichier propose {file}",writeApprovalDiffSection:"Difference",writeApprovalPatchOldStringMissing:"Le old_string du patch est introuvable dans le fichier actuel {file}; l approbation ne modifiera pas le fichier.",writeApprovalRequestedOldString:"old_string demande",writeApprovalCurrentReadFailed:"Le fichier actuel {file} n a pas pu etre lu comme texte UTF-8.",writeApprovalDeleteSkill:"Cette validation supprime le skill {skill}.",writeApprovalRemoveFile:"Cette validation supprime {file} du skill {skill}."},plugins:{title:"Plugins",refresh:"Actualiser",notice:"Inventaire des manifests de plugins Hermes détectables. Les métadonnées de découverte sont lues sans charger le code des plugins. Les plugins utilisateur standalone peuvent être activés ou désactivés ici; les changements prennent effet dans les nouvelles sessions Hermes.",loadFailed:"Échec du chargement des plugins",updateFailed:"Échec de la mise à jour du plugin",enableSuccess:"{name} activé",disableSuccess:"{name} désactivé",commandCopied:"Commande copiée",searchPlaceholder:"Rechercher key, nom, description, chemin...",source:"Source",kind:"Type",statusTitle:"Statut",configStatus:"config : {status}",notAvailable:"n/a",copyCommand:"Copier la commande",managedElsewhere:"géré ailleurs",noMatch:"Aucun plugin ne correspond aux filtres actuels",enabled:"activé",disabled:"désactivé",summary:{total:"Total",active:"Activé / auto",inactive:"Inactif",disabled:"Désactivé",providerManaged:"Géré par provider"},status:{enabled:"Activé","auto-active":"Auto-actif",inactive:"Inactif",disabled:"Désactivé","provider-managed":"Géré par provider"},statusLabel:{enabled:"Activé par configuration","auto-active":"Auto-actif",inactive:"Inactif",disabled:"Désactivé","provider-managed":"Géré par provider"},configStatuses:{enabled:"activé",disabled:"désactivé","not-enabled":"non activé",auto:"auto","provider-managed":"géré par provider"},table:{plugin:"Plugin",status:"Statut",source:"Source",kind:"Type",capabilities:"Capacités",path:"Chemin / entrypoint",manage:"Gérer"},capabilities:{tools:"{count} outils",hooks:"{count} hooks",env:"{count} env"},metadata:{agentRoot:"Racine de l’agent",python:"Python",scanCwd:"Analyser cwd",projectPlugins:"Plugins du projet"}},petdex:{title:"Petdex Pets",subtitle:"Browse the public petdex catalog used by Hermes desktop pets.",refresh:"Refresh",adopt:"Adopt",active:"Active",adopted:"Adopted {name}",adoptFailed:"Failed to adopt pet",loadFailed:"Failed to load petdex catalog",searchPlaceholder:"Search by name, slug, author, or kind",kindFilter:"Kind",spritesheet:"Spritesheet",submittedBy:"By {name}",empty:"No pets match the current filters.",showMore:"Show {count} more",summary:{total:"Catalog total",visible:"Matching",kinds:"Kinds",generatedAt:"Generated at"}},memory:{title:"Memoire",refresh:"Actualiser",loadFailed:"Echec du chargement de la memoire",myNotes:"Mes notes",noNotes:"Aucune note pour l'instant.",notesPlaceholder:"Ecrivez vos notes...",userProfile:"Profil utilisateur",noProfile:"Aucun profil pour l'instant.",profilePlaceholder:"Ecrivez votre profil...",soul:"Ame",noSoul:"Aucune configuration d'ame pour l'instant.",soulPlaceholder:"Ecrivez la configuration de l'ame..."},models:{title:"Modeles",addProvider:"Ajouter un fournisseur",noProviderPromptTitle:"Aucun fournisseur de modeles configure",noProviderPromptMessage:'Le profil actuel "{profile}" ne contient aucun fournisseur de modeles. Ouvrir les parametres des modeles maintenant ?',noProviderPromptLater:"Pas maintenant",noProviderPromptAction:"Ouvrir les parametres",refreshModelCache:"Actualiser le cache des modeles",refreshModelCacheLoading:"Actualisation du cache des modeles...",refreshModelCacheSuccess:"Cache des modeles actualise",refreshModelCacheFailed:"Impossible d actualiser le cache des modeles",refreshModels:"Actualiser les modèles",restoreModels:"Restaurer la liste précédente",refreshModelsConfirmTitle:"Confirmer les modifications de la liste des modèles",refreshModelsConfirmContent:"Cette actualisation supprimera {removed} modèle(s) et en ajoutera {added}. Supprimés : {removedList}",refreshModelsConfirmAction:"Remplacer la liste des modèles",refreshModelsSuccess:"Liste des modèles actualisée ({count} modèles, {unavailable} indisponibles)",refreshModelsFailed:"Échec de l’actualisation des modèles du fournisseur",restoreModelsSuccess:"Liste précédente restaurée ({count} modèles)",restoreModelsFailed:"Échec de la restauration de la liste précédente",providerType:"Type de fournisseur",preset:"Préréglage",custom:"Personnalise",selectProvider:"Selectionner un fournisseur",chooseProvider:"Choisir un fournisseur...",name:"Nom",autoGeneratedName:"Genere automatiquement a partir de l'URL de base",baseUrl:"URL de base",region:"Région",regionIntl:"International",regionCn:"Chine continentale",baseUrlPlaceholder:"ex. https://api.example.com/v1",apiKey:"Cle API",apiKeyPlaceholder:"sk-...",defaultModel:"Modele par defaut",selectOrInput:"Sélectionner ou saisir un modèle...",selectModel:"Selectionner un modele...",providerAdded:"Fournisseur ajoute",providerDeleted:"Fournisseur supprime",providerCredentialsCleared:"Identifiants du fournisseur effaces",clearProviderCredentials:"Effacer les identifiants",clearCredentialsConfirm:"Effacer les identifiants enregistres pour « {name} » ? Ce fournisseur integre restera dans la liste et pourra etre reutilise apres configuration des identifiants.",disableProvider:"Desactiver le fournisseur",disableProviderConfirm:"Desactiver le fournisseur integre « {name} » ? Il restera integre et pourra etre reactive plus tard.",providerDisabled:"Fournisseur desactive",defaultProviderUpdated:"Fournisseur par defaut mis a jour",defaultProviderUpdateFailed:"Echec de la mise a jour du fournisseur par defaut",defaultModelUpdated:"Modele par defaut mis a jour",defaultModelUpdateFailed:"Echec de la mise a jour du modele par defaut",deleteProvider:"Supprimer le fournisseur",deleteConfirm:'Etes-vous sur de vouloir supprimer "{name}" ?',codexLoginTitle:"Connexion OpenAI Codex",codexWaiting:"Entrez ce code sur la page d'autorisation pour vous connecter :",codexCopyCode:"Code copié",codexOpenLink:"Ouvrir la page d'autorisation",codexApproved:"Connexion réussie",codexExpired:"L'autorisation a expiré. Veuillez réessayer.",nousLoginTitle:"Connexion Nous Portal",nousWaiting:"Entrez ce code sur la page d'autorisation:",nousCopyCode:"Code copié",nousOpenLink:"Ouvrir la page d'autorisation",nousApproved:"Connexion réussie",nousDenied:"Autorisation refusée",nousExpired:"Autorisation expirée",copilotLoginTitle:"Connexion GitHub Copilot",copilotWaiting:"Ouvrez GitHub et saisissez le code ci-dessous pour autoriser. La fenêtre se fermera automatiquement après approbation.",copilotCopyCode:"Code copié",copilotOpenLink:"Ouvrir la page d'autorisation GitHub",copilotApproved:"Connexion réussie !",copilotDenied:"Autorisation refusée.",copilotExpired:"Le lien d'autorisation a expiré. Veuillez réessayer.",copilotAddDetectedTitle:"GitHub Copilot détecté",copilotAddDetected:"Un token OAuth GitHub Copilot a été détecté sur cette machine. Cliquez sur Ajouter pour activer Copilot dans Hermes.",copilotAddSourceEnv:"Source : ~/.hermes/.env (COPILOT_GITHUB_TOKEN)",copilotAddSourceGhCli:"Source : gh CLI (gh auth token)",copilotAddSourceAppsJson:"Source : extension Copilot de VS Code (apps.json)",copilotDeleteHintEnv:"Cela supprimera COPILOT_GITHUB_TOKEN dans ~/.hermes/.env. Les autres outils ne sont pas affectés.",copilotDeleteHintGhCli:"Copilot sera masqué dans Hermes. Votre connexion gh CLI n'est pas affectée — `gh auth status` indiquera toujours que vous êtes connecté.",copilotDeleteHintAppsJson:"Copilot sera masqué dans Hermes. Votre extension Copilot de VS Code reste connectée.",customBadge:"PERSONNALISÉ",previewBadge:"APERÇU",disabledBadge:"INDISPONIBLE",disabledTooltip:"Ce modèle n'est pas disponible pour votre compte.",customModelPlaceholder:"ID de modèle non listé",customModelHint:"Pour les modèles pris en charge par le fournisseur mais non renvoyés par l’API ; ce n’est pas un renommage affiché. Entrée pour charger.",noProviders:"Aucun fournisseur trouve. Ajoutez un fournisseur personnalise pour commencer.",clearVisibleModels:"Effacer la sélection",generalTitle:"Modeles generaux",combinationTitle:"Ensembles de modeles",combinationSubtitle:"Configurez les presets MoA : les modeles de reference fournissent d abord des perspectives, puis un modele agregateur produit la reponse finale et les appels d outils.",combinationPreset:"Preset",combinationName:"Nom",combinationAddModel:"Ajouter un ensemble de modeles",combinationEditModel:"Modifier l ensemble de modeles",combinationNewPreset:"Nouveau preset",combinationPresetPlaceholder:"ex. review",combinationAddPreset:"Ajouter un preset",combinationSetDefault:"Definir par defaut",combinationEnabled:"Activer les references",combinationReferenceModels:"Modeles de reference",combinationReferenceModel:"Modele de reference",combinationAddReference:"Ajouter un modele de reference",combinationAggregator:"Modele agregateur",combinationReferenceTemperature:"Temperature des references",combinationAggregatorTemperature:"Temperature de l agregateur",combinationMaxTokens:"Tokens max.",combinationNotSet:"Non defini",combinationSaved:"Ensemble de modeles enregistre",combinationLoadFailed:"Echec du chargement de l ensemble de modeles",combinationSaveFailed:"Echec de l enregistrement de l ensemble de modeles",combinationPresetExists:"Le preset existe deja",combinationNameRequired:"Saisissez un nom d ensemble de modeles",combinationNameInvalid:"Le nom ne peut contenir que des lettres, des chiffres, des underscores, des tirets et des points",combinationReferenceRequired:"Ajoutez au moins un modele de reference",combinationAggregatorRequired:"Selectionnez un modele agregateur",auxiliaryTitle:"Modèles auxiliaires",auxiliarySubtitle:"Remplacements de modèle pour les tâches secondaires comme la compression, la vision, les approbations, MCP et la maintenance en arrière-plan.",auxiliaryRefresh:"Actualiser",auxiliaryTask:"Tâche",auxiliaryTimeout:"Délai",auxiliaryDownloadTimeout:"Délai de téléchargement",auxiliaryActions:"Actions",auxiliaryDefault:"Par défaut",auxiliaryCustomEndpoint:"Endpoint personnalisé",auxiliaryProviderAuto:"Auto",auxiliaryProviderMain:"Modèle principal",auxiliaryProviderPlaceholder:"auto, main ou clé fournisseur",auxiliaryDownloadShort:"téléchargement",auxiliaryExtraBody:"JSON de corps supplémentaire",auxiliaryClear:"Réinitialiser",auxiliarySaved:"Modèles auxiliaires enregistrés",auxiliaryLoadFailed:"Impossible de charger les modèles auxiliaires",auxiliarySaveFailed:"Impossible d’enregistrer les modèles auxiliaires",auxiliaryInvalidExtraBody:"Le corps supplémentaire doit être un objet JSON",auxiliaryTaskCompression:"Compression",auxiliaryTaskVision:"Vision",auxiliaryTaskWebExtract:"Extraction web",auxiliaryTaskSkillsHub:"Hub de compétences",auxiliaryTaskApproval:"Approbation",auxiliaryTaskMcp:"MCP",auxiliaryTaskTitleGeneration:"Génération de titre",auxiliaryTaskTriageSpecifier:"Spécificateur de triage",auxiliaryTaskKanbanDecomposer:"Décomposition Kanban",auxiliaryTaskProfileDescriber:"Description du profil",auxiliaryTaskCurator:"Curateur",auxiliaryTaskSessionSearch:"Recherche de sessions",auxiliaryTaskFlushMemories:"Écriture des mémoires",currentDefault:"Par défaut actuel",defaultShort:"Défaut",setDefaultProvider:"Definir comme fournisseur par defaut",setDefault:"Definir par defaut",builtIn:"Integre",customType:"Personnalise",provider:"Fournisseur",contextLength:"Longueur du contexte",contextLengthPlaceholder:"ex. 256000 (facultatif)",apiMode:"Mode API",local:"Local ({host})",selectProviderRequired:"Veuillez selectionner un fournisseur",baseUrlRequired:"L'URL de base est requise",apiKeyRequired:"La cle API est requise",modelRequired:"Le modele par defaut est requis",enterBaseUrl:"Veuillez d'abord entrer l'URL de base",unexpectedFormat:"Format de reponse inattendu",foundModels:"{count} modeles trouves",fetchFailed:"Echec de la recuperation des modeles",xaiWaiting:"Terminez l’autorisation sur la page xAI ouverte. La fenêtre se fermera automatiquement après approbation.",xaiOpenLink:"Ouvrir la page d’autorisation xAI",xaiLoginTitle:"Connexion OAuth xAI Grok",xaiExpired:"Le lien d’autorisation a expiré. Veuillez réessayer.",xaiCopyLink:"Copier le lien d’autorisation",xaiApproved:"Connexion réussie !",anthropicLoginTitle:"Connexion OAuth Claude",anthropicWaiting:"Terminez l’autorisation sur Claude, puis collez ici le code renvoyé.",anthropicOpenLink:"Ouvrir la page d’autorisation Claude",anthropicCopyLink:"Copier le lien d’autorisation",anthropicCodePlaceholder:"Collez le code d’autorisation...",anthropicSubmitCode:"Envoyer le code",anthropicApproved:"Connexion réussie !",anthropicExpired:"L’autorisation a expiré. Veuillez réessayer.",minimaxLoginTitle:"Connexion MiniMax Coding Plan",minimaxRegionHint:"Choisissez la région MiniMax de votre compte Coding Plan.",minimaxGlobal:"International",minimaxChina:"Chine",minimaxStart:"Démarrer l’autorisation",minimaxWaiting:"Ouvrez la page d’autorisation MiniMax et saisissez ce code. Cette fenêtre se fermera automatiquement après approbation.",minimaxOpenLink:"Ouvrir la page d’autorisation MiniMax",minimaxApproved:"Connexion réussie !",minimaxExpired:"L’autorisation a expiré. Veuillez réessayer.",visibilitySelectOne:"Conserver au moins un modèle visible",visibilitySaved:"Modèles visibles enregistrés",visibilitySaveFailed:"Échec de l’enregistrement des modèles visibles",visibilityHint:"Affecte uniquement le sélecteur de modèles et la page Modèles de la Web UI. La configuration provider/model de Hermes CLI n’est pas modifiée ; les appels utilisent toujours l’ID de modèle d’origine.",showAllModels:"Afficher tous les modèles",searchPlaceholder:"Rechercher des modèles...",noResults:"Aucun résultat",noModels:"Aucun modèle",removeCustomModel:"Retirer ce modèle non listé",refresh:"Actualiser la liste des modèles (recharger config.yaml)",more:"de plus",models:"Liste des modèles",manageVisibleModelsFor:"Gérer les modèles visibles de {name}",manageVisibleModels:"Gérer les modèles visibles",getApiKey:"Obtenir une API Key",count:"modèles",aliasUseOriginal:"Restaurer l’ID d’origine",aliasTitleFor:"Nom affiché pour {model}",aliasTitle:"Nom affiché du modèle",aliasSaveFailed:"Échec de l’enregistrement du nom affiché",aliasPlaceholder:"Laisser vide pour utiliser l’ID de modèle d’origine",aliasManageFor:"Noms affichés pour {provider}",aliasManage:"Noms affichés",aliasHint:"Modifie uniquement le nom affiché dans la Web UI. Hermes reçoit toujours l’ID de modèle d’origine.",aliasEdit:"Renommer",aliasCanonical:"ID d’origine : {model}"},profiles:{title:"Profils",create:"Creer un profil",import:"Importer",export:"Exporter",rename:"Renommer",delete:"Supprimer",switchTo:"Changer Hermes Profile",switchConfirm:"Cette action execute `hermes profile use {name}` et change le active profile Hermes CLI. Continuer ?",switchSuccess:'Hermes active profile change vers "{name}"',switchFailed:"Echec du changement Hermes Profile. La passerelle peut necessiter un redemarrage manuel.",createSuccess:'Profil "{name}" cree',createFailed:"Echec de la creation du profil",renameSuccess:"Profil renomme",renameFailed:"Echec du renommage du profil",deleteConfirm:'Etes-vous sur de vouloir supprimer le profil "{name}" ?',deleteSuccess:"Profil supprime",deleteFailed:"Echec de la suppression du profil",exportSuccess:"Profil exporte",exportFailed:"Echec de l'exportation du profil",exportTimeout:"Délai d'export dépassé. Ce profil est trop volumineux à archiver — ce sont généralement les caches et environnements virtuels du workspace qui l'alourdissent.",importTimeout:"Délai d'import dépassé pendant la décompression de l'archive par le serveur. Réessayez sur un stockage plus rapide ou importez-la avec la CLI Hermes.",importSuccess:"Profil importe",importFailed:"Echec de l'importation du profil",importSelectFile:"Selectionner un fichier d'archive",importInvalidFile:"Veuillez selectionner une archive valide (.tar.gz, .tgz, .gz, .zip)",name:"Nom du profil",namePlaceholder:"Lettres, chiffres et tirets uniquement",nameValidation:"Le nom du profil ne peut contenir que des lettres minuscules, des chiffres, des tirets bas et des tirets",newName:"Nouveau nom",newNamePlaceholder:"Entrez un nouveau nom",cloneFromCurrent:"Cloner depuis le profil actuel",cloneCleanupNotice:"Lors du clonage, les identifiants de plateformes exclusives (Weixin / Telegram / Slack, etc.) sont automatiquement ignorés pour éviter les conflits avec le profil source",cloneStrippedCredentials:"{count} identifiant(s) exclusif(s) supprimé(s) : {list}",cloneDisabledPlatforms:"{count} plateforme(s) désactivée(s) : {list}",cloneStrippedConfigCredentials:"{count} identifiant(s) intégré(s) supprimé(s) de config.yaml : {list}",archivePath:"Chemin de l'archive",archivePathPlaceholder:"Chemin serveur du fichier d'archive",importName:"Nom du profil (facultatif)",importNamePlaceholder:"Laisser vide pour utiliser le nom de l'archive",active:"Actif",model:"Modele",gateway:"Passerelle",alias:"Alias",provider:"Fournisseur",path:"Chemin",skills:"Competences",hasEnv:"A un .env",hasSoulMd:"A un soul.md",noProfiles:"Aucun profil trouve. Creez-en un pour commencer.",avatar:{title:"Avatar personnalisé",customize:"Personnaliser l’avatar",upload:"Importer une image",random:"Générer au hasard",reset:"Restaurer par défaut",hint:"PNG, JPEG ou WebP, 1 Mo maximum",invalidType:"Veuillez choisir une image PNG, JPEG ou WebP",tooLarge:"L’image d’avatar ne doit pas dépasser 1 Mo",saveSuccess:"Avatar enregistré",saveFailed:"Échec de l’enregistrement de l’avatar",resetSuccess:"Avatar par défaut restauré",resetFailed:"Échec de la restauration de l’avatar par défaut"},runtime:{activeProfile:"Actuel : {name}",bridgeWorker:"État du Bridge",gateway:"Passerelle",active:"Actif",activeTag:"Actuel",idle:"Inactif",checking:"Vérification",running:"En cours",stopped:"Arrêté",restartGateway:"Redémarrer le gateway",restartProfile:"Redémarrer le profil",switchProfile:"Changer le profil frontend",gatewayRestarted:"Gateway redémarré : {name}",gatewayRestartFailed:"Échec du redémarrage du gateway",profileRestarted:"Profil redémarré : {name}",profileRestartFailed:"Échec du redémarrage du profil"}},logs:{title:"Journaux",all:"Tout",searchPlaceholder:"Rechercher...",refresh:"Actualiser",noEntries:"Aucune entree de journal"},theme:{title:"Thème",saved:"Thème enregistré",saveFailed:"Échec de l’enregistrement du thème",reset:"Rétablir les valeurs",resetSuccess:"Thème par défaut restauré",appearance:"Apparence",appearanceHint:"Les modifications sont prévisualisées dans toute l’interface",mode:"Luminosité",modeHint:"Choisissez une palette claire ou sombre",modeSystem:"Suivre le système",modeLight:"Clair",modeDark:"Sombre",style:"Style",styleHint:"Choisissez le caractère de l’interface",styleInk:"Encre",styleComic:"BD",fontSize:"Taille du texte",fontSizeHint:"Taille de base de l’interface et des conversations",textColor:"Couleur du texte",textColorHint:"Les tons secondaires sont générés automatiquement",accentColor:"Couleur de sélection",accentColorHint:"Utilisée pour les éléments actifs, sélections et boutons principaux",background:"Image d’arrière-plan",backgroundHint:"Importez un arrière-plan personnel",backgroundTypeError:"Utilisez une image PNG, JPEG, WebP ou GIF",backgroundSizeError:"L’image doit faire au maximum 10 Mo",backgroundUploaded:"Image d’arrière-plan mise à jour",backgroundUploadFailed:"Échec de l’importation de l’image",backgroundRemoved:"Image d’arrière-plan supprimée",backgroundRemoveFailed:"Échec de la suppression de l’image",backgroundReplace:"Remplacer l’image",backgroundUpload:"Importer une image",backgroundRemove:"Supprimer",backgroundEmpty:"Aucune image d’arrière-plan",backgroundNote:"L’image est liée à votre compte. Un cache local évite le scintillement.",preview:"Aperçu",previewTitle:"Votre espace, votre ambiance",previewText:"Les couleurs du texte et de sélection s’appliquent à toute l’interface.",previewAction:"Action sélectionnée"},settings:{title:"Parametres",saved:"Enregistre",saveFailed:"Echec de l'enregistrement",tabs:{display:"Affichage",account:"Compte actuel",users:"Gestion des comptes",webhooks:"Webhooks",agent:"Agent",proxy:"Proxy",memory:"Memoire",compression:"Compression",session:"Session",privacy:"Confidentialite",apiServer:"Serveur API",models:"Modèles",voice:"Voix"},webhooks:{title:"Webhooks",description:"Envoyez les événements du cycle de vie Chat Run à des systèmes externes sans bloquer l’exécution du chat.",deliveryNote:"La livraison utilise une file en mémoire limitée. Les endpoints sont traités en parallèle et chacun conserve l’ordre des événements. Les livraisons en attente ne sont pas conservées après un redémarrage du serveur.",createTitle:"Ajouter un webhook",editTitle:"Modifier le webhook",allProfiles:"Tous les profils",queued:"{count} en attente",deleteConfirm:"Supprimer ce webhook ? Ses livraisons en attente seront également abandonnées.",localInboxTitle:"Boîte de réception de test locale",localInboxDescription:"{count} événements récents reçus par le récepteur de test intégré. Ils sont conservés uniquement en mémoire et effacés au redémarrage du serveur.",localInboxEmpty:"Aucun événement de test local reçu pour le moment.",localInboxPayloadTitle:"Payload webhook reçu",clearInboxConfirm:"Effacer tous les événements de la boîte de test locale ?",columns:{name:"Nom",url:"URL",events:"Événements",profiles:"Profils",status:"État",actions:"Actions",receivedAt:"Reçu le",event:"Événement",eventId:"ID de l’événement",deliveryId:"ID de livraison"},events:{messageCreated:"Message utilisateur créé",runQueued:"Exécution en attente",runStarted:"Exécution démarrée",toolStarted:"Outil démarré",toolCompleted:"Outil terminé",toolFailed:"Échec de l’outil",approvalRequested:"Approbation demandée",approvalResolved:"Approbation traitée",clarificationRequested:"Clarification demandée",clarificationResolved:"Clarification traitée",completed:"Exécution terminée",failed:"Échec de l’exécution"},status:{enabled:"Activé",disabled:"Désactivé"},runtime:{idle:"Inactif",delivering:"Livraison en cours",retrying:"Nouvelle tentative",success:"Livré",failed:"Échec",dropped:"Abandonné"},actions:{add:"Ajouter un webhook",localTest:"Utiliser le récepteur de test local",test:"Tester",enable:"Activer",disable:"Désactiver",refresh:"Actualiser",clear:"Effacer",view:"Afficher"},form:{name:"Nom",localTestName:"Test Webhook local",namePlaceholder:"Par exemple : Notifications d’exploitation",url:"URL de l’endpoint",secret:"Secret de signature",secretPlaceholder:"Secret facultatif pour la signature HMAC-SHA256",secretKeepPlaceholder:"Laisser vide pour conserver le secret actuel",clearSecret:"Supprimer le secret enregistré",events:"Événements",profiles:"Profils",profilesPlaceholder:"Laisser vide pour recevoir tous les profils",maxRetries:"Tentatives après le premier échec (0–10)",includeContent:"Inclure le texte final de l’assistant",includeContentHint:"La réponse finale peut contenir des informations sensibles. Le raisonnement, les prompts système et les arguments d’outils ne sont jamais envoyés.",includeUserContent:"Inclure le texte du message utilisateur",includeUserContentHint:"Les messages utilisateur peuvent contenir des informations sensibles. Désactivé par défaut ; les prompts système, le raisonnement, les arguments et résultats d’outils ne sont pas inclus.",allowPrivateNetwork:"Autoriser les adresses réseau privées ou locales",allowPrivateNetworkHint:"À activer uniquement pour des endpoints internes de confiance. Le DNS est revérifié avant chaque livraison.",enabled:"Activé"},messages:{required:"Le nom et l’URL sont obligatoires",eventRequired:"Sélectionnez au moins un événement",loadFailed:"Impossible de charger les webhooks",saved:"Webhook enregistré",saveFailed:"Impossible d’enregistrer le webhook",deleted:"Webhook supprimé",deleteFailed:"Impossible de supprimer le webhook",testSucceeded:"Webhook de test livré",testFailed:"Échec du webhook de test",localTestFailed:"Impossible de créer le récepteur de test local",inboxLoadFailed:"Impossible de charger les événements de test locaux",inboxCleared:"Événements de test locaux effacés",inboxClearFailed:"Impossible d’effacer les événements de test locaux"}},display:{streaming:"Reponses en continu",streamingHint:"Afficher les reponses de l'IA en temps reel",compact:"Mode compact",compactHint:"Reduire l'espacement des messages",showReasoning:"Afficher le raisonnement",showReasoningHint:"Afficher le processus de reflexion du modele",showCost:"Afficher le cout",showCostHint:"Afficher l'utilisation des jetons dans les reponses",inlineDiffs:"Diffs en ligne",inlineDiffsHint:"Afficher les changements de code en ligne",bellOnComplete:"Son de fin",bellOnCompleteHint:"Jouer un son lorsque l'IA a termine",notifyOnComplete:"Notification de fin",notifyOnApproval:"Approval Desktop Notification",notifyOnApprovalHint:"Show a system notification when a new approval or clarification needs attention while Studio is in the background",notifyOnApprovalTest:"Approval desktop notifications are enabled.",notifyOnApprovalTestButton:"Test",notifyOnApprovalTestSent:"Approval notification sent",notifyOnApprovalTestFailed:"Failed to send approval notification",approvalNotificationTitle:"Approval required",approvalNotificationClarifyTitle:"Clarification required",approvalNotificationBody:"Open Hermes Studio to review and respond.",notifyOnCompleteHint:"Afficher une notification systeme lorsque l'IA a termine",notifyOnCompleteMacHint:"Sur macOS, autorisez les notifications du navigateur dans Reglages Systeme.",notifyOnCompleteDenied:"Autorisation de notification refusee",notifyOnCompleteInsecure:"Les notifications du navigateur exigent HTTPS ou localhost",notifyOnCompleteUnsupported:"Ce navigateur ne prend pas en charge les notifications",notifyOnCompleteTest:"Notifications activees.",notifyOnCompleteTestButton:"Tester",notifyOnCompleteTesting:"Envoi de la notification de test...",notifyOnCompleteTestSent:"Notification de test envoyee",notifyOnCompleteTestFailed:"Echec de l envoi de la notification de test",busyInputMode:"Mode saisie active",busyInputModeHint:"Permettre la saisie pendant le traitement de l'IA",theme:"Thème",themeHint:"Choisir clair, sombre ou suivre les preferences du systeme",themeLight:"Clair",themeDark:"Sombre",themeSystem:"Systeme",chatInputHeight:"Hauteur de saisie du chat",chatInputHeightHint:"Hauteur par défaut de la zone de saisie sur ordinateur, en pixels. Le mobile reste automatique."},agent:{maxTurns:"Tours maximum",maxTurnsHint:"Nombre maximum de tours d'interaction par conversation",gatewayTimeout:"Delai d'attente de la passerelle",gatewayTimeoutHint:"Delai d'attente de la requete en secondes",restartDrainTimeout:"Delai de vidange au redemarrage",restartDrainTimeoutHint:"Delai de vidange avant redemarrage en secondes",toolEnforcement:"Application des outils",toolEnforcementHint:"Controler le mode d'execution des appels d'outils",auto:"Automatique",always:"Toujours",never:"Jamais"},gatewayAutoStart:{title:"Démarrage automatique des gateways",description:"Contrôle les gateways de profils Hermes locaux que la Web UI démarre au lancement. Cette option est stockée dans la configuration Web UI, pas dans le config.yaml du profil.",enabled:"Démarrer automatiquement les gateways",enabledHint:"Si désactivé, aucun gateway de profil ne sera démarré automatiquement au lancement.",management:"Gateway unifié",managementHint:"Nécessite Hermes Agent 0.17.0 ou ultérieur. Si activé, la Web UI écrit multiplex_profiles afin que le gateway default serve tous les profils; les autres profils ne peuvent pas configurer des points d entree de messagerie distincts comme Feishu, Weixin ou QQBot. Désactiver retire cette configuration.",managementAuto:"Automatique",managementPerProfile:"Un gateway par profil",managementUnified:"Gateway default unifié",mode:"Politique des profils",modeHint:"Démarrer tous les profils détectés ou uniquement la liste incluse explicitement.",modeAll:"Tous les profils détectés",modeInclude:"Uniquement les profils inclus",include:"Profils inclus",includeHint:"Noms de profils séparés par des virgules. En mode inclusion, une liste vide ne démarre aucun profil.",exclude:"Profils exclus",excludeHint:"Noms de profils séparés par des virgules à ignorer après application de la politique.",profileListPlaceholder:"default, reviewer"},proxy:{title:"Proxy gateway",description:"Definit les variables d environnement proxy pour le gateway du profil selectionne. Les changements redemarrent le gateway afin que les plateformes de messagerie utilisent les nouveaux parametres reseau.",httpsProxy:"HTTPS_PROXY",httpsProxyHint:"Proxy pour les requetes HTTPS. C est generalement la valeur principale.",httpProxy:"HTTP_PROXY",httpProxyHint:"Proxy pour les requetes HTTP simples.",allProxy:"ALL_PROXY",allProxyHint:"Proxy de secours lorsqu aucun proxy specifique au protocole n est defini.",noProxy:"NO_PROXY",noProxyHint:"Hosts ou domaines separes par des virgules qui contournent le proxy.",save:"Enregistrer les parametres proxy"},memory:{enabled:"Activer la memoire",enabledHint:"Permettre a l'IA de memoriser le contexte de conversation",userProfile:"Profil utilisateur",userProfileHint:"Permettre a l'IA de memoriser les preferences utilisateur",charLimit:"Limite de caracteres de la memoire",charLimitHint:"Nombre maximum de caracteres pour MEMORY.md",userCharLimit:"Limite de caracteres du profil utilisateur",userCharLimitHint:"Nombre maximum de caracteres pour USER.md"},compression:{enabled:"Activer la compression",enabledHint:"Compresser automatiquement un long historique avant de depasser le contexte du modele",threshold:"Seuil de compression",thresholdHint:"Demarrer la compression quand les jetons estimes depassent ce ratio de contexte",targetRatio:"Ratio cible",targetRatioHint:"Taille cible de l'historique apres compression comme ratio du contexte",protectLastN:"Proteger les messages recents",protectLastNHint:"Garder autant de messages recents non compresses",protectFirstN:"Proteger les premiers messages",protectFirstNHint:"Garder autant de premiers messages non compresses"},session:{mode:"Mode de reinitialisation",modeHint:"Condition de declenchement de la reinitialisation de session",modeBoth:"Inactivite + Planifie",modeIdle:"Inactivite uniquement",modeDaily:"Planifie uniquement",modeNone:"Jamais (manuel uniquement)",idleMinutes:"Delai d'inactivite",idleMinutesHint:"Temps d'attente avant reinitialisation automatique (minutes)",atHour:"Heure de reinitialisation planifiee",humanOnly:"Afficher uniquement les sessions humaines",humanOnlyHint:"Masquer par défaut le bruit des sous-agents et du moniteur de session",liveMonitorHumanOnly:"Moniteur live : n’afficher que les sessions humaines",liveMonitorHumanOnlyHint:"Masquer par défaut le bruit des sous-agents et du moniteur de session dans le moniteur live",atHourHint:"Reinitialiser la session a cette heure chaque jour",requireAuth:"Autorisation de session",requireAuthHint:"Exiger une autorisation pour les operations de session",memoryWriteApproval:"Verifier les ecritures de memoire",memoryWriteApprovalHint:"Mettre les ecritures de memoire de Hermes Agent en attente de validation avant de les enregistrer.",skillsWriteApproval:"Verifier les ecritures de skills",skillsWriteApprovalHint:"Mettre les modifications de skills de Hermes Agent en attente de validation avant de les enregistrer.",writeApprovalTitle:"Ecritures en attente de validation",writeApprovalDescription:"Approuvez ou refusez les ecritures de memoire et de skills preparees par Hermes Agent.",writeApprovalRefresh:"Actualiser",writeApprovalEmpty:"Aucune ecriture en attente.",writeApprovalMemory:"Memoire",writeApprovalSkills:"Skills",writeApprovalViewDiff:"Verifier",writeApprovalHideDiff:"Masquer",writeApprovalNoDiff:"Aucune difference disponible.",writeApprovalLoadFailed:"Impossible de charger les ecritures en attente",writeApprovalDiffFailed:"Impossible de charger les details de l ecriture",writeApprovalActionFailed:"Impossible de traiter l ecriture en attente",writeApprovalApproved:"Ecriture approuvee",writeApprovalRejected:"Ecriture refusee",writeApprovalApprove:"Approuver",writeApprovalReject:"Refuser",writeApprovalPendingMemoryWrite:"Ecriture de memoire en attente",writeApprovalCurrentFile:"Fichier actuel {file}",writeApprovalProposedFile:"Fichier propose {file}",writeApprovalDiffSection:"Difference",writeApprovalPatchOldStringMissing:"Le old_string du patch est introuvable dans le fichier actuel {file}; l approbation ne modifiera pas le fichier.",writeApprovalRequestedOldString:"old_string demande",writeApprovalCurrentReadFailed:"Le fichier actuel {file} n a pas pu etre lu comme texte UTF-8.",writeApprovalDeleteSkill:"Cette validation supprime le skill {skill}.",writeApprovalRemoveFile:"Cette validation supprime {file} du skill {skill}."},privacy:{redactPii:"Masquer les DPI",redactPiiHint:"Detecter et masquer automatiquement les informations sensibles (mots de passe, cles, etc.)"},apiServer:{enable:"Activer",enableHint:"Activer le serveur API",host:"Hote",hostHint:"Adresse d'ecoute",port:"Port",portHint:"Port d'ecoute",key:"Cle",keyHint:"Cle d'acces API",cors:"Origines CORS",corsHint:"Sources cross-origin autorisees"},voice:{activeTtsApi:"API TTS active",activeSttApi:"API STT active",ttsProvidersTitle:"Fournisseurs TTS",ttsProvidersDescription:"Gerez les integrations de synthese vocale utilisees pour lire les reponses de l’assistant et les apercus vocaux.",sttProvidersTitle:"Fournisseurs STT",sttProvidersDescription:"Gerez les integrations de transcription vocale utilisees par le microphone et le flux de saisie vocale.",localSttModelTitle:"STT local chinois-anglais",localSttModelDescription:"Reconnaissance privée sur cet appareil, sans envoyer le son vers le cloud.",localSttModelUnavailable:"Téléchargez et validez le modèle STT local avant de l’activer.",localSttModelReady:"Prêt",localSttModelDownloading:"Téléchargement",localSttModelNotInstalled:"Non installé",localSttLanguages:"Langues",localSttLanguagesValue:"Chinois + anglais",localSttDownloadSize:"Taille du téléchargement",localSttRuntime:"Runtime",localSttDownloadCf:"Télécharger via Cloudflare",localSttDownloadGithub:"Télécharger via GitHub",localSttBackgroundHint:"Le téléchargement, la vérification, l’extraction et la validation se font en arrière-plan.",localSttDownloadFailed:"Échec du téléchargement du modèle STT local : {error}",localSttStage:{queued:"En attente…",resolve:"Préparation du téléchargement…",download:"Téléchargement du modèle…",verify:"Vérification du checksum…",extract:"Extraction du modèle…",validate:"Validation du modèle…",install:"Installation du modèle…",completed:"Le modèle est prêt",failed:"Échec du téléchargement"},hermesConfigTitle:"Configuration de Hermes Agent",hermesConfigDescription:"Les fournisseurs natifs existants restent dans le profil Hermes ; ceux du Web UI apparaissent comme Hermes Studio.",hermesActiveProvider:"Fournisseur actif",hermesConfiguredProviders:"Fournisseurs configures",hermesStudioProvider:"Hermes Studio",providerSpeed:"Vitesse",providerSampleRate:"Frequence d’echantillonnage",providerBitRate:"Debit binaire",providerGroupId:"ID de groupe",providerVolume:"Volume",providerEmotion:"Emotion",providerDiarize:"Diarisation des locuteurs",providerFormatText:"Formater la transcription",providerTagAudioEvents:"Marquer les evenements audio",optionEnabled:"Active",optionDisabled:"Desactive",nativeProvider:"Fournisseur natif Hermes",selectNativeProvider:"Choisir un fournisseur natif Hermes",useHermesStudioProvider:"Utiliser le fournisseur Hermes Studio",presetElevenLabsTtsLabel:"ElevenLabs TTS",presetGeminiTtsLabel:"Gemini TTS",presetXaiTtsLabel:"xAI TTS",presetMistralTtsLabel:"Mistral TTS",presetMinimaxTtsLabel:"MiniMax TTS",presetDeepInfraTtsLabel:"DeepInfra TTS",presetMistralSttLabel:"Mistral STT",presetXaiSttLabel:"xAI STT",presetElevenLabsSttLabel:"ElevenLabs STT",presetDeepInfraSttLabel:"DeepInfra STT",noneSelected:"Aucun selectionne",keyStored:"Enregistree",keyMissing:"Manquante",customApi:"API",localBuiltin:"Integre localement",ttsCardHint:"Fournisseur de synthese vocale",sttCardHint:"Fournisseur de transcription vocale",setActive:"Activer",testAction:"Tester",connect:"Connecter",presetEdgeTtsLabel:"Edge TTS",presetEdgeTtsDescription:"Voix cloud gratuites de haute qualite de Microsoft Edge.",presetOpenaiTtsLabel:"OpenAI TTS",presetMimoTtsLabel:"MiMo TTS",presetDoubaoTtsLabel:"Volcengine Doubao TTS",presetCustomTtsLabel:"TTS personnalise",presetBrowserSttLabel:"STT du navigateur",presetBrowserSttDescription:"API native de reconnaissance vocale du navigateur.",presetOpenaiWhisperLabel:"OpenAI Whisper",presetGroqSttLabel:"Groq STT",presetDoubaoSttLabel:"Volcengine Doubao STT",presetCustomSttLabel:"STT personnalise",apiCompatibility:"Compatibilite API",openaiCompatible:"Compatible OpenAI",manualCustomEndpoint:"Endpoint personnalise manuel",connectionStep:"Connexion",discoveryManualHint:"Endpoint personnalise manuel selectionne. La decouverte des modeles n est pas disponible ; saisissez le nom du modele manuellement.",discoveryCredentialHint:"Saisissez la Base URL et la cle API, puis connectez-vous pour recuperer les modeles disponibles.",discoveryNoAutoProbeHint:"Aucune requete n est envoyee pendant la saisie. Utilisez Connect quand les identifiants sont prets.",apiKeyConnectPlaceholder:"Collez la cle API pour vous connecter ; les cles stockees ne sont jamais affichees",connectFetchModels:"Connecter et recuperer les modeles",modelRecommendedSuffix:"recommande",modelConnectManualHint:"Connectez-vous pour remplir automatiquement, ou saisissez manuellement.",modelRequiredConnectManual:"Le modele est requis. Connectez-vous pour remplir automatiquement, ou saisissez manuellement.",apiKeyRequired:"La cle API est requise.",apiKeyRequiredForDiscovery:"La cle API est requise pour recuperer les modeles.",baseUrlRequired:"La Base URL est requise.",baseUrlHttpsRequired:"Veuillez utiliser http:// ou https://.",baseUrlInvalid:"Saisissez une Base URL valide, avec https://.",discoveryFailedManualFallback:"Impossible de recuperer les modeles. Vous pouvez toujours saisir le nom du modele manuellement.",completeRequiredProviderFields:"Completez les champs provider requis avant d enregistrer.",fetchingModels:"Recuperation des modeles...",recommendedModel:"Recommande : {model}.",useRecommendedModel:"Utiliser celui-ci.",modelsDiscovered:"{count} modeles decouverts. Le modele recommande est selectionne quand le champ est vide.",remove:"Supprimer",testSuccess:"Test termine",testTextRequired:"Saisissez du texte avant de tester.",keyMissingForTest:"Ajoutez une cle API avant de tester ce fournisseur.",testing:"Test en cours...",transcribing:"Transcription...",browserSttTestHint:"Le STT du navigateur se teste depuis le microphone du chat.",sttEmptyAudio:"Aucun audio capture. Reessayez.",sttTestSuccess:"Transcription terminee",sttRecordingHint:"Enregistrement... cliquez sur Arreter pour transcrire.",keepStoredKeyPlaceholder:"Laisser vide pour conserver la cle enregistree",apiKeyPlaceholder:"Saisir la cle API",lastTest:"Dernier test",notTested:"—",recording:"Enregistrement",testFailedShort:"Echec",testFailedSummary:"Le test a echoue. Verifiez les parametres du fournisseur et reessayez.",showDetails:"Afficher les details",hideDetails:"Masquer les details",moreActions:"Plus",moreActionsFor:"Plus d’actions pour {provider}",addTtsApi:"Ajouter une API TTS",addSttApi:"Ajouter une API STT",active:"Actif",builtin:"Integre",connected:"Connecte",disconnected:"Deconnecte",source:"Source",model:"Modele",voice:"Voix",doubaoVoiceHint:"Selectionnez une voix Seed TTS 2.0 ; le champ de ressource est mis a jour automatiquement.",apiKey:"Cle API",confirmDeleteSecret:"Supprimer la cle API enregistree pour cette API vocale ?",ttsTitle:"Texte vers parole",ttsSaved:"Parametres TTS enregistres sur le serveur",ttsSaveFailed:"Impossible d’enregistrer les parametres TTS",ttsTestSaved:"Ecoute reussie; parametres TTS enregistres sur le serveur",ttsTestSaving:"Enregistrement des parametres TTS avant l’ecoute...",ttsMissingBaseUrl:"La Base URL est requise avant le test. Saisissez un endpoint fournisseur puis retestez.",ttsMissingApiKey:"La cle API est requise avant le test. Collez la cle ou enregistrez d’abord une cle serveur.",ttsCleared:"Cle TTS enregistree supprimee",ttsClearFailed:"Impossible de supprimer la cle TTS enregistree",storedBaseUrlsTitle:"Base URLs enregistrées",storedBaseUrlsHint:"Endpoints vocaux enregistrés. Les champs ci-dessus effacent seulement la valeur actuelle; supprimez les URL enregistrées ici.",storedBaseUrlsEmpty:"Aucune Base URL vocale personnalisée n’est enregistrée sur le serveur.",storedBaseUrlDelete:"Supprimer URL",storedApiKeysTitle:"API keys enregistrées",storedApiKeysHint:"Liste masquée des clés vocales stockées côté serveur. Seuls l’usage et la source sont affichés; la key complète ne l’est jamais.",storedApiKeysEmpty:"Aucune API key vocale n’est enregistrée sur le serveur.",storedKeyKindTts:"TTS",storedKeyKindStt:"STT",storedApiKeyMasked:"[stored]",storedApiKeyDelete:"Supprimer key",baseUrlPresetClear:"Effacer URL",baseUrlPresetCleared:"Base URL effacée du champ.",baseUrlPresetDelete:"Supprimer URL",baseUrlPresetDeleted:"URL de base retirée de la liste enregistrée.",baseUrlPresetDeleteFailed:"Impossible de supprimer l’URL de base enregistrée.",ttsPendingSecret:"La nouvelle cle sera enregistree",ttsStoredSecret:"Le serveur a une cle enregistree : {value}",ttsClearKey:"Supprimer la cle enregistree",sttTitle:"Parole vers texte",sttProvider:"Fournisseur STT",sttProviderHint:"Choisissez comment l’entree vocale est transcrite",sttProviderBrowser:"Navigateur",sttProviderOpenai:"Compatible OpenAI",sttProviderCustom:"Personnalise",sttBrowserHint:"Utilise la reconnaissance vocale integree du navigateur lorsqu’elle est disponible.",sttApiKey:"Cle API",sttApiKeyHint:"Enregistree cote serveur pour les fournisseurs STT qui exigent une authentification.",sttStoredSecret:"Cle serveur enregistree : {value}",sttPendingSecret:"Cle serveur enregistree : sera mise a jour a l’enregistrement",sttClearKey:"Supprimer la cle enregistree",sttModel:"Modele",sttModelHint:"Modele de parole vers texte a utiliser.",sttLanguage:"Langue",sttLanguageHint:"Indice de langue facultatif, comme en ou zh.",sttPrompt:"Prompt",sttPromptHint:"Prompt de transcription facultatif.",sttAudioTranscode:"Transcodage audio",sttAudioTranscodeNone:"Envoyer l’audio original",sttAudioTranscodeFfmpeg:"Convertir en WAV avec ffmpeg",sttBaseUrl:"Base URL",sttBaseUrlHint:"Endpoint parole vers texte personnalise compatible OpenAI.",sttSave:"Enregistrer les parametres STT",sttSaved:"Parametres STT enregistres sur le serveur.",sttSaveFailed:"Impossible d’enregistrer les parametres STT.",sttCleared:"Secret STT enregistre supprime du serveur.",sttClearFailed:"Impossible de supprimer le secret STT enregistre.",sttActiveSaved:"Fournisseur STT actif enregistre sur le serveur.",sttSaveActive:"Enregistrer le fournisseur STT actif",sttEndpointHint:"Endpoint final de transcription : {endpoint}",sttTestTitle:"Tester parole vers texte",sttTestButton:"Tester l’API STT",sttTestStopButton:"Arreter et transcrire",sttTestBackendOnly:"Le test d’API STT est disponible pour les fournisseurs compatibles OpenAI et personnalises.",sttTestRecording:"Enregistrement de l’echantillon de test... cliquez sur Arreter et transcrire lorsque vous avez termine.",sttTestTranscribing:"Transcription de l’echantillon de test...",sttTestEmpty:"Aucun audio capture pour le test STT.",sttTestSucceeded:"Test STT reussi.",sttTestFailed:"Echec du test STT : {error} — {hint}",sttFailureHintMissingConfig:"Verifiez que le fournisseur est enregistre avec une Base URL/un modele et une cle API avant le test.",sttFailureHintAuth:"Verifiez la cle API. Si une cle etait deja enregistree, collez de nouveau la cle actuelle et enregistrez avant de tester.",sttFailureHintForbidden:"La cle a atteint le fournisseur, mais n’a pas l’autorisation pour ce modele STT ou ce compte. Verifiez l’acces/la facturation du fournisseur.",sttFailureHintEndpointModel:"Verifiez la Base URL et le modele. Pour Groq, utilisez {endpoint} avec whisper-large-v3-turbo ou un autre modele STT Groq.",sttFailureHintModel:"Verifiez que le modele STT selectionne existe et est active pour ce compte.",sttFailureHintQuota:"Le fournisseur signale un probleme de quota, facturation ou limite de debit. Verifiez le quota/la facturation ou reessayez plus tard.",sttFailureHintNetworkCustom:"Le serveur n’a pas pu joindre l’endpoint STT personnalise. Verifiez que {endpoint} est joignable depuis le serveur Web UI et compatible OpenAI.",sttFailureHintNetwork:"Le serveur Web UI n’a pas pu joindre le fournisseur STT. Verifiez reseau/proxy/pare-feu et reessayez.",sttFailureHintAudio:"L’audio enregistre etait vide ou rejete. Essayez un court echantillon clair, autorisez le microphone ou reessayez dans Chrome.",sttFailureHintGenericCustom:"Verifiez la cle API, la Base URL, le modele et l’endpoint final {endpoint}.",sttFailureHintGeneric:"Verifiez la cle API, le modele et l’acces au compte fournisseur, puis reessayez.",sttTestRecordFailed:"Impossible de demarrer l’enregistrement du microphone : {error}",sttTestTranscript:"Transcription : {text}",ttsProvider:"Fournisseur TTS",ttsProviderHint:"Choisir le moteur de synthese vocale pour la lecture des messages",providerWebSpeech:"WebSpeech API (Navigateur)",providerOpenai:"OpenAI TTS",providerCustom:"Point d'acces personnalise (compatible OpenAI)",providerEdge:"Edge TTS (Gratuit, sans cle API)",webspeechVoice:"Voix",webspeechVoiceHint:"Choisir une voix depuis le navigateur ou l'OS",webspeechVoicePlaceholder:"Auto (voix par defaut)",openaiKey:"Cle API",openaiKeyHint:"Votre cle API OpenAI avec acces TTS",openaiUrl:"URL de base API",openaiUrlHint:"ex. https://api.openai.com/v1/audio/speech",openaiModel:"Modele",openaiModelHint:"tts-1 (rapide) / tts-1-hd (haute qualite)",openaiVoice:"Voix",openaiVoiceHint:"Voix a utiliser pour la synthese",customHint:"Utilisez toute API TTS compatible OpenAI — fonctionne avec GPT-SoVITS, CosyVoice, etc.",customUrl:"URL API",customUrlHint:"URL de base de votre service TTS",customUrlPlaceholder:"Adresse configuree dans l'adaptateur local, ex. http://127.0.0.1:9880",customApiKey:"Cle API (optionnelle)",customApiKeyHint:"Certains points d'acces personnalises necessitent une authentification",customApiKeyPlaceholder:"Laisser vide si inutile",edgeHint:"Propulse par Microsoft Edge TTS (node-edge-tts).",edgeUrl:"URL de l'adaptateur",edgeUrlHint:"Adresse de l'adaptateur Edge TTS, ex. http://127.0.0.1:9882",edgeUrlPlaceholder:"http://127.0.0.1:9882",edgeVoice:"Voix",edgeVoiceHint:"Choisir une voix pour la synthese vocale",edgeRate:"Vitesse",edgeRateHint:"Ajuster la vitesse de la voix (0.5x ~ 2.0x)",edgePitch:"Hauteur",edgePitchHint:"Ajuster la hauteur de la voix (-20 ~ +20 Hz)",testTitle:"Test vocal",testText:"Texte de test",testTextPlaceholder:"Entrez le texte a tester...",testTextDefault:"Bonjour, ceci est un test vocal.",testButton:"Tester",testButtonPlaying:"Lecture...",testFailed:"Echec du test : {error}",providerMimo:"MiMo TTS",mimoHint:"Xiaomi MiMo TTS — voices predefinies, conception vocale et clonage vocal",mimoApiKey:"Cle API",mimoApiKeyHint:"Obtenez votre cle sur platform.xiaomimimo.com",mimoApiKeyPlaceholder:"Cle API MiMo",mimoAuthMode:"Mode d’authentification",mimoAuthModeHint:"Format d’en-tete attendu par le point de terminaison MiMo selectionne",mimoAuthModeBearer:"Jeton Bearer (Authorization)",mimoAuthModeApiKey:"En-tete API key (api-key)",mimoAuthModeBoth:"Les deux en-tetes",mimoBaseUrl:"URL de base",mimoBaseUrlHint:"URL de l'endpoint API MiMo",mimoModel:"Modele",mimoModelHint:"Selectionnez le modele de synthese vocale",mimoModelPreset:"Voix predefinies",mimoModelVoiceDesign:"Conception vocale",mimoModelVoiceClone:"Clonage vocal",mimoVoice:"Voix",mimoVoiceHint:"Selectionnez une voix predefinie",mimoVoiceDesignPrompt:"Description vocale",mimoVoiceDesignPromptHint:"Decrivez les caracteristiques vocales souhaitees",mimoVoiceDesignPromptPlaceholder:"Ex : Une voix feminine chaude et jeune, legerement lente, avec un ton magnetique",mimoCloneAudio:"Televerser un audio",mimoCloneAudioHint:"Televersez un echantillon audio pour le clonage (mp3/wav, max 10 Mo)",mimoCloneAudioUpload:"Choisir un fichier",mimoCloneAudioClear:"Effacer",mimoStylePrompt:"Invite de style",mimoStylePromptHint:"Optionnel — decrivez le style de parole en langage naturel",mimoStylePromptPlaceholder:"Ex : Ton vif et entrain, rythme rapide"},lockedIps:{title:"IPs bloquees",count:"{count} bloquees",empty:"Aucune IP bloquee",unlock:"Debloquer",unlockAll:"Tout debloquer",unlockAllConfirm:"Debloquer toutes les IPs?",unlocked:"IP debloquee",allUnlocked:"{count} IPs debloquees",type:{password:"Password",token:"API token",pairing:"Device pairing"}},userAvatar:{title:"Avatar utilisateur",upload:"Importer une image",random:"Générer aléatoirement",reset:"Rétablir par défaut",hint:"PNG, JPEG et WebP jusqu’à 1 Mo; compression automatique sous 500 Ko.",invalidType:"Choisissez une image PNG, JPEG ou WebP",tooLarge:"L’image d’avatar doit faire 1 Mo ou moins",saveSuccess:"Avatar enregistré",saveFailed:"Échec de l’enregistrement de l’avatar",resetSuccess:"Avatar réinitialisé",resetFailed:"Échec de la réinitialisation de l’avatar"},models:{apiKey:"API Key",apiKeyPlaceholder:"Saisir l’API Key",noProviders:"Aucun fournisseur configuré",save:"Enregistrer",saveFailed:"Échec de l’enregistrement",saved:"Enregistré"}},githubPreview:{title:"Aperçu de version",description:"Clone le tag GitHub sélectionné dans l’espace de prévisualisation Web UI, installe les dépendances, puis lance l’application sur les ports de développement.",refresh:"Actualiser",selectTag:"Sélectionner un tag",prepare:"Préparer le code",install:"Installer les dépendances",start:"Démarrer l’aperçu",stop:"Arrêter",note:"Le code de prévisualisation est stocké dans le dossier de données Web UI. La production reste sur le port 8648 ; la prévisualisation utilise le frontend 8651 et le backend 8650.",path:"Chemin de prévisualisation",webuiHome:"Données de prévisualisation",currentTag:"Tag actuel",repoReady:"Dépôt prêt",dependencies:"Dépendances installées",running:"État",notRunning:"Arrêté",open:"Ouvrir l’aperçu",log:"Chemin du journal d’action",logOutput:"Sortie des journaux",actionLog:"Journal d’action",devLog:"Journal du serveur dev",yes:"Oui",no:"Non",actionFailed:"Échec de l’action",nodeEnvironmentMissing:"Node/npm n’a pas été détecté. Installez Node.js puis réessayez.",prepareSuccess:"Code de prévisualisation prêt",installSuccess:"Dépendances installées",startSuccess:"Prévisualisation terminée",stopSuccess:"Prévisualisation arrêtée"},codingAgents:{title:"Agents de code",notice:"Tous les fournisseurs et modèles ne sont pas compatibles.",claudeDescription:"CLI Anthropic pour les tâches ponctuelles en print mode et les sessions de code interactives.",codexDescription:"CLI OpenAI et flux fournisseur Hermes openai-codex pour les tâches de dépôt.",copyCommand:"Copier",commandCopied:"Commande copiée",commandCopyFailed:"Échec de la copie",refresh:"Actualiser",checking:"Vérification",installStatus:"État d’installation",installed:"Installé",notInstalled:"Non installé",installRequired:"{agent} n’est pas installé. Installez-le avant de créer une session.",installNow:"Installer",installing:"Installation",installSuccess:"Installé",installFailed:"Échec de l’installation",installFailedHermesHint:"L’installation a échoué. Demandez à Hermes de l’installer pour vous.",installFailureReason:"Raison",nodeEnvironmentMissing:"Node/npm n’a pas été détecté. Installez Node.js puis réessayez.",deleteNow:"Supprimer",deleting:"Suppression",deleteSuccess:"Supprimé",deleteFailed:"Échec de la suppression",configFiles:"Fichiers de configuration",profileScope:"Profil",providerScope:"Fournisseur",providerPlaceholder:"ex. custom:glm",modelScope:"Modèle",modelPlaceholder:"Sélectionner un modèle",launchModeScope:"Mode de lancement",launchModeGlobal:"Configuration globale",launchModeScoped:"Fournisseur et modèle",protocolScope:"Protocole",protocolOpenAiChat:"OpenAI Chat Completions (/v1/chat/completions)",protocolOpenAiResponses:"OpenAI Responses (/v1/responses)",protocolAnthropicMessages:"Anthropic Messages (/v1/messages)",reloadConfig:"Recharger la configuration",configFileNotCreated:"Non créé",configLoadFailed:"Impossible de lire le fichier de configuration",loadFailed:"Impossible d’inspecter les agents de code",launch:"Lancer",launchTitle:"Lancer l’agent de code",nativeTerminal:"Terminal natif",builtInTerminal:"Terminal intégré",launchPrepared:"Configuration de lancement prête",launchPrepareFailed:"Échec de la préparation du lancement",nativeLaunchStarted:"Terminal natif ouvert",nativeLaunchFailed:"Impossible d’ouvrir le terminal natif",terminalTitle:"Terminal de l’agent de code",loadProvidersFailed:"Impossible de charger les fournisseurs du profil actuel",selectProviderModel:"Sélectionnez un fournisseur et un modèle",launchConfigDir:"Dossier de configuration de lancement",launchCommand:"Commande de lancement",table:{tool:"Outil",kind:"Étape",command:"Commande",note:"Note",action:"Action"},kinds:{install:"Installer",auth:"Auth",health:"Santé",run:"Exécuter"},notes:{claudeInstall:"Installe la CLI Claude Code globalement.",codexInstall:"Installe la CLI Codex globalement.",claudeAuth:"Vérifie l’état de connexion Claude Code ; exécutez claude une fois si la connexion manque.",codexAuth:"Ajoute les identifiants OAuth OpenAI Codex gérés par Hermes.",claudeHealth:"Vérifie le programme de mise à jour et l’état de la CLI locale.",codexHealth:"Confirme que la CLI Codex est disponible dans PATH.",claudeRun:"Print mode est le chemin le plus propre pour les tâches ponctuelles pilotées par API.",codexRun:"Les tâches ponctuelles Codex doivent s’exécuter dans un dépôt git."}},platform:{requireMention:"Exiger une mention {'@'}",requireMentionGroup:"Exiger une mention {'@'} dans les groupes pour repondre",requireMentionChannel:"Exiger une mention {'@'} dans les canaux pour repondre",requireMentionRoom:"Exiger une mention {'@'} dans les salles pour repondre",reactions:"Réactions",reactionsHint:"Reagir aux messages avec des emoji",freeResponseChats:"Discussions en reponse libre",freeResponseChatsHint:"ID de discussions repondant sans mention {'@'} (separes par des virgules)",freeResponseChannels:"Canaux en reponse libre",freeResponseChannelsHint:"ID de canaux repondant sans mention {'@'} (separes par des virgules)",freeResponseRooms:"Salles en reponse libre",freeResponseRoomsHint:"ID de salles repondant sans mention {'@'} (separes par des virgules)",mentionPatterns:"Motifs de mention personnalises",mentionPatternsHint:"Motifs de declenchement supplementaires",autoThread:"Fil automatique",autoThreadHint:"Creer automatiquement des fils de reponse apres une mention {'@'}",autoThreadHintRoom:"Creer automatiquement des fils de reponse dans les salles",dmMentionThreads:"Fils de mention en MP",dmMentionThreadsHint:"Utiliser des fils de reponse pour les mentions en MP",allowBots:"Autoriser les messages de bots",allowBotsHint:"Repondre aux messages d'autres bots",allowedChannels:"Canaux autorises",allowedChannelsHint:"Liste blanche des ID de canaux (separes par des virgules)",ignoredChannels:"Canaux ignores",ignoredChannelsHint:"Canaux ou le bot ne repond jamais (separes par des virgules)",noThreadChannels:"Canaux sans fil",noThreadChannelsHint:"Canaux ou le bot repond sans fil (separes par des virgules)",exclusiveTokenWarning:"Cette plateforme utilise un verrou de jeton exclusif. Chaque profil doit utiliser un jeton d'identite different pour eviter les conflits avec les autres profils.",clearCredentials:"Effacer les identifiants",clearCredentialsConfirm:"Effacer les identifiants enregistrés de « {name} » ? Le comportement du canal et les contrôles d’accès seront conservés.",credentialsCleared:"Identifiants du canal effacés",clearCredentialsFailed:"Échec de l’effacement des identifiants du canal",clearCredentialsUnsaved:"Enregistrez ou abandonnez les modifications non enregistrées du canal avant d’effacer les identifiants.",clearCredentialsGatewayRestartFailed:"Les identifiants ont été effacés, mais la passerelle n’a pas pu redémarrer automatiquement.",clearCredentialsGatewayRestartDisabled:"Les identifiants ont été effacés, mais le redémarrage automatique de la passerelle est désactivé. Redémarrez-la manuellement.",botToken:"Jeton de bot",botTokenHint:"Jeton de bot depuis le portail developpeur",proxyUrl:"URL du proxy",proxyUrlHint:"Proxy optionnel pour cette plateforme. Prend en charge http://, https:// et socks5://",accessToken:"Jeton d'acces",accessTokenHint:"Jeton d'acces Matrix",homeserver:"URL du serveur domestique",homeserverHint:"URL du serveur domestique Matrix",matrixUserId:"ID utilisateur Matrix",matrixUserIdHint:"Requis avec le mot de passe, facultatif avec le jeton",matrixPassword:"Mot de passe Matrix",matrixPasswordHint:"Alternative au jeton d'acces",appId:"ID de l'application",appIdHint:"ID de l'application Feishu",appSecret:"Secret de l'application",appSecretHint:"Secret de l'application Feishu",encryptKey:"Clé de chiffrement",encryptKeyHint:"Clé de chiffrement Feishu",verificationToken:"Jeton de vérification",verificationTokenHint:"Jeton de vérification Feishu",clientId:"ID client",clientIdHint:"ID client DingTalk",clientSecret:"Secret client",clientSecretHint:"Secret client DingTalk",cardTemplateId:"ID du modèle de carte IA",cardTemplateIdHint:"ID du modèle de carte IA DingTalk ; laisser vide pour désactiver les cartes IA",botId:"ID du bot",botIdHint:"ID du bot WeCom",wecomSecretHint:"Secret du bot WeCom",waEnabled:"Activer WhatsApp",waEnabledHint:"Activer WhatsApp via appairage par code QR",weixinToken:"Jeton Weixin",weixinTokenHint:"Depuis la connexion QR de la CLI weixin (hermes weixin)",accountId:"ID de compte",accountIdHint:"ID du compte Weixin",qrLogin:"Connexion QR",qrRelogin:"Reconnexion",qrFetching:"Recuperation du code QR...",qrScanHint:"Scannez avec WeChat pour vous connecter",qrScanedHint:"Scanne, veuillez confirmer sur le telephone...",qqSandboxHint:"Activer l’environnement sandbox (pour les tests)",qqSandbox:"Mode sandbox",qqQrScanHint:"Scannez le QR code avec QQ ou ouvrez le lien sur téléphone pour terminer l’association",qqMarkdownHint:"Activer les messages au format Markdown (certains clients peuvent ne pas le prendre en charge)",qqMarkdown:"Support Markdown",qqAppSecretHint:"App Secret du bot QQ Open Platform",qqAppSecret:"App Secret",qqAppIdHint:"App ID du bot QQ Open Platform",qqAppId:"App ID",allowedUsersHint:"Liste blanche d’ID utilisateur ou OpenID, séparés par des virgules",allowedUsers:"Utilisateurs autorisés",allowAllUsersHint:"Autoriser les messages de tout utilisateur ; désactivez pour utiliser la liste blanche",allowAllUsers:"Autoriser tous les utilisateurs"},language:{label:"Langue",zh:"中文",en:"English",fr:"Francais"},terminal:{sessions:"Sessions",newTab:"Nouveau terminal",closeSession:"Fermer cette session ?",sessionExited:"Terminee",processExited:"Processus termine avec le code {code}",noSessions:"Aucune session terminal",connectionFailed:"Connexion au terminal impossible",connectionError:"Erreur de connexion",connectionClosed:"Connexion fermée"},usage:{title:"Statistiques d'utilisation",refresh:"Actualiser",totalTokens:"Total des jetons",inputTokens:"Entree",outputTokens:"Sortie",totalSessions:"Total des sessions",avgPerDay:"~{n}/jour en moy.",estimatedCost:"Cout est.",cacheHitRate:"Taux de succes du cache",modelBreakdown:"Repartition par modele",agentBreakdown:"Repartition par agent",agents:{hermes:"Hermes Agent",claudeCode:"Claude Code",codex:"Codex",ekkoAgent:"Ekko Agent",unknown:"Inconnu"},dailyTrend:"Utilisation quotidienne",date:"Date",tokens:"Jetons",cache:"Cache",cacheRead:"Lecture cache",cacheWrite:"Écriture cache",sessions:"Sessions",cost:"Cout",noData:"Aucune donnee d'utilisation"},skillsUsage:{title:"Utilisation des compétences",subtitle:"Suivre les chargements et modifications de compétences dans les sessions Hermes",refresh:"Actualiser",periodSelector:"Période d'utilisation des compétences",periodLabel:"{days} j",summary:"Résumé",totalActions:"Act.",loads:"Charg.",edits:"Modif.",distinctSkills:"Comp.",topSkills:"Top comp.",dailyTrend:"Tendance",periodSummary:"{days} derniers jours",skill:"Comp.",share:"%",lastUsed:"Dern. usage",noData:"Aucune donnée d'utilisation des compétences",loadFailed:"Impossible de charger l'utilisation des compétences",otherSkills:"Autres comp."},workflow:{title:"Workflow",profile:"Profil",namePlaceholder:"Nom du Workflow",canvasAriaLabel:"Canevas du Workflow",workspace:{title:"Sélectionner un espace de travail",select:"Sélectionner un espace de travail",clear:"Effacer l’espace de travail"},actions:{newWorkflow:"Nouveau Workflow",addNode:"Ajouter un nœud",createWorkflowFirst:"Créez d’abord un Workflow",reset:"Réinitialiser",startExecution:"Démarrer l’exécution",executionPending:"L’exécution du Workflow n’est pas encore connectée",executionStarted:"Exécution du Workflow démarrée",executionCompleted:"Exécution du Workflow terminée",executionFailed:"Échec de l’exécution du Workflow",rerunDownstreamKeepNode:"Conserver ce nœud et exécuter la suite",rerunDownstreamClearNode:"Effacer ce nœud et exécuter la suite",rerunDownstreamStarted:"Réexécution de la suite démarrée",rerunFromNodeStarted:"Réexécution démarrée depuis ce nœud",rerunFailed:"Échec de la réexécution du Workflow",deleteNode:"Supprimer le nœud",deleteEdge:"Supprimer la connexion",editEdge:"Modifier la connexion",undo:"Annuler",importWorkflow:"Importer le Workflow",exportWorkflow:"Exporter le Workflow",imported:"Workflow importé",exported:"Workflow exporté",importFailed:"Échec de l’import du Workflow",exportFailed:"Échec de l’export du Workflow"},batch:{toggle:"Sélection multiple",selectAll:"Tout sélectionner",confirmDelete:"Supprimer les {count} Workflows sélectionnés ?",deleteSuccess:"{count} Workflows supprimés",deletePartial:"Échec de la suppression de {failed} Workflows",deleteFailed:"Échec de la suppression multiple"},validation:{nodesRequired:"Ajoutez au moins un nœud",nodeNameRequired:"Le nœud {node} doit avoir un nom",providerRequired:"Le nœud {node} doit avoir un fournisseur",modelRequired:"Le nœud {node} doit avoir un modèle",apiModeRequired:"Le nœud {node} doit avoir un mode API",inputRequired:"Le nœud {node} doit avoir une entrée",invalidEdge:"Une connexion fait référence à un nœud absent",invalidConnectionDirection:"Les connexions doivent aller de la sortie droite vers l’entrée gauche",orphanNode:"Le nœud {node} n’est pas connecté au Workflow",disconnectedFlow:"Le Workflow ne peut pas être divisé en plusieurs flux déconnectés",cycle:"Le Workflow contient un cycle. Modifiez les connexions avant d’enregistrer."},stats:{nodes:"nœuds",edges:"connexions"},runs:{title:"Historique des exécutions",refresh:"Actualiser",empty:"Aucune exécution",startNodes:"{count} nœuds de départ",snapshotIndicator:"Instantané immuable au lancement de cette exécution",show:"Afficher l’historique",hide:"Masquer l’historique",nodeSessionTitle:"Session du nœud – {node}",noNodeSession:"Ce nœud n’a pas encore de session enregistrée",loadNodeSessionFailed:"Impossible de charger la session du nœud",stop:"Arrêter l’exécution",stopRequested:"Arrêt demandé",stopFailed:"Impossible d’arrêter l’exécution",delete:"Supprimer l’entrée",deleteSuccess:"Entrée d’exécution supprimée"},inspector:{selected:"Nœud sélectionné",none:"Aucun nœud sélectionné"},agents:{planner:"Planificateur",researcher:"Chercheur",builder:"Réalisateur",reviewer:"Réviseur"},models:{default:"Modèle par défaut",fast:"Modèle rapide",reasoning:"Modèle de raisonnement"},initialNodes:{node1:"Nœud 1",node2:"Nœud 2",node3:"Nœud 3",plan:"Planifier",execute:"Exécuter",review:"Réviser"},initialPrompts:{node1:"Saisissez l’entrée de ce nœud.",node2:"Saisissez l’entrée de ce nœud.",node3:"Saisissez l’entrée de ce nœud.",plan:"Décomposez la demande en étapes réalisables.",execute:"Exécutez les étapes de mise en œuvre et produisez les livrables.",review:"Évaluez la qualité du résultat et identifiez les actions de suivi."},newNodeTitle:"Nœud {count}",schedule:{title:"Planifications de workflow",manage:"Gérer les planifications",createTitle:"Créer une planification",editTitle:"Modifier la planification",create:"Créer une planification",save:"Enregistrer la planification",edit:"Modifier la planification",delete:"Supprimer la planification",deleteConfirm:"Supprimer cette planification ?",deleted:"Planification supprimée",enable:"Activer la planification",disable:"Désactiver la planification",enabled:"Activée",disabled:"Désactivée",empty:"Aucune planification pour le moment",cron:"Planification Cron",cronPlaceholder:"ex. 0 9 * * * ou {'@'}daily",timezone:"Fuseau horaire",timezonePlaceholder:"Fuseau IANA, ex. Asia/Shanghai",initialInput:"Entrée initiale",initialInputPlaceholder:"Entrée facultative pour chaque exécution planifiée",startNodes:"Nœuds de départ",startNodesPlaceholder:"Nœuds de départ du workflow par défaut",timeout:"Délai total (minutes)",timeoutPlaceholder:"Aucune échéance",policies:"Concurrence : ignorer · Exécutions manquées : ignorer",lastScheduled:"Dernière planification",nextRun:"Prochaine exécution",lastRun:"Dernière exécution",never:"Jamais",loadFailed:"Impossible de charger les planifications",saveFailed:"Impossible d’enregistrer la planification",saved:"Planification enregistrée",deleteFailed:"Impossible de supprimer la planification",required:"La planification Cron et le fuseau horaire sont obligatoires",reset:"Réinitialiser",presets:{hourly:"Toutes les heures",daily:"Tous les jours",weekly:"Toutes les semaines",monthly:"Tous les mois"}},evidence:{historyPage:"Historique des exécutions",detailsPage:"Détails de l’exécution",backToRuns:"Retour à l’historique",resultStatus:"Statut",duration:"Durée",budgetLabel:"Budget",actualExecution:"Exécuté",otherJudgments:"Autres décisions",loopEvents:"Événements de boucle",evaluatedNotExecuted:"Évalué, non exécuté",ariaLabel:"Détails d’exécution du Workflow",title:"Détails d’exécution",count:"{count} éléments",intro:"Affiche les décisions de chemin, les passages de boucle et les nœuds exceptionnels de cette exécution.",empty:"Aucun détail d’exécution",loadFailed:"Impossible de charger les détails d’exécution enregistrés",summaryTitle:"Résultat de l’exécution",blockedAt:"Bloqué à {gate}",actualPath:"Chemin réellement suivi",noActualPath:"Aucun chemin utilisé",pathChecks:"Décisions de chemin",selectedPaths:"Chemins utilisés",otherPaths:"Autres décisions et événements",selectedCount:"{count} utilisés",otherCount:"{count} non utilisés",eventCount:"{count} événements",showOtherPaths:"Afficher les autres détails ({count})",hideOtherPaths:"Masquer les autres détails",runDetails:"Détails de l’exécution",actualPathSteps:"Étapes du chemin réel",nodeBudgetDetails:"Détails du budget temps",condition:"Condition",conditionMatched:"Correspond",conditionNotMatched:"Ne correspond pas",sourceOutcome:"Résultat du nœud",sourceReturned:"Réponse normale",sourceFailed:"Échec d’exécution",sourceSkippedStatus:"Non exécuté",checkedData:"Données vérifiées",entireReplyText:"Texte complet de la réponse",errorText:"Texte de l’erreur",jsonFieldValue:"Valeur d’un champ JSON",advancedPathValue:"Valeur du chemin avancé",comparison:"Comparaison",textToFind:"Texte à rechercher",expectedFieldValue:"Valeur attendue du champ",parsedBusinessDecision:"Décision métier interprétée",failedGateLabel:"Étape en échec (valeur du champ failed_gate)",failedGateValue:"Étape en échec (valeur du champ failed_gate) : {gate}",decisions:{blocked:"Bloqué",released:"Publié",verified:"Vérifié",skipped:"Aucune action nécessaire"},node:"Nœud exceptionnel",edge:"Chemin",loop:"Boucle",unknownNode:"Nœud inconnu",pathTitle:"{source} → {target}",loopPass:"Passage de boucle {count}",exceptionalNode:"Ce nœud ne s’est pas terminé normalement.",loopPassNamed:"{node} · passage {count}",technical:"Informations techniques",recordId:"ID d’enregistrement",sequence:"Séquence",rawStatus:"Statut brut",rawRoute:"Route",rawReason:"Raison",iterationPath:"Chemin d’itération",expectedValue:"Résultat attendu",actualValue:"Résultat réel de l’étape précédente",judgmentDetails:"Décision de la connexion",connectionResult:"Résultat de cette connexion",appliesWhen:"Utilisée lorsque",explanation:"Explication",technicalStatus:{pathUsed:"Cette connexion a été utilisée",pathNotUsed:"Cette connexion n’a pas été utilisée"},technicalRoute:{success:"Uniquement si le nœud précédent répond normalement",failure:"Uniquement si l’exécution du nœud précédent échoue",always:"Quel que soit le résultat du nœud précédent"},technicalReason:{conditionNotMatched:"La réponse précédente ne satisfait pas la condition de cette connexion."},statuses:{taken:"Utilisé",notTaken:"Non utilisé",evaluationFailed:"Échec de l’évaluation",timedOut:"Délai dépassé",blocked:"Bloqué"},routes:{success:"Poursuite après succès",failure:"Poursuite après échec",always:"Poursuite quel que soit le résultat"},reasons:{evaluationFailed:"Échec de l’évaluation du chemin",conditionNotMatched:"La condition ne correspond pas",iterationLimitReached:"Nombre maximal de passages atteint",routeNotMatched:"La route ne correspond pas",pathSelected:"Ce chemin a été utilisé.",pathEvaluatedNotUsed:"Cette connexion a été évaluée comme candidate, mais aucun nœud cible ne l’a consommée.",sourceSkipped:"Le nœud source n’a pas été exécuté ; ce chemin ne faisait donc pas partie de cette exécution.",failureRouteAfterSuccess:"Le nœud source a répondu normalement ; ce chemin ne sert qu’en cas d’échec d’exécution.",successRouteAfterFailure:"Le nœud source a échoué ; ce chemin ne sert qu’après une réponse normale.",businessBlocked:"« {source} » a arrêté le Workflow ({decision}) : {reason}. « {target} » n’a donc pas été exécuté.",businessBlockedWithCondition:"« {source} » a arrêté le Workflow ({decision}) : {reason}. La poursuite nécessitait « {expected} », mais le résultat précédent était « {actual} ». « {target} » n’a donc pas été exécuté.",conditionMismatchDetail:"La poursuite nécessitait « {expected} », mais le résultat précédent était « {actual} ». « {target} » n’a donc pas été exécuté."},loopOutcomes:{continued:"Condition satisfaite ; passage suivant",iterationLimitReached:"Arrêt au nombre maximal de passages",conditionNotMatched:"Arrêt car la condition ne correspond pas",finished:"Boucle terminée"}},budget:{runTitle:"Choisir le budget temporel du Run",rerunTitle:"Choisir le budget temporel du Rerun",totalLabel:"Budget total du Run",customMinutes:"Minutes personnalisées",customPlaceholder:"Minutes",invalidCustom:"Le budget personnalisé doit être compris entre 0,1 et 1440 minutes",help:"Il s’agit d’une échéance absolue partagée par tout le Run. Chaque nœud ne reçoit que le temps restant et les boucles ne réinitialisent pas le budget.",options:{unlimited:"Aucune échéance",30:"30 minutes",60:"60 minutes",90:"90 minutes",custom:"Personnalisé"},unlimitedSummary:"Aucune échéance",unlimitedHelp:"Ce Run n’a aucune échéance temporelle configurée.",summary:"Total {total} · Écoulé {elapsed} · Restant {remaining}",deadline:"Échéance : {deadline}",nodeStartRemaining:"Budget total restant au démarrage du nœud : {remaining}"},edgeEditor:{title:"Modifier la connexion",guideIntro:"Choisissez d’abord le résultat requis du nœud source. Ensuite, n’inspectez pas la réponse, vérifiez littéralement tout son texte ou comparez la valeur d’un champ JSON analysé.",connectionSummary:"{source} → {target}",selfLoopDescription:"« {node} » s’exécutera de nouveau lui-même.",continueAfter:"Continuer après",optionalCheck:"Contrôle de contenu facultatif",runTarget:"Puis",runTargetAction:"Exécuter {target}",noContentCheck:"Ne pas inspecter la réponse",sourceResultStep:"1. Résultat du nœud source",replyDataStep:"2. Données de réponse à vérifier",nextStep:"3. Puis",replyDataQuestion:"Quelles données de la réponse faut-il vérifier ?",requiredSourceResult:"Résultat requis du nœud source",loopSummary:"Retour à {target}",loopScope:"Nœuds de la boucle : {nodes}",historyLabel:"Libellé d’historique (facultatif)",advancedSettings:"Paramètres avancés",historyNode:"Nœud affiché dans l’historique",historyNodePlaceholder:"Sélectionner un nom de nœud",continueWhen:"Continuer lorsque",compareUsing:"Comparer avec",expectedType:"Type de la valeur attendue",expectedValue:"Valeur attendue",routeChoices:{success:"Réponse normale de la source",failure:"Échec de la source",always:"L’un ou l’autre résultat"},operatorChoices:{equals:"Égal à",not_equals:"Différent de",contains:"Contient",not_contains:"Ne contient pas",exists:"Existe",not_exists:"N’existe pas",greater_than:"Supérieur à",greater_than_or_equal:"Supérieur ou égal",less_than:"Inférieur à",less_than_or_equal:"Inférieur ou égal",in:"Dans la liste",not_in:"Absent de la liste"},loopMissingForwardPath:"Cette connexion de retour n’a aucun chemin direct à répéter.",loopNotNatural:"Cette boucle possède une autre entrée et ne peut donc pas se répéter de façon prévisible.",loopDuplicateScope:"Deux connexions de retour définissent les mêmes nœuds de boucle.",loopPartialOverlap:"Les boucles peuvent être séparées ou imbriquées, mais pas se chevaucher partiellement.",loopDuplicateHistoryLabel:"Chaque libellé d’historique de boucle doit être unique.",route:"Route",routes:{success:"Succès uniquement (success)",failure:"Échec uniquement (failure)",always:"Toujours (always)"},routeHelp:"Le résultat du nœud source est vérifié en premier ; une condition présente doit aussi correspondre.",routeExample:"Exemple : success pour le flux normal, failure pour les erreurs, always pour le nettoyage.",conditionPath:"Que doit vérifier cette connexion ?",conditionPathPlaceholder:"Chemin avancé, par exemple output",conditionPathOptions:{routeOnly:"Ne pas inspecter la réponse",outputRecommended:"Texte complet de la réponse réussie (output, recommandé)",output:"Texte complet de la réponse réussie (output)",outputJson:"Valeur d’un champ JSON (outputJson.*)",errorRecommended:"Texte complet de l’erreur (error, recommandé)",error:"Texte complet de l’erreur (error)",custom:"Chemin de données avancé"},structuredOutputPathPlaceholder:"Chemin du champ JSON, par exemple outputJson.route_token",structuredOutputHelp:"Analyse une réponse JSON complète ou exactement un bloc fenced json. Si le JSON manque, est invalide ou comporte plusieurs blocs, outputJson reste indisponible et la condition ne correspond pas.",conditionPathHelp:{success:"Pour success, output est recommandé. Choisissez « Route seule » si le contenu importe peu.",failure:"Pour failure, error est recommandé. Choisissez « Route seule » si le texte d’erreur importe peu.",always:"Utilisez output pour les succès ou error pour les échecs ; « Route seule » ignore le contenu."},operator:"Opérateur",operators:{equals:"Égal (equals)",not_equals:"Différent (not_equals)",contains:"Contient (contains)",not_contains:"Ne contient pas (not_contains)",exists:"Existe (exists)",not_exists:"N’existe pas (not_exists)",greater_than:"Supérieur à (greater_than)",greater_than_or_equal:"Supérieur ou égal (greater_than_or_equal)",less_than:"Inférieur à (less_than)",less_than_or_equal:"Inférieur ou égal (less_than_or_equal)",in:"Dans la liste (in)",not_in:"Hors de la liste (not_in)"},operatorHelp:{equals:"Valeur et type doivent être strictement identiques.",not_equals:"La valeur ou le type diffère.",contains:"Le texte contient un texte ou le tableau contient l’élément.",not_contains:"Le texte ou tableau ne contient pas l’élément.",exists:"Correspond si le chemin existe ; aucune valeur requise.",not_exists:"Correspond si le chemin manque ; aucune valeur requise.",greater_than:"Les deux côtés doivent être des nombres JSON ; la valeur réelle est supérieure.",greater_than_or_equal:"Les deux côtés doivent être des nombres JSON ; la valeur réelle est supérieure ou égale.",less_than:"Les deux côtés doivent être des nombres JSON ; la valeur réelle est inférieure.",less_than_or_equal:"Les deux côtés doivent être des nombres JSON ; la valeur réelle est inférieure ou égale.",in:"Valeur doit être un tableau JSON contenant la valeur réelle.",not_in:"Valeur doit être un tableau JSON ne contenant pas la valeur réelle."},value:"Valeur",invalidConditionValue:"La valeur de condition doit être un JSON valide",conditionValuePlaceholder:'JSON : "texte", 42, true, ["a"]',valueType:"Type de valeur",valueTypes:{string:"Chaîne",number:"Nombre",boolean:"Booléen",null:"Nul",array:"Tableau",object:"Objet"},valueTypeHelp:"Choisissez comment la valeur est lue et validée. Le type est déduit de la valeur JSON enregistrée et n’est pas stocké séparément.",conditionValuePlaceholders:{string:"Texte, par exemple APPROVED",number:"Nombre, par exemple 42",boolean:"true ou false",null:"null",array:'Tableau JSON, par exemple ["a", 2]',object:`Objet JSON, par exemple {'{'}"status":"ready"{'}'}`},invalidValueTypes:{string:"La valeur doit être du texte.",number:"La valeur doit être un nombre valide.",boolean:"La valeur doit être true ou false.",null:"La valeur doit être null.",array:"La valeur doit être un tableau valide.",object:"La valeur doit être un objet valide."},valueHelp:"Saisissez une valeur du type sélectionné. Les objets et tableaux utilisent JSON ; les chaînes sont saisies sans guillemets JSON.",expectedReplyText:"Texte à rechercher",expectedFieldValue:"Valeur attendue du champ",rawTextValueHelp:"Le texte complet de la réponse est contrôlé littéralement. Avec « Contient », le texte peut apparaître dans une clé ou une valeur JSON ; aucun champ JSON précis n’est consulté.",jsonFieldValueHelp:"La valeur au chemin outputJson indiqué est comparée, pas le nom du champ. Exemple : outputJson.failed_gate est égal à quality-container-setup.",canvasLabel:{withValue:"{subject} {operator} «{value}»",withoutValue:"{subject} {operator}",join:"{route} · {condition}"},conditionSemantics:"Règle réellement vérifiée",rawTextComparisonHelp:"L’opérateur sélectionné est {operator}. Il s’applique au texte complet, pas à un champ JSON. Contient/Ne contient pas peut trouver du texte dans une clé ou une valeur JSON ; Égal/Différent compare la réponse complète à la valeur configurée.",jsonFieldComparisonHelp:"Lit la valeur à {path}. {operator} compare cette value à « {value} » et jamais le nom du champ.",rawTextExistenceHelp:"Vérifie seulement la présence du texte complet, pas l’existence d’une clé JSON.",jsonFieldExistenceHelp:"Vérifie seulement que le champ JSON à {path} existe, sans comparer sa valeur.",rawTextOperatorHelp:{equals:"Correspond uniquement si le texte complet de la réponse est exactement égal à « {value} ». La value d’un champ JSON n’est ni lue ni comparée.",not_equals:"Correspond uniquement si le texte complet de la réponse diffère de « {value} ». La value d’un champ JSON n’est ni lue ni comparée.",contains:"Recherche « {value} » dans tout le texte de la réponse. Le texte peut correspondre dans une JSON key ou une JSON value ; ce n’est pas une recherche de champ JSON.",not_contains:"Correspond uniquement si « {value} » n’apparaît nulle part dans le texte complet, ni dans une JSON key ni dans une JSON value. Ce n’est pas une recherche de champ JSON.",exists:"Correspond lorsque le texte complet de la réponse est disponible. L’existence d’une JSON key n’est pas vérifiée.",not_exists:"Correspond lorsqu’aucun texte complet de réponse n’est disponible. L’absence d’une JSON key n’est pas vérifiée."},jsonFieldOperatorHelp:{equals:"Lit la value du champ à {path}. Correspond uniquement si cette valeur est exactement égale à « {value} » ; le nom du champ n’est jamais comparé.",not_equals:"Lit la value du champ à {path}. Correspond uniquement si cette valeur diffère de « {value} » ; le nom du champ n’est jamais comparé.",contains:"Lit la value du champ à {path} et vérifie si elle contient « {value} » ; le nom du champ n’est jamais recherché.",not_contains:"Lit la value du champ à {path}. Correspond uniquement si elle ne contient pas « {value} » ; le nom du champ n’est jamais recherché.",exists:"Correspond lorsque le champ JSON à {path} existe. La value du champ n’est pas comparée.",not_exists:"Correspond lorsque le champ JSON à {path} est absent. La value du champ n’est pas comparée."},feedback:"Boucle de rétroaction",feedbackHelp:"Marque cette connexion de retour comme boucle bornée. Elle répète seulement si route et condition correspondent.",maxIterations:"Nombre maximal d’itérations",maxIterationsHelp:"Nombre total de passages, de 1 à 100 ; le budget global reste applicable.",invalidIterations:"Le nombre maximal d’itérations doit être un entier de 1 à 100",loopId:"Identité de boucle",loopIdPlaceholder:"Choisir automatique ou saisir un ID",loopIdAutomatic:"Automatique (recommandé) · {id}",loopIdHelp:"Identifie seulement la boucle dans l’historique et ne modifie pas son déclenchement. Gardez automatique sauf besoin avancé.",invalidLoopId:"Format d’ID de boucle invalide"},node:{title:"Nom du nœud",agent:"Agent",model:"Modèle",apiMode:"Mode API",input:"Entrée",approvalRequired:"Approbation après le nœud",join:"Stratégie de jonction",joinAll:"Toutes les routes entrantes",joinAny:"N’importe quelle route entrante",joinAllHelp:"S’exécute seulement si toutes les routes entrantes sont prises ; sinon le nœud est ignoré.",joinAnyHelp:"S’exécute une fois dès la première route prise ; ignoré seulement si aucune ne correspond.",promptPlaceholder:"Décrivez ce que cet agent doit faire...",skillsPlaceholder:"Saisissez une compétence puis appuyez sur Entrée",uploadImages:"Téléverser des images"},status:{idle:"Inactif",queued:"En attente",running:"En cours",pending_approval:"En attente d'approbation",completed:"Terminé",skipped:"Ignoré",failed:"Échec",approval_rejected:"Approbation refusée",canceled:"Annulé"}},groupChat:{agentLinkButton:"Ajouter votre Agent",agentOwner:"Propriétaire : {name}",agentLinkTitle:"Ajouter un Agent à ce salon",agentLinkDescription:"Connectez votre propre service Hermes. Le service établit une connexion sortante chiffrée ; le salon ne reçoit jamais vos identifiants ni l’accès à votre espace de travail.",agentLinkTargetUrl:"URL de votre service Hermes",agentLinkTargetPlaceholder:"http://127.0.0.1:8748 or https://your-hermes.example.com",agentLinkTargetRequired:"Saisissez l’URL d’un service Hermes.",agentLinkInvalidTarget:"Saisissez une origine HTTP ou HTTPS sans identifiants, chemin, paramètres de requête ni fragment.",agentLinkOpenTarget:"Se connecter et choisir un Agent",agentLinkPopupBlocked:"La fenêtre d’autorisation a été bloquée. Autorisez les fenêtres contextuelles pour cette page et réessayez.",agentLinkParentUnavailable:"La fenêtre d’autorisation a perdu la connexion avec la page d’invitation. Fermez-la et recommencez.",agentLinkParentUnconfirmed:"La page d’invitation n’a pas confirmé cette demande. Gardez-la ouverte et relancez l’autorisation.",agentLinkIncompleteConfiguration:"Sélectionnez un Profile, un fournisseur et un modèle complets avant de demander l’accès.",agentLinkWaitingApproval:"En attente de l’approbation de cet Agent par le propriétaire du salon…",agentLinkApproved:"Approuvé. Connexion de votre Agent…",agentLinkConnected:"Votre Agent est connecté au salon.",agentLinkError:"Impossible de connecter cet Agent.",agentLinkRejected:"Le propriétaire du salon a refusé cette demande d’Agent.",agentLinkExpired:"Cette demande d’Agent a expiré. Lancez une nouvelle demande.",agentLinkPairingCode:"Code d’association manuel",agentLinkPairingCodeHint:"Si la fenêtre d’autorisation ne peut pas communiquer avec cette page, collez-y ce code à durée limitée.",agentLinkCopyCode:"Copier le code d’association",agentLinkAuthorizeTitle:"Autoriser l’Agent de discussion de groupe",agentLinkAuthorizeDescription:"Choisissez un Agent local à connecter. Le groupe peut lui envoyer des messages, mais ne peut pas parcourir votre espace de travail local.",agentLinkSelectAgent:"Agent",agentLinkRequestConnection:"Demander la connexion",agentLinkOrPairingCode:"ou utiliser un code d’association manuel",agentLinkPairingCodePlaceholder:"Collez un code d’association HGC1",agentLinkConnect:"Connecter l’Agent",agentLinkSecurityHint:"N’approuvez que les salons que vous reconnaissez. Les tickets d’association sont à usage unique et expirent rapidement.",agentLinkLoadFailed:"Impossible de charger les Agents locaux.",agentLinkConnectFailed:"Impossible de connecter l’Agent sélectionné.",agentLinkInvalidPairingCode:"Ce code d’association est invalide.",agentLinkClose:"Fermer",agentLinkApprovalMismatch:"La demande de connexion a changé après votre approbation. Vérifiez l’Agent et réessayez.",guestAgentsDisabled:"Le propriétaire du salon n’a pas activé les Agents invités.",guestAgentSettings:"Connexions des Agents invités",allowGuestAgents:"Autoriser les membres à ajouter leurs propres Agents",maxGuestAgentsPerMember:"Nombre maximal d’Agents par membre",ownerApprovalHint:"Chaque Agent nécessite toujours l’approbation explicite du propriétaire du salon.",allowRemoteWorkspaceAccess:"Autoriser les Agents distants à lire et écrire dans l’espace de travail du groupe",remoteWorkspaceAccessHint:"Une fois activé, chaque Agent distant approuvé reçoit un accès temporaire par exécution. Les fichiers sensibles et les chemins externes restent bloqués.",agentPairingRequestTitle:"Demande de connexion d’un Agent",agentPairingRequestDescription:"{user} souhaite connecter un Agent depuis {origin}.",approveAgent:"Approuver l’Agent",rejectAgent:"Refuser",agentPairingApproved:"Connexion de l’Agent approuvée",agentPairingRejected:"Connexion de l’Agent refusée",emptyState:"Démarrer une conversation de groupe",title:"Chat de groupe",refactorNoticeTitle:"Mise à jour du chat de groupe",refactorNoticeMessage:"Le chat de groupe a été profondément remanié. Si vous ne pouvez plus discuter dans une salle, veuillez en créer une nouvelle.",createRoom:"Créer un salon",joinByCode:"Rejoindre avec un code",shareTitle:"Rejoindre la conversation",shareSubtitle:"Saisissez le code d’invitation pour participer, sans connexion à un compte.",shareCodeHint:"Cette invitation donne uniquement accès au salon de discussion associé.",shareInvalidCode:"Ce code est invalide ou a été modifié. Demandez un nouveau lien à la personne qui l’a partagé.",shareJoining:"Connexion au chat de groupe…",shareNameSubtitle:"Choisissez un nom avant d’entrer dans le salon.",shareNameConflict:"Ce nom est déjà utilisé dans ce salon. Choisissez-en un autre.",shareNameReserved:"Ce nom est réservé. Choisissez-en un autre.",shareEnterRoom:"Entrer dans le salon",roomName:"Nom du salon",roomNamePlaceholder:"Saisissez le nom du salon",inviteCode:"Code d’invitation",autoGenerate:"Générer automatiquement",noRooms:"Aucun salon pour le moment",localRooms:"Local",remoteRooms:"Distant",remoteRoomOffline:"La connexion distante est hors ligne.",renameRemoteRoom:"Renommer le salon distant",renameRemoteRoomHint:"Cela modifie uniquement le nom affiché sur cet appareil.",remoteRoomRenamed:"Nom d’affichage du salon distant mis à jour",remoteRoomRenameFailed:"Impossible de mettre à jour le nom d’affichage du salon distant",leaveRemoteRoom:"Quitter le salon",leaveRemoteRoomConfirm:"Quitter « {name} » ? Tous les Agents connectés depuis cet appareil seront retirés du salon distant et les connexions locales seront supprimées.",remoteRoomLeft:"Salon distant quitté",remoteRoomLeaveFailed:"Impossible de quitter le salon distant",remoteRoomLeavePartial:"Les données locales ont été supprimées, mais {count} connexion(s) Agent n’ont pas pu être notifiées car le salon distant était hors ligne.",selectOrCreate:"Sélectionnez ou créez un salon pour commencer à discuter",agents:"Agents",allAgents:"Tous les Agents",addAgent:"Ajouter un agent",agentType:"Agent",agentTypes:{hermes:"Hermes",ekko:"Ekko",codex:"Codex",claude:"Claude"},selectProfile:"Sélectionner un Profile",agentAdded:"Agent ajouté",selectRoomFirst:"Sélectionnez d’abord un salon",agentAlreadyInRoom:"Cet agent est déjà dans le salon",agentAddFailedCount:"{count} agent(s) n’ont pas été ajoutés : {details}",editAgentTitle:"Modifier {name}",removeMember:"Exclure",memberRemoved:"{name} a été exclu du salon",memberRemovedNotice:"Le propriétaire vous a exclu de ce salon. Vous pouvez revenir tant que l’invitation reste valide.",noAgents:"Aucun agent dans ce salon",members:"{count} membres",roomCreated:"Salon créé",roomDeleted:"Salon supprimé",roomCloned:"Salon dupliqué",cloneRoom:"Dupliquer le salon",copyRoomLink:"Copier le lien du salon",manualCopyRoomLinkHint:"Le navigateur n’a pas pu copier automatiquement. Sélectionnez le lien et copiez-le manuellement.",deleteRoomConfirm:"Supprimer ce salon ?",clearContext:"Effacer le contexte",clearContextConfirm:"Effacer le contexte de ce salon ? Les messages et instantanés de compression seront supprimés, mais les agents et les membres seront conservés.",contextCleared:"Contexte effacé",you:"Vous",joined:"Salon rejoint",joinFailed:"Impossible de rejoindre le salon",inputPlaceholder:"Saisissez un message... (Entrée pour envoyer)",messageDisplayLimit:"Le chat de groupe affiche jusqu’à 600 messages",enterCode:"Saisissez le code d’invitation",yourName:"Votre nom",yourNamePlaceholder:"Saisissez votre nom d’affichage",yourDescription:"Description (facultatif)",yourDescriptionPlaceholder:"Présentez-vous...",agentName:"Nom de l’agent",agentNamePlaceholder:"Nom personnalisé (vide pour utiliser le nom du Profile)",agentDesc:"Description de l’agent",agentDescPlaceholder:"Décrivez le rôle de cet agent...",agentReplying:"répond...",agentCompressing:"compresse le contexte...",compressionSettings:"Paramètres de compression",triggerTokens:"Seuil de tokens",triggerTokensDesc:"Seuil de tokens déclenchant la compression du contexte",maxHistoryTokens:"Tokens d’historique maximum",maxHistoryTokensDesc:"Nombre maximal de tokens du contexte compressé envoyé au LLM",tailMessageCount:"Messages récents conservés",tailMessageCountDesc:"Nombre de messages récents conservés tels quels après compression",compressionConfig:"Configuration de la compression",compressionSaved:"Configuration de compression enregistrée",roomSettings:"Paramètres du salon",inviteCodeSettings:"Paramètres du code d’invitation",inviteCodePlaceholder:"Saisir un nouveau code d’invitation",generateInviteCode:"Générer un code d’invitation",inviteCodeRotateHint:"La mise à jour invalide l’ancien code pour les nouvelles arrivées.",inviteCodeUpdated:"Code d’invitation mis à jour",inviteCodeUpdateFailed:"Échec de la mise à jour du code d’invitation",saveCompression:"Enregistrer la compression",compressNow:"Compresser maintenant",compressingInProgress:"Compression en cours, veuillez patienter",summarySettings:"Résumé continu",summarySettingsDesc:"Un Ekko Agent propre met à jour le résumé partagé après un nombre fixe de tours humains.",summaryProvider:"Fournisseur du résumé",summaryProviderPlaceholder:"Choisir un fournisseur",summaryModel:"Modèle du résumé",summaryModelPlaceholder:"Choisir un modèle",summaryApiMode:"Mode API",summaryEveryTurns:"Résumer tous les N tours",summaryEveryTurnsDesc:"Un tour correspond à un message humain.",summaryConfigSaved:"Paramètres du résumé enregistrés",summaryConfigurationRequired:"Aucun outil de résumé n’est configuré pour ce salon. Sélectionnez un profil, un fournisseur, un modèle et un mode API, puis enregistrez.",summaryConfigurationOwnerRequired:"Aucun outil de résumé n’est configuré pour ce salon. Demandez à un administrateur de le configurer avant d’envoyer des messages.",saveSummaryConfig:"Enregistrer les paramètres",currentSummary:"Résumé actuel",summaryStatus:{idle:"En attente",summarizing:"Résumé en cours",success:"Réussi",failed:"Échec"},summaryUpdatedAt:"Dernière mise à jour",summarizedTurns:"Tours résumés",summaryAnchor:"Ancre du résumé",summaryMessagesAbove:"Messages ci-dessus résumés",summaryNoAnchor:"Aucune ancre",summaryContent:"Contenu du résumé",summaryEmpty:"Aucun résumé pour le moment",summaryEditKeepsAnchor:"Modifier le texte conserve l’ancre actuelle.",saveSummary:"Enregistrer le résumé",summaryUpdated:"Résumé mis à jour",summaryNever:"Jamais",summaryLoadFailed:"Impossible de charger le résumé de la salle"},files:{attachToChat:"Ajouter au chat",attachFailed:"Impossible d’ajouter le fichier au chat",previewMode:"Aperçu",sourceMode:"Source",tableMode:"Tableau",worksheet:"Feuille",htmlPreviewTitle:"Aperçu HTML isolé",previewLoading:"Chargement de l’aperçu...",previewFailed:"Aperçu indisponible",previewMimeMismatch:"Le type du fichier ne correspond pas au format d’aperçu.",downloadInstead:"Télécharger à la place",previousPage:"Précédente",nextPage:"Suivante",pageStatus:"Page {page} sur {total}",zoom:"Zoom",pdfPageLimit:"Seules les {count} premières pages sont affichées.",tableTruncated:"L’aperçu a été limité. Téléchargez le fichier pour voir toutes les lignes et colonnes."},changelog:{new_0_6_41_1:"Le STT local fonctionne désormais de façon fiable avec Hermes Web UI installé via npm, grâce à l’alignement des runtimes natifs sherpa-onnx sur la version du wrapper Node.js sous macOS, Windows et Linux (#2464)",new_0_6_40_1:"Cette version couvre les 40 PR fusionnées depuis v0.6.39 : salons de groupe distants sécurisés, reconnaissance vocale locale, planification Workflow, approbations globales, webhooks Chat Run, MCU et fiabilité de Coding Agent",new_0_6_40_2:"Le chat de groupe ajoute des salons partagés sécurisés et des Agents distants, stabilise le transfert, la présence et la révocation des Agents, conserve les avatars des propriétaires hors ligne et permet de copier manuellement le lien du salon sans API de presse-papiers (#2408, #2410, #2411, #2415, #2423)",new_0_6_40_3:"Les Agents distants peuvent transférer des fichiers et les envoyer vers des workspaces cloud. Les requêtes de non-propriétaires respectent des limites renforcées pour le workspace, les informations sensibles et la mémoire privée, avec un routage corrigé de la propriété et des approbations (#2413, #2430, #2433, #2435)",new_0_6_40_4:"Le chat de groupe cesse de migrer les anciens Agent Links et sépare les listes repliables de salons locaux et distants, avec alias local, accès à la page de partage et nettoyage complet à la sortie (#2424, #2459)",new_0_6_40_5:"L’historique du chat de groupe n’est plus élagué automatiquement. Les résultats d’outils contenant des mentions sont persistés avec des identifiants bornés, et les outils orphelins, l’alignement et le routage des approbations ainsi que le blocage de la boucle par le comptage des tokens sont corrigés (#2390, #2420, #2426, #2427, #2429, #2445)",new_0_6_40_6:"Les retours sur les sessions récentes et l’activité du chat de groupe sont plus immédiats, et le panneau d’outils se déploie avec une animation fluide (#2389, #2414)",new_0_6_40_7:"Les approbations globales peuvent reprendre des demandes existantes, afficher un aperçu de commande plus clair et envoyer des notifications système pour les actions en attente (#2406, #2425, #2432)",new_0_6_40_8:"Un STT local chinois-anglais en streaming basé sur sherpa-onnx conserve les derniers mots grâce à un silence final et utilise des tampons audio compatibles Electron sur macOS et Windows (#2447, #2448, #2461)",new_0_6_40_9:"Workflow ajoute des exécutions planifiées durables et une interface complète pour créer, modifier, activer, désactiver et supprimer les planifications (#2434, #2441)",new_0_6_40_10:"Les webhooks du cycle de vie Chat Run sont ajoutés, l’ancien point de terminaison inutilisé est supprimé et le serveur reçoit un point de contrôle de disponibilité léger (#2422, #2452, #2453)",new_0_6_40_11:"Le MCU peut choisir entre les runtimes Ekko et Hermes Agent, tandis que les avatars Global Agent et les indicateurs d’état MCU sont désormais exacts (#2438, #2442)",new_0_6_40_12:"Coding Agent exige désormais une identité d’exécution et corrige l’isolation de la persistance sous Windows, les délais MCP, la relecture du reasoning entre modèles, l’estimation du contexte et les instructions Studio en double (#2387, #2392, #2395, #2396, #2398, #2416)",new_0_6_40_13:"Les préréglages MoA exposent l’intensité de raisonnement par modèle et la génération d’images désactive le stockage Responses pour éviter une conservation distante inutile (#2439, #2449)",new_0_6_39_1:"Ekko Agent initialise désormais explicitement ses ressources, exécute du code Node.js ou Python limité derrière une autorisation d’outil et peut suspendre une exécution au premier plan pour demander une précision libre ou à choix multiple avant de reprendre (#2362, #2368)",new_0_6_39_2:"Group Chat attend la confirmation d’entrée dans le salon avant d’envoyer, corrigeant les erreurs intermittentes « Not in room » lors des reconnexions. La saisie devient un heartbeat limité, visible uniquement comme une pulsation sans texte sur l’avatar des autres membres (#2373)",new_0_6_39_3:"Les événements d’outils Coding Agent de Single Chat et Group Chat suivent désormais le cycle de vie du CLI natif et n’émettent qu’un démarrage après la fin des arguments, supprimant les cartes dupliquées ou bloquées et le JSON affiché caractère par caractère dans les grands salons (#2366, #2372)",new_0_6_39_4:"Les prompts Coding Agent passent maintenant par stdin, préservant les entrées multilignes et les images tout en évitant la limite de commande Windows. Group Chat n’interrompt plus Codex, Claude Code ou Ekko après deux minutes fixes (#2354, #2357)",new_0_6_39_5:"Codex utilise le JSONL natif et la fin du processus comme état final lors des déconnexions récupérables du proxy Provider, évitant qu’un travail terminé soit signalé en échec dans Group Chat (#2375)",new_0_6_39_6:"La gestion des versions vérifie que le Runtime est complet et affiche la raison du fallback desktop. Un Runtime invalide ne peut pas être activé, et les contrôles de téléchargement ou changement du Web UI sont masqués puisque les mises à jour restent fournies par l’installateur desktop (#2353)",new_0_6_39_7:"Les en-têtes d’exécution Group Chat ne gardent que le nom de l’Agent, sans descriptions répétées, pour des groupes de messages plus clairs (#2352)",new_0_6_39_8:"Les connexions distantes ESP32-C3 maintiennent désormais Socket.IO pendant la découverte, réutilisent des tampons vocaux bornés, se reconnectent avec temporisation progressive et conservent la session lors des déconnexions temporaires de Studio, pour des recherches et échanges vocaux plus rapides et fiables (#2383)",new_0_6_38_1:"Au démarrage, le desktop Windows répare les chemins Python relatifs invalides laissés par les mises à jour de l’Agent dans les environnements Hermes Runtime en cache, restaurant le CLI, les journaux et le Gateway après une mise à jour, un changement de Runtime ou une migration du stockage",new_0_6_38_2:"Le catalogue de compatibilité du site reconnaît à nouveau Hermes 0.19.0 afin de préserver les téléchargements desktop et les contrôles de compatibilité correspondants (#2348)",new_0_6_37_1:"La priorité de cette version couvrant 14 PR est la refonte complète de Group Chat : chaque Agent choisit indépendamment son profil, provider, modèle, mode API, niveau de raisonnement, identité et workspace (#2334)",new_0_6_37_2:"Les salons démarrent désormais des exécutions neuves et isolées et regroupent chaque réponse avec son reasoning et ses outils. Ils ajoutent un résumé glissant partagé et modifiable avec état et limites, les mentions d’Agent, des drawers salon/workspace et des conseils de migration. La lecture vocale prépare à l’avance les TTS de différents Profile, limite la synthèse à une tâche par Profile et lit en FIFO strict, afin qu’une nouvelle réponse ne remplace jamais l’audio en cours (#2334)",new_0_6_37_3:"MiniMax Coding Plan OAuth prend en charge les régions Global et Chine, tandis que les identifiants Codex, xAI, Anthropic, Nous et MiniMax sont actualisés via le Runtime Bridge persistant (#2337)",new_0_6_37_4:"ESP32-C3 v1/v2 ajoutent une écoute automatique facultative avec VAD local, pré-enregistrement, fin sur silence et blocage pendant la lecture, tout en conservant le push-to-talk (#2338)",new_0_6_37_5:"MCU Global Agent utilise désormais le mode vocal concis d’Ekko, peut déléguer les tâches sûres en arrière-plan, conserve historique et workspaces, et ne transmet plus les résultats d’outils trop volumineux (#2326)",new_0_6_37_6:"Les TTS personnalisés et compatibles OpenAI réessaient automatiquement un format audio accepté par le provider et convertissent les sorties non MP3 pour Hermes (#2328)",new_0_6_37_7:"L’import et l’export des profils disposent de dix minutes, signalent clairement les délais dépassés, isolent les archives simultanées, sécurisent les noms et suppriment les fichiers temporaires (#2310, #2324)",new_0_6_37_8:"Hermes Agent Bridge applique les niveaux de raisonnement par modèle tout en conservant les réglages explicites par exécution et le fallback historique (#2325)",new_0_6_37_9:"La gestion des versions affiche séparément la version Hermes Agent réellement installée et le chemin Runtime, et précise la portée de la mise à jour CLI et la fermeture complète de Studio (#2323)",new_0_6_37_10:"Les arbres de fichiers workspace utilisent une indentation réduite afin de garder visibles les noms profondément imbriqués (#2340)",new_0_6_37_11:"Le desktop cible désormais Hermes Agent 0.20.0 depuis une source épinglée, fixe Node/npm portables, accepte les lanceurs Windows régénérés, se met à jour sans Python système et garde le Gateway géré masqué (#2321, #2344)",new_0_6_37_12:"La migration du stockage Runtime Windows traite les liens créés par les mises à jour sans droits administrateur, réajuste Python, accepte les chemins Unicode et actualise les shims CLI/MCP au premier redémarrage (#2345)",new_0_6_37_13:"La signature desktop macOS utilise désormais un keychain temporaire explicite compatible avec le mode strict des runners macOS 26 sur les deux architectures (#2315)",new_0_6_36_1:"Cette version couvre les 28 PR fusionnées après la 0.6.35 : voix, arabe et RTL, App Relay, fiabilité des agents, ergonomie du chat, Kanban, Journey, sous-titres MCU et journaux de requêtes Ekko",new_0_6_36_2:"Les réglages vocaux sont unifiés dans Modèles pour les fournisseurs natifs Hermes et Web UI ; Custom TTS permet le choix de la voix et Edge TTS accepte tout Voice ID avec des options arabes (#2260, #2265, #2267)",new_0_6_36_3:"La prise en charge complète de l’arabe et du RTL couvre le flux du document, Naive UI, le chat, le chat de groupe, Workflow, les superpositions, les tiroirs, la direction par bloc et les libellés Profile corrigés (#2269, #2270, #2271, #2273, #2277, #2294, #2303)",new_0_6_36_4:"Les délégations actives en arrière-plan maintiennent leur session Agent Bridge jusqu’à leur fin, empêchant le nettoyage d’inactivité d’interrompre les tâches longues (#2254)",new_0_6_36_5:"La liste des agents du chat de groupe est de nouveau cliquable sur ordinateur, et la fenêtre principale peut être réduite à 769 px sans passer en disposition mobile (#2259, #2263)",new_0_6_36_6:"Les workspace diffs de Codex, Claude Code et Ekko apparaissent uniquement sur le message Assistant exact qui les a produits, dans les chats actifs, restaurés et de groupe (#2264)",new_0_6_36_7:"Les README anglais et chinois reflètent désormais le produit et la CLI actuels, tandis que le manuel obsolète du site lié à la version 0.6.12 a été supprimé (#2268)",new_0_6_36_8:"Un App Relay indépendant et sans interface ajoute un appairage sécurisé et un accès distant authentifié aux API locales autorisées et au streaming du chat sans exposer directement Studio (#2275)",new_0_6_36_9:"Desktop Agent Browser peut lire en toute sécurité les longs textes accessibles par pages et activer les contrôles dont la référence de snapshot pointe vers du texte visible (#2278)",new_0_6_36_10:"Le chat gagne des contrôles Provider ancrés, la restauration du défilement par message, des rails compacts pour les outils et le terminal, des aperçus pleine taille et des workspace diffs pleine largeur (#2279, #2282, #2283, #2293)",new_0_6_36_11:"Les nouvelles sessions Ekko reçoivent des workspaces par défaut isolés par Profile, tandis que les workspaces existants et explicitement choisis restent inchangés (#2289)",new_0_6_36_12:"Les résultats d’approbation Memory et Skill sont désormais structurés et sérialisés, évitant les faux succès et les écritures concurrentes dans le même Profile (#2295)",new_0_6_36_13:"Kanban ajoute un archivage fiable des tâches et un tableau déplaçable, tandis que Journey devient une carte compacte et déterministe des relations Memory vers Skill (#2296, #2297)",new_0_6_36_14:"Le reasoning en direct reste stable entre les outils, est restauré sur le bon message ou outil et ne crée plus de bulles de sous-agent vides (#2299)",new_0_6_36_15:"La parole MCU affiche désormais des sous-titres GB2312 synchronisés et paginés sur ESP32-C3 v1 et v2 sans perturber la lecture audio (#2305)",new_0_6_36_16:"Ekko écrit désormais un journal compact model.request par tentative de modèle, y compris pour la compression du contexte, et omet tool_choice en l’absence d’outils (#2311)",new_0_6_35_1:"La mémoire persistante d’Ekko Agent est désormais activée en production, avec un stockage SQLite isolé par profil, un budget de rappel automatique de 4 000 tokens, une recherche de pertinence améliorée dans toute la mémoire et un traitement plus sûr des requêtes aux modèles (#2246)",new_0_6_34_1:"Cette version couvre les 21 PR fusionnées après la 0.6.33 : thèmes par utilisateur, améliorations d’Ekko et des Coding Agents, desktop et navigateur, automatisation et fiabilité",new_0_6_34_2:"Chaque compte peut personnaliser la taille et la couleur du texte, la couleur d’accent et le fond du workspace avec des surfaces translucides cohérentes ; les fenêtres Windows et les réglages du navigateur suivent le thème, et les commandes navigateur d’Ekko démarrent correctement sous Windows (#2242, #2243, #2244)",new_0_6_34_3:"Ekko est disponible en production avec découverte des Skills à la demande et entrée multimodale ; l’évolution protégée des Skills, les logs isolés par Profile, la persistance du protocole et les résumés de raisonnement Responses améliorent sa sécurité et ses capacités (#2215, #2236)",new_0_6_34_4:"La mémoire Ekko ajoute des catégories structurées et déterministes pour les préférences, relations, habitudes, objectifs à long terme et plus encore ; les longues conversations utilisent désormais le cycle partagé de compression de contexte fondé sur des snapshots (#2229, #2230)",new_0_6_34_5:"Les exécutions Coding Agent conservent les images entre Codex, Claude Code et les protocoles Provider ciblés, tronquent les sorties d’outils Responses trop volumineuses et isolent par session la configuration et les événements tardifs (#2222, #2232, #2238)",new_0_6_34_6:"Le contrôle des capacités Hermes Workflow ne rejette plus les cibles valides sans métadonnées de mode API ; Kanban suit les tâches et aperçus de pièces jointes de Hermes Agent 0.19, et Cron Exécuter maintenant démarre en arrière-plan avec une validation de création renforcée (#2239, #2216, #2228)",new_0_6_34_7:"Le desktop ajoute des fenêtres de discussion autonomes et ciblées, autorise l’automatisation des champs de mot de passe, paiement et fichier, et conserve séparément le nom et la description de chaque membre humain dans chaque salon Group Chat (#2209, #2210, #2212)",new_0_6_34_8:"La commande /yolo par session active ou désactive le contournement des approbations, la limite visuelle de 200 tours Agent disparaît, Markdown préserve les guillemets ASCII droits et le catalogue pt-BR récupère ses signes diacritiques manquants (#2223, #2225, #2234, #2221)",new_0_6_34_9:"Les appareils ESP32-C3 gagnent une veille connectée configurable qui réduit la consommation au repos tout en conservant le Wi-Fi, la connexion, le Profile et Socket.IO, avec réveil immédiat et délai persistant (#2218)",new_0_6_33_1:"Cette version couvre les 16 PR fusionnées après la 0.6.32 : Agent Browser desktop, preuves et délais des exécutions Workflow, interactions avec les fichiers et les discussions, actualisation des modèles Provider et fiabilité",new_0_6_33_2:"Le desktop ajoute un Agent Browser visible à plusieurs onglets avec Profiles isolés, gestion du proxy, du stockage et des téléchargements, cookies persistants chiffrés, actions Agent protégées et découverte différée des outils MCP (#2177, #2182)",new_0_6_33_3:"Les liens des discussions individuelles et de groupe ainsi que les aperçus HTML authentifiés s’ouvrent dans le navigateur intégré ; l’espacement des permissions, les icônes de navigation multiplateformes et l’alignement barre latérale–barre de titre sous Windows sont aussi améliorés (#2191, #2194, #2198)",new_0_6_33_4:"Les Runs Workflow conservent le rendu immuable du lancement, exposent un délai total de Run/Rerun avec temps écoulé et restant, et présentent historique et détails dans des pages tenant compte du chemin réellement consommé (#2171, #2173, #2180)",new_0_6_33_5:"Les fichiers peuvent être collés directement dans les discussions individuelles ou de groupe, ou joints depuis le menu contextuel du workspace ; des colonnes de métadonnées compactes laissent davantage de place aux noms de fichiers (#2175, #2176)",new_0_6_33_6:"Chaque Provider configuré peut actualiser séparément son catalogue de modèles, confirmer les suppressions, conserver les modèles par défaut indisponibles et effectuer une restauration unique ; les Provider OAuth, toutes les langues et le remplissage automatique des formulaires sont pris en charge (#2115)",new_0_6_33_7:"Les états d’arrêt et de pause sont isolés par session afin qu’une discussion en arrière-plan ne modifie plus le bouton d’arrêt actif ; les sélections de texte et champs du desktop disposent aussi d’actions natives au clic droit (#2203, #2204)",new_0_6_33_8:"La fermeture, la mise à jour et l’installation desktop utilisent un arrêt progressif borné et ne forcent les arbres de processus Agent Bridge, MCP, navigateur et Web UI restants qu’après expiration du délai de nettoyage (#2193)",new_0_6_33_9:"Les sessions vocales MCU isolent les résultats de premier plan et d’arrière-plan, tandis que les noms d’outils MCP compatibles MiniMax respectent les limites du Provider sans casser les appelants existants (#2181, #2169)",new_0_6_32_1:"Cette version couvre les 14 PR fusionnées après la 0.6.31 : organisation et compression des sessions, discussions de groupe, routage Workflow, Skill Bundles, mémoire Ekko, Hermes 0.19 et cadre des fenêtres desktop",new_0_6_32_2:"Les mentions des discussions de groupe fonctionnent désormais après du texte CJK, des emoji et de la ponctuation ; les propriétaires peuvent afficher, générer et renouveler les codes d’invitation dans les paramètres du salon (#2133, #2141)",new_0_6_32_3:"Workflow conserve la source de chaque exécution Hermes Bridge lors des transferts et reconnexions ; les nœuds Codex et Claude Code à portée limitée peuvent utiliser les protocoles pris en charge par leur launcher pour les cibles API Key valides (#2137, #2154)",new_0_6_32_4:"Les sessions gagnent des catégories globales, une recherche plus précise tenant compte de Markdown et une compression par curseur qui borne l’historique tout en restant correcte après modifications, branches et exécutions simultanées ; la conception est entièrement documentée (#2139, #2143, #2145, #2146)",new_0_6_32_5:"Les Skill Bundles propres au Profile peuvent être créés, parcourus, exécutés et supprimés directement dans le chat, avec une vue claire des Skills inclus (#2156)",new_0_6_32_6:"La mémoire Ekko utilise désormais un modèle canonique unique isolé par Profile, avec mutations vérifiées par révision, meilleur audit des sources et filtrage de pertinence plus strict (#2159)",new_0_6_32_7:"Les messages intermédiaires de l’assistant Hermes 0.19 sont diffusés et stockés dans des bulles distinctes ; les discussions individuelles peuvent livrer de façon asynchrone les résultats persistants des délégations en arrière-plan (#2160)",new_0_6_32_8:"Les nouveaux builds du Runtime desktop, chemins de repli et shims CLI Windows utilisent désormais Hermes Agent 0.19.0 par défaut (#2161)",new_0_6_32_9:"Les contrôles de fenêtre sont intégrés au cadre de la page : les feux macOS sont dans la barre latérale, les contrôles Windows au-dessus du contenu principal et Linux conserve ses décorations natives (#2162)",new_0_6_32_10:"La documentation de développement prend désormais en charge le checkout courant et les worktrees Git isolés facultatifs (#2155)"}};export{e as default};
|