hermes-web-ui 0.6.30-beta.2 → 0.6.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/dist/client/assets/js/AppSidebar-B8eJvJ5L.js +1 -0
  2. package/dist/client/assets/js/{ChannelsView-DMyeoPl6.js → ChannelsView-rBs9Ylzp.js} +1 -1
  3. package/dist/client/assets/js/{ChatPanel-YZZNE2mg.js → ChatPanel-BjHQvYcw.js} +1 -1
  4. package/dist/client/assets/js/{ChatView-BSWI-pr1.js → ChatView-xEwjnXLo.js} +1 -1
  5. package/dist/client/assets/js/{CodingAgentsView-DGweBEVs.js → CodingAgentsView-DcVwegsz.js} +1 -1
  6. package/dist/client/assets/js/{DefaultCredentialPrompt-DwS2g874.js → DefaultCredentialPrompt-sFeH1odX.js} +1 -1
  7. package/dist/client/assets/js/{DesktopPetView-C2QyaxNu.js → DesktopPetView-DKYjal2v.js} +1 -1
  8. package/dist/client/assets/js/{DesktopTitleBar-CMvwjOsN.js → DesktopTitleBar-YzhbwcwX.js} +1 -1
  9. package/dist/client/assets/js/{DevicesView-3VMSlXCt.js → DevicesView-CnAjn0fI.js} +1 -1
  10. package/dist/client/assets/js/{FileEditor-Dkxlmokr.js → FileEditor-C_tmKjxI.js} +3 -3
  11. package/dist/client/assets/js/{FileRenameModal-o3oS6tv2.js → FileRenameModal-BlqJ8jgZ.js} +2 -2
  12. package/dist/client/assets/js/{FilesView-BlJtiYU7.js → FilesView-Dy8G_exi.js} +1 -1
  13. package/dist/client/assets/js/{FolderPicker-DYQaj8Cc.js → FolderPicker-DEUyd_JU.js} +1 -1
  14. package/dist/client/assets/js/{GlobalAgentView-CGRn1ucS.js → GlobalAgentView-C0NgWvKP.js} +1 -1
  15. package/dist/client/assets/js/{GroupChatView-GXbwwUn9.js → GroupChatView-Mr8SR7nA.js} +2 -2
  16. package/dist/client/assets/js/{HistoryMessageList-B1UsdtzR.js → HistoryMessageList--MuOQ24m.js} +1 -1
  17. package/dist/client/assets/js/{HistoryView-DukXpB7A.js → HistoryView-Boy6KWxz.js} +1 -1
  18. package/dist/client/assets/js/{JobsView-C2IfX4Oo.js → JobsView-5Jun6EjM.js} +2 -2
  19. package/dist/client/assets/js/{JourneyView-UX14Uvsk.js → JourneyView-DAU7N8iU.js} +1 -1
  20. package/dist/client/assets/js/{KanbanView-BFLDXNmq.js → KanbanView-CQOeRquP.js} +1 -1
  21. package/dist/client/assets/js/{LoginView-BMnZx434.js → LoginView-DTdp1xsa.js} +1 -1
  22. package/dist/client/assets/js/{LogsView-CFxOjMBB.js → LogsView-Dr6gD_kA.js} +1 -1
  23. package/dist/client/assets/js/{MarkdownRenderer-RUGb4sbQ.js → MarkdownRenderer-DpSiF5gl.js} +3 -3
  24. package/dist/client/assets/js/{McpManagerView-D46nhm85.js → McpManagerView-BzGj5qqQ.js} +1 -1
  25. package/dist/client/assets/js/{MemoryView-CGvbW1Yq.js → MemoryView-2gPDgre_.js} +2 -2
  26. package/dist/client/assets/js/{MessageItem-rIbgU0g3.js → MessageItem-D91t-tiL.js} +2 -2
  27. package/dist/client/assets/js/{MessageList-7o_1_iPw.js → MessageList-KgA7oDKg.js} +1 -1
  28. package/dist/client/assets/js/{ModelsView-Cdl5HVlO.js → ModelsView-GVgHBsyL.js} +1 -1
  29. package/dist/client/assets/js/{OutlinePanel-BmsAdxB0.js → OutlinePanel-DD6XxWAu.js} +1 -1
  30. package/dist/client/assets/js/{PageSidebarFooter-fp9dcg3s.js → PageSidebarFooter-DFaGG_bk.js} +1 -1
  31. package/dist/client/assets/js/{PerformanceView-asJG1CAC.js → PerformanceView-YI2ecC28.js} +1 -1
  32. package/dist/client/assets/js/{PetdexView-CgsImZ2C.js → PetdexView-Bt4e1TDL.js} +1 -1
  33. package/dist/client/assets/js/{PluginsView-CiiHUv8H.js → PluginsView-BZHzh6V0.js} +1 -1
  34. package/dist/client/assets/js/{ProfileAvatar-CeGhJamd.js → ProfileAvatar-Du1XMoe0.js} +1 -1
  35. package/dist/client/assets/js/{ProfilesView-CPcFsEMn.js → ProfilesView-C02GlAXO.js} +1 -1
  36. package/dist/client/assets/js/{ProviderConfigurationPrompt-CCXQ_nqY.js → ProviderConfigurationPrompt-DbD_q_xl.js} +1 -1
  37. package/dist/client/assets/js/{SessionSearchModal-Chmtohb_.js → SessionSearchModal-CRoerPzU.js} +1 -1
  38. package/dist/client/assets/js/{SettingRow-CxdhcC5J.js → SettingRow-CZ1bK2YG.js} +1 -1
  39. package/dist/client/assets/js/{SettingsCircuitBadge-DmwONg4K.js → SettingsCircuitBadge-2VINGRjT.js} +1 -1
  40. package/dist/client/assets/js/{SettingsView-Bd02BnM7.js → SettingsView-C63TriKv.js} +1 -1
  41. package/dist/client/assets/js/{SkillsUsageView-Cvk_dctX.js → SkillsUsageView-DufR6RDh.js} +1 -1
  42. package/dist/client/assets/js/{SkillsView-BrS15WHY.js → SkillsView-LzeD-ReE.js} +2 -2
  43. package/dist/client/assets/js/{TerminalView-Betjhhzm.js → TerminalView-j3wokVwS.js} +1 -1
  44. package/dist/client/assets/js/{UsageView-gENmuPca.js → UsageView-BVdos-wH.js} +1 -1
  45. package/dist/client/assets/js/{VersionPreviewView-D4wMkRdU.js → VersionPreviewView-D46YOdsc.js} +1 -1
  46. package/dist/client/assets/js/{WebPet-C-F5hsmU.js → WebPet-PrNf1KLw.js} +1 -1
  47. package/dist/client/assets/js/{WorkflowView-DCQycw5y.js → WorkflowView-BWG_o4Lg.js} +1 -1
  48. package/dist/client/assets/js/{abap-Bpce3YCc.js → abap-B5rRrPlH.js} +1 -1
  49. package/dist/client/assets/js/{apex-BZWMlx8R.js → apex-kxpOZZnW.js} +1 -1
  50. package/dist/client/assets/js/architecture-7EHR7CIX-BsCtaKPb.js +1 -0
  51. package/dist/client/assets/js/{architectureDiagram-3BPJPVTR-DgYZW-VJ.js → architectureDiagram-3BPJPVTR-CGR0-xeM.js} +1 -1
  52. package/dist/client/assets/js/{auth-DAz8TLhP.js → auth-QlZVq-Mb.js} +1 -1
  53. package/dist/client/assets/js/{azcli-CU70G-wD.js → azcli-BinA5kBH.js} +1 -1
  54. package/dist/client/assets/js/{bat-_PVMPuXp.js → bat-Cr0qo7tY.js} +1 -1
  55. package/dist/client/assets/js/{bicep-B1C-nHUL.js → bicep-B4C1_29j.js} +1 -1
  56. package/dist/client/assets/js/{blockDiagram-GPEHLZMM-D9eCcYUu.js → blockDiagram-GPEHLZMM-DMRT9qE7.js} +1 -1
  57. package/dist/client/assets/js/{c4Diagram-AAUBKEIU-Cc2j_5Hk.js → c4Diagram-AAUBKEIU-BS013lHX.js} +1 -1
  58. package/dist/client/assets/js/{cameligo-BRxFWUB9.js → cameligo-DQKQuDHg.js} +1 -1
  59. package/dist/client/assets/js/{chat-DASgRGiI.js → chat-BHkNRr2D.js} +1 -1
  60. package/dist/client/assets/js/{chat-input-height-xMpE0zfj.js → chat-input-height-C9XyOGPU.js} +1 -1
  61. package/dist/client/assets/js/{chat-timestamp-B4kSmeEg.js → chat-timestamp-sj8rR29x.js} +1 -1
  62. package/dist/client/assets/js/{chunk-2J33WTMH-CIWIJ3Vy.js → chunk-2J33WTMH-BuvstStb.js} +1 -1
  63. package/dist/client/assets/js/{chunk-3OPIFGDE-D8rNjXTj.js → chunk-3OPIFGDE-DFuFb6Dn.js} +1 -1
  64. package/dist/client/assets/js/{chunk-4BX2VUAB-Be1NT72j.js → chunk-4BX2VUAB-C8f7FKlW.js} +1 -1
  65. package/dist/client/assets/js/{chunk-55IACEB6-D9jngYNS.js → chunk-55IACEB6-DoNUYELD.js} +1 -1
  66. package/dist/client/assets/js/{chunk-5ZQYHXKU-DsBTFfjP.js → chunk-5ZQYHXKU-D0RIlhMr.js} +1 -1
  67. package/dist/client/assets/js/{chunk-727SXJPM-B4ElG_Of.js → chunk-727SXJPM-Dcg9rcP1.js} +1 -1
  68. package/dist/client/assets/js/{chunk-AQP2D5EJ-DqmSdc2v.js → chunk-AQP2D5EJ-BrEs3845.js} +1 -1
  69. package/dist/client/assets/js/{chunk-BSJP7CBP-Dwbw_lcd.js → chunk-BSJP7CBP-2t71L2nD.js} +1 -1
  70. package/dist/client/assets/js/{chunk-CSCIHK7Q-D0eX0NV1.js → chunk-CSCIHK7Q-jw9fZDC9.js} +3 -3
  71. package/dist/client/assets/js/{chunk-FMBD7UC4-Ifok5gk4.js → chunk-FMBD7UC4-CC_5MTtl.js} +1 -1
  72. package/dist/client/assets/js/{chunk-KSCS5N6A-D6b_0Rnx.js → chunk-KSCS5N6A-Ctj260fA.js} +1 -1
  73. package/dist/client/assets/js/{chunk-L5ZTLDWV-eR6nltId.js → chunk-L5ZTLDWV-CF8sc4Ay.js} +1 -1
  74. package/dist/client/assets/js/{chunk-LZXEDZCA-h6nPcsB6.js → chunk-LZXEDZCA-BsmuMR5Z.js} +2 -2
  75. package/dist/client/assets/js/{chunk-ND2GUHAM-vGFiX1jf.js → chunk-ND2GUHAM-CvXXD5FC.js} +1 -1
  76. package/dist/client/assets/js/{chunk-NZK2D7GU-BQcgYAVF.js → chunk-NZK2D7GU-BQeu8oaR.js} +1 -1
  77. package/dist/client/assets/js/{chunk-O5CBEL6O-DqGyu-Fq.js → chunk-O5CBEL6O-D9XUSNoV.js} +1 -1
  78. package/dist/client/assets/js/{chunk-QZHKN3VN-Bf_cn5Px.js → chunk-QZHKN3VN-qz6ukpCd.js} +1 -1
  79. package/dist/client/assets/js/{chunk-WU5MYG2G-3I1ZwKkc.js → chunk-WU5MYG2G-Cv_QOL8q.js} +1 -1
  80. package/dist/client/assets/js/{chunk-XPW4576I-DDUD-9JS.js → chunk-XPW4576I-BQK5_1lO.js} +1 -1
  81. package/dist/client/assets/js/classDiagram-4FO5ZUOK-DudE54ap.js +1 -0
  82. package/dist/client/assets/js/classDiagram-v2-Q7XG4LA2-7vuaSqRj.js +1 -0
  83. package/dist/client/assets/js/{clipboard-DbIDy3AT.js → clipboard-DYlTCW_e.js} +1 -1
  84. package/dist/client/assets/js/{clojure-Dcj6e71m.js → clojure-CdqoJung.js} +1 -1
  85. package/dist/client/assets/js/{coding-agents-CaDRq0na.js → coding-agents-6iW0O8m3.js} +1 -1
  86. package/dist/client/assets/js/{codingAgentProviders-D561caSN.js → codingAgentProviders-CcodfSH-.js} +1 -1
  87. package/dist/client/assets/js/{coffee-CbYrIyIn.js → coffee-BWTAEena.js} +1 -1
  88. package/dist/client/assets/js/{completion-notification-DsOPieYQ.js → completion-notification-BAmmQT0D.js} +1 -1
  89. package/dist/client/assets/js/{cose-bilkent-S5V4N54A-DMeSp3o-.js → cose-bilkent-S5V4N54A-DRKeHjkL.js} +1 -1
  90. package/dist/client/assets/js/{cpp-C285XCcy.js → cpp-BVlDwaOY.js} +1 -1
  91. package/dist/client/assets/js/{csharp-AOA29tQw.js → csharp-BJ8TvX5x.js} +1 -1
  92. package/dist/client/assets/js/{csp-BH3dEG6O.js → csp-C4M5VPIw.js} +1 -1
  93. package/dist/client/assets/js/{css-B57baUKb.js → css-I3bSR4aB.js} +1 -1
  94. package/dist/client/assets/js/{cssMode-BL-figOg.js → cssMode-D4KFuV7w.js} +1 -1
  95. package/dist/client/assets/js/{cypher-WtS-OVKo.js → cypher-CRdq7Gis.js} +1 -1
  96. package/dist/client/assets/js/{cytoscape.esm-D5tsfvvu.js → cytoscape.esm-DkgBNPTq.js} +1 -1
  97. package/dist/client/assets/js/{dagre-BM42HDAG-ZT4Tyhdh.js → dagre-BM42HDAG-CaadqbBP.js} +1 -1
  98. package/dist/client/assets/js/{dagre-B9R_qlQx.js → dagre-C8VfHmP4.js} +1 -1
  99. package/dist/client/assets/js/{dart-DF9gqEcq.js → dart-dwyDElLm.js} +1 -1
  100. package/dist/client/assets/js/{de-EFWp16Qh.js → de--4CNgQuL.js} +1 -1
  101. package/dist/client/assets/js/{defineProperty-DuJZezkY.js → defineProperty-BDo2HL0q.js} +1 -1
  102. package/dist/client/assets/js/{diagram-2AECGRRQ-xaP4EEEl.js → diagram-2AECGRRQ-Cun81Ans.js} +1 -1
  103. package/dist/client/assets/js/{diagram-5GNKFQAL-DIyCvoeX.js → diagram-5GNKFQAL-CQzVKYOI.js} +1 -1
  104. package/dist/client/assets/js/{diagram-KO2AKTUF-DUgBO_lP.js → diagram-KO2AKTUF-BPfQv40Z.js} +1 -1
  105. package/dist/client/assets/js/{diagram-LMA3HP47-7BPLQ2mh.js → diagram-LMA3HP47-D8TC5VV0.js} +1 -1
  106. package/dist/client/assets/js/{diagram-OG6HWLK6-Bf3loU_i.js → diagram-OG6HWLK6-CRHwtHSe.js} +1 -1
  107. package/dist/client/assets/js/{dist-B5dYmTWx.js → dist-CfFdo9r8.js} +1 -1
  108. package/dist/client/assets/js/{dockerfile-Czh5hcPx.js → dockerfile-CILemvfU.js} +1 -1
  109. package/dist/client/assets/js/{download-D8EaUX1d.js → download-48rHoTgx.js} +1 -1
  110. package/dist/client/assets/js/{ecl-CX15-2F3.js → ecl-Ealz99xU.js} +1 -1
  111. package/dist/client/assets/js/{elixir-DAeHVhZ1.js → elixir-shrM9Xh9.js} +1 -1
  112. package/dist/client/assets/js/{en-Be915fg0.js → en-CJJ1jL_Y.js} +1 -1
  113. package/dist/client/assets/js/{erDiagram-TEJ5UH35-Cohr37bj.js → erDiagram-TEJ5UH35-BPm-r9Hg.js} +1 -1
  114. package/dist/client/assets/js/{es-CifdmPsf.js → es-DzGYbRQj.js} +1 -1
  115. package/dist/client/assets/js/{esm-BnjT8clq.js → esm-BMJNKLtg.js} +1 -1
  116. package/dist/client/assets/js/eventmodeling-FCH6USID-C3kT7Z0E.js +1 -0
  117. package/dist/client/assets/js/{files-DaoyoU6g.js → files-hTAbTvaX.js} +1 -1
  118. package/dist/client/assets/js/{flow9-DbPITgDY.js → flow9-BcjKeG3-.js} +1 -1
  119. package/dist/client/assets/js/{flowDiagram-I6XJVG4X-B264a192.js → flowDiagram-I6XJVG4X-_BaH5aHT.js} +1 -1
  120. package/dist/client/assets/js/{fr-cOjPUfRx.js → fr-DcCzCkCs.js} +1 -1
  121. package/dist/client/assets/js/{freemarker2-DOLmB9KN.js → freemarker2-BNKS-Izq.js} +1 -1
  122. package/dist/client/assets/js/{fsharp-B-Yt6zK9.js → fsharp-CkihMS6p.js} +1 -1
  123. package/dist/client/assets/js/{ganttDiagram-6RSMTGT7-Ci7dhsnY.js → ganttDiagram-6RSMTGT7-Cbdw-Bcw.js} +1 -1
  124. package/dist/client/assets/js/gitGraph-WXDBUCRP-6wOXvHzD.js +1 -0
  125. package/dist/client/assets/js/{gitGraphDiagram-PVQCEYII-BlLk9eYS.js → gitGraphDiagram-PVQCEYII-B-bpVVPE.js} +1 -1
  126. package/dist/client/assets/js/{go-BOK2cgny.js → go-T3wwW6GT.js} +1 -1
  127. package/dist/client/assets/js/{graphlib-D2Mw_i7z.js → graphlib-zy-xgTNe.js} +1 -1
  128. package/dist/client/assets/js/{graphql-lNO0dhfX.js → graphql-efIwdE3z.js} +1 -1
  129. package/dist/client/assets/js/{handlebars-CVZmi01T.js → handlebars-I50ARPXc.js} +1 -1
  130. package/dist/client/assets/js/{hcl-DzR879Fw.js → hcl-1nBprOUg.js} +1 -1
  131. package/dist/client/assets/js/{highlight-Dj4_XEnA.js → highlight-CEOB4aIv.js} +1 -1
  132. package/dist/client/assets/js/{html-PlnnXcHR.js → html-Dj-ePZ46.js} +1 -1
  133. package/dist/client/assets/js/{htmlMode-Fmdr8cyl.js → htmlMode-CaN3hz4S.js} +1 -1
  134. package/dist/client/assets/js/{http-error-DN0Q0NIV.js → http-error-DzA5OQEf.js} +1 -1
  135. package/dist/client/assets/js/{index-B41wzfl2.js → index-RJQqJC6n.js} +4 -4
  136. package/dist/client/assets/js/info-J43DQDTF-BIWBwu_u.js +1 -0
  137. package/dist/client/assets/js/{infoDiagram-5YYISTIA-NDi7uRio.js → infoDiagram-5YYISTIA-BNXSec0Z.js} +1 -1
  138. package/dist/client/assets/js/{ini-DrTE-Qjw.js → ini-3Ot_KNDr.js} +1 -1
  139. package/dist/client/assets/js/{ishikawaDiagram-YF4QCWOH-Bqr4yRKd.js → ishikawaDiagram-YF4QCWOH-g75yRzDd.js} +1 -1
  140. package/dist/client/assets/js/{ja-24otYQMe.js → ja-CQvWYnv9.js} +1 -1
  141. package/dist/client/assets/js/{java-M1cOm-yu.js → java-BnfIG6C2.js} +1 -1
  142. package/dist/client/assets/js/{javascript-BNXq8PNf.js → javascript-CsnYKLbf.js} +1 -1
  143. package/dist/client/assets/js/{journeyDiagram-JHISSGLW-BEtti5_h.js → journeyDiagram-JHISSGLW-Pz71rJgC.js} +1 -1
  144. package/dist/client/assets/js/{jsonMode-1QUqmLF3.js → jsonMode-C075GWTu.js} +1 -1
  145. package/dist/client/assets/js/{julia-dLq8Su3c.js → julia-BZ-d031P.js} +1 -1
  146. package/dist/client/assets/js/{kanban-definition-UN3LZRKU-B0OINhQN.js → kanban-definition-UN3LZRKU-CM65a4ke.js} +1 -1
  147. package/dist/client/assets/js/{katex-RcNO5wwe.js → katex-CdfrrN4N.js} +1 -1
  148. package/dist/client/assets/js/{ko-BAFhhHmu.js → ko-CJGntapN.js} +1 -1
  149. package/dist/client/assets/js/{kotlin-u5eqp-HC.js → kotlin-Bvrb8ISQ.js} +1 -1
  150. package/dist/client/assets/js/{less-Bmv3Gp2t.js → less-BmSBm_Oo.js} +1 -1
  151. package/dist/client/assets/js/{lexon-D4tsg7Zx.js → lexon-DuK8nBv2.js} +1 -1
  152. package/dist/client/assets/js/{liquid-Bk2yC9hm.js → liquid-BWAc_45a.js} +1 -1
  153. package/dist/client/assets/js/{lspLanguageFeatures-D43hcBWA.js → lspLanguageFeatures-BiQVZMg4.js} +1 -1
  154. package/dist/client/assets/js/{lua-p9IseoQp.js → lua-CyRtU9wL.js} +1 -1
  155. package/dist/client/assets/js/{m3-CP_UPhUb.js → m3-Ew9Azayo.js} +1 -1
  156. package/dist/client/assets/js/{markdown-EMkhjbsA.js → markdown-DTnF9Yaz.js} +1 -1
  157. package/dist/client/assets/js/{mdx-CTIqsEU_.js → mdx-B5cGu-wW.js} +1 -1
  158. package/dist/client/assets/js/{mermaid-parser.core-Ct7VvVNd.js → mermaid-parser.core-H0g6x_iH.js} +3 -3
  159. package/dist/client/assets/js/{mermaid.core-bZP2CdTT.js → mermaid.core-Diknpn0Z.js} +3 -3
  160. package/dist/client/assets/js/{mindmap-definition-RKZ34NQL-HwEZyOHT.js → mindmap-definition-RKZ34NQL-CaunhL_H.js} +1 -1
  161. package/dist/client/assets/js/{mips-CkjAOBJ1.js → mips-Dxi7_29p.js} +1 -1
  162. package/dist/client/assets/js/{models-IOA_Ybyo.js → models-C1Vzhn4J.js} +1 -1
  163. package/dist/client/assets/js/{msdax-D3cfIob3.js → msdax-B6Bgb3AK.js} +1 -1
  164. package/dist/client/assets/js/{mysql-4uHNth4i.js → mysql-BL2x9OzM.js} +1 -1
  165. package/dist/client/assets/js/{objective-c-CJlpUpN6.js → objective-c-BrRFV0XK.js} +1 -1
  166. package/dist/client/assets/js/packet-YPE3B663-DQbqBYnW.js +1 -0
  167. package/dist/client/assets/js/{pascal-CQPmydYD.js → pascal-WA4C_PKB.js} +1 -1
  168. package/dist/client/assets/js/{pascaligo-BpcHvwdj.js → pascaligo-CJbWHnUY.js} +1 -1
  169. package/dist/client/assets/js/{perl-CPq40M_6.js → perl-BI9Huzvv.js} +1 -1
  170. package/dist/client/assets/js/{pets-C2oDgwB5.js → pets-B_-nzG9F.js} +1 -1
  171. package/dist/client/assets/js/{pgsql-CSQ1ge3t.js → pgsql-CzbvRnWT.js} +1 -1
  172. package/dist/client/assets/js/{php-DK0RYdED.js → php-CXAgA_El.js} +1 -1
  173. package/dist/client/assets/js/pie-LRSECV5Y-CIUK74nZ.js +1 -0
  174. package/dist/client/assets/js/{pieDiagram-4H26LBE5-BmAWShfi.js → pieDiagram-4H26LBE5-CCUnlpIr.js} +1 -1
  175. package/dist/client/assets/js/{pla-DWm3Ssta.js → pla-C0RuKVEY.js} +1 -1
  176. package/dist/client/assets/js/{postiats-D6U5CAH_.js → postiats-DrGBuYen.js} +1 -1
  177. package/dist/client/assets/js/{powerquery-luT1PmkC.js → powerquery-C2Rk0MWx.js} +1 -1
  178. package/dist/client/assets/js/{powershell-DqsTi5Tp.js → powershell-Co9Oecz_.js} +1 -1
  179. package/dist/client/assets/js/{profiles-DDKFPE0r.js → profiles-BtECgqqD.js} +1 -1
  180. package/dist/client/assets/js/{protobuf-xWgh_gwl.js → protobuf-BYEreCAs.js} +1 -1
  181. package/dist/client/assets/js/{pt-DPgTOGuO.js → pt-BLQB3VhC.js} +1 -1
  182. package/dist/client/assets/js/{pug-d0a6hBgd.js → pug-DYMxpfbA.js} +1 -1
  183. package/dist/client/assets/js/{python-SkkpZGKb.js → python-D14JG4Tf.js} +1 -1
  184. package/dist/client/assets/js/{qsharp-B4xC_SYh.js → qsharp-eGQdTxCC.js} +1 -1
  185. package/dist/client/assets/js/{quadrantDiagram-W4KKPZXB-DRn55Dz7.js → quadrantDiagram-W4KKPZXB-Do1jBZkB.js} +1 -1
  186. package/dist/client/assets/js/{r-qamn5sfb.js → r-BpBEd0qf.js} +1 -1
  187. package/dist/client/assets/js/radar-GUYGQ44K-DamlzFJn.js +1 -0
  188. package/dist/client/assets/js/{razor-DR9b_EzP.js → razor-DAKZoZ5s.js} +1 -1
  189. package/dist/client/assets/js/{redis-C46kUKug.js → redis-CecBwldA.js} +1 -1
  190. package/dist/client/assets/js/{redshift-DI_dWPgP.js → redshift-DxeKWFdZ.js} +1 -1
  191. package/dist/client/assets/js/{requirementDiagram-4Y6WPE33-Do_KEl0k.js → requirementDiagram-4Y6WPE33-Ccn1EcY0.js} +1 -1
  192. package/dist/client/assets/js/{restructuredtext-oYQfsBYX.js → restructuredtext-BBhjK4w8.js} +1 -1
  193. package/dist/client/assets/js/{rough.esm-BjtdUJeF.js → rough.esm-DKpVfK-g.js} +1 -1
  194. package/dist/client/assets/js/{ru-BGBuhe8j.js → ru-BXep69sk.js} +1 -1
  195. package/dist/client/assets/js/{ruby-Da1TZ4HB.js → ruby-9YJv-z0v.js} +1 -1
  196. package/dist/client/assets/js/{rust-GT6xUobW.js → rust-BihIDWCY.js} +1 -1
  197. package/dist/client/assets/js/{sankeyDiagram-5OEKKPKP-BRnR4W8h.js → sankeyDiagram-5OEKKPKP-BZF9SKVm.js} +1 -1
  198. package/dist/client/assets/js/{sb-D4kxpCPJ.js → sb-DSz7OJbn.js} +1 -1
  199. package/dist/client/assets/js/{scala-CY3U_fvs.js → scala-DrL9oxhs.js} +1 -1
  200. package/dist/client/assets/js/{scheme-DzdFAWU_.js → scheme-Bc0QxXW_.js} +1 -1
  201. package/dist/client/assets/js/{scss-CTwgV3JD.js → scss-BTsIuYyg.js} +1 -1
  202. package/dist/client/assets/js/{sequenceDiagram-3UESZ5HK-CoemgPYx.js → sequenceDiagram-3UESZ5HK-BplvirR_.js} +1 -1
  203. package/dist/client/assets/js/{session-browser-prefs-D3fgv9Yr.js → session-browser-prefs-DnMXaw-N.js} +1 -1
  204. package/dist/client/assets/js/{sessions-BeO9QOJY.js → sessions-wVroPs5k.js} +1 -1
  205. package/dist/client/assets/js/{settings-DM3CNjqC.js → settings-Bzod_9RQ.js} +1 -1
  206. package/dist/client/assets/js/{shell-CUF2wd73.js → shell-DG7-xFwe.js} +1 -1
  207. package/dist/client/assets/js/{skills-3O8WlKlI.js → skills-CQr0eeFF.js} +1 -1
  208. package/dist/client/assets/js/{solidity-C3RnBLh_.js → solidity-COxKdecX.js} +1 -1
  209. package/dist/client/assets/js/{sophia-BA8mP4aY.js → sophia-DtFj5ZDz.js} +1 -1
  210. package/dist/client/assets/js/{sparql-DcwhST_l.js → sparql-B1TD00SE.js} +1 -1
  211. package/dist/client/assets/js/{sql-CjGghxho.js → sql-b7qwDUco.js} +1 -1
  212. package/dist/client/assets/js/{src-Cz8NyTG1.js → src-Ra8Cw6Gr.js} +1 -1
  213. package/dist/client/assets/js/{st-B8Q32toW.js → st-BtSqB0Hh.js} +1 -1
  214. package/dist/client/assets/js/{stateDiagram-AJRCARHV-I4DYKB3q.js → stateDiagram-AJRCARHV-DhJkFuW8.js} +1 -1
  215. package/dist/client/assets/js/stateDiagram-v2-BHNVJYJU-CqTRINz_.js +1 -0
  216. package/dist/client/assets/js/{swift-Br8oKRCi.js → swift-T2X4Cn4t.js} +1 -1
  217. package/dist/client/assets/js/{systemverilog-DIL7pkd5.js → systemverilog-DeuLbp4J.js} +1 -1
  218. package/dist/client/assets/js/{tcl-C7A4eFCv.js → tcl-ZVjhRcKc.js} +1 -1
  219. package/dist/client/assets/js/{timeline-definition-PNZ67QCA-BnfftsIx.js → timeline-definition-PNZ67QCA-BFAfAvjz.js} +1 -1
  220. package/dist/client/assets/js/treeView-BLDUP644-H8OPaX_2.js +1 -0
  221. package/dist/client/assets/js/treemap-LRROVOQU-BhsUhAW8.js +1 -0
  222. package/dist/client/assets/js/{tsMode-BmS5yGbl.js → tsMode-BK8igQe0.js} +1 -1
  223. package/dist/client/assets/js/{ttsHelpers-DpzPhrib.js → ttsHelpers-CUglUfpM.js} +1 -1
  224. package/dist/client/assets/js/{twig-CxeEoeDi.js → twig-B2I_zOb5.js} +1 -1
  225. package/dist/client/assets/js/{typescript-BPw3e1LN.js → typescript-DqxcEPol.js} +1 -1
  226. package/dist/client/assets/js/{typespec-dQqbgDyW.js → typespec-DYubob7r.js} +1 -1
  227. package/dist/client/assets/js/{useSttSettings-Dd2zPJU6.js → useSttSettings-BAz3MWB_.js} +1 -1
  228. package/dist/client/assets/js/{vb-DpmkDtUb.js → vb-DulIu0AM.js} +1 -1
  229. package/dist/client/assets/js/{vennDiagram-CIIHVFJN-Bu76Q1QQ.js → vennDiagram-CIIHVFJN-BTMh4zH0.js} +1 -1
  230. package/dist/client/assets/js/wardley-L42UT6IY-w2cdSduy.js +1 -0
  231. package/dist/client/assets/js/{wardleyDiagram-YWT4CUSO-BQ7KDw3c.js → wardleyDiagram-YWT4CUSO-CjApV8-0.js} +1 -1
  232. package/dist/client/assets/js/{wgsl-BzEo-Lwp.js → wgsl-DiXzOVd2.js} +1 -1
  233. package/dist/client/assets/js/{xml-CNMAb3tW.js → xml-DtDrXyok.js} +1 -1
  234. package/dist/client/assets/js/{xterm-B-CU1LD3.js → xterm-CdfgdkPC.js} +1 -1
  235. package/dist/client/assets/js/{xychartDiagram-2RQKCTM6-B1x6n3B3.js → xychartDiagram-2RQKCTM6-DuaP4Pnm.js} +1 -1
  236. package/dist/client/assets/js/{yaml-DpwMHYi6.js → yaml-9_m3OBnv.js} +1 -1
  237. package/dist/client/assets/js/{zh-TW-BJY5MjsC.js → zh-TW-CLhifuOg.js} +1 -1
  238. package/dist/client/assets/js/{zh-CoPU4mYG.js → zh-gGY9f4WM.js} +1 -1
  239. package/dist/client/index.html +1 -1
  240. package/dist/server/index.js +3 -3
  241. package/dist/server/index.js.map +1 -1
  242. package/dist/server/openapi.json +1 -1
  243. package/package.json +1 -1
  244. package/dist/client/assets/js/AppSidebar-BHfH59vK.js +0 -1
  245. package/dist/client/assets/js/architecture-7EHR7CIX-CCBUg0GR.js +0 -1
  246. package/dist/client/assets/js/classDiagram-4FO5ZUOK-Dr5SR3PA.js +0 -1
  247. package/dist/client/assets/js/classDiagram-v2-Q7XG4LA2-BeYcryNa.js +0 -1
  248. package/dist/client/assets/js/eventmodeling-FCH6USID-Cd6TFrci.js +0 -1
  249. package/dist/client/assets/js/gitGraph-WXDBUCRP-CG4qC9Jw.js +0 -1
  250. package/dist/client/assets/js/info-J43DQDTF-CFtOWOWw.js +0 -1
  251. package/dist/client/assets/js/packet-YPE3B663-C0Vs_oOB.js +0 -1
  252. package/dist/client/assets/js/pie-LRSECV5Y-CAscu7sk.js +0 -1
  253. package/dist/client/assets/js/radar-GUYGQ44K-CfxS0DQE.js +0 -1
  254. package/dist/client/assets/js/stateDiagram-v2-BHNVJYJU-BHJGHZeG.js +0 -1
  255. package/dist/client/assets/js/treeView-BLDUP644-wNgfMdO5.js +0 -1
  256. package/dist/client/assets/js/treemap-LRROVOQU-Dy2LkAdg.js +0 -1
  257. package/dist/client/assets/js/wardley-L42UT6IY-BGLmswxh.js +0 -1
