2026-04-13 15:15:14 +08:00
export default {
2026-04-14 21:48:53 +08:00
// Login
login : {
2026-04-15 16:36:04 +08:00
title : 'Hermes Web UI' ,
2026-05-23 18:44:53 +08:00
description : 'Enter your username and password to continue.' ,
2026-04-14 21:48:53 +08:00
placeholder : 'Access token' ,
submit : 'Login' ,
tokenRequired : 'Please enter your access token' ,
invalidToken : 'Invalid token' ,
connectionFailed : 'Cannot connect to server' ,
2026-04-22 20:27:33 +08:00
passwordLogin : 'Password' ,
tokenLogin : 'Token' ,
usernamePlaceholder : 'Username' ,
passwordPlaceholder : 'Password' ,
2026-05-24 09:49:21 +08:00
defaultCredentialsHint : 'Default username: admin. Default password: 123456.' ,
2026-04-22 20:27:33 +08:00
credentialsRequired : 'Please enter username and password' ,
invalidCredentials : 'Invalid username or password' ,
2026-05-08 18:29:43 +08:00
tooManyAttempts : 'Too many failed attempts, please try again later' ,
2026-05-24 22:36:21 +08:00
lockResetHint : 'If this is your server, clear the login lock with:' ,
defaultLoginResetHint : 'To reset the default admin password, run:' ,
2026-05-23 18:44:53 +08:00
sessionExpired : 'Login expired. Please sign in again.' ,
accessDenied : 'You do not have permission to access this resource.' ,
2026-04-22 20:27:33 +08:00
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' ,
2026-05-23 18:44:53 +08:00
setupDescription : 'Manage the username and password used to sign in.' ,
removeConfirm : 'Password login is required for user accounts.' ,
2026-04-22 20:27:33 +08:00
passwordLoginNotConfigured : 'Password login is not configured' ,
2026-05-23 18:44:53 +08:00
passwordLoginConfigured : 'Current account: {username}' ,
2026-05-24 09:49:21 +08:00
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' ,
2026-05-23 18:44:53 +08:00
} ,
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' ,
2026-05-23 19:41:51 +08:00
profiles : 'Accessible Profiles' ,
2026-05-23 18:44:53 +08:00
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' ,
} ,
2026-04-14 21:48:53 +08:00
} ,
2026-04-13 15:15:14 +08:00
// Common
common : {
loading : 'Loading...' ,
cancel : 'Cancel' ,
delete : 'Delete' ,
edit : 'Edit' ,
save : 'Save' ,
2026-04-17 23:11:57 +08:00
retry : 'Retry' ,
2026-04-13 15:15:14 +08:00
saved : 'Saved' ,
update : 'Update' ,
create : 'Create' ,
saveFailed : 'Save failed' ,
2026-04-24 20:41:14 +08:00
deleteFailed : 'Delete failed' ,
2026-04-13 15:15:14 +08:00
ok : 'OK' ,
copied : 'Copied' ,
copy : 'Copy' ,
noData : 'No data' ,
2026-05-08 18:29:43 +08:00
expired : 'Expired' ,
2026-04-13 15:15:14 +08:00
fetch : 'Fetch' ,
add : 'Add' ,
enable : 'Enable' ,
disable : 'Disable' ,
configured : 'Configured' ,
notConfigured : 'Not configured' ,
2026-04-16 09:40:25 +08:00
confirm : 'Confirm' ,
expand : 'Expand' ,
collapse : 'Collapse' ,
2026-04-18 13:07:12 +08:00
start : 'Start' ,
stop : 'Stop' ,
2026-04-13 15:15:14 +08:00
} ,
// Sidebar
sidebar : {
chat : 'Chat' ,
2026-04-22 14:00:34 +08:00
search : 'Search' ,
2026-05-07 22:16:52 +08:00
apiRelay : 'API Relay' ,
2026-05-01 11:27:43 +08:00
history : 'History' ,
2026-04-13 15:15:14 +08:00
jobs : 'Jobs' ,
2026-05-08 11:32:47 +08:00
kanban : 'Kanban' ,
2026-04-13 15:15:14 +08:00
models : 'Models' ,
2026-04-16 09:40:25 +08:00
profiles : 'Profiles' ,
2026-04-13 15:15:14 +08:00
skills : 'Skills' ,
2026-05-10 13:50:39 +02:00
plugins : 'Plugins' ,
2026-04-13 15:15:14 +08:00
memory : 'Memory' ,
logs : 'Logs' ,
2026-04-14 14:47:18 +08:00
usage : 'Usage' ,
2026-05-23 09:05:03 +08:00
performance : 'Performance' ,
2026-05-14 09:28:51 +08:00
skillsUsage : 'Skills Usage' ,
2026-04-13 15:15:14 +08:00
channels : 'Channels' ,
2026-04-18 13:07:12 +08:00
gateways : 'Gateways' ,
2026-04-15 16:36:04 +08:00
terminal : 'Terminal' ,
2026-04-24 20:41:14 +08:00
groupChat : 'Group Chat' ,
2026-04-23 12:09:39 +08:00
files : 'Files' ,
2026-04-18 13:07:12 +08:00
groupConversation : 'Conversation' ,
2026-05-19 02:33:53 +02:00
groupConversationShort : 'Conv' ,
2026-04-18 13:07:12 +08:00
groupPlatform : 'Platform' ,
groupAgent : 'Agent' ,
2026-05-19 02:33:53 +02:00
groupAgentShort : 'Agent' ,
2026-04-18 13:07:12 +08:00
groupSystem : 'System' ,
2026-05-19 02:33:53 +02:00
groupSystemShort : 'Sys' ,
2026-04-18 13:07:12 +08:00
groupMonitoring : 'Monitoring' ,
2026-05-19 02:33:53 +02:00
groupMonitoringShort : 'Mon' ,
2026-04-18 13:07:12 +08:00
groupTools : 'Tools' ,
2026-05-28 12:30:49 +08:00
groupToolsShort : "Tools" ,
versionPreview : "Version Preview" ,
2026-04-13 15:15:14 +08:00
settings : 'Settings' ,
connected : 'Connected' ,
disconnected : 'Disconnected' ,
2026-04-18 00:00:24 +08:00
collapse : 'Collapse menu' ,
expand : 'Expand menu' ,
2026-04-16 13:51:42 +08:00
updateTip : 'Run "hermes-web-ui update" in terminal to update' ,
updateVersion : 'Upgrade to v{version}' ,
2026-05-12 03:03:07 +02:00
reloadClientVersion : 'Reload for v{version}' ,
2026-04-16 13:51:42 +08:00
updating : 'Updating...' ,
2026-05-14 12:06:39 +08:00
updateSuccess : 'Update successful. Please refresh the page shortly. If it does not start after a while, start it manually.' ,
2026-04-16 13:51:42 +08:00
updateFailed : 'Update failed' ,
2026-04-22 20:27:33 +08:00
logout : 'Sign Out' ,
2026-04-24 02:31:42 +02:00
nodeVersionWarning : 'Detected Node.js v{version}. Please upgrade to version 23 or later.' ,
2026-04-22 20:27:33 +08:00
changelog : 'Changelog' ,
noChangelog : 'No changelog available' ,
2026-04-13 15:15:14 +08:00
} ,
2026-05-23 09:05:03 +08:00
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' ,
} ,
2026-05-03 22:10:40 +08:00
// Drawer
drawer : {
terminal : 'Terminal' ,
files : 'Workspace' ,
} ,
2026-04-13 15:15:14 +08:00
// Chat
chat : {
2026-04-22 16:14:50 +08:00
contextRemaining : 'remaining' ,
2026-05-06 15:05:44 +08:00
contextClickToEdit : 'Click to edit context length' ,
contextEditTitle : 'Edit Context Length' ,
contextEditDesc : 'Set context length limit for current model (in tokens)' ,
contextEditPlaceholder : 'Enter context length' ,
2026-05-26 19:35:48 +08:00
contextEditHint : 'Common values: 256k (Hermes default), 128k (GPT-4), 32k (GPT-3.5)' ,
2026-05-06 15:05:44 +08:00
contextEditSave : 'Save' ,
contextEditCancel : 'Cancel' ,
contextEditInvalid : 'Please enter a valid context length' ,
contextEditSuccess : 'Context length updated' ,
contextEditFailed : 'Update failed' ,
2026-04-13 15:15:14 +08:00
emptyState : 'Start a conversation with Hermes Agent' ,
2026-05-14 09:03:57 +08:00
cliEmptyState : 'Start a CLI chat session' ,
2026-05-19 08:25:01 +08:00
outlineTitle : 'Conversation Outline' ,
outlineEmpty : 'No conversation content' ,
outlineUserQuestion : 'User question' ,
2026-04-13 15:15:14 +08:00
inputPlaceholder : 'Type a message... (Enter to send, Shift+Enter for new line)' ,
2026-05-15 12:04:03 +08:00
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' ,
2026-05-25 15:48:17 +08:00
plan : 'Write a markdown implementation plan' ,
2026-05-25 19:26:23 +08:00
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' ,
2026-05-15 12:04:03 +08:00
clear : 'Clear the current display' ,
clearHistory : 'Delete this session’ s stored message history' ,
title : 'Rename this session' ,
compress : 'Run context compression while idle' ,
steer : 'Send steering text to the active bridge run' ,
destroy : 'Release the bridge agent for this session' ,
} ,
2026-04-13 15:15:14 +08:00
attachFiles : 'Attach files' ,
2026-05-02 13:26:57 +08:00
autoPlaySpeech : 'Auto-play voice' ,
2026-05-17 09:01:59 +08:00
showToolCalls : 'Show tool calls' ,
hideToolCalls : 'Hide tool calls' ,
2026-05-07 10:34:58 +08:00
messageQueue : 'Message queue' ,
removeQueuedMessage : 'Remove queued message' ,
2026-04-13 15:15:14 +08:00
stop : 'Stop' ,
2026-04-18 13:07:12 +08:00
start : 'Start' ,
stopGateway : 'Stop Gateway' ,
2026-04-13 15:15:14 +08:00
send : 'Send' ,
2026-04-14 14:47:18 +08:00
contextUsed : 'Context used:' ,
2026-04-13 15:15:14 +08:00
sessions : 'Sessions' ,
2026-05-06 16:15:42 +08:00
webUiSessions : 'Sessions' ,
2026-05-19 16:09:59 +08:00
allProfiles : 'All profiles' ,
2026-05-20 18:26:01 +08:00
profileMissingModelsTip : 'Profile "{profile}" has no available provider or model for this session' ,
2026-05-02 03:00:47 +02:00
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' ,
2026-05-19 16:09:59 +08:00
historyScopeHint : 'Read-only Hermes history sessions for the current profile, grouped by source.' ,
2026-04-13 15:15:14 +08:00
noSessions : 'No sessions' ,
2026-04-22 14:00:34 +08:00
searchTitle : 'Search Sessions' ,
searchSubtitle : 'Search by title or message content' ,
2026-05-16 02:29:51 +02:00
searchScope : 'Search scope: Web UI local session database only. Read-only Hermes history sessions are not included.' ,
2026-04-22 14:00:34 +08:00
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' ,
2026-04-13 15:15:14 +08:00
newChat : 'New Chat' ,
2026-05-16 00:11:51 +08:00
approvalKicker : 'Terminal permission' ,
approvalTitle : 'Review command before running' ,
approvalAllowOnce : 'Allow once' ,
approvalAllowSession : 'Allow session' ,
approvalAlways : 'Always' ,
approvalDeny : 'Deny' ,
2026-05-24 18:09:39 +08:00
clarifyKicker : 'Agent needs clarification' ,
clarifyTitle : 'The agent has a question for you' ,
clarifyPlaceholder : 'Type your answer...' ,
clarifySubmit : 'Reply' ,
clarifyDismiss : 'Dismiss' ,
2026-05-14 09:03:57 +08:00
newCliChat : 'New CLI' ,
2026-04-13 15:15:14 +08:00
deleteSession : 'Delete this session?' ,
sessionDeleted : 'Session deleted' ,
2026-05-06 16:15:42 +08:00
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' ,
2026-05-27 10:05:52 +08:00
importToWebUi : 'Import to Web UI' ,
importSessionSuccess : 'Session imported to Web UI' ,
importSessionAlreadyExists : 'Session already exists in Web UI' ,
importSessionFailed : 'Failed to import session' ,
2026-04-13 15:15:14 +08:00
rename : 'Rename' ,
2026-04-22 02:09:58 +02:00
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' ,
2026-05-24 10:55:55 +08:00
copySessionLink : 'Copy Session Link' ,
2026-05-24 14:13:42 +03:00
openSessionInNewTab : 'Open in new tab' ,
sessionLinkCopied : 'Session link copied' ,
2026-04-13 15:15:14 +08:00
copySessionId : 'Copy Session ID' ,
2026-05-07 13:49:57 +08:00
export : 'Export' ,
exportFull : 'Full Export (JSON)' ,
exportCompressed : 'Compressed Export (TXT)' ,
exportCompressing : 'Compressing context, please wait...' ,
exportSuccess : 'Session exported' ,
exportFailed : 'Export failed' ,
2026-04-13 15:15:14 +08:00
renamed : 'Renamed' ,
renameFailed : 'Rename failed' ,
renameSession : 'Rename Session' ,
2026-05-03 22:10:40 +08:00
sessionNotFound : 'Session not found' ,
2026-04-13 15:15:14 +08:00
enterNewTitle : 'Enter new title' ,
2026-04-30 20:17:38 +08:00
workspace : 'Workspace' ,
setWorkspace : 'Set Workspace' ,
setWorkspaceTitle : 'Set Session Workspace' ,
workspacePlaceholder : 'Enter project path, e.g. /home/user/project' ,
workspaceSet : 'Workspace set' ,
workspaceSetFailed : 'Failed to set workspace' ,
2026-05-17 12:20:53 +08:00
setModel : 'Set Model' ,
setModelTitle : 'Set Session Model' ,
modelSet : 'Model set' ,
modelSetFailed : 'Failed to set model' ,
2026-04-13 15:15:14 +08:00
other : 'Other' ,
runFailed : 'Run failed' ,
2026-04-15 16:36:04 +08:00
error : 'Error' ,
2026-04-13 15:15:14 +08:00
tool : 'Tool' ,
arguments : 'Arguments' ,
result : 'Result' ,
truncated : '... (truncated)' ,
2026-04-30 16:40:37 +08:00
executionDuration : 'Execution time' ,
2026-04-25 08:46:50 +08:00
thinkingLabel : 'Thinking' ,
thinkingInProgress : 'Thinking…' ,
thinkingShow : 'Show thinking' ,
thinkingHide : 'Hide thinking' ,
thinkingDuration : 'Observed {duration}' ,
thinkingChars : '{count} chars' ,
2026-04-26 22:59:43 +08:00
copyBubble : 'Copy message' ,
copiedBubble : 'Message copied' ,
copyFailed : 'Copy failed' ,
2026-05-02 13:26:57 +08:00
playSpeech : 'Play voice' ,
pauseSpeech : 'Pause' ,
resumeSpeech : 'Resume' ,
stopSpeech : 'Stop' ,
speechNotSupported : 'Voice playback not supported in this browser' ,
2026-04-13 15:15:14 +08:00
} ,
2026-05-08 11:32:47 +08:00
// Kanban
kanban : {
title : 'Kanban Board' ,
createTask : 'New Task' ,
noTasks : 'No tasks' ,
allStatuses : 'All Statuses' ,
allAssignees : 'All Assignees' ,
2026-05-10 13:58:44 +02:00
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?' ,
} ,
2026-05-08 11:32:47 +08:00
columns : {
triage : 'Triage' ,
todo : 'To Do' ,
ready : 'Ready' ,
running : 'Running' ,
blocked : 'Blocked' ,
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...' ,
} ,
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' ,
} ,
action : {
title : 'Actions' ,
complete : 'Complete' ,
completeSummary : 'Completion summary (optional)' ,
block : 'Block' ,
blockReason : 'Reason for blocking' ,
unblock : 'Unblock' ,
assign : 'Assign' ,
assignTo : 'Assign to...' ,
} ,
message : {
taskCreated : 'Task created' ,
taskCompleted : 'Task completed' ,
taskBlocked : 'Task blocked' ,
taskUnblocked : 'Task unblocked' ,
taskAssigned : 'Task assigned' ,
loadFailed : 'Failed to load task' ,
} ,
stats : {
total : 'Total' ,
2026-05-10 13:58:44 +02:00
tasks : 'Tasks' ,
2026-05-08 11:32:47 +08:00
} ,
} ,
2026-04-13 15:15:14 +08:00
// Jobs
jobs : {
title : 'Scheduled Jobs' ,
createJob : 'Create Job' ,
editJob : 'Edit Job' ,
noJobs : 'No scheduled jobs yet. Create one to get started.' ,
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' ,
deliverTarget : 'Deliver Target' ,
origin : 'Origin' ,
local : 'Local' ,
repeatCount : 'Repeat Count (optional)' ,
2026-04-30 10:17:25 +10:00
modelPlaceholder : 'Default model' ,
2026-04-13 15:15:14 +08:00
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' ,
2026-04-30 10:17:25 +10:00
modelUpdated : 'Model updated' ,
2026-04-13 15:15:14 +08:00
jobDeleted : 'Job deleted' ,
status : {
running : 'Running' ,
paused : 'Paused' ,
disabled : 'Disabled' ,
scheduled : 'Scheduled' ,
} ,
info : {
2026-04-30 10:17:25 +10:00
model : 'Model' ,
2026-04-13 15:15:14 +08:00
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' ,
} ,
2026-04-30 10:17:25 +10:00
runHistory : {
title : 'Run History' ,
runs : 'runs' ,
noRuns : 'No run history found.' ,
} ,
2026-04-13 15:15:14 +08:00
} ,
// Skills
skills : {
title : 'Skills' ,
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' ,
2026-05-02 10:56:58 +10:00
modified : 'Modified' ,
archived : 'Archived' ,
pinned : 'Pinned' ,
pin : 'Pin skill' ,
unpin : 'Unpin skill' ,
pinFailed : 'Failed to change pin status' ,
2026-04-14 21:48:53 +08:00
toggleFailed : 'Failed to toggle skill' ,
2026-05-02 10:56:58 +10:00
source : {
builtin : 'Builtin' ,
hub : 'Hub' ,
local : 'Local' ,
2026-05-24 19:47:52 +08:00
external : 'External' ,
2026-05-02 10:56:58 +10:00
} ,
2026-04-13 15:15:14 +08:00
} ,
2026-05-10 13:50:39 +02:00
// Plugins
plugins : {
title : 'Plugins' ,
refresh : 'Refresh' ,
notice : 'Read-only inventory of discoverable Hermes plugin manifests. Discovery metadata is read without loading plugin code. Management actions stay in CLI for v1; changes take effect in new Hermes sessions.' ,
loadFailed : 'Failed to load plugins' ,
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' ,
cli : 'CLI' ,
} ,
capabilities : {
tools : '{count} tools' ,
hooks : '{count} hooks' ,
env : '{count} env' ,
} ,
metadata : {
agentRoot : 'Agent root' ,
python : 'Python' ,
scanCwd : 'Scan cwd' ,
projectPlugins : 'Project plugins' ,
} ,
} ,
2026-04-13 15:15:14 +08:00
// Memory
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...' ,
2026-04-16 13:51:42 +08:00
soul : 'Soul' ,
noSoul : 'No soul configuration yet.' ,
soulPlaceholder : 'Write soul configuration...' ,
2026-04-13 15:15:14 +08:00
} ,
// Models
models : {
title : 'Models' ,
2026-04-18 22:08:34 +08:00
searchPlaceholder : 'Search models...' ,
2026-04-13 15:15:14 +08:00
addProvider : 'Add Provider' ,
providerType : 'Provider Type' ,
preset : 'Preset' ,
custom : 'Custom' ,
selectProvider : 'Select Provider' ,
chooseProvider : 'Choose a provider...' ,
2026-05-07 22:16:52 +08:00
getApiKey : 'Get API Key' ,
2026-04-13 15:15:14 +08:00
name : 'Name' ,
autoGeneratedName : 'Auto-generated from Base URL' ,
baseUrl : 'Base URL' ,
2026-04-25 14:00:07 +08:00
region : 'Region' ,
regionIntl : 'International' ,
regionCn : 'Mainland China' ,
2026-04-13 15:15:14 +08:00
baseUrlPlaceholder : 'e.g. https://api.example.com/v1' ,
apiKey : 'API Key' ,
apiKeyPlaceholder : 'sk-...' ,
defaultModel : 'Default Model' ,
2026-04-17 22:05:06 +08:00
selectOrInput : 'Select or type a model name...' ,
2026-04-13 15:15:14 +08:00
selectModel : 'Select a model...' ,
providerAdded : 'Provider added' ,
providerDeleted : 'Provider deleted' ,
deleteProvider : 'Delete Provider' ,
deleteConfirm : 'Are you sure you want to delete "{name}"?' ,
2026-04-17 23:11:57 +08:00
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.' ,
2026-04-23 08:39:19 +08:00
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.' ,
2026-04-26 22:51:35 +08:00
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.' ,
2026-05-17 09:45:56 +08:00
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' ,
2026-05-19 16:09:59 +08:00
xaiCopyLink : 'Copy authorization link' ,
2026-05-17 09:45:56 +08:00
xaiApproved : 'Sign-in succeeded!' ,
xaiExpired : 'The authorization link has expired. Please retry.' ,
2026-04-24 08:49:45 +08:00
customBadge : 'CUSTOM' ,
2026-04-26 22:51:35 +08:00
previewBadge : 'PREVIEW' ,
disabledBadge : 'UNAVAILABLE' ,
disabledTooltip : "This model is currently unavailable for your account." ,
2026-05-11 16:18:13 +02:00
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' ,
2026-04-13 15:15:14 +08:00
noProviders : 'No providers found. Add a custom provider to get started.' ,
2026-04-29 20:48:21 +08:00
models : 'Models' ,
count : 'models' ,
more : 'more' ,
2026-05-11 16:18:13 +02:00
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' ,
2026-05-11 15:24:45 +02:00
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' ,
2026-05-14 23:36:07 +08:00
clearVisibleModels : 'Clear selection' ,
2026-05-19 16:09:59 +08:00
currentDefault : 'Current default' ,
defaultShort : 'Default' ,
2026-04-13 15:15:14 +08:00
builtIn : 'Built-in' ,
customType : 'Custom' ,
provider : 'Provider' ,
2026-04-24 11:18:11 +08:00
contextLength : 'Context Length' ,
2026-05-26 19:35:48 +08:00
contextLengthPlaceholder : 'e.g. 256000 (optional)' ,
2026-04-13 15:15:14 +08:00
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' ,
} ,
2026-04-16 09:40:25 +08:00
// Profiles
2026-04-18 13:07:12 +08:00
gateways : {
title : 'Gateways' ,
running : 'Running' ,
stopped : 'Stopped' ,
started : 'Started' ,
startFailed : 'Failed to start gateway' ,
stopFailed : 'Failed to stop gateway' ,
} ,
2026-04-16 09:40:25 +08:00
profiles : {
title : 'Profiles' ,
create : 'Create Profile' ,
import : 'Import' ,
export : 'Export' ,
rename : 'Rename' ,
delete : 'Delete' ,
2026-05-23 18:44:53 +08:00
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.' ,
2026-04-16 09:40:25 +08:00
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' ,
2026-04-16 15:19:05 +08:00
importSelectFile : 'Select archive file' ,
importInvalidFile : 'Please select a valid archive (.tar.gz, .tgz, .gz, .zip)' ,
2026-04-16 09:40:25 +08:00
name : 'Profile Name' ,
2026-04-29 20:54:17 +08:00
namePlaceholder : 'Lowercase letters, numbers, hyphens only' ,
2026-05-03 22:10:40 +08:00
nameValidation : 'Profile name can only contain lowercase letters, numbers, underscores, and hyphens' ,
2026-04-16 09:40:25 +08:00
newName : 'New Name' ,
2026-04-29 20:54:17 +08:00
newNamePlaceholder : 'Lowercase letters, numbers, hyphens' ,
2026-04-16 09:40:25 +08:00
cloneFromCurrent : 'Clone from current profile' ,
2026-04-29 20:31:24 +08:00
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}' ,
2026-04-16 09:40:25 +08:00
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.' ,
2026-05-20 14:15:01 +08:00
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' ,
} ,
2026-05-20 12:59:34 +08:00
runtime : {
activeProfile : 'Active: {name}' ,
bridgeWorker : 'Bridge worker' ,
gateway : 'Gateway' ,
active : 'Active' ,
activeTag : 'Active' ,
idle : 'Idle' ,
running : 'Running' ,
stopped : 'Stopped' ,
restartGateway : 'Restart Gateway' ,
restartProfile : 'Restart Profile' ,
2026-05-23 19:41:51 +08:00
switchProfile : 'Switch Frontend Profile' ,
2026-05-20 12:59:34 +08:00
gatewayRestarted : 'Gateway restarted: {name}' ,
gatewayRestartFailed : 'Failed to restart gateway' ,
profileRestarted : 'Profile restarted: {name}' ,
profileRestartFailed : 'Failed to restart profile' ,
} ,
2026-04-16 09:40:25 +08:00
} ,
2026-04-13 15:15:14 +08:00
// Logs
logs : {
title : 'Logs' ,
all : 'All' ,
searchPlaceholder : 'Search...' ,
refresh : 'Refresh' ,
noEntries : 'No log entries' ,
} ,
// Settings
settings : {
title : 'Settings' ,
saved : 'Saved' ,
saveFailed : 'Save failed' ,
tabs : {
display : 'Display' ,
2026-05-23 18:44:53 +08:00
account : 'Current Account' ,
users : 'Account Management' ,
2026-04-13 15:15:14 +08:00
agent : 'Agent' ,
memory : 'Memory' ,
2026-05-19 17:58:39 +08:00
compression : 'Compression' ,
2026-04-13 15:15:14 +08:00
session : 'Session' ,
privacy : 'Privacy' ,
apiServer : 'API Server' ,
2026-04-19 20:59:25 +08:00
models : 'Models' ,
2026-05-10 20:08:38 +08:00
voice : 'Voice' ,
2026-04-19 20:59:25 +08:00
} ,
models : {
apiKey : 'API Key' ,
apiKeyPlaceholder : 'Enter API key' ,
save : 'Save' ,
saved : 'Saved' ,
saveFailed : 'Save failed' ,
noProviders : 'No providers configured' ,
2026-04-13 15:15:14 +08:00
} ,
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' ,
busyInputMode : 'Busy Input Mode' ,
busyInputModeHint : 'Allow input while AI is processing' ,
2026-04-16 23:13:04 +08:00
theme : 'Theme' ,
themeHint : 'Choose light, dark, or follow system preference' ,
themeLight : 'Light' ,
themeDark : 'Dark' ,
themeSystem : 'System' ,
2026-04-13 15:15:14 +08:00
} ,
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' ,
} ,
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' ,
} ,
2026-05-19 17:58:39 +08:00
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' ,
} ,
2026-04-13 15:15:14 +08:00
session : {
mode : 'Reset Mode' ,
modeHint : 'Trigger condition for session reset' ,
modeBoth : 'Idle + Scheduled' ,
modeIdle : 'Idle Only' ,
2026-05-16 21:18:59 +08:00
modeDaily : 'Scheduled Only' ,
modeNone : 'Never (Manual Only)' ,
2026-04-13 15:15:14 +08:00
idleMinutes : 'Idle Timeout' ,
idleMinutesHint : 'Wait time before auto-reset (minutes)' ,
atHour : 'Scheduled Reset Time' ,
2026-04-22 02:09:58 +02:00
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' ,
2026-04-13 15:15:14 +08:00
atHourHint : 'Reset session at this hour daily' ,
2026-05-04 21:29:39 +08:00
requireAuth : 'Session Authorization' ,
requireAuthHint : 'Require authorization for session operations' ,
2026-04-13 15:15:14 +08:00
} ,
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' ,
} ,
2026-05-08 18:29:43 +08:00
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' ,
} ,
2026-05-10 20:08:38 +08:00
voice : {
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)' ,
// WebSpeech
webspeechVoice : 'Voice' ,
webspeechVoiceHint : 'Select a voice from your browser or OS' ,
webspeechVoicePlaceholder : 'Auto (default voice)' ,
// OpenAI
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' ,
// Custom endpoint
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' ,
// Edge TTS
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' ,
2026-05-11 21:56:11 +08:00
edgeRate : 'Speed' ,
edgeRateHint : 'Adjust speech speed (0.5x ~ 2.0x)' ,
edgePitch : 'Pitch' ,
edgePitchHint : 'Adjust speech pitch (-20 ~ +20 Hz)' ,
2026-05-10 20:08:38 +08:00
// Test
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}' ,
2026-05-16 08:55:23 +08:00
// MiMo TTS
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' ,
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' ,
2026-05-10 20:08:38 +08:00
} ,
2026-04-13 15:15:14 +08:00
} ,
2026-05-28 12:30:49 +08:00
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" ,
prepareSuccess : "Preview code is ready" ,
installSuccess : "Dependencies installed" ,
startSuccess : "Preview started" ,
stopSuccess : "Preview stopped" ,
} ,
2026-04-13 15:15:14 +08:00
// Platform channel settings
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)' ,
2026-04-29 20:31:24 +08:00
exclusiveTokenWarning : 'This platform uses exclusive token locking. Each profile must use a different identity token to avoid conflicts with other profiles.' ,
2026-04-13 15:15:14 +08:00
botToken : 'Bot Token' ,
botTokenHint : 'Bot token from developer portal' ,
accessToken : 'Access Token' ,
accessTokenHint : 'Matrix access token' ,
homeserver : 'Homeserver URL' ,
homeserverHint : 'Matrix homeserver URL' ,
appId : 'App ID' ,
appIdHint : 'Feishu App ID' ,
appSecret : 'App Secret' ,
appSecretHint : 'Feishu App Secret' ,
clientId : 'Client ID' ,
clientIdHint : 'DingTalk Client ID' ,
clientSecret : 'Client Secret' ,
clientSecretHint : 'DingTalk Client Secret' ,
2026-05-27 11:32:26 +08:00
cardTemplateId : 'AI Card Template ID' ,
cardTemplateIdHint : 'DingTalk AI Card template ID; leave empty to disable AI Cards' ,
2026-05-16 13:54:38 +08:00
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' ,
2026-04-13 15:15:14 +08:00
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...' ,
2026-04-29 20:48:21 +08:00
// QQ
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' ,
2026-04-13 15:15:14 +08:00
} ,
// Language
language : {
label : 'Language' ,
zh : '中文' ,
en : 'English' ,
} ,
2026-04-14 14:47:18 +08:00
2026-04-15 16:36:04 +08:00
// Terminal
terminal : {
sessions : 'Sessions' ,
newTab : 'New Terminal' ,
closeSession : 'Close this session?' ,
sessionExited : 'Exited' ,
processExited : 'Process exited with code {code}' ,
2026-05-03 22:10:40 +08:00
noSessions : 'No terminal sessions' ,
connectionFailed : 'Terminal service connection failed' ,
connectionClosed : 'Terminal connection closed' ,
connectionError : 'Terminal connection error' ,
2026-04-15 16:36:04 +08:00
} ,
2026-04-24 20:41:14 +08:00
// Group Chat
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' ,
agentAlreadyInRoom : 'Agent already in this room' ,
2026-05-21 14:54:41 +08:00
agentAddFailedCount : '{count} agent(s) were not added: {details}' ,
2026-04-24 20:41:14 +08:00
noAgents : 'No agents in this room' ,
members : 'members' ,
roomCreated : 'Room created' ,
roomDeleted : 'Room deleted' ,
2026-05-15 15:52:16 +08:00
roomCloned : 'Room cloned' ,
cloneRoom : 'Clone room' ,
2026-05-24 10:55:55 +08:00
copyRoomLink : 'Copy Room Link' ,
2026-04-24 20:41:14 +08:00
deleteRoomConfirm : 'Delete this room?' ,
2026-05-15 15:52:16 +08:00
clearContext : 'Clear context' ,
clearContextConfirm : 'Clear this room context? Messages and compression snapshots will be removed, but agents and members stay.' ,
contextCleared : 'Context cleared' ,
2026-04-24 20:41:14 +08:00
you : 'You' ,
joined : 'Joined room' ,
joinFailed : 'Failed to join room' ,
inputPlaceholder : 'Type a message... (Enter to send)' ,
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' ,
} ,
2026-04-14 14:47:18 +08:00
// Usage
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' ,
2026-05-13 01:41:49 +02:00
dailyTrend : 'Daily Usage' ,
2026-04-14 14:47:18 +08:00
date : 'Date' ,
tokens : 'Tokens' ,
cache : 'Cache' ,
2026-05-02 10:36:33 +10:00
cacheRead : 'Cache Read' ,
cacheWrite : 'Cache Write' ,
2026-04-14 14:47:18 +08:00
sessions : 'Sessions' ,
cost : 'Cost' ,
noData : 'No usage data' ,
} ,
2026-05-14 09:28:51 +08:00
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' ,
} ,
2026-04-23 12:09:39 +08:00
// Files
files : {
title : 'Files' ,
2026-05-03 22:10:40 +08:00
fileTree : 'File Tree' ,
2026-04-23 12:09:39 +08:00
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' ,
2026-04-23 14:10:14 +08:00
closePreview : 'Close' ,
2026-04-23 12:09:39 +08:00
saveFile : 'Save' ,
} ,
// Download
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' ,
2026-05-22 19:04:15 +08:00
contentDisplay : 'Content display' ,
2026-04-23 12:09:39 +08:00
download : 'Download' ,
2026-04-24 02:31:42 +02:00
downloadFile : 'Download file' ,
2026-04-23 12:09:39 +08:00
} ,
2026-04-22 20:27:33 +08:00
// Changelog
changelog : {
2026-05-27 12:21:37 +08:00
new_0_6_3_1 : 'Bridge spinner status is no longer stored as model reasoning, preventing decorative thinking text from contaminating future context' ,
new_0_6_3_2 : 'History now includes controls to import Hermes CLI sessions into the Web UI local history with safer message normalization' ,
new_0_6_3_3 : 'Provider setup now supports editable built-in base URLs, LM Studio as a built-in provider, and live LM Studio /models discovery' ,
new_0_6_3_4 : 'OpenRouter requests sent through the Web UI bridge now include Hermes Web UI app attribution headers' ,
new_0_6_3_5 : 'The public auth status endpoint no longer exposes the first username to unauthenticated requests' ,
new_0_6_3_6 : 'DingTalk settings now include an AI Card Template ID field persisted as DINGTALK_CARD_TEMPLATE_ID' ,
new_0_6_3_7 : 'Bridge socket JSON output now sanitizes lone Unicode surrogate characters to prevent SSE crashes during chat' ,
2026-05-26 19:35:48 +08:00
new_0_6_2_1 : 'Web Bridge now supports /plan commands with correct run startup and visible command state' ,
new_0_6_2_2 : 'The chat input command menu now includes /goal and /subgoal commands, including status, pause, resume, done, and clear actions' ,
new_0_6_2_3 : 'Goal and subgoal workflows now integrate with chat sessions, including goal continuations and status updates' ,
new_0_6_2_4 : 'Job delivery target channel options are restored so scheduled jobs can pick the intended destination' ,
new_0_6_2_5 : 'Context token usage now resumes accurately with snapshot-aware calculations after reconnects' ,
new_0_6_2_6 : 'Context checkpoint compression is more reliable for slow Codex summarization: Web UI waits 5 minutes and the Python bridge broker no longer cuts off worker requests after 2 minutes' ,
new_0_6_2_7 : 'Chat queue promotion is fixed so queued messages do not jump into the message list early, including synced windows' ,
new_0_6_2_8 : 'Clarify prompts no longer submit open-text replies on Enter and answered prompts no longer reopen after switching sessions' ,
new_0_6_2_9 : 'Bridge terminal environment refresh and stale pid cleanup are scoped more tightly, reducing stale runtime status in the UI' ,
new_0_6_2_10 : 'The default context length now follows the Hermes standard of 256,000 tokens' ,
2026-05-20 15:34:09 +08:00
new_0_5_31_1 : "Harden Bridge broker restarts, fix final group-chat stream rendering, and add {'@'}all routing for group chat" ,
new_0_5_31_2 : 'File manager can copy absolute paths, and the mobile session drawer overlay no longer falls behind chat content' ,
new_0_5_31_3 : 'Profile selector now shows avatars, custom avatar uploads, runtime status modal, and gateway/profile restart actions' ,
new_0_5_31_4 : 'Profile avatars now appear in single chat, group chat, and collapsed sidebar, with Web UI profile metadata storage and Windows-safe paths' ,
new_0_5_31_5 : 'Improve Docker, Termux, and Windows gateway detection and restart checks by using gateway_state/gateway.pid for managed gateway liveness' ,
new_0_5_31_6 : 'Add APIKEY.FUN image-generation media endpoint and bundled apikey-image-gen skill for text-to-image, image-to-image, and image editing via the active Profile fun-codex provider' ,
2026-05-21 14:31:52 +08:00
new_0_5_33_1 : 'Single chat and group chat now keep run failures and socket errors as red Agent messages in the message list instead of flashing them briefly' ,
new_0_5_33_2 : 'Session search can now scope results to the selected Profile, while still searching all Profiles when no Profile is selected' ,
new_0_5_33_3 : 'Skills page now shows Chinese and English recommendation documents when no skill is selected, and clicking the selected skill again clears the selection' ,
new_0_5_33_4 : 'Remove unused changelog localization entries to reduce frontend i18n size' ,
new_0_5_33_5 : 'Fix agent bridge startup failures on Chinese Windows systems caused by netstat output encoding' ,
new_0_5_33_6 : 'Refresh the Nous Portal preset model list from the public catalog and Portal recommendations' ,
new_0_5_33_7 : 'Profile lists and runtime status now read Profile names from disk and default models from config, avoiding CLI table column-width parsing errors' ,
2026-05-22 11:12:21 +08:00
new_0_5_34_1 : 'Normalize multimodal tool results while storing session and group-chat messages, avoiding base64 image payloads in replays' ,
new_0_5_34_2 : 'Persist custom Hermes models through backend-managed configuration and expose add/remove model endpoints' ,
new_0_5_34_3 : 'Keep Bridge final context usage and tool status updates accurate after runs complete' ,
new_0_5_34_4 : 'Improve Kanban board filtering, assignee display, card actions, and task detail handling' ,
new_0_5_34_5 : 'Fix compression usage accounting by caching fixed prompt/tool context and reporting full-context token totals' ,
new_0_5_34_6 : 'Cache fixed context per group-chat agent and only show compression progress when compression actually starts' ,
new_0_5_34_7 : 'Sync Web UI bundled skills into every Profile and log the target Profile for each injection' ,
2026-05-22 12:03:43 +08:00
new_0_5_34_8 : 'If Kanban fails on Windows, upgrade Hermes to pick up the latest kanban database migration fixes' ,
2026-05-23 10:41:24 +08:00
new_0_5_35_1 : 'Bridge sessions can now run concurrently across different sessions while same-session runs stay serialized to preserve message order' ,
new_0_5_35_2 : 'Add the Performance Monitor page for system CPU/memory, Web UI, Bridge Broker, Workers, and active session status' ,
new_0_5_35_3 : 'Add per-worker resource metrics showing CPU, memory, Profile, session count, and running state' ,
new_0_5_35_4 : 'Improve Bridge worker lifecycle cleanup so broker shutdowns and parent-process exits reclaim workers and reduce orphan Python processes' ,
new_0_5_35_5 : 'Harden monitoring compatibility with resource collection fallbacks for macOS, Windows, Linux, Docker, and Termux' ,
new_0_5_35_6 : 'Performance monitoring no longer blocks on worker requests while agents are initializing, reducing request timeouts on Windows' ,
new_0_5_35_7 : 'Chat Markdown now supports inline text-content previews, and download icons download files directly instead of opening the preview drawer' ,
new_0_5_35_8 : 'Polish the content preview drawer with a mobile close action, full-width mobile layout, 800px desktop width, and consistent text/Markdown backgrounds' ,
2026-05-24 14:00:31 +08:00
new_0_6_0_1 : 'Account- and Profile-scoped management now consistently protects sessions, models, usage, Kanban, jobs, uploads, media, and related Hermes APIs' ,
new_0_6_0_2 : 'Bundled media skills use the generated server token only for media endpoints and resolve fun-codex/xAI credentials from the requested Profile' ,
new_0_6_0_3 : 'Single chat and group chat now inject the current Hermes Profile into run instructions so skills can send X-Hermes-Profile' ,
new_0_6_0_4 : 'delegate_task subagent progress now streams into the chat UI with start, tool, progress, and completion updates' ,
new_0_6_0_5 : 'Stopping or aborting a run clears transient events so stale abort state does not leak into the next chat' ,
new_0_6_0_6 : 'Update docs and website copy for account management, default credentials, account/Profile management, uploads/downloads, and bundled media skills' ,
new_0_6_0_7 : 'Add CLI maintenance commands for clearing login IP locks and resetting the default admin / 123456 login' ,
new_0_6_0_8 : 'Version 0.6.0 is the boundary between single-user and multi-user Web UI. If multi-user mode causes issues, please file an issue and roll back to the 0.5.35 single-user release if needed' ,
2026-05-25 13:06:06 +08:00
new_0_6_1_1 : 'Session lists now show every Profile available to the account unless a Profile filter is explicitly selected, and CLI start/stop/status no longer print the node:sqlite experimental warning' ,
new_0_6_1_2 : 'Clarify and confirmation replies now travel through the authenticated chat socket to the Hermes bridge, with response-path tests' ,
new_0_6_1_3 : 'Navigation entries and chat session rows now use native links for open-in-new-tab, copy-link, and persistent collapsed sidebar behavior' ,
new_0_6_1_4 : 'Session links no longer leak route Profile filters into the normal session list, and Open in new tab labels are localized' ,
new_0_6_1_5 : 'Skills now read skills.external_dirs from the active Profile config, mark external skills, preserve local precedence, and resolve external files' ,
new_0_6_1_6 : 'Login IP lockout now allows 10 failed attempts and the locked login screen shows clear-lock and reset-default-login recovery commands' ,
new_0_6_1_7 : 'Mobile and background chat disconnects are treated as transient, then reconnect resumes the run state from the server' ,
new_0_6_1_8 : 'Bridge tool marker flushing now persists partial tool-call marker prefixes at tool and run boundaries' ,
new_0_6_1_9 : 'Profile-aware history actions now delete sessions with profile-qualified targets and refresh History when the global Profile changes' ,
new_0_6_1_10 : 'The legacy AUTH_DISABLED bypass was removed for multi-user permissions, while AUTH_TOKEN remains supported' ,
2026-05-14 10:32:24 +08:00
2026-04-22 20:27:33 +08:00
} ,
2026-04-13 15:15:14 +08:00
}