lazyBoy/apps/web/src/locales/en.ts

582 lines
27 KiB
TypeScript
Raw Normal View History

2026-09-06 05:39:06 +00:00
import type { zhTW } from "./zh-TW";
/** English UI copy. Keys must stay in lockstep with zh-TW. */
export const en: { [K in keyof typeof zhTW]: string } = {
2026-09-08 09:14:15 +00:00
sharedDesktop: "Shared control",
sharedNeedsUser: "{name} is waiting for you to finish the steps on screen. Then press “Done, continue”.",
doneContinue: "Done, continue",
2026-09-06 05:39:06 +00:00
search: "Search",
sharedComputer: "Shared computer",
privateComputer: "Private computer",
stopped: "Stopped",
booting: "Starting",
running: "Running",
suspended: "Sleeping",
error: "Error",
openComputer: "Start computer",
stopTask: "Stop task",
takeControl: "Take control",
takeOverNow: "Take over",
releaseControl: "Release control",
done: "Done",
skip: "Skip",
localWorkspace: "Local workspace",
pinned: "Pinned",
agentGroup: "Agent",
operationFailed: "That didnt work",
loadFailed: "Couldnt load",
settingsFailed: "Couldnt save settings",
loginFailed: "Couldnt sign in",
rememberFailed: "Couldnt remember that message",
clipboardWriteBlocked: "The browser blocked clipboard access.",
newConversation: "New chat",
workTools: "Work tools",
computer: "Computer",
memory: "Memory",
plugins: "Plugins",
pluginShort: "Plugin",
botSettings: "Bot settings",
add: "Add",
addBot: "New bot",
addGroup: "New group",
groups: "Groups",
unreadMessages: "{count} unread",
members: "{count} members",
hideHiddenItems: "Hide hidden items",
showHiddenItems: "Show hidden items",
mcpConnected: "{count} MCP connected",
connectMcpServer: "Connect an MCP server",
openOnPhone: "Open on phone",
settings: "Settings",
about: "About",
helpCenter: "Help",
sendFeedback: "Send feedback",
logout: "Sign out",
workspaceMenu: "Workspace menu",
chooseBot: "Choose a bot",
startRoomDiscussion: "Start a discussion with {name}",
startBotWork: "Start working with {name}",
2026-09-09 06:41:09 +00:00
roomWillReply: "{names} are here. Whoever is @-mentioned answers; otherwise the host, or the best fit, picks it up.",
everyoneMention: "everyone", mentionEveryoneHint: "every member answers", mentionList: "Members to mention",
2026-09-09 09:20:39 +00:00
openAgentChat: "Open chat with {name}",
2026-09-09 06:41:09 +00:00
routedTo: "{names} will answer this", handedTo: "→ handed to {name}",
today: "Today", yesterday: "Yesterday",
hostBadge: "Host", hostMenuLabel: "Who hosts", hostHint: "The host answers what nobody is named for. Tap to change it.",
2026-09-06 05:39:06 +00:00
botWelcome: "Send a message and it will get it done on its own computer.",
remembered: "Remembered",
remember: "Remember",
working: "{name} is working…",
copyCode: "Copy code",
copiedCode: "Copied",
copyMessage: "Copy",
copiedMessage: "Copied",
2026-09-09 09:20:39 +00:00
replyToThis: "Reply to this",
replyingTo: "Replying to {name}",
cancelReply: "Cancel reply",
you: "You",
2026-09-06 05:39:06 +00:00
anotherConversationQueued: "Another chat is running, so this one is queued.",
workingStep: "{name} is working… {step}",
queuedMessages: "{count} more messages queued",
pausedUserControl: "Youre controlling the screen, so {name} is paused. Press “Release control” when youre done and it will continue from here (queued messages too).",
pausedNeedsUser: "{name} needs you on the screen (sign-in or verification). Press “Take over”, then “Release control” when youre done.",
releaseAndContinue: "Release and continue",
attachFile: "Attach file",
attachFileHint: "Images go to the model on this message. Other files land in the computer inbox and are deleted after two hours.",
attachTooMany: "Up to 4 attachments at a time",
attachTooLarge: "Each file must be 10 MB or smaller",
attachType: "That file type cant be attached",
attachRemove: "Remove {name}",
attachedFile: "Attached {name}",
attachDrop: "Drop to attach",
teachTask: "Teach a task",
teachTaskHint: "You demonstrate once; it turns that into a skill",
teachNeedsBot: "Choose a bot first",
taughtSkills: "Taught skills",
goalCommandHint: "Keep planning and executing until its verified or it needs you",
searchSkills: "Search skills",
noMatchingSkills: "No matching skills",
teachDialogLead: "Youll drive the screen while {name} watches: which controls you click, what you type, which pages you visit. It becomes a skill about intent and flow, not replayed coordinates.",
teachGoalLabel: "What are you demonstrating? (one sentence)",
teachGoalPlaceholder: "For example: open the STAR training system, finish the assigned videos, and complete the quiz",
teachTip1: "Work at a normal pace. Extra clicks are ignored.",
teachTip2: "Values that change (search terms, names, dates) can become parameters — use a real example while you demonstrate.",
teachTip3: "Password fields are not recorded. Sign in before you start if you need to.",
startDemo: "Start demo",
finishDemo: "Finish demo",
teachingBadge: "Recording",
teachingComposerHint: "Recording: finish the demo before sending a message",
teachingLive: "Learning: {goal}",
teachingHint: "The screen is yours — work on the right (or enlarge it). Press “Finish demo” when youre done.",
teachingCaptured: "{count} actions captured",
distilling: "Turning the “{goal}” demo into a skill…",
skillDraftTitle: "New skill draft",
skillDraftFrom: "From {count} actions",
skillName: "Skill name",
skillNamePlaceholder: "For example: Complete STAR training course",
skillInputs: "Inputs",
skillSteps: "Steps (intent, editable)",
moreSteps: "…and {count} more",
editSteps: "Edit steps",
skillCheck: "How to know its done",
skillDistillFailed: "The model couldnt tidy this up. This list is from the raw actions — edit before saving.",
discard: "Discard",
testRun: "Try it",
saveSkill: "Save skill",
messageTo: "Message {name}",
chooseConversationFirst: "Choose a chat first",
stopConversation: "Stop",
editSkill: "Edit skill",
editSkillFull: "Full edit",
runSkillNamed: "Run “{name}”",
skillEditLead: "Write this for the bot: intent and on-screen wording, not coordinates. One item per line.",
skillIntent: "Intent (what this skill should achieve)",
skillWhenToUse: "When to use it",
skillInputsLabel: "Inputs (one per line: name: description | e.g. example)",
skillInputsPlaceholder: "courseName: course title | e.g. Workplace Bullying Prevention (2026)",
skillPreconditions: "Preconditions",
skillStepsLabel: "Steps (one per line; use → for what you should see)",
skillStepsPlaceholder: "Click “Next” → page number increases; if Next is locked, wait until it enables",
skillHowToCheck: "How to know its done",
skillWhatToReturn: "What to report when finished",
skillCautions: "Cautions (one per line)",
deleteSkill: "Delete skill",
deleteSkillConfirm: "Delete skill “{name}”? The bot wont recognize it after that.",
skillSaved: "Saved",
exportSkill: "Export",
exportSkillHint: "Download as JSON to import on another bot",
importSkill: "Import skill",
importSkillHint: "Add a skill from a previously exported JSON file",
skillImportInvalid: "That isnt a valid skill file. Choose a JSON export from LazyBoy.",
collapseSidebar: "Collapse sidebar",
botComputer: "{name}s computer",
dedicatedScreen: "This screen",
enlarge: "Enlarge",
userControlling: "Youre in control",
aiReadOnly: "AI is working (view only)",
readOnly: "View only",
pasteClipboard: "Paste clipboard",
copyDesktopClipboard: "Copy desktop clipboard",
moreActions: "More",
unpin: "Unpin",
pin: "Pin",
markUnread: "Mark unread",
enterGroupName: "Enter a group name",
changeGroup: "Change group",
createOrMoveGroup: "Create / move to group",
removeFromGroup: "Remove from group",
unhide: "Unhide",
hide: "Hide",
delete: "Delete",
chooseConversation: "Choose a chat",
deleteConversation: "Delete chat",
clearConversation: "Clear this chat",
clearConversationTitle: "Clear this chat?",
clearConversationDescription: "Messages will be deleted. This agents long-term memory stays.",
cancel: "Cancel",
clearMessages: "Clear messages",
deleteConversationTitle: "Delete this chat?",
deleteConversationDescription: "It will leave the list. This agents long-term memory stays.",
avatarAppearance: "Avatar",
avatarAppearanceHint: "Color, shape, expression, and background. Eyes follow the cursor.",
color: "Color",
chooseColor: "Choose {value}",
customColor: "Custom color",
shape: "Shape",
expression: "Expression",
background: "Background",
bgNone: "None",
bgCircle: "Circle",
bgSquircle: "Squircle",
bgSquare: "Square",
exprIdle: "Idle",
exprHappy: "Happy",
exprSad: "Sad",
exprMad: "Mad",
exprSurprised: "Surprised",
exprWink: "Wink",
exprSleepy: "Sleepy",
exprSmug: "Smug",
exprUnsure: "Unsure",
exprScared: "Scared",
exprLove: "Love",
exprShy: "Shy",
exprSick: "Sick",
exprThinking: "Thinking",
name: "Name",
tags: "Tags",
tagsPlaceholder: "research, design, support (comma-separated)",
tagsLimit: "Up to 6 tags",
shortTitle: "Short title",
shortTitlePlaceholder: "For example: product research assistant",
description: "Description",
descriptionPlaceholder: "What this bot is for",
saving: "Saving…",
saveSettings: "Save settings",
deleteBot: "Delete bot",
2026-09-08 17:14:29 +00:00
memoryRevision: "Revision {revision}",
memoryFromMessage: "Saved from a message",
memoryFromAgent: "Saved by agent",
memoryFromManual: "Manual / source unrecorded",
memoryDetails: "Source and timestamps",
memoryCreated: "Created",
memoryUpdated: "Updated",
memorySourceSession: "Source conversation",
memorySourceMessage: "Source message",
memorySourceRun: "Source run",
memoryAgentDisabled: "Memory is off for this agent. Stored items are retained.",
memorySemanticReady: "Semantic memory search is available.",
memorySemanticUnavailable: "Semantic search is temporarily unavailable; using text matching and retrying automatically.",
memorySemanticBusy: "Semantic search is preparing or busy; text matching is used when needed.",
memoryIndexedCount: "{indexed} of {total} memories have a semantic index.",
memoryOwner: "Memory belongs to",
memoryChooseAgent: "Which agent should remember this?",
memoryChooseAgentHelp: "This is a group message. Choose the agent that should keep this memory.",
memoryViewIncluded: "View memories included then",
memoryLoadingIncluded: "Loading memories…",
memoryHistoricalUnavailable: "This memory was deleted or its historical revision was cleared.",
messageRunDetails: "Run details and memory",
2026-09-06 05:39:06 +00:00
memoryHelp: "Clearing a chat doesnt delete these. Store clear preferences or facts — never passwords.",
enableLongTermMemory: "Long-term memory",
addMemory: "Add memory",
memoryPlaceholder: "Clear preferences or facts only. Passwords and tokens are rejected.",
memorySearch: "Search",
filterMemory: "Filter memory",
noMemory: "No long-term memory yet. Ask the agent to remember something from chat, or add it here.",
noMatchingMemory: "No matching memories.",
save: "Save",
edit: "Edit",
clearAllMemoryConfirm: "Clear all memory?",
clearMemoryConfirm: "Clear",
clearAll: "Clear all",
mcpHelp: "Press “Choose MCP” to connect from the catalog. If a key is required, fill it in first. Local stdio servers start inside the API container.",
mcpNamePlaceholder: "For example: github",
mcpConnectFailed: "Couldnt connect. Check the key and try again.",
command: "Command",
commandPlaceholder: "npx, uvx, or a full path",
arguments: "Arguments",
environmentVariables: "Environment KEY=value",
headers: "Headers KEY=value",
connecting: "Connecting…",
connectMcp: "Connect MCP",
chooseMcp: "Choose MCP",
mcpPickerTitle: "Choose MCP",
mcpPickerLead: "Pick a featured or registry server. Every agent can use its tools.",
searchMcp: "Search MCP",
mcpRemote: "Remote",
mcpLocal: "Local",
mcpAdded: "Connected",
mcpNeedsKey: "Needs a key",
mcpNoResults: "No matching MCP. Try another search, or connect a custom server.",
mcpCustom: "Custom",
mcpBackToList: "Back to list",
mcpConnectNamed: "Connect {name}",
mcpKeyHint: "This MCP needs credentials.",
noMcp: "No MCP yet. Press “Choose MCP” above to connect one from the catalog.",
toolsCount: "{count} tools",
disabled: "Off",
disconnected: "Disconnected",
noTools: "No tools",
reconnect: "Reconnect",
disable: "Disable",
enable: "Enable",
preparingDesktop: "Preparing this agents desktop…",
computerPreviewHint: "Start the computer and the screen will show up here.",
bootingProgress: "Starting…",
restartComputer: "Restart",
shutDownComputer: "Shut down",
computerPower: "Computer menu",
sharedPowerHint: "This is a shared computer. The action affects every agent using it.",
stopAndTakeOver: "Stop and take over",
2026-09-08 01:14:53 +00:00
takeoverBusy: "Stop the task first, then take the mouse.",
2026-09-06 05:39:06 +00:00
hudBooting: "Computer starting…",
hudWaking: "Waking…",
hudConnecting: "Connecting…",
hudHandoff: "Handing off…",
pasteToRemoteComputer: "Paste to remote computer",
pasteRemoteHelp: "Paste text here, then send it into VNC. This works over plain HTTP on the LAN.",
pasteTextPlaceholder: "Paste text here…",
pasteIntoVnc: "Paste into VNC",
botNamePlaceholder: "For example: research assistant",
sharedComputerHint: "Shares the environment with other bots",
privateComputerHint: "A fresh dedicated Docker desktop",
create: "Create",
groupDescription: "A group opens one chat where every selected agent speaks.",
2026-09-09 06:41:09 +00:00
groupHostHint: "{name} starts as host — one tap in the top bar swaps it.",
2026-09-06 05:39:06 +00:00
groupName: "Group name",
groupNamePlaceholder: "For example: product research",
chooseBots: "Choose bots (at least two)",
creating: "Creating…",
createGroup: "Create group",
deleteGroup: "Delete group",
deleteNamed: "Delete {name}?",
deleteGroupDescription: "The group chat will be deleted. The bots and their own chats and memory stay.",
deleteDedicatedBotDescription: "The chat, private computer, and files on it will be permanently deleted.",
deleteSharedBotDescription: "The chat will be deleted. The shared computer and its files stay.",
phoneAccessDescription: "On the same LAN, open this URL in a phone browser and sign in with the same access token.",
localAddressWarning: "This is a loopback address — a phone cant open it. Use this computers LAN IP, for example http://192.168.x.x:3101.",
close: "Close",
copied: "Copied",
copyUrl: "Copy URL",
workspaceName: "Workspace name",
showHiddenBots: "Show hidden bots",
collapseRightSidebar: "Collapse right sidebar",
workspaceSettingsHint: "Avatar, memory, and MCP live in the right-hand tabs. This only changes how this workspace is shown.",
modelSettings: "Models",
2026-09-10 06:38:31 +00:00
modelSettingsHint: "Each provider keeps its own key, model, and endpoint. The key stays on the server; this screen only shows dots.",
2026-09-06 05:39:06 +00:00
modelProvider: "Model provider",
providerXai: "xAI",
providerOpencodeGo: "OpenCode Go",
providerOpenaiCompatible: "OpenAI-compatible",
providerXaiHint: "Grok. Get a key from console.x.ai.",
providerOpencodeGoHint: "OpenCode Go subscription. Get a key from opencode.ai/auth.",
providerOpenaiCompatibleHint: "Self-hosted vLLM, Ollama, LiteLLM, or another OpenAI-compatible endpoint.",
apiKey: "API key",
apiKeyPlaceholder: "sk-…",
2026-09-10 06:38:31 +00:00
apiKeyStored: "Saved. Dots only — the real key stays on the server.",
2026-09-06 05:39:06 +00:00
clearApiKey: "Clear saved key",
modelId: "Model",
modelIdPlaceholder: "For example: qwen2.5 or llama3.1",
reloadModels: "Reload models",
baseUrl: "Base URL",
baseUrlPlaceholder: "http://127.0.0.1:11434/v1",
baseUrlHint: "If the API runs in Docker, use host.docker.internal instead of localhost for services on this machine.",
workspaceModelHint: "Pick a provider, then the key and model. OpenAI-compatible needs your own endpoint.",
aboutDescription: "A local multi-agent workspace. Each bot has its own Linux computer. You can put them in a group chat and connect MCP tools.",
apiStatus: "API status: {status}",
statusNormal: "OK",
statusUnavailable: "Unreachable",
statusChecking: "Checking…",
helpBotsTitle: "Bots",
helpBots: "Use + at the top left to add a bot. Click the list to chat. Right-click to pin, hide, or delete.",
helpGroupsTitle: "Groups",
2026-09-09 06:41:09 +00:00
helpGroups: "+ → New group, pick at least two. @ a name and that agent answers; unaddressed messages go to the host or the best fit.",
2026-09-06 05:39:06 +00:00
helpComputerTitle: "Computer",
helpComputer: "The Computer tab on the right is this agents desktop. Start it, take over mouse and keyboard, or let it drive.",
2026-09-09 16:59:32 +00:00
meetingMode: "Meeting mode",
exitMeetingMode: "Exit meeting mode",
helpMeetingTitle: "Meeting mode",
helpMeeting: "On desktop, the title bar can put the screen in the middle and chat on the side, like a shared-screen call. Phones dont have this mode.",
2026-09-06 05:39:06 +00:00
helpMemoryTitle: "Memory",
helpMemory: "Clearing a chat doesnt wipe long-term memory. Ask the agent to remember, or add it in Memory on the right.",
helpMcpTitle: "MCP plugins",
helpMcp: "Plugins in the lower left connect MCP servers. Their tools show up on screen and the agent can use them in chat.",
helpSkillsTitle: "Skills",
helpSkills: "+ → Teach a task, demonstrate once, and it becomes a skill. Export JSON after, or import someone elses file onto another bot.",
helpAttachTitle: "Attachments",
helpAttach: "+ → Attach a file. Images go to the model on that message and arent stored in chat history. If the computer needs the original, it sits in inbox/ for two hours, then is deleted.",
helpShortcutsTitle: "Shortcuts",
helpShortcuts: "Enter sends, Shift+Enter makes a new line. While its replying, the send button becomes Stop. On a call, Space interrupts and Esc hangs up.",
helpVoiceTitle: "Voice calls",
helpVoice: "The phone in a 1:1 header calls the bot. Speak a task and it uses its computer. It answers immediately whether it can, and you can interrupt to change course.",
call: "Call",
hangUp: "Hang up",
interrupt: "Interrupt",
listening: "Listening…",
speaking: "Speaking…",
callConnecting: "Connecting…",
workingOnComputer: "Working on the computer…",
callPrompt: "Just say what you need. A short pause sends it.",
callShortcuts: "Space interrupts · Esc hangs up",
callFailed: "The call dropped.",
micDenied: "Microphone permission is required for calls.",
micFailed: "Couldnt open the microphone.",
callAudioFailed: "Call audio stopped working. Hang up and call again.",
takeOverToContinue: "You need to take over the screen.",
setUpVoiceToCall: "Set up voice before calling",
voiceEnabled: "Enable voice calls",
voiceEnabledHint: "Off by default. Turn on and save to use the call button.",
voiceDisabledHint: "Voice calls are off. Turn them on in Settings → Voice.",
voiceSettings: "Voice",
voiceSettingsHint: "Voice is separate from the text model. If you already have an xAI chat key, you usually dont need another. Billed per minute.",
voiceProvider: "Voice provider",
voiceModel: "Voice model",
voiceName: "Voice",
providerOpenai: "OpenAI",
providerXaiVoiceHint: "Grok Voice. Live calls with barge-in; computer work is handed to the text model.",
providerOpenaiVoiceHint: "OpenAI Realtime. Same call UI; you can switch later.",
voiceReusesTextKey: "Reusing the xAI key saved for the text model.",
feedbackDescription: "Write a problem, idea, or request. This is a local workspace, so the text is copied to the clipboard for you to paste into an issue or message.",
feedbackPlaceholder: "For example: in group chats I want to pick who speaks first…",
copyContent: "Copy",
2026-09-09 16:59:32 +00:00
loginTitle: "Sign in",
loginDescription: "Use the account you registered on this server. Your agents, chats, and computers stay yours alone.",
2026-09-06 05:39:06 +00:00
accessToken: "Access token",
2026-09-09 16:59:32 +00:00
verifying: "Working…",
2026-09-06 05:39:06 +00:00
login: "Sign in",
2026-09-09 16:59:32 +00:00
registerTitle: "Create account",
registerDescription: "Each account owns its workspace: nobody else sees your agents, and you never see theirs.",
register: "Create account",
registerFailed: "Couldnt create the account",
switchToRegister: "No account yet? Create one",
switchToLogin: "Already have an account? Sign in",
loginUsername: "Username",
loginPassword: "Password",
loginInvalidCredentials: "Wrong username or password.",
loginUsernameTaken: "That username is taken.",
loginTooManyAttempts: "Too many attempts. Try again in 5 minutes.",
loginFieldsRequired: "Enter both a username and a password.",
loginUsernameTooShort: "Use at least 3 characters.",
loginUsernameTooLong: "Use at most 32 characters.",
loginUsernameCharacters: "Use letters, numbers, and . _ - only.",
loginUsernameEdges: "Start and end with a letter or a number.",
loginPasswordTooShort: "Use at least 8 characters.",
loginPasswordTooLong: "That password is too long.",
loginPasswordCharacters: "The password contains characters we cant use.",
modelKeyNotSet: "This workspace has no API key yet — paste one below before an agent can work.",
2026-09-10 06:38:31 +00:00
modelKeyNeededForProvider: "No key saved for this provider yet. Paste one, or agents will not be able to start after saving.",
2026-09-06 05:39:06 +00:00
agentComputer: "Agent computer",
url: "URL",
stdio: "stdio",
http: "HTTP",
sse: "SSE",
argumentsPlaceholder: "-y @modelcontextprotocol/server-github",
environmentVariablesPlaceholder: "GITHUB_TOKEN=…",
urlPlaceholder: "https://mcp.example.com/mcp",
headersPlaceholder: "Authorization=Bearer …",
back: "Back",
accounts: "Accounts",
accountsHelp: "Stored in this bots vault. Passwords are entered only here — never in chat, never shown to the model. Schedules fill the form at a login wall.",
accountSite: "Site",
accountSitePlaceholder: "For example: Gmail",
accountHost: "URL or domain",
accountHostPlaceholder: "mail.google.com",
accountUsername: "Username",
accountPassword: "Password",
accountPasswordKeep: "Leave blank to keep the current password",
accountNotes: "Notes",
accountNotesPlaceholder: "Optional, for example: work inbox",
addAccount: "Add account",
noAccounts: "No saved accounts yet. Add one here if a schedule should sign in by itself.",
loginNeedsYou: "Needs you to sign in on the keyboard",
loginOpenScreen: "Open its screen",
loginWhy: "After sign-in: {why}",
scheduleChip: "Scheduled",
scheduleRunChip: "Schedule run",
schedules: "Schedules",
schedule: "Schedule",
schedCreate: "New schedule",
schedEmpty: "No schedules yet. Say “every day at 9…” in chat, or press +.",
schedPaused: "Paused",
schedRunNow: "Run now",
schedRunning: "Running…",
schedActive: "On",
schedNamePlaceholder: "For example: morning digest",
schedInstruction: "What to do each time",
schedInstructionPlaceholder: "For example: open mail and write an unread summary back to chat.",
schedWhen: "When",
schedEveryHour: "Every hour",
schedEveryDay: "Every day",
schedWeekdays: "Weekdays",
schedEveryWeek: "Every Monday",
schedEveryMonth: "Monthly",
schedInterval: "Interval",
schedAdvanced: "Advanced cron",
schedMinutes: "minutes",
schedHours: "hours",
schedDays: "days",
computerLoginHint: "Sign in inside this bots own browser. The session stays on its computer — dont type passwords in chat.",
2026-09-06 05:51:28 +00:00
language: "Interface language",
languageZh: "繁體中文",
2026-09-06 05:39:06 +00:00
languageEn: "English",
languageHint: "Interface language. Chat history and agent replies are not translated.",
helpLanguageTitle: "Language",
2026-09-06 05:51:28 +00:00
helpLanguage: "Switch between Traditional Chinese and English in Settings, accessible from the workspace menu.",
2026-09-06 05:39:06 +00:00
clipboardSynced: "Clipboard synced",
clipboardSyncBlocked: "The browser blocked sync. Use the copy button.",
clipboardPasted: "Pasted",
clipboardPasteFailed: "Paste failed. Take over the computer and try again.",
clipboardCopiedSelection: "Copied selection",
clipboardCopyFailed: "Copy didnt sync. Use the copy button, or Ctrl+Shift+C on the desktop.",
slashMode: "Mode",
slashFileSkill: "Skill",
slashList: "Commands and skills",
schedIntervalHint: "Elapsed time, not the clock. A day is 24 hours and doesnt reset at month-end or DST.",
schedInvalidInterval: "Interval must be a whole number from 1 to 365",
schedHumanDaily: "Daily at {time}",
schedHumanWeekdays: "Weekdays at {time}",
schedHumanWeekly: "Mondays at {time}",
schedHumanMonthly: "Monthly at {time}",
schedHumanInterval: "Every {n} {unit}",
stepThinking: "Thinking",
stepWatchingScreen: "Looking at the screen",
stepUsingSkill: "Using skill {name}",
stepFillingLogin: "Filling a saved login",
stepListingAccounts: "Listing saved accounts",
stepScheduling: "Scheduling {name}",
stepListingSchedules: "Listing schedules",
stepCancelingSchedule: "Canceling a schedule",
stepRecheckingScreen: "Checking the screen again",
schedEveryMinute: "Every minute",
schedHumanEveryMinutes: "Every {n} minutes",
schedHumanEveryHours: "Every {n} hours",
schedHumanMonthlyDay: "Monthly on the 1st at {time}",
schedHumanElapsed: "Every {n} minutes (elapsed)",
schedCalendar: "Calendar schedule: {expr}",
teachInProgress: "A demo is in progress. Finish or cancel it before sending a message.",
2026-09-07 06:20:33 +00:00
aiTimeout: "The model timed out (150 seconds).",
resumeMidTask: "Stopped halfway — your call",
resumeBudget: "Turn budget spent, result unverified",
2026-09-07 13:08:10 +00:00
resumeLoop: "Kept repeating itself — needs a nudge",
2026-09-07 06:20:33 +00:00
resumeProgress: "{turns}/{limit} turns",
resumeContinue: "Keep going",
resumeStop: "Stop here",
resumeSent: "Keep going and finish it.", monitorTitle: "Live log",
monitorQueued: "Queued",
monitorTurnOf: "turn {turn}/{limit}",
monitorTurn: "turn {turn}",
monitorElapsed: "up {time}",
monitorNow: "Now: {step}",
monitorEmpty: "Nothing yet — the trail fills in as I work.",
monitorLoadFailed: "Couldnt load the log",
monitorCopy: "Copy log",
monitorCopied: "Copied",
monitorPinHint: "Folds away when the mouse leaves",
monitorPinned: "Pinned — press Esc to close",
monitorClose: "Close",
monitorKindModel: "Model",
monitorKindTool: "Action",
monitorKindRetry: "Retry",
2026-09-08 17:14:29 +00:00
monitorKindMemory: "Memory",
monitorMemoryUsed: "Included {count} memories · {time}",
monitorMemoryDisabled: "Long-term memory is disabled globally",
monitorCompletedLabel: "Work completed",
monitorCancelledLabel: "Work cancelled",
monitorRecordedLabel: "Recorded activity for this run",
monitorKindNotice: "Note",
monitorKindRun: "Status",
monitorRunStarted: "Started: {task}",
monitorRunCompleted: "Done in {turns} turns",
monitorRunFailed: "Failed",
monitorRunWaiting: "Waiting for you: {reason}",
monitorRunPaused: "Paused: {reason}",
monitorRunRetry: "Re-queued",
monitorModelTurn: "turn {turn}, thought for {time}",
monitorRetryAttempt: "attempt {attempt} failed, retrying",
monitorGaveUp: "gave up",
monitorStatusOk: "ok",
monitorStatusError: "failed",
monitorStatusTimedOut: "timed out",
monitorStatusPaused: "needs you",
errorTitleInterrupted: "Interrupted",
errorTitleToolTimeout: "Action timed out",
errorTitleModelKey: "Model API key rejected",
2026-09-09 16:59:32 +00:00
errorTitleModelKeyMissing: "No API key set",
errorTitleModelOptIn: "Model needs an opt-in on OpenCode",
errorTitleModelQuota: "Rate limited or out of quota",
errorTitleModelUnknown: "Model not found",
errorTitleModelTimeout: "Model took too long",
errorTitleNetwork: "Cant reach the model",
errorTitleComputerGone: "Computer is gone",
errorTitleLeaseLost: "Work picked up elsewhere",
2026-09-10 06:38:31 +00:00
errorTitleContextOverflow: "Ran out of model context",
errorTitleUnknown: "Something broke",
errorChip: "Task failed",
errorRetry: "Retry",
errorRetryHint: "Continue where it stopped",
errorOpenSettings: "Model settings",
errorDetails: "Show the log",
errorRetried: "Back in the queue",
errorRetryFailed: "Cant re-queue right now — another run may still be busy.",
2026-09-06 05:39:06 +00:00
};