@@ -1 +1 @@
1
- var e={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",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",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",webUiTitle:"Web UI",platform:"Platform",currentWebUi:"Current Web UI",activeVersion:"Active 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"},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.",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",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"},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"}},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",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",agent:"Agent",approvalKicker:"Terminal permission",approvalTitle:"Review command 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",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",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",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",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"},evidence:{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",node:"Exceptional node",edge:"Path",loop:"Loop",pathTitle:"{source} → {target}",loopPass:"Loop pass {count}",exceptionalNode:"This node did not complete normally.",technical:"Technical information",recordId:"Record ID",sequence:"Sequence",rawStatus:"Raw status",rawRoute:"Route",rawReason:"Reason",iterationPath:"Iteration path",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"},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:"A connection is taken only when its route and optional condition both match. Choose Route only when no content check is needed.",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:"Route only — no condition",outputRecommended:"Successful reply text (output, recommended)",output:"Successful reply text (output)",errorRecommended:"Failure error text (error, recommended)",error:"Failure error text (error)",custom:"Custom path (advanced)"},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.",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",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?"},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",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",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",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",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.",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",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"},settings:{title:"Settings",saved:"Saved",saveFailed:"Save failed",tabs:{display:"Display",account:"Current Account",users:"Account Management",agent:"Agent",proxy:"Proxy",memory:"Memory",compression:"Compression",session:"Session",privacy:"Privacy",apiServer:"API Server",models:"Models",voice:"Voice"},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",notifyOnComplete:"Completion Notification",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 timeout in seconds",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.",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.",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:{title:"Group Chat",createRoom:"Create Room",joinByCode:"Join by Code",roomName:"Room Name",roomNamePlaceholder:"Enter room name",inviteCode:"Invite Code",autoGenerate:"Auto-generate",noRooms:"No rooms yet",selectOrCreate:"Select or create a room to start chatting",agents:"Agents",addAgent:"Add Agent",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}",noAgents:"No agents in this room",members:"members",roomCreated:"Room created",roomDeleted:"Room deleted",roomCloned:"Room cloned",cloneRoom:"Clone room",copyRoomLink:"Copy Room Link",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",compressNow:"Compress Now",compressingInProgress:"Compression in progress, please wait"},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",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"},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_29_1:"This release covers all 14 PRs merged after 0.6.28, spanning visual consistency, MCU audio and v2 hardware, workspace diffs, model usage analytics, Docker updates, and MiMo voice cloning",new_0_6_29_2:"Shared page headers, dark surfaces, and radius tokens now follow one visual system, while version previews sort valid tags by semantic version (#2014, #2015)",new_0_6_29_3:"The ESP32 product page has a responsive redesign, and the website version selector now includes Hermes Agent 0.18.2 (#2020, #2042)",new_0_6_29_4:"ESP32-C3 v1 uplink audio now uses IMA-ADPCM at about one quarter of the bandwidth with a two-minute recording limit, and the OLED returns to the LAN IP after transient states (#2024, #2025)",new_0_6_29_5:"Workspace diffs start collapsed and suppress zero-line changes, while the standard dark chat composer background is restored (#2032)",new_0_6_29_6:"Session exports tolerate malformed percent signs in filenames, and Docker upgrades now show image pull and recreate guidance instead of modifying npm inside the container (#2026, #2033)",new_0_6_29_7:"Bridge tool results remain fully persisted but are projected to a 5,500-character head/tail summary in model context to prevent repeated context amplification (#2036)",new_0_6_29_8:"Usage analytics now unify model calls from Hermes Agent, Claude Code, Codex, and Ekko Agent and add an Agent distribution view (#2039)",new_0_6_29_9:"A separate ESP32-C3 v2 firmware target adds the new hardware pin map without affecting v1; v2 defaults to 80% volume with 1.5x PCM gain and soft limiting (#2044, #2045)",new_0_6_29_10:"MiMo voice cloning restores WAV/MP3 reference-audio upload and sends the reference through audio.voice as required by the current API (#2046)",new_0_6_28_1:"This release covers every PR merged after 0.6.27, including MCU management, group chat workspace diffs, coding-agent fixes, workflow approvals, workspace diff filtering, scheduled-job model selection, and desktop version update hints",new_0_6_28_2:"MCU support adds device management, requires API-token authorization for global-agent events, refreshes the ESP32-C3 firmware, and stabilizes remote relay login",new_0_6_28_3:"Group Chat workspace changes now persist as workspace diff runs so room-level agent activity can be reviewed after the session completes",new_0_6_28_4:"Coding agents now inherit scoped external MCP servers, route aborts to the right workflow agent, and best-effort export completed Codex and Claude Code native sessions",new_0_6_28_5:"Session polish fixes the workspace file drawer, removes broken starred-history embeds, and records bridge session ended_at and end_reason metadata",new_0_6_28_6:"Workflow nodes now support approval gates after node completion, with rerun approval states corrected for repeated workflow execution",new_0_6_28_7:"Workspace diff cards filter SQLite WAL/SHM sidecars and keep scanning past unchanged files so newly created ordinary files stay visible",new_0_6_28_8:"Scheduled jobs can choose and persist provider/model settings without passing unsupported model flags to the current Hermes cron CLI",new_0_6_28_9:"Desktop version management now shows a localized new-version hint on its button when an update is available, and the public version manifest includes 0.6.28",new_0_6_27_1:"This release covers every PR merged after 0.6.26, including desktop startup fallback, Windows runtime fixes, remote MCU relay, group chat workspaces, default workspace polish, and empty diff filtering",new_0_6_27_2:"Desktop startup now falls back to the bundled Web UI when the active Web UI directory is missing or incomplete, while preserving the pinned runtime",new_0_6_27_3:"Windows desktop runtimes now use relocatable hermes.cmd wrappers instead of fragile .exe trampolines for Web UI server invocations",new_0_6_27_4:"Remote MCU traffic now uses the Socket.IO /global-agent relay, with steadier ESP32-C3 login, discovery, voice playback queueing, Wi-Fi credential persistence, and updated firmware",new_0_6_27_5:"Group Chat rooms can now own a validated workspace that is passed into group-agent runs, with read-only members seeing workspace, invite code, and management controls redacted",new_0_6_27_6:"Default workspace favorites now sit inside the folder picker selected-path row, with completed locale coverage for the workspace picker labels",new_0_6_27_7:"Workspace diff cards now skip zero-byte changes with no patch or line delta, avoiding meaningless +0/-0 changed-file cards",new_0_6_26_1:"This release covers the PRs merged after 0.6.25, focusing on Ekko Agent, Coding Agent context display, Journey, group chat baselines, desktop fixes, and MCP payload size",new_0_6_26_2:"Ekko Agent is now available in chat with runtime context handling, browser tools, steadier tool events, and restored tool-result history for context usage accounting",new_0_6_26_3:"Coding Agent sessions now show reasoning and context settings more clearly, persist API mode, avoid Codex app-server mode misuse, and keep context usage from jumping after follow-up turns",new_0_6_26_4:"Journey gained a learning graph view with polished graph interactions, while group chat added baseline coverage for the new feature line",new_0_6_26_5:"Desktop reliability improved with login persistence/reset fixes, Windows worker dynamic port fallback, stdout/stderr EPIPE handling, and isolated ESP32-C3 v1 firmware packaging",new_0_6_26_6:"Hermes Studio MCP now returns a compact available-models summary by default, with filters and an explicit full-detail option to avoid flooding agent context",new_0_6_25_1:"Fixed execute_code failures with Hermes Agent 0.18.0 by forwarding the new has_host_access guard parameter through the Agent Bridge approval memory wrapper",new_0_6_24_1:"This release covers the PRs merged after 0.6.23, focusing on chat input polish, workspace visibility, plugin management, model defaults, and workspace diff review",new_0_6_24_2:"Chat and group chat inputs now use a refreshed toolbar with compact model controls, grouped input settings, clearer context usage, mobile-friendly chrome, and restored manual single-chat input resizing",new_0_6_24_3:"Workspace run changes now appear as durable chat diff cards with a right-side diff/editor drawer, restored after session resume and tuned for mobile viewing",new_0_6_24_4:"The workspace folder picker can browse Windows drive and junction workflows more reliably and now shows dot-prefixed folders such as .hermes, .config, and .codex while keeping WORKSPACE_BASE safety checks",new_0_6_24_5:"Plugins can be enabled or disabled from Studio when they are manageable user plugins, and the Plugins page now reflects base and profile plugin state more accurately",new_0_6_24_6:"Models now support default provider and default model actions; bridge terminal error detection is less noisy, Hermes Agent runtime packaging moves to 0.18.0, and the website version manifest was refreshed"}};export{e as default};
1
+ var e={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",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",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",webUiTitle:"Web UI",platform:"Platform",currentWebUi:"Current Web UI",activeVersion:"Active 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"},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.",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",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"},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"}},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",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",agent:"Agent",approvalKicker:"Terminal permission",approvalTitle:"Review command 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",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",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",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",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"},evidence:{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",node:"Exceptional node",edge:"Path",loop:"Loop",pathTitle:"{source} → {target}",loopPass:"Loop pass {count}",exceptionalNode:"This node did not complete normally.",technical:"Technical information",recordId:"Record ID",sequence:"Sequence",rawStatus:"Raw status",rawRoute:"Route",rawReason:"Reason",iterationPath:"Iteration path",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"},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:"A connection is taken only when its route and optional condition both match. Choose Route only when no content check is needed.",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:"Route only — no condition",outputRecommended:"Successful reply text (output, recommended)",output:"Successful reply text (output)",errorRecommended:"Failure error text (error, recommended)",error:"Failure error text (error)",custom:"Custom path (advanced)"},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.",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",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?"},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",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",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",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",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.",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",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"},settings:{title:"Settings",saved:"Saved",saveFailed:"Save failed",tabs:{display:"Display",account:"Current Account",users:"Account Management",agent:"Agent",proxy:"Proxy",memory:"Memory",compression:"Compression",session:"Session",privacy:"Privacy",apiServer:"API Server",models:"Models",voice:"Voice"},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",notifyOnComplete:"Completion Notification",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 timeout in seconds",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.",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.",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:{title:"Group Chat",createRoom:"Create Room",joinByCode:"Join by Code",roomName:"Room Name",roomNamePlaceholder:"Enter room name",inviteCode:"Invite Code",autoGenerate:"Auto-generate",noRooms:"No rooms yet",selectOrCreate:"Select or create a room to start chatting",agents:"Agents",addAgent:"Add Agent",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}",noAgents:"No agents in this room",members:"members",roomCreated:"Room created",roomDeleted:"Room deleted",roomCloned:"Room cloned",cloneRoom:"Clone room",copyRoomLink:"Copy Room Link",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",compressNow:"Compress Now",compressingInProgress:"Compression in progress, please wait"},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",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"},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_30_1:"This release covers all 21 PRs merged after 0.6.29, spanning workflow orchestration, MoA sessions, realtime voice, durable memory, provider reliability, MCU setup, and Windows polish",new_0_6_30_2:"Workflow Orchestration v2 adds conditional success, failure, and always routes, true skips, all/any joins, bounded feedback loops, execution evidence, deadlines, and portable imports (#2073)",new_0_6_30_3:"Enabled MoA presets can now be selected when creating or switching Hermes chat sessions, with the correct preset label, default, context window, and runtime behavior (#2078)",new_0_6_30_4:"The first screen loads substantially less JavaScript by lazy-loading Markdown, Mermaid, Monaco, inactive locales, and optional overlays (#2068)",new_0_6_30_5:"Single chats now include a full-screen realtime voice mode with live transcription, queued speech playback, tool activity, and interruption controls (#2063)",new_0_6_30_6:"Realtime voice is more reliable on desktop and mobile, recovers from silence, avoids recording assistant speech, uses the active STT fallback, and keeps approvals visible (#2064, #2067)",new_0_6_30_7:"Ekko Agent gains durable scoped memory and now includes the active provider and model in runtime context, with safer production memory-database handling (#2057, #2060, #2071)",new_0_6_30_8:"Profiles without a configured provider now get a direct setup prompt that opens the provider form (#2070)",new_0_6_30_9:"Provider model catalogs are aligned with Hermes Agent, while live discovery takes priority without stale fallback caches masking updates (#2051)",new_0_6_30_10:"Custom-provider aliases remain stable across loaded chat turns, preventing unnecessary client rebuilds and lost request headers (#2054)",new_0_6_30_11:"Session model switching now shows a blocking progress state, and conversation changes replay the chat fade without remounting drafts or attachments (#2056, #2069)",new_0_6_30_12:"Journey graph exploration adds multi-select categories, distinct Skill and Memory shapes, previews, and improved keyboard and touch controls (#2055)",new_0_6_30_13:"Markdown downloads preserve file extensions, mobile transcription gets explicit start and stop controls, and scoped Codex streaming no longer duplicates final assistant messages (#2058, #2066)",new_0_6_30_14:"MCU setup and reliability improve with visible device codes, automatic microphone selection, disconnect synchronization, and bounded TLS discovery (#2049, #2059, #2062)",new_0_6_30_15:"Windows chat runs no longer flash Git console windows while capturing workspace changes in Git or ordinary directories (#2080)",new_0_6_29_1:"This release covers all 14 PRs merged after 0.6.28, spanning visual consistency, MCU audio and v2 hardware, workspace diffs, model usage analytics, Docker updates, and MiMo voice cloning",new_0_6_29_2:"Shared page headers, dark surfaces, and radius tokens now follow one visual system, while version previews sort valid tags by semantic version (#2014, #2015)",new_0_6_29_3:"The ESP32 product page has a responsive redesign, and the website version selector now includes Hermes Agent 0.18.2 (#2020, #2042)",new_0_6_29_4:"ESP32-C3 v1 uplink audio now uses IMA-ADPCM at about one quarter of the bandwidth with a two-minute recording limit, and the OLED returns to the LAN IP after transient states (#2024, #2025)",new_0_6_29_5:"Workspace diffs start collapsed and suppress zero-line changes, while the standard dark chat composer background is restored (#2032)",new_0_6_29_6:"Session exports tolerate malformed percent signs in filenames, and Docker upgrades now show image pull and recreate guidance instead of modifying npm inside the container (#2026, #2033)",new_0_6_29_7:"Bridge tool results remain fully persisted but are projected to a 5,500-character head/tail summary in model context to prevent repeated context amplification (#2036)",new_0_6_29_8:"Usage analytics now unify model calls from Hermes Agent, Claude Code, Codex, and Ekko Agent and add an Agent distribution view (#2039)",new_0_6_29_9:"A separate ESP32-C3 v2 firmware target adds the new hardware pin map without affecting v1; v2 defaults to 80% volume with 1.5x PCM gain and soft limiting (#2044, #2045)",new_0_6_29_10:"MiMo voice cloning restores WAV/MP3 reference-audio upload and sends the reference through audio.voice as required by the current API (#2046)",new_0_6_28_1:"This release covers every PR merged after 0.6.27, including MCU management, group chat workspace diffs, coding-agent fixes, workflow approvals, workspace diff filtering, scheduled-job model selection, and desktop version update hints",new_0_6_28_2:"MCU support adds device management, requires API-token authorization for global-agent events, refreshes the ESP32-C3 firmware, and stabilizes remote relay login",new_0_6_28_3:"Group Chat workspace changes now persist as workspace diff runs so room-level agent activity can be reviewed after the session completes",new_0_6_28_4:"Coding agents now inherit scoped external MCP servers, route aborts to the right workflow agent, and best-effort export completed Codex and Claude Code native sessions",new_0_6_28_5:"Session polish fixes the workspace file drawer, removes broken starred-history embeds, and records bridge session ended_at and end_reason metadata",new_0_6_28_6:"Workflow nodes now support approval gates after node completion, with rerun approval states corrected for repeated workflow execution",new_0_6_28_7:"Workspace diff cards filter SQLite WAL/SHM sidecars and keep scanning past unchanged files so newly created ordinary files stay visible",new_0_6_28_8:"Scheduled jobs can choose and persist provider/model settings without passing unsupported model flags to the current Hermes cron CLI",new_0_6_28_9:"Desktop version management now shows a localized new-version hint on its button when an update is available, and the public version manifest includes 0.6.28",new_0_6_27_1:"This release covers every PR merged after 0.6.26, including desktop startup fallback, Windows runtime fixes, remote MCU relay, group chat workspaces, default workspace polish, and empty diff filtering",new_0_6_27_2:"Desktop startup now falls back to the bundled Web UI when the active Web UI directory is missing or incomplete, while preserving the pinned runtime",new_0_6_27_3:"Windows desktop runtimes now use relocatable hermes.cmd wrappers instead of fragile .exe trampolines for Web UI server invocations",new_0_6_27_4:"Remote MCU traffic now uses the Socket.IO /global-agent relay, with steadier ESP32-C3 login, discovery, voice playback queueing, Wi-Fi credential persistence, and updated firmware",new_0_6_27_5:"Group Chat rooms can now own a validated workspace that is passed into group-agent runs, with read-only members seeing workspace, invite code, and management controls redacted",new_0_6_27_6:"Default workspace favorites now sit inside the folder picker selected-path row, with completed locale coverage for the workspace picker labels",new_0_6_27_7:"Workspace diff cards now skip zero-byte changes with no patch or line delta, avoiding meaningless +0/-0 changed-file cards",new_0_6_26_1:"This release covers the PRs merged after 0.6.25, focusing on Ekko Agent, Coding Agent context display, Journey, group chat baselines, desktop fixes, and MCP payload size",new_0_6_26_2:"Ekko Agent is now available in chat with runtime context handling, browser tools, steadier tool events, and restored tool-result history for context usage accounting",new_0_6_26_3:"Coding Agent sessions now show reasoning and context settings more clearly, persist API mode, avoid Codex app-server mode misuse, and keep context usage from jumping after follow-up turns",new_0_6_26_4:"Journey gained a learning graph view with polished graph interactions, while group chat added baseline coverage for the new feature line",new_0_6_26_5:"Desktop reliability improved with login persistence/reset fixes, Windows worker dynamic port fallback, stdout/stderr EPIPE handling, and isolated ESP32-C3 v1 firmware packaging",new_0_6_26_6:"Hermes Studio MCP now returns a compact available-models summary by default, with filters and an explicit full-detail option to avoid flooding agent context",new_0_6_25_1:"Fixed execute_code failures with Hermes Agent 0.18.0 by forwarding the new has_host_access guard parameter through the Agent Bridge approval memory wrapper",new_0_6_24_1:"This release covers the PRs merged after 0.6.23, focusing on chat input polish, workspace visibility, plugin management, model defaults, and workspace diff review",new_0_6_24_2:"Chat and group chat inputs now use a refreshed toolbar with compact model controls, grouped input settings, clearer context usage, mobile-friendly chrome, and restored manual single-chat input resizing",new_0_6_24_3:"Workspace run changes now appear as durable chat diff cards with a right-side diff/editor drawer, restored after session resume and tuned for mobile viewing",new_0_6_24_4:"The workspace folder picker can browse Windows drive and junction workflows more reliably and now shows dot-prefixed folders such as .hermes, .config, and .codex while keeping WORKSPACE_BASE safety checks",new_0_6_24_5:"Plugins can be enabled or disabled from Studio when they are manageable user plugins, and the Plugins page now reflects base and profile plugin state more accurately",new_0_6_24_6:"Models now support default provider and default model actions; bridge terminal error detection is less noisy, Hermes Agent runtime packaging moves to 0.18.0, and the website version manifest was refreshed"}};export{e as default};