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:"Browser",settings:"Browser Settings",desktopOnly:"The embedded browser is available only in Hermes Studio Desktop.",newTab:"New Tab",back:"Back",forward:"Forward",reload:"Reload",stop:"Stop",addressPlaceholder:"Search or enter an address",selectElement:"Select element",selectRegion:"Select region",annotationPlaceholder:"Describe what the Agent should inspect or change…",selectionData:"Browser selection data",annotationAdded:"Screenshot added to the chat composer",annotationCount:"{count} annotation(s)",annotationLabel:"Annotation {index}",clearAnnotations:"Clear annotations",finishAnnotation:"Done",agent:"Agent",agentControlling:"{agent} is controlling this tab",agentWaiting:"{agent} is waiting for your confirmation",takeOver:"Take over",tabCrashed:"This tab crashed.",recoverTab:"Reload tab",profiles:"Profiles",profileName:"Profile name",addProfile:"Add profile",currentProfile:"Active profile",switchProfile:"Switch profile",editProfile:"Edit profile",profileDirectory:"Profile data directory",downloadDirectory:"Download directory",profileRootDirectory:"Profile root directory",chooseProfileRootDirectory:"Choose an empty directory",profileRootDirectoryHint:"Choose an empty directory. Browser data will use {data}; downloads will use {download}.",proxy:"Proxy",proxyMode:"Proxy mode",proxyDirect:"Direct connection",proxySystem:"System proxy",proxyCustom:"Custom proxy",proxyServer:"Proxy server",proxyServerPlaceholder:"For example: http://127.0.0.1:7890 or socks5://127.0.0.1:1080",askBeforeDownload:"Ask where to save each file",downloadConflictPolicy:"Duplicate file names",uniquifyDownloads:"Create a unique file name",askOnConflict:"Ask when a file exists",downloads:"Downloads",downloadStateProgressing:"Downloading",downloadStateCompleted:"Completed",downloadStateCancelled:"Cancelled",downloadStateInterrupted:"Interrupted",downloadStateBlocked:"Blocked",permissions:"Permissions",permissionsHint:"Remote page permissions are denied by default and listed here for audit.",blocked:"Blocked",profileSwitchTitle:"Switch browser profile?",profileSwitchWarning:"{agents} Agent operation(s), {downloads} download(s), and {annotations} annotation(s) may be interrupted.",deleteProfileTitle:"Delete browser profile?",deleteProfileWarning:"Managed profile data will be moved to the system Trash. Custom directories are left untouched.",clearCache:"Clear cache",clearPermissionAudit:"Clear permission log",clearSiteData:"Clear site data",clearSiteDataWarning:"This signs the selected profile out of websites and clears cookies and local storage.",dataCleared:"Browser data cleared",loadFailed:"Failed to start the embedded browser"},login:{title:"Hermes Studio",description:"Enter your username and password to continue.",placeholder:"Access token",submit:"Login",tokenRequired:"Please enter your access token",invalidToken:"Invalid token",connectionFailed:"Cannot connect to server",passwordLogin:"Password",tokenLogin:"Token",usernamePlaceholder:"Username",passwordPlaceholder:"Password",defaultCredentialsHint:"Default username: admin. Default password: 123456.",credentialsRequired:"Please enter username and password",invalidCredentials:"Invalid username or password",tooManyAttempts:"Too many failed attempts, please try again later",lockResetHint:"If this is your server, clear the login lock with:",defaultLoginResetHint:"To reset the default admin password, run:",desktopLockResetHint:"Too many failed login attempts. Open the system tray menu and choose Reset Login to reset the password.",sessionExpired:"Login expired. Please sign in again.",accessDenied:"You do not have permission to access this resource.",passwordMismatch:"Passwords do not match",passwordTooShort:"Password must be at least 6 characters",setupSuccess:"Password login configured successfully",passwordChanged:"Password changed successfully",passwordRemoved:"Password login removed",setupPassword:"Set Up Password Login",changePassword:"Change Password",changeUsername:"Change Username",removePasswordLogin:"Remove",username:"Username",currentPassword:"Current Password",newPassword:"New Password",confirmPassword:"Confirm Password",newUsername:"New Username",usernameChanged:"Username changed successfully",usernameTooShort:"Username must be at least 2 characters",setupDescription:"Manage the username and password used to sign in.",removeConfirm:"Password login is required for user accounts.",passwordLoginNotConfigured:"Password login is not configured",passwordLoginConfigured:"Current account: {username}",defaultCredentialTitle:"Change the default account credentials",defaultCredentialMessage:"This account is still using the default username or password. To prevent unauthorized access, update the username and password as soon as possible.",defaultCredentialAction:"Update now",defaultCredentialLater:"Remind me later"},users:{title:"Account Management",description:"Create users, assign roles, and control which profiles regular admins can access.",create:"Create User",edit:"Edit User",username:"Username",role:"Role",statusLabel:"Status",profiles:"Accessible Profiles",profilesPlaceholder:"Select accessible profiles",allProfiles:"All profiles",noProfiles:"No profiles assigned",lastLogin:"Last Login",newPasswordOptional:"New Password (leave blank to keep)",loadFailed:"Failed to load users",deleteConfirm:"Delete this user?",enable:"Enable",disable:"Disable",roles:{superAdmin:"Super Admin",admin:"Admin"},status:{active:"Active",disabled:"Disabled"}},common:{loading:"Loading...",cancel:"Cancel",delete:"Delete",edit:"Edit",save:"Save",retry:"Retry",reset:"Reset",saved:"Saved",update:"Update",create:"Create",saveFailed:"Save failed",deleteFailed:"Delete failed",ok:"OK",copied:"Copied",copy:"Copy",noData:"No data",expired:"Expired",fetch:"Fetch",add:"Add",enable:"Enable",disable:"Disable",configured:"Configured",notConfigured:"Not configured",confirm:"Confirm",expand:"Expand",collapse:"Collapse",start:"Start",stop:"Stop"},mcp:{title:"MCP Servers",loadFailed:"Failed to load MCP servers",reloadAll:"Reload All",refresh:"Refresh",total:"Total",connected:"Connected",disconnected:"Disconnected",tools:"tools",tool:"Tools",searchPlaceholder:"Search servers...",addServer:"+ Add Server",zeroTools:"0 tools",loading:"Loading...",empty:"No MCP servers configured",reloaded:"Reloaded {server}",reloadedAll:"All MCP servers reloaded",reloadFailed:"Reload failed",serverAdded:'Server "{name}" added',addFailed:"Failed to add server",serverUpdated:'Server "{name}" updated',updateFailed:"Failed to update server",saveFailed:"Save failed",serverRemoved:'Removed "{name}"',enabled:"Enabled {name}",disabled:"Disabled {name}",connectedStatus:"Connected",disconnectedStatus:"Disconnected",disabledStatus:"Disabled",toolList:"Tool List",count:" ",more:"more",removeFailed:"Failed to remove server",testOk:"Test OK — {count} tools available",testEmpty:"Test returned no tools",testFailed:"Test failed",edit:"Edit",test:"Test",reload:"Reload",remove:"Remove",confirmRemove:'Remove server "{name}"?',cancel:"Cancel",add:"Add",save:"Save",addTitle:"Add MCP Server",editTitle:"Edit MCP Server",invalidJson:"Invalid JSON format",invalidYaml:"Invalid YAML format",invalidConfig:"Invalid configuration",invalidServerConfig:"Invalid server configuration",missingCommandOrUrl:"Must have command or url",manageTools:"Manage Tools",toolsVisibilityTitle:"Tools Visibility Management",fetchTools:"Fetch Tools List",fetchToolsFailed:"Failed to fetch tools list",toolsMode:"Mode:",toolsModeAll:"All",toolsModeInclude:"Include",toolsModeExclude:"Exclude",toolsListHeader:"Tool Name",toolsEmpty:"No tools available, please fetch tools list first",toolsSummaryAll:"{count} tools total, all enabled",toolsSummaryInclude:"{total} tools total, {count} selected",toolsSummaryExclude:"{total} tools total, {count} excluded",toolsVisibilitySaved:"Tools visibility saved",toolsSelectAll:"Select all",toolsClearSelection:"Clear selection",toolsExcludeAll:"Exclude all",toolsClearExcluded:"Clear excluded"},sidebar:{chat:"Chat",backToChat:"Back",search:"Search",apiRelay:"API Relay",history:"History",jobs:"Jobs",kanban:"Kanban",workflow:"Workflow",models:"Models",profiles:"Profiles",skills:"Skills",plugins:"Plugins",mcp:"MCP",petdex:"Pets",memory:"Memory",logs:"Logs",usage:"Usage",performance:"Performance",journey:"Journey",skillsUsage:"Skills Usage",channels:"Channels",gateways:"Gateways",terminal:"Terminal",browser:"Browser",singleChat:"Chat",globalAgent:"Global Agent",groupChat:"Group Chat",files:"Files",devices:"Devices",groupConversation:"Conversation",groupConversationShort:"Conv",groupPlatform:"Platform",groupAgent:"Agent",groupAgentShort:"Agent",groupSystem:"System",groupSystemShort:"Sys",groupMonitoring:"Monitoring",groupMonitoringShort:"Mon",groupTools:"Tools",groupToolsShort:"Tools",codingAgents:"Coding Agents",versionPreview:"Version Preview",theme:"Theme",settings:"Settings",connected:"Connected",disconnected:"Disconnected",collapse:"Collapse menu",expand:"Expand menu",updateTip:'Run "hermes-web-ui update" in terminal to update',updateVersion:"Upgrade to v{version}",reloadClientVersion:"Reload for v{version}",updating:"Updating...",updateSuccess:"Update successful. Please refresh the page shortly. If it does not start after a while, start it manually.",updateFailed:"Update failed",logout:"Sign Out",nodeVersionWarning:"Detected Node.js v{version}. Please upgrade to version 23 or later.",changelog:"Changelog",noChangelog:"No changelog available",versionManagement:"Version Management",updateAvailableLabel:"(New version)",dockerUpdateTitle:"Docker Update",dockerUpdateGuide:"In Docker environment, please pull the latest image and recreate the container to upgrade:",dockerUpdateNote:"Your data will persist after the container is recreated."},runtimeVersions:{title:"Version Management",runtimeTitle:"Hermes Runtime",currentHermesAgentVersion:"Current Hermes Agent version",activeRuntimeDirectory:"Active Runtime directory",cliUpdateDescription:"Hermes Runtime 0.19.1 and later can use the following command to update the bundled Hermes Agent only. It does not update the Hermes Studio desktop app or Web UI. Fully quit Hermes Studio before running:",webUiTitle:"Web UI",platform:"Platform",currentWebUi:"Current Web UI",activeVersion:"Active version",runtimeDirectory:"Runtime storage directory",chooseRuntimeDirectory:"Choose directory",resetRuntimeDirectory:"Use system default",runtimeDirectoryHint:"The current Runtime is copied and verified before local services start on the next restart. Old storage is retained, and future Runtime downloads are stored here.",runtimeDirectorySaved:"Runtime migration scheduled. Restart Hermes Studio to apply it.",runtimeMigrationPending:"Pending migration destination: {directory}",runtimeMigrationFailed:"Storage migration failed; the previous storage remains active",runtimeActivationFailed:"The selected Runtime could not start, so Hermes Studio used another installed version",active:"Active",installed:"Installed",download:"Download",downloadGithub:"GitHub Download",downloadCf:"Cloudflare Download",github:"GitHub",cf:"Cloudflare",useVersion:"Use on next restart",deleteVersion:"Delete",deleteRuntimeConfirm:"Delete Hermes Runtime {version}?",deleteWebUiConfirm:"Delete Web UI {version}?",deleteRuntimeSuccess:"Runtime deleted",deleteWebUiSuccess:"Web UI deleted",refresh:"Refresh",noVersions:"No versions available",remoteLoadFailed:"Failed to load remote versions",downloadTasks:"Download tasks",downloadStarted:"Download started",activateSuccess:"Version selection saved. Restart Hermes Studio to use it.",jobStatus:{queued:"Queued",running:"Running",completed:"Completed",failed:"Failed"},jobStageStatus:{queued:"Queued",resolve:"Resolving",download:"Downloading",verify:"Verifying",extract:"Extracting",install:"Installing",completed:"Completed",failed:"Failed"},jobStage:{queued:"Queued",download:"Downloading",resolveRuntime:"Resolving runtime package",verifyRuntime:"Verifying runtime archive",extractRuntime:"Extracting runtime archive",installRuntime:"Installing runtime",resolveWebUi:"Resolving Web UI package",verifyWebUi:"Verifying Web UI archive",extractWebUi:"Extracting Web UI archive",installWebUi:"Installing Web UI",completed:"Completed",failed:"Failed"}},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:"Remote",connected:"Connected",disconnected:"Disconnected",remoteConnect:"Remote connect",remoteConnected:"Remote connected",remoteConnectFailed:"Failed to connect remote",remoteDisconnect:"Disconnect",remoteDisconnected:"Remote disconnected",remoteDisconnectFailed:"Failed to disconnect remote",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:"Devices",count:"{count} devices",lastScanned:"Last scanned: {time}",refresh:"Refresh",empty:"No devices found",computer:"Computer",endpointLabel:"Endpoint",statusLabel:"Status",online:"Online",offline:"Offline",address:"Address",os:"OS",agentVersion:"Agent",webUiVersion:"Web UI",responseMs:"Latency",lastSeen:"Last seen",open:"Open",never:"Never",unknown:"Unknown",loadFailed:"Failed to load devices",scanFailed:"Failed to scan devices",updateFailed:"Failed to update device",duplicateRequest:"A pending pairing request already exists",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:"Processed",unprocessed:"Unprocessed",deleteHistory:"Delete record",deleteHistoryConfirm:"Delete this request record and revoke this device connection access?",requests:"Requests",requestsWithCount:"Requests ({count})",noRequests:"No requests",requestPairing:"Request pairing",paired:"Paired",approve:"Approve",reject:"Reject",block:"Block",unblock:"Unblock",inboundStatus:{none:"Allowed to request",pending:"Pending",approved:"Approved",rejected:"Rejected",blocked:"Blocked"},outboundStatus:{none:"Unpaired",pending:"Requested",approved:"Paired",rejected:"Rejected",blocked:"Blocked"},endpoint:{web:"Web",desktop:"Desktop",custom:"Custom"}},performance:{title:"Performance",subtitle:"Inspect system resources, bridge broker, workers, and active sessions",refresh:"Refresh",autoRefreshOn:"Auto refresh",autoRefreshOff:"Manual refresh",loadFailed:"Failed to load performance metrics",systemCpu:"System CPU",systemMemory:"System Memory",activeSessions:"Active Sessions",runningSessions:"Running {count}",workers:"Workers",totalWorkerMemory:"Worker memory",processes:"Processes",uptime:"Uptime",running:"Running",stopped:"Stopped",workerMemory:"Worker Memory",lastUpdated:"Updated",profile:"Profile",memory:"Memory",sessions:"Sessions",runningActiveSessions:"Running / Active",lastUsed:"Last Used",status:"Status",noWorkers:"No workers",sessionsByProfile:"Sessions by Profile",noActiveSessions:"No active sessions"},journey:{title:"Learning Journey",play:"Play journey",pause:"Pause journey",refresh:"Refresh",categorySelection:"Category selection",nodeKinds:"Node types",description:"Description",canvasInstructions:"Use arrow keys to preview nodes, Enter to open details, and Escape to clear the selection.",loadFailed:"Failed to load learning journey",nodes:"Nodes",edges:"Edges",skills:"Skills",memories:"Memories",clusters:"Clusters",profile:"Profile",source:"Source",learnedSkills:"Learned skills",memorySkillEdges:"Memory links",allKinds:"All kinds",allCategories:"All categories",searchPlaceholder:"Search nodes",noClusters:"No clusters",noNodes:"No journey nodes",noCategory:"Uncategorized",category:"Category",useCount:"Use count",createdBy:"Created by",timestamp:"Time",pinned:"Pinned"},drawer:{terminal:"Terminal",files:"Workspace"},subagent:{title:"Background task",noGoal:"Untitled background task",open:"Open live background task output",close:"Close background task output",waiting:"Waiting for live output...",tool:"Tool",tools:"{count} tools",tokens:"{input} in · {output} out",started:"Started",running:"Running",completed:"Completed",failed:"Failed",cancelled:"Cancelled",interrupted:"Interrupted"},realtimeVoice:{title:"Realtime Voice",mode:"Voice mode",open:"Open realtime voice",back:"Back to chat",connected:"Voice link ready",turnMode:"Realtime preview · turn mode",browserStt:"Browser",browserTts:"Browser",untitledSession:"Untitled conversation",sessionMissing:"The conversation is unavailable.",backendStreamRequired:"Realtime voice on mobile and desktop requires a configured backend speech-to-text provider.",networkUnavailableNoFallback:"Browser speech recognition is offline and no usable fallback STT is currently configured.",liveTranscript:"Live transcript",transcriptPlaceholder:"Tap the voice core and start speaking",recentTurns:"Recent turns",you:"You",mute:"Mute output",unmute:"Unmute",finishTurn:"Finish turn",speak:"Start speaking",end:"End",status:{idle:"Ready",paused:"Microphone off",listening:"Listening",processing:"Transcribing",thinking:"{agent} is thinking",speaking:"{agent} is speaking",error:"Voice link interrupted"},hint:{idle:"Tap the center to begin a voice turn",paused:"Turn the microphone back on when you are ready",listening:"Pause naturally to send, or tap to finish",listeningManual:"Recording now. Tap the center again to stop and transcribe",processing:"Converting your voice into text",thinking:"Your message was sent to the current conversation",speaking:"You can interrupt at any time",error:"Tap the center to try again"}},chat:{contextRemaining:"remaining",contextClickToEdit:"Click to edit context length",contextEditTitle:"Edit Context Length",contextEditDesc:"Set context length limit for current model (in tokens)",contextEditPlaceholder:"Enter context length",contextEditHint:"Common values: 256k (Hermes default), 128k (GPT-4), 32k (GPT-3.5)",contextEditSave:"Save",contextEditCancel:"Cancel",contextEditInvalid:"Please enter a valid context length",contextEditSuccess:"Context length updated",contextEditFailed:"Update failed",emptyState:"Start a conversation with Hermes Agent",emptyStateAgent:"Start a conversation with {agent}",viewOlderInHistory:"View earlier messages in History",scrollToBottom:"Scroll to bottom",forkedFrom:"Forked from",previousLastMessage:"Previous last message",cliEmptyState:"Start a CLI chat session",outlineTitle:"Conversation Outline",outlineEmpty:"No conversation content",outlineUserQuestion:"User question",inputPlaceholder:"Type a message... (Enter to send, Shift+Enter for new line)",inputHeightResizeHint:"Drag to resize the chat input. Double-click to reset.",slashCommandArgs:{message:"<message>",title:"<title>",text:"<text>"},slashCommands:{usage:"Calculate current session usage",status:"Show session status and queue",yolo:"Toggle session YOLO mode and skip dangerous command approvals",abort:"Stop the active bridge run",queue:"Queue a message behind the active run",learn:"Learn a reusable skill from described sources",plan:"Write a markdown implementation plan",moa:"Run one prompt through the default model ensemble",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:"Clear the current display",clearHistory:"Delete this session’s stored message history",title:"Rename this session",compress:"Run context compression while idle",fork:"Fork this idle session into a new linked conversation",steer:"Send steering text to the active bridge run",destroy:"Release the bridge agent for this session",reloadMcp:"Reload MCP servers",reloadSkills:"Reload skill commands",bundles:"Browse skill bundles",bundlesCreate:"Create a skill bundle"},bundlePicker:{title:"Skill Bundles",create:"Create Bundle",searchPlaceholder:"Search bundles...",skillCount:"{count} skills",skillsLabel:"Skills",noSkills:"No skills configured",deleteBundle:"Delete {name}",deleteTitle:"Delete Bundle",deleteConfirm:"Delete “{name}” from this Profile? This cannot be undone.",deleteFailed:"Failed to delete bundle",deleted:"Bundle deleted",noBundles:"No bundles yet. Create one to combine multiple skills.",noMatch:"No matching bundles"},bundleCreator:{title:"Create Skill Bundle",name:"Name",namePlaceholder:"e.g. PR Review Team",nameHint:"Use English letters, numbers, spaces, hyphens, or underscores.",description:"Description",descriptionPlaceholder:"What should this bundle be used for?",skills:"Skills",skillsPlaceholder:"Select one or more skills",nameRequired:"Enter a bundle name",nameInvalid:"Use an English name containing at least one letter",skillsRequired:"Select at least one skill",skillsLoadFailed:"Failed to load skills",createFailed:"Failed to create bundle",created:"Bundle created"},attachFiles:"Attach files",reasoningEffort:{tooltip:"Reasoning effort",defaultLabel:"Default",options:{default:"Default (config.yaml)",none:"None",minimal:"Minimal",low:"Low",medium:"Medium",high:"High",max:"Max",xhigh:"Extra high",ultra:"Ultra"}},autoPlaySpeech:"Auto-play voice",voiceInput:{startCapture:"Start voice capture",stopCaptureAndInsert:"Stop voice capture and place transcript in the input",cancelCapture:"Cancel voice dialogue",statusLabel:"Status: {status}",transcriptLabel:"Transcript: {text}",errorLabel:"Error: {error}",recentEvents:"Recent events",status:{idle:"Idle",capturing:"Capturing",transcribing:"Transcribing",sending:"Adding to input",error:"Error"},browserSpeechUnsupported:"Browser speech recognition is not supported in this browser.",browserSpeechFailed:"Browser speech recognition failed.",browserSpeechFailedWithReason:"Browser speech recognition failed: {error}.",microphoneUnsupported:"Microphone capture is not supported in this browser.",microphoneRecordingFailed:"Microphone recording failed."},showToolCalls:"Show tool calls",hideToolCalls:"Hide tool calls",messageQueue:"Message queue",removeQueuedMessage:"Remove queued message",stop:"Stop",start:"Start",stopGateway:"Stop Gateway",send:"Send",contextUsed:"Context used:",sessions:"Sessions",webUiSessions:"Sessions",allProfiles:"All profiles",profileMissingModelsTip:'Profile "{profile}" has no available provider or model for this session',sessionScopeHint:"Chat shows Web UI/API Server sessions only. CLI, Telegram, Discord, Cron, and other channel sessions are read-only in History.",openHistory:"Open History",hermesHistory:"Hermes History",historyScopeHint:"Read-only Hermes history sessions for the current profile, grouped by source.",noSessions:"No sessions",recent:"Recent",recentCount:"Recent session count",loadMoreSessions:"Load more sessions",searchTitle:"Search Sessions",searchSubtitle:"Search by title or message content",searchScope:"Search scope: Web UI local session database only. Read-only Hermes history sessions are not included.",searchHint:"Cmd/Ctrl+K",searchPlaceholder:"Search sessions...",searchEmpty:"Recent sessions",searchRecent:"Recent session",searchNoResults:"No sessions match your search",searchNoSnippet:"No snippet available",searchEnterHint:"Enter to open · Esc to close",searchFailed:"Failed to search sessions",newChat:"New Chat",category:"Category",uncategorized:"Uncategorized",categoryPlaceholder:"Select or create a category",categoryCreateHint:"Select a category, or type a new name and press Enter to create it.",categoryCreated:'Category "{name}" created',categoryCreateFailed:"Failed to create category",categoryLoadFailed:"Failed to load categories",moveToCategory:"Move to category",categoryUpdated:"Category updated",categoryUpdateFailed:"Failed to update category",renameCategory:"Rename category",deleteCategory:"Delete category",enterCategoryName:"Enter category name",confirmDeleteCategory:"Delete “{name}”? Its sessions will move to Uncategorized.",categoryRenamed:"Category renamed",categoryRenameFailed:"Failed to rename category",categoryDeleted:"Category deleted",categoryDeleteFailed:"Failed to delete category",agent:"Agent",approvalKicker:"Tool permission",toolResultUnavailable:"Execution interrupted; no tool result received",approvalCommand:"Command to run",approvalTitle:"Review tool call before running",approvalAgree:"Agree",approvalAllowOnce:"Allow once",approvalAllowSession:"Allow session",approvalAlways:"Always",approvalDeny:"Deny",clarifyKicker:"Agent needs clarification",clarifyTitle:"The agent has a question for you",clarifyPlaceholder:"Type your answer...",clarifySubmit:"Reply",clarifyDismiss:"Dismiss",newCliChat:"New CLI",deleteSession:"Delete this session?",sessionDeleted:"Session deleted",toggleBatchMode:"Batch selection",selectAll:"Select all",confirmBatchDelete:"Delete {count} selected sessions?",batchDeleteSuccess:"Deleted {count} sessions",batchDeletePartial:"{failed} sessions failed to delete",batchDeleteFailed:"Batch delete failed",importToWebUi:"Import to Web UI",importSessionSuccess:"Session imported to Web UI",importSessionAlreadyExists:"Session already exists in Web UI",importSessionFailed:"Failed to import session",rename:"Rename",archiveSession:"Archive",unarchiveSession:"Unarchive",pin:"Pin",unpin:"Unpin",pinned:"Pinned",chatMode:"Chat",liveMode:"Live",liveSessions:"Live Sessions",recentBadge:"Recent",linkedSessions:"{count} linked",noVisibleMessages:"No human-visible messages.",monitorRoleUser:"User",monitorRoleAssistant:"Assistant",copySessionLink:"Copy Session Link",openSessionInNewTab:"Open in new tab",openSessionInNewWindow:"Open in new window",sessionLinkCopied:"Session link copied",copySessionId:"Copy Session ID",export:"Export",exportFull:"Full Export (JSON)",exportCompressed:"Compressed Export (TXT)",exportCompressing:"Compressing context, please wait...",exportSuccess:"Session exported",exportFailed:"Export failed",renamed:"Renamed",renameFailed:"Rename failed",sessionArchived:"Session archived",archiveSessionFailed:"Failed to archive session",sessionUnarchived:"Session unarchived",unarchiveSessionFailed:"Failed to unarchive session",renameSession:"Rename Session",sessionNotFound:"Session not found",enterNewTitle:"Enter new title",workspace:"Workspace",workspaceDefault:"Default",workspaceDefaultTooltip:"This workspace is set as default and will be auto-filled for new chats",workspacePin:"Set as default workspace",workspaceUnpin:"Unset default workspace",workspaceRecent:"Recent",defaultWorkspace:"Default Workspace",more:"More",setWorkspace:"Set Workspace",setWorkspaceTitle:"Set Session Workspace",workspacePlaceholder:"Enter project path, e.g. /home/user/project",folderPickerEmpty:"(Empty)",folderPickerNoFolders:"No workspace folders",folderPickerSelected:"Selected:",workspaceSet:"Workspace set",workspaceSetFailed:"Failed to set workspace",setModel:"Set Model",setModelTitle:"Set Session Model",standardModels:"Standard models",moaPresets:"MoA combinations",noMoaPresets:"No available MoA combinations",modelType:"Model type",modelSet:"Model set",modelSwitching:"Switching model...",modelSetFailed:"Failed to set model",other:"Other",runFailed:"Run failed",error:"Error",tool:"Tool",arguments:"Arguments",result:"Result",workspaceChanges:"Workspace changes",changedFiles:"{files} files changed",changesThisTurn:"Changes this turn",diffUnavailable:"Diff unavailable",binaryFileDiffUnavailable:"Binary file diff unavailable",truncated:"... (truncated)",unchangedLines:"{count} unchanged lines",executionDuration:"Execution time",thinkingLabel:"Thinking",thinkingInProgress:"Thinking",thinkingShow:"Show thinking",thinkingHide:"Hide thinking",thinkingDuration:"Observed {duration}",thinkingChars:"{count} chars",copyBubble:"Copy message",copiedBubble:"Message copied",copyFailed:"Copy failed",referenceMessage:"Reference message",cancelReference:"Cancel reference",playSpeech:"Play voice",pauseSpeech:"Pause",resumeSpeech:"Resume",stopSpeech:"Stop",speechNotSupported:"Voice playback not supported in this browser"},workflow:{title:"Workflow",profile:"Profile",namePlaceholder:"Workflow name",canvasAriaLabel:"Workflow canvas",workspace:{title:"Select Workspace",select:"Select workspace",clear:"Clear workspace"},actions:{newWorkflow:"New Workflow",addNode:"Add Node",createWorkflowFirst:"Please create a workflow first",reset:"Reset",startExecution:"Start Execution",executionPending:"Workflow execution is not connected yet",executionStarted:"Workflow execution started",executionCompleted:"Workflow execution completed",executionFailed:"Workflow execution failed",rerunDownstreamKeepNode:"Keep this node and run downstream",rerunDownstreamClearNode:"Clear this node and run downstream",rerunDownstreamStarted:"Downstream rerun started",rerunFromNodeStarted:"Rerun from this node started",rerunFailed:"Workflow rerun failed",deleteNode:"Delete Node",deleteEdge:"Delete Connection",editEdge:"Edit Connection",undo:"Undo",importWorkflow:"Import Workflow",exportWorkflow:"Export Workflow",imported:"Workflow imported",exported:"Workflow exported",importFailed:"Workflow import failed",exportFailed:"Workflow export failed"},budget:{runTitle:"Choose Run time budget",rerunTitle:"Choose Rerun time budget",totalLabel:"Total Run budget",customMinutes:"Custom minutes",customPlaceholder:"Minutes",invalidCustom:"Custom Run budget must be from 0.1 to 1440 minutes",help:"This is one absolute deadline for the entire Run. Each node receives only the remaining time; loops do not reset it.",options:{unlimited:"No deadline",30:"30 minutes",60:"60 minutes",90:"90 minutes",custom:"Custom"},unlimitedSummary:"No deadline",unlimitedHelp:"This Run has no configured time deadline.",summary:"Budget {total} · elapsed {elapsed} · remaining {remaining}",deadline:"Deadline: {deadline}",nodeStartRemaining:"{remaining} remaining at node start"},schedule:{title:"Workflow schedules",manage:"Manage schedules",createTitle:"Create schedule",editTitle:"Edit schedule",create:"Create schedule",save:"Save schedule",edit:"Edit schedule",delete:"Delete schedule",deleteConfirm:"Delete this schedule?",deleted:"Schedule deleted",enable:"Enable schedule",disable:"Disable schedule",enabled:"Enabled",disabled:"Disabled",empty:"No schedules yet",cron:"Cron schedule",cronPlaceholder:"e.g. 0 9 * * * or {'@'}daily",timezone:"Timezone",timezonePlaceholder:"IANA timezone, e.g. Asia/Shanghai",initialInput:"Initial input",initialInputPlaceholder:"Optional input for every scheduled Run",startNodes:"Start nodes",startNodesPlaceholder:"Default workflow start nodes",timeout:"Total timeout (minutes)",timeoutPlaceholder:"No deadline",policies:"Concurrency: skip · Missed runs: skip",lastScheduled:"Last scheduled",nextRun:"Next run",lastRun:"Last Run",never:"Never",loadFailed:"Failed to load schedules",saveFailed:"Failed to save schedule",saved:"Schedule saved",deleteFailed:"Failed to delete schedule",required:"Cron schedule and timezone are required",reset:"Reset",presets:{hourly:"Hourly",daily:"Daily",weekly:"Weekly",monthly:"Monthly"}},evidence:{historyPage:"Run history",detailsPage:"Run details",backToRuns:"Back to run history",resultStatus:"Status",duration:"Duration",budgetLabel:"Budget",actualExecution:"Executed",otherJudgments:"Other judgments",loopEvents:"Loop events",evaluatedNotExecuted:"Evaluated, not executed",ariaLabel:"Workflow execution details",title:"Execution details",count:"{count} items",intro:"Shows path decisions, loop passes, and exceptional nodes for this run.",empty:"No execution details",loadFailed:"Failed to load persisted execution details",summaryTitle:"Run outcome",blockedAt:"Blocked at {gate}",actualPath:"Actual path",noActualPath:"No path was taken",pathChecks:"Path checks",selectedPaths:"Used paths",otherPaths:"Other decisions and events",selectedCount:"{count} used",otherCount:"{count} not used",eventCount:"{count} events",showOtherPaths:"Show other details ({count})",hideOtherPaths:"Hide other details",runDetails:"Run details",actualPathSteps:"Actual path steps",nodeBudgetDetails:"Time budget details",condition:"Condition",conditionMatched:"Matched",conditionNotMatched:"Did not match",sourceOutcome:"Node result",sourceReturned:"Returned normally",sourceFailed:"Execution failed",sourceSkippedStatus:"Not run",checkedData:"Checked data",entireReplyText:"Entire reply text",errorText:"Error text",jsonFieldValue:"One JSON field value",advancedPathValue:"Advanced path value",comparison:"Comparison",textToFind:"Text to find",expectedFieldValue:"Expected field value",parsedBusinessDecision:"Parsed business decision",failedGateLabel:"Failed step (value of failed_gate)",failedGateValue:"Failed step (value of failed_gate): {gate}",decisions:{blocked:"Blocked",released:"Published",verified:"Verified",skipped:"No action needed"},node:"Exceptional node",edge:"Path",loop:"Loop",unknownNode:"Unknown node",pathTitle:"{source} → {target}",loopPass:"Loop pass {count}",exceptionalNode:"This node did not complete normally.",loopPassNamed:"{node} · pass {count}",technical:"Technical information",recordId:"Record ID",sequence:"Sequence",rawStatus:"Raw status",rawRoute:"Route",rawReason:"Reason",iterationPath:"Iteration path",expectedValue:"Expected result",actualValue:"Actual upstream result",judgmentDetails:"Connection judgment",connectionResult:"Connection result",appliesWhen:"Used when",explanation:"Explanation",technicalStatus:{pathUsed:"This connection was used",pathNotUsed:"This connection was not used"},technicalRoute:{success:"Only when the upstream node returns normally",failure:"Only when the upstream node execution fails",always:"Regardless of whether the upstream node succeeds or fails"},technicalReason:{conditionNotMatched:"The reply did not satisfy this connection’s condition."},statuses:{taken:"Used",notTaken:"Not used",evaluationFailed:"Evaluation failed",timedOut:"Timed out",blocked:"Blocked"},routes:{success:"Continued after success",failure:"Continued after failure",always:"Continued regardless of outcome"},reasons:{evaluationFailed:"Route evaluation failed",conditionNotMatched:"Condition did not match",iterationLimitReached:"Maximum loop passes reached",routeNotMatched:"Route did not match",pathSelected:"This path was selected.",pathEvaluatedNotUsed:"This connection was evaluated as a candidate, but no target node consumed it.",sourceSkipped:"The source node did not run, so this path was not part of this run.",failureRouteAfterSuccess:"The source node returned normally; this path is only used when node execution fails.",successRouteAfterFailure:"The source node failed; this path is only used when it returns normally.",businessBlocked:"{source} stopped the workflow ({decision}): {reason}. Therefore, “{target}” was not run.",businessBlockedWithCondition:"{source} stopped the workflow ({decision}): {reason}. Continuing required “{expected}”, but the upstream result was “{actual}”, so “{target}” was not run.",conditionMismatchDetail:"Continuing required “{expected}”, but the upstream result was “{actual}”, so “{target}” was not run."},loopOutcomes:{continued:"Condition matched; continued to the next pass",iterationLimitReached:"Stopped at the maximum pass count",conditionNotMatched:"Stopped because the condition did not match",finished:"Loop finished"}},edgeEditor:{title:"Edit connection",guideIntro:"First choose the required source result. Then either skip reply inspection, inspect the entire text literally, or compare one parsed JSON field value.",connectionSummary:"{source} → {target}",selfLoopDescription:"{node} will run itself again.",continueAfter:"Continue after",optionalCheck:"Optional content check",runTarget:"Then",runTargetAction:"Run {target}",noContentCheck:"Do not inspect the reply",sourceResultStep:"1. Source node result",replyDataStep:"2. Reply data to check",nextStep:"3. Then",replyDataQuestion:"Which reply data should be checked?",requiredSourceResult:"Required source result",loopSummary:"Returns to {target}",loopScope:"Loop nodes: {nodes}",historyLabel:"History label (optional)",advancedSettings:"Advanced settings",historyNode:"History node",historyNodePlaceholder:"Select a node name",continueWhen:"Continue when",compareUsing:"Compare using",expectedType:"Interpret expected value as",expectedValue:"Expected value",routeChoices:{success:"Source returned normally",failure:"Source execution failed",always:"Either result"},operatorChoices:{equals:"Equals",not_equals:"Does not equal",contains:"Contains",not_contains:"Does not contain",exists:"Exists",not_exists:"Does not exist",greater_than:"Greater than",greater_than_or_equal:"Greater than or equal",less_than:"Less than",less_than_or_equal:"Less than or equal",in:"Is in list",not_in:"Is not in list"},loopMissingForwardPath:"This return connection has no forward path to loop over.",loopNotNatural:"This loop has another entry path, so it would not repeat predictably.",loopDuplicateScope:"Two return connections define the same loop nodes.",loopPartialOverlap:"Loops may be separate or fully nested, but cannot partially overlap.",loopDuplicateHistoryLabel:"Each loop history label must be unique.",route:"Route",routes:{success:"Success only (success)",failure:"Failure only (failure)",always:"Always (always)"},routeHelp:"First match the source result. success: source succeeded; failure: source failed; always: either result. A condition, when present, must also match.",routeExample:"Example: use success for the normal path, failure for error handling, and always for cleanup.",conditionPath:"What should this connection check?",conditionPathPlaceholder:"Advanced path, for example output",conditionPathOptions:{routeOnly:"Do not inspect the reply",outputRecommended:"Entire successful reply text (output, recommended)",output:"Entire successful reply text (output)",outputJson:"One JSON field value (outputJson.*)",errorRecommended:"Entire failure error text (error, recommended)",error:"Entire failure error text (error)",custom:"Advanced data path"},structuredOutputPathPlaceholder:"JSON field path, for example outputJson.route_token",structuredOutputHelp:"Parses a complete JSON reply or exactly one fenced json block. Missing, malformed, or multiple JSON blocks leave outputJson unavailable, so the condition does not match.",conditionPathHelp:{success:"For success, output is recommended. Choose Route only when no content check is needed.",failure:"For failure, error is recommended. Choose Route only when no error-text check is needed.",always:"Choose output for successful replies or error for failures. Route only skips content checks."},operator:"Operator",operators:{equals:"Equals (equals)",not_equals:"Does not equal (not_equals)",contains:"Contains (contains)",not_contains:"Does not contain (not_contains)",exists:"Exists (exists)",not_exists:"Does not exist (not_exists)",greater_than:"Greater than (greater_than)",greater_than_or_equal:"Greater than or equal (greater_than_or_equal)",less_than:"Less than (less_than)",less_than_or_equal:"Less than or equal (less_than_or_equal)",in:"Is in list (in)",not_in:"Is not in list (not_in)"},operatorHelp:{equals:'Exactly equal, including type. Example: output equals "APPROVED".',not_equals:'Not exactly equal, including type. Example: output not_equals "REJECTED".',contains:'Text contains text, or an array contains one item. Example: output contains "PASS".',not_contains:"Text does not contain text, or an array does not contain one item.",exists:"Matches when the path exists; no Value is needed.",not_exists:"Matches when the path does not exist; no Value is needed.",greater_than:"Both actual value and Value must be JSON numbers; matches when actual is greater.",greater_than_or_equal:"Both sides must be JSON numbers; matches when actual is greater than or equal.",less_than:"Both sides must be JSON numbers; matches when actual is less.",less_than_or_equal:"Both sides must be JSON numbers; matches when actual is less than or equal.",in:"Value must be a JSON array; matches when the array contains the actual value.",not_in:"Value must be a JSON array; matches when the array does not contain the actual value."},value:"Value",invalidConditionValue:"Condition value must be valid JSON",conditionValuePlaceholder:'JSON: "text", 42, true, ["a"]',valueType:"Value type",valueTypes:{string:"String",number:"Number",boolean:"Boolean",null:"Null",array:"Array",object:"Object"},valueTypeHelp:"Choose how Value is parsed and validated. This editing aid is inferred from the saved JSON value and is not stored separately.",conditionValuePlaceholders:{string:"Text, for example APPROVED",number:"Number, for example 42",boolean:"true or false",null:"null",array:'JSON array, for example ["a", 2]',object:`JSON object, for example {'{'}"status":"ready"{'}'}`},invalidValueTypes:{string:"Value must be text.",number:"Value must be a valid number.",boolean:"Value must be true or false.",null:"Value must be null.",array:"Value must be a valid array.",object:"Value must be a valid object."},valueHelp:"Enter a value matching the selected type. Objects and arrays use JSON; strings are entered without JSON quotes.",expectedReplyText:"Text to find",expectedFieldValue:"Expected field value",rawTextValueHelp:"This checks the entire reply as literal text. With Contains, the text may appear in a JSON key or value; it does not look up a JSON field.",jsonFieldValueHelp:"This compares the value at the specified outputJson path, not the field name. Example: outputJson.failed_gate equals quality-container-setup.",canvasLabel:{withValue:"{subject} {operator} “{value}”",withoutValue:"{subject} {operator}",join:"{route} · {condition}"},conditionSemantics:"What is actually being compared",rawTextComparisonHelp:"The selected operator is {operator}. It applies to the complete reply text, not one JSON field. Contains or Does not contain can match text in either a JSON key or value. Equals requires the complete reply to equal the configured value; Does not equal requires the complete reply to differ.",jsonFieldComparisonHelp:"This reads the value at {path}. {operator} compares that field value with “{value}”; it never compares the field name.",rawTextExistenceHelp:"This checks whether the complete reply text is available; it does not check whether a JSON key exists.",jsonFieldExistenceHelp:"This checks whether the field at {path} exists; it does not compare the field value.",rawTextOperatorHelp:{equals:"Matches only when the complete reply text exactly equals “{value}”. It does not read or compare one JSON field value.",not_equals:"Matches only when the complete reply text is different from “{value}”. It does not read or compare one JSON field value.",contains:"Looks for “{value}” anywhere in the complete reply text. Text in either a JSON key or a JSON value can match; this is not a JSON field lookup.",not_contains:"Matches only when “{value}” does not appear anywhere in the complete reply text, whether in a JSON key or a JSON value. This is not a JSON field lookup.",exists:"Matches when the complete reply text is available. It does not check whether any JSON key exists.",not_exists:"Matches when no complete reply text is available. It does not check whether a JSON key is missing."},jsonFieldOperatorHelp:{equals:"Reads the value at {path}. Matches only when that field value exactly equals “{value}”; it never compares the field name.",not_equals:"Reads the value at {path}. Matches only when that field value is different from “{value}”; it never compares the field name.",contains:"Reads the value at {path} and checks whether that field value contains “{value}”; it never searches the field name.",not_contains:"Reads the value at {path}. Matches only when that field value does not contain “{value}”; it never searches the field name.",exists:"Matches when the JSON field at {path} exists. It does not compare the field value.",not_exists:"Matches when the JSON field at {path} is missing. It does not compare the field value."},feedback:"Feedback loop",feedbackHelp:"Marks this backward connection as a bounded loop. It repeats only while the route and condition match, and stops at Maximum iterations.",maxIterations:"Maximum iterations",maxIterationsHelp:"Total loop passes allowed, from 1 to 100. The run also has a global execution safety budget.",invalidIterations:"Maximum iterations must be an integer from 1 to 100",loopId:"Loop identity",loopIdPlaceholder:"Select automatic or type a custom ID",loopIdAutomatic:"Automatic (recommended) · {id}",loopIdHelp:"This only labels the loop in execution history; it does not change when the loop runs. Keep Automatic unless an advanced multi-loop design needs a stable custom ID.",invalidLoopId:"Loop ID must start with a letter or number and contain only letters, numbers, dot, underscore, colon, or hyphen"},batch:{toggle:"Batch selection",selectAll:"Select all",confirmDelete:"Delete {count} selected workflows?",deleteSuccess:"Deleted {count} workflows",deletePartial:"{failed} workflows failed to delete",deleteFailed:"Batch delete failed"},validation:{nodesRequired:"Add at least one node",nodeNameRequired:"Node {node} needs a name",providerRequired:"Node {node} needs a provider",modelRequired:"Node {node} needs a model",apiModeRequired:"Node {node} needs an API mode",inputRequired:"Node {node} needs input",invalidEdge:"A connection references a missing node",invalidConnectionDirection:"Connections must go from the right output to the left input",orphanNode:"Node {node} is not connected to the workflow",disconnectedFlow:"The workflow cannot be split into multiple disconnected flows",cycle:"The workflow contains a cycle. Adjust the connections before saving."},node:{title:"Node name",agent:"Agent",model:"Model",apiMode:"API Mode",input:"Input",approvalRequired:"Approval gate",join:"Join policy",joinAll:"All incoming routes",joinAny:"Any incoming route",joinAllHelp:"All incoming routes must be taken; if one does not match, this node is skipped. Example: wait for both parallel checks.",joinAnyHelp:"Runs once when the first incoming route is taken; skips only if every route is decided and none matches. Example: continue after either reviewer approves.",promptPlaceholder:"Describe what this agent should do...",skillsPlaceholder:"Skills, press Enter to add",uploadImages:"Upload images"},status:{idle:"Idle",queued:"Queued",running:"Running",pending_approval:"Pending approval",completed:"Completed",skipped:"Skipped",failed:"Failed",approval_rejected:"Approval rejected",canceled:"Canceled"},runs:{title:"Run Records",refresh:"Refresh",empty:"No run records",startNodes:"{count} start nodes",snapshotIndicator:"Immutable snapshot from this run’s launch",show:"Show run records",hide:"Hide run records",nodeSessionTitle:"Node Session - {node}",noNodeSession:"This node has no session record yet",loadNodeSessionFailed:"Failed to load node session",stop:"Stop run",stopRequested:"Stop requested",stopFailed:"Failed to stop run",delete:"Delete record",deleteSuccess:"Run record deleted"},inspector:{selected:"Selected Node",none:"No node selected"},stats:{nodes:"Nodes",edges:"Links"},agents:{planner:"Planner",researcher:"Researcher",builder:"Builder",reviewer:"Reviewer"},models:{default:"Default Model",fast:"Fast Model",reasoning:"Reasoning Model"},initialNodes:{node1:"Node 1",node2:"Node 2",node3:"Node 3",plan:"Plan",execute:"Execute",review:"Review"},initialPrompts:{node1:"Enter this node input.",node2:"Enter this node input.",node3:"Enter this node input.",plan:"Break the request into actionable steps.",execute:"Run the implementation steps and produce artifacts.",review:"Review output quality and identify follow-up work."},newNodeTitle:"Node {count}"},kanban:{title:"Kanban Board",createTask:"New Task",noTasks:"No tasks",allStatuses:"All Statuses",allAssignees:"All Assignees",board:{create:"New Board",archive:"Archive Board",slugPlaceholder:"Board slug, e.g. project-a",namePlaceholder:"Display name (optional)",slugRequired:"Board slug is required",created:"Board created",archived:"Board archived",archiveConfirm:"Archive the current board?",defaultArchiveUnavailable:"The default board cannot be archived"},columns:{triage:"Triage",todo:"To Do",scheduled:"Scheduled",ready:"Ready",running:"Running",blocked:"Blocked",review:"Review",done:"Done",archived:"Archived"},form:{title:"Title",titlePlaceholder:"Task title",titleRequired:"Title is required",body:"Description",bodyPlaceholder:"Task description (optional)",assignee:"Assignee",selectAssignee:"Select assignee...",priority:"Priority",selectPriority:"Select priority...",tenant:"Tenant",tenantPlaceholder:"Tenant (optional)",workspace:"Workspace",workspaceScratch:"Scratch workspace",workspaceDir:"Use directory",workspaceWorktree:"Use worktree",workspacePath:"Workspace path",workspacePathPlaceholder:"Absolute path (optional)",branch:"Branch",branchPlaceholder:"Worktree branch",skills:"Skills",skillsPlaceholder:"Select skills...",triage:"Create in triage",goalMode:"Goal mode",maxRuntime:"Max runtime",maxRuntimePlaceholder:"e.g. 30m, 2h",maxRetries:"Max retries",maxRetriesPlaceholder:"Number of retries",goalMaxTurns:"Goal max turns",goalMaxTurnsPlaceholder:"Maximum turns"},card:{assigneeTooltip:"Assignee",priority:{low:"Low",medium:"Medium",high:"High"},timeAgo:{justNow:"just now",minutes:"{count}m ago",hours:"{count}h ago",days:"{count}d ago"}},detail:{status:"Status",assignee:"Assignee",priority:"Priority",tenant:"Tenant",createdAt:"Created",startedAt:"Started",completedAt:"Completed",comments:"Comments",events:"Events",runs:"Runs",result:"Result",sessions:"Related Sessions",sessionMessages:"Session Messages",noSessions:"No related sessions found.",artifacts:"Artifacts",sources:"Sources",highlights:"Highlights",noLog:"No log found for this task.",addComment:"Add Comment",commentPlaceholder:"Write a task comment...",operations:"Operations"},action:{title:"Actions",complete:"Complete",completeSummary:"Completion summary (optional)",block:"Block",blockReason:"Reason for blocking",unblock:"Unblock",archive:"Archive Task",archiveConfirm:"Archive this completed task?",assign:"Assign",assignTo:"Assign to...",dispatch:"Dispatch",recoveryReason:"Recovery reason (optional)",reclaim:"Reclaim",reassign:"Reassign",specify:"Specify",loadLog:"Load Log",loadDiagnostics:"Load Diagnostics"},message:{taskCreated:"Task created",taskCompleted:"Task completed",taskBlocked:"Task blocked",taskUnblocked:"Task unblocked",taskArchived:"Task archived",taskAssigned:"Task assigned",dispatchNudged:"Dispatcher nudged",commentAdded:"Comment added",taskReclaimed:"Task reclaimed",taskReassigned:"Task reassigned",taskSpecified:"Task specified",loadFailed:"Failed to load task"},stats:{total:"Total",tasks:"Tasks"}},jobs:{title:"Scheduled Jobs",createJob:"Create Job",editJob:"Edit Job",noJobs:"No scheduled jobs yet. Create one to get started.",sortBy:"Sort",sortByName:"Name Sort",sortByTime:"Time Sort",sortByNameHint:"Click to sort by name",sortByTimeHint:"Click to sort by time",sortAsc:"Ascending",sortDesc:"Descending",name:"Name",namePlaceholder:"Job name",schedule:"Schedule (Cron Expression)",schedulePlaceholder:"e.g. 0 9 * * *",quickPresets:"Quick Presets",selectPreset:"Select a preset...",presetEveryMinute:"Every minute",presetEvery5Min:"Every 5 minutes",presetEveryHour:"Every hour",presetEveryDay:"Every day at 00:00",presetEveryDay9:"Every day at 09:00",presetEveryMonday:"Every Monday at 09:00",presetEveryMonth:"Every month 1st at 09:00",prompt:"Prompt",promptPlaceholder:"The prompt to execute",skills:"Skills",skillsPlaceholder:"Select skills...",provider:"Provider",model:"Model",defaultProvider:"Default provider",defaultModel:"Default model",deliverTarget:"Deliver Target",origin:"Origin",local:"Local",repeatCount:"Repeat Count (optional)",modelPlaceholder:"Default model",repeatPlaceholder:"Leave empty for infinite",jobCreated:"Job created",jobUpdated:"Job updated",nameRequired:"Name is required",scheduleRequired:"Schedule is required",promptRequired:"Prompt is required",loadFailed:"Failed to load job",jobPaused:"Job paused",jobResumed:"Job resumed",jobTriggered:"Job triggered",modelUpdated:"Model updated",jobDeleted:"Job deleted",status:{running:"Running",paused:"Paused",disabled:"Disabled",scheduled:"Scheduled"},info:{model:"Model",provider:"Provider",schedule:"Schedule",lastRun:"Last Run",nextRun:"Next Run",deliver:"Deliver",repeat:"Repeat"},action:{pause:"Pause",pauseJob:"Pause job",resume:"Resume",resumeJob:"Resume job",runNow:"Run Now",triggerImmediately:"Trigger immediately"},runHistory:{title:"Run History",runs:"runs",noRuns:"No run history found."}},skills:{title:"Skills",targetFilter:"Runtime",targets:{hermes:"Hermes",claude:"Claude",codex:"Codex"},searchPlaceholder:"Search skills...",noMatch:"No skills match your search",noSkills:"No skills found",backTo:"Back to",attachedFiles:"Attached Files",loadFailed:"Failed to load skill",fileLoadFailed:"Failed to load file",modified:"Modified",archived:"Archived",pinned:"Pinned",pin:"Pin skill",unpin:"Unpin skill",pinFailed:"Failed to change pin status",edit:"Edit",saving:"Saving...",editorLabel:"Skill editor",saveSuccess:"Skill saved",saveFailed:"Failed to save skill",toggleFailed:"Failed to toggle skill",source:{builtin:"Builtin",hub:"Hub",local:"Local",external:"External"},delete:"Delete",deleteConfirm:'Delete skill "{name}"? This cannot be undone.',deleteSuccess:"Skill deleted",deleteFailed:"Failed to delete skill",import:"Import",importTitle:"Import skill",importModeZip:"Zip",importModeFolder:"Folder",importHintZip:"Upload a .zip archive containing a directory with SKILL.md",importHintFolder:"Pick a local skill folder (must contain SKILL.md)",importTargetCategory:"Target category (optional)",importTargetCategoryPlaceholder:"Leave empty to drop under misc",importSelectFile:"Choose .zip file",importSelectFolder:"Choose folder",importInvalidFile:"Only .zip archives are supported",importFileCount:"files",importNoSelection:"Please choose a file or folder first",importSuccess:"Skill imported",importFailed:"Failed to import skill",path:{local:"Local",external:"External"},externalDirs:{manage:"External dirs",title:"Manage external skill dirs",hint:"Manages config.skills.external_dirs. Supports ~ and $VAR; missing paths are greyed out.",add:"Add external dir",placeholder:"/path/to/skills or ~/my-skills",empty:"No external dirs",missing:"Path not found",notDir:"Not a directory",saveSuccess:"External dirs saved",saveFailed:"Save failed",loadFailed:"Failed to load external dirs",removeRow:"Remove"},pathCopied:"Path copied",pathCopyFailed:"Failed to copy path",reloadHint:"Active sessions: run /reload-skills; new sessions pick it up automatically.",writeApprovalButton:"Pending {count}",writeApprovalTitle:"Pending write approvals",writeApprovalDescription:"Approve or reject staged Hermes Agent memory and skill writes.",writeApprovalRefresh:"Refresh",writeApprovalEmpty:"No pending writes.",writeApprovalUnsupported:"This Hermes Agent version does not support write approvals. Upgrade Hermes Agent to use this feature.",writeApprovalMemory:"Memory",writeApprovalSkills:"Skills",writeApprovalViewDiff:"Review",writeApprovalHideDiff:"Hide",writeApprovalNoDiff:"No diff available.",writeApprovalLoadFailed:"Failed to load pending writes",writeApprovalDiffFailed:"Failed to load write details",writeApprovalActionFailed:"Failed to resolve pending write",writeApprovalApproved:"Pending write approved",writeApprovalRejected:"Pending write rejected",writeApprovalApprove:"Approve",writeApprovalReject:"Reject",writeApprovalPendingMemoryWrite:"Pending memory write",writeApprovalCurrentFile:"Current {file}",writeApprovalProposedFile:"Proposed {file}",writeApprovalDiffSection:"Diff",writeApprovalPatchOldStringMissing:"The patch old_string was not found in the current {file}, so approving it will not change the file.",writeApprovalRequestedOldString:"Requested old_string",writeApprovalCurrentReadFailed:"The current {file} could not be read as UTF-8 text.",writeApprovalDeleteSkill:"This approval deletes skill {skill}.",writeApprovalRemoveFile:"This approval removes {file} from skill {skill}."},plugins:{title:"Plugins",refresh:"Refresh",notice:"Inventory of discoverable Hermes plugin manifests. Discovery metadata is read without loading plugin code. Standalone user plugins can be enabled or disabled here; changes take effect in new Hermes sessions.",loadFailed:"Failed to load plugins",updateFailed:"Failed to update plugin",enableSuccess:"Enabled {name}",disableSuccess:"Disabled {name}",commandCopied:"Command copied",searchPlaceholder:"Search key, name, description, path...",source:"Source",kind:"Kind",statusTitle:"Status",configStatus:"config: {status}",notAvailable:"n/a",copyCommand:"Copy command",managedElsewhere:"managed elsewhere",noMatch:"No plugins match the current filters",enabled:"enabled",disabled:"disabled",summary:{total:"Total",active:"Enabled / auto",inactive:"Inactive",disabled:"Disabled",providerManaged:"Provider-managed"},status:{enabled:"Enabled","auto-active":"Auto-active",inactive:"Inactive",disabled:"Disabled","provider-managed":"Provider-managed"},statusLabel:{enabled:"Enabled by config","auto-active":"Auto-active",inactive:"Inactive",disabled:"Disabled","provider-managed":"Provider-managed"},configStatuses:{enabled:"enabled",disabled:"disabled","not-enabled":"not enabled",auto:"auto","provider-managed":"provider-managed"},table:{plugin:"Plugin",status:"Status",source:"Source",kind:"Kind",capabilities:"Capabilities",path:"Path / entrypoint",manage:"Manage"},capabilities:{tools:"{count} tools",hooks:"{count} hooks",env:"{count} env"},metadata:{agentRoot:"Agent root",python:"Python",scanCwd:"Scan cwd",projectPlugins:"Project plugins"}},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:"Memory",refresh:"Refresh",loadFailed:"Failed to load memory",myNotes:"My Notes",noNotes:"No notes yet.",notesPlaceholder:"Write your notes...",userProfile:"User Profile",noProfile:"No profile yet.",profilePlaceholder:"Write your profile...",soul:"Soul",noSoul:"No soul configuration yet.",soulPlaceholder:"Write soul configuration..."},models:{title:"Models",searchPlaceholder:"Search models...",noResults:"No results",noModels:"No models",addProvider:"Add Provider",noProviderPromptTitle:"No model provider configured",noProviderPromptMessage:'The current profile "{profile}" has no model provider configured. Would you like to open model settings now?',noProviderPromptLater:"Not now",noProviderPromptAction:"Go to settings",refreshModelCache:"Refresh model cache",refreshModelCacheLoading:"Refreshing model cache...",refreshModelCacheSuccess:"Model cache refreshed",refreshModelCacheFailed:"Failed to refresh model cache",refreshModels:"Refresh models",restoreModels:"Restore previous models",refreshModelsConfirmTitle:"Confirm model list changes",refreshModelsConfirmContent:"This refresh would remove {removed} model(s) and add {added}. Removed: {removedList}",refreshModelsConfirmAction:"Replace model list",refreshModelsSuccess:"Model list updated ({count} models, {unavailable} unavailable)",refreshModelsFailed:"Failed to refresh provider models",restoreModelsSuccess:"Restored previous model list ({count} models)",restoreModelsFailed:"Failed to restore previous model list",editProviderTitle:"Edit {name}",providerEditorLoadFailed:"Failed to load provider settings",providerEditorSaved:"Provider settings saved",providerEditorSaveFailed:"Failed to save provider settings",providerEditorConflict:"This provider changed elsewhere. The latest settings have been reloaded.",providerEditorRequired:"Display name, Base URL, and preferred model are required.",providerInternalId:"Internal provider ID",providerDisplayName:"Display name",providerIdStableHint:"The internal provider ID stays unchanged so existing references remain valid.",providerPreferredModel:"Provider preferred model",providerPreferredModelHint:"This does not change the profile-wide default model.",selectOrEnterModel:"Select or enter a model ID...",unverifiedModelWarning:"This model is not in the current catalog and has not been verified.",credentialConfigured:"Configured",credentialNotConfigured:"Not configured",leaveBlankKeepCredential:"Leave blank to keep the current key",enterCredential:"Enter the provider credential",credentialNeverDisplayedHint:"The stored key is never displayed. Enter a new value only to replace it.",providerCredentialMissingHint:"This provider is now unavailable until a credential is configured.",providerAdvancedSettings:"Advanced provider settings",discoverModels:"Discover models from the provider",rateLimitDelay:"Rate limit delay (seconds)",requestTimeoutSeconds:"Request timeout (seconds)",staleTimeoutSeconds:"Stale request timeout (seconds)",extraBodyHint:"Optional JSON object merged into provider requests. Leave blank to remove it.",extraBodyInvalid:"extra_body must be a valid JSON object.",providerTestUnsupported:"Connection testing is not supported for this API mode.",perModelContextLengths:"Per-model context lengths",contextLengthInheritHint:"Clear a value to inherit the provider or system default.",inheritDefault:"Inherit default",providerReconnectHint:"Changes apply to new runs. Existing chat or coding-agent sessions must reconnect.",testConnection:"Test connection",providerTestSuccess:"Connection succeeded; {count} models found",providerTestFailed:"Provider connection test failed",providerTestFailedTitle:"Connection test failed",providerSaveAnywayHint:"You can still save these settings explicitly, but the provider may be unavailable.",saveAnyway:"Save anyway",providerType:"Provider Type",preset:"Preset",custom:"Custom",selectProvider:"Select Provider",chooseProvider:"Choose a provider...",getApiKey:"Get API Key",name:"Name",autoGeneratedName:"Auto-generated from Base URL",baseUrl:"Base URL",region:"Region",regionIntl:"International",regionCn:"Mainland China",baseUrlPlaceholder:"e.g. https://api.example.com/v1",apiKey:"API Key",apiKeyPlaceholder:"sk-...",defaultModel:"Default Model",selectOrInput:"Select or type a model name...",selectModel:"Select a model...",providerAdded:"Provider added",providerDeleted:"Provider deleted",providerCredentialsCleared:"Provider credentials cleared",clearProviderCredentials:"Clear credentials",clearCredentialsConfirm:'Clear stored credentials for "{name}"? This built-in provider will stay listed and can be used again after credentials are configured.',disableProvider:"Disable provider",disableProviderConfirm:'Disable built-in provider "{name}"? The provider will stay built in and can be enabled again later.',providerDisabled:"Provider disabled",defaultProviderUpdated:"Default provider updated",defaultProviderUpdateFailed:"Failed to update default provider",defaultModelUpdated:"Default model updated",defaultModelUpdateFailed:"Failed to update default model",deleteProvider:"Delete Provider",deleteConfirm:'Are you sure you want to delete "{name}"?',codexLoginTitle:"OpenAI Codex Login",codexWaiting:"Enter this code at the authorization page to complete login:",codexCopyCode:"Code copied",codexOpenLink:"Open authorization page",codexApproved:"Login successful",codexExpired:"Authorization expired. Please try again.",nousLoginTitle:"Nous Portal Login",nousWaiting:"Enter this code at the authorization page to complete login:",nousCopyCode:"Code copied",nousOpenLink:"Open authorization page",nousApproved:"Login successful",nousDenied:"Authorization was denied. Please try again.",nousExpired:"Authorization expired. Please try again.",copilotLoginTitle:"GitHub Copilot Login",copilotWaiting:"Open GitHub and enter the device code below to authorize. The window will close automatically once approved.",copilotCopyCode:"Code copied",copilotOpenLink:"Open GitHub authorization page",copilotApproved:"Sign-in succeeded!",copilotDenied:"Authorization denied.",copilotExpired:"The authorization link has expired. Please retry.",copilotAddDetectedTitle:"GitHub Copilot detected",copilotAddDetected:"A GitHub Copilot OAuth token was detected on this machine. Click Add to enable Copilot in Hermes.",copilotAddSourceEnv:"Source: ~/.hermes/.env (COPILOT_GITHUB_TOKEN)",copilotAddSourceGhCli:"Source: gh CLI (gh auth token)",copilotAddSourceAppsJson:"Source: VS Code Copilot extension (apps.json)",copilotDeleteHintEnv:"This will clear COPILOT_GITHUB_TOKEN in ~/.hermes/.env. Other tools are not affected.",copilotDeleteHintGhCli:"Copilot will be hidden from Hermes. Your gh CLI login is not affected — `gh auth status` will still show you signed in.",copilotDeleteHintAppsJson:"Copilot will be hidden from Hermes. Your VS Code Copilot extension login is not affected.",xaiLoginTitle:"xAI Grok OAuth Login",xaiWaiting:"Complete authorization in the opened xAI page. This window will close automatically once approved.",xaiOpenLink:"Open xAI authorization page",xaiCopyLink:"Copy authorization link",xaiApproved:"Sign-in succeeded!",xaiExpired:"The authorization link has expired. Please retry.",anthropicLoginTitle:"Claude OAuth Login",anthropicWaiting:"Complete authorization on the Claude page, then paste the returned code here.",anthropicOpenLink:"Open Claude authorization page",anthropicCopyLink:"Copy authorization link",anthropicCodePlaceholder:"Paste the authorization code...",anthropicSubmitCode:"Submit code",anthropicApproved:"Sign-in succeeded!",anthropicExpired:"Authorization expired. Please retry.",minimaxLoginTitle:"MiniMax Coding Plan Login",minimaxRegionHint:"Choose the MiniMax account region used by your Coding Plan.",minimaxGlobal:"Global",minimaxChina:"China",minimaxStart:"Start authorization",minimaxWaiting:"Open the MiniMax authorization page and enter this code. This window will close automatically once approved.",minimaxOpenLink:"Open MiniMax authorization page",minimaxApproved:"Sign-in succeeded!",minimaxExpired:"Authorization expired. Please retry.",customBadge:"CUSTOM",previewBadge:"PREVIEW",disabledBadge:"UNAVAILABLE",disabledTooltip:"This model is currently unavailable for your account.",customModelPlaceholder:"Unlisted model ID",customModelHint:"For provider-supported models not returned by the API; not a display rename. Press Enter to load.",removeCustomModel:"Remove this unlisted model",refresh:"Refresh model list (reload config.yaml)",noProviders:"No providers found. Add a custom provider to get started.",models:"Models",count:"models",more:"more",aliasEdit:"Rename",aliasTitle:"Model display name",aliasTitleFor:"Display name for {model}",aliasPlaceholder:"Leave empty to use original model ID",aliasHint:"Display-only alias. Hermes still receives the canonical model ID.",aliasCanonical:"Original ID: {model}",aliasUseOriginal:"Use original ID",aliasManage:"Display names",aliasManageFor:"Display names for {provider}",aliasSaveFailed:"Failed to save display name",manageVisibleModels:"Manage visible models",manageVisibleModelsFor:"Manage visible models for {name}",visibilityHint:"Only affects the Web UI model picker and Models page. Hermes CLI provider/model config is not rewritten; calls still use canonical model IDs.",visibilitySelectOne:"Keep at least one visible model",visibilitySaved:"Visible models saved",visibilitySaveFailed:"Failed to save visible models",showAllModels:"Show all models",clearVisibleModels:"Clear selection",generalTitle:"General Models",auxiliaryTitle:"Auxiliary Models",auxiliarySubtitle:"Side-task model overrides for compression, vision, approvals, MCP, and background maintenance.",combinationTitle:"Model Ensembles",combinationSubtitle:"Configure MoA presets: reference models provide perspectives first, then one aggregator model handles the final response and tool calls.",combinationPreset:"Preset",combinationName:"Name",combinationAddModel:"Add model ensemble",combinationEditModel:"Edit model ensemble",combinationNewPreset:"New preset",combinationPresetPlaceholder:"e.g. review",combinationAddPreset:"Add preset",combinationSetDefault:"Set default",combinationEnabled:"Enable references",combinationReferenceModels:"Reference models",combinationReferenceModel:"Reference model",combinationAddReference:"Add reference model",combinationAggregator:"Aggregator model",combinationReferenceTemperature:"Reference temperature",combinationAggregatorTemperature:"Aggregator temperature",combinationMaxTokens:"Max tokens",combinationNotSet:"Not set",combinationSaved:"Model ensemble saved",combinationLoadFailed:"Failed to load model ensemble",combinationSaveFailed:"Failed to save model ensemble",combinationPresetExists:"Preset already exists",combinationNameRequired:"Enter a model ensemble name",combinationNameInvalid:"Name can only contain letters, numbers, underscores, hyphens, and dots",combinationReferenceRequired:"Add at least one reference model",combinationAggregatorRequired:"Select an aggregator model",auxiliaryRefresh:"Refresh",auxiliaryTask:"Task",auxiliaryTimeout:"Timeout",auxiliaryDownloadTimeout:"Download timeout",auxiliaryActions:"Actions",auxiliaryDefault:"Default",auxiliaryCustomEndpoint:"Custom endpoint",auxiliaryProviderAuto:"Auto",auxiliaryProviderMain:"Main model",auxiliaryProviderPlaceholder:"auto, main, or provider key",auxiliaryDownloadShort:"download",auxiliaryExtraBody:"Extra body JSON",auxiliaryClear:"Clear",auxiliarySaved:"Auxiliary models saved",auxiliaryLoadFailed:"Failed to load auxiliary models",auxiliarySaveFailed:"Failed to save auxiliary models",auxiliaryInvalidExtraBody:"Extra body must be a JSON object",auxiliaryTaskCompression:"Compression",auxiliaryTaskVision:"Vision",auxiliaryTaskWebExtract:"Web extract",auxiliaryTaskSkillsHub:"Skills hub",auxiliaryTaskApproval:"Approval",auxiliaryTaskMcp:"MCP",auxiliaryTaskTitleGeneration:"Title generation",auxiliaryTaskTriageSpecifier:"Triage specifier",auxiliaryTaskKanbanDecomposer:"Kanban decomposer",auxiliaryTaskProfileDescriber:"Profile describer",auxiliaryTaskCurator:"Curator",auxiliaryTaskSessionSearch:"Session search",auxiliaryTaskFlushMemories:"Flush memories",currentDefault:"Current default",defaultShort:"Default",setDefaultProvider:"Set default provider",setDefault:"Set default",builtIn:"Built-in",customType:"Custom",provider:"Provider",contextLength:"Context Length",contextLengthPlaceholder:"e.g. 256000 (optional)",apiMode:"API Mode",local:"Local ({host})",selectProviderRequired:"Please select a provider",baseUrlRequired:"Base URL is required",apiKeyRequired:"API Key is required",modelRequired:"Default Model is required",enterBaseUrl:"Please enter Base URL first",unexpectedFormat:"Unexpected response format",foundModels:"Found {count} models",fetchFailed:"Failed to fetch models"},gateways:{title:"Gateways",running:"Running",stopped:"Stopped",started:"Started",startFailed:"Failed to start gateway",stopFailed:"Failed to stop gateway"},profiles:{title:"Profiles",create:"Create Profile",import:"Import",export:"Export",rename:"Rename",delete:"Delete",editConfig:"Edit Config",switchTo:"Switch Hermes Profile",switchConfirm:"This will run `hermes profile use {name}` and change the active Hermes CLI profile. Continue?",switchSuccess:'Hermes active profile switched to "{name}"',switchFailed:"Failed to switch Hermes profile. Gateway may need manual restart.",createSuccess:'Profile "{name}" created',createFailed:"Failed to create profile",renameSuccess:"Profile renamed",renameFailed:"Failed to rename profile",deleteConfirm:'Are you sure you want to delete profile "{name}"?',deleteSuccess:"Profile deleted",deleteFailed:"Failed to delete profile",exportSuccess:"Profile exported",exportFailed:"Failed to export profile",exportTimeout:"Export timed out. This profile is too large to archive — caches and virtual environments under its workspace are usually what makes it big.",importTimeout:"Import timed out while the server was unpacking the archive. Try again on faster storage or import it with the Hermes CLI.",importSuccess:"Profile imported",importFailed:"Failed to import profile",importSelectFile:"Select archive file",importInvalidFile:"Please select a valid archive (.tar.gz, .tgz, .gz, .zip)",name:"Profile Name",namePlaceholder:"Lowercase letters, numbers, hyphens only",nameValidation:"Profile name can only contain lowercase letters, numbers, underscores, and hyphens",newName:"New Name",newNamePlaceholder:"Lowercase letters, numbers, hyphens",cloneFromCurrent:"Clone from current profile",cloneCleanupNotice:"Cloning automatically skips exclusive platform credentials (Weixin / Telegram / Slack, etc.) to avoid conflicts with the source profile",cloneStrippedCredentials:"Stripped {count} exclusive credential(s): {list}",cloneDisabledPlatforms:"Disabled {count} platform(s): {list}",cloneStrippedConfigCredentials:"Stripped {count} embedded credential(s) from config.yaml: {list}",archivePath:"Archive Path",archivePathPlaceholder:"Server path to archive file",importName:"Profile Name (optional)",importNamePlaceholder:"Leave empty to use archive name",active:"Active",model:"Model",gateway:"Gateway",alias:"Alias",provider:"Provider",path:"Path",skills:"Skills",hasEnv:"Has .env",hasSoulMd:"Has soul.md",noProfiles:"No profiles found. Create one to get started.",avatar:{title:"Custom Avatar",customize:"Avatar",upload:"Upload Image",random:"Randomize",reset:"Use Default",hint:"PNG, JPEG, or WebP. Max 1MB.",invalidType:"Please choose a PNG, JPEG, or WebP image",tooLarge:"Avatar image must be 1MB or smaller",saveSuccess:"Avatar saved",saveFailed:"Failed to save avatar",resetSuccess:"Default avatar restored",resetFailed:"Failed to restore default avatar"},runtime:{activeProfile:"Active: {name}",bridgeWorker:"Bridge worker",gateway:"Gateway",active:"Active",activeTag:"Active",idle:"Idle",checking:"Checking",running:"Running",stopped:"Stopped",restartGateway:"Restart Gateway",restartProfile:"Restart Profile",switchProfile:"Switch Frontend Profile",gatewayRestarted:"Gateway restarted: {name}",gatewayRestartFailed:"Failed to restart gateway",profileRestarted:"Profile restarted: {name}",profileRestartFailed:"Failed to restart profile"}},logs:{title:"Logs",all:"All",searchPlaceholder:"Search...",refresh:"Refresh",noEntries:"No log entries"},theme:{title:"Theme",saved:"Theme saved",saveFailed:"Failed to save theme",reset:"Restore defaults",resetSuccess:"Default theme restored",appearance:"Appearance",appearanceHint:"Changes are previewed across the interface",mode:"Brightness",modeHint:"Choose a light or dark palette",modeSystem:"Follow system",modeLight:"Light",modeDark:"Dark",style:"Style",styleHint:"Choose the interface character",styleInk:"Ink",styleComic:"Comic",fontSize:"Text size",fontSizeHint:"Base interface and conversation text size",textColor:"Text color",textColorHint:"Secondary text shades are generated automatically",accentColor:"Selection color",accentColorHint:"Used for active items, selections, and primary buttons",background:"Background image",backgroundHint:"Upload a personal workspace background",backgroundTypeError:"Use a PNG, JPEG, WebP, or GIF image",backgroundSizeError:"Background images must be 10 MB or smaller",backgroundUploaded:"Background image updated",backgroundUploadFailed:"Failed to upload background image",backgroundRemoved:"Background image removed",backgroundRemoveFailed:"Failed to remove background image",backgroundReplace:"Replace image",backgroundUpload:"Upload image",backgroundRemove:"Remove",backgroundEmpty:"No background image",backgroundNote:"The image is stored with your account. A local cache prevents flashing while it loads.",preview:"Preview",previewTitle:"Your workspace, your atmosphere",previewText:"Text and selection colors update throughout the interface.",previewAction:"Selected action"},settings:{title:"Settings",saved:"Saved",saveFailed:"Save failed",tabs:{display:"Display",account:"Current Account",users:"Account Management",webhooks:"Webhooks",agent:"Agent",proxy:"Proxy",memory:"Memory",compression:"Compression",session:"Session",privacy:"Privacy",apiServer:"API Server",models:"Models",voice:"Voice"},webhooks:{title:"Webhooks",description:"Send Chat Run lifecycle events to external systems without blocking chat execution.",deliveryNote:"Delivery runs in a bounded in-memory queue. Endpoints run in parallel, while each endpoint preserves event order. Pending deliveries are not retained across a server restart.",createTitle:"Add Webhook",editTitle:"Edit Webhook",allProfiles:"All profiles",queued:"{count} queued",deleteConfirm:"Delete this webhook? Pending deliveries for it will also be discarded.",localInboxTitle:"Local test inbox",localInboxDescription:"{count} recent events received by the built-in test receiver. Kept in memory only and cleared on server restart.",localInboxEmpty:"No local test events received yet.",localInboxPayloadTitle:"Received webhook payload",clearInboxConfirm:"Clear all events from the local test inbox?",columns:{name:"Name",url:"URL",events:"Events",profiles:"Profiles",status:"Status",actions:"Actions",receivedAt:"Received at",event:"Event",eventId:"Event ID",deliveryId:"Delivery ID"},events:{messageCreated:"User message created",runQueued:"Run queued",runStarted:"Run started",toolStarted:"Tool started",toolCompleted:"Tool completed",toolFailed:"Tool failed",approvalRequested:"Approval requested",approvalResolved:"Approval resolved",clarificationRequested:"Clarification requested",clarificationResolved:"Clarification resolved",completed:"Run completed",failed:"Run failed"},status:{enabled:"Enabled",disabled:"Disabled"},runtime:{idle:"Idle",delivering:"Delivering",retrying:"Retrying",success:"Delivered",failed:"Failed",dropped:"Dropped"},actions:{add:"Add Webhook",localTest:"Use local test receiver",test:"Test",enable:"Enable",disable:"Disable",refresh:"Refresh",clear:"Clear",view:"View"},form:{name:"Name",localTestName:"Local Webhook test",namePlaceholder:"For example: Operations notifications",url:"Endpoint URL",secret:"Signing secret",secretPlaceholder:"Optional HMAC-SHA256 signing secret",secretKeepPlaceholder:"Leave empty to keep the current secret",clearSecret:"Remove saved secret",events:"Events",profiles:"Profiles",profilesPlaceholder:"Leave empty to receive all profiles",maxRetries:"Retry attempts after the first failure (0–10)",includeContent:"Include final assistant text",includeContentHint:"Final reply text may contain sensitive information. Reasoning, system prompts, and tool arguments are never included.",includeUserContent:"Include user message text",includeUserContentHint:"User messages may contain sensitive information. This is disabled by default and does not include system prompts, reasoning, tool arguments, or tool results.",allowPrivateNetwork:"Allow private or local network addresses",allowPrivateNetworkHint:"Only enable this for trusted internal endpoints. DNS is checked again for every delivery.",enabled:"Enabled"},messages:{required:"Name and URL are required",eventRequired:"Select at least one event",loadFailed:"Failed to load webhooks",saved:"Webhook saved",saveFailed:"Failed to save webhook",deleted:"Webhook deleted",deleteFailed:"Failed to delete webhook",testSucceeded:"Test webhook delivered",testFailed:"Test webhook failed",localTestFailed:"Failed to create the local test receiver",inboxLoadFailed:"Failed to load local test events",inboxCleared:"Local test events cleared",inboxClearFailed:"Failed to clear local test events"}},models:{apiKey:"API Key",apiKeyPlaceholder:"Enter API key",save:"Save",saved:"Saved",saveFailed:"Save failed",noProviders:"No providers configured"},display:{streaming:"Stream Responses",streamingHint:"Show AI replies in real-time",compact:"Compact Mode",compactHint:"Reduce message spacing",showReasoning:"Show Reasoning",showReasoningHint:"Show model thinking process",showCost:"Show Cost",showCostHint:"Show token usage in replies",inlineDiffs:"Inline Diffs",inlineDiffsHint:"Show code changes inline",bellOnComplete:"Completion Sound",bellOnCompleteHint:"Play sound when AI finishes",approvalBell:"Approval Sound",approvalBellHint:"Play a sound when a new approval or clarification needs attention",notifyOnComplete:"Completion Notification",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:"Show a system notification when AI finishes",notifyOnCompleteMacHint:"On macOS, allow browser notifications in System Settings.",notifyOnCompleteDenied:"Notification permission was denied",notifyOnCompleteInsecure:"Browser notifications require HTTPS or localhost",notifyOnCompleteUnsupported:"This browser does not support notifications",notifyOnCompleteTest:"Notifications are enabled.",notifyOnCompleteTestButton:"Test",notifyOnCompleteTesting:"Sending test notification...",notifyOnCompleteTestSent:"Test notification sent",notifyOnCompleteTestFailed:"Failed to send test notification",busyInputMode:"Busy Input Mode",busyInputModeHint:"Allow input while AI is processing",theme:"Theme",themeHint:"Choose light, dark, or follow system preference",themeLight:"Light",themeDark:"Dark",themeSystem:"System",chatInputHeight:"Chat input height",chatInputHeightHint:"Default desktop chat input height in pixels. Mobile keeps auto height."},agent:{maxTurns:"Max Turns",maxTurnsHint:"Maximum interaction rounds per conversation",gatewayTimeout:"Gateway Timeout",gatewayTimeoutHint:"Request inactivity timeout in seconds; 0 means unlimited",restartDrainTimeout:"Restart Drain Timeout",restartDrainTimeoutHint:"Drain timeout before restart in seconds",toolEnforcement:"Tool Enforcement",toolEnforcementHint:"Control tool call execution mode",auto:"Auto",always:"Always",never:"Never"},gatewayAutoStart:{title:"Gateway Auto-Start",description:"Control which local Hermes profile gateways the Web UI starts during startup. This is stored in the Web UI config, not a profile config.yaml.",enabled:"Auto-start gateways",enabledHint:"When disabled, startup will not automatically start any profile gateway.",management:"Unified gateway",managementHint:"Requires Hermes Agent 0.17.0 or later. When enabled, Web UI writes multiplex_profiles so the default gateway serves every profile; other profiles cannot configure separate Feishu, Weixin, QQBot, or similar messaging entrypoints. Turning it off removes that config.",managementAuto:"Auto",managementPerProfile:"One gateway per profile",managementUnified:"Unified default gateway",mode:"Profile policy",modeHint:"Start all discovered profiles or only the explicit include list.",modeAll:"All discovered profiles",modeInclude:"Only included profiles",include:"Included profiles",includeHint:"Comma-separated profile names. In include mode, an empty list starts none.",exclude:"Excluded profiles",excludeHint:"Comma-separated profile names to skip after the include/all policy is applied.",profileListPlaceholder:"default, reviewer"},proxy:{title:"Gateway Proxy",description:"Set proxy environment variables for the selected profile gateway. Changes restart the gateway so messaging platforms can use the new network settings.",httpsProxy:"HTTPS_PROXY",httpsProxyHint:"Proxy for HTTPS requests. Usually the main value to set.",httpProxy:"HTTP_PROXY",httpProxyHint:"Proxy for plain HTTP requests.",allProxy:"ALL_PROXY",allProxyHint:"Fallback proxy used when a protocol-specific proxy is not set.",noProxy:"NO_PROXY",noProxyHint:"Comma-separated hosts or domains that should bypass the proxy.",save:"Save Proxy Settings"},memory:{enabled:"Enable Memory",enabledHint:"Allow AI to remember conversation context",userProfile:"User Profile",userProfileHint:"Allow AI to remember user preferences",charLimit:"Memory Char Limit",charLimitHint:"Max characters for MEMORY.md",userCharLimit:"User Profile Char Limit",userCharLimitHint:"Max characters for USER.md"},compression:{enabled:"Enable Compression",enabledHint:"Automatically compress long chat history before it exceeds the model context",threshold:"Compression Threshold",thresholdHint:"Start compression when estimated tokens exceed this context ratio",targetRatio:"Target Ratio",targetRatioHint:"Target history size after compression as a context ratio",protectLastN:"Protect Recent Messages",protectLastNHint:"Keep this many latest messages uncompressed",protectFirstN:"Protect First Messages",protectFirstNHint:"Keep this many earliest messages uncompressed"},session:{mode:"Reset Mode",modeHint:"Trigger condition for session reset",modeBoth:"Idle + Scheduled",modeIdle:"Idle Only",modeDaily:"Scheduled Only",modeNone:"Never (Manual Only)",idleMinutes:"Idle Timeout",idleMinutesHint:"Wait time before auto-reset (minutes)",atHour:"Scheduled Reset Time",humanOnly:"Show human sessions only",humanOnlyHint:"Hide sub-agent/session monitor noise by default",liveMonitorHumanOnly:"Live monitor: show human sessions only",liveMonitorHumanOnlyHint:"Hide sub-agent/session monitor noise in the Live monitor by default",atHourHint:"Reset session at this hour daily",requireAuth:"Session Authorization",requireAuthHint:"Require authorization for session operations",memoryWriteApproval:"Review memory writes",memoryWriteApprovalHint:"Stage Hermes Agent memory writes for approval before they are saved.",skillsWriteApproval:"Review skill writes",skillsWriteApprovalHint:"Stage Hermes Agent skill changes for approval before they are saved.",writeApprovalTitle:"Pending write approvals",writeApprovalDescription:"Approve or reject staged Hermes Agent memory and skill writes.",writeApprovalRefresh:"Refresh",writeApprovalEmpty:"No pending writes.",writeApprovalMemory:"Memory",writeApprovalSkills:"Skills",writeApprovalViewDiff:"Review",writeApprovalHideDiff:"Hide",writeApprovalNoDiff:"No diff available.",writeApprovalLoadFailed:"Failed to load pending writes",writeApprovalDiffFailed:"Failed to load write details",writeApprovalActionFailed:"Failed to resolve pending write",writeApprovalApproved:"Pending write approved",writeApprovalRejected:"Pending write rejected",writeApprovalApprove:"Approve",writeApprovalReject:"Reject",writeApprovalPendingMemoryWrite:"Pending memory write",writeApprovalCurrentFile:"Current {file}",writeApprovalProposedFile:"Proposed {file}",writeApprovalDiffSection:"Diff",writeApprovalPatchOldStringMissing:"The patch old_string was not found in the current {file}, so approving it will not change the file.",writeApprovalRequestedOldString:"Requested old_string",writeApprovalCurrentReadFailed:"The current {file} could not be read as UTF-8 text.",writeApprovalDeleteSkill:"This approval deletes skill {skill}.",writeApprovalRemoveFile:"This approval removes {file} from skill {skill}."},privacy:{redactPii:"Redact PII",redactPiiHint:"Auto-detect and hide sensitive info (passwords, keys, etc.)"},apiServer:{enable:"Enable",enableHint:"Enable API server",host:"Host",hostHint:"Listen address",port:"Port",portHint:"Listen port",key:"Key",keyHint:"API access key",cors:"CORS Origins",corsHint:"Allowed cross-origin sources"},lockedIps:{title:"Locked IPs",count:"{count} locked",empty:"No locked IPs",unlock:"Unlock",unlockAll:"Unlock All",unlockAllConfirm:"Unlock all locked IPs?",unlocked:"IP unlocked",allUnlocked:"{count} IPs unlocked",type:{password:"Password",token:"API token",pairing:"Device pairing"}},userAvatar:{title:"User Avatar",upload:"Upload Image",random:"Generate Random",reset:"Reset to Default",hint:"Supports PNG/JPEG/WebP up to 1MB, auto-compressed to under 500KB",invalidType:"Please choose a PNG, JPEG, or WebP image",tooLarge:"Avatar image must be under 1MB",saveSuccess:"Avatar saved",saveFailed:"Failed to save avatar",resetSuccess:"Avatar reset to default",resetFailed:"Failed to reset avatar"},voice:{activeTtsApi:"Active TTS API",activeSttApi:"Active STT API",ttsProvidersTitle:"TTS providers",ttsProvidersDescription:"Manage text-to-speech integrations used to play assistant responses and voice previews.",sttProvidersTitle:"STT providers",sttProvidersDescription:"Manage speech-to-text integrations used by the microphone and voice input flow.",localSttModelTitle:"Local Chinese-English STT",localSttModelDescription:"Private on-device recognition. Audio stays on this machine.",localSttModelUnavailable:"Download and validate the local STT model before setting it as active.",localSttModelReady:"Ready",localSttModelDownloading:"Downloading",localSttModelNotInstalled:"Not installed",localSttLanguages:"Languages",localSttLanguagesValue:"Chinese + English",localSttDownloadSize:"Download size",localSttRuntime:"Runtime",localSttDownloadCf:"Cloudflare download",localSttDownloadGithub:"GitHub download",localSttBackgroundHint:"The download, checksum verification, extraction, and model validation run in the background.",localSttDownloadFailed:"Local STT model download failed: {error}",localSttStage:{queued:"Waiting to download…",resolve:"Preparing download…",download:"Downloading model…",verify:"Verifying checksum…",extract:"Extracting model…",validate:"Validating model runtime…",install:"Installing model…",completed:"Model is ready",failed:"Download failed"},hermesConfigTitle:"Hermes Agent configuration",hermesConfigDescription:"Existing native providers remain in the Hermes profile. Web UI providers appear to Hermes as Hermes Studio.",hermesActiveProvider:"Active provider",hermesConfiguredProviders:"Configured providers",hermesStudioProvider:"Hermes Studio",providerSpeed:"Speed",providerSampleRate:"Sample rate",providerBitRate:"Bit rate",providerGroupId:"Group ID",providerVolume:"Volume",providerEmotion:"Emotion",providerDiarize:"Speaker diarization",providerFormatText:"Format transcript",providerTagAudioEvents:"Tag audio events",optionEnabled:"Enabled",optionDisabled:"Disabled",nativeProvider:"Hermes native provider",selectNativeProvider:"Select a Hermes native provider",useHermesStudioProvider:"Use Hermes Studio provider",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:"None selected",keyStored:"Stored",keyMissing:"Missing",customApi:"API",localBuiltin:"Local built-in",ttsCardHint:"Speech synthesis provider",sttCardHint:"Speech transcription provider",setActive:"Set active",testAction:"Test",connect:"Connect",presetEdgeTtsLabel:"Edge TTS",presetEdgeTtsDescription:"Free high-quality cloud voices from Microsoft Edge.",presetOpenaiTtsLabel:"OpenAI TTS",presetMimoTtsLabel:"MiMo TTS",presetDoubaoTtsLabel:"Volcengine Doubao TTS",presetCustomTtsLabel:"Custom TTS",presetBrowserSttLabel:"Browser STT",presetBrowserSttDescription:"Native browser speech recognition API.",presetOpenaiWhisperLabel:"OpenAI Whisper",presetGroqSttLabel:"Groq STT",presetDoubaoSttLabel:"Volcengine Doubao STT",presetCustomSttLabel:"Custom STT",apiCompatibility:"API compatibility",openaiCompatible:"OpenAI-compatible",manualCustomEndpoint:"Manual custom endpoint",connectionStep:"Connection",discoveryManualHint:"Manual custom endpoint selected. Model discovery is not available; enter the model name manually.",discoveryCredentialHint:"Enter Base URL and API key, then connect to fetch available models.",discoveryNoAutoProbeHint:"No requests are sent while typing. Use Connect when the credentials are ready.",apiKeyConnectPlaceholder:"Paste API key to connect; stored keys are never shown",connectFetchModels:"Connect & fetch models",modelRecommendedSuffix:"recommended",modelConnectManualHint:"Connect to auto-fill, or enter manually.",modelRequiredConnectManual:"Model is required. Connect to auto-fill, or enter manually.",apiKeyRequired:"API key is required.",apiKeyRequiredForDiscovery:"API key is required to fetch models.",baseUrlRequired:"Base URL is required.",baseUrlHttpsRequired:"Please use http:// or https://.",baseUrlInvalid:"Enter a valid Base URL, including https://.",discoveryFailedManualFallback:"Could not fetch models. You can still enter the model name manually.",completeRequiredProviderFields:"Complete the required provider fields before saving.",fetchingModels:"Fetching models…",recommendedModel:"Recommended: {model}.",useRecommendedModel:"Use this.",modelsDiscovered:"{count} models discovered. Recommended model is selected when the field is empty.",remove:"Remove",testSuccess:"Test completed",testTextRequired:"Enter text before testing.",keyMissingForTest:"Add an API key before testing this provider.",testing:"Testing…",transcribing:"Transcribing…",browserSttTestHint:"Browser STT is tested from the chat microphone.",sttEmptyAudio:"No audio was captured. Try again.",sttTestSuccess:"Transcription completed",sttRecordingHint:"Recording… click Stop to transcribe.",keepStoredKeyPlaceholder:"Leave blank to keep the stored key",apiKeyPlaceholder:"Enter API key",lastTest:"Last test",notTested:"—",recording:"Recording",testFailedShort:"Failed",testFailedSummary:"Test failed. Check provider settings and try again.",showDetails:"Show details",hideDetails:"Hide details",moreActions:"More",moreActionsFor:"More actions for {provider}",addTtsApi:"Add TTS API",addSttApi:"Add STT API",active:"Active",builtin:"Built-in",connected:"Connected",disconnected:"Disconnected",source:"Source",model:"Model",voice:"Voice",doubaoVoiceHint:"Select a Seed TTS 2.0 voice; the resource field is updated automatically.",apiKey:"API key",confirmDeleteSecret:"Delete the stored API key for this voice API?",ttsTitle:"Text-to-speech",ttsSaved:"TTS settings saved on the server",ttsSaveFailed:"Failed to save TTS settings",ttsTestSaved:"Audition succeeded; TTS settings saved on the server",ttsTestSaving:"Saving TTS settings before audition…",ttsMissingBaseUrl:"Base URL is required before testing. Enter a provider endpoint, then test again.",ttsMissingApiKey:"API key is required before testing. Paste the key, or save a stored server key first.",ttsCleared:"Stored TTS key cleared",ttsClearFailed:"Failed to clear stored TTS key",storedBaseUrlsTitle:"Stored Base URLs",storedBaseUrlsHint:"Saved voice provider endpoints. Field-level inputs only clear the current value; delete saved endpoints here.",storedBaseUrlsEmpty:"No custom voice Base URLs are saved on the server.",storedBaseUrlDelete:"Delete URL",storedApiKeysTitle:"Stored API keys",storedApiKeysHint:"Masked list of server-stored voice API keys. Only provider/source is shown; raw keys are never displayed.",storedApiKeysEmpty:"No voice API keys are stored on the server.",storedKeyKindTts:"TTS",storedKeyKindStt:"STT",storedApiKeyMasked:"[stored]",storedApiKeyDelete:"Delete key",baseUrlPresetClear:"Clear URL",baseUrlPresetCleared:"Base URL cleared from the field.",baseUrlPresetDelete:"Delete URL",baseUrlPresetDeleted:"Base URL removed from saved list.",baseUrlPresetDeleteFailed:"Failed to remove saved Base URL.",ttsPendingSecret:"New key will be saved",ttsStoredSecret:"Server has stored key: {value}",ttsClearKey:"Clear stored key",sttTitle:"Speech-to-text",sttProvider:"STT Provider",sttProviderHint:"Choose how voice input is transcribed",sttProviderBrowser:"Browser",sttProviderOpenai:"OpenAI-compatible",sttProviderCustom:"Custom",sttBrowserHint:"Use built-in browser speech recognition when available.",sttApiKey:"API Key",sttApiKeyHint:"Stored server-side for STT providers that require authentication.",sttStoredSecret:"Stored server key: {value}",sttPendingSecret:"Stored server key: will be updated on save",sttClearKey:"Clear stored key",sttModel:"Model",sttModelHint:"Speech-to-text model to use.",sttLanguage:"Language",sttLanguageHint:"Optional language hint such as en or zh.",sttPrompt:"Prompt",sttPromptHint:"Optional transcription prompt.",sttAudioTranscode:"Audio transcoding",sttAudioTranscodeNone:"Send original audio",sttAudioTranscodeFfmpeg:"Convert to WAV with ffmpeg",sttBaseUrl:"Base URL",sttBaseUrlHint:"Custom OpenAI-compatible speech-to-text endpoint.",sttSave:"Save STT settings",sttSaved:"STT settings saved on server.",sttSaveFailed:"Failed to save STT settings.",sttCleared:"Stored STT secret cleared from server.",sttClearFailed:"Failed to clear stored STT secret.",sttActiveSaved:"Active STT provider saved on server.",sttSaveActive:"Save active STT provider",sttEndpointHint:"Final transcription endpoint: {endpoint}",sttTestTitle:"Test speech-to-text",sttTestButton:"Test STT API",sttTestStopButton:"Stop and transcribe",sttTestBackendOnly:"STT API test is available for OpenAI-compatible and Custom providers.",sttTestRecording:"Recording test sample… click Stop and transcribe when done.",sttTestTranscribing:"Transcribing test sample…",sttTestEmpty:"No audio was captured for the STT test.",sttTestSucceeded:"STT test succeeded.",sttTestFailed:"STT test failed: {error} — {hint}",sttFailureHintMissingConfig:"Check that the provider is saved with a base URL/model and an API key before testing.",sttFailureHintAuth:"Check the API key. If a key was already stored, paste the current key again and save before testing.",sttFailureHintForbidden:"The key reached the provider but does not have permission for this STT model or account. Check provider access/billing.",sttFailureHintEndpointModel:"Check the Base URL and model. For Groq, use {endpoint} with whisper-large-v3-turbo or another Groq STT model.",sttFailureHintModel:"Check that the selected STT model exists and is enabled for this account.",sttFailureHintQuota:"The provider reports quota, billing, or rate-limit trouble. Check account quota/billing or retry later.",sttFailureHintNetworkCustom:"The server could not reach the custom STT endpoint. Check that {endpoint} is reachable from the Web UI server and is OpenAI-compatible.",sttFailureHintNetwork:"The Web UI server could not reach the STT provider. Check network/proxy/firewall and retry.",sttFailureHintAudio:"The recorded audio was empty or rejected. Try a short clear sample, allow microphone access, or retry in Chrome.",sttFailureHintGenericCustom:"Check API key, Base URL, model, and the final endpoint {endpoint}.",sttFailureHintGeneric:"Check API key, model, and provider account access, then retry.",sttTestRecordFailed:"Could not start microphone recording: {error}",sttTestTranscript:"Transcript: {text}",ttsProvider:"TTS Provider",ttsProviderHint:"Choose the text-to-speech engine for message playback",providerWebSpeech:"WebSpeech API (Browser)",providerOpenai:"OpenAI TTS",providerCustom:"Custom Endpoint (OpenAI-compatible)",providerEdge:"Edge TTS (Free, no API Key)",webspeechVoice:"Voice",webspeechVoiceHint:"Select a voice from your browser or OS",webspeechVoicePlaceholder:"Auto (default voice)",openaiKey:"API Key",openaiKeyHint:"Your OpenAI API key with TTS access",openaiUrl:"API Base URL",openaiUrlHint:"e.g. https://api.openai.com/v1/audio/speech",openaiModel:"Model",openaiModelHint:"tts-1 (faster) / tts-1-hd (higher quality)",openaiVoice:"Voice",openaiVoiceHint:"Voice to use for synthesis",customHint:"Use any OpenAI-compatible TTS API — works with GPT-SoVITS, CosyVoice, etc.",customUrl:"API URL",customUrlHint:"Base URL of your TTS service",customUrlPlaceholder:"The address configured in the local adapter, e.g. http://127.0.0.1:9880",customApiKey:"API Key (Optional)",customApiKeyHint:"Some custom endpoints require authentication",customApiKeyPlaceholder:"Leave blank if not needed",edgeHint:"Powered by Microsoft Edge TTS (node-edge-tts).",edgeUrl:"Adapter URL",edgeUrlHint:"Address of your Edge TTS adapter, e.g. http://127.0.0.1:9882",edgeUrlPlaceholder:"http://127.0.0.1:9882",edgeVoice:"Voice",edgeVoiceHint:"Select a voice for speech synthesis",edgeRate:"Speed",edgeRateHint:"Adjust speech speed (0.5x ~ 2.0x)",edgePitch:"Pitch",edgePitchHint:"Adjust speech pitch (-20 ~ +20 Hz)",testTitle:"Test Voice",testText:"Test Text",testTextPlaceholder:"Enter text to test...",testTextDefault:"Hello, this is a voice test.",testButton:"Test",testButtonPlaying:"Playing...",testFailed:"Test failed: {error}",providerMimo:"MiMo TTS",mimoHint:"Xiaomi MiMo TTS — supports preset voices, voice design, and voice clone modes",mimoApiKey:"API Key",mimoApiKeyHint:"Get your key at platform.xiaomimimo.com",mimoApiKeyPlaceholder:"MiMo API Key",mimoAuthMode:"Authentication Mode",mimoAuthModeHint:"Header format expected by the selected MiMo endpoint",mimoAuthModeBearer:"Bearer token (Authorization)",mimoAuthModeApiKey:"API key header (api-key)",mimoAuthModeBoth:"Both headers",mimoBaseUrl:"Base URL",mimoBaseUrlHint:"MiMo API endpoint URL",mimoModel:"Model",mimoModelHint:"Select speech synthesis model",mimoModelPreset:"Preset Voices",mimoModelVoiceDesign:"Voice Design",mimoModelVoiceClone:"Voice Clone",mimoVoice:"Voice",mimoVoiceHint:"Select a preset voice",mimoVoiceDesignPrompt:"Voice Description",mimoVoiceDesignPromptHint:"Describe the voice characteristics you want",mimoVoiceDesignPromptPlaceholder:"e.g., A warm young female voice, slightly slow, with a magnetic tone",mimoCloneAudio:"Upload Audio",mimoCloneAudioHint:"Upload an audio sample for voice cloning (mp3/wav, max 10MB)",mimoCloneAudioUpload:"Choose File",mimoCloneAudioClear:"Clear",mimoStylePrompt:"Style Prompt",mimoStylePromptHint:"Optional — describe the speaking style in natural language",mimoStylePromptPlaceholder:"e.g., Bright and bouncy tone, fast pace"}},githubPreview:{title:"Version Preview",description:"Clone a selected GitHub tag into the Web UI preview workspace, install dependencies, and run it with the development ports.",refresh:"Refresh",selectTag:"Select a tag",prepare:"Prepare Code",install:"Install Dependencies",start:"Start Preview",stop:"Stop",note:"Preview code is stored under the Web UI data home. Production remains on port 8648; preview development runs on frontend 8651 and backend 8650.",path:"Preview Path",webuiHome:"Preview Data Home",currentTag:"Current Tag",repoReady:"Repository Ready",dependencies:"Dependencies Installed",running:"Running",notRunning:"Not running",open:"Open Preview",log:"Action Log Path",logOutput:"Log Output",actionLog:"Action Log",devLog:"Dev Server Log",yes:"Yes",no:"No",actionFailed:"Action failed",nodeEnvironmentMissing:"Node/npm was not detected. Please install Node.js and try again.",prepareSuccess:"Preview code is ready",installSuccess:"Dependencies installed",startSuccess:"Preview completed",stopSuccess:"Preview stopped"},codingAgents:{title:"Coding Agents",notice:"Not all providers and models are compatible.",claudeDescription:"Anthropic CLI for one-shot print mode and interactive coding sessions.",codexDescription:"OpenAI CLI and Hermes openai-codex provider flow for repository tasks.",copyCommand:"Copy",commandCopied:"Command copied",commandCopyFailed:"Copy failed",refresh:"Refresh",checking:"Checking",installStatus:"Install status",installed:"Installed",notInstalled:"Not installed",installRequired:"{agent} is not installed. Install it before creating a session.",installNow:"Install",installing:"Installing",installSuccess:"Installed",installFailed:"Install failed",installFailedHermesHint:"Installation failed. Ask Hermes to install it for you.",installFailureReason:"Reason",nodeEnvironmentMissing:"Node/npm was not detected. Please install Node.js and try again.",deleteNow:"Delete",deleting:"Deleting",deleteSuccess:"Deleted",deleteFailed:"Delete failed",configFiles:"Config files",profileScope:"Profile",providerScope:"Provider",providerPlaceholder:"e.g. custom:glm",modelScope:"Model",modelPlaceholder:"Select model",launchModeScope:"Launch mode",launchModeGlobal:"Global config",launchModeScoped:"Provider and model",protocolScope:"Protocol",protocolOpenAiChat:"OpenAI Chat Completions (/v1/chat/completions)",protocolOpenAiResponses:"OpenAI Responses (/v1/responses)",protocolAnthropicMessages:"Anthropic Messages (/v1/messages)",reloadConfig:"Reload config",configFileNotCreated:"Not created",configLoadFailed:"Failed to read config file",loadFailed:"Failed to inspect coding agents",launch:"Launch",launchTitle:"Launch Coding Agent",nativeTerminal:"Native Terminal",builtInTerminal:"Built-in Terminal",launchPrepared:"Launch config prepared",launchPrepareFailed:"Failed to prepare launch config",nativeLaunchStarted:"Native terminal opened",nativeLaunchFailed:"Failed to open native terminal",terminalTitle:"Coding Agent Terminal",loadProvidersFailed:"Failed to load providers for the current profile",selectProviderModel:"Select a provider and model",launchConfigDir:"Launch config directory",launchCommand:"Launch command",table:{tool:"Tool",kind:"Step",command:"Command",note:"Note",action:"Action"},kinds:{install:"Install",auth:"Auth",health:"Health",run:"Run"},notes:{claudeInstall:"Installs the Claude Code CLI globally.",codexInstall:"Installs the Codex CLI globally.",claudeAuth:"Checks Claude Code login state; run claude once if login is missing.",codexAuth:"Adds Hermes-managed OpenAI Codex OAuth credentials.",claudeHealth:"Checks updater and local CLI health.",codexHealth:"Confirms the Codex CLI is available on PATH.",claudeRun:"Print mode is the cleanest path for API-driven one-shot tasks.",codexRun:"Codex one-shot tasks must run inside a git repository."}},platform:{requireMention:"Require {'@'}Mention",requireMentionGroup:"Require {'@'}mention in groups to respond",requireMentionChannel:"Require {'@'}mention in channels to respond",requireMentionRoom:"Require {'@'}mention in rooms to respond",reactions:"Reactions",reactionsHint:"React to messages with emoji",freeResponseChats:"Free Response Chats",freeResponseChatsHint:"Chat IDs that respond without {'@'}mention (comma-separated)",freeResponseChannels:"Free Response Channels",freeResponseChannelsHint:"Channel IDs that respond without {'@'}mention (comma-separated)",freeResponseRooms:"Free Response Rooms",freeResponseRoomsHint:"Room IDs that respond without {'@'}mention (comma-separated)",mentionPatterns:"Custom Mention Patterns",mentionPatternsHint:"Additional trigger patterns",autoThread:"Auto Thread",autoThreadHint:"Auto-create reply threads after {'@'}mention",autoThreadHintRoom:"Auto-create reply threads in rooms",dmMentionThreads:"DM Mention Threads",dmMentionThreadsHint:"Use thread replies for mentions in DMs",allowBots:"Allow Bot Messages",allowBotsHint:"Respond to messages from other bots",allowedChannels:"Allowed Channels",allowedChannelsHint:"Whitelist channel IDs (comma-separated)",ignoredChannels:"Ignored Channels",ignoredChannelsHint:"Channels where bot never responds (comma-separated)",noThreadChannels:"No-Thread Channels",noThreadChannelsHint:"Channels where bot responds without threads (comma-separated)",exclusiveTokenWarning:"This platform uses exclusive token locking. Each profile must use a different identity token to avoid conflicts with other profiles.",clearCredentials:"Clear credentials",clearCredentialsConfirm:'Clear stored credentials for "{name}"? Channel behavior and access controls will be kept.',credentialsCleared:"Channel credentials cleared",clearCredentialsFailed:"Failed to clear channel credentials",clearCredentialsUnsaved:"Save or discard unsaved channel changes before clearing credentials.",clearCredentialsGatewayRestartFailed:"Credentials were cleared, but the gateway could not be restarted automatically.",clearCredentialsGatewayRestartDisabled:"Credentials were cleared, but gateway auto-restart is disabled. Restart the gateway manually to apply the change.",botToken:"Bot Token",botTokenHint:"Bot token from developer portal",proxyUrl:"Proxy URL",proxyUrlHint:"Optional platform proxy. Supports http://, https://, and socks5://",accessToken:"Access Token",accessTokenHint:"Matrix access token",homeserver:"Homeserver URL",homeserverHint:"Matrix homeserver URL",matrixUserId:"Matrix User ID",matrixUserIdHint:"Required with password login; optional with access token",matrixPassword:"Matrix Password",matrixPasswordHint:"Alternative to an access token",appId:"App ID",appIdHint:"Feishu App ID",appSecret:"App Secret",appSecretHint:"Feishu App Secret",encryptKey:"Encrypt Key",encryptKeyHint:"Feishu Encrypt Key",verificationToken:"Verification Token",verificationTokenHint:"Feishu Verification Token",clientId:"Client ID",clientIdHint:"DingTalk Client ID",clientSecret:"Client Secret",clientSecretHint:"DingTalk Client Secret",cardTemplateId:"AI Card Template ID",cardTemplateIdHint:"DingTalk AI Card template ID; leave empty to disable AI Cards",allowedUsers:"Allowed Users",allowedUsersHint:"Whitelist user IDs or OpenIDs (comma-separated)",allowAllUsers:"Allow All Users",allowAllUsersHint:"Allow messages from any user; keep off to use the allowlist",botId:"Bot ID",botIdHint:"WeCom Bot ID",wecomSecretHint:"WeCom Bot Secret",waEnabled:"Enable WhatsApp",waEnabledHint:"Enable WhatsApp via QR code pairing",weixinToken:"Weixin Token",weixinTokenHint:"From weixin CLI QR login (hermes weixin)",accountId:"Account ID",accountIdHint:"Weixin account ID",qrLogin:"QR Login",qrRelogin:"Re-login",qrFetching:"Fetching QR code...",qrScanHint:"Scan with WeChat to login",qrScanedHint:"Scaned, please confirm on phone...",qqAppId:"App ID",qqAppIdHint:"QQ Open Platform Bot App ID",qqAppSecret:"App Secret",qqAppSecretHint:"QQ Open Platform Bot App Secret",qqMarkdown:"Markdown Support",qqMarkdownHint:"Enable Markdown formatted messages (some clients may not support)",qqSandbox:"Sandbox Mode",qqSandboxHint:"Enable sandbox environment (for testing)",qqQrScanHint:"Scan the QR code with QQ, or open the link on your phone to complete binding"},language:{label:"Language",zh:"中文",en:"English"},terminal:{sessions:"Sessions",newTab:"New Terminal",closeSession:"Close this session?",sessionExited:"Exited",processExited:"Process exited with code {code}",noSessions:"No terminal sessions",connectionFailed:"Terminal service connection failed",connectionClosed:"Terminal connection closed",connectionError:"Terminal connection error"},groupChat:{agentLinkButton:"Bring your Agent",agentOwner:"Owner: {name}",agentLinkTitle:"Bring an Agent into this room",agentLinkDescription:"Connect to your own Hermes service. The service makes an outbound encrypted connection; the room never receives its login credential or workspace access.",agentLinkTargetUrl:"Your Hermes service URL",agentLinkTargetPlaceholder:"http://127.0.0.1:8748 or https://your-hermes.example.com",agentLinkTargetRequired:"Enter a Hermes service URL.",agentLinkInvalidTarget:"Enter an HTTP or HTTPS origin without credentials, a path, query, or fragment.",agentLinkOpenTarget:"Sign in and choose Agent",agentLinkPopupBlocked:"The authorization window was blocked. Allow pop-ups for this page and try again.",agentLinkParentUnavailable:"The authorization window lost its connection to the invite page. Close it and start again.",agentLinkParentUnconfirmed:"The invite page did not confirm this request. Keep it open and start authorization again.",agentLinkIncompleteConfiguration:"Select a complete Profile, provider, and model before requesting access.",agentLinkWaitingApproval:"Waiting for the room owner to approve this Agent…",agentLinkApproved:"Approved. Connecting your Agent…",agentLinkConnected:"Your Agent is connected to the room.",agentLinkError:"Could not connect this Agent.",agentLinkRejected:"The room owner rejected this Agent request.",agentLinkExpired:"This Agent request expired. Start a new request.",agentLinkPairingCode:"Manual pairing code",agentLinkPairingCodeHint:"If the authorization window cannot communicate with this page, paste this short-lived code into that window.",agentLinkCopyCode:"Copy pairing code",agentLinkAuthorizeTitle:"Authorize group chat Agent",agentLinkAuthorizeDescription:"Choose a local Agent to connect. The group can send it messages, but cannot browse your local workspace.",agentLinkSelectAgent:"Agent",agentLinkRequestConnection:"Request connection",agentLinkOrPairingCode:"or use a manual pairing code",agentLinkPairingCodePlaceholder:"Paste an HGC1 pairing code",agentLinkConnect:"Connect Agent",agentLinkSecurityHint:"Only approve a room you recognize. Pairing tickets are single-use and expire shortly.",agentLinkLoadFailed:"Could not load local Agents.",agentLinkConnectFailed:"Could not connect the selected Agent.",agentLinkInvalidPairingCode:"This pairing code is invalid.",agentLinkClose:"Close",agentLinkApprovalMismatch:"The connection request changed after you approved it. Review the Agent and try again.",guestAgentsDisabled:"The room owner has not enabled guest Agents.",guestAgentSettings:"Guest Agent connections",allowGuestAgents:"Allow members to bring their own Agents",maxGuestAgentsPerMember:"Maximum Agents per member",ownerApprovalHint:"Every Agent still requires explicit room-owner approval.",allowRemoteWorkspaceAccess:"Allow remote Agents to read and write the group workspace",remoteWorkspaceAccessHint:"When enabled, approved remote Agents receive short-lived access for each run. Sensitive files and paths outside the room workspace remain blocked.",agentPairingRequestTitle:"Agent connection request",agentPairingRequestDescription:"{user} wants to connect an Agent from {origin}.",approveAgent:"Approve Agent",rejectAgent:"Reject",agentPairingApproved:"Agent connection approved",agentPairingRejected:"Agent connection rejected",title:"Group Chat",refactorNoticeTitle:"Group Chat Upgrade",refactorNoticeMessage:"Group chat has undergone a major redesign. If a room can no longer send messages, please create a new room.",emptyState:"Start a group conversation",createRoom:"Create Room",joinByCode:"Join by Code",shareTitle:"Join the conversation",shareSubtitle:"Enter the invite code to join. No account sign-in is required.",shareCodeHint:"This invite only grants access to its group chat room.",shareInvalidCode:"This invite code is invalid or has been updated. Ask the person who shared it for a new link.",shareJoining:"Joining group chat…",shareNameSubtitle:"Choose a name before entering the room.",shareNameConflict:"That name is already in use in this room. Choose another name.",shareNameReserved:"That name is reserved. Choose another name.",shareEnterRoom:"Enter room",roomName:"Room Name",roomNamePlaceholder:"Enter room name",inviteCode:"Invite Code",inviteCodeSettings:"Invite code settings",inviteCodePlaceholder:"Enter a new invite code",generateInviteCode:"Generate invite code",inviteCodeRotateHint:"Updating the invite code invalidates the previous code for new joins.",inviteCodeUpdated:"Invite code updated",inviteCodeUpdateFailed:"Failed to update invite code",autoGenerate:"Auto-generate",noRooms:"No rooms yet",localRooms:"Local",remoteRooms:"Remote",remoteRoomOffline:"The remote connection is offline.",renameRemoteRoom:"Rename remote room",renameRemoteRoomHint:"This changes only how the room is shown on this device.",remoteRoomRenamed:"Remote room display name updated",remoteRoomRenameFailed:"Failed to update the remote room display name",leaveRemoteRoom:"Leave room",leaveRemoteRoomConfirm:"Leave “{name}”? All Agents connected from this device will be removed from the remote room, and its local connection records will be deleted.",remoteRoomLeft:"Left remote room",remoteRoomLeaveFailed:"Failed to leave the remote room",remoteRoomLeavePartial:"Local records were removed, but {count} remote Agent connection(s) could not be notified because the remote room was offline.",selectOrCreate:"Select or create a room to start chatting",agents:"Agents",allAgents:"All Agents",addAgent:"Add Agent",agentType:"Agent",agentTypes:{hermes:"Hermes",ekko:"Ekko",codex:"Codex",claude:"Claude"},selectProfile:"Select a profile",agentAdded:"Agent added",selectRoomFirst:"Please select a room first",agentAlreadyInRoom:"Agent already in this room",agentAddFailedCount:"{count} agent(s) were not added: {details}",editAgentTitle:"Edit {name}",removeMember:"Remove",memberRemoved:"{name} was removed from the room",memberRemovedNotice:"The room owner removed you from this room. You can enter again while the invite remains valid.",noAgents:"No agents in this room",members:"{count} members",roomCreated:"Room created",roomDeleted:"Room deleted",roomCloned:"Room cloned",cloneRoom:"Clone room",copyRoomLink:"Copy Room Link",manualCopyRoomLinkHint:"The browser could not copy automatically. Select the link and copy it manually.",deleteRoomConfirm:"Delete this room?",clearContext:"Clear context",clearContextConfirm:"Clear this room context? Messages and compression snapshots will be removed, but agents and members stay.",contextCleared:"Context cleared",you:"You",joined:"Joined room",joinFailed:"Failed to join room",inputPlaceholder:"Type a message... (Enter to send)",messageDisplayLimit:"Group chat displays up to 600 messages",enterCode:"Enter invite code",yourName:"Your Name",yourNamePlaceholder:"Enter your display name",yourDescription:"Description (optional)",yourDescriptionPlaceholder:"Tell others who you are...",agentName:"Agent Name",agentNamePlaceholder:"Custom name (leave empty to use profile name)",agentDesc:"Agent Description",agentDescPlaceholder:"Describe what this agent does...",agentReplying:"is replying...",agentCompressing:"is compressing context...",compressionSettings:"Compression Settings",triggerTokens:"Trigger Tokens",triggerTokensDesc:"Token threshold to trigger context compression",maxHistoryTokens:"Max History Tokens",maxHistoryTokensDesc:"Maximum tokens for compressed context sent to LLM",tailMessageCount:"Tail Message Count",tailMessageCountDesc:"Number of recent messages to keep verbatim after compression",compressionConfig:"Compression Config",compressionSaved:"Compression config saved",roomSettings:"Room Settings",saveCompression:"Save compression",compressNow:"Compress Now",compressingInProgress:"Compression in progress, please wait",summarySettings:"Rolling Summary",summarySettingsDesc:"A clean Ekko Agent updates the shared room summary after the configured number of completed human turns.",summaryProvider:"Summary Provider",summaryProviderPlaceholder:"Select a provider",summaryModel:"Summary Model",summaryModelPlaceholder:"Select a model",summaryApiMode:"API Mode",summaryEveryTurns:"Summarize Every N Turns",summaryEveryTurnsDesc:"One turn is one human message. Agent runs wait for the room summary boundary to be committed.",summaryConfigSaved:"Summary settings saved",summaryConfigurationRequired:"This room has no summarizer yet. Select a profile, provider, model, and API mode, then save.",summaryConfigurationOwnerRequired:"This room has no summarizer yet. Ask a room administrator to configure it before sending messages.",saveSummaryConfig:"Save summary settings",currentSummary:"Current Summary",summaryStatus:{idle:"Pending",summarizing:"Summarizing",success:"Succeeded",failed:"Failed"},summaryUpdatedAt:"Last updated",summarizedTurns:"Summarized turns",summaryAnchor:"Summary anchor",summaryMessagesAbove:"Messages above summarized",summaryNoAnchor:"No anchor yet",summaryContent:"Summary content",summaryEmpty:"No summary yet",summaryEditKeepsAnchor:"Editing the summary changes its text only and keeps the current anchor.",saveSummary:"Save summary",summaryUpdated:"Summary updated",summaryNever:"Never",summaryLoadFailed:"Failed to load room summary"},usage:{title:"Usage Statistics",refresh:"Refresh",totalTokens:"Total Tokens",inputTokens:"Input",outputTokens:"Output",totalSessions:"Total Sessions",avgPerDay:"~{n}/day avg",estimatedCost:"Est. Cost",cacheHitRate:"Cache Hit Rate",modelBreakdown:"Model Breakdown",agentBreakdown:"Agent Breakdown",agents:{hermes:"Hermes Agent",claudeCode:"Claude Code",codex:"Codex",ekkoAgent:"Ekko Agent",unknown:"Unknown"},dailyTrend:"Daily Usage",date:"Date",tokens:"Tokens",cache:"Cache",cacheRead:"Cache Read",cacheWrite:"Cache Write",sessions:"Sessions",cost:"Cost",noData:"No usage data"},skillsUsage:{title:"Skills Usage",subtitle:"Track skill loads and edits from Hermes sessions",refresh:"Refresh",periodSelector:"Skill usage period",periodLabel:"{days}d",summary:"Summary",totalActions:"Actions",loads:"Loads",edits:"Edits",distinctSkills:"Skills",topSkills:"Top Skills",dailyTrend:"Daily Trend",periodSummary:"Last {days} days",skill:"Skill",share:"Share",lastUsed:"Last Used",noData:"No skill usage data",loadFailed:"Failed to load skill usage",otherSkills:"Other skills"},files:{title:"Files",fileTree:"File Tree",tree:"Directory Tree",list:"File List",breadcrumbRoot:"Home",newFile:"New File",newFolder:"New Folder",upload:"Upload",refresh:"Refresh",open:"Open",edit:"Edit",preview:"Preview",download:"Download",copyPath:"Copy Path",attachToChat:"Add to Chat",attachFailed:"Failed to add file to chat",rename:"Rename",delete:"Delete",name:"Name",size:"Size",modified:"Modified",actions:"Actions",emptyDir:"Empty directory",loading:"Loading...",confirmDelete:'Are you sure you want to delete "{name}"?',confirmDeleteDir:'Are you sure you want to delete directory "{name}" and all its contents?',deleteFailed:"Delete failed",deleted:"Deleted",renameTo:"Rename to",newFileName:"File name",newFolderName:"Folder name",created:"Created",createFailed:"Create failed",renamed:"Renamed",renameFailed:"Rename failed",uploadSuccess:"Uploaded {count} file(s)",uploadFailed:"Upload failed",saveFailed:"Save failed",saved:"Saved",unsavedChanges:"You have unsaved changes. Discard?",pathCopied:"Path copied",fileTooLarge:"File too large (max 10MB)",permissionDenied:"Cannot modify protected file",notFound:"File or directory not found",backendError:"File operation failed",dragDropHint:"Drag files here to upload",closeEditor:"Close Editor",closePreview:"Close",saveFile:"Save",previewMode:"Preview",sourceMode:"Source",tableMode:"Table",worksheet:"Worksheet",htmlPreviewTitle:"Sandboxed HTML preview",previewLoading:"Loading preview...",previewFailed:"Preview unavailable",previewMimeMismatch:"The file type did not match the requested preview format.",downloadInstead:"Download instead",previousPage:"Previous",nextPage:"Next",pageStatus:"Page {page} of {total}",zoom:"Zoom",pdfPageLimit:"Preview is limited to the first {count} pages.",tableTruncated:"The preview was truncated to keep the interface responsive. Download the file to inspect all rows and columns."},download:{downloading:"Downloading...",downloadFailed:"Download failed",fileNotFound:"File not found or deleted",fileTooLarge:"File too large (exceeds limit)",backendError:"File read failed, remote environment may be unavailable",backendTimeout:"File read timed out",unsupportedBackend:"Current terminal backend does not support file download",invalidPath:"Invalid file path",contentDisplay:"Content display",download:"Download",downloadFile:"Download file"},changelog:{new_0_6_40_1:"This release covers all 40 PRs merged after v0.6.39, spanning secure remote Group Chat, local speech recognition, Workflow scheduling, global approvals, Chat Run webhooks, MCU, and Coding Agent reliability",new_0_6_40_2:"Group Chat adds secure shared rooms and remote Agents, stabilizes Agent handoff, presence, and revocation, preserves offline owner avatars, and offers manual room-link copy when clipboard APIs are unavailable (#2408, #2410, #2411, #2415, #2423)",new_0_6_40_3:"Remote Agents can transfer files and upload to cloud workspaces. Requests from non-owners now enforce tighter workspace, sensitive-information, and private-memory boundaries, with corrected ownership and approval routing (#2413, #2430, #2433, #2435)",new_0_6_40_4:"Group Chat stops migrating legacy Agent Links and separates collapsible local and remote room lists, with local aliases for remote rooms, share-page navigation, and complete leave cleanup (#2424, #2459)",new_0_6_40_5:"Group Chat keeps history without automatic pruning, safely persists Tool results containing mentions with bounded message IDs, and fixes orphaned tools, approval alignment and routing, plus event-loop starvation during token accounting (#2390, #2420, #2426, #2427, #2429, #2445)",new_0_6_40_6:"Recent-session and Group Chat activity feedback is more immediate, and the Tool panel expands with a smooth animation (#2389, #2414)",new_0_6_40_7:"Global approvals can adopt existing prompts, show clearer command previews, and send system notifications for pending actions (#2406, #2425, #2432)",new_0_6_40_8:"New sherpa-onnx Chinese-English local streaming STT preserves final words with trailing silence and uses Electron-compatible audio buffers on macOS and Windows (#2447, #2448, #2461)",new_0_6_40_9:"Workflow adds durable scheduled runs and a complete schedule-management UI for creating, editing, enabling, disabling, and deleting schedules (#2434, #2441)",new_0_6_40_10:"Chat Run lifecycle webhooks arrive while the unused legacy endpoint is removed, and the server gains a lightweight liveness endpoint (#2422, #2452, #2453)",new_0_6_40_11:"MCU can select between Ekko and Hermes Agent runtimes, while Global Agent avatars and MCU status indicators now resolve accurately (#2438, #2442)",new_0_6_40_12:"Coding Agent now requires an execution identity and fixes Windows run-persistence isolation, MCP timeouts, cross-model reasoning replay, context-usage estimates, and duplicate Studio guidance (#2387, #2392, #2395, #2396, #2398, #2416)",new_0_6_40_13:"MoA presets expose per-model reasoning effort, and image generation disables Responses storage to avoid unnecessary remote retention (#2439, #2449)",new_0_6_39_1:"Ekko Agent now initializes explicitly, runs bounded Node.js or Python code behind tool approvals, and can pause foreground runs for text or multiple-choice clarification before resuming (#2362, #2368)",new_0_6_39_2:"Group Chat waits for room-join acknowledgement before sending, fixing intermittent “Not in room” errors around reconnects. Typing is now a throttled heartbeat shown only as a text-free breathing light on other members’ avatars (#2373)",new_0_6_39_3:"Coding Agent tool events in Single Chat and Group Chat now follow the native CLI lifecycle and emit one start after arguments complete, removing duplicate or stranded tool cards and one-character-at-a-time tool JSON lag in large rooms (#2366, #2372)",new_0_6_39_4:"Coding Agent prompts now travel through stdin, preserving multiline and image input while avoiding Windows command-length limits. Group Chat also no longer interrupts active Codex, Claude Code, or Ekko work after a fixed two minutes (#2354, #2357)",new_0_6_39_5:"Codex now treats native JSONL and process exit as authoritative across recoverable Provider proxy disconnects, preventing completed work from being reported as a Group Chat failure (#2375)",new_0_6_39_6:"Version Management validates Runtime completeness and shows desktop fallback reasons. Invalid Runtimes cannot be activated, and Web UI download or switching controls are hidden because updates continue through the desktop installer (#2353)",new_0_6_39_7:"Group Chat run headers now keep only the Agent name, removing repeated descriptions for cleaner message groups (#2352)",new_0_6_39_8:"ESP32-C3 remote connections now keep Socket.IO alive during discovery, reuse bounded voice buffers, reconnect with backoff, and preserve login across transient Studio disconnects, making remote scans and voice turns faster and more reliable (#2383)",new_0_6_38_1:"Windows desktop startup now repairs invalid relative Python homes left in cached Hermes Runtime environments by Agent updates, restoring CLI, logs, and Gateway after an update, Runtime switch, or storage migration",new_0_6_38_2:"The website compatibility catalog recognizes Hermes 0.19.0 again so matching desktop downloads and compatibility checks remain available (#2348)",new_0_6_37_1:"The headline of this 14-PR release is a complete Group Chat rebuild: every Agent can independently choose its Profile, provider, model, API mode, reasoning effort, identity, and workspace (#2334)",new_0_6_37_2:"Group rooms now start fresh isolated runs, keep each reply together with its reasoning and tools, and use a shared editable rolling summary with status, boundaries, Agent mentions, room and workspace drawers, and legacy migration guidance. Voice autoplay prepares different Profile TTS jobs ahead, keeps synthesis single-flight within the same Profile, and plays FIFO so new replies never replace audio already playing (#2334)",new_0_6_37_3:"MiniMax Coding Plan OAuth supports Global and China regions, while authorized Codex, xAI, Anthropic, Nous, and MiniMax credentials now refresh through the persistent Runtime Bridge (#2337)",new_0_6_37_4:"ESP32-C3 v1 and v2 gain optional automatic listening with local VAD, pre-roll audio, silence completion, playback suppression, and preserved push-to-talk controls (#2338)",new_0_6_37_5:"MCU Global Agent now uses concise Ekko voice mode, can delegate safe background work, preserves session history and workspaces, and no longer forwards oversized tool payloads (#2326)",new_0_6_37_6:"Custom and OpenAI-compatible TTS automatically retry provider-supported audio formats and convert non-MP3 output for Hermes playback (#2328)",new_0_6_37_7:"Profile export and import now allow up to ten minutes, surface actionable timeout errors, isolate concurrent archives, sanitize filenames, and clean temporary files (#2310, #2324)",new_0_6_37_8:"Hermes Agent Bridge now applies model-specific reasoning defaults while preserving explicit per-run overrides and the legacy fallback (#2325)",new_0_6_37_9:"Version Management reports the actual installed Hermes Agent version separately from the Runtime path and clarifies CLI update scope and shutdown requirements (#2323)",new_0_6_37_10:"Workspace file trees use tighter indentation so deeply nested names remain visible (#2340)",new_0_6_37_11:"Desktop now targets Hermes Agent 0.20.0, builds from pinned source, pins portable Node and npm, accepts regenerated Windows launchers, supports updates without system Python, and keeps the managed gateway hidden (#2321, #2344)",new_0_6_37_12:"Windows Runtime storage migration now handles update-generated links without administrator privileges, rebases Python, supports Unicode custom paths, and refreshes CLI and MCP shims on the first restart (#2345)",new_0_6_37_13:"macOS desktop signing now uses an explicit temporary keychain compatible with strict macOS 26 runners for both architectures (#2315)",new_0_6_36_1:"This release covers all 28 PRs merged after 0.6.35, spanning voice, Arabic and RTL, App Relay, Agent reliability, chat UX, Kanban, Journey, MCU subtitles, and Ekko request logging",new_0_6_36_2:"Voice settings are unified in Models for Hermes-native and Web UI providers; Custom TTS supports voice selection, and Edge TTS accepts any voice ID with Arabic options (#2260, #2265, #2267)",new_0_6_36_3:"Arabic and end-to-end RTL support now cover document flow, Naive UI, chat, Group Chat, Workflow, overlays, drawers, per-block text direction, and corrected Profile wording (#2269, #2270, #2271, #2273, #2277, #2294, #2303)",new_0_6_36_4:"Active background delegations now keep their Agent Bridge sessions alive until work finishes, preventing idle cleanup from interrupting long-running tasks (#2254)",new_0_6_36_5:"Desktop Group Chat Agent lists are clickable again, and the main window can be resized down to 769 px without entering the mobile layout (#2259, #2263)",new_0_6_36_6:"Workspace diffs from Codex, Claude Code, and Ekko now appear only on the exact Assistant message that produced them across live, restored, and group chats (#2264)",new_0_6_36_7:"The English and Chinese READMEs now reflect the current product and CLI, while the obsolete version-pinned 0.6.12 website manual has been removed (#2268)",new_0_6_36_8:"An independent headless App Relay adds secure pairing and authenticated remote access to allowlisted local APIs and chat streaming without exposing Studio directly (#2275)",new_0_6_36_9:"Desktop Agent Browser can safely read long accessible text in bounded pages and activate controls whose snapshot reference resolves to visible text (#2278)",new_0_6_36_10:"Chat UX gains anchored Provider controls, message-based scroll restoration, a compact tool and terminal rail, full-size previews, and full-width workspace diffs (#2279, #2282, #2283, #2293)",new_0_6_36_11:"New Ekko sessions receive isolated, profile-scoped default workspaces while existing and explicitly selected workspaces remain unchanged (#2289)",new_0_6_36_12:"Memory and Skill approval results are now structured and serialized, preventing false success messages and concurrent writes within the same Profile (#2295)",new_0_6_36_13:"Kanban adds reliable task archiving and a pannable board, while Journey becomes a compact, deterministic Memory-to-Skill relationship map (#2296, #2297)",new_0_6_36_14:"Live reasoning remains stable across tool boundaries, is restored to the correct message or tool, and no longer creates empty subagent bubbles (#2299)",new_0_6_36_15:"MCU speech now carries synchronized, paginated GB2312 subtitles on ESP32-C3 v1 and v2 without disrupting audio playback (#2305)",new_0_6_36_16:"Ekko now writes one compact model.request log per model attempt, including context compression, and omits tool_choice whenever no tools are present (#2311)",new_0_6_35_1:"Ekko Agent persistent memory is now enabled in production, with profile-scoped SQLite storage, a 4,000-token automatic recall budget, improved full-store relevance search, and safer model request handling (#2246)",new_0_6_34_1:"This release covers all 21 PRs merged after 0.6.33, spanning per-user themes, Ekko and Coding Agent upgrades, desktop and browser improvements, automation, and reliability fixes",new_0_6_34_2:"Users can customize font size, text and accent colors, and workspace backgrounds with account-scoped persistence and consistent translucent surfaces; Windows chrome and Browser settings follow the theme, and Ekko browser commands now launch correctly on Windows (#2242, #2243, #2244)",new_0_6_34_3:"Ekko is available in production with on-demand skill discovery and multimodal input, while guarded skill evolution, profile-scoped logs, protocol persistence, and Responses reasoning summaries make it safer and more capable (#2215, #2236)",new_0_6_34_4:"Ekko memory adds deterministic structured kinds for preferences, relationships, habits, goals, and more; long conversations now use the shared snapshot-aware context compression lifecycle (#2229, #2230)",new_0_6_34_5:"Coding Agent runs preserve image inputs across Codex, Claude Code, and scoped provider protocols, truncate oversized Responses tool outputs, and isolate runtime configuration and late events by session (#2222, #2232, #2238)",new_0_6_34_6:"Hermes Workflow capability checks no longer reject valid targets without API-mode metadata, Kanban matches Hermes Agent 0.19 task semantics and previews, and Cron Run Now starts safely in the background with stricter creation validation (#2239, #2216, #2228)",new_0_6_34_7:"Desktop adds focused standalone chat windows, allows browser automation in password, payment, and file inputs, and preserves each human member name and description independently per Group Chat room (#2209, #2210, #2212)",new_0_6_34_8:"Session-scoped /yolo toggles approval bypass, Agent maximum turns no longer has a 200-turn UI cap, Markdown preserves straight ASCII quotes, and the pt-BR catalog restores missing diacritics (#2223, #2225, #2234, #2221)",new_0_6_34_9:"ESP32-C3 devices gain configurable connected standby that lowers idle power while preserving Wi-Fi, login, profile, and Socket.IO state, with immediate wake controls and persistent timeout settings (#2218)",new_0_6_33_1:"This release covers all 16 PRs merged after 0.6.32, spanning the desktop Agent Browser, Workflow run evidence and deadlines, file and chat interactions, Provider model refresh, and reliability fixes",new_0_6_33_2:"Desktop adds a visible multi-tab Agent Browser with isolated Profiles, proxy, storage, and download controls, encrypted persistent cookies, guarded Agent actions, and lazy MCP tool discovery (#2177, #2182)",new_0_6_33_3:"Single and Group Chat links and authenticated HTML previews open in the embedded browser; permission spacing, cross-platform navigation icons, and Windows sidebar/title-bar alignment are also refined (#2191, #2194, #2198)",new_0_6_33_4:"Workflow Runs preserve immutable launch-time visuals, expose one total Run or Rerun deadline with elapsed and remaining evidence, and present history and details as paged, consumption-aware views (#2171, #2173, #2180)",new_0_6_33_5:"Files can be pasted directly into single or group chats or attached from the workspace context menu; compact metadata columns leave more room for file names (#2175, #2176)",new_0_6_33_6:"Each configured Provider can refresh its model catalog independently, confirm removals, preserve unavailable defaults, and restore once; OAuth Providers, complete localization, and form autofill behavior are covered (#2115)",new_0_6_33_7:"Abort and pause status is isolated per chat session so background conversations cannot change the active stop control; Desktop text selections and inputs also gain native right-click actions (#2203, #2204)",new_0_6_33_8:"Desktop quit, update, and install flows use bounded graceful shutdown and force-stop remaining Agent Bridge, MCP, browser, and Web UI process trees only after cleanup deadlines (#2193)",new_0_6_33_9:"MCU voice sessions isolate foreground and background results, while MiniMax-compatible MCP tool names stay within provider length limits without breaking existing callers (#2181, #2169)",new_0_6_32_1:"This release covers all 14 PRs merged after 0.6.31, spanning session organization and compression, group chat, Workflow routing, Skill Bundles, Ekko memory, Hermes 0.19, and desktop chrome",new_0_6_32_2:"Group Chat mentions now work after CJK text, emoji, and punctuation, and room owners can view, generate, and rotate invite codes from room settings (#2133, #2141)",new_0_6_32_3:"Workflow preserves each Hermes Bridge run source across handoff and reattachment, while scoped Codex and Claude Code nodes can use launcher-supported protocols for valid API-key targets (#2137, #2154)",new_0_6_32_4:"Sessions gain global categories, more accurate Markdown-aware search ranking, and cursor-based compression that bounds history while remaining correct across edits, branches, and concurrent runs; the compression design is documented in full (#2139, #2143, #2145, #2146)",new_0_6_32_5:"Profile-scoped Skill Bundles can be created, browsed, run, and deleted directly from chat with clear visibility into their contained Skills (#2156)",new_0_6_32_6:"Ekko memory now uses one profile-isolated canonical model with revision-checked mutations, stronger source auditing, and stricter relevance filtering (#2159)",new_0_6_32_7:"Hermes 0.19 interim assistant messages are streamed and stored as distinct bubbles, and ordinary single chats can deliver durable background delegation results asynchronously (#2160)",new_0_6_32_8:"New desktop Runtime builds, fallback paths, and Windows CLI shims now default to Hermes Agent 0.19.0 (#2161)",new_0_6_32_9:"Desktop window controls are integrated into the page chrome: macOS traffic lights live in the sidebar, Windows controls sit above the main content, and Linux keeps native decorations (#2162)",new_0_6_32_10:"Developer documentation now supports both the current checkout and optional isolated Git worktrees (#2155)"}};export{e as default};
|
|
1
|
+
var e={browser:{title:"Browser",settings:"Browser Settings",desktopOnly:"The embedded browser is available only in Hermes Studio Desktop.",newTab:"New Tab",back:"Back",forward:"Forward",reload:"Reload",stop:"Stop",addressPlaceholder:"Search or enter an address",selectElement:"Select element",selectRegion:"Select region",annotationPlaceholder:"Describe what the Agent should inspect or change…",selectionData:"Browser selection data",annotationAdded:"Screenshot added to the chat composer",annotationCount:"{count} annotation(s)",annotationLabel:"Annotation {index}",clearAnnotations:"Clear annotations",finishAnnotation:"Done",agent:"Agent",agentControlling:"{agent} is controlling this tab",agentWaiting:"{agent} is waiting for your confirmation",takeOver:"Take over",tabCrashed:"This tab crashed.",recoverTab:"Reload tab",profiles:"Profiles",profileName:"Profile name",addProfile:"Add profile",currentProfile:"Active profile",switchProfile:"Switch profile",editProfile:"Edit profile",profileDirectory:"Profile data directory",downloadDirectory:"Download directory",profileRootDirectory:"Profile root directory",chooseProfileRootDirectory:"Choose an empty directory",profileRootDirectoryHint:"Choose an empty directory. Browser data will use {data}; downloads will use {download}.",proxy:"Proxy",proxyMode:"Proxy mode",proxyDirect:"Direct connection",proxySystem:"System proxy",proxyCustom:"Custom proxy",proxyServer:"Proxy server",proxyServerPlaceholder:"For example: http://127.0.0.1:7890 or socks5://127.0.0.1:1080",askBeforeDownload:"Ask where to save each file",downloadConflictPolicy:"Duplicate file names",uniquifyDownloads:"Create a unique file name",askOnConflict:"Ask when a file exists",downloads:"Downloads",downloadStateProgressing:"Downloading",downloadStateCompleted:"Completed",downloadStateCancelled:"Cancelled",downloadStateInterrupted:"Interrupted",downloadStateBlocked:"Blocked",permissions:"Permissions",permissionsHint:"Remote page permissions are denied by default and listed here for audit.",blocked:"Blocked",profileSwitchTitle:"Switch browser profile?",profileSwitchWarning:"{agents} Agent operation(s), {downloads} download(s), and {annotations} annotation(s) may be interrupted.",deleteProfileTitle:"Delete browser profile?",deleteProfileWarning:"Managed profile data will be moved to the system Trash. Custom directories are left untouched.",clearCache:"Clear cache",clearPermissionAudit:"Clear permission log",clearSiteData:"Clear site data",clearSiteDataWarning:"This signs the selected profile out of websites and clears cookies and local storage.",dataCleared:"Browser data cleared",loadFailed:"Failed to start the embedded browser"},login:{title:"Hermes Studio",description:"Enter your username and password to continue.",placeholder:"Access token",submit:"Login",tokenRequired:"Please enter your access token",invalidToken:"Invalid token",connectionFailed:"Cannot connect to server",passwordLogin:"Password",tokenLogin:"Token",usernamePlaceholder:"Username",passwordPlaceholder:"Password",defaultCredentialsHint:"Default username: admin. Default password: 123456.",credentialsRequired:"Please enter username and password",invalidCredentials:"Invalid username or password",tooManyAttempts:"Too many failed attempts, please try again later",lockResetHint:"If this is your server, clear the login lock with:",defaultLoginResetHint:"To reset the default admin password, run:",desktopLockResetHint:"Too many failed login attempts. Open the system tray menu and choose Reset Login to reset the password.",sessionExpired:"Login expired. Please sign in again.",accessDenied:"You do not have permission to access this resource.",passwordMismatch:"Passwords do not match",passwordTooShort:"Password must be at least 6 characters",setupSuccess:"Password login configured successfully",passwordChanged:"Password changed successfully",passwordRemoved:"Password login removed",setupPassword:"Set Up Password Login",changePassword:"Change Password",changeUsername:"Change Username",removePasswordLogin:"Remove",username:"Username",currentPassword:"Current Password",newPassword:"New Password",confirmPassword:"Confirm Password",newUsername:"New Username",usernameChanged:"Username changed successfully",usernameTooShort:"Username must be at least 2 characters",setupDescription:"Manage the username and password used to sign in.",removeConfirm:"Password login is required for user accounts.",passwordLoginNotConfigured:"Password login is not configured",passwordLoginConfigured:"Current account: {username}",defaultCredentialTitle:"Change the default account credentials",defaultCredentialMessage:"This account is still using the default username or password. To prevent unauthorized access, update the username and password as soon as possible.",defaultCredentialAction:"Update now",defaultCredentialLater:"Remind me later"},users:{title:"Account Management",description:"Create users, assign roles, and control which profiles regular admins can access.",create:"Create User",edit:"Edit User",username:"Username",role:"Role",statusLabel:"Status",profiles:"Accessible Profiles",profilesPlaceholder:"Select accessible profiles",allProfiles:"All profiles",noProfiles:"No profiles assigned",lastLogin:"Last Login",newPasswordOptional:"New Password (leave blank to keep)",loadFailed:"Failed to load users",deleteConfirm:"Delete this user?",enable:"Enable",disable:"Disable",roles:{superAdmin:"Super Admin",admin:"Admin"},status:{active:"Active",disabled:"Disabled"}},common:{loading:"Loading...",cancel:"Cancel",delete:"Delete",edit:"Edit",save:"Save",retry:"Retry",reset:"Reset",saved:"Saved",update:"Update",create:"Create",saveFailed:"Save failed",deleteFailed:"Delete failed",ok:"OK",copied:"Copied",copy:"Copy",noData:"No data",expired:"Expired",fetch:"Fetch",add:"Add",enable:"Enable",disable:"Disable",configured:"Configured",notConfigured:"Not configured",confirm:"Confirm",expand:"Expand",collapse:"Collapse",start:"Start",stop:"Stop"},mcp:{title:"MCP Servers",loadFailed:"Failed to load MCP servers",reloadAll:"Reload All",refresh:"Refresh",total:"Total",connected:"Connected",disconnected:"Disconnected",tools:"tools",tool:"Tools",searchPlaceholder:"Search servers...",addServer:"+ Add Server",zeroTools:"0 tools",loading:"Loading...",empty:"No MCP servers configured",reloaded:"Reloaded {server}",reloadedAll:"All MCP servers reloaded",reloadFailed:"Reload failed",serverAdded:'Server "{name}" added',addFailed:"Failed to add server",serverUpdated:'Server "{name}" updated',updateFailed:"Failed to update server",saveFailed:"Save failed",serverRemoved:'Removed "{name}"',enabled:"Enabled {name}",disabled:"Disabled {name}",connectedStatus:"Connected",disconnectedStatus:"Disconnected",disabledStatus:"Disabled",toolList:"Tool List",count:" ",more:"more",removeFailed:"Failed to remove server",testOk:"Test OK — {count} tools available",testEmpty:"Test returned no tools",testFailed:"Test failed",edit:"Edit",test:"Test",reload:"Reload",remove:"Remove",confirmRemove:'Remove server "{name}"?',cancel:"Cancel",add:"Add",save:"Save",addTitle:"Add MCP Server",editTitle:"Edit MCP Server",invalidJson:"Invalid JSON format",invalidYaml:"Invalid YAML format",invalidConfig:"Invalid configuration",invalidServerConfig:"Invalid server configuration",missingCommandOrUrl:"Must have command or url",manageTools:"Manage Tools",toolsVisibilityTitle:"Tools Visibility Management",fetchTools:"Fetch Tools List",fetchToolsFailed:"Failed to fetch tools list",toolsMode:"Mode:",toolsModeAll:"All",toolsModeInclude:"Include",toolsModeExclude:"Exclude",toolsListHeader:"Tool Name",toolsEmpty:"No tools available, please fetch tools list first",toolsSummaryAll:"{count} tools total, all enabled",toolsSummaryInclude:"{total} tools total, {count} selected",toolsSummaryExclude:"{total} tools total, {count} excluded",toolsVisibilitySaved:"Tools visibility saved",toolsSelectAll:"Select all",toolsClearSelection:"Clear selection",toolsExcludeAll:"Exclude all",toolsClearExcluded:"Clear excluded"},sidebar:{chat:"Chat",backToChat:"Back",search:"Search",apiRelay:"API Relay",history:"History",jobs:"Jobs",kanban:"Kanban",workflow:"Workflow",models:"Models",profiles:"Profiles",skills:"Skills",plugins:"Plugins",mcp:"MCP",petdex:"Pets",memory:"Memory",logs:"Logs",usage:"Usage",performance:"Performance",journey:"Journey",skillsUsage:"Skills Usage",channels:"Channels",gateways:"Gateways",terminal:"Terminal",browser:"Browser",singleChat:"Chat",globalAgent:"Global Agent",groupChat:"Group Chat",files:"Files",devices:"Devices",groupConversation:"Conversation",groupConversationShort:"Conv",groupPlatform:"Platform",groupAgent:"Agent",groupAgentShort:"Agent",groupSystem:"System",groupSystemShort:"Sys",groupMonitoring:"Monitoring",groupMonitoringShort:"Mon",groupTools:"Tools",groupToolsShort:"Tools",codingAgents:"Coding Agents",versionPreview:"Version Preview",theme:"Theme",settings:"Settings",connected:"Connected",disconnected:"Disconnected",collapse:"Collapse menu",expand:"Expand menu",updateTip:'Run "hermes-web-ui update" in terminal to update',updateVersion:"Upgrade to v{version}",reloadClientVersion:"Reload for v{version}",updating:"Updating...",updateSuccess:"Update successful. Please refresh the page shortly. If it does not start after a while, start it manually.",updateFailed:"Update failed",logout:"Sign Out",nodeVersionWarning:"Detected Node.js v{version}. Please upgrade to version 23 or later.",changelog:"Changelog",noChangelog:"No changelog available",versionManagement:"Version Management",updateAvailableLabel:"(New version)",dockerUpdateTitle:"Docker Update",dockerUpdateGuide:"In Docker environment, please pull the latest image and recreate the container to upgrade:",dockerUpdateNote:"Your data will persist after the container is recreated."},runtimeVersions:{title:"Version Management",runtimeTitle:"Hermes Runtime",currentHermesAgentVersion:"Current Hermes Agent version",activeRuntimeDirectory:"Active Runtime directory",cliUpdateDescription:"Hermes Runtime 0.19.1 and later can use the following command to update the bundled Hermes Agent only. It does not update the Hermes Studio desktop app or Web UI. Fully quit Hermes Studio before running:",webUiTitle:"Web UI",platform:"Platform",currentWebUi:"Current Web UI",activeVersion:"Active version",runtimeDirectory:"Runtime storage directory",chooseRuntimeDirectory:"Choose directory",resetRuntimeDirectory:"Use system default",runtimeDirectoryHint:"The current Runtime is copied and verified before local services start on the next restart. Old storage is retained, and future Runtime downloads are stored here.",runtimeDirectorySaved:"Runtime migration scheduled. Restart Hermes Studio to apply it.",runtimeMigrationPending:"Pending migration destination: {directory}",runtimeMigrationFailed:"Storage migration failed; the previous storage remains active",runtimeActivationFailed:"The selected Runtime could not start, so Hermes Studio used another installed version",active:"Active",installed:"Installed",download:"Download",downloadGithub:"GitHub Download",downloadCf:"Cloudflare Download",github:"GitHub",cf:"Cloudflare",useVersion:"Use on next restart",deleteVersion:"Delete",deleteRuntimeConfirm:"Delete Hermes Runtime {version}?",deleteWebUiConfirm:"Delete Web UI {version}?",deleteRuntimeSuccess:"Runtime deleted",deleteWebUiSuccess:"Web UI deleted",refresh:"Refresh",noVersions:"No versions available",remoteLoadFailed:"Failed to load remote versions",downloadTasks:"Download tasks",downloadStarted:"Download started",activateSuccess:"Version selection saved. Restart Hermes Studio to use it.",jobStatus:{queued:"Queued",running:"Running",completed:"Completed",failed:"Failed"},jobStageStatus:{queued:"Queued",resolve:"Resolving",download:"Downloading",verify:"Verifying",extract:"Extracting",install:"Installing",completed:"Completed",failed:"Failed"},jobStage:{queued:"Queued",download:"Downloading",resolveRuntime:"Resolving runtime package",verifyRuntime:"Verifying runtime archive",extractRuntime:"Extracting runtime archive",installRuntime:"Installing runtime",resolveWebUi:"Resolving Web UI package",verifyWebUi:"Verifying Web UI archive",extractWebUi:"Extracting Web UI archive",installWebUi:"Installing Web UI",completed:"Completed",failed:"Failed"}},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:"Remote",connected:"Connected",disconnected:"Disconnected",remoteConnect:"Remote connect",remoteConnected:"Remote connected",remoteConnectFailed:"Failed to connect remote",remoteDisconnect:"Disconnect",remoteDisconnected:"Remote disconnected",remoteDisconnectFailed:"Failed to disconnect remote",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:"Devices",count:"{count} devices",lastScanned:"Last scanned: {time}",refresh:"Refresh",empty:"No devices found",computer:"Computer",endpointLabel:"Endpoint",statusLabel:"Status",online:"Online",offline:"Offline",address:"Address",os:"OS",agentVersion:"Agent",webUiVersion:"Web UI",responseMs:"Latency",lastSeen:"Last seen",open:"Open",never:"Never",unknown:"Unknown",loadFailed:"Failed to load devices",scanFailed:"Failed to scan devices",updateFailed:"Failed to update device",duplicateRequest:"A pending pairing request already exists",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:"Processed",unprocessed:"Unprocessed",deleteHistory:"Delete record",deleteHistoryConfirm:"Delete this request record and revoke this device connection access?",requests:"Requests",requestsWithCount:"Requests ({count})",noRequests:"No requests",requestPairing:"Request pairing",paired:"Paired",approve:"Approve",reject:"Reject",block:"Block",unblock:"Unblock",inboundStatus:{none:"Allowed to request",pending:"Pending",approved:"Approved",rejected:"Rejected",blocked:"Blocked"},outboundStatus:{none:"Unpaired",pending:"Requested",approved:"Paired",rejected:"Rejected",blocked:"Blocked"},endpoint:{web:"Web",desktop:"Desktop",custom:"Custom"}},performance:{title:"Performance",subtitle:"Inspect system resources, bridge broker, workers, and active sessions",refresh:"Refresh",autoRefreshOn:"Auto refresh",autoRefreshOff:"Manual refresh",loadFailed:"Failed to load performance metrics",systemCpu:"System CPU",systemMemory:"System Memory",activeSessions:"Active Sessions",runningSessions:"Running {count}",workers:"Workers",totalWorkerMemory:"Worker memory",processes:"Processes",uptime:"Uptime",running:"Running",stopped:"Stopped",workerMemory:"Worker Memory",lastUpdated:"Updated",profile:"Profile",memory:"Memory",sessions:"Sessions",runningActiveSessions:"Running / Active",lastUsed:"Last Used",status:"Status",noWorkers:"No workers",sessionsByProfile:"Sessions by Profile",noActiveSessions:"No active sessions"},journey:{title:"Learning Journey",play:"Play journey",pause:"Pause journey",refresh:"Refresh",categorySelection:"Category selection",nodeKinds:"Node types",description:"Description",canvasInstructions:"Use arrow keys to preview nodes, Enter to open details, and Escape to clear the selection.",loadFailed:"Failed to load learning journey",nodes:"Nodes",edges:"Edges",skills:"Skills",memories:"Memories",clusters:"Clusters",profile:"Profile",source:"Source",learnedSkills:"Learned skills",memorySkillEdges:"Memory links",allKinds:"All kinds",allCategories:"All categories",searchPlaceholder:"Search nodes",noClusters:"No clusters",noNodes:"No journey nodes",noCategory:"Uncategorized",category:"Category",useCount:"Use count",createdBy:"Created by",timestamp:"Time",pinned:"Pinned"},drawer:{terminal:"Terminal",files:"Workspace"},subagent:{title:"Background task",noGoal:"Untitled background task",open:"Open live background task output",close:"Close background task output",waiting:"Waiting for live output...",tool:"Tool",tools:"{count} tools",tokens:"{input} in · {output} out",started:"Started",running:"Running",completed:"Completed",failed:"Failed",cancelled:"Cancelled",interrupted:"Interrupted"},realtimeVoice:{title:"Realtime Voice",mode:"Voice mode",open:"Open realtime voice",back:"Back to chat",connected:"Voice link ready",turnMode:"Realtime preview · turn mode",browserStt:"Browser",browserTts:"Browser",untitledSession:"Untitled conversation",sessionMissing:"The conversation is unavailable.",backendStreamRequired:"Realtime voice on mobile and desktop requires a configured backend speech-to-text provider.",networkUnavailableNoFallback:"Browser speech recognition is offline and no usable fallback STT is currently configured.",liveTranscript:"Live transcript",transcriptPlaceholder:"Tap the voice core and start speaking",recentTurns:"Recent turns",you:"You",mute:"Mute output",unmute:"Unmute",finishTurn:"Finish turn",speak:"Start speaking",end:"End",status:{idle:"Ready",paused:"Microphone off",listening:"Listening",processing:"Transcribing",thinking:"{agent} is thinking",speaking:"{agent} is speaking",error:"Voice link interrupted"},hint:{idle:"Tap the center to begin a voice turn",paused:"Turn the microphone back on when you are ready",listening:"Pause naturally to send, or tap to finish",listeningManual:"Recording now. Tap the center again to stop and transcribe",processing:"Converting your voice into text",thinking:"Your message was sent to the current conversation",speaking:"You can interrupt at any time",error:"Tap the center to try again"}},chat:{contextRemaining:"remaining",contextClickToEdit:"Click to edit context length",contextEditTitle:"Edit Context Length",contextEditDesc:"Set context length limit for current model (in tokens)",contextEditPlaceholder:"Enter context length",contextEditHint:"Common values: 256k (Hermes default), 128k (GPT-4), 32k (GPT-3.5)",contextEditSave:"Save",contextEditCancel:"Cancel",contextEditInvalid:"Please enter a valid context length",contextEditSuccess:"Context length updated",contextEditFailed:"Update failed",emptyState:"Start a conversation with Hermes Agent",emptyStateAgent:"Start a conversation with {agent}",viewOlderInHistory:"View earlier messages in History",scrollToBottom:"Scroll to bottom",forkedFrom:"Forked from",previousLastMessage:"Previous last message",cliEmptyState:"Start a CLI chat session",outlineTitle:"Conversation Outline",outlineEmpty:"No conversation content",outlineUserQuestion:"User question",inputPlaceholder:"Type a message... (Enter to send, Shift+Enter for new line)",inputHeightResizeHint:"Drag to resize the chat input. Double-click to reset.",slashCommandArgs:{message:"<message>",title:"<title>",text:"<text>"},slashCommands:{usage:"Calculate current session usage",status:"Show session status and queue",yolo:"Toggle session YOLO mode and skip dangerous command approvals",abort:"Stop the active bridge run",queue:"Queue a message behind the active run",learn:"Learn a reusable skill from described sources",plan:"Write a markdown implementation plan",moa:"Run one prompt through the default model ensemble",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:"Clear the current display",clearHistory:"Delete this session’s stored message history",title:"Rename this session",compress:"Run context compression while idle",fork:"Fork this idle session into a new linked conversation",steer:"Send steering text to the active bridge run",destroy:"Release the bridge agent for this session",reloadMcp:"Reload MCP servers",reloadSkills:"Reload skill commands",bundles:"Browse skill bundles",bundlesCreate:"Create a skill bundle"},bundlePicker:{title:"Skill Bundles",create:"Create Bundle",searchPlaceholder:"Search bundles...",skillCount:"{count} skills",skillsLabel:"Skills",noSkills:"No skills configured",deleteBundle:"Delete {name}",deleteTitle:"Delete Bundle",deleteConfirm:"Delete “{name}” from this Profile? This cannot be undone.",deleteFailed:"Failed to delete bundle",deleted:"Bundle deleted",noBundles:"No bundles yet. Create one to combine multiple skills.",noMatch:"No matching bundles"},bundleCreator:{title:"Create Skill Bundle",name:"Name",namePlaceholder:"e.g. PR Review Team",nameHint:"Use English letters, numbers, spaces, hyphens, or underscores.",description:"Description",descriptionPlaceholder:"What should this bundle be used for?",skills:"Skills",skillsPlaceholder:"Select one or more skills",nameRequired:"Enter a bundle name",nameInvalid:"Use an English name containing at least one letter",skillsRequired:"Select at least one skill",skillsLoadFailed:"Failed to load skills",createFailed:"Failed to create bundle",created:"Bundle created"},attachFiles:"Attach files",reasoningEffort:{tooltip:"Reasoning effort",defaultLabel:"Default",options:{default:"Default (config.yaml)",none:"None",minimal:"Minimal",low:"Low",medium:"Medium",high:"High",max:"Max",xhigh:"Extra high",ultra:"Ultra"}},autoPlaySpeech:"Auto-play voice",voiceInput:{startCapture:"Start voice capture",stopCaptureAndInsert:"Stop voice capture and place transcript in the input",cancelCapture:"Cancel voice dialogue",statusLabel:"Status: {status}",transcriptLabel:"Transcript: {text}",errorLabel:"Error: {error}",recentEvents:"Recent events",status:{idle:"Idle",capturing:"Capturing",transcribing:"Transcribing",sending:"Adding to input",error:"Error"},browserSpeechUnsupported:"Browser speech recognition is not supported in this browser.",browserSpeechFailed:"Browser speech recognition failed.",browserSpeechFailedWithReason:"Browser speech recognition failed: {error}.",microphoneUnsupported:"Microphone capture is not supported in this browser.",microphoneRecordingFailed:"Microphone recording failed."},showToolCalls:"Show tool calls",hideToolCalls:"Hide tool calls",messageQueue:"Message queue",removeQueuedMessage:"Remove queued message",stop:"Stop",start:"Start",stopGateway:"Stop Gateway",send:"Send",contextUsed:"Context used:",sessions:"Sessions",webUiSessions:"Sessions",allProfiles:"All profiles",profileMissingModelsTip:'Profile "{profile}" has no available provider or model for this session',sessionScopeHint:"Chat shows Web UI/API Server sessions only. CLI, Telegram, Discord, Cron, and other channel sessions are read-only in History.",openHistory:"Open History",hermesHistory:"Hermes History",historyScopeHint:"Read-only Hermes history sessions for the current profile, grouped by source.",noSessions:"No sessions",recent:"Recent",recentCount:"Recent session count",loadMoreSessions:"Load more sessions",searchTitle:"Search Sessions",searchSubtitle:"Search by title or message content",searchScope:"Search scope: Web UI local session database only. Read-only Hermes history sessions are not included.",searchHint:"Cmd/Ctrl+K",searchPlaceholder:"Search sessions...",searchEmpty:"Recent sessions",searchRecent:"Recent session",searchNoResults:"No sessions match your search",searchNoSnippet:"No snippet available",searchEnterHint:"Enter to open · Esc to close",searchFailed:"Failed to search sessions",newChat:"New Chat",category:"Category",uncategorized:"Uncategorized",categoryPlaceholder:"Select or create a category",categoryCreateHint:"Select a category, or type a new name and press Enter to create it.",categoryCreated:'Category "{name}" created',categoryCreateFailed:"Failed to create category",categoryLoadFailed:"Failed to load categories",moveToCategory:"Move to category",categoryUpdated:"Category updated",categoryUpdateFailed:"Failed to update category",renameCategory:"Rename category",deleteCategory:"Delete category",enterCategoryName:"Enter category name",confirmDeleteCategory:"Delete “{name}”? Its sessions will move to Uncategorized.",categoryRenamed:"Category renamed",categoryRenameFailed:"Failed to rename category",categoryDeleted:"Category deleted",categoryDeleteFailed:"Failed to delete category",agent:"Agent",approvalKicker:"Tool permission",toolResultUnavailable:"Execution interrupted; no tool result received",approvalCommand:"Command to run",approvalTitle:"Review tool call before running",approvalAgree:"Agree",approvalAllowOnce:"Allow once",approvalAllowSession:"Allow session",approvalAlways:"Always",approvalDeny:"Deny",clarifyKicker:"Agent needs clarification",clarifyTitle:"The agent has a question for you",clarifyPlaceholder:"Type your answer...",clarifySubmit:"Reply",clarifyDismiss:"Dismiss",newCliChat:"New CLI",deleteSession:"Delete this session?",sessionDeleted:"Session deleted",toggleBatchMode:"Batch selection",selectAll:"Select all",confirmBatchDelete:"Delete {count} selected sessions?",batchDeleteSuccess:"Deleted {count} sessions",batchDeletePartial:"{failed} sessions failed to delete",batchDeleteFailed:"Batch delete failed",importToWebUi:"Import to Web UI",importSessionSuccess:"Session imported to Web UI",importSessionAlreadyExists:"Session already exists in Web UI",importSessionFailed:"Failed to import session",rename:"Rename",archiveSession:"Archive",unarchiveSession:"Unarchive",pin:"Pin",unpin:"Unpin",pinned:"Pinned",chatMode:"Chat",liveMode:"Live",liveSessions:"Live Sessions",recentBadge:"Recent",linkedSessions:"{count} linked",noVisibleMessages:"No human-visible messages.",monitorRoleUser:"User",monitorRoleAssistant:"Assistant",copySessionLink:"Copy Session Link",openSessionInNewTab:"Open in new tab",openSessionInNewWindow:"Open in new window",sessionLinkCopied:"Session link copied",copySessionId:"Copy Session ID",export:"Export",exportFull:"Full Export (JSON)",exportCompressed:"Compressed Export (TXT)",exportCompressing:"Compressing context, please wait...",exportSuccess:"Session exported",exportFailed:"Export failed",renamed:"Renamed",renameFailed:"Rename failed",sessionArchived:"Session archived",archiveSessionFailed:"Failed to archive session",sessionUnarchived:"Session unarchived",unarchiveSessionFailed:"Failed to unarchive session",renameSession:"Rename Session",sessionNotFound:"Session not found",enterNewTitle:"Enter new title",workspace:"Workspace",workspaceDefault:"Default",workspaceDefaultTooltip:"This workspace is set as default and will be auto-filled for new chats",workspacePin:"Set as default workspace",workspaceUnpin:"Unset default workspace",workspaceRecent:"Recent",defaultWorkspace:"Default Workspace",more:"More",setWorkspace:"Set Workspace",setWorkspaceTitle:"Set Session Workspace",workspacePlaceholder:"Enter project path, e.g. /home/user/project",folderPickerEmpty:"(Empty)",folderPickerNoFolders:"No workspace folders",folderPickerSelected:"Selected:",workspaceSet:"Workspace set",workspaceSetFailed:"Failed to set workspace",setModel:"Set Model",setModelTitle:"Set Session Model",standardModels:"Standard models",moaPresets:"MoA combinations",noMoaPresets:"No available MoA combinations",modelType:"Model type",modelSet:"Model set",modelSwitching:"Switching model...",modelSetFailed:"Failed to set model",other:"Other",runFailed:"Run failed",error:"Error",tool:"Tool",arguments:"Arguments",result:"Result",workspaceChanges:"Workspace changes",changedFiles:"{files} files changed",changesThisTurn:"Changes this turn",diffUnavailable:"Diff unavailable",binaryFileDiffUnavailable:"Binary file diff unavailable",truncated:"... (truncated)",unchangedLines:"{count} unchanged lines",executionDuration:"Execution time",thinkingLabel:"Thinking",thinkingInProgress:"Thinking",thinkingShow:"Show thinking",thinkingHide:"Hide thinking",thinkingDuration:"Observed {duration}",thinkingChars:"{count} chars",copyBubble:"Copy message",copiedBubble:"Message copied",copyFailed:"Copy failed",referenceMessage:"Reference message",cancelReference:"Cancel reference",playSpeech:"Play voice",pauseSpeech:"Pause",resumeSpeech:"Resume",stopSpeech:"Stop",speechNotSupported:"Voice playback not supported in this browser"},workflow:{title:"Workflow",profile:"Profile",namePlaceholder:"Workflow name",canvasAriaLabel:"Workflow canvas",workspace:{title:"Select Workspace",select:"Select workspace",clear:"Clear workspace"},actions:{newWorkflow:"New Workflow",addNode:"Add Node",createWorkflowFirst:"Please create a workflow first",reset:"Reset",startExecution:"Start Execution",executionPending:"Workflow execution is not connected yet",executionStarted:"Workflow execution started",executionCompleted:"Workflow execution completed",executionFailed:"Workflow execution failed",rerunDownstreamKeepNode:"Keep this node and run downstream",rerunDownstreamClearNode:"Clear this node and run downstream",rerunDownstreamStarted:"Downstream rerun started",rerunFromNodeStarted:"Rerun from this node started",rerunFailed:"Workflow rerun failed",deleteNode:"Delete Node",deleteEdge:"Delete Connection",editEdge:"Edit Connection",undo:"Undo",importWorkflow:"Import Workflow",exportWorkflow:"Export Workflow",imported:"Workflow imported",exported:"Workflow exported",importFailed:"Workflow import failed",exportFailed:"Workflow export failed"},budget:{runTitle:"Choose Run time budget",rerunTitle:"Choose Rerun time budget",totalLabel:"Total Run budget",customMinutes:"Custom minutes",customPlaceholder:"Minutes",invalidCustom:"Custom Run budget must be from 0.1 to 1440 minutes",help:"This is one absolute deadline for the entire Run. Each node receives only the remaining time; loops do not reset it.",options:{unlimited:"No deadline",30:"30 minutes",60:"60 minutes",90:"90 minutes",custom:"Custom"},unlimitedSummary:"No deadline",unlimitedHelp:"This Run has no configured time deadline.",summary:"Budget {total} · elapsed {elapsed} · remaining {remaining}",deadline:"Deadline: {deadline}",nodeStartRemaining:"{remaining} remaining at node start"},schedule:{title:"Workflow schedules",manage:"Manage schedules",createTitle:"Create schedule",editTitle:"Edit schedule",create:"Create schedule",save:"Save schedule",edit:"Edit schedule",delete:"Delete schedule",deleteConfirm:"Delete this schedule?",deleted:"Schedule deleted",enable:"Enable schedule",disable:"Disable schedule",enabled:"Enabled",disabled:"Disabled",empty:"No schedules yet",cron:"Cron schedule",cronPlaceholder:"e.g. 0 9 * * * or {'@'}daily",timezone:"Timezone",timezonePlaceholder:"IANA timezone, e.g. Asia/Shanghai",initialInput:"Initial input",initialInputPlaceholder:"Optional input for every scheduled Run",startNodes:"Start nodes",startNodesPlaceholder:"Default workflow start nodes",timeout:"Total timeout (minutes)",timeoutPlaceholder:"No deadline",policies:"Concurrency: skip · Missed runs: skip",lastScheduled:"Last scheduled",nextRun:"Next run",lastRun:"Last Run",never:"Never",loadFailed:"Failed to load schedules",saveFailed:"Failed to save schedule",saved:"Schedule saved",deleteFailed:"Failed to delete schedule",required:"Cron schedule and timezone are required",reset:"Reset",presets:{hourly:"Hourly",daily:"Daily",weekly:"Weekly",monthly:"Monthly"}},evidence:{historyPage:"Run history",detailsPage:"Run details",backToRuns:"Back to run history",resultStatus:"Status",duration:"Duration",budgetLabel:"Budget",actualExecution:"Executed",otherJudgments:"Other judgments",loopEvents:"Loop events",evaluatedNotExecuted:"Evaluated, not executed",ariaLabel:"Workflow execution details",title:"Execution details",count:"{count} items",intro:"Shows path decisions, loop passes, and exceptional nodes for this run.",empty:"No execution details",loadFailed:"Failed to load persisted execution details",summaryTitle:"Run outcome",blockedAt:"Blocked at {gate}",actualPath:"Actual path",noActualPath:"No path was taken",pathChecks:"Path checks",selectedPaths:"Used paths",otherPaths:"Other decisions and events",selectedCount:"{count} used",otherCount:"{count} not used",eventCount:"{count} events",showOtherPaths:"Show other details ({count})",hideOtherPaths:"Hide other details",runDetails:"Run details",actualPathSteps:"Actual path steps",nodeBudgetDetails:"Time budget details",condition:"Condition",conditionMatched:"Matched",conditionNotMatched:"Did not match",sourceOutcome:"Node result",sourceReturned:"Returned normally",sourceFailed:"Execution failed",sourceSkippedStatus:"Not run",checkedData:"Checked data",entireReplyText:"Entire reply text",errorText:"Error text",jsonFieldValue:"One JSON field value",advancedPathValue:"Advanced path value",comparison:"Comparison",textToFind:"Text to find",expectedFieldValue:"Expected field value",parsedBusinessDecision:"Parsed business decision",failedGateLabel:"Failed step (value of failed_gate)",failedGateValue:"Failed step (value of failed_gate): {gate}",decisions:{blocked:"Blocked",released:"Published",verified:"Verified",skipped:"No action needed"},node:"Exceptional node",edge:"Path",loop:"Loop",unknownNode:"Unknown node",pathTitle:"{source} → {target}",loopPass:"Loop pass {count}",exceptionalNode:"This node did not complete normally.",loopPassNamed:"{node} · pass {count}",technical:"Technical information",recordId:"Record ID",sequence:"Sequence",rawStatus:"Raw status",rawRoute:"Route",rawReason:"Reason",iterationPath:"Iteration path",expectedValue:"Expected result",actualValue:"Actual upstream result",judgmentDetails:"Connection judgment",connectionResult:"Connection result",appliesWhen:"Used when",explanation:"Explanation",technicalStatus:{pathUsed:"This connection was used",pathNotUsed:"This connection was not used"},technicalRoute:{success:"Only when the upstream node returns normally",failure:"Only when the upstream node execution fails",always:"Regardless of whether the upstream node succeeds or fails"},technicalReason:{conditionNotMatched:"The reply did not satisfy this connection’s condition."},statuses:{taken:"Used",notTaken:"Not used",evaluationFailed:"Evaluation failed",timedOut:"Timed out",blocked:"Blocked"},routes:{success:"Continued after success",failure:"Continued after failure",always:"Continued regardless of outcome"},reasons:{evaluationFailed:"Route evaluation failed",conditionNotMatched:"Condition did not match",iterationLimitReached:"Maximum loop passes reached",routeNotMatched:"Route did not match",pathSelected:"This path was selected.",pathEvaluatedNotUsed:"This connection was evaluated as a candidate, but no target node consumed it.",sourceSkipped:"The source node did not run, so this path was not part of this run.",failureRouteAfterSuccess:"The source node returned normally; this path is only used when node execution fails.",successRouteAfterFailure:"The source node failed; this path is only used when it returns normally.",businessBlocked:"{source} stopped the workflow ({decision}): {reason}. Therefore, “{target}” was not run.",businessBlockedWithCondition:"{source} stopped the workflow ({decision}): {reason}. Continuing required “{expected}”, but the upstream result was “{actual}”, so “{target}” was not run.",conditionMismatchDetail:"Continuing required “{expected}”, but the upstream result was “{actual}”, so “{target}” was not run."},loopOutcomes:{continued:"Condition matched; continued to the next pass",iterationLimitReached:"Stopped at the maximum pass count",conditionNotMatched:"Stopped because the condition did not match",finished:"Loop finished"}},edgeEditor:{title:"Edit connection",guideIntro:"First choose the required source result. Then either skip reply inspection, inspect the entire text literally, or compare one parsed JSON field value.",connectionSummary:"{source} → {target}",selfLoopDescription:"{node} will run itself again.",continueAfter:"Continue after",optionalCheck:"Optional content check",runTarget:"Then",runTargetAction:"Run {target}",noContentCheck:"Do not inspect the reply",sourceResultStep:"1. Source node result",replyDataStep:"2. Reply data to check",nextStep:"3. Then",replyDataQuestion:"Which reply data should be checked?",requiredSourceResult:"Required source result",loopSummary:"Returns to {target}",loopScope:"Loop nodes: {nodes}",historyLabel:"History label (optional)",advancedSettings:"Advanced settings",historyNode:"History node",historyNodePlaceholder:"Select a node name",continueWhen:"Continue when",compareUsing:"Compare using",expectedType:"Interpret expected value as",expectedValue:"Expected value",routeChoices:{success:"Source returned normally",failure:"Source execution failed",always:"Either result"},operatorChoices:{equals:"Equals",not_equals:"Does not equal",contains:"Contains",not_contains:"Does not contain",exists:"Exists",not_exists:"Does not exist",greater_than:"Greater than",greater_than_or_equal:"Greater than or equal",less_than:"Less than",less_than_or_equal:"Less than or equal",in:"Is in list",not_in:"Is not in list"},loopMissingForwardPath:"This return connection has no forward path to loop over.",loopNotNatural:"This loop has another entry path, so it would not repeat predictably.",loopDuplicateScope:"Two return connections define the same loop nodes.",loopPartialOverlap:"Loops may be separate or fully nested, but cannot partially overlap.",loopDuplicateHistoryLabel:"Each loop history label must be unique.",route:"Route",routes:{success:"Success only (success)",failure:"Failure only (failure)",always:"Always (always)"},routeHelp:"First match the source result. success: source succeeded; failure: source failed; always: either result. A condition, when present, must also match.",routeExample:"Example: use success for the normal path, failure for error handling, and always for cleanup.",conditionPath:"What should this connection check?",conditionPathPlaceholder:"Advanced path, for example output",conditionPathOptions:{routeOnly:"Do not inspect the reply",outputRecommended:"Entire successful reply text (output, recommended)",output:"Entire successful reply text (output)",outputJson:"One JSON field value (outputJson.*)",errorRecommended:"Entire failure error text (error, recommended)",error:"Entire failure error text (error)",custom:"Advanced data path"},structuredOutputPathPlaceholder:"JSON field path, for example outputJson.route_token",structuredOutputHelp:"Parses a complete JSON reply or exactly one fenced json block. Missing, malformed, or multiple JSON blocks leave outputJson unavailable, so the condition does not match.",conditionPathHelp:{success:"For success, output is recommended. Choose Route only when no content check is needed.",failure:"For failure, error is recommended. Choose Route only when no error-text check is needed.",always:"Choose output for successful replies or error for failures. Route only skips content checks."},operator:"Operator",operators:{equals:"Equals (equals)",not_equals:"Does not equal (not_equals)",contains:"Contains (contains)",not_contains:"Does not contain (not_contains)",exists:"Exists (exists)",not_exists:"Does not exist (not_exists)",greater_than:"Greater than (greater_than)",greater_than_or_equal:"Greater than or equal (greater_than_or_equal)",less_than:"Less than (less_than)",less_than_or_equal:"Less than or equal (less_than_or_equal)",in:"Is in list (in)",not_in:"Is not in list (not_in)"},operatorHelp:{equals:'Exactly equal, including type. Example: output equals "APPROVED".',not_equals:'Not exactly equal, including type. Example: output not_equals "REJECTED".',contains:'Text contains text, or an array contains one item. Example: output contains "PASS".',not_contains:"Text does not contain text, or an array does not contain one item.",exists:"Matches when the path exists; no Value is needed.",not_exists:"Matches when the path does not exist; no Value is needed.",greater_than:"Both actual value and Value must be JSON numbers; matches when actual is greater.",greater_than_or_equal:"Both sides must be JSON numbers; matches when actual is greater than or equal.",less_than:"Both sides must be JSON numbers; matches when actual is less.",less_than_or_equal:"Both sides must be JSON numbers; matches when actual is less than or equal.",in:"Value must be a JSON array; matches when the array contains the actual value.",not_in:"Value must be a JSON array; matches when the array does not contain the actual value."},value:"Value",invalidConditionValue:"Condition value must be valid JSON",conditionValuePlaceholder:'JSON: "text", 42, true, ["a"]',valueType:"Value type",valueTypes:{string:"String",number:"Number",boolean:"Boolean",null:"Null",array:"Array",object:"Object"},valueTypeHelp:"Choose how Value is parsed and validated. This editing aid is inferred from the saved JSON value and is not stored separately.",conditionValuePlaceholders:{string:"Text, for example APPROVED",number:"Number, for example 42",boolean:"true or false",null:"null",array:'JSON array, for example ["a", 2]',object:`JSON object, for example {'{'}"status":"ready"{'}'}`},invalidValueTypes:{string:"Value must be text.",number:"Value must be a valid number.",boolean:"Value must be true or false.",null:"Value must be null.",array:"Value must be a valid array.",object:"Value must be a valid object."},valueHelp:"Enter a value matching the selected type. Objects and arrays use JSON; strings are entered without JSON quotes.",expectedReplyText:"Text to find",expectedFieldValue:"Expected field value",rawTextValueHelp:"This checks the entire reply as literal text. With Contains, the text may appear in a JSON key or value; it does not look up a JSON field.",jsonFieldValueHelp:"This compares the value at the specified outputJson path, not the field name. Example: outputJson.failed_gate equals quality-container-setup.",canvasLabel:{withValue:"{subject} {operator} “{value}”",withoutValue:"{subject} {operator}",join:"{route} · {condition}"},conditionSemantics:"What is actually being compared",rawTextComparisonHelp:"The selected operator is {operator}. It applies to the complete reply text, not one JSON field. Contains or Does not contain can match text in either a JSON key or value. Equals requires the complete reply to equal the configured value; Does not equal requires the complete reply to differ.",jsonFieldComparisonHelp:"This reads the value at {path}. {operator} compares that field value with “{value}”; it never compares the field name.",rawTextExistenceHelp:"This checks whether the complete reply text is available; it does not check whether a JSON key exists.",jsonFieldExistenceHelp:"This checks whether the field at {path} exists; it does not compare the field value.",rawTextOperatorHelp:{equals:"Matches only when the complete reply text exactly equals “{value}”. It does not read or compare one JSON field value.",not_equals:"Matches only when the complete reply text is different from “{value}”. It does not read or compare one JSON field value.",contains:"Looks for “{value}” anywhere in the complete reply text. Text in either a JSON key or a JSON value can match; this is not a JSON field lookup.",not_contains:"Matches only when “{value}” does not appear anywhere in the complete reply text, whether in a JSON key or a JSON value. This is not a JSON field lookup.",exists:"Matches when the complete reply text is available. It does not check whether any JSON key exists.",not_exists:"Matches when no complete reply text is available. It does not check whether a JSON key is missing."},jsonFieldOperatorHelp:{equals:"Reads the value at {path}. Matches only when that field value exactly equals “{value}”; it never compares the field name.",not_equals:"Reads the value at {path}. Matches only when that field value is different from “{value}”; it never compares the field name.",contains:"Reads the value at {path} and checks whether that field value contains “{value}”; it never searches the field name.",not_contains:"Reads the value at {path}. Matches only when that field value does not contain “{value}”; it never searches the field name.",exists:"Matches when the JSON field at {path} exists. It does not compare the field value.",not_exists:"Matches when the JSON field at {path} is missing. It does not compare the field value."},feedback:"Feedback loop",feedbackHelp:"Marks this backward connection as a bounded loop. It repeats only while the route and condition match, and stops at Maximum iterations.",maxIterations:"Maximum iterations",maxIterationsHelp:"Total loop passes allowed, from 1 to 100. The run also has a global execution safety budget.",invalidIterations:"Maximum iterations must be an integer from 1 to 100",loopId:"Loop identity",loopIdPlaceholder:"Select automatic or type a custom ID",loopIdAutomatic:"Automatic (recommended) · {id}",loopIdHelp:"This only labels the loop in execution history; it does not change when the loop runs. Keep Automatic unless an advanced multi-loop design needs a stable custom ID.",invalidLoopId:"Loop ID must start with a letter or number and contain only letters, numbers, dot, underscore, colon, or hyphen"},batch:{toggle:"Batch selection",selectAll:"Select all",confirmDelete:"Delete {count} selected workflows?",deleteSuccess:"Deleted {count} workflows",deletePartial:"{failed} workflows failed to delete",deleteFailed:"Batch delete failed"},validation:{nodesRequired:"Add at least one node",nodeNameRequired:"Node {node} needs a name",providerRequired:"Node {node} needs a provider",modelRequired:"Node {node} needs a model",apiModeRequired:"Node {node} needs an API mode",inputRequired:"Node {node} needs input",invalidEdge:"A connection references a missing node",invalidConnectionDirection:"Connections must go from the right output to the left input",orphanNode:"Node {node} is not connected to the workflow",disconnectedFlow:"The workflow cannot be split into multiple disconnected flows",cycle:"The workflow contains a cycle. Adjust the connections before saving."},node:{title:"Node name",agent:"Agent",model:"Model",apiMode:"API Mode",input:"Input",approvalRequired:"Approval gate",join:"Join policy",joinAll:"All incoming routes",joinAny:"Any incoming route",joinAllHelp:"All incoming routes must be taken; if one does not match, this node is skipped. Example: wait for both parallel checks.",joinAnyHelp:"Runs once when the first incoming route is taken; skips only if every route is decided and none matches. Example: continue after either reviewer approves.",promptPlaceholder:"Describe what this agent should do...",skillsPlaceholder:"Skills, press Enter to add",uploadImages:"Upload images"},status:{idle:"Idle",queued:"Queued",running:"Running",pending_approval:"Pending approval",completed:"Completed",skipped:"Skipped",failed:"Failed",approval_rejected:"Approval rejected",canceled:"Canceled"},runs:{title:"Run Records",refresh:"Refresh",empty:"No run records",startNodes:"{count} start nodes",snapshotIndicator:"Immutable snapshot from this run’s launch",show:"Show run records",hide:"Hide run records",nodeSessionTitle:"Node Session - {node}",noNodeSession:"This node has no session record yet",loadNodeSessionFailed:"Failed to load node session",stop:"Stop run",stopRequested:"Stop requested",stopFailed:"Failed to stop run",delete:"Delete record",deleteSuccess:"Run record deleted"},inspector:{selected:"Selected Node",none:"No node selected"},stats:{nodes:"Nodes",edges:"Links"},agents:{planner:"Planner",researcher:"Researcher",builder:"Builder",reviewer:"Reviewer"},models:{default:"Default Model",fast:"Fast Model",reasoning:"Reasoning Model"},initialNodes:{node1:"Node 1",node2:"Node 2",node3:"Node 3",plan:"Plan",execute:"Execute",review:"Review"},initialPrompts:{node1:"Enter this node input.",node2:"Enter this node input.",node3:"Enter this node input.",plan:"Break the request into actionable steps.",execute:"Run the implementation steps and produce artifacts.",review:"Review output quality and identify follow-up work."},newNodeTitle:"Node {count}"},kanban:{title:"Kanban Board",createTask:"New Task",noTasks:"No tasks",allStatuses:"All Statuses",allAssignees:"All Assignees",board:{create:"New Board",archive:"Archive Board",slugPlaceholder:"Board slug, e.g. project-a",namePlaceholder:"Display name (optional)",slugRequired:"Board slug is required",created:"Board created",archived:"Board archived",archiveConfirm:"Archive the current board?",defaultArchiveUnavailable:"The default board cannot be archived"},columns:{triage:"Triage",todo:"To Do",scheduled:"Scheduled",ready:"Ready",running:"Running",blocked:"Blocked",review:"Review",done:"Done",archived:"Archived"},form:{title:"Title",titlePlaceholder:"Task title",titleRequired:"Title is required",body:"Description",bodyPlaceholder:"Task description (optional)",assignee:"Assignee",selectAssignee:"Select assignee...",priority:"Priority",selectPriority:"Select priority...",tenant:"Tenant",tenantPlaceholder:"Tenant (optional)",workspace:"Workspace",workspaceScratch:"Scratch workspace",workspaceDir:"Use directory",workspaceWorktree:"Use worktree",workspacePath:"Workspace path",workspacePathPlaceholder:"Absolute path (optional)",branch:"Branch",branchPlaceholder:"Worktree branch",skills:"Skills",skillsPlaceholder:"Select skills...",triage:"Create in triage",goalMode:"Goal mode",maxRuntime:"Max runtime",maxRuntimePlaceholder:"e.g. 30m, 2h",maxRetries:"Max retries",maxRetriesPlaceholder:"Number of retries",goalMaxTurns:"Goal max turns",goalMaxTurnsPlaceholder:"Maximum turns"},card:{assigneeTooltip:"Assignee",priority:{low:"Low",medium:"Medium",high:"High"},timeAgo:{justNow:"just now",minutes:"{count}m ago",hours:"{count}h ago",days:"{count}d ago"}},detail:{status:"Status",assignee:"Assignee",priority:"Priority",tenant:"Tenant",createdAt:"Created",startedAt:"Started",completedAt:"Completed",comments:"Comments",events:"Events",runs:"Runs",result:"Result",sessions:"Related Sessions",sessionMessages:"Session Messages",noSessions:"No related sessions found.",artifacts:"Artifacts",sources:"Sources",highlights:"Highlights",noLog:"No log found for this task.",addComment:"Add Comment",commentPlaceholder:"Write a task comment...",operations:"Operations"},action:{title:"Actions",complete:"Complete",completeSummary:"Completion summary (optional)",block:"Block",blockReason:"Reason for blocking",unblock:"Unblock",archive:"Archive Task",archiveConfirm:"Archive this completed task?",assign:"Assign",assignTo:"Assign to...",dispatch:"Dispatch",recoveryReason:"Recovery reason (optional)",reclaim:"Reclaim",reassign:"Reassign",specify:"Specify",loadLog:"Load Log",loadDiagnostics:"Load Diagnostics"},message:{taskCreated:"Task created",taskCompleted:"Task completed",taskBlocked:"Task blocked",taskUnblocked:"Task unblocked",taskArchived:"Task archived",taskAssigned:"Task assigned",dispatchNudged:"Dispatcher nudged",commentAdded:"Comment added",taskReclaimed:"Task reclaimed",taskReassigned:"Task reassigned",taskSpecified:"Task specified",loadFailed:"Failed to load task"},stats:{total:"Total",tasks:"Tasks"}},jobs:{title:"Scheduled Jobs",createJob:"Create Job",editJob:"Edit Job",noJobs:"No scheduled jobs yet. Create one to get started.",sortBy:"Sort",sortByName:"Name Sort",sortByTime:"Time Sort",sortByNameHint:"Click to sort by name",sortByTimeHint:"Click to sort by time",sortAsc:"Ascending",sortDesc:"Descending",name:"Name",namePlaceholder:"Job name",schedule:"Schedule (Cron Expression)",schedulePlaceholder:"e.g. 0 9 * * *",quickPresets:"Quick Presets",selectPreset:"Select a preset...",presetEveryMinute:"Every minute",presetEvery5Min:"Every 5 minutes",presetEveryHour:"Every hour",presetEveryDay:"Every day at 00:00",presetEveryDay9:"Every day at 09:00",presetEveryMonday:"Every Monday at 09:00",presetEveryMonth:"Every month 1st at 09:00",prompt:"Prompt",promptPlaceholder:"The prompt to execute",skills:"Skills",skillsPlaceholder:"Select skills...",provider:"Provider",model:"Model",defaultProvider:"Default provider",defaultModel:"Default model",deliverTarget:"Deliver Target",origin:"Origin",local:"Local",repeatCount:"Repeat Count (optional)",modelPlaceholder:"Default model",repeatPlaceholder:"Leave empty for infinite",jobCreated:"Job created",jobUpdated:"Job updated",nameRequired:"Name is required",scheduleRequired:"Schedule is required",promptRequired:"Prompt is required",loadFailed:"Failed to load job",jobPaused:"Job paused",jobResumed:"Job resumed",jobTriggered:"Job triggered",modelUpdated:"Model updated",jobDeleted:"Job deleted",status:{running:"Running",paused:"Paused",disabled:"Disabled",scheduled:"Scheduled"},info:{model:"Model",provider:"Provider",schedule:"Schedule",lastRun:"Last Run",nextRun:"Next Run",deliver:"Deliver",repeat:"Repeat"},action:{pause:"Pause",pauseJob:"Pause job",resume:"Resume",resumeJob:"Resume job",runNow:"Run Now",triggerImmediately:"Trigger immediately"},runHistory:{title:"Run History",runs:"runs",noRuns:"No run history found."}},skills:{title:"Skills",targetFilter:"Runtime",targets:{hermes:"Hermes",claude:"Claude",codex:"Codex"},searchPlaceholder:"Search skills...",noMatch:"No skills match your search",noSkills:"No skills found",backTo:"Back to",attachedFiles:"Attached Files",loadFailed:"Failed to load skill",fileLoadFailed:"Failed to load file",modified:"Modified",archived:"Archived",pinned:"Pinned",pin:"Pin skill",unpin:"Unpin skill",pinFailed:"Failed to change pin status",edit:"Edit",saving:"Saving...",editorLabel:"Skill editor",saveSuccess:"Skill saved",saveFailed:"Failed to save skill",toggleFailed:"Failed to toggle skill",source:{builtin:"Builtin",hub:"Hub",local:"Local",external:"External"},delete:"Delete",deleteConfirm:'Delete skill "{name}"? This cannot be undone.',deleteSuccess:"Skill deleted",deleteFailed:"Failed to delete skill",import:"Import",importTitle:"Import skill",importModeZip:"Zip",importModeFolder:"Folder",importHintZip:"Upload a .zip archive containing a directory with SKILL.md",importHintFolder:"Pick a local skill folder (must contain SKILL.md)",importTargetCategory:"Target category (optional)",importTargetCategoryPlaceholder:"Leave empty to drop under misc",importSelectFile:"Choose .zip file",importSelectFolder:"Choose folder",importInvalidFile:"Only .zip archives are supported",importFileCount:"files",importNoSelection:"Please choose a file or folder first",importSuccess:"Skill imported",importFailed:"Failed to import skill",path:{local:"Local",external:"External"},externalDirs:{manage:"External dirs",title:"Manage external skill dirs",hint:"Manages config.skills.external_dirs. Supports ~ and $VAR; missing paths are greyed out.",add:"Add external dir",placeholder:"/path/to/skills or ~/my-skills",empty:"No external dirs",missing:"Path not found",notDir:"Not a directory",saveSuccess:"External dirs saved",saveFailed:"Save failed",loadFailed:"Failed to load external dirs",removeRow:"Remove"},pathCopied:"Path copied",pathCopyFailed:"Failed to copy path",reloadHint:"Active sessions: run /reload-skills; new sessions pick it up automatically.",writeApprovalButton:"Pending {count}",writeApprovalTitle:"Pending write approvals",writeApprovalDescription:"Approve or reject staged Hermes Agent memory and skill writes.",writeApprovalRefresh:"Refresh",writeApprovalEmpty:"No pending writes.",writeApprovalUnsupported:"This Hermes Agent version does not support write approvals. Upgrade Hermes Agent to use this feature.",writeApprovalMemory:"Memory",writeApprovalSkills:"Skills",writeApprovalViewDiff:"Review",writeApprovalHideDiff:"Hide",writeApprovalNoDiff:"No diff available.",writeApprovalLoadFailed:"Failed to load pending writes",writeApprovalDiffFailed:"Failed to load write details",writeApprovalActionFailed:"Failed to resolve pending write",writeApprovalApproved:"Pending write approved",writeApprovalRejected:"Pending write rejected",writeApprovalApprove:"Approve",writeApprovalReject:"Reject",writeApprovalPendingMemoryWrite:"Pending memory write",writeApprovalCurrentFile:"Current {file}",writeApprovalProposedFile:"Proposed {file}",writeApprovalDiffSection:"Diff",writeApprovalPatchOldStringMissing:"The patch old_string was not found in the current {file}, so approving it will not change the file.",writeApprovalRequestedOldString:"Requested old_string",writeApprovalCurrentReadFailed:"The current {file} could not be read as UTF-8 text.",writeApprovalDeleteSkill:"This approval deletes skill {skill}.",writeApprovalRemoveFile:"This approval removes {file} from skill {skill}."},plugins:{title:"Plugins",refresh:"Refresh",notice:"Inventory of discoverable Hermes plugin manifests. Discovery metadata is read without loading plugin code. Standalone user plugins can be enabled or disabled here; changes take effect in new Hermes sessions.",loadFailed:"Failed to load plugins",updateFailed:"Failed to update plugin",enableSuccess:"Enabled {name}",disableSuccess:"Disabled {name}",commandCopied:"Command copied",searchPlaceholder:"Search key, name, description, path...",source:"Source",kind:"Kind",statusTitle:"Status",configStatus:"config: {status}",notAvailable:"n/a",copyCommand:"Copy command",managedElsewhere:"managed elsewhere",noMatch:"No plugins match the current filters",enabled:"enabled",disabled:"disabled",summary:{total:"Total",active:"Enabled / auto",inactive:"Inactive",disabled:"Disabled",providerManaged:"Provider-managed"},status:{enabled:"Enabled","auto-active":"Auto-active",inactive:"Inactive",disabled:"Disabled","provider-managed":"Provider-managed"},statusLabel:{enabled:"Enabled by config","auto-active":"Auto-active",inactive:"Inactive",disabled:"Disabled","provider-managed":"Provider-managed"},configStatuses:{enabled:"enabled",disabled:"disabled","not-enabled":"not enabled",auto:"auto","provider-managed":"provider-managed"},table:{plugin:"Plugin",status:"Status",source:"Source",kind:"Kind",capabilities:"Capabilities",path:"Path / entrypoint",manage:"Manage"},capabilities:{tools:"{count} tools",hooks:"{count} hooks",env:"{count} env"},metadata:{agentRoot:"Agent root",python:"Python",scanCwd:"Scan cwd",projectPlugins:"Project plugins"}},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:"Memory",refresh:"Refresh",loadFailed:"Failed to load memory",myNotes:"My Notes",noNotes:"No notes yet.",notesPlaceholder:"Write your notes...",userProfile:"User Profile",noProfile:"No profile yet.",profilePlaceholder:"Write your profile...",soul:"Soul",noSoul:"No soul configuration yet.",soulPlaceholder:"Write soul configuration..."},models:{title:"Models",searchPlaceholder:"Search models...",noResults:"No results",noModels:"No models",addProvider:"Add Provider",noProviderPromptTitle:"No model provider configured",noProviderPromptMessage:'The current profile "{profile}" has no model provider configured. Would you like to open model settings now?',noProviderPromptLater:"Not now",noProviderPromptAction:"Go to settings",refreshModelCache:"Refresh model cache",refreshModelCacheLoading:"Refreshing model cache...",refreshModelCacheSuccess:"Model cache refreshed",refreshModelCacheFailed:"Failed to refresh model cache",refreshModels:"Refresh models",restoreModels:"Restore previous models",refreshModelsConfirmTitle:"Confirm model list changes",refreshModelsConfirmContent:"This refresh would remove {removed} model(s) and add {added}. Removed: {removedList}",refreshModelsConfirmAction:"Replace model list",refreshModelsSuccess:"Model list updated ({count} models, {unavailable} unavailable)",refreshModelsFailed:"Failed to refresh provider models",restoreModelsSuccess:"Restored previous model list ({count} models)",restoreModelsFailed:"Failed to restore previous model list",editProviderTitle:"Edit {name}",providerEditorLoadFailed:"Failed to load provider settings",providerEditorSaved:"Provider settings saved",providerEditorSaveFailed:"Failed to save provider settings",providerEditorConflict:"This provider changed elsewhere. The latest settings have been reloaded.",providerEditorRequired:"Display name, Base URL, and preferred model are required.",providerInternalId:"Internal provider ID",providerDisplayName:"Display name",providerIdStableHint:"The internal provider ID stays unchanged so existing references remain valid.",providerPreferredModel:"Provider preferred model",providerPreferredModelHint:"This does not change the profile-wide default model.",selectOrEnterModel:"Select or enter a model ID...",unverifiedModelWarning:"This model is not in the current catalog and has not been verified.",credentialConfigured:"Configured",credentialNotConfigured:"Not configured",leaveBlankKeepCredential:"Leave blank to keep the current key",enterCredential:"Enter the provider credential",credentialNeverDisplayedHint:"The stored key is never displayed. Enter a new value only to replace it.",providerCredentialMissingHint:"This provider is now unavailable until a credential is configured.",providerAdvancedSettings:"Advanced provider settings",discoverModels:"Discover models from the provider",rateLimitDelay:"Rate limit delay (seconds)",requestTimeoutSeconds:"Request timeout (seconds)",staleTimeoutSeconds:"Stale request timeout (seconds)",extraBodyHint:"Optional JSON object merged into provider requests. Leave blank to remove it.",extraBodyInvalid:"extra_body must be a valid JSON object.",providerTestUnsupported:"Connection testing is not supported for this API mode.",perModelContextLengths:"Per-model context lengths",contextLengthInheritHint:"Clear a value to inherit the provider or system default.",inheritDefault:"Inherit default",providerReconnectHint:"Changes apply to new runs. Existing chat or coding-agent sessions must reconnect.",testConnection:"Test connection",providerTestSuccess:"Connection succeeded; {count} models found",providerTestFailed:"Provider connection test failed",providerTestFailedTitle:"Connection test failed",providerSaveAnywayHint:"You can still save these settings explicitly, but the provider may be unavailable.",saveAnyway:"Save anyway",providerType:"Provider Type",preset:"Preset",custom:"Custom",selectProvider:"Select Provider",chooseProvider:"Choose a provider...",getApiKey:"Get API Key",name:"Name",autoGeneratedName:"Auto-generated from Base URL",baseUrl:"Base URL",region:"Region",regionIntl:"International",regionCn:"Mainland China",baseUrlPlaceholder:"e.g. https://api.example.com/v1",apiKey:"API Key",apiKeyPlaceholder:"sk-...",defaultModel:"Default Model",selectOrInput:"Select or type a model name...",selectModel:"Select a model...",providerAdded:"Provider added",providerDeleted:"Provider deleted",providerCredentialsCleared:"Provider credentials cleared",clearProviderCredentials:"Clear credentials",clearCredentialsConfirm:'Clear stored credentials for "{name}"? This built-in provider will stay listed and can be used again after credentials are configured.',disableProvider:"Disable provider",disableProviderConfirm:'Disable built-in provider "{name}"? The provider will stay built in and can be enabled again later.',providerDisabled:"Provider disabled",defaultProviderUpdated:"Default provider updated",defaultProviderUpdateFailed:"Failed to update default provider",defaultModelUpdated:"Default model updated",defaultModelUpdateFailed:"Failed to update default model",deleteProvider:"Delete Provider",deleteConfirm:'Are you sure you want to delete "{name}"?',codexLoginTitle:"OpenAI Codex Login",codexWaiting:"Enter this code at the authorization page to complete login:",codexCopyCode:"Code copied",codexOpenLink:"Open authorization page",codexApproved:"Login successful",codexExpired:"Authorization expired. Please try again.",nousLoginTitle:"Nous Portal Login",nousWaiting:"Enter this code at the authorization page to complete login:",nousCopyCode:"Code copied",nousOpenLink:"Open authorization page",nousApproved:"Login successful",nousDenied:"Authorization was denied. Please try again.",nousExpired:"Authorization expired. Please try again.",copilotLoginTitle:"GitHub Copilot Login",copilotWaiting:"Open GitHub and enter the device code below to authorize. The window will close automatically once approved.",copilotCopyCode:"Code copied",copilotOpenLink:"Open GitHub authorization page",copilotApproved:"Sign-in succeeded!",copilotDenied:"Authorization denied.",copilotExpired:"The authorization link has expired. Please retry.",copilotAddDetectedTitle:"GitHub Copilot detected",copilotAddDetected:"A GitHub Copilot OAuth token was detected on this machine. Click Add to enable Copilot in Hermes.",copilotAddSourceEnv:"Source: ~/.hermes/.env (COPILOT_GITHUB_TOKEN)",copilotAddSourceGhCli:"Source: gh CLI (gh auth token)",copilotAddSourceAppsJson:"Source: VS Code Copilot extension (apps.json)",copilotDeleteHintEnv:"This will clear COPILOT_GITHUB_TOKEN in ~/.hermes/.env. Other tools are not affected.",copilotDeleteHintGhCli:"Copilot will be hidden from Hermes. Your gh CLI login is not affected — `gh auth status` will still show you signed in.",copilotDeleteHintAppsJson:"Copilot will be hidden from Hermes. Your VS Code Copilot extension login is not affected.",xaiLoginTitle:"xAI Grok OAuth Login",xaiWaiting:"Complete authorization in the opened xAI page. This window will close automatically once approved.",xaiOpenLink:"Open xAI authorization page",xaiCopyLink:"Copy authorization link",xaiApproved:"Sign-in succeeded!",xaiExpired:"The authorization link has expired. Please retry.",anthropicLoginTitle:"Claude OAuth Login",anthropicWaiting:"Complete authorization on the Claude page, then paste the returned code here.",anthropicOpenLink:"Open Claude authorization page",anthropicCopyLink:"Copy authorization link",anthropicCodePlaceholder:"Paste the authorization code...",anthropicSubmitCode:"Submit code",anthropicApproved:"Sign-in succeeded!",anthropicExpired:"Authorization expired. Please retry.",minimaxLoginTitle:"MiniMax Coding Plan Login",minimaxRegionHint:"Choose the MiniMax account region used by your Coding Plan.",minimaxGlobal:"Global",minimaxChina:"China",minimaxStart:"Start authorization",minimaxWaiting:"Open the MiniMax authorization page and enter this code. This window will close automatically once approved.",minimaxOpenLink:"Open MiniMax authorization page",minimaxApproved:"Sign-in succeeded!",minimaxExpired:"Authorization expired. Please retry.",customBadge:"CUSTOM",previewBadge:"PREVIEW",disabledBadge:"UNAVAILABLE",disabledTooltip:"This model is currently unavailable for your account.",customModelPlaceholder:"Unlisted model ID",customModelHint:"For provider-supported models not returned by the API; not a display rename. Press Enter to load.",removeCustomModel:"Remove this unlisted model",refresh:"Refresh model list (reload config.yaml)",noProviders:"No providers found. Add a custom provider to get started.",models:"Models",count:"models",more:"more",aliasEdit:"Rename",aliasTitle:"Model display name",aliasTitleFor:"Display name for {model}",aliasPlaceholder:"Leave empty to use original model ID",aliasHint:"Display-only alias. Hermes still receives the canonical model ID.",aliasCanonical:"Original ID: {model}",aliasUseOriginal:"Use original ID",aliasManage:"Display names",aliasManageFor:"Display names for {provider}",aliasSaveFailed:"Failed to save display name",manageVisibleModels:"Manage visible models",manageVisibleModelsFor:"Manage visible models for {name}",visibilityHint:"Only affects the Web UI model picker and Models page. Hermes CLI provider/model config is not rewritten; calls still use canonical model IDs.",visibilitySelectOne:"Keep at least one visible model",visibilitySaved:"Visible models saved",visibilitySaveFailed:"Failed to save visible models",showAllModels:"Show all models",clearVisibleModels:"Clear selection",generalTitle:"General Models",auxiliaryTitle:"Auxiliary Models",auxiliarySubtitle:"Side-task model overrides for compression, vision, approvals, MCP, and background maintenance.",combinationTitle:"Model Ensembles",combinationSubtitle:"Configure MoA presets: reference models provide perspectives first, then one aggregator model handles the final response and tool calls.",combinationPreset:"Preset",combinationName:"Name",combinationAddModel:"Add model ensemble",combinationEditModel:"Edit model ensemble",combinationNewPreset:"New preset",combinationPresetPlaceholder:"e.g. review",combinationAddPreset:"Add preset",combinationSetDefault:"Set default",combinationEnabled:"Enable references",combinationReferenceModels:"Reference models",combinationReferenceModel:"Reference model",combinationAddReference:"Add reference model",combinationAggregator:"Aggregator model",combinationReferenceTemperature:"Reference temperature",combinationAggregatorTemperature:"Aggregator temperature",combinationMaxTokens:"Max tokens",combinationNotSet:"Not set",combinationSaved:"Model ensemble saved",combinationLoadFailed:"Failed to load model ensemble",combinationSaveFailed:"Failed to save model ensemble",combinationPresetExists:"Preset already exists",combinationNameRequired:"Enter a model ensemble name",combinationNameInvalid:"Name can only contain letters, numbers, underscores, hyphens, and dots",combinationReferenceRequired:"Add at least one reference model",combinationAggregatorRequired:"Select an aggregator model",auxiliaryRefresh:"Refresh",auxiliaryTask:"Task",auxiliaryTimeout:"Timeout",auxiliaryDownloadTimeout:"Download timeout",auxiliaryActions:"Actions",auxiliaryDefault:"Default",auxiliaryCustomEndpoint:"Custom endpoint",auxiliaryProviderAuto:"Auto",auxiliaryProviderMain:"Main model",auxiliaryProviderPlaceholder:"auto, main, or provider key",auxiliaryDownloadShort:"download",auxiliaryExtraBody:"Extra body JSON",auxiliaryClear:"Clear",auxiliarySaved:"Auxiliary models saved",auxiliaryLoadFailed:"Failed to load auxiliary models",auxiliarySaveFailed:"Failed to save auxiliary models",auxiliaryInvalidExtraBody:"Extra body must be a JSON object",auxiliaryTaskCompression:"Compression",auxiliaryTaskVision:"Vision",auxiliaryTaskWebExtract:"Web extract",auxiliaryTaskSkillsHub:"Skills hub",auxiliaryTaskApproval:"Approval",auxiliaryTaskMcp:"MCP",auxiliaryTaskTitleGeneration:"Title generation",auxiliaryTaskTriageSpecifier:"Triage specifier",auxiliaryTaskKanbanDecomposer:"Kanban decomposer",auxiliaryTaskProfileDescriber:"Profile describer",auxiliaryTaskCurator:"Curator",auxiliaryTaskSessionSearch:"Session search",auxiliaryTaskFlushMemories:"Flush memories",currentDefault:"Current default",defaultShort:"Default",setDefaultProvider:"Set default provider",setDefault:"Set default",builtIn:"Built-in",customType:"Custom",provider:"Provider",contextLength:"Context Length",contextLengthPlaceholder:"e.g. 256000 (optional)",apiMode:"API Mode",local:"Local ({host})",selectProviderRequired:"Please select a provider",baseUrlRequired:"Base URL is required",apiKeyRequired:"API Key is required",modelRequired:"Default Model is required",enterBaseUrl:"Please enter Base URL first",unexpectedFormat:"Unexpected response format",foundModels:"Found {count} models",fetchFailed:"Failed to fetch models"},gateways:{title:"Gateways",running:"Running",stopped:"Stopped",started:"Started",startFailed:"Failed to start gateway",stopFailed:"Failed to stop gateway"},profiles:{title:"Profiles",create:"Create Profile",import:"Import",export:"Export",rename:"Rename",delete:"Delete",editConfig:"Edit Config",switchTo:"Switch Hermes Profile",switchConfirm:"This will run `hermes profile use {name}` and change the active Hermes CLI profile. Continue?",switchSuccess:'Hermes active profile switched to "{name}"',switchFailed:"Failed to switch Hermes profile. Gateway may need manual restart.",createSuccess:'Profile "{name}" created',createFailed:"Failed to create profile",renameSuccess:"Profile renamed",renameFailed:"Failed to rename profile",deleteConfirm:'Are you sure you want to delete profile "{name}"?',deleteSuccess:"Profile deleted",deleteFailed:"Failed to delete profile",exportSuccess:"Profile exported",exportFailed:"Failed to export profile",exportTimeout:"Export timed out. This profile is too large to archive — caches and virtual environments under its workspace are usually what makes it big.",importTimeout:"Import timed out while the server was unpacking the archive. Try again on faster storage or import it with the Hermes CLI.",importSuccess:"Profile imported",importFailed:"Failed to import profile",importSelectFile:"Select archive file",importInvalidFile:"Please select a valid archive (.tar.gz, .tgz, .gz, .zip)",name:"Profile Name",namePlaceholder:"Lowercase letters, numbers, hyphens only",nameValidation:"Profile name can only contain lowercase letters, numbers, underscores, and hyphens",newName:"New Name",newNamePlaceholder:"Lowercase letters, numbers, hyphens",cloneFromCurrent:"Clone from current profile",cloneCleanupNotice:"Cloning automatically skips exclusive platform credentials (Weixin / Telegram / Slack, etc.) to avoid conflicts with the source profile",cloneStrippedCredentials:"Stripped {count} exclusive credential(s): {list}",cloneDisabledPlatforms:"Disabled {count} platform(s): {list}",cloneStrippedConfigCredentials:"Stripped {count} embedded credential(s) from config.yaml: {list}",archivePath:"Archive Path",archivePathPlaceholder:"Server path to archive file",importName:"Profile Name (optional)",importNamePlaceholder:"Leave empty to use archive name",active:"Active",model:"Model",gateway:"Gateway",alias:"Alias",provider:"Provider",path:"Path",skills:"Skills",hasEnv:"Has .env",hasSoulMd:"Has soul.md",noProfiles:"No profiles found. Create one to get started.",avatar:{title:"Custom Avatar",customize:"Avatar",upload:"Upload Image",random:"Randomize",reset:"Use Default",hint:"PNG, JPEG, or WebP. Max 1MB.",invalidType:"Please choose a PNG, JPEG, or WebP image",tooLarge:"Avatar image must be 1MB or smaller",saveSuccess:"Avatar saved",saveFailed:"Failed to save avatar",resetSuccess:"Default avatar restored",resetFailed:"Failed to restore default avatar"},runtime:{activeProfile:"Active: {name}",bridgeWorker:"Bridge worker",gateway:"Gateway",active:"Active",activeTag:"Active",idle:"Idle",checking:"Checking",running:"Running",stopped:"Stopped",restartGateway:"Restart Gateway",restartProfile:"Restart Profile",switchProfile:"Switch Frontend Profile",gatewayRestarted:"Gateway restarted: {name}",gatewayRestartFailed:"Failed to restart gateway",profileRestarted:"Profile restarted: {name}",profileRestartFailed:"Failed to restart profile"}},logs:{title:"Logs",all:"All",searchPlaceholder:"Search...",refresh:"Refresh",noEntries:"No log entries"},theme:{title:"Theme",saved:"Theme saved",saveFailed:"Failed to save theme",reset:"Restore defaults",resetSuccess:"Default theme restored",appearance:"Appearance",appearanceHint:"Changes are previewed across the interface",mode:"Brightness",modeHint:"Choose a light or dark palette",modeSystem:"Follow system",modeLight:"Light",modeDark:"Dark",style:"Style",styleHint:"Choose the interface character",styleInk:"Ink",styleComic:"Comic",fontSize:"Text size",fontSizeHint:"Base interface and conversation text size",textColor:"Text color",textColorHint:"Secondary text shades are generated automatically",accentColor:"Selection color",accentColorHint:"Used for active items, selections, and primary buttons",background:"Background image",backgroundHint:"Upload a personal workspace background",backgroundTypeError:"Use a PNG, JPEG, WebP, or GIF image",backgroundSizeError:"Background images must be 10 MB or smaller",backgroundUploaded:"Background image updated",backgroundUploadFailed:"Failed to upload background image",backgroundRemoved:"Background image removed",backgroundRemoveFailed:"Failed to remove background image",backgroundReplace:"Replace image",backgroundUpload:"Upload image",backgroundRemove:"Remove",backgroundEmpty:"No background image",backgroundNote:"The image is stored with your account. A local cache prevents flashing while it loads.",preview:"Preview",previewTitle:"Your workspace, your atmosphere",previewText:"Text and selection colors update throughout the interface.",previewAction:"Selected action"},settings:{title:"Settings",saved:"Saved",saveFailed:"Save failed",tabs:{display:"Display",account:"Current Account",users:"Account Management",webhooks:"Webhooks",agent:"Agent",proxy:"Proxy",memory:"Memory",compression:"Compression",session:"Session",privacy:"Privacy",apiServer:"API Server",models:"Models",voice:"Voice"},webhooks:{title:"Webhooks",description:"Send Chat Run lifecycle events to external systems without blocking chat execution.",deliveryNote:"Delivery runs in a bounded in-memory queue. Endpoints run in parallel, while each endpoint preserves event order. Pending deliveries are not retained across a server restart.",createTitle:"Add Webhook",editTitle:"Edit Webhook",allProfiles:"All profiles",queued:"{count} queued",deleteConfirm:"Delete this webhook? Pending deliveries for it will also be discarded.",localInboxTitle:"Local test inbox",localInboxDescription:"{count} recent events received by the built-in test receiver. Kept in memory only and cleared on server restart.",localInboxEmpty:"No local test events received yet.",localInboxPayloadTitle:"Received webhook payload",clearInboxConfirm:"Clear all events from the local test inbox?",columns:{name:"Name",url:"URL",events:"Events",profiles:"Profiles",status:"Status",actions:"Actions",receivedAt:"Received at",event:"Event",eventId:"Event ID",deliveryId:"Delivery ID"},events:{messageCreated:"User message created",runQueued:"Run queued",runStarted:"Run started",toolStarted:"Tool started",toolCompleted:"Tool completed",toolFailed:"Tool failed",approvalRequested:"Approval requested",approvalResolved:"Approval resolved",clarificationRequested:"Clarification requested",clarificationResolved:"Clarification resolved",completed:"Run completed",failed:"Run failed"},status:{enabled:"Enabled",disabled:"Disabled"},runtime:{idle:"Idle",delivering:"Delivering",retrying:"Retrying",success:"Delivered",failed:"Failed",dropped:"Dropped"},actions:{add:"Add Webhook",localTest:"Use local test receiver",test:"Test",enable:"Enable",disable:"Disable",refresh:"Refresh",clear:"Clear",view:"View"},form:{name:"Name",localTestName:"Local Webhook test",namePlaceholder:"For example: Operations notifications",url:"Endpoint URL",secret:"Signing secret",secretPlaceholder:"Optional HMAC-SHA256 signing secret",secretKeepPlaceholder:"Leave empty to keep the current secret",clearSecret:"Remove saved secret",events:"Events",profiles:"Profiles",profilesPlaceholder:"Leave empty to receive all profiles",maxRetries:"Retry attempts after the first failure (0–10)",includeContent:"Include final assistant text",includeContentHint:"Final reply text may contain sensitive information. Reasoning, system prompts, and tool arguments are never included.",includeUserContent:"Include user message text",includeUserContentHint:"User messages may contain sensitive information. This is disabled by default and does not include system prompts, reasoning, tool arguments, or tool results.",allowPrivateNetwork:"Allow private or local network addresses",allowPrivateNetworkHint:"Only enable this for trusted internal endpoints. DNS is checked again for every delivery.",enabled:"Enabled"},messages:{required:"Name and URL are required",eventRequired:"Select at least one event",loadFailed:"Failed to load webhooks",saved:"Webhook saved",saveFailed:"Failed to save webhook",deleted:"Webhook deleted",deleteFailed:"Failed to delete webhook",testSucceeded:"Test webhook delivered",testFailed:"Test webhook failed",localTestFailed:"Failed to create the local test receiver",inboxLoadFailed:"Failed to load local test events",inboxCleared:"Local test events cleared",inboxClearFailed:"Failed to clear local test events"}},models:{apiKey:"API Key",apiKeyPlaceholder:"Enter API key",save:"Save",saved:"Saved",saveFailed:"Save failed",noProviders:"No providers configured"},display:{streaming:"Stream Responses",streamingHint:"Show AI replies in real-time",compact:"Compact Mode",compactHint:"Reduce message spacing",showReasoning:"Show Reasoning",showReasoningHint:"Show model thinking process",showCost:"Show Cost",showCostHint:"Show token usage in replies",inlineDiffs:"Inline Diffs",inlineDiffsHint:"Show code changes inline",bellOnComplete:"Completion Sound",bellOnCompleteHint:"Play sound when AI finishes",approvalBell:"Approval Sound",approvalBellHint:"Play a sound when a new approval or clarification needs attention",notifyOnComplete:"Completion Notification",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:"Show a system notification when AI finishes",notifyOnCompleteMacHint:"On macOS, allow browser notifications in System Settings.",notifyOnCompleteDenied:"Notification permission was denied",notifyOnCompleteInsecure:"Browser notifications require HTTPS or localhost",notifyOnCompleteUnsupported:"This browser does not support notifications",notifyOnCompleteTest:"Notifications are enabled.",notifyOnCompleteTestButton:"Test",notifyOnCompleteTesting:"Sending test notification...",notifyOnCompleteTestSent:"Test notification sent",notifyOnCompleteTestFailed:"Failed to send test notification",busyInputMode:"Busy Input Mode",busyInputModeHint:"Allow input while AI is processing",theme:"Theme",themeHint:"Choose light, dark, or follow system preference",themeLight:"Light",themeDark:"Dark",themeSystem:"System",chatInputHeight:"Chat input height",chatInputHeightHint:"Default desktop chat input height in pixels. Mobile keeps auto height."},agent:{maxTurns:"Max Turns",maxTurnsHint:"Maximum interaction rounds per conversation",gatewayTimeout:"Gateway Timeout",gatewayTimeoutHint:"Request inactivity timeout in seconds; 0 means unlimited",restartDrainTimeout:"Restart Drain Timeout",restartDrainTimeoutHint:"Drain timeout before restart in seconds",toolEnforcement:"Tool Enforcement",toolEnforcementHint:"Control tool call execution mode",auto:"Auto",always:"Always",never:"Never"},gatewayAutoStart:{title:"Gateway Auto-Start",description:"Control which local Hermes profile gateways the Web UI starts during startup. This is stored in the Web UI config, not a profile config.yaml.",enabled:"Auto-start gateways",enabledHint:"When disabled, startup will not automatically start any profile gateway.",management:"Unified gateway",managementHint:"Requires Hermes Agent 0.17.0 or later. When enabled, Web UI writes multiplex_profiles so the default gateway serves every profile; other profiles cannot configure separate Feishu, Weixin, QQBot, or similar messaging entrypoints. Turning it off removes that config.",managementAuto:"Auto",managementPerProfile:"One gateway per profile",managementUnified:"Unified default gateway",mode:"Profile policy",modeHint:"Start all discovered profiles or only the explicit include list.",modeAll:"All discovered profiles",modeInclude:"Only included profiles",include:"Included profiles",includeHint:"Comma-separated profile names. In include mode, an empty list starts none.",exclude:"Excluded profiles",excludeHint:"Comma-separated profile names to skip after the include/all policy is applied.",profileListPlaceholder:"default, reviewer"},proxy:{title:"Gateway Proxy",description:"Set proxy environment variables for the selected profile gateway. Changes restart the gateway so messaging platforms can use the new network settings.",httpsProxy:"HTTPS_PROXY",httpsProxyHint:"Proxy for HTTPS requests. Usually the main value to set.",httpProxy:"HTTP_PROXY",httpProxyHint:"Proxy for plain HTTP requests.",allProxy:"ALL_PROXY",allProxyHint:"Fallback proxy used when a protocol-specific proxy is not set.",noProxy:"NO_PROXY",noProxyHint:"Comma-separated hosts or domains that should bypass the proxy.",save:"Save Proxy Settings"},memory:{enabled:"Enable Memory",enabledHint:"Allow AI to remember conversation context",userProfile:"User Profile",userProfileHint:"Allow AI to remember user preferences",charLimit:"Memory Char Limit",charLimitHint:"Max characters for MEMORY.md",userCharLimit:"User Profile Char Limit",userCharLimitHint:"Max characters for USER.md"},compression:{enabled:"Enable Compression",enabledHint:"Automatically compress long chat history before it exceeds the model context",threshold:"Compression Threshold",thresholdHint:"Start compression when estimated tokens exceed this context ratio",targetRatio:"Target Ratio",targetRatioHint:"Target history size after compression as a context ratio",protectLastN:"Protect Recent Messages",protectLastNHint:"Keep this many latest messages uncompressed",protectFirstN:"Protect First Messages",protectFirstNHint:"Keep this many earliest messages uncompressed"},session:{mode:"Reset Mode",modeHint:"Trigger condition for session reset",modeBoth:"Idle + Scheduled",modeIdle:"Idle Only",modeDaily:"Scheduled Only",modeNone:"Never (Manual Only)",idleMinutes:"Idle Timeout",idleMinutesHint:"Wait time before auto-reset (minutes)",atHour:"Scheduled Reset Time",humanOnly:"Show human sessions only",humanOnlyHint:"Hide sub-agent/session monitor noise by default",liveMonitorHumanOnly:"Live monitor: show human sessions only",liveMonitorHumanOnlyHint:"Hide sub-agent/session monitor noise in the Live monitor by default",atHourHint:"Reset session at this hour daily",requireAuth:"Session Authorization",requireAuthHint:"Require authorization for session operations",memoryWriteApproval:"Review memory writes",memoryWriteApprovalHint:"Stage Hermes Agent memory writes for approval before they are saved.",skillsWriteApproval:"Review skill writes",skillsWriteApprovalHint:"Stage Hermes Agent skill changes for approval before they are saved.",writeApprovalTitle:"Pending write approvals",writeApprovalDescription:"Approve or reject staged Hermes Agent memory and skill writes.",writeApprovalRefresh:"Refresh",writeApprovalEmpty:"No pending writes.",writeApprovalMemory:"Memory",writeApprovalSkills:"Skills",writeApprovalViewDiff:"Review",writeApprovalHideDiff:"Hide",writeApprovalNoDiff:"No diff available.",writeApprovalLoadFailed:"Failed to load pending writes",writeApprovalDiffFailed:"Failed to load write details",writeApprovalActionFailed:"Failed to resolve pending write",writeApprovalApproved:"Pending write approved",writeApprovalRejected:"Pending write rejected",writeApprovalApprove:"Approve",writeApprovalReject:"Reject",writeApprovalPendingMemoryWrite:"Pending memory write",writeApprovalCurrentFile:"Current {file}",writeApprovalProposedFile:"Proposed {file}",writeApprovalDiffSection:"Diff",writeApprovalPatchOldStringMissing:"The patch old_string was not found in the current {file}, so approving it will not change the file.",writeApprovalRequestedOldString:"Requested old_string",writeApprovalCurrentReadFailed:"The current {file} could not be read as UTF-8 text.",writeApprovalDeleteSkill:"This approval deletes skill {skill}.",writeApprovalRemoveFile:"This approval removes {file} from skill {skill}."},privacy:{redactPii:"Redact PII",redactPiiHint:"Auto-detect and hide sensitive info (passwords, keys, etc.)"},apiServer:{enable:"Enable",enableHint:"Enable API server",host:"Host",hostHint:"Listen address",port:"Port",portHint:"Listen port",key:"Key",keyHint:"API access key",cors:"CORS Origins",corsHint:"Allowed cross-origin sources"},lockedIps:{title:"Locked IPs",count:"{count} locked",empty:"No locked IPs",unlock:"Unlock",unlockAll:"Unlock All",unlockAllConfirm:"Unlock all locked IPs?",unlocked:"IP unlocked",allUnlocked:"{count} IPs unlocked",type:{password:"Password",token:"API token",pairing:"Device pairing"}},userAvatar:{title:"User Avatar",upload:"Upload Image",random:"Generate Random",reset:"Reset to Default",hint:"Supports PNG/JPEG/WebP up to 1MB, auto-compressed to under 500KB",invalidType:"Please choose a PNG, JPEG, or WebP image",tooLarge:"Avatar image must be under 1MB",saveSuccess:"Avatar saved",saveFailed:"Failed to save avatar",resetSuccess:"Avatar reset to default",resetFailed:"Failed to reset avatar"},voice:{activeTtsApi:"Active TTS API",activeSttApi:"Active STT API",ttsProvidersTitle:"TTS providers",ttsProvidersDescription:"Manage text-to-speech integrations used to play assistant responses and voice previews.",sttProvidersTitle:"STT providers",sttProvidersDescription:"Manage speech-to-text integrations used by the microphone and voice input flow.",localSttModelTitle:"Local Chinese-English STT",localSttModelDescription:"Private on-device recognition. Audio stays on this machine.",localSttModelUnavailable:"Download and validate the local STT model before setting it as active.",localSttModelReady:"Ready",localSttModelDownloading:"Downloading",localSttModelNotInstalled:"Not installed",localSttLanguages:"Languages",localSttLanguagesValue:"Chinese + English",localSttDownloadSize:"Download size",localSttRuntime:"Runtime",localSttDownloadCf:"Cloudflare download",localSttDownloadGithub:"GitHub download",localSttBackgroundHint:"The download, checksum verification, extraction, and model validation run in the background.",localSttDownloadFailed:"Local STT model download failed: {error}",localSttStage:{queued:"Waiting to download…",resolve:"Preparing download…",download:"Downloading model…",verify:"Verifying checksum…",extract:"Extracting model…",validate:"Validating model runtime…",install:"Installing model…",completed:"Model is ready",failed:"Download failed"},hermesConfigTitle:"Hermes Agent configuration",hermesConfigDescription:"Existing native providers remain in the Hermes profile. Web UI providers appear to Hermes as Hermes Studio.",hermesActiveProvider:"Active provider",hermesConfiguredProviders:"Configured providers",hermesStudioProvider:"Hermes Studio",providerSpeed:"Speed",providerSampleRate:"Sample rate",providerBitRate:"Bit rate",providerGroupId:"Group ID",providerVolume:"Volume",providerEmotion:"Emotion",providerDiarize:"Speaker diarization",providerFormatText:"Format transcript",providerTagAudioEvents:"Tag audio events",optionEnabled:"Enabled",optionDisabled:"Disabled",nativeProvider:"Hermes native provider",selectNativeProvider:"Select a Hermes native provider",useHermesStudioProvider:"Use Hermes Studio provider",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:"None selected",keyStored:"Stored",keyMissing:"Missing",customApi:"API",localBuiltin:"Local built-in",ttsCardHint:"Speech synthesis provider",sttCardHint:"Speech transcription provider",setActive:"Set active",testAction:"Test",connect:"Connect",presetEdgeTtsLabel:"Edge TTS",presetEdgeTtsDescription:"Free high-quality cloud voices from Microsoft Edge.",presetOpenaiTtsLabel:"OpenAI TTS",presetMimoTtsLabel:"MiMo TTS",presetDoubaoTtsLabel:"Volcengine Doubao TTS",presetCustomTtsLabel:"Custom TTS",presetBrowserSttLabel:"Browser STT",presetBrowserSttDescription:"Native browser speech recognition API.",presetOpenaiWhisperLabel:"OpenAI Whisper",presetGroqSttLabel:"Groq STT",presetDoubaoSttLabel:"Volcengine Doubao STT",presetCustomSttLabel:"Custom STT",apiCompatibility:"API compatibility",openaiCompatible:"OpenAI-compatible",manualCustomEndpoint:"Manual custom endpoint",connectionStep:"Connection",discoveryManualHint:"Manual custom endpoint selected. Model discovery is not available; enter the model name manually.",discoveryCredentialHint:"Enter Base URL and API key, then connect to fetch available models.",discoveryNoAutoProbeHint:"No requests are sent while typing. Use Connect when the credentials are ready.",apiKeyConnectPlaceholder:"Paste API key to connect; stored keys are never shown",connectFetchModels:"Connect & fetch models",modelRecommendedSuffix:"recommended",modelConnectManualHint:"Connect to auto-fill, or enter manually.",modelRequiredConnectManual:"Model is required. Connect to auto-fill, or enter manually.",apiKeyRequired:"API key is required.",apiKeyRequiredForDiscovery:"API key is required to fetch models.",baseUrlRequired:"Base URL is required.",baseUrlHttpsRequired:"Please use http:// or https://.",baseUrlInvalid:"Enter a valid Base URL, including https://.",discoveryFailedManualFallback:"Could not fetch models. You can still enter the model name manually.",completeRequiredProviderFields:"Complete the required provider fields before saving.",fetchingModels:"Fetching models…",recommendedModel:"Recommended: {model}.",useRecommendedModel:"Use this.",modelsDiscovered:"{count} models discovered. Recommended model is selected when the field is empty.",remove:"Remove",testSuccess:"Test completed",testTextRequired:"Enter text before testing.",keyMissingForTest:"Add an API key before testing this provider.",testing:"Testing…",transcribing:"Transcribing…",browserSttTestHint:"Browser STT is tested from the chat microphone.",sttEmptyAudio:"No audio was captured. Try again.",sttTestSuccess:"Transcription completed",sttRecordingHint:"Recording… click Stop to transcribe.",keepStoredKeyPlaceholder:"Leave blank to keep the stored key",apiKeyPlaceholder:"Enter API key",lastTest:"Last test",notTested:"—",recording:"Recording",testFailedShort:"Failed",testFailedSummary:"Test failed. Check provider settings and try again.",showDetails:"Show details",hideDetails:"Hide details",moreActions:"More",moreActionsFor:"More actions for {provider}",addTtsApi:"Add TTS API",addSttApi:"Add STT API",active:"Active",builtin:"Built-in",connected:"Connected",disconnected:"Disconnected",source:"Source",model:"Model",voice:"Voice",doubaoVoiceHint:"Select a Seed TTS 2.0 voice; the resource field is updated automatically.",apiKey:"API key",confirmDeleteSecret:"Delete the stored API key for this voice API?",ttsTitle:"Text-to-speech",ttsSaved:"TTS settings saved on the server",ttsSaveFailed:"Failed to save TTS settings",ttsTestSaved:"Audition succeeded; TTS settings saved on the server",ttsTestSaving:"Saving TTS settings before audition…",ttsMissingBaseUrl:"Base URL is required before testing. Enter a provider endpoint, then test again.",ttsMissingApiKey:"API key is required before testing. Paste the key, or save a stored server key first.",ttsCleared:"Stored TTS key cleared",ttsClearFailed:"Failed to clear stored TTS key",storedBaseUrlsTitle:"Stored Base URLs",storedBaseUrlsHint:"Saved voice provider endpoints. Field-level inputs only clear the current value; delete saved endpoints here.",storedBaseUrlsEmpty:"No custom voice Base URLs are saved on the server.",storedBaseUrlDelete:"Delete URL",storedApiKeysTitle:"Stored API keys",storedApiKeysHint:"Masked list of server-stored voice API keys. Only provider/source is shown; raw keys are never displayed.",storedApiKeysEmpty:"No voice API keys are stored on the server.",storedKeyKindTts:"TTS",storedKeyKindStt:"STT",storedApiKeyMasked:"[stored]",storedApiKeyDelete:"Delete key",baseUrlPresetClear:"Clear URL",baseUrlPresetCleared:"Base URL cleared from the field.",baseUrlPresetDelete:"Delete URL",baseUrlPresetDeleted:"Base URL removed from saved list.",baseUrlPresetDeleteFailed:"Failed to remove saved Base URL.",ttsPendingSecret:"New key will be saved",ttsStoredSecret:"Server has stored key: {value}",ttsClearKey:"Clear stored key",sttTitle:"Speech-to-text",sttProvider:"STT Provider",sttProviderHint:"Choose how voice input is transcribed",sttProviderBrowser:"Browser",sttProviderOpenai:"OpenAI-compatible",sttProviderCustom:"Custom",sttBrowserHint:"Use built-in browser speech recognition when available.",sttApiKey:"API Key",sttApiKeyHint:"Stored server-side for STT providers that require authentication.",sttStoredSecret:"Stored server key: {value}",sttPendingSecret:"Stored server key: will be updated on save",sttClearKey:"Clear stored key",sttModel:"Model",sttModelHint:"Speech-to-text model to use.",sttLanguage:"Language",sttLanguageHint:"Optional language hint such as en or zh.",sttPrompt:"Prompt",sttPromptHint:"Optional transcription prompt.",sttAudioTranscode:"Audio transcoding",sttAudioTranscodeNone:"Send original audio",sttAudioTranscodeFfmpeg:"Convert to WAV with ffmpeg",sttBaseUrl:"Base URL",sttBaseUrlHint:"Custom OpenAI-compatible speech-to-text endpoint.",sttSave:"Save STT settings",sttSaved:"STT settings saved on server.",sttSaveFailed:"Failed to save STT settings.",sttCleared:"Stored STT secret cleared from server.",sttClearFailed:"Failed to clear stored STT secret.",sttActiveSaved:"Active STT provider saved on server.",sttSaveActive:"Save active STT provider",sttEndpointHint:"Final transcription endpoint: {endpoint}",sttTestTitle:"Test speech-to-text",sttTestButton:"Test STT API",sttTestStopButton:"Stop and transcribe",sttTestBackendOnly:"STT API test is available for OpenAI-compatible and Custom providers.",sttTestRecording:"Recording test sample… click Stop and transcribe when done.",sttTestTranscribing:"Transcribing test sample…",sttTestEmpty:"No audio was captured for the STT test.",sttTestSucceeded:"STT test succeeded.",sttTestFailed:"STT test failed: {error} — {hint}",sttFailureHintMissingConfig:"Check that the provider is saved with a base URL/model and an API key before testing.",sttFailureHintAuth:"Check the API key. If a key was already stored, paste the current key again and save before testing.",sttFailureHintForbidden:"The key reached the provider but does not have permission for this STT model or account. Check provider access/billing.",sttFailureHintEndpointModel:"Check the Base URL and model. For Groq, use {endpoint} with whisper-large-v3-turbo or another Groq STT model.",sttFailureHintModel:"Check that the selected STT model exists and is enabled for this account.",sttFailureHintQuota:"The provider reports quota, billing, or rate-limit trouble. Check account quota/billing or retry later.",sttFailureHintNetworkCustom:"The server could not reach the custom STT endpoint. Check that {endpoint} is reachable from the Web UI server and is OpenAI-compatible.",sttFailureHintNetwork:"The Web UI server could not reach the STT provider. Check network/proxy/firewall and retry.",sttFailureHintAudio:"The recorded audio was empty or rejected. Try a short clear sample, allow microphone access, or retry in Chrome.",sttFailureHintGenericCustom:"Check API key, Base URL, model, and the final endpoint {endpoint}.",sttFailureHintGeneric:"Check API key, model, and provider account access, then retry.",sttTestRecordFailed:"Could not start microphone recording: {error}",sttTestTranscript:"Transcript: {text}",ttsProvider:"TTS Provider",ttsProviderHint:"Choose the text-to-speech engine for message playback",providerWebSpeech:"WebSpeech API (Browser)",providerOpenai:"OpenAI TTS",providerCustom:"Custom Endpoint (OpenAI-compatible)",providerEdge:"Edge TTS (Free, no API Key)",webspeechVoice:"Voice",webspeechVoiceHint:"Select a voice from your browser or OS",webspeechVoicePlaceholder:"Auto (default voice)",openaiKey:"API Key",openaiKeyHint:"Your OpenAI API key with TTS access",openaiUrl:"API Base URL",openaiUrlHint:"e.g. https://api.openai.com/v1/audio/speech",openaiModel:"Model",openaiModelHint:"tts-1 (faster) / tts-1-hd (higher quality)",openaiVoice:"Voice",openaiVoiceHint:"Voice to use for synthesis",customHint:"Use any OpenAI-compatible TTS API — works with GPT-SoVITS, CosyVoice, etc.",customUrl:"API URL",customUrlHint:"Base URL of your TTS service",customUrlPlaceholder:"The address configured in the local adapter, e.g. http://127.0.0.1:9880",customApiKey:"API Key (Optional)",customApiKeyHint:"Some custom endpoints require authentication",customApiKeyPlaceholder:"Leave blank if not needed",edgeHint:"Powered by Microsoft Edge TTS (node-edge-tts).",edgeUrl:"Adapter URL",edgeUrlHint:"Address of your Edge TTS adapter, e.g. http://127.0.0.1:9882",edgeUrlPlaceholder:"http://127.0.0.1:9882",edgeVoice:"Voice",edgeVoiceHint:"Select a voice for speech synthesis",edgeRate:"Speed",edgeRateHint:"Adjust speech speed (0.5x ~ 2.0x)",edgePitch:"Pitch",edgePitchHint:"Adjust speech pitch (-20 ~ +20 Hz)",testTitle:"Test Voice",testText:"Test Text",testTextPlaceholder:"Enter text to test...",testTextDefault:"Hello, this is a voice test.",testButton:"Test",testButtonPlaying:"Playing...",testFailed:"Test failed: {error}",providerMimo:"MiMo TTS",mimoHint:"Xiaomi MiMo TTS — supports preset voices, voice design, and voice clone modes",mimoApiKey:"API Key",mimoApiKeyHint:"Get your key at platform.xiaomimimo.com",mimoApiKeyPlaceholder:"MiMo API Key",mimoAuthMode:"Authentication Mode",mimoAuthModeHint:"Header format expected by the selected MiMo endpoint",mimoAuthModeBearer:"Bearer token (Authorization)",mimoAuthModeApiKey:"API key header (api-key)",mimoAuthModeBoth:"Both headers",mimoBaseUrl:"Base URL",mimoBaseUrlHint:"MiMo API endpoint URL",mimoModel:"Model",mimoModelHint:"Select speech synthesis model",mimoModelPreset:"Preset Voices",mimoModelVoiceDesign:"Voice Design",mimoModelVoiceClone:"Voice Clone",mimoVoice:"Voice",mimoVoiceHint:"Select a preset voice",mimoVoiceDesignPrompt:"Voice Description",mimoVoiceDesignPromptHint:"Describe the voice characteristics you want",mimoVoiceDesignPromptPlaceholder:"e.g., A warm young female voice, slightly slow, with a magnetic tone",mimoCloneAudio:"Upload Audio",mimoCloneAudioHint:"Upload an audio sample for voice cloning (mp3/wav, max 10MB)",mimoCloneAudioUpload:"Choose File",mimoCloneAudioClear:"Clear",mimoStylePrompt:"Style Prompt",mimoStylePromptHint:"Optional — describe the speaking style in natural language",mimoStylePromptPlaceholder:"e.g., Bright and bouncy tone, fast pace"}},githubPreview:{title:"Version Preview",description:"Clone a selected GitHub tag into the Web UI preview workspace, install dependencies, and run it with the development ports.",refresh:"Refresh",selectTag:"Select a tag",prepare:"Prepare Code",install:"Install Dependencies",start:"Start Preview",stop:"Stop",note:"Preview code is stored under the Web UI data home. Production remains on port 8648; preview development runs on frontend 8651 and backend 8650.",path:"Preview Path",webuiHome:"Preview Data Home",currentTag:"Current Tag",repoReady:"Repository Ready",dependencies:"Dependencies Installed",running:"Running",notRunning:"Not running",open:"Open Preview",log:"Action Log Path",logOutput:"Log Output",actionLog:"Action Log",devLog:"Dev Server Log",yes:"Yes",no:"No",actionFailed:"Action failed",nodeEnvironmentMissing:"Node/npm was not detected. Please install Node.js and try again.",prepareSuccess:"Preview code is ready",installSuccess:"Dependencies installed",startSuccess:"Preview completed",stopSuccess:"Preview stopped"},codingAgents:{title:"Coding Agents",notice:"Not all providers and models are compatible.",claudeDescription:"Anthropic CLI for one-shot print mode and interactive coding sessions.",codexDescription:"OpenAI CLI and Hermes openai-codex provider flow for repository tasks.",copyCommand:"Copy",commandCopied:"Command copied",commandCopyFailed:"Copy failed",refresh:"Refresh",checking:"Checking",installStatus:"Install status",installed:"Installed",notInstalled:"Not installed",installRequired:"{agent} is not installed. Install it before creating a session.",installNow:"Install",installing:"Installing",installSuccess:"Installed",installFailed:"Install failed",installFailedHermesHint:"Installation failed. Ask Hermes to install it for you.",installFailureReason:"Reason",nodeEnvironmentMissing:"Node/npm was not detected. Please install Node.js and try again.",deleteNow:"Delete",deleting:"Deleting",deleteSuccess:"Deleted",deleteFailed:"Delete failed",configFiles:"Config files",profileScope:"Profile",providerScope:"Provider",providerPlaceholder:"e.g. custom:glm",modelScope:"Model",modelPlaceholder:"Select model",launchModeScope:"Launch mode",launchModeGlobal:"Global config",launchModeScoped:"Provider and model",protocolScope:"Protocol",protocolOpenAiChat:"OpenAI Chat Completions (/v1/chat/completions)",protocolOpenAiResponses:"OpenAI Responses (/v1/responses)",protocolAnthropicMessages:"Anthropic Messages (/v1/messages)",reloadConfig:"Reload config",configFileNotCreated:"Not created",configLoadFailed:"Failed to read config file",loadFailed:"Failed to inspect coding agents",launch:"Launch",launchTitle:"Launch Coding Agent",nativeTerminal:"Native Terminal",builtInTerminal:"Built-in Terminal",launchPrepared:"Launch config prepared",launchPrepareFailed:"Failed to prepare launch config",nativeLaunchStarted:"Native terminal opened",nativeLaunchFailed:"Failed to open native terminal",terminalTitle:"Coding Agent Terminal",loadProvidersFailed:"Failed to load providers for the current profile",selectProviderModel:"Select a provider and model",launchConfigDir:"Launch config directory",launchCommand:"Launch command",table:{tool:"Tool",kind:"Step",command:"Command",note:"Note",action:"Action"},kinds:{install:"Install",auth:"Auth",health:"Health",run:"Run"},notes:{claudeInstall:"Installs the Claude Code CLI globally.",codexInstall:"Installs the Codex CLI globally.",claudeAuth:"Checks Claude Code login state; run claude once if login is missing.",codexAuth:"Adds Hermes-managed OpenAI Codex OAuth credentials.",claudeHealth:"Checks updater and local CLI health.",codexHealth:"Confirms the Codex CLI is available on PATH.",claudeRun:"Print mode is the cleanest path for API-driven one-shot tasks.",codexRun:"Codex one-shot tasks must run inside a git repository."}},platform:{requireMention:"Require {'@'}Mention",requireMentionGroup:"Require {'@'}mention in groups to respond",requireMentionChannel:"Require {'@'}mention in channels to respond",requireMentionRoom:"Require {'@'}mention in rooms to respond",reactions:"Reactions",reactionsHint:"React to messages with emoji",freeResponseChats:"Free Response Chats",freeResponseChatsHint:"Chat IDs that respond without {'@'}mention (comma-separated)",freeResponseChannels:"Free Response Channels",freeResponseChannelsHint:"Channel IDs that respond without {'@'}mention (comma-separated)",freeResponseRooms:"Free Response Rooms",freeResponseRoomsHint:"Room IDs that respond without {'@'}mention (comma-separated)",mentionPatterns:"Custom Mention Patterns",mentionPatternsHint:"Additional trigger patterns",autoThread:"Auto Thread",autoThreadHint:"Auto-create reply threads after {'@'}mention",autoThreadHintRoom:"Auto-create reply threads in rooms",dmMentionThreads:"DM Mention Threads",dmMentionThreadsHint:"Use thread replies for mentions in DMs",allowBots:"Allow Bot Messages",allowBotsHint:"Respond to messages from other bots",allowedChannels:"Allowed Channels",allowedChannelsHint:"Whitelist channel IDs (comma-separated)",ignoredChannels:"Ignored Channels",ignoredChannelsHint:"Channels where bot never responds (comma-separated)",noThreadChannels:"No-Thread Channels",noThreadChannelsHint:"Channels where bot responds without threads (comma-separated)",exclusiveTokenWarning:"This platform uses exclusive token locking. Each profile must use a different identity token to avoid conflicts with other profiles.",clearCredentials:"Clear credentials",clearCredentialsConfirm:'Clear stored credentials for "{name}"? Channel behavior and access controls will be kept.',credentialsCleared:"Channel credentials cleared",clearCredentialsFailed:"Failed to clear channel credentials",clearCredentialsUnsaved:"Save or discard unsaved channel changes before clearing credentials.",clearCredentialsGatewayRestartFailed:"Credentials were cleared, but the gateway could not be restarted automatically.",clearCredentialsGatewayRestartDisabled:"Credentials were cleared, but gateway auto-restart is disabled. Restart the gateway manually to apply the change.",botToken:"Bot Token",botTokenHint:"Bot token from developer portal",proxyUrl:"Proxy URL",proxyUrlHint:"Optional platform proxy. Supports http://, https://, and socks5://",accessToken:"Access Token",accessTokenHint:"Matrix access token",homeserver:"Homeserver URL",homeserverHint:"Matrix homeserver URL",matrixUserId:"Matrix User ID",matrixUserIdHint:"Required with password login; optional with access token",matrixPassword:"Matrix Password",matrixPasswordHint:"Alternative to an access token",appId:"App ID",appIdHint:"Feishu App ID",appSecret:"App Secret",appSecretHint:"Feishu App Secret",encryptKey:"Encrypt Key",encryptKeyHint:"Feishu Encrypt Key",verificationToken:"Verification Token",verificationTokenHint:"Feishu Verification Token",clientId:"Client ID",clientIdHint:"DingTalk Client ID",clientSecret:"Client Secret",clientSecretHint:"DingTalk Client Secret",cardTemplateId:"AI Card Template ID",cardTemplateIdHint:"DingTalk AI Card template ID; leave empty to disable AI Cards",allowedUsers:"Allowed Users",allowedUsersHint:"Whitelist user IDs or OpenIDs (comma-separated)",allowAllUsers:"Allow All Users",allowAllUsersHint:"Allow messages from any user; keep off to use the allowlist",botId:"Bot ID",botIdHint:"WeCom Bot ID",wecomSecretHint:"WeCom Bot Secret",waEnabled:"Enable WhatsApp",waEnabledHint:"Enable WhatsApp via QR code pairing",weixinToken:"Weixin Token",weixinTokenHint:"From weixin CLI QR login (hermes weixin)",accountId:"Account ID",accountIdHint:"Weixin account ID",qrLogin:"QR Login",qrRelogin:"Re-login",qrFetching:"Fetching QR code...",qrScanHint:"Scan with WeChat to login",qrScanedHint:"Scaned, please confirm on phone...",qqAppId:"App ID",qqAppIdHint:"QQ Open Platform Bot App ID",qqAppSecret:"App Secret",qqAppSecretHint:"QQ Open Platform Bot App Secret",qqMarkdown:"Markdown Support",qqMarkdownHint:"Enable Markdown formatted messages (some clients may not support)",qqSandbox:"Sandbox Mode",qqSandboxHint:"Enable sandbox environment (for testing)",qqQrScanHint:"Scan the QR code with QQ, or open the link on your phone to complete binding"},language:{label:"Language",zh:"中文",en:"English"},terminal:{sessions:"Sessions",newTab:"New Terminal",closeSession:"Close this session?",sessionExited:"Exited",processExited:"Process exited with code {code}",noSessions:"No terminal sessions",connectionFailed:"Terminal service connection failed",connectionClosed:"Terminal connection closed",connectionError:"Terminal connection error"},groupChat:{agentLinkButton:"Bring your Agent",agentOwner:"Owner: {name}",agentLinkTitle:"Bring an Agent into this room",agentLinkDescription:"Connect to your own Hermes service. The service makes an outbound encrypted connection; the room never receives its login credential or workspace access.",agentLinkTargetUrl:"Your Hermes service URL",agentLinkTargetPlaceholder:"http://127.0.0.1:8748 or https://your-hermes.example.com",agentLinkTargetRequired:"Enter a Hermes service URL.",agentLinkInvalidTarget:"Enter an HTTP or HTTPS origin without credentials, a path, query, or fragment.",agentLinkOpenTarget:"Sign in and choose Agent",agentLinkPopupBlocked:"The authorization window was blocked. Allow pop-ups for this page and try again.",agentLinkParentUnavailable:"The authorization window lost its connection to the invite page. Close it and start again.",agentLinkParentUnconfirmed:"The invite page did not confirm this request. Keep it open and start authorization again.",agentLinkIncompleteConfiguration:"Select a complete Profile, provider, and model before requesting access.",agentLinkWaitingApproval:"Waiting for the room owner to approve this Agent…",agentLinkApproved:"Approved. Connecting your Agent…",agentLinkConnected:"Your Agent is connected to the room.",agentLinkError:"Could not connect this Agent.",agentLinkRejected:"The room owner rejected this Agent request.",agentLinkExpired:"This Agent request expired. Start a new request.",agentLinkPairingCode:"Manual pairing code",agentLinkPairingCodeHint:"If the authorization window cannot communicate with this page, paste this short-lived code into that window.",agentLinkCopyCode:"Copy pairing code",agentLinkAuthorizeTitle:"Authorize group chat Agent",agentLinkAuthorizeDescription:"Choose a local Agent to connect. The group can send it messages, but cannot browse your local workspace.",agentLinkSelectAgent:"Agent",agentLinkRequestConnection:"Request connection",agentLinkOrPairingCode:"or use a manual pairing code",agentLinkPairingCodePlaceholder:"Paste an HGC1 pairing code",agentLinkConnect:"Connect Agent",agentLinkSecurityHint:"Only approve a room you recognize. Pairing tickets are single-use and expire shortly.",agentLinkLoadFailed:"Could not load local Agents.",agentLinkConnectFailed:"Could not connect the selected Agent.",agentLinkInvalidPairingCode:"This pairing code is invalid.",agentLinkClose:"Close",agentLinkApprovalMismatch:"The connection request changed after you approved it. Review the Agent and try again.",guestAgentsDisabled:"The room owner has not enabled guest Agents.",guestAgentSettings:"Guest Agent connections",allowGuestAgents:"Allow members to bring their own Agents",maxGuestAgentsPerMember:"Maximum Agents per member",ownerApprovalHint:"Every Agent still requires explicit room-owner approval.",allowRemoteWorkspaceAccess:"Allow remote Agents to read and write the group workspace",remoteWorkspaceAccessHint:"When enabled, approved remote Agents receive short-lived access for each run. Sensitive files and paths outside the room workspace remain blocked.",agentPairingRequestTitle:"Agent connection request",agentPairingRequestDescription:"{user} wants to connect an Agent from {origin}.",approveAgent:"Approve Agent",rejectAgent:"Reject",agentPairingApproved:"Agent connection approved",agentPairingRejected:"Agent connection rejected",title:"Group Chat",refactorNoticeTitle:"Group Chat Upgrade",refactorNoticeMessage:"Group chat has undergone a major redesign. If a room can no longer send messages, please create a new room.",emptyState:"Start a group conversation",createRoom:"Create Room",joinByCode:"Join by Code",shareTitle:"Join the conversation",shareSubtitle:"Enter the invite code to join. No account sign-in is required.",shareCodeHint:"This invite only grants access to its group chat room.",shareInvalidCode:"This invite code is invalid or has been updated. Ask the person who shared it for a new link.",shareJoining:"Joining group chat…",shareNameSubtitle:"Choose a name before entering the room.",shareNameConflict:"That name is already in use in this room. Choose another name.",shareNameReserved:"That name is reserved. Choose another name.",shareEnterRoom:"Enter room",roomName:"Room Name",roomNamePlaceholder:"Enter room name",inviteCode:"Invite Code",inviteCodeSettings:"Invite code settings",inviteCodePlaceholder:"Enter a new invite code",generateInviteCode:"Generate invite code",inviteCodeRotateHint:"Updating the invite code invalidates the previous code for new joins.",inviteCodeUpdated:"Invite code updated",inviteCodeUpdateFailed:"Failed to update invite code",autoGenerate:"Auto-generate",noRooms:"No rooms yet",localRooms:"Local",remoteRooms:"Remote",remoteRoomOffline:"The remote connection is offline.",renameRemoteRoom:"Rename remote room",renameRemoteRoomHint:"This changes only how the room is shown on this device.",remoteRoomRenamed:"Remote room display name updated",remoteRoomRenameFailed:"Failed to update the remote room display name",leaveRemoteRoom:"Leave room",leaveRemoteRoomConfirm:"Leave “{name}”? All Agents connected from this device will be removed from the remote room, and its local connection records will be deleted.",remoteRoomLeft:"Left remote room",remoteRoomLeaveFailed:"Failed to leave the remote room",remoteRoomLeavePartial:"Local records were removed, but {count} remote Agent connection(s) could not be notified because the remote room was offline.",selectOrCreate:"Select or create a room to start chatting",agents:"Agents",allAgents:"All Agents",addAgent:"Add Agent",agentType:"Agent",agentTypes:{hermes:"Hermes",ekko:"Ekko",codex:"Codex",claude:"Claude"},selectProfile:"Select a profile",agentAdded:"Agent added",selectRoomFirst:"Please select a room first",agentAlreadyInRoom:"Agent already in this room",agentAddFailedCount:"{count} agent(s) were not added: {details}",editAgentTitle:"Edit {name}",removeMember:"Remove",memberRemoved:"{name} was removed from the room",memberRemovedNotice:"The room owner removed you from this room. You can enter again while the invite remains valid.",noAgents:"No agents in this room",members:"{count} members",roomCreated:"Room created",roomDeleted:"Room deleted",roomCloned:"Room cloned",cloneRoom:"Clone room",copyRoomLink:"Copy Room Link",manualCopyRoomLinkHint:"The browser could not copy automatically. Select the link and copy it manually.",deleteRoomConfirm:"Delete this room?",clearContext:"Clear context",clearContextConfirm:"Clear this room context? Messages and compression snapshots will be removed, but agents and members stay.",contextCleared:"Context cleared",you:"You",joined:"Joined room",joinFailed:"Failed to join room",inputPlaceholder:"Type a message... (Enter to send)",messageDisplayLimit:"Group chat displays up to 600 messages",enterCode:"Enter invite code",yourName:"Your Name",yourNamePlaceholder:"Enter your display name",yourDescription:"Description (optional)",yourDescriptionPlaceholder:"Tell others who you are...",agentName:"Agent Name",agentNamePlaceholder:"Custom name (leave empty to use profile name)",agentDesc:"Agent Description",agentDescPlaceholder:"Describe what this agent does...",agentReplying:"is replying...",agentCompressing:"is compressing context...",compressionSettings:"Compression Settings",triggerTokens:"Trigger Tokens",triggerTokensDesc:"Token threshold to trigger context compression",maxHistoryTokens:"Max History Tokens",maxHistoryTokensDesc:"Maximum tokens for compressed context sent to LLM",tailMessageCount:"Tail Message Count",tailMessageCountDesc:"Number of recent messages to keep verbatim after compression",compressionConfig:"Compression Config",compressionSaved:"Compression config saved",roomSettings:"Room Settings",saveCompression:"Save compression",compressNow:"Compress Now",compressingInProgress:"Compression in progress, please wait",summarySettings:"Rolling Summary",summarySettingsDesc:"A clean Ekko Agent updates the shared room summary after the configured number of completed human turns.",summaryProvider:"Summary Provider",summaryProviderPlaceholder:"Select a provider",summaryModel:"Summary Model",summaryModelPlaceholder:"Select a model",summaryApiMode:"API Mode",summaryEveryTurns:"Summarize Every N Turns",summaryEveryTurnsDesc:"One turn is one human message. Agent runs wait for the room summary boundary to be committed.",summaryConfigSaved:"Summary settings saved",summaryConfigurationRequired:"This room has no summarizer yet. Select a profile, provider, model, and API mode, then save.",summaryConfigurationOwnerRequired:"This room has no summarizer yet. Ask a room administrator to configure it before sending messages.",saveSummaryConfig:"Save summary settings",currentSummary:"Current Summary",summaryStatus:{idle:"Pending",summarizing:"Summarizing",success:"Succeeded",failed:"Failed"},summaryUpdatedAt:"Last updated",summarizedTurns:"Summarized turns",summaryAnchor:"Summary anchor",summaryMessagesAbove:"Messages above summarized",summaryNoAnchor:"No anchor yet",summaryContent:"Summary content",summaryEmpty:"No summary yet",summaryEditKeepsAnchor:"Editing the summary changes its text only and keeps the current anchor.",saveSummary:"Save summary",summaryUpdated:"Summary updated",summaryNever:"Never",summaryLoadFailed:"Failed to load room summary"},usage:{title:"Usage Statistics",refresh:"Refresh",totalTokens:"Total Tokens",inputTokens:"Input",outputTokens:"Output",totalSessions:"Total Sessions",avgPerDay:"~{n}/day avg",estimatedCost:"Est. Cost",cacheHitRate:"Cache Hit Rate",modelBreakdown:"Model Breakdown",agentBreakdown:"Agent Breakdown",agents:{hermes:"Hermes Agent",claudeCode:"Claude Code",codex:"Codex",ekkoAgent:"Ekko Agent",unknown:"Unknown"},dailyTrend:"Daily Usage",date:"Date",tokens:"Tokens",cache:"Cache",cacheRead:"Cache Read",cacheWrite:"Cache Write",sessions:"Sessions",cost:"Cost",noData:"No usage data"},skillsUsage:{title:"Skills Usage",subtitle:"Track skill loads and edits from Hermes sessions",refresh:"Refresh",periodSelector:"Skill usage period",periodLabel:"{days}d",summary:"Summary",totalActions:"Actions",loads:"Loads",edits:"Edits",distinctSkills:"Skills",topSkills:"Top Skills",dailyTrend:"Daily Trend",periodSummary:"Last {days} days",skill:"Skill",share:"Share",lastUsed:"Last Used",noData:"No skill usage data",loadFailed:"Failed to load skill usage",otherSkills:"Other skills"},files:{title:"Files",fileTree:"File Tree",tree:"Directory Tree",list:"File List",breadcrumbRoot:"Home",newFile:"New File",newFolder:"New Folder",upload:"Upload",refresh:"Refresh",open:"Open",edit:"Edit",preview:"Preview",download:"Download",copyPath:"Copy Path",attachToChat:"Add to Chat",attachFailed:"Failed to add file to chat",rename:"Rename",delete:"Delete",name:"Name",size:"Size",modified:"Modified",actions:"Actions",emptyDir:"Empty directory",loading:"Loading...",confirmDelete:'Are you sure you want to delete "{name}"?',confirmDeleteDir:'Are you sure you want to delete directory "{name}" and all its contents?',deleteFailed:"Delete failed",deleted:"Deleted",renameTo:"Rename to",newFileName:"File name",newFolderName:"Folder name",created:"Created",createFailed:"Create failed",renamed:"Renamed",renameFailed:"Rename failed",uploadSuccess:"Uploaded {count} file(s)",uploadFailed:"Upload failed",saveFailed:"Save failed",saved:"Saved",unsavedChanges:"You have unsaved changes. Discard?",pathCopied:"Path copied",fileTooLarge:"File too large (max 10MB)",permissionDenied:"Cannot modify protected file",notFound:"File or directory not found",backendError:"File operation failed",dragDropHint:"Drag files here to upload",closeEditor:"Close Editor",closePreview:"Close",saveFile:"Save",previewMode:"Preview",sourceMode:"Source",tableMode:"Table",worksheet:"Worksheet",htmlPreviewTitle:"Sandboxed HTML preview",previewLoading:"Loading preview...",previewFailed:"Preview unavailable",previewMimeMismatch:"The file type did not match the requested preview format.",downloadInstead:"Download instead",previousPage:"Previous",nextPage:"Next",pageStatus:"Page {page} of {total}",zoom:"Zoom",pdfPageLimit:"Preview is limited to the first {count} pages.",tableTruncated:"The preview was truncated to keep the interface responsive. Download the file to inspect all rows and columns."},download:{downloading:"Downloading...",downloadFailed:"Download failed",fileNotFound:"File not found or deleted",fileTooLarge:"File too large (exceeds limit)",backendError:"File read failed, remote environment may be unavailable",backendTimeout:"File read timed out",unsupportedBackend:"Current terminal backend does not support file download",invalidPath:"Invalid file path",contentDisplay:"Content display",download:"Download",downloadFile:"Download file"},changelog:{new_0_6_41_1:"Local STT now works reliably in npm-installed Hermes Web UI by pinning sherpa-onnx native runtimes to the same version as the Node.js wrapper on macOS, Windows, and Linux (#2464)",new_0_6_40_1:"This release covers all 40 PRs merged after v0.6.39, spanning secure remote Group Chat, local speech recognition, Workflow scheduling, global approvals, Chat Run webhooks, MCU, and Coding Agent reliability",new_0_6_40_2:"Group Chat adds secure shared rooms and remote Agents, stabilizes Agent handoff, presence, and revocation, preserves offline owner avatars, and offers manual room-link copy when clipboard APIs are unavailable (#2408, #2410, #2411, #2415, #2423)",new_0_6_40_3:"Remote Agents can transfer files and upload to cloud workspaces. Requests from non-owners now enforce tighter workspace, sensitive-information, and private-memory boundaries, with corrected ownership and approval routing (#2413, #2430, #2433, #2435)",new_0_6_40_4:"Group Chat stops migrating legacy Agent Links and separates collapsible local and remote room lists, with local aliases for remote rooms, share-page navigation, and complete leave cleanup (#2424, #2459)",new_0_6_40_5:"Group Chat keeps history without automatic pruning, safely persists Tool results containing mentions with bounded message IDs, and fixes orphaned tools, approval alignment and routing, plus event-loop starvation during token accounting (#2390, #2420, #2426, #2427, #2429, #2445)",new_0_6_40_6:"Recent-session and Group Chat activity feedback is more immediate, and the Tool panel expands with a smooth animation (#2389, #2414)",new_0_6_40_7:"Global approvals can adopt existing prompts, show clearer command previews, and send system notifications for pending actions (#2406, #2425, #2432)",new_0_6_40_8:"New sherpa-onnx Chinese-English local streaming STT preserves final words with trailing silence and uses Electron-compatible audio buffers on macOS and Windows (#2447, #2448, #2461)",new_0_6_40_9:"Workflow adds durable scheduled runs and a complete schedule-management UI for creating, editing, enabling, disabling, and deleting schedules (#2434, #2441)",new_0_6_40_10:"Chat Run lifecycle webhooks arrive while the unused legacy endpoint is removed, and the server gains a lightweight liveness endpoint (#2422, #2452, #2453)",new_0_6_40_11:"MCU can select between Ekko and Hermes Agent runtimes, while Global Agent avatars and MCU status indicators now resolve accurately (#2438, #2442)",new_0_6_40_12:"Coding Agent now requires an execution identity and fixes Windows run-persistence isolation, MCP timeouts, cross-model reasoning replay, context-usage estimates, and duplicate Studio guidance (#2387, #2392, #2395, #2396, #2398, #2416)",new_0_6_40_13:"MoA presets expose per-model reasoning effort, and image generation disables Responses storage to avoid unnecessary remote retention (#2439, #2449)",new_0_6_39_1:"Ekko Agent now initializes explicitly, runs bounded Node.js or Python code behind tool approvals, and can pause foreground runs for text or multiple-choice clarification before resuming (#2362, #2368)",new_0_6_39_2:"Group Chat waits for room-join acknowledgement before sending, fixing intermittent “Not in room” errors around reconnects. Typing is now a throttled heartbeat shown only as a text-free breathing light on other members’ avatars (#2373)",new_0_6_39_3:"Coding Agent tool events in Single Chat and Group Chat now follow the native CLI lifecycle and emit one start after arguments complete, removing duplicate or stranded tool cards and one-character-at-a-time tool JSON lag in large rooms (#2366, #2372)",new_0_6_39_4:"Coding Agent prompts now travel through stdin, preserving multiline and image input while avoiding Windows command-length limits. Group Chat also no longer interrupts active Codex, Claude Code, or Ekko work after a fixed two minutes (#2354, #2357)",new_0_6_39_5:"Codex now treats native JSONL and process exit as authoritative across recoverable Provider proxy disconnects, preventing completed work from being reported as a Group Chat failure (#2375)",new_0_6_39_6:"Version Management validates Runtime completeness and shows desktop fallback reasons. Invalid Runtimes cannot be activated, and Web UI download or switching controls are hidden because updates continue through the desktop installer (#2353)",new_0_6_39_7:"Group Chat run headers now keep only the Agent name, removing repeated descriptions for cleaner message groups (#2352)",new_0_6_39_8:"ESP32-C3 remote connections now keep Socket.IO alive during discovery, reuse bounded voice buffers, reconnect with backoff, and preserve login across transient Studio disconnects, making remote scans and voice turns faster and more reliable (#2383)",new_0_6_38_1:"Windows desktop startup now repairs invalid relative Python homes left in cached Hermes Runtime environments by Agent updates, restoring CLI, logs, and Gateway after an update, Runtime switch, or storage migration",new_0_6_38_2:"The website compatibility catalog recognizes Hermes 0.19.0 again so matching desktop downloads and compatibility checks remain available (#2348)",new_0_6_37_1:"The headline of this 14-PR release is a complete Group Chat rebuild: every Agent can independently choose its Profile, provider, model, API mode, reasoning effort, identity, and workspace (#2334)",new_0_6_37_2:"Group rooms now start fresh isolated runs, keep each reply together with its reasoning and tools, and use a shared editable rolling summary with status, boundaries, Agent mentions, room and workspace drawers, and legacy migration guidance. Voice autoplay prepares different Profile TTS jobs ahead, keeps synthesis single-flight within the same Profile, and plays FIFO so new replies never replace audio already playing (#2334)",new_0_6_37_3:"MiniMax Coding Plan OAuth supports Global and China regions, while authorized Codex, xAI, Anthropic, Nous, and MiniMax credentials now refresh through the persistent Runtime Bridge (#2337)",new_0_6_37_4:"ESP32-C3 v1 and v2 gain optional automatic listening with local VAD, pre-roll audio, silence completion, playback suppression, and preserved push-to-talk controls (#2338)",new_0_6_37_5:"MCU Global Agent now uses concise Ekko voice mode, can delegate safe background work, preserves session history and workspaces, and no longer forwards oversized tool payloads (#2326)",new_0_6_37_6:"Custom and OpenAI-compatible TTS automatically retry provider-supported audio formats and convert non-MP3 output for Hermes playback (#2328)",new_0_6_37_7:"Profile export and import now allow up to ten minutes, surface actionable timeout errors, isolate concurrent archives, sanitize filenames, and clean temporary files (#2310, #2324)",new_0_6_37_8:"Hermes Agent Bridge now applies model-specific reasoning defaults while preserving explicit per-run overrides and the legacy fallback (#2325)",new_0_6_37_9:"Version Management reports the actual installed Hermes Agent version separately from the Runtime path and clarifies CLI update scope and shutdown requirements (#2323)",new_0_6_37_10:"Workspace file trees use tighter indentation so deeply nested names remain visible (#2340)",new_0_6_37_11:"Desktop now targets Hermes Agent 0.20.0, builds from pinned source, pins portable Node and npm, accepts regenerated Windows launchers, supports updates without system Python, and keeps the managed gateway hidden (#2321, #2344)",new_0_6_37_12:"Windows Runtime storage migration now handles update-generated links without administrator privileges, rebases Python, supports Unicode custom paths, and refreshes CLI and MCP shims on the first restart (#2345)",new_0_6_37_13:"macOS desktop signing now uses an explicit temporary keychain compatible with strict macOS 26 runners for both architectures (#2315)",new_0_6_36_1:"This release covers all 28 PRs merged after 0.6.35, spanning voice, Arabic and RTL, App Relay, Agent reliability, chat UX, Kanban, Journey, MCU subtitles, and Ekko request logging",new_0_6_36_2:"Voice settings are unified in Models for Hermes-native and Web UI providers; Custom TTS supports voice selection, and Edge TTS accepts any voice ID with Arabic options (#2260, #2265, #2267)",new_0_6_36_3:"Arabic and end-to-end RTL support now cover document flow, Naive UI, chat, Group Chat, Workflow, overlays, drawers, per-block text direction, and corrected Profile wording (#2269, #2270, #2271, #2273, #2277, #2294, #2303)",new_0_6_36_4:"Active background delegations now keep their Agent Bridge sessions alive until work finishes, preventing idle cleanup from interrupting long-running tasks (#2254)",new_0_6_36_5:"Desktop Group Chat Agent lists are clickable again, and the main window can be resized down to 769 px without entering the mobile layout (#2259, #2263)",new_0_6_36_6:"Workspace diffs from Codex, Claude Code, and Ekko now appear only on the exact Assistant message that produced them across live, restored, and group chats (#2264)",new_0_6_36_7:"The English and Chinese READMEs now reflect the current product and CLI, while the obsolete version-pinned 0.6.12 website manual has been removed (#2268)",new_0_6_36_8:"An independent headless App Relay adds secure pairing and authenticated remote access to allowlisted local APIs and chat streaming without exposing Studio directly (#2275)",new_0_6_36_9:"Desktop Agent Browser can safely read long accessible text in bounded pages and activate controls whose snapshot reference resolves to visible text (#2278)",new_0_6_36_10:"Chat UX gains anchored Provider controls, message-based scroll restoration, a compact tool and terminal rail, full-size previews, and full-width workspace diffs (#2279, #2282, #2283, #2293)",new_0_6_36_11:"New Ekko sessions receive isolated, profile-scoped default workspaces while existing and explicitly selected workspaces remain unchanged (#2289)",new_0_6_36_12:"Memory and Skill approval results are now structured and serialized, preventing false success messages and concurrent writes within the same Profile (#2295)",new_0_6_36_13:"Kanban adds reliable task archiving and a pannable board, while Journey becomes a compact, deterministic Memory-to-Skill relationship map (#2296, #2297)",new_0_6_36_14:"Live reasoning remains stable across tool boundaries, is restored to the correct message or tool, and no longer creates empty subagent bubbles (#2299)",new_0_6_36_15:"MCU speech now carries synchronized, paginated GB2312 subtitles on ESP32-C3 v1 and v2 without disrupting audio playback (#2305)",new_0_6_36_16:"Ekko now writes one compact model.request log per model attempt, including context compression, and omits tool_choice whenever no tools are present (#2311)",new_0_6_35_1:"Ekko Agent persistent memory is now enabled in production, with profile-scoped SQLite storage, a 4,000-token automatic recall budget, improved full-store relevance search, and safer model request handling (#2246)",new_0_6_34_1:"This release covers all 21 PRs merged after 0.6.33, spanning per-user themes, Ekko and Coding Agent upgrades, desktop and browser improvements, automation, and reliability fixes",new_0_6_34_2:"Users can customize font size, text and accent colors, and workspace backgrounds with account-scoped persistence and consistent translucent surfaces; Windows chrome and Browser settings follow the theme, and Ekko browser commands now launch correctly on Windows (#2242, #2243, #2244)",new_0_6_34_3:"Ekko is available in production with on-demand skill discovery and multimodal input, while guarded skill evolution, profile-scoped logs, protocol persistence, and Responses reasoning summaries make it safer and more capable (#2215, #2236)",new_0_6_34_4:"Ekko memory adds deterministic structured kinds for preferences, relationships, habits, goals, and more; long conversations now use the shared snapshot-aware context compression lifecycle (#2229, #2230)",new_0_6_34_5:"Coding Agent runs preserve image inputs across Codex, Claude Code, and scoped provider protocols, truncate oversized Responses tool outputs, and isolate runtime configuration and late events by session (#2222, #2232, #2238)",new_0_6_34_6:"Hermes Workflow capability checks no longer reject valid targets without API-mode metadata, Kanban matches Hermes Agent 0.19 task semantics and previews, and Cron Run Now starts safely in the background with stricter creation validation (#2239, #2216, #2228)",new_0_6_34_7:"Desktop adds focused standalone chat windows, allows browser automation in password, payment, and file inputs, and preserves each human member name and description independently per Group Chat room (#2209, #2210, #2212)",new_0_6_34_8:"Session-scoped /yolo toggles approval bypass, Agent maximum turns no longer has a 200-turn UI cap, Markdown preserves straight ASCII quotes, and the pt-BR catalog restores missing diacritics (#2223, #2225, #2234, #2221)",new_0_6_34_9:"ESP32-C3 devices gain configurable connected standby that lowers idle power while preserving Wi-Fi, login, profile, and Socket.IO state, with immediate wake controls and persistent timeout settings (#2218)",new_0_6_33_1:"This release covers all 16 PRs merged after 0.6.32, spanning the desktop Agent Browser, Workflow run evidence and deadlines, file and chat interactions, Provider model refresh, and reliability fixes",new_0_6_33_2:"Desktop adds a visible multi-tab Agent Browser with isolated Profiles, proxy, storage, and download controls, encrypted persistent cookies, guarded Agent actions, and lazy MCP tool discovery (#2177, #2182)",new_0_6_33_3:"Single and Group Chat links and authenticated HTML previews open in the embedded browser; permission spacing, cross-platform navigation icons, and Windows sidebar/title-bar alignment are also refined (#2191, #2194, #2198)",new_0_6_33_4:"Workflow Runs preserve immutable launch-time visuals, expose one total Run or Rerun deadline with elapsed and remaining evidence, and present history and details as paged, consumption-aware views (#2171, #2173, #2180)",new_0_6_33_5:"Files can be pasted directly into single or group chats or attached from the workspace context menu; compact metadata columns leave more room for file names (#2175, #2176)",new_0_6_33_6:"Each configured Provider can refresh its model catalog independently, confirm removals, preserve unavailable defaults, and restore once; OAuth Providers, complete localization, and form autofill behavior are covered (#2115)",new_0_6_33_7:"Abort and pause status is isolated per chat session so background conversations cannot change the active stop control; Desktop text selections and inputs also gain native right-click actions (#2203, #2204)",new_0_6_33_8:"Desktop quit, update, and install flows use bounded graceful shutdown and force-stop remaining Agent Bridge, MCP, browser, and Web UI process trees only after cleanup deadlines (#2193)",new_0_6_33_9:"MCU voice sessions isolate foreground and background results, while MiniMax-compatible MCP tool names stay within provider length limits without breaking existing callers (#2181, #2169)",new_0_6_32_1:"This release covers all 14 PRs merged after 0.6.31, spanning session organization and compression, group chat, Workflow routing, Skill Bundles, Ekko memory, Hermes 0.19, and desktop chrome",new_0_6_32_2:"Group Chat mentions now work after CJK text, emoji, and punctuation, and room owners can view, generate, and rotate invite codes from room settings (#2133, #2141)",new_0_6_32_3:"Workflow preserves each Hermes Bridge run source across handoff and reattachment, while scoped Codex and Claude Code nodes can use launcher-supported protocols for valid API-key targets (#2137, #2154)",new_0_6_32_4:"Sessions gain global categories, more accurate Markdown-aware search ranking, and cursor-based compression that bounds history while remaining correct across edits, branches, and concurrent runs; the compression design is documented in full (#2139, #2143, #2145, #2146)",new_0_6_32_5:"Profile-scoped Skill Bundles can be created, browsed, run, and deleted directly from chat with clear visibility into their contained Skills (#2156)",new_0_6_32_6:"Ekko memory now uses one profile-isolated canonical model with revision-checked mutations, stronger source auditing, and stricter relevance filtering (#2159)",new_0_6_32_7:"Hermes 0.19 interim assistant messages are streamed and stored as distinct bubbles, and ordinary single chats can deliver durable background delegation results asynchronously (#2160)",new_0_6_32_8:"New desktop Runtime builds, fallback paths, and Windows CLI shims now default to Hermes Agent 0.19.0 (#2161)",new_0_6_32_9:"Desktop window controls are integrated into the page chrome: macOS traffic lights live in the sidebar, Windows controls sit above the main content, and Linux keeps native decorations (#2162)",new_0_6_32_10:"Developer documentation now supports both the current checkout and optional isolated Git worktrees (#2155)"}};export{e as default};
|