{
  "Language": {
    "followSystem": "Follow System",
    "english": "English",
    "simplifiedChinese": "Simplified Chinese",
    "traditionalChinese": "Traditional Chinese",
    "japanese": "Japanese",
    "korean": "Korean",
    "spanish": "Spanish",
    "german": "German",
    "french": "French",
    "portuguese": "Portuguese",
    "arabic": "Arabic"
  },
  "GitCredentialDialog": {
    "title": "Authentication Required",
    "description": "The remote server requires credentials. Enter your username and password (or personal access token).",
    "username": "Username",
    "usernamePlaceholder": "Username or email",
    "password": "Password / Token",
    "passwordPlaceholder": "Password or personal access token",
    "passwordHint": "For non-GitHub servers, enter your username and password.",
    "cancel": "Cancel",
    "authenticate": "Authenticate",
    "authenticating": "Authenticating...",
    "invalidCredentials": "Invalid credentials. Please try again.",
    "saveCredentials": "Save credentials for future operations",
    "githubTitle": "GitHub Authentication",
    "githubDescription": "Enter a personal access token to authenticate with GitHub. The token will be validated and saved to your accounts.",
    "githubToken": "Personal Access Token",
    "githubTokenPlaceholder": "ghp_xxxxxxxxxxxx",
    "githubTokenHint": "Generate a token at GitHub → Settings → Developer settings → Personal access tokens.",
    "githubAuthenticate": "Validate & Connect",
    "generateToken": "Generate token"
  },
  "SettingsShell": {
    "title": "Settings",
    "preferences": "Preferences",
    "nav": {
      "general": "General",
      "appearance": "Appearance",
      "agents": "Agents",
      "mcp": "MCP",
      "skills": "Skills",
      "shortcuts": "Shortcuts",
      "version_control": "Version Control",
      "system": "System",
      "chat_channels": "Chat Channels",
      "web_service": "Web Service",
      "model_providers": "Model Providers",
      "experts": "Experts",
      "quick_messages": "Quick Messages"
    }
  },
  "AppearanceSettings": {
    "sectionTitle": "Theme Appearance",
    "sectionDescription": "Choose light, dark, or follow system. Settings are saved automatically.",
    "themeMode": "Theme mode",
    "placeholder": "Select theme mode",
    "system": "Follow system",
    "light": "Light",
    "dark": "Dark",
    "currentTheme": "Current effective theme: {theme}",
    "resolvedTheme": {
      "light": "Light",
      "dark": "Dark",
      "unknown": "--"
    },
    "themeColor": {
      "sectionTitle": "Theme color",
      "sectionDescription": "Pick a color palette for accents, buttons, and highlights.",
      "current": "Current color: {color}",
      "options": {
        "neutral": "Neutral",
        "zinc": "Zinc",
        "slate": "Slate",
        "stone": "Stone",
        "gray": "Gray",
        "red": "Red",
        "rose": "Rose",
        "orange": "Orange",
        "green": "Green",
        "blue": "Blue",
        "yellow": "Yellow",
        "violet": "Violet"
      }
    },
    "zoomLevel": {
      "sectionTitle": "Window zoom",
      "sectionDescription": "Scale the entire interface. Applies immediately and persists per device.",
      "placeholder": "Select zoom level",
      "default": "Default",
      "current": "Current zoom: {zoom}%"
    },
    "fonts": {
      "sectionTitle": "Fonts",
      "sectionDescription": "Choose fonts for the interface, code editor, and terminal. Bundled fonts load on demand; pick “Custom…” to use any font installed on your system.",
      "interface": "Interface",
      "editor": "Editor",
      "terminal": "Terminal",
      "groupSans": "Sans-serif",
      "groupMono": "Monospace",
      "custom": "Custom…",
      "customPlaceholder": "Font family, e.g. Fira Code",
      "fontSize": "Font size",
      "ligatures": "Enable font ligatures",
      "ligaturesUnavailable": "This font has no ligatures",
      "terminalLigaturesHint": "Terminal ligatures apply only to bundled coding fonts.",
      "preview": "Preview"
    }
  },
  "SystemSettings": {
    "loading": "Loading...",
    "sectionTitle": "System Management",
    "sectionDescription": "Manage network proxy, app updates and language preferences.",
    "proxyTitle": "Network Proxy",
    "proxyDescription": "When enabled, subsequent network requests prefer this proxy (including ACP chat, agent installation and Git remote operations).",
    "loadFailed": "Load failed: {message}",
    "enableProxy": "Enable system proxy",
    "proxyAddress": "Proxy address",
    "proxyHint": "Supports http(s)/socks5, example: {example}. Only effective when system proxy is enabled.",
    "save": "Save",
    "saving": "Saving...",
    "proxyRequired": "Proxy URL is required when proxy is enabled",
    "saveSuccess": "System proxy settings saved",
    "saveFailed": "Save failed: {message}",
    "languageTitle": "Language",
    "languageDescription": "Set app language. When following system locale, unsupported languages fall back to English.",
    "appLanguage": "App language",
    "languageSaveSuccess": "Language settings saved",
    "languageSaveFailed": "Failed to save language settings: {message}",
    "updateTitle": "App Update",
    "versionTitle": "Software Update",
    "updateDescription": "Check the configured release source for newer versions and install directly when available.",
    "currentVersion": "Current version",
    "upgradableVersion": "Latest version",
    "none": "None",
    "lastChecked": "Last checked: {time}",
    "updateError": "Update error: {message}",
    "checking": "Checking...",
    "checkUpdate": "Check for updates",
    "updating": "Installing...",
    "downloading": "Downloading...",
    "upgradeTo": "Upgrade to v{version}",
    "viewRelease": "View v{version} release",
    "foundUpdate": "New version v{version} found",
    "alreadyLatest": "You're on the latest version",
    "checkUpdateFailed": "Failed to check for updates: {message}",
    "installSuccess": "Update installed. Relaunching app.",
    "installFailed": "Update failed: {message}",
    "upgradeSuccess": "Upgrade complete. Reloading...",
    "restartTimeout": "The server didn't come back in time. Check the container or service logs.",
    "restartingIn": "Restarting in {seconds}s...",
    "waitingForServer": "Waiting for the server to come back...",
    "restartToUpdate": "Restart to update",
    "updateReadyHint": "Update downloaded — restart to apply.",
    "restarting": "Restarting...",
    "dockerUpgradeHint": "This upgrades the running container now. It's lost if the container is recreated — to keep it, pull or build an image at the new version and recreate.",
    "upgradeRolledBack": "Upgrade failed; the server rolled back to the previous version.",
    "serverUnreachable": "Couldn't reach the server to start the upgrade. Check that it's running and try again.",
    "rollbackButton": "Roll back",
    "rollingBack": "Rolling back...",
    "rollbackDescription": "Restore the version installed before the last upgrade.",
    "rollbackConfirmTitle": "Roll back to the previous version?",
    "rollbackConfirmDescription": "The server will restart on the version installed before the last upgrade. A newer release stays available to install again.",
    "rollbackConfirm": "Roll back",
    "rollbackCancel": "Cancel",
    "rollbackSuccess": "Rolled back to the previous version. Reloading...",
    "rollbackFailed": "Rollback failed. Check the server logs.",
    "updateErrors": {
      "sourceUnavailable": "Cannot reach the update source. Check your network or proxy and try again.",
      "network": "Network connection failed. Check your network or proxy and try again.",
      "downloadFailed": "Failed to download update package. Please try again later.",
      "installFailed": "Failed to install update. Please close the app and try again.",
      "unknown": "Update failed. Please try again later."
    }
  },
  "VersionControlSettings": {
    "loading": "Loading...",
    "sectionTitle": "Version Control",
    "sectionDescription": "Configure Git executable and manage GitHub accounts.",
    "gitTitle": "Git Configuration",
    "gitDescription": "Configure the Git executable used by the application.",
    "gitDetected": "Git detected",
    "gitNotFound": "Git not found on this system",
    "gitVersion": "Version",
    "gitPath": "Path",
    "customGitPath": "Custom Git Path",
    "customGitPathPlaceholder": "/usr/bin/git",
    "customGitPathHint": "Leave empty to use the auto-detected path.",
    "test": "Test",
    "testing": "Testing...",
    "testSuccess": "Git executable is valid.",
    "testFailed": "Git test failed: {message}",
    "save": "Save",
    "saving": "Saving...",
    "saveSuccess": "Git settings saved.",
    "saveFailed": "Failed to save: {message}",
    "githubTitle": "GitHub Accounts",
    "githubDescription": "Manage GitHub accounts for authentication. Tokens are stored locally.",
    "noAccounts": "No GitHub accounts configured.",
    "addAccount": "Add Account",
    "serverUrl": "Server URL",
    "serverUrlPlaceholder": "https://github.com",
    "token": "Personal Access Token",
    "tokenPlaceholder": "ghp_xxxxxxxxxxxx",
    "generateToken": "Generate token",
    "tokenHint": "Generate a token at GitHub → Settings → Developer settings → Personal access tokens.",
    "validateAndAdd": "Validate & Add",
    "validating": "Validating...",
    "addSuccess": "Account {username} added successfully.",
    "addFailed": "Failed to add account: {message}",
    "testConnection": "Test",
    "connectionSuccess": "Connection successful.",
    "connectionFailed": "Connection failed: {message}",
    "setDefault": "Set Default",
    "defaultLabel": "Default",
    "defaultSet": "Default account updated.",
    "removeAccount": "Remove",
    "removeConfirmTitle": "Remove Account",
    "removeConfirmMessage": "Are you sure you want to remove the account \"{username}\"?",
    "removeConfirm": "Remove",
    "removeCancel": "Cancel",
    "removeSuccess": "Account removed.",
    "scopes": "Scopes",
    "loadFailed": "Failed to load settings: {message}",
    "gitAccount": {
      "sectionTitle": "Git Accounts",
      "sectionDescription": "Manage credentials for non-GitHub Git servers (GitLab, Bitbucket, self-hosted, etc.).",
      "noAccounts": "No Git server accounts configured.",
      "addAccount": "Add Account",
      "addTitle": "Add Git Account",
      "addDescription": "Enter the server address, username, and password or access token.",
      "serverUrl": "Server URL",
      "serverUrlPlaceholder": "https://gitlab.example.com",
      "username": "Username",
      "usernamePlaceholder": "Username or email",
      "password": "Password / Token",
      "passwordPlaceholder": "Password or access token",
      "passwordHint": "Enter your password or a personal access token for the server.",
      "add": "Add",
      "serverRequired": "Server URL is required.",
      "usernameRequired": "Username is required.",
      "passwordRequired": "Password is required."
    }
  },
  "ShortcutSettings": {
    "sectionTitle": "Shortcuts",
    "resetDefault": "Reset defaults",
    "recordInstruction": "Click the right-side button, then press a key combination. Use Ctrl/Cmd, Alt, and Shift. Press Esc to cancel recording.",
    "recording": "Press shortcut...",
    "toasts": {
      "conflict": "Shortcut is already used by \"{title}\"",
      "updated": "Shortcut updated",
      "invalid": "Invalid shortcut, please try again",
      "reset": "Default shortcuts restored"
    },
    "actions": {
      "toggle_search": {
        "title": "Open Search",
        "description": "Show or hide the conversation search panel"
      },
      "toggle_sidebar": {
        "title": "Toggle Left Sidebar",
        "description": "Show or hide the conversation list sidebar"
      },
      "toggle_terminal": {
        "title": "Toggle Terminal",
        "description": "Show or hide the bottom terminal panel"
      },
      "new_terminal_tab": {
        "title": "New Terminal",
        "description": "Create a new terminal tab when focus is on terminal"
      },
      "close_current_terminal_tab": {
        "title": "Close Current Terminal",
        "description": "Close the current terminal tab when focus is on terminal"
      },
      "toggle_aux_panel": {
        "title": "Toggle Right Panel",
        "description": "Show or hide the auxiliary info panel"
      },
      "new_conversation": {
        "title": "New Conversation",
        "description": "Create a new conversation tab in current folder"
      },
      "open_folder": {
        "title": "Open Folder",
        "description": "Open folder picker and open in a new window"
      },
      "open_settings": {
        "title": "Open Settings",
        "description": "Open settings window"
      },
      "close_current_tab": {
        "title": "Close Current Tab",
        "description": "Close current conversation or file tab"
      },
      "close_all_file_tabs": {
        "title": "Close All File Tabs",
        "description": "Close all open file tabs when the file pane is active"
      },
      "next_tab": {
        "title": "Next Tab",
        "description": "Switch to the next conversation or file tab"
      },
      "prev_tab": {
        "title": "Previous Tab",
        "description": "Switch to the previous conversation or file tab"
      },
      "send_message": {
        "title": "Send Message",
        "description": "Send the current message in the input box"
      },
      "newline_in_message": {
        "title": "Newline in Message",
        "description": "Insert a newline in the message input box"
      }
    }
  },
  "SkillsSettings": {
    "title": "Skills",
    "description": "Select a skill on the left. The right side previews Markdown by default; switch to edit to modify and save.",
    "loadingAgents": "Loading agents that support Skills...",
    "emptyNoManageableAgents": "No agents available for Skills management.",
    "managedTarget": "Managed target",
    "selectAgentPlaceholder": "Select an agent",
    "searchPlaceholder": "Search by name / ID / path...",
    "skillsList": "Skills list",
    "loadingSkills": "Loading skills...",
    "agentNotSupported": "Current agent does not support Skills management.",
    "emptySkills": "No skills yet. Click \"New Skill\" to create one.",
    "newSkillTitle": "New Skill",
    "skillInfo": "Skill Info",
    "skillIdPlaceholder": "skill-id (letters/numbers/-/_/.)",
    "skillsDirectoryWithPath": "Skills directory: {path}",
    "skillsDirectoryNeedId": "Skills directory: enter Skill ID to generate full path",
    "markdownContent": "Markdown Content",
    "editingStatus": "Editing",
    "previewStatus": "Previewing",
    "contentPlaceholder": "Enter Skill markdown content...",
    "metadataTitle": "Skills Metadata",
    "onlyYamlMetadata": "This skill only contains YAML metadata.",
    "emptyContentHint": "No content yet. Click \"Edit\" to start.",
    "loadingSkill": "Loading skill...",
    "emptyNoAgents": "No available agent.",
    "noSelectionHint": "Select a skill on the left, or click \"New Skill\" to create one.",
    "systemBadge": "System",
    "systemHint": "Built-in CLI skill · read-only",
    "scope": {
      "global": "Global",
      "folder": "Folder",
      "selectFolderPlaceholder": "Select a folder",
      "noFolders": "No folders found",
      "pickFolderHint": "Select a folder to view its skills."
    },
    "actions": {
      "preview": "Preview",
      "edit": "Edit",
      "openInWindow": "Open in new window",
      "delete": "Delete",
      "deleting": "Deleting...",
      "refresh": "Refresh",
      "newSkill": "New Skill",
      "reset": "Reset",
      "save": "Save",
      "saving": "Saving...",
      "cancel": "Cancel"
    },
    "deleteDialog": {
      "title": "Delete Skill",
      "confirm": "Delete current skill? This action cannot be undone.",
      "confirmWithNamePrefix": "Delete skill",
      "confirmWithNameSuffix": "? This action cannot be undone."
    },
    "toasts": {
      "loadFailed": "Failed to load skill",
      "openFolderFailed": "Failed to open folder",
      "noSkillDirectory": "No available Skills directory found for current agent",
      "nameRequired": "Skill name cannot be empty",
      "updated": "Skill updated",
      "created": "Skill created",
      "saveFailed": "Failed to save skill",
      "deleted": "Skill deleted",
      "deleteFailed": "Failed to delete skill"
    },
    "templates": {
      "gemini": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Skill Name\n\nInstructions for the agent when this skill is active.\n\n## Workflow\n\n1. Add actionable step one.\n2. Add actionable step two.\n",
      "openCode": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Steps\n\n1. Add actionable step one.\n2. Add actionable step two.\n",
      "openClaw": "---\nname: example-skill\ndescription: Describe when this skill should be used.\nuser-invocable: true\ndisable-model-invocation: false\n---\n\n# Purpose\n\nDescribe what this skill helps with.\n\n# Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n",
      "default": "---\nname: example-skill\ndescription: Describe when this skill should be used.\n---\n\n# Skill: example-skill\n\n## When to use\n\n- Describe trigger conditions.\n\n## Instructions\n\n1. Add actionable instruction one.\n2. Add actionable instruction two.\n"
    }
  },
  "McpSettings": {
    "loading": "Loading...",
    "summary": {
      "missingCommand": "(missing command)",
      "missingUrl": "(missing url)"
    },
    "protocol": {
      "stdio": "Stdio"
    },
    "errors": {
      "selectInstallProtocol": "Please select an install protocol",
      "fieldRequired": "{field} is required",
      "fieldNeedsBoolean": "{field} must be true or false",
      "fieldNeedsNumber": "{field} must be a number",
      "fieldNeedsInteger": "{field} must be an integer",
      "fieldInvalidJson": "{field} has invalid JSON: {message}",
      "fieldOutOfRange": "{field} value is out of allowed range",
      "jsonEmpty": "{name} cannot be empty",
      "jsonInvalid": "{name} is not valid JSON: {message}",
      "jsonMustBeObject": "{name} must be a JSON object",
      "specMustBeObject": "MCP config must be a JSON object.",
      "missingType": "MCP config is missing the type field. Use one of stdio, http (aliases: streamable-http, streamableHttp), sse.",
      "unsupportedType": "Unsupported MCP type {type}. Supported: stdio, http (aliases: streamable-http, streamableHttp), sse.",
      "codexEntryUnsupportedType": "Codex MCP entry {id} has unsupported type {type}. Supported: stdio, http (aliases: streamable-http, streamableHttp), sse.",
      "unsupportedTransportType": "Unsupported transport type {type}. Supported: http (aliases: streamable-http, streamableHttp), sse.",
      "stdioCommandRequired": "stdio MCP requires a non-empty command field.",
      "remoteUrlRequired": "Remote MCP requires a non-empty url field.",
      "appsRequired": "Select at least one target app."
    },
    "jsonNames": {
      "localConfig": "MCP Config",
      "installConfig": "Install Config"
    },
    "toasts": {
      "uninstalled": "MCP uninstalled",
      "uninstallFailed": "Uninstall failed: {message}",
      "selectAtLeastOneApp": "Please select at least one target app",
      "saveSuccess": "Saved",
      "saveFailed": "Save failed: {message}",
      "installed": "{name} installed",
      "installFailed": "Install failed: {message}",
      "serverIdRequired": "Server ID is required",
      "serverIdExists": "Server ID \"{id}\" already exists. Edit the existing entry or pick a different name.",
      "created": "MCP created"
    },
    "installDialog": {
      "title": "Confirm MCP Installation",
      "descriptionWithName": "Install {name} to local configuration.",
      "description": "Select target apps for installation.",
      "protocol": "Protocol",
      "selectProtocol": "Select protocol",
      "parameters": "Configuration Parameters",
      "booleanPlaceholder": "Please select true/false",
      "selectOneValue": "Select a value",
      "targetApps": "Target Apps"
    },
    "actions": {
      "cancel": "Cancel",
      "confirmInstall": "Confirm Install",
      "installing": "Installing",
      "uninstall": "Uninstall",
      "uninstalling": "Uninstalling",
      "viewDetails": "View Details",
      "save": "Save",
      "saving": "Saving",
      "install": "Install",
      "refresh": "Refresh",
      "newMcp": "New MCP",
      "create": "Create",
      "creating": "Creating..."
    },
    "tabs": {
      "local": "Local MCP",
      "market": "MCP Marketplace"
    },
    "local": {
      "filterPlaceholder": "Filter local MCP...",
      "loadFailed": "Load failed: {message}",
      "empty": "No local MCP detected.",
      "description": "Local MCP configuration can be edited and saved directly.",
      "enabledApps": "Enabled Apps",
      "configJson": "MCP Config (JSON)",
      "draftTitle": "New MCP",
      "draftDescription": "Provide a Server ID and configuration to create a local MCP server.",
      "serverIdLabel": "Server ID",
      "serverIdPlaceholder": "Server ID (e.g. my-mcp)",
      "typeHint": "Supported types: stdio, http (aliases: streamable-http, streamableHttp), sse. env is only used by stdio; for remote MCPs use headers to carry auth tokens.",
      "envOnRemoteWarning": "env detected on a remote MCP. Only stdio uses env; remote MCPs carry auth tokens via headers, so env will be ignored on save."
    },
    "market": {
      "selectMarketplace": "Select marketplace",
      "searchPlaceholder": "Search MCP...",
      "searchFailed": "Search failed: {message}",
      "loadingList": "Loading MCP list...",
      "empty": "No MCP results.",
      "loadingDetail": "Loading marketplace details...",
      "detailLoadFailed": "Failed to load details: {message}",
      "owner": "Owner: {owner}",
      "namespace": "Namespace: {namespace}",
      "defaultInstallProtocol": "Default Install Protocol",
      "currentOptionParameterCount": "Current option parameter count: {count}",
      "installConfigDescription": "Install Config (JSON, editable before install; edits will override protocol/parameter form)",
      "selectLeftToView": "Select a marketplace MCP on the left to view details."
    },
    "badges": {
      "verified": "Verified",
      "remote": "Remote",
      "hasHomepage": "Has Homepage",
      "uses": "{count} uses",
      "deployed": "Deployed",
      "notDeployed": "Not Deployed"
    },
    "selectLeftMcp": "Select an MCP on the left."
  },
  "AcpAgentSettings": {
    "title": "Agent SDK Management",
    "description": "Manage Agent SDK connection, enabled state, environment variables, config management and version preflight info in one place.",
    "loadingAgents": "Loading agent list...",
    "agentList": "Agent List",
    "emptyNoAgent": "No available agent.",
    "configManagement": "Config Management",
    "envVars": "Environment Variables",
    "nativeJsonConfig": "Native JSON Config",
    "modelHintDefault": "Leave empty to use system default model.",
    "generalConfigDescriptionClaude": "Supports quick configuration for API URL, API Key and Claude models, and syncs with native JSON config.",
    "generalConfigDescriptionDefault": "Supports important config input (API URL, API Key, Model) and native JSON config management.",
    "multiAgent": {
      "title": "Multi-Agent Collaboration",
      "description": "Allow active agents to delegate sub-tasks to other agents.",
      "enable": "Enable delegation",
      "enableHint": "When off, the delegate_to_agent tool is hidden from the agent's MCP catalog.",
      "depthLimit": "Maximum delegation depth",
      "depthHint": "Allowed range: {min}–{max}. Caps how deep a chain (root → child → grandchild …) can recurse.",
      "completedCacheLabel": "Completed-result cache (MB)",
      "completedCacheHint": "In-memory cache of finished sub-agent results, held only while the delegating session is running and cleared automatically when it ends. Over this budget the oldest results are dropped from memory first (still viewable in the sub-agent's own session); 0 = unlimited (still cleared when the session ends).",
      "save": "Save",
      "saving": "Saving…",
      "saved": "Delegation settings saved",
      "saveFailed": "Failed to save delegation settings",
      "loadFailed": "Failed to load delegation settings: {detail}",
      "tabGeneral": "General",
      "tabAgentDefaults": "Agent defaults",
      "agentDefaultsDescription": "Per-agent overrides applied when Multi-Agent Collaboration spawns a subagent for a delegation call. Options shown here come from a live probe — what you pick is exactly what the agent will accept.",
      "probing": "Loading available options from the agent…",
      "probeFailed": "Failed to load options: {detail}",
      "retry": "Retry",
      "noConfigAvailable": "This agent has no configurable options.",
      "modeLabel": "Mode",
      "agentDefaultHint": "Agent default: {value}",
      "defaultOptionLabel": "Default ({value})"
    },
    "actions": {
      "dragSort": "Drag to reorder",
      "dragSortAgent": "Drag to reorder {name}",
      "refreshCheck": "Refresh check",
      "refreshCheckAgent": "Refresh check {name}",
      "clickEnable": "Click to enable {name}",
      "clickDisable": "Click to disable {name}",
      "install": "Install",
      "upgrade": "Upgrade",
      "uninstall": "Uninstall",
      "uninstalling": "Uninstalling...",
      "saveEnvVars": "Save environment variables",
      "saving": "Saving...",
      "saveCodexConfig": "Save Codex Config",
      "saveGeminiConfig": "Save Gemini Config",
      "saveOpenCodeConfig": "Save OpenCode Config",
      "saveOpenClawConfig": "Save OpenClaw Config",
      "saveConfigManagement": "Save Config Management",
      "saveCurrentProvider": "Save Current Provider",
      "showApiKey": "Show API Key",
      "hideApiKey": "Hide API Key",
      "showKey": "Show Key",
      "hideKey": "Hide Key",
      "showToken": "Show Token",
      "hideToken": "Hide Token",
      "cancel": "Cancel",
      "delete": "Delete",
      "deleting": "Deleting...",
      "confirmDelete": "Confirm Delete",
      "confirmUninstall": "Confirm Uninstall",
      "saveClineConfig": "Save Cline Config",
      "saveHermesConfig": "Save Hermes Config",
      "customInstall": "Custom install"
    },
    "status": {
      "enabled": "Enabled",
      "disabled": "Disabled",
      "unchecked": "Unchecked",
      "agentEnabledAria": "{name} enabled",
      "agentEnabledSwitch": "{name} enable switch"
    },
    "preflight": {
      "count": "Preflight items: {count}",
      "notRun": "Checks have not run yet."
    },
    "codex": {
      "configDescription": "Supports quick configuration for API URL, API Key, model name and reasoning effort, and syncs with `auth.json` / `config.toml`.",
      "authMode": "Auth Mode",
      "chatgptSubscription": "Official Subscription",
      "chatgptSubscriptionHint": "Log in with ChatGPT official subscription, no API Key required",
      "apiKeyHint": "Connect using API Key to OpenAI or compatible API services",
      "selectProvider": "Select Provider",
      "modelName": "Model Name",
      "selectReasoningEffort": "Select Reasoning Effort",
      "enableWebsocket": "Enable WebSocket",
      "enableWebsocketAria": "Enable WebSocket for Codex Provider",
      "enableSkills": "Enable Skills",
      "enableSkillsAria": "Enable Skills for Codex",
      "enableFast": "Enable Fast",
      "enableFastAria": "Enable Fast service tier for Codex",
      "authJsonNative": "auth.json (native)",
      "configTomlNative": "config.toml (native)",
      "loginButton": "Log in with ChatGPT",
      "loginRequesting": "Requesting login code...",
      "loginStep1": "Open the following URL in your browser:",
      "loginStep2": "Enter the code below:",
      "loginPolling": "Waiting for authorization...",
      "loginCancel": "Cancel",
      "loginSuccess": "Logged in successfully, config saved!",
      "loginFailed": "Login failed: {message}",
      "loginRetry": "Retry",
      "loginCodeCopied": "Code copied",
      "loggedIn": "Account logged in",
      "loginRelogin": "Re-login / Switch account",
      "loginTimeout": "Login timed out, please try again",
      "loginSaveFailed": "Login succeeded but failed to save config"
    },
    "gemini": {
      "authConfig": "Gemini Auth Config",
      "authConfigDescription": "Aligned with Gemini CLI authentication docs, supporting custom endpoint, Google login, Gemini API Key and Vertex AI (ADC / service account / API Key).",
      "authMode": "Auth Mode",
      "selectAuthMode": "Select auth mode",
      "viewAuthDoc": "View auth docs",
      "mode": {
        "custom": "Custom Endpoint",
        "loginGoogle": "Google Login (OAuth)",
        "vertexServiceAccount": "Vertex AI (Service Account)"
      },
      "hint": {
        "custom": "Fill API URL, API Key and Model, mapped to GOOGLE_GEMINI_BASE_URL / GEMINI_API_KEY / GEMINI_MODEL.",
        "loginGoogle": "Run gemini in terminal and complete Google login first; API key is not required.",
        "geminiApiKey": "Fill GEMINI_API_KEY when using Gemini API.",
        "vertexAdc": "Use gcloud ADC; GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_LOCATION are recommended.",
        "vertexServiceAccount": "Set service account JSON path to GOOGLE_APPLICATION_CREDENTIALS.",
        "vertexApiKey": "Fill GOOGLE_API_KEY when using Vertex AI API key."
      }
    },
    "openCode": {
      "configManagement": "OpenCode Config Management",
      "configDescription": "Aligned with OpenCode `provider` schema, supports multi-provider management and two-way sync with native JSON files.",
      "providerManagement": "Provider Management",
      "providerCount": "{count} providers",
      "addProvider": "Add Provider",
      "emptyProvider": "No provider yet. Enter an ID then click \"Add Provider\".",
      "providerEnabledState": "{providerId} enabled state",
      "selectProviderNpm": "Select provider.npm",
      "modelManagement": "Model Management",
      "modelCount": "{count} models",
      "modelDescription": "Aligned with OpenCode `provider.models`. Fast management currently supports `name` / `id`; other advanced fields are preserved and can be edited in native JSON below.",
      "addModel": "Add model",
      "emptyModel": "No model yet. Enter model id then click \"Add model\".",
      "modelId": "Model ID",
      "modelName": "Model Name",
      "deleteModel": "Delete model {modelId}",
      "nativeJsonConfig": "OpenCode Native JSON Config",
      "mainModel": "Main Model",
      "smallModel": "Small Model",
      "noMatchingModels": "No matching models"
    },
    "openClaw": {
      "gatewayConfig": "Gateway Config",
      "gatewayDescription": "Configure OpenClaw Gateway connection. Supports local or remote gateway.",
      "gatewayUrlHint": "Leave empty to use gateway.remote.url from local openclaw config.",
      "gatewayTokenPlaceholder": "Gateway auth token",
      "gatewayTokenHint": "Use token-file instead of plain token when possible; configure via openclaw CLI.",
      "sessionKeyHint": "Optional. Specify gateway session key; leave empty to auto-assign isolated session."
    },
    "hermes": {
      "configManagement": "Hermes Configuration",
      "configDescription": "Hermes manages its own credentials in ~/.hermes/.env and settings in ~/.hermes/config.yaml. Pick a provider, then set the API key and model — codeg writes both files for you.",
      "providerLabel": "Provider",
      "providerHint": "The provider selects which API key variable and model.provider Hermes uses. OAuth providers are configured through the terminal setup below.",
      "groupApiKey": "API key providers",
      "groupOauth": "OAuth providers",
      "groupAws": "AWS",
      "apiKeyHint": "Saved to ~/.hermes/.env. It is never injected into the process — Hermes reads it from its own config.",
      "modelName": "Model",
      "oauthHint": "This provider uses OAuth. Run the setup below to authenticate in your terminal.",
      "awsHint": "Bedrock uses your AWS credentials (environment or shared config). Set the model id above and configure AWS access in your environment.",
      "unsupportedProvider": "This provider isn't editable with structured fields. Use the raw config.yaml editor below or the terminal setup.",
      "setupTitle": "Self-managed setup",
      "setupHint": "Hermes's interactive setup needs a terminal. Launch it below, or copy the command to run it yourself.",
      "runSetup": "Run Hermes setup",
      "configureModel": "Configure model",
      "openConfigFolder": "Open ~/.hermes",
      "copyCommand": "Copy command",
      "commandCopied": "Command copied to clipboard",
      "advancedTitle": "Advanced: edit config.yaml",
      "rawConfigHint": "Edit ~/.hermes/config.yaml directly. Saving here overwrites the file verbatim.",
      "saveRawConfig": "Save config.yaml"
    },
    "authModeOfficialSubscription": "Official Subscription",
    "authModeCustomEndpoint": "Custom Endpoint",
    "authModeCustomEndpointHint": "Manually configure API URL and API Key for a custom endpoint.",
    "authModeModelProvider": "Model Provider",
    "modelProvider": "Model Provider",
    "modelProviderHint": "Use API URL, API Key, and model from a configured model provider.",
    "selectModelProvider": "Select Model Provider",
    "noModelProviderAvailable": "No model provider configured for this agent. Go to Model Provider Settings to add one.",
    "claude": {
      "authMode": "Auth Mode",
      "officialSubscription": "Official Subscription",
      "officialSubscriptionHint": "Use official Anthropic subscription, no API Key required.",
      "mainModel": "Main Model",
      "reasoningModel": "Reasoning Model (thinking)",
      "haikuDefaultModel": "Default Haiku Model",
      "sonnetDefaultModel": "Default Sonnet Model",
      "opusDefaultModel": "Default Opus Model",
      "effortLevel": "Reasoning Effort Level",
      "effortLevelDefault": "Default Level",
      "effortLevel_low": "Low",
      "effortLevel_medium": "Medium",
      "effortLevel_high": "High",
      "effortLevel_xhigh": "Extra High"
    },
    "dialogs": {
      "confirmDeleteProvider": "Delete Provider {providerId}?",
      "confirmDeleteProviderDescription": "OpenCode config and auth JSON will be updated together. This action cannot be undone.",
      "confirmUninstall": "Uninstall {name}?",
      "confirmUninstallDescription": "This removes local installed version. You can reinstall later.",
      "customInstallTitle": "Custom install {name}",
      "customInstallDescription": "Enter the version to install. This reinstalls and replaces the currently installed version.",
      "customInstallVersionLabel": "Version number",
      "customInstallInvalid": "Enter a valid version number, e.g. 1.2.3.",
      "customInstallSubmit": "Install"
    },
    "errors": {
      "nativeJsonMustBeObject": "Native JSON config must be an object",
      "nativeJsonInvalid": "Native JSON config format error: {message}",
      "openCodeAuthMustBeObject": "OpenCode auth.json must be a JSON object",
      "openCodeAuthInvalid": "OpenCode auth.json format error: {message}",
      "authMustBeObject": "auth.json must be a JSON object",
      "authInvalid": "auth.json format error: {message}",
      "providerIdPattern": "Provider ID only supports letters, numbers, underscore, dot and hyphen",
      "providerExists": "Provider {providerId} already exists",
      "modelIdPattern": "Model ID only supports letters, numbers, underscore, dot, colon and hyphen",
      "modelExists": "Model {modelId} already exists"
    },
    "warnings": {
      "nativeJsonRecoveredStructured": "Native JSON config is invalid; reset to structured config",
      "nativeJsonRecoveredOpenCode": "Native JSON config is invalid; reset to OpenCode structured config",
      "openCodeAuthRecovered": "OpenCode auth.json is invalid; reset to default config",
      "authRecoveredStructured": "auth.json is invalid; reset to structured config"
    },
    "toasts": {
      "agentActionCompleted": "{name} {action} completed",
      "agentActionFailed": "{name} {action} failed",
      "localVersion": "Local version: {version}",
      "installCompletedVersionLater": "Install completed, version will update on next check",
      "uninstallCompleted": "{name} uninstall completed",
      "uninstallFailed": "{name} uninstall failed",
      "localVersionRemoved": "Local version removed",
      "saveAgentOrderFailed": "Failed to save Agent order",
      "saveAgentSwitchFailed": "Failed to save Agent switch",
      "saveEnvFailed": "Failed to save environment variables",
      "codexSaved": "Codex config saved",
      "saveCodexNativeFailed": "Failed to save Codex native config",
      "geminiSaved": "Gemini config saved",
      "saveGeminiFailed": "Failed to save Gemini config",
      "providerDeleted": "Provider {providerId} deleted",
      "providerDeleteFailed": "Failed to delete Provider {providerId}",
      "providerSaved": "Provider {providerId} saved",
      "saveProviderFailed": "Failed to save Provider {providerId}",
      "openCodeConfigSynced": "OpenCode config and auth JSON have been synced.",
      "openCodeSaved": "OpenCode config saved",
      "saveOpenCodeFailed": "Failed to save OpenCode config",
      "openClawSaved": "OpenClaw config saved",
      "saveOpenClawFailed": "Failed to save OpenClaw config",
      "configSaved": "Config saved",
      "configSavedHint": "Existing sessions need to be reopened to take effect",
      "saveConfigManagementFailed": "Failed to save config management",
      "clineSaved": "Cline config saved",
      "saveClineFailed": "Failed to save Cline config",
      "hermesSaved": "Hermes config saved",
      "saveHermesFailed": "Failed to save Hermes config",
      "modelProviderRequired": "Please select a model provider before saving.",
      "affectedRunningSessions": "{count, plural, one {# running session needs to reconnect to apply the change} other {# running sessions need to reconnect to apply the change}}"
    },
    "version": {
      "statusLabel": "Version Status",
      "notInstalled": "Not installed",
      "remoteLocal": "Remote: {remoteVersion} · Local: {localVersion}",
      "platformUnsupported": "{versionText}. Current platform does not support this agent.",
      "uvxNotReady": "{versionText}. The uv runtime isn't installed — install it from the uv check below to use this agent.",
      "clickInstall": "{versionText}. Click Install on the right.",
      "localUnrecognized": "{versionText}. Local version is not comparable; try upgrade to overwrite install.",
      "upgradeAvailable": "{versionText}. Upgrade available.",
      "remoteUnavailable": "{versionText}. Remote version is currently unavailable.",
      "latest": "{versionText}. Already latest."
    },
    "cline": {
      "configDescription": "Configure Cline API provider and credentials. Settings are saved to ~/.cline/data/."
    },
    "opencodePlugins": {
      "title": "OpenCode Plugins",
      "declared": "Declared Plugins",
      "noPlugins": "No plugins declared.",
      "status": {
        "installed": "Installed",
        "missing": "Missing"
      },
      "installAll": "Install All Missing",
      "pinVersions": "Pin @latest Versions",
      "install": "Install",
      "uninstall": "Uninstall",
      "refresh": "Refresh",
      "success": "All plugins installed successfully.",
      "failed": "Installation failed"
    }
  },
  "SettingsPages": {
    "agentsLoading": "Loading agent settings..."
  },
  "GeneralSettings": {
    "loading": "Loading...",
    "sectionTitle": "General",
    "sectionDescription": "Centralized preferences for the default terminal, rendering acceleration, and multi-agent delegation.",
    "terminalTitle": "Default Terminal",
    "terminalDescription": "Choose the shell used when opening new terminal tabs from the terminal bar or file tree.",
    "defaultTerminalShell": "Default shell",
    "terminalSystemDefault": "System default",
    "terminalPowerShell7": "PowerShell 7 (pwsh)",
    "terminalWindowsPowerShell": "Windows PowerShell",
    "terminalCmd": "Command Prompt (cmd)",
    "terminalSaveFailed": "Failed to save terminal settings: {message}",
    "terminalShellCustom": "Custom path",
    "terminalShellCustomPath": "Shell path",
    "terminalShellCustomPlaceholder": "/usr/local/bin/fish",
    "terminalShellCustomSave": "Save",
    "terminalShellCustomHint": "Provide an absolute path or a name resolvable on PATH.",
    "terminalShellNotInstalled": "not installed",
    "terminalShellNotFoundWarning": "This path doesn't exist on this host.",
    "terminalCurrentShell": "Currently using: {path}",
    "renderingTitle": "Rendering",
    "renderingDescription": "Disable hardware acceleration if the app shows a black screen or rendering glitches (common on certain AMD GPUs or Intel integrated GPUs). Only takes effect on the Windows desktop build.",
    "disableHardwareAcceleration": "Disable hardware acceleration",
    "renderingSaveFailed": "Failed to save rendering settings: {message}",
    "restartRequired": "Saved. Restart the app for the change to take effect.",
    "restartNow": "Restart now",
    "restartFailed": "Failed to restart: {message}",
    "loadFailed": "Load failed: {message}"
  },
  "LoginPage": {
    "documentTitle": "Login - codeg",
    "brand": "Codeg",
    "subtitle": "Enter your access token to connect to the desktop app",
    "tokenPlaceholder": "Access Token",
    "connect": "Connect",
    "connecting": "Connecting...",
    "helpText": "Find your token in the desktop app under Settings → Web Service",
    "invalidToken": "Invalid token. Please check and try again.",
    "connectionFailed": "Connection failed (HTTP {status})",
    "networkError": "Unable to connect to the server"
  },
  "CommitPage": {
    "title": "Commit",
    "invalidFolderId": "Invalid folder ID",
    "loadingRepo": "Loading repository..."
  },
  "MergePage": {
    "title": "Resolve Conflicts",
    "invalidFolderId": "Invalid folder ID",
    "loadingRepo": "Loading repository...",
    "localVersion": "Local (Ours)",
    "result": "Result",
    "remoteVersion": "Remote (Theirs)",
    "acceptLocal": "Accept Local",
    "acceptRemote": "Accept Remote",
    "markResolved": "Mark Resolved",
    "abortMerge": "Abort",
    "completeMerge": "Complete Merge",
    "unresolvedConflicts": "There are still unresolved conflict markers in this file",
    "fileResolved": "File resolved successfully",
    "allResolved": "All conflicts resolved",
    "conflictFiles": "Conflict Files",
    "loadingFile": "Loading file...",
    "preparingMerge": "Preparing merge...",
    "selectFile": "Select a file to resolve",
    "noConflicts": "No conflict files",
    "skipFile": "Skip",
    "abortSuccess": "Operation aborted",
    "applyAllNonConflicting": "Apply All Non-Conflicting",
    "applyLeftNonConflicting": "Apply Local",
    "applyRightNonConflicting": "Apply Remote"
  },
  "Folder": {
    "workspaceStatus": {
      "degradedTitle": "Live updates unavailable",
      "degradedHint": "Watcher failed to start (e.g. permission denied). Refresh manually to see changes.",
      "retry": "Retry",
      "retrying": "Retrying..."
    },
    "common": {
      "all": "All",
      "cancel": "Cancel",
      "close": "Close",
      "closeOthers": "Close Others",
      "closeAll": "Close All",
      "confirm": "Confirm",
      "save": "Save",
      "delete": "Delete",
      "rename": "Rename",
      "loading": "Loading...",
      "refresh": "Refresh",
      "refreshing": "Refreshing...",
      "create": "Create",
      "createAndSwitch": "Create and Switch",
      "openFile": "Open File",
      "viewDiff": "View Diff",
      "push": "Push..."
    },
    "statusLabels": {
      "in_progress": "In Progress",
      "pending_review": "Review",
      "completed": "Completed",
      "cancelled": "Cancelled"
    },
    "sidebar": {
      "title": "Conversations",
      "locateActiveConversation": "Locate Active Conversation",
      "expandAllGroups": "Expand All Groups",
      "collapseAllGroups": "Collapse All Groups",
      "newConversation": "New Conversation",
      "newConversationShort": "New",
      "newChat": "New chat",
      "search": "Search",
      "noConversationsFound": "No conversations found.",
      "importLocalSessions": "Import local sessions",
      "importing": "Importing...",
      "error": "Error: {message}",
      "completeAllSessions": "Complete all sessions",
      "completeAllReviewTitle": "Complete all review sessions?",
      "completeAllReviewDescription": "This will mark all {count, plural, one {# session} other {# sessions}} in Review as completed.",
      "completing": "Completing...",
      "toasts": {
        "importedSessions": "Imported {imported, plural, one {# session} other {# sessions}}, skipped {skipped}",
        "importedAndUpdated": "Imported {imported, plural, one {# session} other {# sessions}}, updated {updated, plural, one {# title} other {# titles}}, skipped {skipped}",
        "updatedTitles": "Updated {updated, plural, one {# title} other {# titles}}, skipped {skipped}",
        "noNewSessionsFound": "No new sessions found (skipped {skipped})",
        "importFailed": "Import failed: {message}",
        "reviewCompleted": "Marked {count, plural, one {# review session} other {# review sessions}} as completed",
        "completeReviewFailed": "Failed to complete review sessions: {message}",
        "folderOpened": "Opened folder {name}",
        "folderRemoved": "Removed folder {name}",
        "openFolderFailed": "Failed to open folder",
        "removeFolderFailed": "Failed to remove folder: {message}",
        "reorderFoldersFailed": "Failed to reorder folders: {message}",
        "changeFolderColorFailed": "Failed to change folder color: {message}",
        "changeFolderDefaultAgentFailed": "Failed to set default agent: {message}"
      },
      "statsLabel": "{folders} folders · {convos} conversations",
      "reorderHandle": "Drag to reorder",
      "openFolder": "Open Folder",
      "searchPlaceholder": "Search conversations...",
      "showCompleted": "Show completed conversations",
      "moreOptions": "More options",
      "sortBy": "Sort by",
      "sortByCreatedAt": "Created time",
      "sortByUpdatedAt": "Updated time",
      "statusRunningBadge": "Running",
      "statusCancelledBadge": "Cancelled",
      "conversationCountUnit": "{count, plural, one {# conversation} other {# conversations}}",
      "emptyFolderHint": "No conversations",
      "noMatchingConversations": "No matching conversations",
      "noUnfinishedConversations": "No unfinished conversations. Enable \"Show completed\" from the top-right menu.",
      "removeFolderConfirmTitle": "Remove folder from workspace?",
      "removeFolderConfirmDescription": "Remove \"{name}\" from the workspace? Its tabs and terminals will close.",
      "folderHeaderMenu": {
        "manageConversations": "Manage conversations…",
        "changeColor": "Change color",
        "useThemeColor": "Use app theme",
        "setDefaultAgent": "Set default agent",
        "defaultAgentNone": "No default (use global)",
        "agentUnavailableSuffix": "(unavailable)",
        "loadingAgents": "Loading agents…",
        "removeFromWorkspace": "Remove from workspace"
      },
      "manageConversations": {
        "title": "Manage conversations — {name}",
        "searchPlaceholder": "Search by title…",
        "agentFilterAll": "All agents",
        "statusFilterAll": "All statuses",
        "selectAllVisible": "Select all",
        "deselectAll": "Deselect all",
        "selectedCount": "{count} selected",
        "matchedCount": "{count} matched",
        "messagesShort": "{count} msg",
        "untitledConversation": "Untitled conversation",
        "setStatus": "Set status…",
        "deleteSelected": "Delete",
        "noConversations": "No conversations in this folder.",
        "noMatchingConversations": "No conversations match the filters.",
        "confirmDeleteTitle": "Delete {count} conversation(s)?",
        "confirmDeleteDescription": "This action cannot be undone.",
        "toastDeleted": "Deleted {count} conversation(s)",
        "toastStatusUpdated": "Updated status for {count} conversation(s)",
        "toastOpFailed": "Operation failed: {message}"
      },
      "sectionPinned": "Pinned",
      "sectionFolders": "Folders",
      "sectionChats": "Chat",
      "noChats": "No chats",
      "newChatAction": "New chat"
    },
    "conversation": {
      "reloadFailed": "Failed to reload conversation: {message}",
      "reloaded": "Conversation reloaded",
      "reload": "Reload",
      "activeConversationIndicator": "Active conversation",
      "newConversation": "New Conversation",
      "closeConversation": "Close Conversation",
      "copyText": "Copy Text",
      "copyTextSuccess": "Copied",
      "copyTextFailed": "Copy failed",
      "forkSession": "Fork Session",
      "forkSessionSuccess": "Session forked successfully",
      "forkSessionFailed": "Failed to fork session: {error}",
      "exportConversation": "Export Conversation",
      "exportImage": "Image",
      "exportMarkdown": "Markdown",
      "exportHtml": "HTML",
      "exportSuccess": "Conversation exported",
      "exportFailed": "Export failed",
      "exportImageTooLong": "Conversation is too long to export as image",
      "exportLabels": {
        "untitledConversation": "Untitled Conversation",
        "agent": "Agent",
        "model": "Model",
        "status": "Status",
        "started": "Started",
        "updated": "Updated",
        "tokens": "Token Stats",
        "duration": "Duration",
        "inputTokens": "Input",
        "outputTokens": "Output",
        "cacheRead": "Cache Read",
        "cacheWrite": "Cache Write",
        "user": "User",
        "assistant": "Assistant",
        "system": "System",
        "toolResult": "Result",
        "toolError": "Error"
      }
    },
    "conversationCard": {
      "untitledConversation": "Untitled conversation",
      "newConversation": "New Conversation",
      "rename": "Rename",
      "status": "Status",
      "delete": "Delete",
      "importLocalSessions": "Import local sessions",
      "importing": "Importing...",
      "renameConversation": "Rename conversation",
      "deleteConversationTitle": "Delete conversation?",
      "deleteConversationDescription": "This will delete \"{title}\". This action cannot be undone.",
      "cancel": "Cancel",
      "save": "Save",
      "pin": "Pin",
      "unpin": "Unpin",
      "markCompleted": "Mark as completed",
      "reopen": "Reopen"
    },
    "search": {
      "dialogTitle": "Search",
      "dialogTitleWithFolder": "Search — {name}",
      "tabConversations": "Conversations",
      "tabFiles": "Files",
      "placeholder": "Search conversations...",
      "filePlaceholder": "Search files or directories...",
      "allAgents": "All",
      "searching": "Searching...",
      "typeToSearch": "Type to search conversations",
      "typeToSearchFiles": "Type to search files or directories",
      "noResults": "No results found.",
      "untitledConversation": "Untitled conversation"
    },
    "folderTitleBar": {
      "showSidebar": "Show Sidebar",
      "hideSidebar": "Hide Sidebar",
      "toggleTerminal": "Toggle Terminal",
      "toggleAuxPanel": "Toggle Auxiliary Panel",
      "search": "Search",
      "openSettings": "Open Settings",
      "withShortcut": "{label} ({shortcut})"
    },
    "statusBar": {
      "connection": {
        "connected": "Connected",
        "connecting": "Connecting...",
        "prompting": "Responding...",
        "error": "Connection error",
        "disconnected": "Disconnected",
        "tooltip": "{agent} - {status}",
        "tooltipError": "{agent} - {error}"
      },
      "tasks": {
        "title": "Tasks"
      },
      "alerts": {
        "title": "Alerts",
        "empty": "No alerts"
      },
      "stats": {
        "conversations": "{count} conversations",
        "summary": "{conversations} conversations / {messages} messages"
      },
      "tokens": {
        "contextWindowUsageAria": "Context window usage",
        "contextWindow": "Context Window",
        "usedMax": "Used / Max",
        "tokenUsage": "Token Usage",
        "input": "Input",
        "output": "Output",
        "cacheRead": "Cache Read",
        "cacheWrite": "Cache Write",
        "total": "Total"
      }
    },
    "auxPanel": {
      "tabs": {
        "files": "Files",
        "changes": "Changes",
        "commits": "Commits"
      },
      "noFolderTitle": "No folder open",
      "noFolderHint": "Open a folder to see its contents here"
    },
    "windowControls": {
      "minimizeWindow": "Minimize window",
      "minimize": "Minimize",
      "maximizeWindow": "Maximize window",
      "maximize": "Maximize",
      "restoreWindow": "Restore window",
      "restore": "Restore",
      "closeWindow": "Close window",
      "close": "Close"
    },
    "tabs": {
      "closeConversationTab": "Close conversation tab",
      "close": "Close",
      "closeOthers": "Close Others",
      "closeAll": "Close All",
      "tileDisplay": "Tile Display",
      "untileDisplay": "Exit Tile"
    },
    "fileWorkspace": {
      "files": "Files",
      "closeFileTab": "Close file tab",
      "close": "Close",
      "closeOthers": "Close Others",
      "closeAll": "Close All",
      "preview": "Preview",
      "editSource": "Edit Source",
      "maximize": "Maximize",
      "restore": "Restore"
    },
    "terminal": {
      "rename": "Rename",
      "close": "Close",
      "closeOthers": "Close Others",
      "closeAll": "Close All",
      "hideTerminal": "Hide Terminal ({shortcut})",
      "openFolderFirst": "Open a folder first"
    },
    "folderNameDropdown": {
      "fallbackFolderName": "Folder",
      "openFolder": "Open Folder",
      "cloneRepository": "Clone Repository",
      "projectBoot": "Project Boot",
      "opened": "Opened",
      "recentOpen": "Recently Opened"
    },
    "fileWorkspacePanel": {
      "viewDiff": "View Diff",
      "openFile": "Open File",
      "fileCount": "{count, plural, one {# file} other {# files}}",
      "openFileOrDiff": "Open a file or diff from the right panel",
      "disk": "Disk",
      "head": "HEAD",
      "unsaved": "Unsaved",
      "workingTree": "Working Tree",
      "loading": "Loading...",
      "compareWithBranch": "{path} · compare with {branch}",
      "hunkCount": "{count, plural, one {# hunk} other {# hunks}}",
      "prev": "Prev",
      "next": "Next",
      "jumpToLine": "Jump to line {line}",
      "noParsedDiffSections": "No parsed diff sections",
      "loadingEditor": "Loading editor...",
      "imageZoomIn": "Zoom in",
      "imageZoomOut": "Zoom out",
      "imageZoomReset": "Reset zoom",
      "htmlPreviewTitle": "HTML preview",
      "htmlPreviewTrust": "Enable scripts",
      "htmlPreviewTrustHint": "Run this file's scripts and allow network access. Enable only for files you trust."
    },
    "branchDropdown": {
      "toasts": {
        "commitCodeCompleted": "Code commit completed",
        "pushCodeCompleted": "Code push completed",
        "committedFiles": "Committed {count, plural, one {# file} other {# files}}",
        "taskCompleted": "{label} completed",
        "taskFailed": "{label} failed",
        "mergeNoNewCommits": "{branchName} has no new commits",
        "mergedCommits": "Merged {count, plural, one {# commit} other {# commits}}",
        "allFilesUpToDate": "All files are up to date",
        "updatedFiles": "Updated {count, plural, one {# file} other {# files}}",
        "openCommitWindowFailed": "Failed to open commit window",
        "openPushWindowFailed": "Failed to open push window",
        "upstreamSet": "Upstream branch has been set",
        "upstreamSetAndPushed": "Upstream branch set and pushed {count, plural, one {# commit} other {# commits}}",
        "noCommitsToPush": "No commits to push",
        "pushedCommits": "Pushed {count, plural, one {# commit} other {# commits}}",
        "switchedToFolder": "Switched to {name}",
        "switchFailed": "Failed to switch branch"
      },
      "tasks": {
        "newBranch": "Create branch {name}",
        "newWorktree": "Create worktree {name}",
        "checkoutTo": "Checkout to {branchName}",
        "mergeBranch": "Merge {branchName}",
        "rebaseTo": "Rebase to {branchName}",
        "deleteRemoteBranch": "Delete remote branch {branchName}",
        "initGitRepo": "Initialize Git repository",
        "pullCode": "Pull code",
        "fetchInfo": "Fetch info",
        "pushCode": "Push code",
        "stashChanges": "Stash changes",
        "stashPop": "Pop stash",
        "deleteBranch": "Delete branch {branchName}"
      },
      "confirm": {
        "mergeTitle": "Merge branch",
        "rebaseTitle": "Rebase branch",
        "mergeDescription": "Merge {branchName} into current branch {currentBranch}?",
        "rebaseDescription": "Rebase current branch {currentBranch} onto {branchName}?",
        "deleteRemoteTitle": "Delete Remote Branch",
        "deleteRemoteDescription": "Delete remote branch {branchName}? This will remove it from the remote repository and cannot be undone.",
        "deleteTitle": "Delete branch",
        "deleteDescription": "Delete branch {branchName}? This action cannot be undone.",
        "forceDeleteTitle": "Force Delete Branch",
        "forceDeleteDescription": "Branch {branchName} is not fully merged. Are you sure you want to force delete it? This action cannot be undone."
      },
      "current": "Current",
      "switchToBranch": "Switch to this branch",
      "mergeBranchIntoCurrent": "Merge {branchName} into {currentBranch}",
      "rebaseCurrentToBranch": "Rebase {currentBranch} onto {branchName}",
      "noBranch": "No branch",
      "initGitRepo": "Initialize Git repository",
      "pullCode": "Pull code",
      "fetchRemoteBranches": "Fetch remote branches",
      "openCommitWindow": "Commit code...",
      "pushCode": "Push...",
      "newBranch": "New branch...",
      "newWorktree": "New worktree...",
      "stashChanges": "Stash changes...",
      "stashPop": "Unstash...",
      "manageRemotes": "Manage Remotes...",
      "localBranches": "Local branches ({count, plural, one {#} other {#}})",
      "noLocalBranches": "No local branches",
      "remoteBranches": "Remote branches ({count, plural, one {#} other {#}})",
      "noRemoteBranches": "No remote branches",
      "dialogs": {
        "newBranchTitle": "New branch",
        "newBranchDescription": "Create a new branch from current branch {branch}",
        "branchNamePlaceholder": "Branch name",
        "newWorktreeTitle": "New worktree",
        "newWorktreeDescription": "Create a new worktree from current branch {branch}",
        "branchNameLabel": "Branch name",
        "worktreePathLabel": "Worktree path",
        "worktreePathPlaceholder": "Worktree path",
        "manageRemotesTitle": "Manage Remotes",
        "manageRemotesEmpty": "No remotes configured",
        "remoteNamePlaceholder": "Remote name",
        "remoteUrlPlaceholder": "Remote URL",
        "addRemote": "Add",
        "savingRemotes": "Saving..."
      },
      "conflict": {
        "title": "Merge Conflicts",
        "description": "The following files have conflicts that need to be resolved:",
        "abort": "Abort Merge",
        "openMergeTool": "Open Merge Tool",
        "completeMerge": "Complete Merge",
        "abortSuccess": "Merge aborted successfully",
        "completeSuccess": "Merge completed successfully"
      },
      "stashDialog": {
        "title": "Stash Changes",
        "description": "Save your current changes to a stash",
        "messageLabel": "Message",
        "messagePlaceholder": "Stash message (optional)",
        "keepIndex": "Keep index (staged changes remain staged)",
        "cancel": "Cancel",
        "stash": "Stash",
        "success": "Changes stashed successfully",
        "error": "Failed to stash changes"
      },
      "unstashDialog": {
        "title": "Unstash Changes",
        "noStashes": "No stashes found",
        "selectFile": "Select a file to view diff",
        "viewDiff": "View Diff",
        "original": "Original",
        "modified": "Modified",
        "apply": "Apply",
        "drop": "Drop",
        "applySuccess": "Stash applied successfully",
        "dropSuccess": "Stash dropped",
        "confirmApply": "Apply stash {ref} to working directory?",
        "cancel": "Cancel"
      },
      "deleteBranch": "Delete branch"
    },
    "commitDialog": {
      "toasts": {
        "commitCompleted": "Code commit completed",
        "pushFailed": "Push failed",
        "committedFiles": "Committed {count, plural, one {# file} other {# files}}",
        "addedToVcs": "Added to VCS",
        "addToVcsFailed": "Failed to add to VCS",
        "fileDeleted": "File deleted",
        "deleteFailed": "Delete failed",
        "fileRolledBack": "File rolled back",
        "rollbackFailed": "Rollback failed",
        "dirRolledBack": "Directory rolled back",
        "dirDeleted": "Directory deleted"
      },
      "confirm": {
        "deleteTitle": "Confirm deletion",
        "deleteDescription": "Delete file \"{file}\"? This action cannot be undone.",
        "rollbackTitle": "Confirm rollback",
        "rollbackDescription": "Rollback file \"{file}\" to HEAD? Unsaved changes will be lost.",
        "rollbackDirDescription": "Rollback directory \"{dir}\" to HEAD? Unsaved changes will be lost.",
        "deleteDirDescription": "Delete directory \"{dir}\"? This action cannot be undone."
      },
      "actions": {
        "select": "Select",
        "unselect": "Unselect",
        "rollback": "Rollback",
        "addToVcs": "Add to VCS"
      },
      "aria": {
        "selectFile": "{action} {path}",
        "unselectAllFiles": "Unselect all files",
        "selectAllFiles": "Select all files",
        "unselectTracked": "Unselect tracked changes",
        "selectTracked": "Select tracked changes",
        "unselectUntracked": "Unselect untracked files",
        "selectUntracked": "Select untracked files"
      },
      "loading": "Loading...",
      "selectionCount": "{selected} / {total} files",
      "emptyFiles": "No changed files",
      "trackedChanges": "Tracked changes ({count})",
      "untrackedFiles": "Untracked files ({count})",
      "commitMessage": "Commit message",
      "commitMessagePlaceholder": "Enter commit message...",
      "commitButton": "Commit ({count})",
      "commitAndPushButton": "Commit and Push ({count})",
      "head": "HEAD",
      "workingTree": "Working Tree",
      "clickFileToDiff": "Click a file name to view diff",
      "loadingDiff": "Loading diff..."
    },
    "pushWindow": {
      "title": "Push Code",
      "noUnpushedCommits": "No unpushed commits",
      "noRemoteConfigured": "No Git remote configured\nAdd a remote in Manage Remotes",
      "newBranchNoPushedCommits": "New branch — push to create remote tracking branch",
      "unpushed": "Unpushed",
      "selectFileToViewDiff": "Select a file to view diff",
      "before": "Before",
      "after": "After",
      "push": "Push",
      "toasts": {
        "pushSuccess": "Push successful",
        "pushFailed": "Push failed",
        "upstreamSet": "Upstream branch has been set",
        "upstreamSetAndPushed": "Upstream branch set and pushed {count, plural, one {# commit} other {# commits}}",
        "noCommitsToPush": "No commits to push",
        "pushedCommits": "Pushed {count, plural, one {# commit} other {# commits}}"
      }
    },
    "gitLogTab": {
      "filesTitle": "Files",
      "expandAllFiles": "Expand all files",
      "collapseAllFiles": "Collapse all files",
      "workspace": "workspace",
      "retry": "Retry",
      "noCommitsFound": "No commits found",
      "notAGitRepoTitle": "Not a Git repository",
      "notAGitRepoHint": "Initialize Git from the branch menu above, or open a folder that is already tracked.",
      "hash": "Hash",
      "copyHash": "Copy hash",
      "copyMessage": "Copy message",
      "author": "Author",
      "noFileChangeDetails": "No file change details available.",
      "branchesTitle": "Branches",
      "loadingBranches": "Loading branches...",
      "noContainingBranches": "No containing branches found.",
      "newBranch": "New branch...",
      "resetToHere": "Reset to Here",
      "resetDisabledReasonNotCurrentBranchView": "Available only when viewing current branch",
      "viewCommitDiffAria": "View diff for commit {hash}",
      "copyFullCommitHashAria": "Copy full commit hash {hash}",
      "pushStatus": {
        "pushed": "Pushed to remote",
        "notPushed": "Not pushed to remote",
        "unknown": "Push status unknown (no upstream configured)"
      },
      "time": {
        "monthsAgo": "{count, plural, one {# month ago} other {# months ago}}",
        "daysAgo": "{count, plural, one {# day ago} other {# days ago}}",
        "hoursAgo": "{count, plural, one {# hour ago} other {# hours ago}}",
        "minsAgo": "{count, plural, one {# min ago} other {# mins ago}}",
        "justNow": "just now"
      },
      "toasts": {
        "createdAndSwitchedNewBranch": "Created and switched to new branch",
        "newBranchFromCommit": "{name} (from {shortHash})",
        "createBranchFailed": "Failed to create branch",
        "openPushWindowFailed": "Failed to open push window",
        "resetSuccess": "Reset successful",
        "resetSuccessDescription": "{branch} reset to {shortHash} with {mode}",
        "resetFailed": "Reset failed"
      },
      "branchSelector": {
        "selectBranchPlaceholder": "Select branch...",
        "localBranches": "Local branches",
        "current": "Current",
        "remoteBranches": "Remote branches",
        "refreshCommitHistory": "Refresh commit history"
      },
      "dialogs": {
        "newBranchTitle": "New branch",
        "newBranchDescription": "Create a new branch with commit {shortHash} as the latest commit.",
        "branchNamePlaceholder": "Branch name",
        "reset": {
          "title": "Reset Current Branch to Here",
          "branchLabel": "Branch",
          "targetLabel": "Target",
          "messageLabel": "Message",
          "modeLabel": "Reset mode",
          "confirmButton": "Reset",
          "modes": {
            "soft": {
              "label": "--soft",
              "description": "Move HEAD and the current branch pointer to the target commit.\nKeep Index and Working Tree unchanged.\nChanges from the removed commits stay staged."
            },
            "mixed": {
              "label": "--mixed (default)",
              "description": "Move HEAD to the target commit.\nReset Index to the target commit while keeping Working Tree changes.\nThose changes become unstaged."
            },
            "hard": {
              "label": "--hard",
              "description": "Move HEAD and reset both Index and Working Tree to the target commit.\nLocal tracked changes after the target commit are discarded.\nThis is a destructive operation."
            },
            "keep": {
              "label": "--keep",
              "description": "Move HEAD to the target commit and keep local changes when possible.\nOnly non-conflicting local changes are preserved.\nIf conflicts are detected, reset aborts to protect your work."
            }
          }
        }
      }
    },
    "gitChangesTab": {
      "workspace": "workspace",
      "noChanges": "No local changes",
      "notAGitRepoTitle": "Not a Git repository",
      "notAGitRepoHint": "Initialize Git from the branch menu above, or open a folder that is already tracked.",
      "trackedChanges": "Tracked changes ({count})",
      "untrackedFiles": "Untracked files ({count})",
      "expandTracked": "Expand tracked changes",
      "collapseTracked": "Collapse tracked changes",
      "expandUntracked": "Expand untracked files",
      "collapseUntracked": "Collapse untracked files",
      "actions": {
        "commitCode": "Commit code",
        "rollback": "Rollback",
        "addToVcs": "Add to VCS",
        "delete": "Delete"
      },
      "toasts": {
        "noAddableFilesInDir": "No changed files in this directory can be added to VCS",
        "noRollbackFilesInDir": "No changed files in this directory can be rolled back",
        "addedToVcs": "Added {name} to VCS",
        "addToVcsFailed": "Failed to add to VCS",
        "openCommitWindowFailed": "Failed to open commit window",
        "rolledBack": "Rolled back {name}",
        "rollbackFailed": "Rollback failed",
        "addedFilesToVcs": "Added {count, plural, one {# file} other {# files}} to VCS",
        "rolledBackFiles": "Rolled back {count, plural, one {# file} other {# files}}",
        "deleted": "Deleted {name}",
        "deleteFailed": "Delete failed",
        "deletedFiles": "Deleted {count, plural, one {# file} other {# files}}",
        "noDeletableFilesInDir": "No changed files in this directory can be deleted"
      },
      "directoryDialog": {
        "descriptionAdd": "Select files under directory {path} to add to VCS.",
        "descriptionRollback": "Select files under directory {path} to roll back.",
        "descriptionDelete": "Select files under directory {path} to delete. This action cannot be undone.",
        "descriptionFallback": "Select files to proceed.",
        "selectionCount": "Selected {selected} / {total} files",
        "selectAll": "Select all",
        "unselectAll": "Unselect all",
        "loadingCandidates": "Loading directory changes...",
        "noOperableFiles": "No operable files"
      },
      "rollbackConfirm": {
        "title": "Confirm rollback",
        "descriptionWithTarget": "Roll back local changes for {kind} \"{name}\"?",
        "descriptionFallback": "Roll back local changes?",
        "kindDirectory": "directory",
        "kindFile": "file"
      },
      "deleteConfirm": {
        "title": "Confirm deletion",
        "descriptionWithTarget": "Delete {kind} \"{name}\"? This action cannot be undone.",
        "descriptionFallback": "This action cannot be undone.",
        "kindDirectory": "directory",
        "kindFile": "file"
      }
    },
    "tabContext": {
      "loadingConversation": "Loading...",
      "untitledConversation": "Untitled conversation",
      "newConversation": "New Conversation"
    },
    "fileTreeTab": {
      "workspace": "Workspace",
      "retry": "Retry",
      "git": "Git",
      "openInFileManager": "Open in file manager",
      "openInFinder": "Open in Finder",
      "openInExplorer": "Open in Explorer",
      "attachToCurrentSession": "Add to session",
      "compareWithBranch": "Compare with branch...",
      "reloadFromDisk": "Reload from disk",
      "new": "New",
      "newFile": "File",
      "newDirectory": "Directory",
      "openIn": "Open in",
      "openInTerminal": "Open in terminal",
      "copyPath": "Copy path",
      "upload": "Upload files/folder",
      "download": "Download file",
      "downloadAsZip": "Download as ZIP",
      "actions": {
        "select": "Select",
        "unselect": "Unselect",
        "commitCode": "Commit code",
        "rollback": "Rollback",
        "addToVcs": "Add to VCS"
      },
      "aria": {
        "selectPath": "{action} {path}"
      },
      "toasts": {
        "openDirectoryFailed": "Failed to open directory",
        "openBuiltinTerminalFailed": "Unable to open built-in terminal",
        "openCommitWindowFailed": "Failed to open commit window",
        "noAddableFilesInDir": "No changed files in this directory can be added to VCS",
        "noRollbackFilesInDir": "No changed files in this directory can be rolled back",
        "addedToVcs": "Added {name} to VCS",
        "addToVcsFailed": "Failed to add to VCS",
        "loadBranchesFailed": "Failed to load branches",
        "renameFailed": "Rename failed",
        "deleteFailed": "Delete failed",
        "rolledBack": "Rolled back {name}",
        "rollbackFailed": "Rollback failed",
        "addedFilesToVcs": "Added {count, plural, one {# file} other {# files}} to VCS",
        "rolledBackFiles": "Rolled back {count, plural, one {# file} other {# files}}",
        "savedAsCopy": "Saved as a copy",
        "saveCopyFailed": "Failed to save as copy",
        "watchStartFailed": "Failed to start file watch",
        "createFailed": "Failed to create",
        "downloadFailed": "Failed to download {name}",
        "downloadSaved": "Downloaded {name}",
        "pathCopied": "Path copied",
        "copyPathFailed": "Failed to copy path"
      },
      "createDialog": {
        "newFile": "New file",
        "newDirectory": "New directory",
        "description": "Enter a name for the new {kind}.",
        "placeholderFile": "file-name.ext",
        "placeholderDirectory": "folder-name"
      },
      "renameDialog": {
        "renameDirectory": "Rename directory",
        "renameFile": "Rename file",
        "description": "Enter a new name (name only, no path).",
        "placeholderDirectory": "new-folder-name",
        "placeholderFile": "new-file-name.ext"
      },
      "uploadDialog": {
        "title": "Upload to workspace",
        "description": "Adjust the destination if needed, then add files or folders.",
        "workspaceRoot": "workspace root",
        "targetPathLabel": "Upload to",
        "targetPathHint": "Resolved path: {path}",
        "dropHint": "Drag files or folders here, or use the buttons below",
        "dropHintActive": "Release to add to the queue",
        "selectFiles": "Select files",
        "selectFolder": "Select folder",
        "startUpload": "Start upload",
        "clearQueue": "Clear finished",
        "removeItem": "Remove from queue",
        "retry": "Retry",
        "dropZoneAria": "Drop files here or activate to browse",
        "folderEmpty": "No files found in the dropped folder",
        "summary": "Total: {total} · Succeeded: {succeeded} · Failed: {failed}",
        "status": {
          "pending": "Waiting",
          "uploading": "Uploading",
          "success": "Done",
          "error": "Failed",
          "cancelled": "Cancelled"
        }
      },
      "directoryDialog": {
        "descriptionAdd": "Select files under directory {path} to add to VCS.",
        "descriptionRollback": "Select files under directory {path} to roll back.",
        "descriptionFallback": "Select files to proceed.",
        "selectionCount": "Selected {selected} / {total} files",
        "selectAll": "Select all",
        "unselectAll": "Unselect all",
        "loadingCandidates": "Loading directory changes...",
        "noOperableFiles": "No operable files"
      },
      "compareDialog": {
        "title": "Compare with branch",
        "descriptionWithTarget": "Select a branch and compare with {kind} {path}",
        "descriptionFallback": "Select a branch to compare.",
        "kindDirectory": "directory",
        "kindFile": "file",
        "filterPlaceholder": "Filter branches, e.g. main / origin/main",
        "singleClickHint": "Click a branch to compare directly",
        "loadingBranches": "Loading branches...",
        "recentBranches": "Recent branches ({count})",
        "noCurrentBranch": "No current branch",
        "localBranches": "Local branches ({count})",
        "remoteBranches": "Remote branches ({count})",
        "noMatchingBranches": "No matching branches"
      },
      "externalConflictDialog": {
        "title": "External file changes detected",
        "descriptionWithPath": "File {path} has changed on disk, and current edits are unsaved.",
        "descriptionFallback": "Current file has changed on disk, and current edits are unsaved.",
        "compare": "Compare",
        "savingCopy": "Saving copy...",
        "saveAsCopy": "Save as copy",
        "reload": "Reload"
      },
      "deleteConfirm": {
        "title": "Confirm deletion",
        "descriptionWithTarget": "Delete {kind} \"{name}\"? This action cannot be undone.",
        "descriptionFallback": "This action cannot be undone.",
        "kindDirectory": "directory",
        "kindFile": "file"
      },
      "rollbackConfirm": {
        "title": "Confirm rollback",
        "descriptionWithTarget": "Rollback local changes for file \"{name}\"?",
        "descriptionFallback": "Rollback local changes for this file?"
      },
      "terminalTitle": "Terminal · {name}"
    },
    "commandDropdown": {
      "loading": "Loading...",
      "addCommand": "Add Command",
      "manageCommands": "Manage Commands...",
      "runCommandTitle": "Run: {command}",
      "stopCommandTitle": "Stop: {command}",
      "manageDialog": {
        "title": "Manage Commands",
        "empty": "No commands yet",
        "namePlaceholder": "Name",
        "commandPlaceholder": "Command",
        "add": "Add",
        "saving": "Saving..."
      }
    },
    "workspaceContext": {
      "confirmCloseDirtyTab": "Close \"{title}\" without saving?",
      "confirmCloseOtherDirtyTabs": "Close other tabs with unsaved changes?",
      "confirmCloseAllDirtyTabs": "Close all tabs with unsaved changes?",
      "unableLoadContent": "Unable to load content.\n\n{message}",
      "previewRequestTimedOut": "Preview request timed out",
      "diffRequestTimedOut": "Diff request timed out",
      "branchCompareRequestTimedOut": "Branch compare request timed out",
      "commitDiffRequestTimedOut": "Commit diff request timed out",
      "saveRequestTimedOut": "Save request timed out",
      "reloadRequestTimedOut": "Reload request timed out",
      "noChanges": "No changes.",
      "noDiffOutput": "No diff output.",
      "diffTitleWorkspace": "Diff · Workspace",
      "diffDescriptionWorkingTree": "Working tree (HEAD)",
      "diffTitleFile": "Diff · {name}",
      "compareTitleFile": "Compare · {name}",
      "compareTitleBranch": "Compare · {branch}",
      "compareDescriptionPath": "{path} · compare with {branch}",
      "compareDescriptionBranch": "compare with {branch}",
      "diffTitleCommitFile": "Diff · {name} @ {hash}",
      "diffTitleCommit": "Diff · {hash}",
      "diffDescriptionCommitPath": "{path} · commit {commit}",
      "diffDescriptionCommit": "commit {commit}",
      "diffTitleConflictFile": "Conflict · {name}",
      "diffDescriptionConflict": "{path} · disk vs unsaved"
    },
    "chat": {
      "acpConnections": {
        "actions": {
          "openAgentsSettings": "Open Agents settings",
          "retry": "Retry"
        },
        "agentsSetupHint": "Open Settings > Agents to manage installation.",
        "withSetupHint": "{message}\n{hint}",
        "blocked": {
          "missingConfig": "Unable to read current Agent configuration.",
          "disabled": "{agent} is disabled in Agents settings. Enable it before connecting.",
          "unavailable": "{agent} is unavailable on the current platform.",
          "sdkMissing": "{agent} SDK is not installed"
        },
        "backendErrors": {
          "initializeTimeout": "{agent} connection handshake timed out after 60 seconds. Please open Settings to check Agent configuration and network settings.",
          "processExited": "{agent} process exited unexpectedly.",
          "spawnFailed": "Failed to start {agent}: {message}",
          "downloadFailed": "{agent} download failed: {message}",
          "sessionLoadResourceNotFound": "{agent} session failed to load. Reload to retry, or start a new conversation.",
          "turnFailedRefusal": "{agent} refused to continue this turn. This often indicates a backend or gateway error — check the agent's logs.",
          "turnFailedMaxTokens": "{agent} reached the maximum token limit for this turn.",
          "turnFailedMaxTurnRequests": "{agent} reached the maximum number of allowed requests for this turn.",
          "turnFailedUnknown": "{agent} ended the turn with an unrecognized stop reason.",
          "turnFailedEmpty": "{agent} ended the turn without producing any response. Please check the agent's configuration."
        },
        "unableReadAgentConfig": "Unable to read Agent config: {message}",
        "connectFailedTitle": "{agent} connection failed",
        "toolFallbackTitle": "Tool",
        "eventErrorTitle": "Agent Error",
        "notificationTurnComplete": "{agent} has finished responding",
        "notificationError": "{agent} error: {message}",
        "claudeApiRetry": {
          "fallbackError": "authentication_failed",
          "retryingWithMax": "retrying {attempt}/{max}",
          "retryingAttempt": "retrying attempt {attempt}",
          "retrying": "retrying",
          "nextRetryIn": "next in {seconds}s",
          "line": "{error}{status} · {retry}",
          "lineWithDelay": "{error}{status} · {retry}, {delay}",
          "httpStatus": " (HTTP {status})"
        }
      },
      "connectionLifecycle": {
        "tasks": {
          "connectingTitle": "Connecting to {agent}",
          "connectingDescription": "Establishing connection",
          "loadingSelectorsTitle": "Loading {agent} selectors",
          "loadingSelectorsDescription": "Fetching mode and session config options",
          "initSessionTitle": "Initializing {agent} session",
          "initSessionDescription": "Creating session and loading configuration"
        },
        "errors": {
          "connectionFailed": "Connection failed"
        }
      },
      "shared": {
        "attachedResources": "Attached resources",
        "toolCallFailed": "Tool call failed"
      },
      "messageThread": {
        "emptyTitle": "No messages yet",
        "emptyDescription": "Start a conversation to see messages here"
      },
      "chatInput": {
        "connecting": "Connecting...",
        "agentResponding": "{agent} is responding...",
        "sendMessage": "Send a message..."
      },
      "messageInput": {
        "askAnything": "Ask anything...",
        "removeAttachmentAria": "Remove {name}",
        "attachFiles": "Attach files",
        "attachLocalUpload": "Upload local file",
        "attachServerFile": "Pick server file",
        "addActions": "Add",
        "quickMessages": "Quick messages",
        "quickMessagesEmpty": "No quick messages yet",
        "quickMessagesLoading": "Loading...",
        "quickMessageUntitled": "Untitled",
        "liveFeedback": "Live feedback",
        "liveFeedbackDisabledHint": "Available while the agent is working",
        "dropFilesToAttach": "Drop files to attach",
        "loadingSettings": "Loading settings...",
        "loadingMode": "Loading mode...",
        "modeLabel": "Mode",
        "agentSettings": "Agent settings",
        "cancel": "Cancel",
        "send": "Send",
        "forkAndSend": "Fork & Send",
        "slashCommands": "Slash commands",
        "expertSkills": "Expert skills",
        "expertsEmptyForAgent": "This agent has no enabled experts. Enable them in Settings > Experts.",
        "slashSearchPlaceholder": "Search commands...",
        "slashSearchEmpty": "No matching commands",
        "attachUploadTooLarge": "{names} exceeds the {limit}MB upload limit and was skipped.",
        "attachUploadFailed": "Failed to upload {names}.",
        "attachUploadNotAFile": "{names} isn't a regular file (directory or special file) and was skipped.",
        "attachUploadQuotaExceeded": "The server is out of upload storage; {names} couldn't be uploaded."
      },
      "messageQueue": {
        "addToQueue": "Queue message",
        "saveEdit": "Save",
        "cancelEdit": "Cancel edit",
        "editItem": "Edit",
        "deleteItem": "Remove"
      },
      "welcomeInputPanel": {
        "agentsSettingsPath": "Settings > Agents",
        "autoConnectFallback": "Click to open {path} and manage installation.",
        "autoConnectAppend": "{message}. Click to open {path} and manage installation.",
        "enableAgentFirstPlaceholder": "Enable at least one agent before starting a session...",
        "prepareSessionFailed": "Couldn't prepare the chat session. Please try again.",
        "createConversationFailed": "Couldn't create the conversation. Please try again.",
        "askAnythingPlaceholder": "Ask anything..."
      },
      "welcomePanel": {
        "greeting": "What would you like to <highlight>do today</highlight>?",
        "tips": {
          "tileTabs": "Right-click any conversation tab and choose Tile Display to see multiple sessions side by side.",
          "pinTab": "Double-click a conversation tab to pin it, so a newly opened session won't auto-replace it.",
          "shortcutsNewSearch": "<shortcut>{newConversation}</shortcut> opens a new conversation, <shortcut>{searchConversations}</shortcut> searches your history.",
          "slashAtMention": "Type / in the input to trigger slash commands, or @ to reference a file from the project.",
          "pasteDropFiles": "Paste a screenshot or drop a file directly onto the input to attach it.",
          "queueMessage": "While the agent is replying, keep typing — your next message gets queued and auto-sent when it finishes.",
          "draftAutoSave": "Unsent drafts are auto-saved per conversation and restored when you come back.",
          "forkSend": "The send button's dropdown has Fork and Send — branch from the current turn into a new tab.",
          "exportConversation": "Right-click inside the conversation to export it as Markdown, HTML, or an image.",
          "chatChannels": "Connect Telegram / Lark / WeChat under Settings → Chat Channels to continue from your phone.",
          "shortcutsAuxPanel": "<shortcut>{toggleAuxPanel}</shortcut> toggles the right panel to view this session's touched files and Git changes.",
          "shortcutsTerminalSidebar": "<shortcut>{toggleTerminal}</shortcut> opens the built-in terminal, <shortcut>{toggleSidebar}</shortcut> toggles the sidebar.",
          "customShortcuts": "Every shortcut is fully remappable under Settings → Shortcuts.",
          "webService": "Enable Settings → Web Service so teammates can reach the same codeg from a browser.",
          "fusionMode": "Open a file or diff to automatically show it alongside the conversation.",
          "quickMessages": "Open the + button next to the input and pick Quick Messages to insert a saved snippet (manage them under Settings → Quick Messages).",
          "experts": "The + button has an Expert Skills menu — preload roles like Debug or Planning with one click."
        }
      },
      "agentSelector": {
        "noEnabledAgents": "No enabled agents",
        "openAgentsSettings": "Open Agents settings"
      },
      "subAgentOverlay": {
        "title": "Sub-agents",
        "collapsedSummary": "Sub-agents {count}",
        "collapseAria": "Collapse sub-agents"
      },
      "agentPlanOverlay": {
        "title": "Agent Plan",
        "collapsePlanAria": "Collapse plan",
        "collapsedSummary": "Plan {completed}/{total}",
        "status": {
          "completed": "Completed",
          "inProgress": "In Progress",
          "pending": "Pending",
          "unknown": "Unknown"
        },
        "priority": {
          "high": "High",
          "medium": "Medium",
          "low": "Low",
          "unknown": "Unknown"
        }
      },
      "permissionDialog": {
        "subtitle": "Agent requests permission to continue this turn.",
        "kindFallbackTool": "tool",
        "command": "Command",
        "cwd": "CWD: {cwd}",
        "filesSummary": "Files: {count}",
        "moreFiles": "+{count} more files",
        "plan": "Plan",
        "allowedActions": "Allowed actions",
        "targetMode": "Target mode: {mode}"
      },
      "questionDialog": {
        "title": "Agent is asking a question",
        "placeholder": "Type your answer...",
        "send": "Send"
      },
      "messageBranch": {
        "previousBranchAria": "Previous branch",
        "nextBranchAria": "Next branch",
        "pageOf": "{current} of {total}"
      },
      "terminal": {
        "title": "Terminal",
        "running": "Running"
      },
      "reasoning": {
        "thinking": "Thinking…",
        "thoughtForFewSeconds": "Thought",
        "thoughtForSeconds": "Thought"
      },
      "linkSafety": {
        "errorCannotOpen": "Cannot open local file",
        "errorNoWorkspace": "No workspace folder is currently active.",
        "errorOutsideWorkspace": "The file is outside the current workspace folder.",
        "errorFailedOpen": "Failed to open local file",
        "errorFailedLink": "Failed to open link",
        "errorUnsupportedLinkProtocol": "This link protocol is not supported."
      },
      "messageList": {
        "attachedResources": "Attached resources",
        "loading": "Loading...",
        "error": "Error: {message}",
        "errorTitle": "Session load failed",
        "errorActionReload": "Reload",
        "errorActionNewSession": "New conversation",
        "emptyConversation": "No messages in this conversation.",
        "systemMessage": "System message",
        "copyMessage": "Copy",
        "copied": "Copied",
        "downloadImage": "Download image",
        "downloadFailed": "Download failed: {message}",
        "imageGeneration": "Image generation",
        "imageGenerationPending": "Generating image…",
        "imageGenerationFailed": "Image generation failed",
        "model": "Model",
        "tokenStats": "Token usage",
        "tokenInput": "Input",
        "tokenOutput": "Output",
        "tokenCacheRead": "Cache read",
        "tokenCacheWrite": "Cache write",
        "duration": "Duration",
        "completedAt": "Completed at",
        "jumpToPreviousUserMessage": "Jump to user message"
      },
      "liveTurnStats": {
        "thinking": "Thinking...",
        "streaming": "Streaming",
        "elapsedHours": "{value}h",
        "elapsedMinutes": "{value}m",
        "elapsedSeconds": "{value}s",
        "toolUseCount": "{count} tool {count, plural, one {use} other {uses}}"
      },
      "tool": {
        "parameters": "Parameters",
        "error": "Error",
        "result": "Result",
        "status": {
          "approvalRequested": "Awaiting Approval",
          "approvalResponded": "Responded",
          "inputAvailable": "Running",
          "inputStreaming": "Pending",
          "outputAvailable": "Completed",
          "outputDenied": "Denied",
          "outputError": "Error"
        }
      },
      "toolCallBlock": {
        "tool": "Tool",
        "error": "Error",
        "result": "Result"
      },
      "delegation": {
        "subAgentRunning": "Sub-agent running…",
        "noDetail": "No detail available yet.",
        "unknownAgent": "Sub-agent",
        "openDetail": "Open conversation",
        "detailTitle": "Sub-agent conversation",
        "detailDescription": "Read-only view of the delegated sub-agent's conversation.",
        "waitForResult": "Waiting for task {task} result",
        "waitForResultNoTask": "Waiting for task result",
        "cancelTask": "Canceling task {task}",
        "cancelTaskNoTask": "Canceling task",
        "resultPageOf": "{current} / {total}",
        "prevResult": "Previous result",
        "nextResult": "Next result",
        "noResultText": "No result captured for this check.",
        "status": {
          "starting": "starting",
          "running": "running",
          "checked": "checked",
          "waiting": "awaiting approval",
          "ok": "done",
          "err": {
            "default": "failed",
            "delegation_disabled": "disabled",
            "depth_limit": "depth limit",
            "invalid_agent_type": "bad agent",
            "spawn_failed": "spawn failed",
            "send_failed": "send failed",
            "timeout": "timeout",
            "canceled": "canceled",
            "child_refusal": "subagent refused",
            "child_max_tokens": "subagent token limit",
            "child_max_turn_requests": "subagent request limit",
            "child_empty": "subagent no output",
            "child_unknown": "subagent unknown error",
            "unknown": "unknown task"
          }
        }
      },
      "contentParts": {
        "showingTailOutput": "Showing tail output while streaming for performance.",
        "result": "Result",
        "unknown": "unknown",
        "inputTruncated": "Input was truncated — diff may be incomplete.",
        "replaceAll": "REPLACE ALL",
        "filesCount": "Files: {count}",
        "update": "update",
        "moreFiles": "+{count} more files",
        "timeoutMs": "Timeout: {timeout}ms",
        "backgroundTrue": "Background: true",
        "offset": "Offset: {offset}",
        "limit": "Limit: {limit}",
        "pages": "Pages: {pages}",
        "mode": "Mode: {mode}",
        "cell": "Cell: {cell}",
        "pathLabel": "Path:",
        "globLabel": "Glob:",
        "typeLabel": "Type:",
        "outputLabel": "Output:",
        "caseInsensitive": "Case insensitive",
        "multiline": "Multiline",
        "promptLabel": "Prompt",
        "subjectLabel": "Subject",
        "taskLabel": "Task",
        "nameLabel": "Name:",
        "agentPromptLabel": "Prompt",
        "agentModelLabel": "Model",
        "agentRunning": "Running...",
        "agentFallbackTitle": "Sub-agent starting…",
        "agentStatsBash": "Commands",
        "agentStatsRead": "Files read",
        "agentStatsSearch": "Searches",
        "agentStatsEdit": "Edits",
        "agentStatsOther": "Other",
        "goal": {
          "title": "Goal:",
          "titleWithStatus": "Goal {status}",
          "objective": "Objective",
          "statusLabel": "Status",
          "tokensUsed": "Tokens used",
          "budget": "Budget",
          "remaining": "Remaining",
          "elapsed": "Elapsed",
          "tokens": "tokens",
          "status": {
            "active": "active",
            "paused": "paused",
            "blocked": "blocked",
            "usageLimited": "usage limited",
            "budgetLimited": "budget limited",
            "complete": "complete"
          }
        },
        "field": {
          "file": "File",
          "notebook": "Notebook",
          "command": "Command",
          "old": "Old",
          "new": "New",
          "pattern": "Pattern",
          "path": "Path",
          "query": "Query",
          "url": "URL",
          "description": "Description",
          "content": "Content",
          "source": "Source",
          "prompt": "Prompt",
          "subject": "Subject",
          "taskId": "Task ID",
          "status": "Status",
          "skill": "Skill",
          "args": "Args",
          "offset": "Offset",
          "limit": "Limit",
          "glob": "Glob",
          "type": "Type",
          "output": "Output",
          "replaceAll": "Replace All",
          "language": "Language",
          "timeout": "Timeout",
          "background": "Background",
          "agentType": "Agent Type",
          "library": "Library",
          "libraryId": "Library ID"
        },
        "title": {
          "edit": "Edit",
          "command": "Command",
          "todoWrite": "TodoWrite",
          "read": "Read",
          "write": "Write",
          "notebookEdit": "NotebookEdit",
          "editFiles": "Edit ({count} files)",
          "editWithTarget": "Edit {target}",
          "readWithTarget": "Read {target}",
          "writeWithTarget": "Write {target}",
          "notebookEditWithTarget": "NotebookEdit {target}",
          "globWithPattern": "Glob {pattern}",
          "grepWithPattern": "Grep {pattern}",
          "taskCreateWithSubject": "TaskCreate: {subject}",
          "taskUpdateWithStatus": "TaskUpdate #{id} -> {status}",
          "taskUpdate": "TaskUpdate #{id}",
          "webFetchWithUrl": "WebFetch {url}",
          "webSearchWithQuery": "WebSearch: {query}",
          "todosProgress": "Todos ({done}/{total})",
          "skillWithName": "Skill: {name}",
          "genericWithContext": "{tool}: {context}"
        },
        "toolGroup": {
          "search": "{count, plural, one {Explored # search} other {Explored # searches}}",
          "command": "{count, plural, one {Ran # command} other {Ran # commands}}",
          "read": "{count, plural, one {Read files # time} other {Read files # times}}",
          "memory": "{count, plural, one {Recalled # memory} other {Recalled # memories}}",
          "edit": "{count, plural, one {Edited files # time} other {Edited files # times}}",
          "fetch": "{count, plural, one {Fetched # resource} other {Fetched # resources}}",
          "think": "{count, plural, one {Thought # time} other {Thought # times}}",
          "todo": "{count, plural, one {Updated # todo} other {Updated # todos}}",
          "task": "{count, plural, one {Ran # task} other {Ran # tasks}}",
          "other": "{count, plural, one {Used # tool} other {Used # tools}}",
          "errorSuffix": "{count, plural, one {# failed} other {# failed}}",
          "joiner": " · "
        }
      },
      "messageNav": {
        "title": "Message navigation",
        "collapse": "Collapse message navigation",
        "collapsedSummary": "Messages {count}",
        "fileCount": "{count, plural, one {# file} other {# files}}",
        "remove": "Remove",
        "noDiffDataAvailable": "No diff data available for {filePath}"
      },
      "askQuestion": {
        "title": "The agent needs your input",
        "subtitle": "Answer below, then submit. You can skip anytime.",
        "recommended": "Recommended",
        "other": "Other",
        "otherPlaceholder": "Type your answer…",
        "singleSelect": "Single",
        "multiSelect": "Multiple",
        "skip": "Skip",
        "next": "Next",
        "submit": "Submit",
        "submitError": "Couldn't submit. Please try again."
      },
      "feedbackCheckResult": {
        "count": "{count, plural, =1 {1 feedback note} other {# feedback notes}}",
        "expand": "Show all feedback",
        "collapse": "Collapse",
        "errorTitle": "Feedback check failed"
      },
      "askQuestionResult": {
        "title": "Question",
        "answeredLabel": "Q&A:",
        "awaiting": "Waiting for your answer…",
        "declined": "You dismissed this — the agent used its own judgment.",
        "noSelection": "No selection"
      },
      "configStale": {
        "agentConfigTitle": "Agent settings updated",
        "modelProviderTitle": "Model provider updated",
        "description": "This session is still using its previous configuration. Reconnect to apply — your conversation history is kept.",
        "reconnect": "Reconnect to apply",
        "reconnecting": "Reconnecting…",
        "reconnectDisabledDuringTurn": "Available once the current turn finishes",
        "dismiss": "Dismiss",
        "reconnectFailed": "Failed to reconnect session",
        "applied": "New configuration applied"
      }
    },
    "diffPreview": {
      "mode": {
        "added": "Added",
        "deleted": "Deleted",
        "renamed": "Renamed",
        "modified": "Modified"
      },
      "hunkLabel": "Hunk {index}",
      "loadingHunk": "Loading hunk...",
      "noDiffData": "No diff data"
    },
    "conversationContextBar": {
      "folderTitle": "Working folder",
      "branchTitle": "Working branch",
      "searchFolder": "Search folder...",
      "searchBranch": "Search branch...",
      "noFolders": "No folders",
      "noBranches": "No branches",
      "noBranch": "(no branch)",
      "chatModeLabel": "No-folder mode",
      "commit": "Commit",
      "push": "Push",
      "merge": "Merge",
      "toasts": {
        "folderChanged": "Switched to {name}",
        "openFolderFailed": "Failed to open folder",
        "switchedToChatMode": "Switched to chat mode",
        "openStashFailed": "Failed to open stash window",
        "openMergeFailed": "Failed to open merge window"
      }
    },
    "cloneDialog": {
      "title": "Clone Repository",
      "repositoryUrl": "Repository URL",
      "repositoryUrlPlaceholder": "https://github.com/user/repo.git",
      "directory": "Directory",
      "directoryPlaceholder": "Select target directory...",
      "browseDirectory": "Browse directory",
      "cancel": "Cancel",
      "clone": "Clone",
      "clonePath": "Clone path: {path}"
    },
    "toasts": {
      "cloneFailed": "Failed to clone repository"
    }
  },
  "ProjectBoot": {
    "title": "Project Boot",
    "tabs": {
      "shadcn": "shadcn",
      "hyperframes": "HyperFrames"
    },
    "hyperframes": {
      "title": "HyperFrames Video Project",
      "subtitle": "Scaffold an HTML-to-video project. Your workspace agent can then write and render it.",
      "resolution": "Resolution",
      "skillsTitle": "Agent Skills",
      "skillsDesc": "Globally install the HyperFrames skills (symlinked) for the selected agents so they can author and render video.",
      "recheck": "Re-check",
      "installedBadge": "Installed",
      "skillsInstall": "Install / update skills",
      "skillsInstalling": "Installing skills…",
      "skillsInstalled": "HyperFrames skills installed",
      "skillsInstallFailed": "Couldn't install HyperFrames skills"
    },
    "config": {
      "base": "Base",
      "style": "Style",
      "baseColor": "Base Color",
      "theme": "Theme",
      "chartColor": "Chart Color",
      "iconLibrary": "Icon Library",
      "font": "Font",
      "fontHeading": "Heading Font",
      "menuAccent": "Menu Accent",
      "menuColor": "Menu Color",
      "radius": "Radius",
      "template": "Template",
      "createProject": "Create Project",
      "sectionStyle": "Style",
      "sectionColors": "Colors",
      "sectionTypography": "Typography",
      "sectionInterface": "Interface"
    },
    "preview": {
      "loading": "Loading preview..."
    },
    "createDialog": {
      "title": "Create Project",
      "projectName": "Project Name",
      "projectNamePlaceholder": "my-app",
      "frameworkTemplate": "Framework Template",
      "packageManager": "Package Manager",
      "saveDirectory": "Save Directory",
      "saveDirectoryPlaceholder": "Select directory...",
      "browseDirectory": "Browse",
      "projectPath": "Project will be created at: {path}",
      "advancedOptions": "Advanced Options",
      "base": "Base Library",
      "enableRtl": "Enable RTL Support",
      "enableRtlDescription": "Enable layout support for right-to-left languages (e.g. Arabic, Hebrew)",
      "pmChecking": "Checking...",
      "pmNotInstalled": "Not installed",
      "cancel": "Cancel",
      "create": "Create",
      "creating": "Creating project..."
    },
    "toasts": {
      "createFailed": "Failed to create project",
      "createSuccess": "Project created successfully",
      "openWorkspaceFailed": "Project created, but couldn't open it in the workspace"
    },
    "errors": {
      "directoryExists": "Target directory already exists",
      "commandFailed": "Project creation command failed."
    }
  },
  "WebServiceSettings": {
    "addressSwitchHint": "Switching only changes the address shown and opened here — the service listens on all interfaces and stays reachable at every address.",
    "sectionTitle": "Web Service",
    "sectionDescription": "Enable to access Codeg remotely via browser",
    "port": "Port",
    "status": "Status",
    "autoStart": "Auto-start",
    "autoStartHint": "Start the Web service when Codeg launches",
    "running": "Running",
    "stopped": "Stopped",
    "processing": "Processing...",
    "start": "Start",
    "stop": "Stop",
    "startFailed": "Failed to start",
    "stopFailed": "Failed to stop",
    "saveConfigFailed": "Failed to save Web service settings",
    "open": "Open",
    "hide": "Hide",
    "show": "Show",
    "copy": "Copy",
    "qrcode": "QR Code",
    "qrcodeTitle": "Scan to Open",
    "qrcodeHint": "Scan with your phone to open Codeg in a browser",
    "addressLabel": "Access Address",
    "tokenLabel": "Access Token",
    "tokenHint": "Enter this token when accessing the Web client for the first time",
    "tokenPlaceholder": "Leave empty to auto-generate",
    "regenerate": "Regenerate",
    "stalePortOccupiedTitle": "Port {port} is held by another process",
    "stalePortUnknownTitle": "Port {port} status is unclear",
    "stalePortHint": "Codeg can't bind here until the port is released. Change the port above, or close the process holding it.",
    "errors": {
      "alreadyRunning": "Web service is already running",
      "invalidAddress": "Invalid host or port format",
      "portInUse": "Port {port} is already in use. Close the process using it or choose another port.",
      "permissionDenied": "Permission denied. Try a port above 1024 or run with higher privileges.",
      "addressUnavailable": "The address is not available on this machine",
      "bindFailed": "Failed to bind address"
    }
  },
  "DirectoryBrowser": {
    "title": "Browse Directory",
    "pathPlaceholder": "Enter directory path...",
    "goHome": "Go to home directory",
    "navigateUp": "Go to parent directory",
    "select": "Select",
    "cancel": "Cancel",
    "loading": "Loading...",
    "emptyDirectory": "This directory is empty",
    "errorLoadingDir": "Failed to load directory",
    "permissionDenied": "Permission denied"
  },
  "ServerFileBrowser": {
    "title": "Pick server file",
    "pathPlaceholder": "Enter directory path...",
    "goHome": "Go to home directory",
    "navigateUp": "Go to parent directory",
    "select": "Select",
    "cancel": "Cancel",
    "loading": "Loading...",
    "emptyDirectory": "This directory is empty",
    "errorLoadingDir": "Failed to load directory",
    "selectedCount": "{count} selected"
  },
  "ChatChannelSettings": {
    "loading": "Loading...",
    "sectionTitle": "Chat Channels",
    "sectionDescription": "Configure IM bots to receive event notifications and query coding activity.",
    "addChannel": "Add Channel",
    "noChannels": "No chat channels configured yet.",
    "channelName": "Name",
    "channelNamePlaceholder": "My Telegram Bot",
    "channelType": "Channel Type",
    "lark": "Lark (Feishu)",
    "weixin": "WeChat",
    "dailyReport": "Daily Report",
    "dailyReportTime": "Report Time",
    "nameRequired": "Channel name is required.",
    "tokenRequired": "Token is required.",
    "chatIdRequired": "Chat ID is required.",
    "loadFailed": "Failed to load channels.",
    "saveFailed": "Failed to save changes.",
    "connectSuccess": "Channel connected.",
    "connectFailed": "Failed to connect",
    "disconnectSuccess": "Channel disconnected.",
    "disconnectFailed": "Failed to disconnect.",
    "testSuccess": "Connection test passed.",
    "testFailed": "Connection test failed",
    "deleteSuccess": "Channel deleted.",
    "deleteFailed": "Failed to delete channel.",
    "deleteConfirmTitle": "Delete Channel",
    "deleteConfirmMessage": "This will permanently delete the channel and its message logs. Are you sure?",
    "cancel": "Cancel",
    "delete": "Delete",
    "create": "Create",
    "save": "Save",
    "channelListTitle": "Configured Channels",
    "channelListDescription": "Enabled channels will auto-connect when the service starts.",
    "editChannel": "Edit Channel",
    "editSuccess": "Channel updated.",
    "tokenPlaceholderKeep": "Leave blank to keep current",
    "weixinScanTitle": "Scan QR Code",
    "weixinScanDescription": "Open WeChat and scan the QR code to connect.",
    "weixinQrcodeExpired": "QR code expired.",
    "weixinRefreshQrcode": "Refresh",
    "weixinWaitingScan": "Waiting for scan...",
    "weixinPollError": "Connection unstable, retrying...",
    "weixinReconnectNotice": "Due to iLink protocol limitations, after each reconnection you must send a message to the bot before event triggers take effect.",
    "connect": "Connect",
    "disconnect": "Disconnect",
    "test": "Test Connection",
    "tabs": {
      "channels": "Channels",
      "commands": "Commands",
      "events": "Events",
      "other": "Other"
    },
    "commands": {
      "title": "Built-in Commands",
      "description": "Bot commands available in chat channels. In group chats, @Bot is required to process messages.",
      "prefixLabel": "Command Prefix",
      "prefixDescription": "1-3 non-alphanumeric characters used to trigger bot commands (default /).",
      "prefixSaved": "Command prefix saved.",
      "prefixSaveFailed": "Failed to save command prefix.",
      "prefixInvalid": "Prefix must be 1-3 non-alphanumeric characters.",
      "save": "Save",
      "folderDesc": "Select working folder",
      "agentDesc": "Select AI agent",
      "taskDesc": "Create session and run task",
      "sessionsDesc": "List active sessions in folder",
      "resumeDesc": "Recent conversations / resume a session",
      "cancelDesc": "Cancel current task",
      "approveDesc": "Approve agent permission request",
      "denyDesc": "Deny agent permission request",
      "searchDesc": "Search conversations by keyword",
      "todayDesc": "Today's activity summary",
      "statusDesc": "Channel connection status",
      "helpDesc": "Show help message"
    },
    "events": {
      "title": "Event Notifications",
      "description": "When enabled, triggered events will be pushed to the channel.",
      "turnComplete": "Turn Complete",
      "turnCompleteDesc": "When an agent turn ends",
      "error": "Agent Error",
      "errorDesc": "When an agent encounters an error",
      "permissionRequest": "Permission Request",
      "permissionRequestDesc": "When an agent requests permission to act",
      "questionRequest": "Agent Question",
      "questionRequestDesc": "When an agent asks you a question",
      "userPromptSent": "User Message",
      "userPromptSentDesc": "When you send a message — the message text is included in the notification",
      "saved": "Event filter updated.",
      "saveFailed": "Failed to save event filter.",
      "loadFailed": "Failed to load settings.",
      "retry": "Retry",
      "webhooksTitle": "Webhooks",
      "webhooksDescription": "POST a JSON payload to one or more URLs when an enabled event fires. The event filter above also applies to webhooks.",
      "webhookUrlPlaceholder": "https://example.com/webhook",
      "addWebhook": "Add Webhook",
      "removeWebhook": "Remove webhook",
      "webhookSave": "Save",
      "webhooksSaved": "Webhooks saved.",
      "webhooksSaveFailed": "Failed to save webhooks.",
      "webhookInvalidUrl": "Enter valid http(s) URLs.",
      "docsTitle": "Request Format",
      "docsMethod": "Method",
      "docsContentType": "Content-Type",
      "docsNote": "Each enabled event is delivered to every URL. Webhooks are not debounced; the event filter above still applies.",
      "editWebhook": "Edit Webhook",
      "enableWebhook": "Enable webhook",
      "webhookDuplicate": "This URL is already configured.",
      "cancel": "Cancel",
      "webhooksEmpty": "No webhooks configured yet.",
      "deleteWebhookTitle": "Delete Webhook",
      "deleteWebhookMessage": "Remove this webhook? Events will no longer be delivered to this URL.",
      "delete": "Delete"
    },
    "language": {
      "title": "Message Language",
      "description": "Language used for event notifications, command responses, and daily reports sent to chat channels.",
      "saved": "Message language saved.",
      "saveFailed": "Failed to save message language.",
      "en": "English",
      "zh-cn": "Simplified Chinese",
      "zh-tw": "Traditional Chinese",
      "ja": "Japanese",
      "ko": "Korean",
      "es": "Spanish",
      "de": "German",
      "fr": "French",
      "pt": "Portuguese",
      "ar": "Arabic"
    }
  },
  "ModelProviderSettings": {
    "sectionTitle": "Model Providers",
    "sectionDescription": "Manage API provider credentials for agents.",
    "filterAll": "All",
    "providerListTitle": "Configured Providers",
    "addProvider": "Add Provider",
    "editProvider": "Edit Provider",
    "noProviders": "No model providers configured yet.",
    "providerName": "Name",
    "providerNamePlaceholder": "e.g. OpenAI, Anthropic",
    "apiUrl": "API URL",
    "apiUrlPlaceholder": "https://api.openai.com/v1",
    "apiKey": "API Key",
    "apiKeyPlaceholder": "sk-...",
    "apiKeyKeepCurrent": "Leave blank to keep current",
    "agentTypes": "Agent Types",
    "agentTypesRequired": "At least one agent type is required.",
    "agentType": "Agent Type",
    "agentTypeRequired": "Agent type is required.",
    "agentTypeImmutableHint": "Agent type cannot be changed after creation.",
    "model": "Model",
    "modelPlaceholderCodex": "gpt-5 / gpt-5-mini",
    "modelPlaceholderGemini": "gemini-3-pro-preview",
    "claudeMainModel": "Main Model",
    "claudeReasoningModel": "Reasoning Model (thinking)",
    "claudeHaikuDefaultModel": "Default Haiku Model",
    "claudeSonnetDefaultModel": "Default Sonnet Model",
    "claudeOpusDefaultModel": "Default Opus Model",
    "nameRequired": "Provider name is required.",
    "apiUrlRequired": "API URL is required.",
    "apiKeyRequired": "API Key is required.",
    "loadFailed": "Failed to load providers.",
    "saveFailed": "Failed to save changes.",
    "createSuccess": "Provider created.",
    "editSuccess": "Provider updated.",
    "deleteSuccess": "Provider deleted.",
    "deleteConfirmTitle": "Delete Provider",
    "deleteConfirmMessage": "This will permanently delete the provider \"{name}\". Are you sure?",
    "deleteBlockedByAgent": "{agents} is currently using this provider. Please unlink before deleting.",
    "cancel": "Cancel",
    "delete": "Delete",
    "create": "Create",
    "save": "Save",
    "affectedRunningSessions": "{count, plural, one {# running session needs to reconnect to apply the change} other {# running sessions need to reconnect to apply the change}}"
  },
  "ExpertsSettings": {
    "title": "Expert Skills",
    "description": "Enable curated, battle-tested skill workflows for your AI coding agents. Each expert is a standalone skill from the superpowers project — codeg manages the central copy and links it into the agents you choose.",
    "loading": "Loading experts…",
    "loadingContent": "Loading content…",
    "emptyExperts": "No experts available. Check the application logs.",
    "emptySelection": "Select an expert to see its content and manage activation.",
    "emptySearch": "No experts match the current search.",
    "searchPlaceholder": "Search experts by name, id, or description",
    "enableForAgents": "Enable for agents",
    "noAgents": "No ACP agents detected.",
    "copyModeWarning": "Copied (not linked). Re-enable after codeg updates to get the latest version.",
    "previewTitle": "SKILL.md preview",
    "categories": {
      "discovery": "Discovery & Design",
      "planning": "Planning",
      "execution": "Execution",
      "quality": "Quality & Testing",
      "debugging": "Debugging",
      "review": "Review & Integration",
      "meta": "Meta"
    },
    "states": {
      "not_linked": "Not enabled",
      "linked_to_codeg": "Enabled",
      "linked_elsewhere": "Blocked — another link exists",
      "blocked_by_real_directory": "Blocked — a custom skill occupies this name",
      "broken": "Broken link"
    },
    "badges": {
      "userModified": "User modified"
    },
    "actions": {
      "openCentralDir": "Open central folder",
      "refresh": "Refresh"
    },
    "toasts": {
      "loadFailed": "Failed to load expert details",
      "enabled": "Expert enabled for this agent",
      "disabled": "Expert disabled for this agent",
      "enableFailed": "Failed to enable expert",
      "disableFailed": "Failed to disable expert",
      "openFolderFailed": "Failed to open folder"
    }
  },
  "QuickMessagesSettings": {
    "title": "Quick Messages",
    "description": "Manage reusable message snippets. Drag to reorder.",
    "loading": "Loading quick messages…",
    "emptyList": "No quick messages yet. Click \"New\" to create one.",
    "emptySelection": "Select a quick message to edit.",
    "searchPlaceholder": "Search by title or content",
    "untitled": "Untitled",
    "actions": {
      "new": "New",
      "save": "Save",
      "delete": "Delete",
      "dragSort": "Drag to reorder",
      "dragSortMessage": "Drag to reorder quick message: {name}"
    },
    "fields": {
      "title": "Title",
      "titlePlaceholder": "Give this message a short title",
      "content": "Content",
      "contentPlaceholder": "Write the message content here"
    },
    "confirmDelete": {
      "title": "Delete quick message?",
      "message": "This will permanently delete \"{name}\". Are you sure?",
      "cancel": "Cancel",
      "confirm": "Delete"
    },
    "toasts": {
      "loadFailed": "Failed to load quick messages",
      "createFailed": "Failed to create quick message",
      "saveFailed": "Failed to save quick message",
      "deleteFailed": "Failed to delete quick message",
      "saveOrderFailed": "Failed to save order",
      "created": "Quick message created",
      "saved": "Quick message saved",
      "deleted": "Quick message deleted"
    }
  },
  "Pet": {
    "badge": {
      "running": "{count} running",
      "waiting": "{count} awaiting approval",
      "error": "{count} errored"
    },
    "panel": {
      "title": "Active sessions",
      "empty": "No active sessions",
      "emptyHint": "Running agents and ones that need you appear here.",
      "statusRunning": "Running",
      "statusWaiting": "Waiting",
      "statusError": "Error"
    },
    "menu": {
      "scale": "Scale",
      "openManager": "Manage pets",
      "close": "Close"
    },
    "loadError": "Failed to load pet",
    "missingPetIdParam": "No pet selected",
    "summonButton": "Pet",
    "manager": {
      "title": "Pets",
      "description": "Floating desktop companions powered by Codex-compatible sprite sheets.",
      "addPet": "Add pet",
      "importFromCodex": "Import from Codex",
      "noPets": "No pets yet. Add one or import from Codex.",
      "setActive": "Set active",
      "active": "Active",
      "edit": "Edit",
      "delete": "Delete",
      "deleteConfirm": "Delete pet \"{name}\"? It will be removed from disk.",
      "summon": "Summon pet window",
      "openCodexHelp": "Codex pets must be installed under ~/.codex/pets/. None found.",
      "specRequirement": "Spritesheet must be 1536x1872 PNG or WebP with transparency.",
      "form": {
        "id": "Pet ID",
        "idHelp": "Lowercase letters, digits, '-' and '_'. Max 64 chars.",
        "displayName": "Display name",
        "description": "Description (optional)",
        "spritesheet": "Spritesheet",
        "chooseFile": "Choose file",
        "replaceFile": "Replace spritesheet",
        "saveCreate": "Add pet",
        "saveUpdate": "Save changes",
        "cancel": "Cancel"
      },
      "errors": {
        "missingId": "Pet id is required",
        "missingName": "Display name is required",
        "missingSpritesheet": "Spritesheet is required",
        "addFailed": "Failed to add pet",
        "updateFailed": "Failed to update pet",
        "deleteFailed": "Failed to delete pet",
        "loadFailed": "Failed to load pets",
        "setActiveFailed": "Failed to set active pet",
        "summonFailed": "Failed to summon pet window"
      }
    },
    "import": {
      "title": "Import from Codex",
      "subtitle": "These pets are available under ~/.codex/pets/.",
      "selectAll": "Select all",
      "alreadyImported": "Already imported",
      "renameOnConflict": "Rename conflicts with -imported suffix",
      "import": "Import selected",
      "noneFound": "No importable Codex pets found.",
      "imported": "Imported successfully",
      "failed": "Import failed",
      "close": "Close"
    },
    "marketplace": {
      "openMarketplace": "Pet marketplace",
      "title": "Pet marketplace",
      "search": "Search pets",
      "kindFilter": {
        "all": "All",
        "object": "Object",
        "animal": "Animal",
        "person": "Person",
        "creature": "Creature"
      },
      "sortFilter": {
        "latest": "Latest",
        "popular": "Popular",
        "views": "Most viewed"
      },
      "refresh": "Refresh",
      "install": "Install",
      "installing": "Installing",
      "reinstall": "Reinstall",
      "reinstallConfirm": "Replace local pet \"{name}\"? Existing data will be overwritten.",
      "cancel": "Cancel",
      "stats": {
        "views": "Views",
        "downloads": "Downloads",
        "likes": "Likes"
      },
      "actions": {
        "idle": "Idle",
        "running_right": "Run right",
        "running_left": "Run left",
        "waving": "Wave",
        "jumping": "Jump",
        "failed": "Fail",
        "waiting": "Wait",
        "running": "Run",
        "review": "Review"
      },
      "page": "Page {page} of {total}",
      "prev": "Previous",
      "next": "Next",
      "empty": "No pets match this filter.",
      "successInstalled": "Installed \"{name}\"",
      "errors": {
        "loadFailed": "Failed to load marketplace",
        "installFailed": "Failed to install pet",
        "alreadyInstalled": "Pet already exists locally"
      }
    }
  },
  "RemoteWorkspace": {
    "openRemoteWorkspace": "Open remote workspace",
    "manage": "Manage remote workspace",
    "manageTitle": "Remote Workspace connections",
    "empty": "No remote connections",
    "searchPlaceholder": "Search remote workspaces",
    "orderFailed": "Failed to save remote workspace order",
    "dragSort": "Drag to sort",
    "dragSortConnection": "Drag to sort {name}",
    "newConnection": "New connection",
    "loading": "Loading",
    "loadingConnection": "Loading remote connection",
    "name": "Name",
    "baseUrl": "Service URL",
    "token": "Access token",
    "save": "Save",
    "delete": "Delete",
    "confirmDelete": {
      "title": "Delete remote connection?",
      "message": "This will remove \"{name}\" from this device. This action cannot be undone.",
      "cancel": "Cancel",
      "confirm": "Delete"
    },
    "saved": "Remote connection saved.",
    "deleted": "Remote connection deleted.",
    "loadFailed": "Failed to load remote connections",
    "saveFailed": "Failed to save remote connection",
    "deleteFailed": "Failed to delete remote connection",
    "openFailed": "Failed to open remote workspace",
    "connectionLoadFailed": "Failed to load remote connection: {message}",
    "connectionExpired": "Remote connection \"{name}\" is expired. Update its token and reload this window."
  },
  "BackupSettings": {
    "title": "Backup & Restore",
    "description": "Export a portable backup of your codeg data, or restore from one.",
    "tabs": {
      "backup": "Backup",
      "restore": "Restore"
    },
    "export": {
      "includeExternal": "Include conversation content",
      "includeExternalHint": "Also archive agent CLI transcripts (Claude, Codex, Gemini, …). Increases size.",
      "passphrase": "Passphrase (optional)",
      "passphrasePlaceholder": "Leave empty for an unencrypted archive",
      "passphraseConfirm": "Confirm passphrase",
      "passphraseMismatch": "Passphrases do not match.",
      "noPassphraseWarning": "This backup will contain secrets (API keys, tokens) in plaintext. Store it somewhere safe.",
      "passphraseLossWarning": "Encrypted with this passphrase. If you lose it, the backup cannot be recovered.",
      "button": "Export backup",
      "inProgress": "Creating backup…",
      "success": "Backup created.",
      "started": "Backup download started."
    },
    "restore": {
      "selectFile": "Select backup file",
      "passphrasePrompt": "This backup is encrypted. Enter its passphrase.",
      "unlock": "Unlock",
      "preview": {
        "title": "Backup details",
        "encrypted": "Encrypted",
        "compatible": "Compatible",
        "incompatible": "Incompatible",
        "createdAt": "Created: {value}",
        "appVersion": "App version: {value}",
        "incompatibleHint": "This backup was created by a newer version of codeg and cannot be restored."
      },
      "replaceWarning": "Restoring replaces all current codeg data (database and uploads). Your current data is snapshotted first so it can be recovered.",
      "keyringNote": "Desktop GitHub/chat tokens live in your OS keychain and are not included; re-enter them after restoring.",
      "button": "Restore",
      "staging": "Preparing restore…",
      "staged": "Restore staged. Restarting…",
      "restarting": "Restore staged. Restarting the server…",
      "restartTimeout": "The server did not come back in time. Reload the page once it is up.",
      "externalSideLocation": "Conversation transcripts were restored to {path}",
      "confirmTitle": "Replace all data?",
      "confirmBody": "This will replace your current codeg database and uploads with the backup, then restart. Your current data is snapshotted first.",
      "cancel": "Cancel",
      "confirmAction": "Replace & restart",
      "external": {
        "title": "Conversation content",
        "hint": "This backup includes agent CLI transcripts. Choose where to restore them.",
        "modeSkip": "Don't restore",
        "modeSide": "Restore to a safe side folder",
        "modeOriginal": "Restore to original CLI locations",
        "forceOverwrite": "Overwrite existing files",
        "forceOverwriteHint": "Replace files that already exist in the agent CLI folders.",
        "scanning": "Checking for conflicts…",
        "noConflicts": "No existing files would be overwritten.",
        "conflictCount": "{count} existing file(s) would be affected.",
        "conflictSkipNote": "Existing files are kept (skipped) unless you enable overwrite."
      },
      "restartFailed": "Restore staged, but the server couldn't restart. Restart it manually to apply the restore."
    },
    "remoteUnsupported": "Backup & restore acts on the data of the machine running codeg. You're connected to a remote workspace — manage its backups from that server directly."
  },
  "backup": {
    "restore": {
      "error": {
        "badPassphrase": "Incorrect passphrase or corrupted backup.",
        "corrupted": "The backup archive is corrupted.",
        "unknownFormat": "This file is not a recognized codeg backup.",
        "newerVersion": "This backup was created by codeg {backupVersion}, newer than this version ({appVersion}).",
        "alreadyPending": "A restore is already staged. Restart to apply it before staging another."
      }
    },
    "error": {
      "diskSpace": "Not enough disk space to complete the operation.",
      "cancelled": "The operation was cancelled."
    }
  },
  "WebConnection": {
    "disconnectedTitle": "Connection lost",
    "reconnectingDescription": "Trying to reconnect to the server. This usually recovers on its own within a few seconds.",
    "reconnectNow": "Reconnect now",
    "sessionExpiredTitle": "Session expired",
    "sessionExpiredDescription": "Your session is no longer valid. Please sign in again to continue.",
    "goToLogin": "Go to login"
  },
  "SessionFeedbackSettings": {
    "title": "Live Feedback",
    "description": "Send notes and corrections to an agent while it's working. When enabled, the agent gets a tool to check for your mid-task feedback, and conversations show a note input. Tip: agents typically only check for feedback when you mention it in your prompt — for example, add \"check my live feedback regularly\" to your message so the agent knows to look.",
    "enable": "Enable live feedback",
    "enableHint": "Adds a check-for-feedback tool to agents started after this is turned on.",
    "save": "Save",
    "saving": "Saving…",
    "saved": "Feedback settings saved",
    "saveFailed": "Failed to save feedback settings",
    "loadFailed": "Failed to load: {detail}"
  },
  "LiveFeedback": {
    "placeholder": "Send a note to {agent} while it works…",
    "agentFallback": "the agent",
    "ariaLabel": "Live feedback note",
    "dialogTitle": "Live feedback",
    "dialogDescription": "Send a note to the agent while it works. It reads your note the next time it checks — without interrupting the current step.",
    "send": "Send",
    "cancel": "Cancel",
    "pending": "waiting",
    "delivered": "received",
    "turnEndedUnread": "The agent finished before reading your feedback.",
    "sendAsMessage": "Send as message",
    "dismiss": "Dismiss",
    "turnEndedResent": "The turn ended — sent as a new message instead.",
    "turnEnded": "The turn already ended.",
    "submitFailed": "Couldn't send your note"
  },
  "AskQuestionSettings": {
    "title": "Ask user question",
    "description": "Let agents pause and ask you a multiple-choice question that appears above the conversation input box. The agent waits until you answer (or skip).",
    "enable": "Enable ask user question",
    "enableHint": "Adds the ask_user_question tool to agents started after this is turned on.",
    "save": "Save",
    "saving": "Saving…",
    "saved": "Question settings saved",
    "saveFailed": "Failed to save question settings",
    "loadFailed": "Failed to load: {detail}"
  }
}
