{
  "common": {
    "save": "Salvar",
    "reset": "Redefinir",
    "cancel": "Cancelar",
    "confirm": "Confirmar",
    "delete": "Excluir",
    "edit": "Editar",
    "create": "Criar",
    "upload": "Enviar",
    "download": "Baixar",
    "refresh": "Atualizar",
    "search": "Pesquisar",
    "enable": "Ativar",
    "disable": "Desativar",
    "enabled": "Ativado",
    "disabled": "Desativado",
    "preview": "Visualizar",
    "view": "Visualizar",
    "content": "Conteudo",
    "loading": "Carregando...",
    "copy": "Copiar",
    "copied": "Copiado para a area de transferencia",
    "copyFailed": "Falha ao copiar para a area de transferencia",
    "contentPlaceholder": "Digite o conteudo...",
    "help": "Ajuda",
    "close": "Fechar",
    "actions": "Acoes",
    "total": "Total {{count}}",
    "clear": "Limpar",
    "paste": "Colar",
    "yes": "Sim",
    "no": "Nao"
  },
  "desktop": {
    "closeWindow": {
      "title": "Fechar Janela",
      "description": "O que deseja fazer ao fechar a janela? Sair do aplicativo interrompe todas as tarefas em execução e tarefas agendadas.",
      "remember": "Lembrar minha escolha",
      "showWindow": "Mostrar janela",
      "minimizeToTray": "Minimizar para a bandeja",
      "quitApp": "Sair do aplicativo",
      "preference": "Fechar Janela",
      "askEveryTime": "Perguntar sempre"
    }
  },
  "chunkError": {
    "title": "Falha ao carregar pagina",
    "subTitle": "This may be caused by a network issue or an application update.",
    "genericTitle": "Algo deu errado",
    "genericSubTitle": "An unexpected error occurred while rendering this page.",
    "reload": "Recarregar"
  },
  "nav": {
    "chat": "Chat",
    "control": "Controle",
    "channels": "Canais",
    "sessions": "Sessoes",
    "cronJobs": "Tarefas Cron",
    "heartbeat": "Heartbeat",
    "agent": "Workspace",
    "workspace": "Arquivos",
    "skills": "Skills",
    "skillPool": "Pool de Skills",
    "tools": "Ferramentas",
    "mcp": "MCP",
    "acp": "ACP",
    "agentConfig": "Configuracao",
    "agents": "Gerenciamento de Agentes",
    "settings": "Configuracoes",
    "models": "Modelos",
    "environments": "Environments",
    "security": "Seguranca",
    "tokenUsage": "Uso de Tokens",
    "agentStats": "Estatisticas dos Agentes",
    "voiceTranscription": "Transcricao de Voz",
    "debug": "Depuracao",
    "plugins": "Plugins",
    "backups": "Backups",
    "pluginManager": "Gerenciador de Plugins"
  },
  "debug": {
    "title": "Depuracao",
    "desc": "View the backend daemon log file to help diagnose issues. Logs refresh automatically while this page is open.",
    "level": {
      "all": "Todos"
    },
    "backend": {
      "title": "Logs do backend",
      "autoRefresh": "Atualizacao automatica",
      "newestFirst": "Mais recentes primeiro",
      "updatedAt": "Atualizado em",
      "path": "Arquivo de log",
      "notFound": "Backend log file was not found yet.",
      "placeholder": "Backend log output will appear here.",
      "loadFailed": "Falha ao load Backend Logs",
      "searchPlaceholder": "Pesquisar logs do backend..."
    },
    "actions": {
      "refreshBackend": "Atualizar logs do backend",
      "refreshSuccess": "Logs atualizados",
      "copyBackend": "Copiar logs do backend"
    }
  },
  "acp": {
    "title": "ACP",
    "loading": "Carregando configuracao ACP...",
    "builtin": "Integrado",
    "custom": "Personalizado",
    "create": "Adicionar Personalizado Agente",
    "createTitle": "Criar ACP Agente",
    "createSuccess": "Agente ACP criado",
    "editTitle": "Editar ACP Configuracao",
    "agentKey": "Chave do Agente",
    "agentKeyRequired": "Digite a chave do agente",
    "agentKeyInvalid": "A chave pode conter apenas letras, numeros, sublinhados e hifens",
    "agentKeyExists": "Esta chave de agente ja existe",
    "enabled": "Ativado",
    "command": "Command",
    "commandRequired": "Digite um comando",
    "args": "Arguments",
    "argsHelp": "Um argumento por linha",
    "env": "Variaveis de Ambiente",
    "envHelp": "Use o formato CHAVE=VALOR em cada linha",
    "envInvalidLine": "Formato de variavel de ambiente invalido: {{line}}",
    "trusted": "Trusted",
    "toolParseMode": "Modo de Parse de Ferramentas",
    "toolParseModeRequired": "Selecione um modo de parse",
    "stdioBufferLimit": "Limite do Buffer Stdio",
    "stdioBufferLimitHelp": "Tamanho maximo do buffer de linha stdio para o subprocesso ACP em bytes.",
    "stdioBufferLimitRequired": "Digite o limite do buffer stdio",
    "stdioBufferLimitMin": "O limite deve ser de pelo menos 1 byte",
    "docs": "Documentacao de Setup",
    "docsHelp": "Abrir a documentacao ACP e ir para a secao de configuracao de runners externos",
    "notSet": "Nao definido",
    "configSaved": "Configuracao ACP salva",
    "configFailed": "Falha ao salvar configuracao ACP",
    "deleteTitle": "Excluir {{name}}",
    "deleteConfirm": "Excluir este agente ACP? Esta acao nao pode ser desfeita.",
    "deleteSuccess": "Agente ACP excluido",
    "deleteFailed": "Falha ao excluir agente ACP",
    "nodeSettings": "Configuracoes do Node",
    "nodePath": "Caminho do Node",
    "chooseOtherNode": "Escolher outro Node...",
    "selectNodePath": "Selecionar caminho do Node",
    "nodePathPrompt": "Informe o caminho do executavel node",
    "nodeSaved": "Configuracoes do Node salvas",
    "nodeLoadFailed": "Falha ao carregar configuracoes do Node",
    "nodeSaveFailed": "Caminho do Node indisponivel",
    "nodeRuntime": {
      "bundled": "Node embutido",
      "system": "Node do sistema",
      "custom": "Node personalizado"
    },
    "nodeRuntimeReason": {
      "systemNodeMissing": "Node do sistema nao detectado",
      "nodeMissing": "Caminho do Node nao existe",
      "npxMissing": "npx nao encontrado",
      "versionCheckFailed": "Falha na verificacao de versao",
      "unavailable": "Indisponivel"
    }
  },
  "voiceTranscription": {
    "title": "Transcricao de Voz",
    "description": "Configure como mensagens de audio e voz recebidas sao processadas.",
    "saveSuccess": "Modo de audio salvo",
    "saveFailed": "Falha ao salvar modo de audio",
    "audioModeLabel": "Modo de Audio",
    "audioModeDescription": "Escolha como mensagens de voz dos canais (Discord, Telegram, etc.) sao processadas antes de serem enviadas ao modelo.",
    "modeAuto": "Auto (Recomendado)",
    "modeAutoDesc": "Transcribe audio to text using the selected transcription provider, then send the text to the model. If transcription is unavailable or disabled, a file-uploaded placeholder is shown instead. Audio is never sent directly to the model in this mode. Works with all models.",
    "modeNative": "Audio Nativo",
    "modeNativeDesc": "Send the audio file directly to the model without transcription. This is the only mode that sends audio to the model. Only works with specific audio-capable models (e.g. gpt-4o-audio). Most models do not support this and will reject the message.",
    "ffmpegReady": "ffmpeg is installed. Audio conversion is available for native mode.",
    "ffmpegMissing": "ffmpeg is not installed.",
    "ffmpegMissingDesc": "Native audio mode requires ffmpeg to convert audio formats (e.g. .ogg to .wav). Install ffmpeg as a system package to enable this mode.",
    "providerTypeLabel": "Provedor de Transcricao",
    "providerTypeDescription": "Choose the transcription backend. Select Disabled if you do not need voice transcription.",
    "providerTypeDisabled": "Desativado",
    "providerTypeDisabledDesc": "No transcription. Voice messages will show a file-uploaded placeholder.",
    "providerTypeWhisperApi": "Whisper API",
    "providerTypeWhisperApiDesc": "Use an OpenAI-compatible Whisper API endpoint from a configured provider (e.g. OpenAI, Ollama).",
    "providerTypeLocalWhisper": "Local Whisper",
    "providerTypeLocalWhisperDesc": "Run transcription locally using the openai-whisper Python library. Requires both ffmpeg and openai-whisper to be installed.",
    "localWhisperReady": "Local Whisper is ready. Both ffmpeg and openai-whisper are installed.",
    "localWhisperMissing": "Local Whisper is not ready. Missing dependencies must be installed.",
    "localWhisperMissingDesc": "ffmpeg: {{ffmpeg}} | openai-whisper: {{whisper}}. Install missing dependencies: ffmpeg (system package) and openai-whisper (uv pip install openai-whisper, or install QwenPaw with the [whisper] extra).",
    "providerLabel": "Whisper API Provedor",
    "providerDescription": "Select which provider to use for audio transcription via the Whisper API. Only providers with a Whisper-compatible endpoint are shown.",
    "providerPlaceholder": "Selecionar a provider...",
    "noProvidersWarning": "No transcription-capable providers found. Configure an OpenAI provider to enable voice transcription.",
    "transcriptionInfoTitle": "How transcription works",
    "transcriptionInfoDesc": "Whisper API transcription uses an OpenAI-compatible /v1/audio/transcriptions endpoint. This requires a configured provider with a Whisper-compatible endpoint — for example, an OpenAI provider. Select a specific provider above to enable transcription.",
    "transcriptionInfoDescLocal": "Local Whisper transcription runs the openai-whisper library directly on your machine. It requires both ffmpeg (for audio decoding) and the openai-whisper Python package to be installed. No API key or network connection is needed. Install with: uv pip install 'qwenpaw[whisper]'."
  },
  "backup": {
    "title": "Backups",
    "description": "Backup and restore agent workspaces and configurations.",
    "create": "Criar Backup",
    "import": "Importar",
    "export": "Exportar",
    "restore": "Restore",
    "delete": "Excluir",
    "batchDelete": "Excluir Selecionado",
    "batchDeleteConfirm": "Are you sure you want to delete {{count}} backup(s)? This action cannot be undone.",
    "deleteConfirm": "Are you sure you want to delete this backup? This action cannot be undone.",
    "name": "Nome",
    "createdAt": "Criado",
    "scopeSummary": "Escopo",
    "descriptionLabel": "Descricao",
    "noBackups": "No backups yet. Create one to backup your current configuration.",
    "loadFailed": "Falhou to load Backups",
    "createTitle": "Criar Backup",
    "backupMode": "Backup Modo",
    "fullBackup": "Full Backup",
    "fullBackupDesc": "Backup everything including all agent workspaces, global settings, skill pool, and secrets",
    "customBackup": "Personalizado Backup",
    "partialBackup": "Partial Backup",
    "partialBackupDesc": "Customize what to backup",
    "nameRequired": "Backup Nome is Obrigatorio",
    "namePlaceholder": "Enter backup Nome",
    "descriptionPlaceholder": "Opcional description...",
    "scopeAgents": "Agente Workspaces",
    "scopeGlobalConfig": "Global Configuracoes",
    "scopeSkillPool": "Pool de Skills",
    "scopeSecrets": "Secrets",
    "scopeSecretsHint": "Includes model provider secrets (API keys), environment variables, and other sensitive information",
    "securityNotice": "This backup may contain sensitive credentials. Agent workspaces include channel credentials (bot tokens, app secrets, etc.), and model provider secrets include API keys. Do not share backup files with others.",
    "searchPlaceholder": "Search backups by name or ID...",
    "total": "Total {{count}}",
    "agentsPlaceholder": "Select agent workspaces (leave empty for all)",
    "selectAll": "Selecionar Todos",
    "deselectAll": "Deselect Todos",
    "createSuccess": "Backup Criado successfully",
    "createFailed": "Falhou to Criar backup",
    "restoreTitle": "Restore Backup",
    "restoreScope": "Restore Escopo",
    "restoreFullWarning": "Full restore will completely replace all contents of the current instance (including all agents, global config, skill pool, and secrets). This action cannot be undone. Related features will be unavailable during restore. Please restart the service after restoration is complete.",
    "agentGroupExisting": "Existing",
    "agentGroupNew": "Novo",
    "agentExists": "Exists",
    "agentNew": "Novo",
    "agentActionReplace": "Overwrite",
    "agentActionAdd": "Novo",
    "agentColumnName": "Agente",
    "agentColumnWorkspace": "Workspace",
    "agentTotal": "{{count}} Agentes total",
    "noAgentsInBackup": "No agent workspaces in this backup",
    "loadingAgents": "Carregando Agente list...",
    "agentSearchPlaceholder": "Search by name or ID...",
    "agentSearchTotal": "{{count}} of {{total}} Agentes",
    "restoreCustomSummary": "{{existing}} existing · {{added}} new selected",
    "defaultWorkspaceDirUnused": "Nao Novo Agentes Selecionado",
    "otherOptions": "Other Options",
    "defaultWorkspaceDirDefault": "<Default path>/{{aid}}",
    "restoreWarningModify": "Restoring will modify current configurations. This action cannot be undone.",
    "restoreWarningRestart": "Related features will be unavailable during restore. Please restart the service after restoration is complete.",
    "preRestoreBackupTitle": "Criar Pre-Restore Backup",
    "preRestoreBackupContent": "The restore operation is irreversible. Would you like to create a backup of the current state first? This allows you to rollback if any issues occur during restoration.",
    "preRestoreBackupYes": "Yes, Criar backup first",
    "preRestoreBackupNo": "No, restore directly",
    "preRestoreBackupDesc": "Auto-created backup before restore",
    "preRestoreBackupFailed": "Falha ao Criar pre-restore backup",
    "preRestoreBackupSuccess": "Pre-restore backup created successfully, ID: {{id}}",
    "creatingPreRestoreBackup": "Creating pre-restore backup...",
    "skipAndRestore": "Skip and continue to restore",
    "restoreConfirm": "I confirm that I want to restore this backup",
    "restoreMode": "Restore Modo",
    "restoreModeFull": "Full Restore",
    "restoreModeFullDesc": "Completely replace all contents of the current instance, including all agents, global config, skill pool and secrets",
    "restoreModeCustom": "Personalizado Restore",
    "restoreModeCustomDesc": "Select the contents to restore, such as specific agents, config, etc.; existing agents not included in this restore will be preserved",
    "restoreModeFullDisabled": "Full backup only",
    "defaultWorkspaceDir": "Agente Padrao Workspace Directory",
    "defaultWorkspaceDirPlaceholder": "Leave empty to use ~/.qwenpaw/workspaces",
    "defaultWorkspaceDirHint": "If the agent's original workspace path does not exist, the agent will be saved under <default path>/<agent ID>. If it exists, the agent's original workspace path will be used.",
    "restoreStrategy": "Estratégia de restauração",
    "restoreStrategyPreserve": "Preservar segurança local e MCP",
    "restoreStrategyPreserveDesc": "Mantenha as proteções de segurança e a configuração MCP desta instância.",
    "restoreStrategyRestore": "Restaurar estas configurações do backup",
    "restoreStrategyRestoreDesc": "Use a configuração de segurança e MCP do backup.",
    "restoreSuccess": "Backup restored successfully. Please restart the service.",
    "restoreSuccessPreserved": "Backup restaurado com sucesso. Configurações locais preservadas: {{keys}}. Reinicie o serviço.",
    "restoreSuccessWithBackup": "Backup restored successfully. Pre-restore backup ID: {{preRestoreId}}. Please restart the service.",
    "restoreFailed": "Falhou to restore backup",
    "restoreTargetBusy": "A restauração falhou porque estes diretórios ainda estão em uso. Feche o navegador ou processo que os utiliza e tente novamente. Se continuarem bloqueados, reinicie o sistema e tente de novo.",
    "detailLoadFailed": "Failed to load backup details; restore is unavailable",
    "trustLocalBanner": "Backup local - restauração completa por padrão",
    "trustForeignBanner": "Backup importado - segurança local e MCP são preservados por padrão",
    "trustLegacyBanner": "Backup legado - confirmação de confiança necessária antes da restauração",
    "trustForeignTitle": "Confiar neste backup?",
    "trustLegacyTitle": "Confiar no backup legado?",
    "unknownBackupName": "Arquivo de backup",
    "trustForeignDesc": "Este backup não foi assinado por esta instância. Continue apenas se confiar na origem; as configurações locais de segurança e MCP serão preservadas por padrão ao restaurar.",
    "trustLegacyDesc": "Este backup antigo não tem assinatura local. Continue apenas se confiar na origem; esta instância o assinará antes da restauração.",
    "deleteSuccess": "Backup(s) deleted successfully",
    "deleteFailed": "Falhou to Excluir backup(s)",
    "exportFailed": "Falhou to Exportar backup",
    "exportWarningTitle": "Sensitive Information Aviso",
    "exportWarningContent": "This backup may contain sensitive credential information. Agent workspaces contain channel credentials (such as bot tokens, app secrets, etc.), and model provider secrets contain API Keys. Do not share backup files with others.",
    "exportConfirm": "Confirmar Exportar",
    "importTitle": "Importar Backup",
    "importSuccess": "Backup imported successfully",
    "importFailed": "Falhou to Importar backup",
    "importConflictTitle": "Backup Already Exists",
    "importConflictDesc": "A backup with the same ID already exists. Do you want to overwrite it?",
    "importReplace": "Overwrite",
    "agents": "{{count}} Agent(s)",
    "allAgents": "Todos Agentes",
    "globalConfig": "Global Configuracoes",
    "skillPool": "Pool de Skills",
    "secrets": "Secrets",
    "selected": "{{count}} Selecionado",
    "fileCount": "{{count}} Arquivos",
    "totalSize": "{{size}}",
    "progressStarting": "Starting backup...",
    "progressAgent": "Backing up agent {{index}} / {{total}}...",
    "progressSaving": "Saving backup file...",
    "progressDone": "Backup complete",
    "localModelsNotice": "Backup files do not include local model files. For cross-device migration, you will need to re-download the required local models on the target device."
  },
  "workspace": {
    "title": "Arquivos",
    "workspacePath": "Workspace:",
    "noFiles": "Nao Arquivos",
    "coreFiles": "Core Arquivos",
    "coreFilesDesc": "Bootstrap persona, identity, and tool guidance.",
    "uploadTooltip": "ZIP files only",
    "uploadTooltipWithLimit": "ZIP files only, max {{limit}}MB",
    "selectFile": "Selecione um arquivo para editar",
    "fileContent": "File content...",
    "uploadSuccess": "Arquivo enviado com sucesso",
    "uploadFailed": "Falha ao enviar arquivo",
    "downloadPreparing": "Preparando download do workspace...",
    "downloadSuccess": "Workspace downloaded successfully",
    "downloadFailed": "Workspace Baixar Falhou",
    "zipOnly": "Only .zip files are supported for upload",
    "fileSizeExceeded": "File size exceeds {{limit}}MB limit. Current file: {{size}}MB",
    "systemPromptToggleTooltip": "Enable/disable this file in system prompt",
    "memoryFileWarning": "MEMORY.md is typically queried on-demand by the agent using tools. Loading it into the system prompt may cause the context to become too long.",
    "configUpdated": "System prompt Configuracao Atualizado",
    "configUpdateFailed": "Falha ao Atualizar system prompt Configuracao",
    "attribution": "Workspace design partly inspired by the OpenClaw project — thank you! 🐾",
    "saveSuccess": "Salvo com sucesso",
    "saveFailed": "Falha ao salvar"
  },
  "agent": {
    "parent": "Configuracoes",
    "agents": "Agentes",
    "management": "Gerenciamento de Agentes",
    "pageDescription": "Create, configure, and manage multiple AI agents with custom workspaces and identities.",
    "name": "Nome",
    "id": "ID",
    "description": "Descricao",
    "workspace": "Caminho do Workspace",
    "create": "Criar Agente",
    "createTitle": "Criar Novo Agente",
    "createSuccess": "Agente Criado successfully",
    "createFailed": "Falhou to Criar Agente",
    "edit": "Editar",
    "editTitle": "Editar Agente - {{name}}",
    "updateSuccess": "Agente Atualizado successfully",
    "updateFailed": "Falhou to Atualizar Agente",
    "delete": "Excluir",
    "deleteConfirm": "Confirmar Excluir Agente",
    "deleteConfirmDesc": "Agent will be unavailable after deletion, but workspace files will be kept",
    "deleteSuccess": "Agente deleted successfully",
    "deleteFailed": "Falhou to Excluir Agente",
    "selectAgent": "Selecionar Agente",
    "defaultDisplayName": "Agente Padrao",
    "currentWorkspace": "Agente Atual",
    "switchSuccess": "Agente switched successfully",
    "switchFailed": "Falhou to switch Agente",
    "loadFailed": "Falha ao load Agente list",
    "loadConfigFailed": "Falha ao load Agente Configuracao",
    "saveFailed": "Falhou to Salvar Agente",
    "idRequired": "Please enter Agente ID",
    "idLabel": "Agente ID (optional)",
    "idHelp": "Leave empty to auto-generate. Only letters, digits, hyphens and underscores allowed.",
    "idPattern": "ID can only contain letters, numbers, underscores and hyphens",
    "idPlaceholder": "e.g.: my-agent",
    "nameRequired": "Please enter Agente Nome",
    "namePlaceholder": "e.g.: My Agente",
    "descriptionPlaceholder": "Briefly describe this agent's purpose...",
    "workspaceHelp": "Leave empty to auto-generate in ~/.qwenpaw/workspaces/<id>",
    "dragHandleTooltip": "Drag to reorder Agentes",
    "reorderSuccess": "Agente order saved",
    "reorderFailed": "Falha ao Salvar Agente order",
    "defaultNotEditable": "Default agent cannot be edited",
    "defaultNotDeletable": "Default agent cannot be deleted",
    "disable": "Desativar",
    "enable": "Ativar",
    "disabled": "Desativado",
    "disableConfirm": "Confirmar Desativar Agente",
    "disableConfirmDesc": "The agent instance will not start after disabling, but will remain visible in the list",
    "enableConfirm": "Confirmar Ativar Agente",
    "enableConfirmDesc": "The agent will be available for switching after enabling",
    "disableSuccess": "Agente Desativado successfully",
    "enableSuccess": "Agente Ativado successfully",
    "toggleFailed": "Falha ao toggle Agente state",
    "enableAgent": "Ativar {{name}}",
    "disableAgent": "Desativar {{name}}",
    "disabledAgents": "Desativados ({{count}})",
    "pinnedAgents": "Fixados",
    "otherAgents": "Outros agentes",
    "pinned": "Fixado",
    "defaultPinned": "O agente padrão está sempre fixado",
    "longPressToPin": "Pressione e segure para fixar",
    "longPressToUnpin": "Pressione e segure para desafixar",
    "pinAgent": "Fixar agente",
    "unpinAgent": "Desafixar agente",
    "pinSuccess": "Agente fixado",
    "unpinSuccess": "Agente desafixado",
    "pinFailed": "Falha ao atualizar o estado de fixação",
    "status": {
      "disabled": "Desativado",
      "pending": "Aguardando inicialização",
      "starting": "Inicializando",
      "running": "Em execução",
      "failed": "Falha na inicialização",
      "waitUntilStarted": "Disponível após concluir a inicialização"
    },
    "defaultNotDisablable": "Default agent cannot be disabled",
    "currentAgentDeleted": "Current agent has been deleted, automatically switched to default agent",
    "currentAgentDisabled": "Current agent has been disabled, automatically switched to default agent",
    "switchedToDefault": "Automatically switched to default agent",
    "cannotSwitchToDisabled": "This agent is disabled, please enable it in the management page first",
    "initialSkills": "Initial Skills",
    "initialSkillsHelp": "Select skills to add from the pool. You can add or remove skills later.",
    "selectAll": "Todos",
    "selectBuiltin": "Builtin",
    "selectNone": "Nenhum",
    "noPoolSkills": "No skills available in pool",
    "addSkillsToAgent": "Adicionar Skills",
    "model": "Modelo",
    "modelHelp": "Assign a specific LLM model to this agent. Leave empty to use the global default.",
    "modelPlaceholder": "Use global Padrao",
    "noConfiguredModels": "Nao configured Modelos",
    "modelColumn": "Modelo",
    "copyTooltip": "Copiar configuracao do agente",
    "copyDefaultTooltip": "Copiar usando o agente padrao como modelo",
    "copyTitle": "Copiar Configuracao do Agente",
    "copyNameLabel": "Nome do novo agente",
    "copyOptionsLabel": "Conteudo a copiar",
    "copyOptionAgentJson": "agent.json (obrigatorio)",
    "copyOptionAgentJsonHint": "Sempre copia a configuracao de origem analisada e redefine ID, nome, workspace e channels. Nao e uma copia byte a byte do agent.json no disco.",
    "copyOptionMdFiles": "AGENTS / SOUL / PROFILE / HEARTBEAT / BOOTSTRAP.md",
    "copyOptionSkills": "skills/ + manifest",
    "copyOptionJobs": "jobs.json",
    "copyOptionJobsHint": "Copia apenas as definicoes de tarefas, sem historico. O novo agente as executara conforme o agendamento logo apos a criacao.",
    "copySuccess": "Configuracao do agente copiada com sucesso",
    "copyFailed": "Falha ao copiar a configuracao do agente"
  },
  "skills": {
    "title": "Skills",
    "description": "Manage agent skills and capabilities.",
    "importHub": "Enviar via URL",
    "supportedSources": "Fontes suportadas:",
    "importSkills": "Importar Skill",
    "enterSkillUrl": "Enter Skill URL",
    "supportedSkillUrlSources": "Supported Skill Marketplaces:",
    "urlExamples": "URL examples:",
    "urlValid": "Valid URL from {{source}}",
    "invalidUrl": "Invalid URL",
    "clickToFill": "Click to fill in URL",
    "invalidSkillUrlSource": "Please verify the skill URL is from a supported marketplace",
    "type": "Tipo",
    "installedFrom": "Instalado de",
    "source": "Origem",
    "path": "Caminho",
    "tags": "Tags",
    "builtin": "Integrado",
    "custom": "Personalizado",
    "addSkill": "Adicionar Skill",
    "createSkill": "Criar Skill",
    "viewSkill": "Visualizar Skill",
    "editSkill": "Editar Skill",
    "skillName": "Skill Nome",
    "skillContent": "Skill Conteudo",
    "pleaseInputName": "Please input Skill Nome",
    "pleaseInputContent": "Please input Skill Conteudo",
    "skillNamePlaceholder": "e.g., weather_query",
    "contentPlaceholder": "[Format]\n---\nname: skill_name (required, lowercase with underscores)\ndescription: Brief description (required)\n---\n\nSkill implementation (Markdown format)\n\n[Example]\n---\nname: weather_query\ndescription: Query weather info for a city\n---\n\n## Features\nQuery real-time weather data.\n\n## Usage\nUser inputs city name, returns weather info.",
    "createSuccess": "Skill Criado successfully",
    "createFailed": "Falhou to Criar Skill",
    "deleteConfirm": "Are you sure you want to delete this skill?",
    "deleteSuccess": "Skill deleted successfully",
    "deleteFailed": "Falhou to Excluir Skill",
    "batchEnable": "Ativar",
    "batchDisable": "Desativar",
    "batchEnableSuccess": "{{count}} skills ativadas",
    "batchEnablePartial": "{{enabled}} ativadas, {{failed}} falharam",
    "batchEnableFailed": "Falha ao ativar em lote",
    "batchDisableSuccess": "{{count}} skills desativadas",
    "batchDisablePartial": "{{disabled}} desativadas, {{failed}} falharam",
    "batchDisableFailed": "Falha ao desativar em lote",
    "batchDeleteTitle": "Excluir {{count}} skills?",
    "batchDeleteSuccess": "{{count}} Skills deleted",
    "batchDeletePartial": "{{deleted}} deleted, {{failed}} Falhou",
    "batchDeleteFailed": "Batch Excluir Falhou",
    "selectedCount": "{{count}} Selecionado",
    "updateSuccess": "Skill Atualizado successfully",
    "updateFailed": "Falhou to Atualizar Skill",
    "frontmatterRequired": "Skills must start and end with ---",
    "frontmatterNameRequired": "Skills missing required field : name",
    "frontmatterDescriptionRequired": "Skills missing required field : description",
    "editNotSupported": "Falhou to Editar Skill",
    "editNote": "Tip: You can edit skill content, channels, and config here.",
    "create": "Criar",
    "optimizeWithAI": "AI Optimize",
    "stopOptimize": "Parar",
    "optimizeSuccess": "Skill optimized successfully",
    "optimizeFailed": "Falhou to optimize Skill",
    "noContentToOptimize": "Nao Conteudo to optimize",
    "cancelImport": "Cancelar Importar",
    "importCancelled": "Skill Importar cancelled",
    "importTimeout": "Skill import timed out. Please retry or check your network.",
    "uploadSkill": "Enviar Skill",
    "uploadZip": "Enviar via Zip",
    "uploadSuccess": "Skill uploaded successfully",
    "uploadFailed": "Skill Enviar Falhou",
    "uploadNoChange": "No new skills were imported. They may already exist.",
    "zipOnly": "Only .zip files are supported for upload",
    "fileSizeExceeded": "File size exceeds {{limit}}MB limit. Current file: {{size}}MB",
    "channels": "Canais",
    "allChannels": "Todos",
    "lastUpdated": "Atualizado",
    "searchPlaceholder": "Filtrar by Nome",
    "listView": "List Visualizar",
    "gridView": "Grid Visualizar",
    "refreshHint": "Atualizar Skills from disk",
    "poolSync": "Sync Status",
    "uploadedToPool": "Uploaded to Skill pool",
    "downloadedToWorkspace": "Downloaded to Atual Workspace",
    "builtinUpgradeTitle": "Upgrade Integrado Skill",
    "builtinUpgradeContent": "A newer version of built-in skill \"{{name}}\" is available in the pool. Overwrite the current version?",
    "languageSwitchTitle": "Switch Skill Idioma",
    "languageSwitchContent": "The following skills have a different language version in the pool and will be overwritten:",
    "overwriteExistingList": "The following skills already exist and will be overwritten:",
    "nameConflict": "Name conflict detected. Suggested rename has been filled.",
    "uploadToPoolHint": "Upload selected workspace skills to the shared local skill pool",
    "downloadFromPool": "Carregar do Skill Pool",
    "uploadToPool": "Sync to Skill Pool",
    "selectWorkspaceSkill": "Selecionar Atual Workspace Skill",
    "selectPoolItem": "Selecionar Skill pool item",
    "renameOptional": "Rename (optional)",
    "renamePlaceholder": "Suggested rename will appear here on conflict",
    "renameSingleOnly": "Rename is available only when exactly one skill is selected.",
    "selectAll": "Selecionar Todos",
    "clearSelection": "Limpar",
    "downloadSkillPool": "Baixar Skill Pool",
    "uploadSkillPool": "Enviar Skill Pool",
    "config": "Configuracao",
    "configPlaceholder": "{\"KEY\": \"value\"}",
    "configInvalidJson": "Invalid JSON Formato",
    "configSaved": "Configuracao saved",
    "emptyStateBadge": "Novo workspaces Iniciar empty",
    "emptyStateTitle": "This agent does not have any skills yet",
    "emptyStateText": "This is expected. New workspaces do not come with skills automatically. Download skills from the local pool or create one here to equip this agent.",
    "emptyStateDownload": "Baixar from Skill Pool",
    "emptyStateCreate": "Criar First Skill",
    "loadFailed": "Falhou to load Skills",
    "refreshFailed": "Falhou to Atualizar Skills",
    "createdSuccessfully": "Criado successfully",
    "saveFailed": "Falhou to Salvar",
    "importFailed": "Importar Falhou",
    "disabledSuccessfully": "Desativado successfully",
    "enabledSuccessfully": "Ativado successfully",
    "operationFailed": "Operation Falhou",
    "provideUrl": "Please provide a hub skill URL",
    "validUrl": "Please enter a valid URL starting with http:// or https://",
    "importedSkill": "Imported skill: {{name}}",
    "batchOperation": "Batch Operation",
    "exitBatch": "Exit Batch",
    "noSearchResults": "No skills found matching your search",
    "filterByTag": "Filtrar by tag",
    "noTags": "Nao Tags available",
    "enabledSkills": "Skills Ativadas",
    "disabledSkills": "Skills Desativadas",
    "active": "ativas"
  },
  "skillPool": {
    "description": "Shared local skill pool for built-in skills and workspace uploads. External hub imports such as ClawHub or LobeHub are separate.",
    "broadcast": "Broadcast to Agentes",
    "broadcastHint": "Broadcast skills to selected agents",
    "refreshHint": "Refresh skill pool from disk",
    "deleteExternalConfirm": "Exclui os arquivos da skill externa em {{path}} do disco.",
    "deleteExternalBatchWarning": "As skills externas selecionadas serão excluídas permanentemente do disco.",
    "broadcastTitle": "Broadcast {{name}}",
    "importBuiltin": "Atualizar Integrado Skills",
    "importBuiltinHint": "Update built-in skills to the latest version",
    "importBuiltinAlertHint": "{{count}} built-in changes need review",
    "importBuiltinSuccess": "Built-ins imported: {{names}}",
    "importBuiltinConflicts": "Skipped due to name conflicts: {{names}}",
    "importBuiltinNoChanges": "No built-in changes to import",
    "importBuiltinFailed": "Integrado Importar Falhou",
    "importBuiltinConflictTitle": "Builtin conflicts detected",
    "importBuiltinConflictContent": "The following built-ins differ from the current pool copy. Confirm to overwrite them from source.",
    "sourceVersion": "Origem Versao",
    "currentVersion": "Atual Versao",
    "builtinLanguage": "Idioma",
    "langDefault": "Padrao",
    "langDefaultTooltip": "Keep each skill in its current language",
    "langEn": "English",
    "langZh": "Chinese",
    "builtinLanguageChangeTitle": "Switch built-in language?",
    "builtinLanguageChangeContent": "Overwrite the pool copy of \"{{name}}\" with the {{language}} built-in version?",
    "builtinLanguageChangeSuccess": "\"{{name}}\" switched to {{language}}",
    "builtinLanguageChangeFailed": "Falha ao switch built-in Idioma",
    "importStatusMissing": "Missing in pool",
    "importStatusCurrent": "Already Atual",
    "importStatusOutdated": "Outdated",
    "importStatusLanguageSwitchTo": "Overwrite with the {{language}} version",
    "importStatusConflict": "Conflict",
    "builtinNoticeSummary": "{{count}} built-in changes detected",
    "builtinNoticeLineAdded": "Added: {{names}}",
    "builtinNoticeLineMissing": "Missing: {{names}}",
    "builtinNoticeLineUpdated": "Updated: {{names}}",
    "builtinNoticeLineRemoved": "Removed: {{names}}",
    "zipImport": "ZIP Importar",
    "create": "Criar",
    "edit": "Editar",
    "delete": "Excluir",
    "descriptionLabel": "Descricao",
    "tags": "Tags",
    "tagsPlaceholder": "Select or type to add tags",
    "tagTooLong": "Tag must be at most {{max}} characters",
    "filterByTag": "Filtrar by tag",
    "version": "Versao",
    "createTitle": "Criar Skill Pool Item",
    "editTitle": "Editar {{name}}",
    "skillNamePlaceholder": "Skill Nome",
    "contentPlaceholder": "SKILL.md Conteudo",
    "nameConflict": "Name conflict detected. Suggested rename applied.",
    "deletedFromPool": "Deleted from Skill pool",
    "deleteBuiltinConfirm": "This removes the built-in skill from the pool. You can import it again later from source.",
    "deleteConfirm": "This removes the skill from the shared local skill pool.",
    "deleteTitle": "Excluir {{name}}?",
    "batchDeleteTitle": "Excluir {{count}} pool skills?",
    "batchDeleteSuccess": "{{count}} pool Skills deleted",
    "batchDeletePartial": "{{deleted}} deleted, {{failed}} Falhou",
    "batchDeleteFailed": "Batch Excluir Falhou",
    "zipImportFailed": "ZIP Importar Falhou",
    "externalHubHint": "External hub import is separate from the local Skill Pool.",
    "imported": "Imported: {{names}}",
    "noNewImports": "Nao Novo Skills imported",
    "allBuiltin": "Todos Integrado",
    "selectWorkspaces": "Broadcast to workspace(s)",
    "allWorkspaces": "Todos Workspaces",
    "optionalRename": "Opcional rename",
    "back": "Voltar",
    "skillCount": "{{count}} Skills",
    "skillName": "Skill Nome",
    "status": "Status",
    "installedFrom": "Instalado de",
    "updateBuiltin": "Atualizar",
    "updateConfirmTitle": "Atualizar {{name}}",
    "updateConfirmContent": "Update to version {{version}}? This will replace the current pool copy with the latest built-in version.",
    "updateSuccess": "Atualizado successfully",
    "updateFailed": "Atualizar Falhou",
    "broadcastSuccess": "Broadcast Concluido",
    "broadcastFailed": "Broadcast Falhou",
    "overwriteConfirm": "Overwrite existing skills?",
    "overwriteTargetsContent": "The following existing targets will be overwritten:",
    "builtinOverwriteTargetsContent": "The following built-in targets have different versions and will be overwritten:",
    "renameAndRetry": "A skill with this name already exists. Use the suggested name?",
    "multiConflictTitle": "Multiple Conflicts Detected",
    "multiConflictDesc": "The following skills already exist. Please resolve conflicts individually and retry:",
    "singleConflictRename": "\"{{name}}\" already exists. Rename to \"{{suggested}}\" to proceed?",
    "statusUpToDate": "Up-to-date",
    "statusSynced": "Synced",
    "statusOutdated": "Outdated",
    "statusNotSynced": "Not synced",
    "statusConflict": "Conflict",
    "renameEntry": "Novo Nome for \"{{name}}\":",
    "builtin": "Integrado",
    "custom": "Personalizado"
  },
  "mcp": {
    "title": "MCP Clients",
    "create": "Criar Client",
    "formatSupport": "Supported formats",
    "standardFormat": "Padrao (mcpServers wrapper)",
    "directFormat": "Direct (key → config object)",
    "singleFormat": "Single client (flat fields)",
    "emptyState": "No MCP clients configured yet",
    "loadError": "Falha ao load MCP clients",
    "createSuccess": "MCP client Criado successfully",
    "createError": "Falha ao Criar MCP client",
    "updateSuccess": "MCP client Atualizado successfully",
    "updateError": "Falha ao Atualizar MCP client",
    "enableSuccess": "MCP client Ativado successfully",
    "disableSuccess": "MCP client Desativado successfully",
    "toggleError": "Falha ao toggle MCP client Status",
    "deleteConfirm": "Are you sure you want to delete this MCP client?",
    "deleteSuccess": "MCP client deleted successfully",
    "deleteError": "Falha ao Excluir MCP client",
    "maskedFieldHint": "Sensitive fields are masked with ***. In-place edits on masked values are not supported — replace with the full new value to modify.",
    "tools": "Ferramentas e Permissões",
    "noTools": "No tools available from this MCP server",
    "toolsLoadError": "Failed to load tools from MCP server",
    "toolsConnecting": "MCP server is still connecting, please try again in a moment",
    "toolSchema": "Input Schema",
    "access": {
      "title": "Acesso",
      "button": "Acesso",
      "summary": "Política de acesso MCP",
      "clientSection": "Acesso geral",
      "toolSection": "Acesso à ferramenta",
      "default": "Padrão",
      "sourceType": "Origem",
      "sourceValue": "Valor da origem",
      "sourceValueAllChannels": "Todos os canais",
      "subjectType": "Objeto",
      "subjectValue": "Valor do objeto",
      "effectLabel": "Política",
      "source": {
        "channel": "Canal"
      },
      "subjectTypeOption": {
        "all": "Todos",
        "user": "Usuário"
      },
      "sourceValuePlaceholder": {
        "channel": "console / dingtalk"
      },
      "subjectValuePlaceholder": "ex.: alice",
      "subjectValuePlaceholderSelectedSource": "ID de usuário na origem selecionada",
      "subjectValuePlaceholderScoped": "ID de usuário de {{source}}",
      "subjectValueAll": "Todos",
      "recentUserPlaceholder": "O ID de usuário é limitado à origem selecionada; digite ou selecione novamente",
      "noRecentUsers": "Nenhum usuário recente para esta origem; digite um ID manualmente",
      "ambiguousUserSourceWarning": "IDs de usuário são únicos apenas dentro da origem. Selecione um canal específico para evitar correspondência entre canais.",
      "unknownUserValueWarning": "Este ID de usuário não está nos usuários ativos recentes. Ainda é possível salvar.",
      "validation": {
        "missingUserValue": "Selecione uma origem específica e informe um ID de usuário válido.",
        "ambiguousUserSource": "Regras de usuário devem mirar um canal específico, não todos os canais.",
        "unknownUserValue": "Este ID de usuário não está nos usuários ativos recentes. Ainda é possível salvar."
      },
      "addRule": "Adicionar regra",
      "deleteRule": "Excluir regra",
      "noClientRules": "Nenhuma regra",
      "noRules": "Nenhuma regra, usa a política padrão",
      "inherit": "Herdar ({{effect}})",
      "stale": "Não encontrado",
      "disabledTools": "Este cliente MCP está desativado; as regras de acesso salvas ainda podem ser editadas.",
      "discardTitle": "Descartar alterações não salvas?",
      "discardContent": "As alterações não salvas da política de acesso serão perdidas.",
      "loadError": "Falha ao carregar política de acesso MCP",
      "saveSuccess": "Política de acesso MCP salva",
      "saveError": "Falha ao salvar política de acesso MCP",
      "unmanagedRules": "{{count}} regra(s) avançada(s)",
      "effect": {
        "allow": "Permitir",
        "ask": "Perguntar",
        "deny": "Negar"
      }
    },
    "tab": {
      "json": "Importação JSON",
      "form": "Modo formulário"
    },
    "form": {
      "key": "Chave do cliente",
      "keyPlaceholder": "my-mcp-server",
      "keyRequired": "A chave do cliente é obrigatória",
      "name": "Nome de exibição",
      "namePlaceholder": "My MCP Server",
      "nameRequired": "O nome de exibição é obrigatório",
      "transport": "Transporte",
      "url": "URL do servidor",
      "urlRequired": "A URL é obrigatória para servidores MCP remotos",
      "command": "Comando",
      "commandRequired": "O comando é obrigatório para transporte stdio",
      "args": "Argumentos (separados por espaço ou nova linha)",
      "description": "Descrição",
      "descriptionPlaceholder": "Descrição opcional",
      "env": "Variáveis de ambiente",
      "envPlaceholder": "KEY=VALUE (uma por linha)"
    },
    "oauth": {
      "enableOAuth": "Usar autorização OAuth",
      "manage": "OAuth",
      "authorized": "Autorizado",
      "notAuthorized": "Não autorizado",
      "expired": "Token expirado",
      "failed": "Falha na autorização",
      "waiting": "Aguardando autorização...",
      "authorize": "Autorizar",
      "reauthorize": "Reautorizar",
      "revoke": "Revogar",
      "startFailed": "Falha ao iniciar fluxo OAuth",
      "authFailed": "Falha na autorização OAuth",
      "popupBlocked": "O popup foi bloqueado pelo navegador. Permita popups e tente novamente.",
      "windowClosed": "Janela de autorização fechada. Tente novamente.",
      "noUrl": "Insira a URL do servidor primeiro",
      "noClientKey": "Crie o cliente primeiro",
      "showAdvanced": "Opções avançadas",
      "hideAdvanced": "Ocultar opções avançadas",
      "clientId": "Client ID (opcional)",
      "clientIdPlaceholder": "Deixe em branco para usar registro dinâmico",
      "scope": "Scope (opcional)",
      "scopePlaceholder": "openid profile email",
      "authEndpoint": "Authorization Endpoint (substituir)",
      "tokenEndpoint": "Token Endpoint (substituir)",
      "endpointHint": "Deixe em branco para descoberta automática do servidor MCP."
    }
  },
  "heartbeat": {
    "title": "Batimento",
    "description": "Execute HEARTBEAT.md em intervalo fixo para autoverificações. Por padrão roda em silêncio sem afetar conversas atuais; opcionalmente envie respostas ao último canal de chat.",
    "enabled": "Ativar heartbeat",
    "every": "Intervalo",
    "everyRequired": "Obrigatório",
    "everyMin": "Deve ser no mínimo 1",
    "timeoutSeconds": "Tempo limite de execução (segundos)",
    "timeoutRequired": "Obrigatório",
    "timeoutMin": "Deve ser no mínimo 1",
    "timeoutMax": "Deve ser no máximo 3600",
    "unitMinutes": "Minutos",
    "unitHours": "Horas",
    "target": "Destino da resposta",
    "targetMain": "Modo silencioso (padrão, sem saída no canal)",
    "targetLast": "Enviar para o último canal de chat",
    "activeHours": "Horário ativo (opcional)",
    "activeStart": "Hora de início",
    "activeEnd": "Hora de término",
    "loadFailed": "Falha ao carregar configuração do heartbeat",
    "saveSuccess": "Salvo com sucesso; heartbeat recarregado em tempo real",
    "saveFailed": "Falha ao salvar configuração do heartbeat",
    "targetInbox": "Enviar para o Inbox",
    "runNow": "Executar agora",
    "runNowSuccess": "Heartbeat disparado. Verifique o Inbox ou o canal de destino em instantes.",
    "runNowFailed": "Falha ao disparar execução do heartbeat"
  },
  "cronJobs": {
    "title": "Tarefas Cron",
    "description": "Crie e gerencie tarefas agendadas executadas automaticamente nos horários definidos.",
    "createJob": "Criar job",
    "editJob": "Editar job",
    "confirmDelete": "Confirmar exclusão",
    "deleteConfirm": "Tem certeza de que deseja excluir este Cron Job?",
    "okText": "OK",
    "cancelText": "Cancelar",
    "deleteText": "Excluir",
    "id": "ID do job",
    "name": "Nome do job",
    "enabled": "Estado",
    "scheduleType": "Tipo de agendamento",
    "scheduleCron": "Agendamento (Cron)",
    "scheduleCronLabel": "Agendamento (Cron)",
    "scheduleTimezone": "Fuso horário",
    "cronType": "Frequência",
    "cronTypeHourly": "A cada hora",
    "cronTypeDaily": "Diário",
    "cronTypeWeekly": "Semanal",
    "cronTypeCustom": "Personalizado",
    "cronTime": "Horário",
    "cronDaysOfWeek": "Dias da semana",
    "cronDayMon": "Segunda-feira",
    "cronDayTue": "Terça-feira",
    "cronDayWed": "Quarta-feira",
    "cronDayThu": "Quinta-feira",
    "cronDayFri": "Sexta-feira",
    "cronDaySat": "Sábado",
    "cronDaySun": "Domingo",
    "cronCustomExpression": "Expressão Cron",
    "taskText": "Conteúdo da mensagem",
    "action": "Ação",
    "disable": "Desativar",
    "executeNow": "Executar agora",
    "edit": "Editar",
    "delete": "Excluir",
    "totalItems": "Total de {{count}} itens",
    "perPage": "/ página",
    "pleaseInputId": "Informe o ID do job",
    "pleaseInputName": "Informe o nome do job",
    "pleaseInputCron": "Informe a expressão cron",
    "pleaseSelectTaskType": "Selecione o tipo de tarefa",
    "pleaseInputRequest": "Informe o conteúdo da requisição",
    "pleaseInputMessageContent": "Informe o conteúdo da mensagem",
    "pleaseInputChannel": "Informe o canal de destino",
    "pleaseInputUserId": "Informe o ID do usuário de destino",
    "pleaseInputSessionId": "Informe o ID da sessão de destino",
    "jobIdPlaceholder": "ex.: daily-report-job",
    "jobNamePlaceholder": "ex.: Relatório matinal diário",
    "selectTimezone": "Selecionar fuso horário",
    "taskDescriptionPlaceholder": "Para tarefas de texto simples, digite o corpo da mensagem a enviar...",
    "invalidJsonFormat": "Formato JSON inválido",
    "jsonFormatRequired": "Formato JSON obrigatório",
    "taskType": "Tipo de tarefa",
    "text": "Conteúdo da mensagem",
    "requestInput": "Conteúdo da requisição",
    "requestSessionId": "ID da sessão da requisição",
    "requestUserId": "ID do usuário da requisição",
    "dispatchChannel": "Canal de destino",
    "dispatchTargetUserId": "ID do usuário de destino",
    "dispatchTargetSessionId": "ID da sessão de destino",
    "dispatchMode": "Modo de entrega",
    "silentDelivery": "Entrega silenciosa",
    "runtimeMaxConcurrency": "Concorrência máxima",
    "runtimeTimeoutSeconds": "Tempo limite (segundos)",
    "runtimeMisfireGraceSeconds": "Tolerância de execução perdida (segundos)",
    "runtimeToolSafety": "Verificação de segurança de ferramentas",
    "idTooltip": "Gerado pelo sistema, não editável: UUID único atribuído na criação da tarefa.",
    "nameTooltip": "Um nome amigável para identificar este job.",
    "cronTooltip": "Define quando a tarefa deve ser executada",
    "cronExample": "Exemplos comuns: '0 9 * * *' = 9h diariamente | '*/30 * * * *' = a cada 30 min | '0 */2 * * *' = a cada 2 horas | '0 0 * * 0' = meia-noite de domingo",
    "cronHelper": "Novo em expressões Cron?",
    "cronHelperLink": "Usar gerador online",
    "timezoneTooltip": "Fuso horário do agendamento cron. Padrão: UTC",
    "taskTypeTooltip": "Escolha 'text' para mensagens simples ou 'agent' para fluxos complexos com agente.",
    "textTooltip": "Tarefa de mensagem simples: este é o corpo da mensagem. Obrigatório quando o tipo é 'text'.",
    "requestInputTooltip": "Conteúdo da mensagem em JSON. É o que o agente receberá e processará. Obrigatório quando o tipo é 'agent'.",
    "requestInputExample": "Formato: [{\"role\":\"user\",\"content\":[{\"type\":\"text\",\"text\":\"Sua mensagem aqui\"}]}]",
    "requestSessionIdTooltip": "ID da sessão para o contexto da requisição. Use 'default' se não tiver certeza.",
    "requestUserIdTooltip": "ID do usuário que inicia a requisição. Use 'system' para tarefas automatizadas.",
    "dispatchChannelTooltip": "Canal de destino onde a resposta será enviada (ex.: 'console', 'discord', 'imessage').",
    "dispatchTargetUserIdTooltip": "ID do usuário que receberá a resposta no canal de destino.",
    "dispatchTargetSessionIdTooltip": "ID da sessão em que a resposta será entregue no canal de destino.",
    "dispatchModeTooltip": "Escolha 'stream' para respostas em tempo real ou 'final' apenas para respostas completas.",
    "silentDeliveryTooltip": "Executa a tarefa do agente e mantém a sessão e o rastreamento, mas não envia o resultado ao canal.",
    "maxConcurrencyTooltip": "Número máximo de execuções simultâneas deste job. Padrão: 1",
    "timeoutSecondsTooltip": "Tempo máximo de execução em segundos. O job será encerrado se ultrapassar.",
    "misfireGraceSecondsTooltip": "Período de tolerância para execuções perdidas. Se o job atrasar mais que isso em relação ao horário agendado, não será executado.",
    "toolSafetyTooltip": "Quando ativado, chamadas de ferramentas de risco requerem aprovação do usuário (pode bloquear jobs cron sem supervisão). Quando desativado, todas as ferramentas são executadas sem aprovação. Padrão: desativado",
    "executeNowTitle": "Executar tarefa agora",
    "executeNowContent": "Deseja executar \"{{name}}\" agora?",
    "executeNowConfirm": "Executar agora",
    "createFromTemplate": "Criar a partir de modelo",
    "templateModalTitle": "Escolha um modelo de tarefa",
    "templateModalDescription": "Escolha um modelo integrado e ajuste os principais parâmetros no painel antes de salvar.",
    "useTemplate": "Usar modelo",
    "templateTagPersonal": "Pessoal",
    "templateTagTeam": "Equipe",
    "templateTagReminder": "Lembrete",
    "templateTagCalendar": "Calendário",
    "templateTagCalendarRecommended": "Recomendado no calendário",
    "saveResultToInbox": "Salvar resultado no Inbox",
    "saveResultToInboxTooltip": "Quando ativado, execuções com entrega bem-sucedida ficam no Inbox. Falhas de entrega sempre são gravadas no Inbox como contingência.",
    "scheduleFilterAll": "Todos os tipos de agendamento",
    "scheduleTypeRecurring": "Recorrente",
    "scheduleTypeOnce": "Agendada",
    "onceRunAt": "Executar em",
    "repeatEnabled": "Repetir",
    "repeatEnabledTooltip": "Ativa agendamento recorrente a partir deste horário inicial",
    "repeatFrequency": "Frequência de repetição",
    "repeatEveryDays": "Repetir a cada (dias)",
    "repeatEveryPrefix": "A cada",
    "repeatEverySuffix": "dia(s)",
    "repeatEndType": "Fim da repetição",
    "repeatEndNever": "Nunca",
    "repeatEndUntil": "Encerrar em data",
    "repeatEndCount": "Contagem limitada",
    "repeatUntil": "Data final",
    "repeatCount": "Número de execuções",
    "pleaseSelectScheduleType": "Selecione o tipo de agendamento",
    "pleaseInputRunAt": "Selecione o horário de execução",
    "pleaseInputRepeatEveryDays": "Informe o intervalo de repetição (dias)",
    "pleaseSelectRepeatEndType": "Selecione a condição de término",
    "pleaseInputRepeatUntil": "Selecione a data final",
    "pleaseInputRepeatCount": "Informe o número de execuções",
    "validation": {
      "cronRequired": "A expressão cron é obrigatória para agendamentos recorrentes.",
      "runAtRequired": "O horário de execução é obrigatório para agendamentos únicos.",
      "repeatUntilRequired": "Ao usar \"Encerrar em data\", selecione a data final.",
      "repeatCountRequired": "Ao usar \"Contagem limitada\", informe o número de execuções.",
      "repeatUntilAfterRunAt": "A data final deve ser posterior ao horário de execução. Escolha uma data final após o horário de execução.",
      "textRequired": "O conteúdo da mensagem é obrigatório quando o tipo da tarefa é text.",
      "requestRequired": "O conteúdo da requisição é obrigatório quando o tipo da tarefa é agent.",
      "invalidCronExpression": "Expressão cron inválida. Use o formato cron de 5 campos."
    },
    "runtimeShareSession": "Compartilhar sessão",
    "shareSessionTooltip": "Quando ativado, compartilha a sessão com o usuário de destino. Quando desativado, cada execução cria contexto isolado com ID de execução único. Adequado para tarefas independentes sem memória. Padrão: ativado",
    "listView": "Lista",
    "calendarView": "Calendário",
    "calendarEmptyHint": "Ainda não há jobs agendados. Crie jobs agendados para vê-los no calendário.",
    "calendarMoreItems": "+{{count}} a mais",
    "calendarDayListTitle": "Jobs agendados em {{date}}",
    "executionHistory": "Histórico",
    "historyTitle": "Histórico — {{name}}",
    "historyEmpty": "Ainda não há registros de execução.",
    "historyStatusSuccess": "Sucesso",
    "historyStatusFailed": "Falhou",
    "historyStatusRunning": "Em execução",
    "historyStatusCancelled": "Cancelado",
    "historyTriggerScheduled": "Disparado pelo agendamento",
    "historyTriggerManual": "Disparado manualmente",
    "historyExpand": "Expandir",
    "historyCollapse": "Recolher",
    "templates": {
      "dailyTechNewsBrief": {
        "title": "Resumo diário de notícias de tecnologia",
        "description": "Às 09:30 em dias úteis, compila manchetes em alta em um breve resumo.",
        "frequency": "Dias úteis 09:30 (30 9 * * 1-5)"
      },
      "dailyEveningReflection": {
        "title": "Reflexão vespertina diária",
        "description": "Às 20:00 em dias úteis, sugere uma reflexão rápida sobre o trabalho do dia.",
        "frequency": "Dias úteis 20:00 (0 20 * * 1-5)"
      },
      "weekendRelaxationReminder": {
        "title": "Lembrete de descanso no fim de semana",
        "description": "Nas manhãs de fim de semana, envia sugestões de filmes em alta para um descanso mais leve.",
        "frequency": "Fins de semana 10:00 (0 10 * * 6,0)"
      },
      "pomodoroBreakReminder": {
        "title": "Lembrete de pausa Pomodoro",
        "description": "No horário comercial, lembre a cada 25 minutos de se hidratar ou descansar os olhos.",
        "frequency": "Dias úteis 09:00–17:59 a cada 25 min (*/25 9-17 * * 1-5)"
      },
      "petCareReminder": {
        "title": "Lembrete de vermifugação/vacina do pet",
        "description": "No dia 15 de cada mês à noite, lembre sobre vermifugação ou retorno de vacina do pet.",
        "frequency": "Mensalmente no dia 15 às 20:00 (0 20 15 * *)"
      },
      "onceTextBirthdayReminder": {
        "title": "Lembrete de aniversário",
        "description": "Lembrar que xx faz aniversário em 1º de janeiro.",
        "frequency": "Execução: 2026-01-01 09:00"
      },
      "onceAgentBusinessTripPrep": {
        "title": "Preparação para viagem de trabalho",
        "description": "Consultar o clima do destino e sugerir preparativos para a viagem.",
        "frequency": "Execução: 2026-01-01 20:00"
      },
      "repeatCountTextMedicineReminder": {
        "title": "Lembrete de medicação (14 vezes)",
        "description": "Lembrar de tomar o remédio no horário por um ciclo de 14 execuções.",
        "frequency": "Primeira execução: 2026-01-01 09:00 | A cada 1 dia | 14 execuções"
      },
      "repeatCountAgentDietPlan": {
        "title": "Plano alimentar de 14 dias",
        "description": "Gerar e enviar sugestões diárias de alimentação por 14 dias.",
        "frequency": "Primeira execução: 2026-01-01 08:00 | A cada 1 dia | 14 execuções"
      },
      "repeatUntilTextWeeklyMeeting": {
        "title": "Lembrete de reunião semanal (2 meses)",
        "description": "Enviar lembrete semanal da reunião até a data limite configurada.",
        "frequency": "Primeira execução: 2026-01-02 08:45 | A cada 7 dias | Até 2026-03-01"
      },
      "repeatUntilAgentWeeklySummary": {
        "title": "Resumo semanal antes da reunião",
        "description": "Antes de cada reunião semanal, gerar um resumo de trabalho com base na memory da última semana.",
        "frequency": "Primeira execução: 2026-01-02 08:30 | A cada 7 dias | Até 2026-03-01"
      }
    }
  },
  "channels": {
    "title": "Canais",
    "description": "Manage and configure message channels",
    "loading": "Carregando channels...",
    "configSaved": "Configuracao saved successfully",
    "configFailed": "Falhou to Salvar Configuracao",
    "channelType": "Channel Tipo",
    "status": "Status",
    "totalItems": "Total {{count}} items",
    "botPrefix": "Bot Prefix",
    "showToolCalls": "Mostrar Informações de Chamada de Ferramenta",
    "showToolCallsTooltip": "Mostrar informações de chamada de ferramenta aos usuários (desative para ocultar)",
    "showToolResults": "Mostrar Informações do Resultado da Ferramenta",
    "showToolResultsTooltip": "Mostrar informações do resultado da ferramenta aos usuários (desative para ocultar)",
    "toolCallMaxLength": "Comprimento Máximo de Exibição da Chamada de Ferramenta",
    "toolResultMaxLength": "Comprimento Máximo de Exibição do Resultado da Ferramenta",
    "toolMaxLengthTooltip": "Defina como 0 para não limitar o comprimento",
    "showThinking": "Mostrar Thinking",
    "showThinkingTooltip": "Show model thinking/reasoning content to users (turn off to hide)",
    "noTextDebounce": "Debounce sem texto",
    "noTextDebounceTooltip": "Quando ativado, mensagens apenas com mídia (imagem/vídeo/arquivo) são armazenadas em buffer até que uma mensagem de texto chegue, depois mescladas. Desative para processar todas as mensagens imediatamente. Mensagens de voz são sempre processadas imediatamente.",
    "streamingEnabled": "Saída em Streaming",
    "streamingEnabledDingtalkHint": "Apenas efetivo quando o tipo de mensagem é Card",
    "streamingEnabledFeishuHint": "Requer habilitar a permissão cardkit:card:write na página de gerenciamento de permissões da Plataforma Aberta Feishu",
    "ackMessage": "Acknowledgment Message",
    "ackMessageTooltip": "Send an instant reply when a message is received, before agent processing begins. Leave empty to disable.",
    "ackMessagePlaceholder": "⏳ Processing...",
    "notSet": "Nao definido",
    "clickCardToEdit": "Click card to Editar",
    "settings": "Configuracoes",
    "channelSettings": "Channel Configuracoes",
    "pleaseInputDbPath": "Please input DB Caminho",
    "pleaseInputPollInterval": "Please input poll interval",
    "discordBotToken": "Discord bot token",
    "acceptBotMessages": "Accept Bot Messages",
    "acceptBotMessagesTooltip": "When enabled, messages from other bots will be accepted",
    "httpProxyPlaceholder": "http://127.0.0.1:18118",
    "httpProxyAuthPlaceholder": "user:password",
    "dbPathPlaceholder": "~/Library/Messages/chat.db",
    "botPrefixPlaceholder": "@bot",
    "dmPolicy": "DM Policy",
    "dmPolicyTooltip": "Control who can interact with the bot via direct message. Open: everyone; Allowlist: authorized users only",
    "groupPolicy": "Group Policy",
    "groupPolicyTooltip": "Control who can interact with the bot in group chats. Open: everyone; Allowlist: authorized users only",
    "requireMention": "Require @Mention",
    "requireMentionTooltip": "When enabled, bot only responds in group chats when explicitly @mentioned",
    "policyOpen": "Abrir",
    "policyAllowlist": "Allowlist",
    "allowFrom": "Allowlist Users",
    "allowFromTooltip": "List of user IDs allowed to interact with the bot. Enable allowlist first, then DM the bot to see your ID in the deny message",
    "allowFromPlaceholder": "Enter user ID and press Enter to add",
    "denyMessage": "Access Denied Message",
    "denyMessageTooltip": "Custom message shown to users when access is denied",
    "twilioAccountSid": "Twilio Account SID",
    "twilioAuthToken": "Twilio Auth Token",
    "phoneNumber": "Phone Number",
    "phoneNumberSid": "Phone Number SID",
    "phoneNumberSidHelp": "Found under Phone Numbers → Active Numbers in the Twilio Console.",
    "ttsProvider": "TTS Provedor",
    "ttsVoice": "TTS Voice",
    "sttProvider": "STT Provedor",
    "language": "Idioma",
    "welcomeGreeting": "Welcome Greeting",
    "welcomeText": "Welcome Message",
    "welcomeTextTooltip": "Message automatically sent when a user enters a single chat session with the bot for the first time that day",
    "welcomeTextPlaceholder": "e.g. Hello! I'm QwenPaw. How can I help you?",
    "loginWeCom": "Get WeCom QR Code",
    "wecomSetupGuide": "When creating a bot via QR code, please select \"Skip Authorization\" when asked to authorize bot capabilities. If you select \"Confirm Authorization\", users other than the bot creator may not be able to interact with the bot.",
    "wecomScanAuth": "Scan to Authorize",
    "wecomAuthHint": "Scan the QR code above with WeCom to authorize. Bot ID and Secret will be filled in automatically.",
    "wecomAuthSuccess": "WeCom bot authorized. Bot ID and Secret have been filled in.",
    "wecomQrcodeFailed": "Failed to get WeCom QR code. Please try again.",
    "slackBotToken": "Bot Token",
    "slackBotTokenTooltip": "Slack Bot User OAuth Token, começa com xoxb-",
    "slackAppToken": "App Token",
    "slackAppTokenTooltip": "Slack App-Level Token para Socket Mode, começa com xapp-",
    "slackProxyTooltip": "URL de proxy HTTP para conectar à API do Slack",
    "dingtalkSetupGuide": "Scan the QR code with DingTalk to create a bot instantly. A DingTalk app will be created automatically and Client ID / Client Secret will be filled in.",
    "dingtalkScanAuth": "Scan to Criar Bot",
    "dingtalkGetQrcode": "Get DingTalk QR Code",
    "dingtalkScanHint": "Scan the QR code above with DingTalk. Client ID and Client Secret will be filled in automatically after authorization.",
    "dingtalkAuthSuccess": "DingTalk bot created. Client ID and Client Secret have been filled in.",
    "dingtalkQrcodeFailed": "Failed to get DingTalk QR code. Please try again.",
    "dingtalkQrcodeExpired": "QR code expired, please get a new one.",
    "qqSetupGuide": "Use o QQ para escanear o código QR e autorizar o bot. Após escanear o código, o APP ID e o Client Secret serão obtidos automaticamente e preenchidos.",
    "qqScanAuth": "Escanear o código QR para autorizar o bot",
    "qqGetQrcode": "Obter o código QR do QQ",
    "qqScanHint": "Use o QQ para escanear o código QR acima. Após concluir a autorização, o APP ID e o Client Secret serão preenchidos automaticamente.",
    "qqAuthSuccess": "A autorização do bot do QQ foi bem-sucedida. O APP ID e o Client Secret já foram preenchidos automaticamente.",
    "qqQrcodeFailed": "Falha ao obter o código QR do QQ. Tente novamente mais tarde",
    "qqQrcodeExpired": "O código QR expirou. Obtenha-o novamente",
    "atSenderOnReply": "@ Sender Ligado Reply",
    "atSenderOnReplyTooltip": "When enabled, the bot will @mention the sender in its first reply message in group chats. Note: In card mode, @mention only works for enterprise internal members.",
    "dingtalkEndpoint": "API Endpoint",
    "dingtalkEndpointTooltip": "Endpoint de API personalizado para implantações privadas do DingTalk. Deixe em branco para usar o padrão oficial.",
    "wecomCancelled": "Autorizacao cancelled",
    "wecomAuthFailed": "Autorizacao failed: {{msg}}",
    "voiceSetupGuide": "Set up a Twilio account, purchase a phone number, then enter your credentials below. Find your Account SID and Auth Token on the Twilio Console dashboard. The Phone Number SID is listed under Phone Numbers → Active Numbers.",
    "voiceSetupLink": "Abrir Twilio Console",
    "sipSetupGuide": "Configure a SIP registrar (e.g. Asterisk, FreeSWITCH) and enter your SIP credentials below. In Dev mode, pyVoIP handles SIP/RTP locally. In Production mode, LiveKit SIP Server is used.",
    "sipMode": "SIP Modo",
    "sipModeTooltip": "Dev: pure-Python pyVoIP for local testing. Production: LiveKit SIP Server for high concurrency.",
    "sipServer": "SIP Server",
    "sipServerPlaceholder": "Leave empty to use built-in registrar",
    "sipServerPlaceholderLivekit": "Not needed for LiveKit mode",
    "sipUsername": "SIP Username",
    "sipPassword": "SIP Password",
    "sipPort": "SIP Port",
    "sipTransport": "Transport",
    "sipDashscopeApiKey": "DashScope API Chave",
    "sipDashscopeApiKeyTooltip": "API key for Aliyun DashScope STT/TTS. If empty, falls back to the DASHSCOPE_API_KEY environment variable.",
    "livekitUrl": "LiveKit URL",
    "livekitApiKey": "LiveKit API Chave",
    "livekitApiSecret": "LiveKit API Secret",
    "livekitSipTrunkId": "LiveKit SIP Trunk ID",
    "livekitRoomName": "LiveKit Room Nome",
    "livekitRoomNameTooltip": "The LiveKit room name to join and wait for SIP calls. Must match the room name in your SIP Dispatch Rule.",
    "xiaoyiSetupGuide": "Please create an agent on Huawei Developer Platform and get AK/SK and Agent ID. AK/SK can be found in the credential management page.",
    "filterAll": "Todos",
    "builtin": "Integrado",
    "custom": "Personalizado",
    "feishuRegion": "Region",
    "feishuRegionTooltip": "Choose Feishu for China or Lark for International",
    "feishuChina": "Feishu (China)",
    "feishuInternational": "Lark (International)",
    "feishuScanGuide": "Scan the QR code with Feishu to create a bot instantly. A Feishu app will be created automatically and App ID / App Secret will be filled in.",
    "feishuScanLogin": "Scan to Criar Bot",
    "feishuGetQrcode": "Get Feishu QR Code",
    "feishuScanHint": "Scan the QR code above with Feishu. App ID and App Secret will be filled in automatically after authorization.",
    "feishuAuthSuccess": "Feishu bot created. App ID and App Secret have been filled in.",
    "feishuQrcodeExpired": "QR code expired, please get a new one.",
    "feishuQrcodeFailed": "Failed to get Feishu QR code. Please try again.",
    "wechatSetupGuide": "WeChat personal account Bot (iLink protocol). On first start without a Bot Token, a QR code login URL will be printed; scan to authorize. The token is saved locally for future use.",
    "wechatContextTokenLimit": "WeChat iLink platform limitation: each user message's context_token allows a maximum of 10 reply messages. This is a hard limit enforced by the platform. It is recommended to disable thinking and tool output, or enable Message Merge to avoid exceeding the limit and causing message send failures.",
    "wechatBotToken": "Bot Token",
    "wechatBotTokenTooltip": "Bearer token obtained after QR code login. Leave empty to trigger QR code login on startup.",
    "wechatBotTokenPlaceholder": "Auto-filled after QR login, or paste manually",
    "wechatBotTokenFile": "Token File Caminho",
    "wechatBotTokenFileTooltip": "Path to persist the bot token. Defaults to ~/.qwenpaw/wechat_bot_token",
    "wechatMediaDir": "Media Directory",
    "wechatMessageMerge": "Message Merge",
    "wechatMessageMergeTooltip": "Merge multiple reply messages into fewer messages to avoid hitting the WeChat 10-message limit per context_token. When enabled with delay 0, all text replies are merged into a single message sent at the end. A positive delay (in ms) merges adjacent messages within that time window.",
    "wechatMessageMergeDelayMs": "Merge Delay (ms)",
    "wechatMessageMergeDelayMsTooltip": "Time window for adjacent message merging. Set to 0 to merge all messages into one final reply. A positive value (e.g. 1000) will buffer messages for that duration before sending.",
    "wechatMessageMergeDelayMsValidation": "Digite a valid non-negative integer",
    "wechatScanLogin": "Scan to Login",
    "wechatGetQrcode": "Get Login QR Code",
    "wechatScanHint": "Scan the QR code with WeChat, then click Save",
    "wechatQrcodeFailed": "Failed to fetch QR code, please try again",
    "wechatLoginSuccess": "WeChat login successful, token has been filled in",
    "wechatQrcodeExpired": "QR code expired, please get a new one",
    "shareSessionInGroup": "Compartilhar Contexto em Grupo",
    "shareSessionInGroupTooltip": "Quando ativado, todos os membros do grupo compartilham o mesmo contexto de conversa. Quando desativado, cada membro tem seu próprio contexto independente.",
    "accessControlEnabled": "Controle de Acesso",
    "accessControlEnabledTooltip": "Quando ativado, apenas usuários na lista branca podem interagir com o bot. Usuários desconhecidos receberão seu ID e serão adicionados à lista de aprovação pendente.",
    "accessControlDm": "Controle de Acesso em DM",
    "accessControlDmTooltip": "Quando ativado, apenas usuários na lista branca podem interagir com o bot em mensagens diretas",
    "accessControlGroup": "Controle de Acesso em Grupo",
    "accessControlGroupTooltip": "Quando ativado, apenas usuários na lista branca podem interagir com o bot em chats de grupo",
    "dmDisabled": "Desativar DM",
    "dmDisabledTooltip": "Quando ativado, o bot ignorará completamente todas as mensagens diretas",
    "groupDisabled": "Desativar Grupo",
    "groupDisabledTooltip": "Quando ativado, o bot ignorará completamente todas as mensagens de grupo",
    "manageAccessControl": "Controle de Acesso",
    "pendingApprovals": "Aprovações Pendentes",
    "whitelist": "Lista Branca",
    "blacklist": "Lista Negra",
    "addUser": "Adicionar",
    "addUserPlaceholder": "Digite o ID do usuário",
    "userId": "ID do Usuário",
    "username": "Nome de usuário",
    "channel": "Canal",
    "firstMessage": "Primeira Mensagem",
    "time": "Hora",
    "actions": "Ações",
    "approve": "Lista Branca",
    "deny": "Lista Negra",
    "dismiss": "Dispensar",
    "noWhitelistUsers": "Nenhum usuário na lista branca",
    "noBlacklistUsers": "Nenhum usuário na lista negra",
    "noPendingApprovals": "Nenhuma aprovação pendente",
    "userAdded": "Usuário adicionado",
    "userRemoved": "Usuário removido",
    "approveSuccess": "Adicionado à lista branca",
    "denySuccess": "Adicionado à lista negra",
    "dismissSuccess": "Dispensado",
    "operationFailed": "Operação falhou",
    "remark": "Observação",
    "usernamePlaceholder": "Digite o nome de usuário (opcional)",
    "remarkPlaceholder": "Digite uma observação (opcional)",
    "filterByChannel": "Filtrar por canal",
    "selectToOperate": "Selecione itens para operar",
    "selectedCount": "{{count}} selecionados",
    "batchApprove": "Aprovar",
    "batchDeny": "Lista negra",
    "batchDismiss": "Remover",
    "batchApproveConfirm": "Aprovar {{count}} usuários?",
    "batchDenyConfirm": "Adicionar {{count}} usuários à lista negra?",
    "batchDismissConfirm": "Remover {{count}} usuários?",
    "batchSuccess": "{{count}} usuários processados com sucesso",
    "batchRemove": "Excluir",
    "batchRemoveConfirm": "Excluir {{count}} usuários selecionados?",
    "enabledSection": "Ativados",
    "enabledCount": "{{count}}",
    "availableSection": "Disponíveis",
    "enableAction": "Ativar",
    "noEnabledChannels": "Nenhum canal ativado",
    "goEnableChannels": "Ativar canais"
  },
  "sessions": {
    "title": "Sessoes",
    "description": "View and manage active chat sessions",
    "loading": "Carregando sessions...",
    "confirmDelete": "Confirmar Excluir",
    "deleteConfirm": "Are you sure you want to delete this session?",
    "batchDeleteConfirm": "Are you sure you want to delete selected {{count}} sessions?",
    "deleteSuccess": "Session deleted successfully",
    "deleteFailed": "Falhou to Excluir session",
    "batchDeleteSuccess": "Successfully deleted {{count}} session(s)",
    "batchDeleteFailed": "Falha ao batch Excluir Sessoes",
    "saveSuccess": "Session saved successfully",
    "saveFailed": "Falhou to Salvar session",
    "batchDeleteButton": "Batch Excluir",
    "filterTitle": "Filtrar por Título",
    "filterUserId": "Filtrar by Usuario ID",
    "filterChannel": "Filtrar by Channel",
    "allChannels": "Todos Canais",
    "totalItems": "Total {{count}} items",
    "selectedItems": "Selecionado {{count}} items",
    "editSession": "Editar Session",
    "pleaseInputName": "Please input session Nome",
    "sessionNamePlaceholder": "Session Nome",
    "activeTab": "Ativas",
    "archivedTab": "Arquivadas",
    "archivedAtColumn": "Arquivado em",
    "archive": {
      "action": "Arquivar",
      "unaction": "Desarquivar",
      "batchAction": "Arquivar em lote",
      "batchUnaction": "Desarquivar em lote",
      "success": "Conversa arquivada",
      "successHint": "Conversa arquivada. Veja em Controle > Sessões > Arquivadas.",
      "failed": "Falha ao arquivar",
      "unarchiveSuccess": "Conversa desarquivada",
      "unarchiveFailed": "Falha ao desarquivar",
      "batchSuccess": "{{count}} conversa(s) arquivada(s)",
      "batchFailed": "Falha ao arquivar em lote",
      "batchUnarchiveSuccess": "{{count}} conversa(s) desarquivada(s)",
      "batchUnarchiveFailed": "Falha ao desarquivar em lote",
      "groupLabel": "Arquivadas ({{count}})",
      "modalTitle": "Conversas Arquivadas",
      "unarchiveAll": "Desarquivar Todas",
      "noArchived": "Nenhuma conversa arquivada"
    }
  },
  "environments": {
    "parent": "Configuracoes",
    "environments": "Variaveis de Ambiente",
    "title": "Variaveis de Ambiente",
    "description": "Configure key-value environment variables for agents and skills.",
    "key": "Chave",
    "value": "Value",
    "variableNamePlaceholder": "VARIABLE_NAME",
    "valuePlaceholder": "value",
    "insertRowBelow": "Insert row below",
    "deleteRow": "Excluir row",
    "deleteVariable": "Excluir Variable",
    "deleteConfirm": "Excluir \"{{name}}\"?",
    "deleteSelected": "Excluir Selecionado",
    "deleteSelectedConfirm": "Excluir {{label}}?",
    "keyRequired": "Chave is Obrigatorio",
    "invalidKeyFormat": "Invalid Chave Formato",
    "duplicateKey": "Duplicate Chave",
    "saveSuccess": "Environment variables saved",
    "saveFailed": "Falhou to Salvar",
    "deleteSuccess": "\"{{name}}\" deleted",
    "deleteFailed": "Falhou to Excluir",
    "noVariables": "No environment variables configured yet.",
    "addVariable": "Adicionar Variable",
    "loading": "Loading…",
    "retry": "Tentar novamente",
    "of": "of",
    "selected": "Selecionado",
    "variable": "variable",
    "variables": "variables",
    "showValue": "Mostrar value",
    "hideValue": "Ocultar value"
  },
  "modelSelector": {
    "selectModel": "Selecionar Modelo",
    "noConfiguredModels": "Nenhum modelo configurado",
    "noFreeModels": "Nenhum modelo gratuito disponível",
    "switchFailed": "Falha ao trocar modelo",
    "searchModels": "Buscar modelos...",
    "noModelsFound": "Nenhum modelo encontrado",
    "free": "Grátis",
    "vision": "Visão",
    "freeBannerText": "Modelos gratuitos podem ter limites de uso e instabilidade. Consulte o provedor para detalhes.",
    "moreProviders": "Mais provedores gratuitos (requer API Key)",
    "proBannerText": "Exibindo modelos configurados em Configurações.",
    "connectToUse": "Conectar {{provider}} para modelos gratuitos",
    "configureApiKey": "Configurar API Key do {{provider}} para modelos gratuitos",
    "configureApiKeyTitle": "Ir para Configuração",
    "configureApiKeyConfirm": "Você será redirecionado para a página de Modelos para configurar a API Key do {{provider}}. Continuar?",
    "goToConfigure": "Ir para Configurar",
    "noModelsDiscovered": "Conectado. Carregando modelos...",
    "oauthTitle": "Conectar ao {{provider}}",
    "oauthDescription": "Uma nova janela do navegador será aberta para autorizar o acesso ao {{provider}}. A chave API será salva automaticamente.",
    "oauthContinue": "Continuar",
    "oauthWaiting": "Aguardando autorização...",
    "oauthWaitingDescription": "Por favor, conclua a autorização na janela do navegador.",
    "oauthConnected": "Conectado ao {{provider}} com sucesso",
    "oauthFailed": "Autorização falhou, tente novamente",
    "viewMore": "Ver mais ({{count}})"
  },
  "tokenUsage": {
    "title": "Uso de Tokens",
    "description": "View LLM token consumption over time, by date and model.",
    "totalTokens": "Total Tokens",
    "totalCalls": "Total Calls",
    "promptTokens": "Prompt Tokens",
    "completionTokens": "Completion Tokens",
    "byModel": "By Modelo",
    "byDate": "By Date",
    "provider": "Provedor",
    "model": "Modelo",
    "date": "Date",
    "refresh": "Atualizar",
    "loadFailed": "Falha ao load token usage",
    "noData": "No token usage data in the selected period"
  },
  "agentStats": {
    "title": "Estatisticas dos Agentes",
    "description": "View agent statistics for the selected time period.",
    "totalSessions": "Total Sessoes",
    "totalMessages": "Total Messages",
    "userMessages": "Usuario Messages",
    "assistantMessages": "Assistant Messages",
    "promptTokens": "Prompt Tokens",
    "completionTokens": "Completion Tokens",
    "llmCalls": "LLM Calls",
    "toolCalls": "Tool Calls",
    "channel": "Channel",
    "sessionCount": "Sessoes",
    "sessions": "Sessoes",
    "newSessions": "Novo Sessoes",
    "activeSessions": "Ativo Sessoes",
    "messages": "Messages",
    "messageTrend": "Message Trend",
    "sessionTrend": "Session Trend",
    "tokenTrend": "Token Trend",
    "llmAndToolTrend": "LLM & Tool Call Trend",
    "sessionsByChannel": "Sessoes by Channel",
    "messagesByChannel": "Messages by Channel",
    "totalSessionsTooltip": "Total chat sessions created, each session is an independent conversation context",
    "totalMessagesTooltip": "Total messages across all sessions, including both user and assistant messages",
    "promptTokensTooltip": "Total prompt tokens sent to the LLM",
    "completionTokensTooltip": "Total completion tokens generated by the LLM",
    "llmCallsTooltip": "Number of LLM API calls, each request counts as one call",
    "toolCallsTooltip": "Number of times the agent decided to invoke a tool; a single LLM call may produce multiple tool-use intents",
    "messageTrendTooltip": "Trend comparing user messages vs assistant messages",
    "sessionTrendTooltip": "Trend comparing new sessions vs active sessions; orange bars are sessions created that day, blue bars are sessions with messages that day",
    "tokenTrendTooltip": "Trend of prompt and completion token consumption",
    "llmAndToolTrendTooltip": "Trend comparing LLM calls vs tool-use intents",
    "sessionsByChannelTooltip": "Distribution of sessions by messaging channel; sessions without a channel are grouped under Console",
    "messagesByChannelTooltip": "Distribution of total messages by messaging channel",
    "loadFailed": "Falhou to load statistics",
    "noData": "No statistics data in the selected period",
    "retry": "Tentar novamente"
  },
  "models": {
    "llmConfiguration": "LLM Configuracao",
    "providersTitle": "Providers",
    "providersDescription": "Configure API keys and endpoints for each provider.",
    "llmTitle": "Modelos",
    "defaultLlm": "Padrao LLM",
    "llmDescription": "Set the global default LLM model from an authorized provider. You can choose a specific model for each Agent in the Chat page.",
    "configureProvider": "Configure {{name}}",
    "baseURL": "URL Base",
    "apiKey": "Chave da API",
    "advancedConfig": "Avancado Configuracao",
    "authMode": "Modo de Autenticação",
    "authModeApiKey": "API Key (x-api-key)",
    "authModeAuthToken": "Auth Token (Authorization: Bearer)",
    "customHeaders": "Cabeçalhos Personalizados",
    "customHeadersHint": "Adicionados a todas as requisições de API, ex: x-app: cli",
    "customHeaderKey": "Nome do Cabeçalho",
    "customHeaderValue": "Valor do Cabeçalho",
    "addHeader": "+ Adicionar Cabeçalho",
    "generateConfig": "Generation Parameters",
    "generateConfigHint": "Generation parameters expressed as a JSON object. They will be expanded and passed into the generation request (`openai.chat.completions` or `anthropic.messages`).",
    "generateConfigInvalidJson": "Please enter valid JSON",
    "generateConfigMustBeObject": "Generation parameters must be a JSON object",
    "modelAdvancedConfig": "Modelo Avancado Configuracao",
    "modelGenerateConfig": "Modelo Generation Parameters",
    "modelGenerateConfigHint": "Generation parameters expressed as a JSON object for this model. They will be expanded and passed into the generation request. These override provider-level advanced configuration.",
    "modelConfigSaved": "Configuration saved for model {{name}}",
    "modelConfigSaveFailed": "Falha ao Salvar Modelo Configuracao",
    "modelConfigLabel": "Modelo Configuracao",
    "maxTokensLabel": "Máx. Tokens",
    "maxTokensHint": "Número máximo de tokens de saída por resposta",
    "maxInputLengthLabel": "Comprimento Máximo do Contexto",
    "maxInputLengthHint": "Tamanho da janela de contexto do modelo, controla o limite de compactação do contexto (≥1000)",
    "relayReasoningLabel": "Retransmitir Raciocínio",
    "relayReasoningHint": "Retransmitir o conteúdo de raciocínio para os turnos de conversa subsequentes",
    "thinkingModeLabel": "Ativar Pensamento",
    "thinkingModeHint": "Ative para habilitar pensamento/raciocínio. Desative para desabilitar o pensamento.",
    "thinkingBudgetLabel": "Orçamento de Pensamento",
    "thinkingBudgetHint": "Usando orçamento de pensamento padrão do modelo",
    "switchToManual": "Manual",
    "switchToAuto": "Auto",
    "reasoningEffortLabel": "Profundidade de Raciocínio",
    "reasoningEffortHint": "Controla a profundidade do raciocínio (família OpenAI)",
    "protocol": "Protocol",
    "protocolHint": "Choose the provider API protocol for this configuration.",
    "selectProtocol": "Please Selecionar a protocol",
    "protocolOpenAI": "OpenAI-compatible (Chat Completions)",
    "protocolOpenAIResponse": "OpenAI-compatible (Response API)",
    "protocolAnthropic": "Anthropic (Messages API)",
    "currentKey": "Current: {{key}}",
    "startsWith": "Starts with \"{{prefix}}\"",
    "optionalSelfHosted": "Opcional for self-hosted services",
    "leaveBlankKeep": "Leave blank to keep current key",
    "enterApiKey": "Enter API Chave ({{prefix}}...)",
    "enterApiKeyOptional": "Enter API Chave (optional)",
    "openAIEndpoint": "OpenAI endpoint, e.g. https://api.openai.com/v1",
    "openAICompatibleEndpoint": "OpenAI-compatible endpoint, e.g. https://api.example.com (append /v1 only if your provider requires it)",
    "azureEndpointHint": "Azure OpenAI endpoint, e.g. https://<resource>.openai.azure.com/openai/v1",
    "anthropicEndpointHint": "Anthropic endpoint, e.g. https://api.anthropic.com",
    "ollamaEndpointHint": "Ollama endpoint, e.g. http://localhost:11434",
    "lmstudioEndpointHint": "LM Studio endpoint, e.g. http://localhost:1234/v1",
    "apiEndpointHint": "API endpoint, e.g. https://api.example.com",
    "pleaseEnterBaseURL": "Digite the API base URL",
    "selectBaseURL": "Selecione uma URL base",
    "selectBaseURLHint": "Selecione o endpoint regional deste provedor",
    "pleaseEnterValidURL": "Digite a valid URL",
    "apiKeyShouldStart": "API Key should start with \"{{prefix}}\"",
    "configurationSaved": "{{name}} Configuracao saved",
    "failedToSaveConfig": "Falhou to Salvar Configuracao",
    "revokeAuthorization": "Revoke Autorizacao",
    "revokeConfirmContent": "Are you sure you want to remove the API key for {{name}}? The current LLM model configuration will also be cleared.",
    "revokeConfirmSimple": "Are you sure you want to remove the API key for {{name}}?",
    "authorizationRevoked": "{{name}} authorization revoked, LLM model cleared",
    "authorizationRevokedSimple": "{{name}} Autorizacao revoked",
    "failedToRevoke": "Falhou to revoke Autorizacao",
    "active": "Active: {{provider}} / {{model}}",
    "provider": "Provedor",
    "model": "Modelo",
    "selectProvider": "Select provider (must be authorized)",
    "selectModel": "Selecionar a Modelo",
    "llmModelUpdated": "LLM Modelo Atualizado",
    "failedToSave": "Falhou to Salvar",
    "freeModelWarningTitle": "Aviso sobre Modelo Gratuito",
    "freeModelWarningMessage": "Modelos gratuitos podem ser instáveis. Consulte os termos de serviço do provedor:",
    "freeModelWarningDontShowAgain": "Do not show this again",
    "saved": "Saved",
    "save": "Salvar",
    "cancel": "Cancelar",
    "loading": "Carregando...",
    "retry": "Tentar novamente",
    "notSet": "Nao definido",
    "notRequired": "Nao necessario",
    "available": "Available",
    "unavailable": "Unavailable",
    "providerAvailable": "Ready (with models)",
    "providerNoModels": "Not Ready (no models)",
    "providerNotConfigured": "Not Ready (not configured)",
    "settings": "Configuracoes",
    "actions": "Acoes",
    "search": "Pesquisar",
    "searchPlaceholder": "Pesquisar providers...",
    "searchModelPlaceholder": "Pesquisar models...",
    "custom": "Personalizado",
    "builtin": "Integrado",
    "freeTierGroup": "Gratuito",
    "paidGroup": "Pago",
    "localCustomGroup": "Local e Personalizado",
    "endpointCount": "{{count}} endpoints",
    "connect": "OAuth",
    "saveApiKey": "Salvar",
    "addProvider": "Adicionar Provedor",
    "addProviderTitle": "Adicionar Personalizado Provedor",
    "providerIdLabel": "Provedor ID",
    "providerIdPlaceholder": "e.g. openai, google, anthropic",
    "providerIdHint": "Lowercase letters, digits, hyphens, underscores. Cannot be changed later.",
    "providerNameLabel": "Display Nome",
    "providerNamePlaceholder": "e.g. OpenAI, Google Gemini",
    "defaultBaseUrlLabel": "Padrao Base URL",
    "defaultBaseUrlPlaceholder": "e.g. https://api.example.com",
    "apiKeyPrefixLabel": "API Chave Prefix (optional)",
    "apiKeyPrefixPlaceholder": "e.g. sk-",
    "providerCreated": "Provedor \"{{name}}\" Criado",
    "providerCreateFailed": "Falhou to Criar Provedor",
    "deleteProvider": "Excluir Provedor",
    "deleteProviderConfirm": "Delete custom provider \"{{name}}\" and all its models? This cannot be undone.",
    "providerDeleted": "Provedor \"{{name}}\" deleted",
    "providerDeleteFailed": "Falhou to Excluir Provedor",
    "manageModels": "Modelos",
    "models": "Modelos",
    "manageModelsTitle": "{{provider}} — Modelo Management",
    "userAdded": "User-added",
    "addModel": "Adicionar Modelo",
    "addModels": "Adicionar Modelos",
    "autoDiscoverModels": "Automatico Discover Modelos",
    "addModelTitle": "Adicionar Modelo to {{provider}}",
    "modelIdLabel": "Modelo ID",
    "modelIdPlaceholder": "e.g. gpt-4o, gemini-2.0-flash",
    "modelDiscoveryUnavailableHint": "No available models were found. This provider may not support model list discovery, so please enter the model ID manually.",
    "modelNameLabel": "Modelo Nome",
    "modelNameRequired": "Please enter Modelo Nome",
    "modelNamePlaceholder": "e.g. GPT-4o, Gemini 2.0 Flash",
    "modelAdded": "Modelo \"{{name}}\" added",
    "modelAddFailed": "Falhou to Adicionar Modelo",
    "modelAlreadyExists": "Modelo ID \"{{id}}\" ja existe",
    "autoDiscoverModelsSuccess": "Auto discovery complete. Added {{count}} models",
    "autoDiscoverModelsNoNew": "Auto discovery complete. No new models were added",
    "autoDiscoverModelsFailed": "Falha ao Automatico discover Modelos",
    "removeModel": "Remover",
    "removeModelConfirm": "Remove model \"{{name}}\" from {{provider}}?",
    "modelRemoved": "Modelo \"{{name}}\" removed",
    "modelRemoveFailed": "Falhou to Remover Modelo",
    "loadMore": "Carregar mais ({{count}})",
    "modelsCount": "{{count}} Modelos",
    "noModels": "Nao Modelos",
    "addModelFirst": "Please add a model first",
    "modelList": "Modelo List",
    "clearAll": "Limpar Todos",
    "filteredModelsLoaded": "Filtered Modelos loaded: {{count}}",
    "filterFailed": "Falhou to Filtrar Modelos",
    "clearAllModels": "Limpar Todos Modelos",
    "clearAllModelsConfirm": "Clear all {{count}} extra models? This cannot be undone.",
    "allModelsCleared": "Cleared {{count}} Modelos",
    "filterModels": "Filtrar Modelos",
    "filterByProvider": "Provider:",
    "searchProviderPlaceholder": "Pesquisar Provedor Nome",
    "selectAllProviders": "Selecionar Todos",
    "clearProviderSelection": "Deselect Todos",
    "noMatchingProviders": "Nao matching providers",
    "filterByModality": "Input Modality:",
    "filterFreeOnly": "Free Modelos Only:",
    "getModels": "Get Modelos",
    "discovered": "Available Models:",
    "add": "Adicionar",
    "local": "Local",
    "localType": "Tipo",
    "localEmbedded": "Embedded (in-process)",
    "localDownloadFirst": "Modelo service not started",
    "localDownloadModel": "Baixar Modelo",
    "localModelsTitle": "{{provider}} — Local Modelos",
    "localNoModels": "Nao downloaded Modelos yet",
    "localRepoId": "Modelo Repository ID",
    "localRepoIdRequired": "Digite a Modelo repository ID",
    "localRepoIdPlaceholder": "e.g. Qwen/Qwen3-0.6B-GGUF",
    "localFilename": "Filename (optional)",
    "localFilenamePlaceholder": "e.g. mistral-7b.Q4_K_M.gguf",
    "localFilenameHint": "Leave empty to auto-select the best quantization",
    "localSource": "Origem",
    "localDownloadSuccess": "Modelo downloaded successfully",
    "localDownloadFailed": "Falhou to Baixar Modelo",
    "localDeleteModel": "Excluir Modelo",
    "localDeleteConfirm": "Delete local model \"{{name}}\"? The model file will be removed from disk.",
    "localModelDeleted": "Modelo \"{{name}}\" deleted",
    "localDeleteFailed": "Falhou to Excluir Modelo",
    "localDownloadPending": "Preparing to download...",
    "localDownloading": "Downloading {{repo}}... This may take a few minutes.",
    "localDownloadNavigateHint": "You can navigate away — the download will continue in the background.",
    "localDownloadInProgress": "A download is already in progress",
    "localDownloaded": "Downloaded",
    "localNotDownloaded": "Not downloaded",
    "localNoRecommendedModels": "This device is not powerful enough to run local models",
    "localCancelDownloadTitle": "Cancelar Baixar",
    "localCancelDownloadAction": "Cancelar Baixar",
    "localCancelDownloadConfirm": "Cancelar Baixar of \"{{repo}}\"?",
    "localDownloadCancelled": "Baixar cancelled",
    "localCancelDownloadFailed": "Falhou to Cancelar Baixar",
    "localLlamacppName": "Inferencia engine",
    "localLlamacppInstallHint": "Install the local runtime before downloading or starting a model.",
    "localInstallLlamacpp": "Install llama.cpp",
    "localLlamacppInstallStarted": "llama.cpp Baixar started",
    "localLlamacppInstallSuccess": "llama.cpp installed successfully",
    "localLlamacppInstallFailed": "Falhou to install llama.cpp",
    "localRuntimeSectionTitle": "Inferencia Engine",
    "localRuntimeSectionDescription": "Powered by Llama.cpp",
    "localRuntimeComputeHint": "CPU is used by default. For GPU acceleration, use Ollama or LM Studio.",
    "localRuntimeInstalled": "Installed",
    "localRuntimeUpdateAvailable": "Atualizar available",
    "localRuntimeUpdateAction": "Click to download the latest version",
    "localRuntimeUpdateConfirmTitle": "Confirmar llama.cpp Atualizar",
    "localRuntimeUpdateConfirmContent": "Updating will overwrite the currently installed llama.cpp version. Confirm to start downloading and installing the latest version.",
    "localRuntimeUpdateConfirmContentWithServer": "Updating will overwrite the currently installed llama.cpp version and stop the currently running model service ({{model}}). Confirm to start downloading and installing the latest version.",
    "localRuntimeUnsupported": "Unsupported",
    "localRuntimeMissing": "Missing",
    "localServerRunningTitle": "Atual local server",
    "localServerOnline": "Executando",
    "localServerIdle": "Dead",
    "localServerUnavailable": "Issue",
    "localNoActiveModel": "Nao Ativo Modelo",
    "localNoDownloadedModelsHint": "Download a suitable model before starting the local inference service.",
    "localDownloadModelFirst": "Baixar the Modelo first",
    "localEngineInstallStateLabel": "Install",
    "localEngineRunStateLabel": "Status",
    "localEngineCurrentModelLabel": "Atual served Modelo",
    "localEngineNextStepLabel": "Proximo step",
    "localEngineHealthLabel": "Engine health",
    "localEngineStatusHint": "Please download and start a suitable model from the list below",
    "localStartServer": "Iniciar",
    "localStopServer": "Parar",
    "localServerStartFailed": "Falha ao Iniciar local server",
    "localServerStopFailed": "Falha ao Parar local server",
    "localServerSwitchTitle": "Switch Executando Modelo",
    "localServerSwitchConfirm": "The current server is running {{current}}. Switch to {{next}}?",
    "localSwitchModel": "Switch",
    "localModelPathMissing": "This downloaded model is missing a local path.",
    "localModelsSectionTitle": "Local Modelos",
    "localModelsSectionDescription": "Downloaded models can be started immediately. Only one model download and one local server instance can run at a time.",
    "localModelsLockedHint": "Please install llama.cpp first",
    "localAlternativeRuntimeHint": "Please try Ollama or LM Studio",
    "localModelsCount": "Downloaded {{downloaded}} / {{total}}",
    "localCurrentDownloadTitle": "Atual Baixar",
    "localAdvancedConfigTitle": "Avancado Local Configuracoes",
    "localAdvancedConfigDescription": "These settings apply to the embedded local inference runtime. Max context length changes take effect the next time the local server starts.",
    "localAdvancedConfigSaved": "Avancado local Configuracoes saved",
    "localAdvancedConfigSaveFailed": "Falha ao Salvar Avancado local Configuracoes",
    "localMaxContextLengthLabel": "Max Context Length",
    "localMaxContextLengthHint": "Maximum token count for the model context window, determining how much history fits in each request. Changes take effect the next time the local server starts.",
    "localMaxContextLengthRequired": "Digite max context length",
    "localMaxContextLengthMin": "Max context length must be at least {{min}}",
    "localMaxContextLengthPlaceholder": "Enter max context length",
    "localServerPortLabel": "Server Port",
    "localServerPortHint": "Leave this empty to let llama.cpp bind an available port automatically. Enter a port to reuse that fixed port on future startups. Changes take effect the next time the local server starts.",
    "localServerPortRange": "Server port must be between {{min}} and {{max}}",
    "localServerPortPlaceholder": "Leave empty to auto-select a port",
    "localGenerateConfigHint": "Configure local model generation parameters as a JSON object. These fields will be expanded into subsequent generation requests.",
    "localCustomModelTitle": "Personalizado Modelo Baixar",
    "localCustomModelHint": "Enter a model repository ID. GGUF format only.",
    "localSourceHuggingFace": "Hugging Face",
    "localSourceModelScope": "ModelScope",
    "ollamaModelNamePlaceholder": "e.g. mistral:7b, qwen3:8b",
    "testConnection": "Testar Connection",
    "testConnectionSuccess": "Connection Testar successful",
    "testConnectionFailed": "Connection Testar Falhou",
    "testConnectionFailedWithMessage": "Connection Testar failed: {{message}}",
    "testConnectionError": "An error occurred while testing connection",
    "discoverModels": "Discover Modelos",
    "discoverModelsFailed": "Falhou to discover Modelos",
    "ollamaFetchModelsFailed": "Failed to fetch Ollama models. Please check the error details.",
    "modelTestFailed": "Model validation failed, please check if the model ID is correct",
    "modelTestFailedConfirm": "Model connection test failed: {{message}}. Do you still want to add this model?",
    "autoDiscoveredAndAdded": "Auto-discovered {{count}} models and added {{added}} new model(s)",
    "autoDiscoveredNoNew": "Auto-discovered {{count}} models; model list is already up to date",
    "autoDiscoverFailed": "Automatic model discovery failed; you can add models manually",
    "tagImage": "Image",
    "tagVideo": "Video",
    "tagTextOnly": "Text Only",
    "tagMultimodal": "Multimodal",
    "tagVision": "Vision",
    "tagText": "Text",
    "free": "Free",
    "probeMultimodal": "Testar Multimodal",
    "probeImage": "Image",
    "probeVideo": "Video",
    "probeSupported": "Supported: {{types}}",
    "probeNotSupported": "This model does not support multimodal input",
    "probeFailed": "Probe Falhou",
    "tagNotProbed": "Not Probed",
    "modalityVision": "Image",
    "modalityAudio": "Audio",
    "modalityVideo": "Video",
    "modalityFile": "File",
    "modalityText": "Text only",
    "perMillionIn": "/1M in",
    "perMillionOut": "/1M out"
  },
  "agentConfig": {
    "title": "Configuracao",
    "description": "Configure Agente runtime parameters",
    "reactAgentTitle": "React Agente",
    "llmRetryTitle": "LLM Automatico Tentar novamente",
    "llmRetryEnabled": "Ativar Automatico Tentar novamente",
    "llmRetryEnabledTooltip": "Automatically retry transient LLM API failures such as rate limits, timeouts, or connection errors. Applies to new requests after saving.",
    "llmMaxRetries": "Max Retries",
    "llmMaxRetriesTooltip": "Maximum number of extra retry attempts for a retryable LLM request failure.",
    "llmMaxRetriesPlaceholder": "Enter max retries",
    "llmMaxRetriesRequired": "Max retries is Obrigatorio",
    "llmMaxRetriesMin": "Max retries must be at least 1",
    "llmBackoffBase": "Backoff Base Delay (s)",
    "llmBackoffBaseTooltip": "Base delay before the first retry. Later retries use exponential backoff from this value.",
    "llmBackoffBasePlaceholder": "Enter base delay",
    "llmBackoffBaseRequired": "Backoff base delay e obrigatorio",
    "llmBackoffBaseMin": "Backoff base delay must be at least 0.1 seconds",
    "llmBackoffCap": "Backoff Max Delay (s)",
    "llmBackoffCapTooltip": "Maximum cap for exponential retry backoff delays.",
    "llmBackoffCapPlaceholder": "Enter max delay",
    "llmBackoffCapRequired": "Backoff max delay e obrigatorio",
    "llmBackoffCapMin": "Backoff max delay must be at least 0.5 seconds",
    "llmBackoffCapGteBase": "Backoff max delay must be greater than or equal to the base delay",
    "llmRateLimiterTitle": "LLM Rate Limiter",
    "llmMaxConcurrent": "Max Concurrent Calls",
    "llmMaxConcurrentTooltip": "Maximum number of LLM calls allowed in-flight at the same time. Shared across all agents; only the first initialization takes effect until restart.",
    "llmMaxConcurrentPlaceholder": "Enter max concurrent calls",
    "llmMaxConcurrentRequired": "Max concurrent calls e obrigatorio",
    "llmMaxConcurrentRange": "Max concurrent calls must be at least 1",
    "llmMaxQpm": "Max QPM (Queries Per Minute)",
    "llmMaxQpmTooltip": "Maximum requests allowed within a 60-second sliding window. Requests exceeding this limit wait before being dispatched — proactively preventing 429 rate-limit errors. 0 = disabled.",
    "llmMaxQpmPlaceholder": "Enter max QPM (0 = unlimited)",
    "llmMaxQpmRequired": "Max QPM is Obrigatorio",
    "llmMaxQpmRange": "Max QPM must be at least 0",
    "llmRateLimitPause": "Rate Limite Pause (s)",
    "llmRateLimitPauseTooltip": "Default pause duration (seconds) applied globally when a 429 rate-limit response is received. Overridden by the API's Retry-After header when present.",
    "llmRateLimitPausePlaceholder": "Enter pause duration",
    "llmRateLimitPauseRequired": "Rate Limite pause e obrigatorio",
    "llmRateLimitPauseMin": "Rate limit pause must be at least 1 second",
    "llmRateLimitJitter": "Rate Limite Jitter (s)",
    "llmRateLimitJitterTooltip": "Random jitter range (seconds) added on top of the pause so concurrent waiters stagger their wake-up and avoid a new burst.",
    "llmRateLimitJitterPlaceholder": "Enter jitter range",
    "llmRateLimitJitterRequired": "Rate Limite jitter e obrigatorio",
    "llmRateLimitJitterMin": "Rate limit jitter must be at least 0 seconds",
    "llmAcquireTimeout": "Slot Acquire Tempo limite (s)",
    "llmAcquireTimeoutTooltip": "Maximum time (seconds) a caller will wait to acquire a rate-limiter slot before giving up with an error.",
    "llmAcquireTimeoutPlaceholder": "Enter acquire Tempo limite",
    "llmAcquireTimeoutRequired": "Slot acquire Tempo limite e obrigatorio",
    "llmAcquireTimeoutMin": "Slot acquire timeout must be at least 10 seconds",
    "llmAcquireTimeoutGtPauseJitter": "Slot acquire timeout must be greater than rate limit pause + jitter",
    "contextManagementTitle": "Context Management",
    "memoryManagerBackend": "Backend de gerenciamento de memória de longo prazo",
    "memoryManagerBackendTooltip": "Backend para o gerenciador de memória. Escolha remelight (arquivos locais) ou adbpg (banco de dados na nuvem).",
    "memoryManagerBackendRestartWarning": "A troca do backend de gerenciamento de memória de longo prazo não permite recarregamento a quente. Salve e reinicie o QwenPaw para aplicar as alterações.",
    "maxIters": "Max Iterations",
    "maxItersTooltip": "Maximum number of reasoning-acting iterations for ReAct agent",
    "maxItersPlaceholder": "Enter max iterations",
    "maxItersRequired": "Max iterations is Obrigatorio",
    "maxItersMin": "Max iterations must be at least 1",
    "agentLoopTitle": "Configurações de Loop do Agente",
    "loopMode": {
      "builtIn": "Integrado",
      "builtInNote": "Pipeline bloqueado · Valores editáveis",
      "templateSectionTitle": "Modelos de Loop",
      "templateSectionDescription": "Escolha um modelo integrado ou adicione o seu.",
      "defaultTab": "Padrão",
      "goalTab": "Meta",
      "missionTab": "Missão",
      "defaultDescription": "Loop ReAct protegido padrão usado fora de um modo explícito.",
      "goalDescription": "Loop persistente e limitado para metas verificáveis.",
      "missionDescription": "Pipeline persistente para missões longas e com várias etapas.",
      "gatePipeline": "Pipeline de Gates",
      "repetitionTitle": "Proteção contra repetição",
      "repetitionDescription": "Detecta chamadas repetidas e intervém.",
      "iterationTitle": "Limite de iterações",
      "iterationDescription": "Limita o número de iterações ReAct.",
      "retryTitle": "Verificação qualitativa de conclusão",
      "retryDescription": "Acionada somente quando o agente produz uma resposta de texto sem chamadas de ferramentas.",
      "goalTurnTitle": "Limite de turnos da meta",
      "goalTurnDescription": "Limita os turnos em uma meta ativa.",
      "maxGoalTurns": "Máximo de turnos da meta",
      "goalBudgetTitle": "Orçamento de tokens da meta",
      "goalBudgetDescription": "Para quando a meta completa atinge o orçamento.",
      "maxGoalTokens": "Máximo de tokens da meta",
      "goalCompletionTitle": "Verificação de conclusão da meta",
      "goalCompletionDescription": "Lê o status explícito da meta antes de parar.",
      "goalCompletionReadOnly": "A conclusão é controlada pelo protocolo integrado de status da meta.",
      "missionProgressTitle": "Verificação do progresso da missão",
      "missionProgressDescription": "Continua até as histórias passarem ou atingir o limite.",
      "missionProgressReadOnly": "A conclusão é controlada pelo status integrado das Stories da Mission.",
      "missionIterationTitle": "Limite de iterações da Mission",
      "missionIterationDescription": "Defina o limite de execução padrão para novas Missions.",
      "workerAttemptsTitle": "Tentativas do Worker",
      "workerAttemptsDescription": "Limite as novas tentativas do Worker após uma Story falhar na verificação.",
      "missionVerificationTitle": "Política de verificação da Mission",
      "missionVerificationDescription": "Defina a orientação de verificação e o comando de teste padrão.",
      "defaultMaxMissionIterations": "Máximo padrão de rodadas de execução",
      "defaultMaxMissionIterationsTooltip": "Usado quando /mission não especifica --max-iterations.",
      "maxRetriesPerStory": "Máximo de tentativas por Story",
      "maxRetriesPerStoryTooltip": "Tentativas do Worker após resultado FAIL ou PARTIAL do Verifier.",
      "defaultVerificationInstructions": "Orientações de verificação (opcional)",
      "defaultVerificationInstructionsHelp": "Orientações em linguagem natural aplicadas a cada Mission Verifier.",
      "defaultVerificationInstructionsPlaceholder": "Por exemplo: verifique caminhos do Windows e a interface renderizada.",
      "defaultVerifyCommand": "Comando de teste padrão (opcional)",
      "defaultVerifyCommandHelp": "O Verifier tenta executá-lo com ferramentas e permissões normais. /mission --verify substitui o valor.",
      "defaultVerifyCommandPlaceholder": "Por exemplo: pytest -q",
      "enableRepetitionProtection": "Ativar proteção contra repetição",
      "removeRule": "Remover regra",
      "custom": "Personalizado",
      "customDescription": "Crie um pipeline salvo com Gates integrados do QwenPaw.",
      "duplicate": "Duplicar",
      "delete": "Excluir",
      "displayName": "Nome de exibição",
      "duplicateModeName": "Já existe um modo de Loop com este nome.",
      "slashCommand": "Comando com barra",
      "description": "Descrição",
      "availableToAgent": "Disponível para este agente",
      "runsTopToBottom": "Executa de cima para baixo",
      "addGate": "Adicionar Gate",
      "emptyPipeline": "Adicione ao menos um Gate para disponibilizar este modo.",
      "iterationGateTitle": "Limite de iterações",
      "iterationGateDescription": "Para após um número fixo de iterações do Loop.",
      "doomGateTitle": "Proteção contra repetição",
      "doomGateDescription": "Detecta chamadas repetidas e muda a estratégia.",
      "tokenGateTitle": "Orçamento de tokens",
      "tokenGateDescription": "Limita o uso de tokens de entrada e saída.",
      "timeoutGateTitle": "Limite de tempo do Loop",
      "timeoutGateDescription": "Para no próximo limite do Loop após o tempo, sem interromper o trabalho em execução.",
      "toolBudgetGateTitle": "Orçamento de chamadas de ferramentas",
      "toolBudgetGateDescription": "Limita todas as chamadas e ferramentas selecionadas.",
      "retryGateTitle": "Revisão de parada antecipada",
      "retryGateDescription": "Pede ao agente para verificar antes de encerrar.",
      "rubricGateTitle": "Rubrica de conclusão",
      "rubricGateDescription": "Avalia critérios explícitos e revisa quando necessário.",
      "qualitativeRubricTitle": "Verificação qualitativa de conclusão",
      "qualitativeRubricDescription": "Verifica respostas de texto sem chamadas de ferramentas usando critérios em linguagem natural.",
      "qualitativeRubric": "Critérios de conclusão em linguagem natural",
      "qualitativeRubricHelp": "Acionada somente para respostas de texto sem chamadas de ferramentas; o agente continua se ainda houver trabalho.",
      "completionRubricTitle": "Verificação do sinal de conclusão",
      "completionRubricDescription": "Verifica o sinal de conclusão em respostas de texto sem chamadas de ferramentas.",
      "completionRubricHelp": "Acionada após respostas de texto sem chamadas de ferramentas. O agente produz o sinal de conclusão quando termina; caso contrário, continua trabalhando até atingir o máximo de rodadas de avaliação.",
      "completionPrompt": "Prompt de verificação da conclusão",
      "completionPromptHelp": "Descreva quando o resultado está completo. O QwenPaw injeta automaticamente a instrução de saída do sinal de conclusão.",
      "completionSignal": "Sinal de conclusão",
      "completionSignalHelp": "O QwenPaw injeta este sinal e a instrução para produzir somente ele no prompt de verificação. Somente uma correspondência exata, sem diferenciar maiúsculas e após remover espaços, encerra o Loop.",
      "removeCriterion": "Remover critério {{number}}",
      "totalTokensHelp": "Limite combinado de tokens de entrada e saída usados neste turno.",
      "promptTokensHelp": "Inclui instruções do sistema, contexto da conversa, esquemas e resultados de ferramentas.",
      "completionTokensHelp": "Limite de tokens gerados pelo modelo neste turno.",
      "maxIterations": "Máximo de iterações",
      "historyWindow": "Janela de histórico",
      "similarityThreshold": "Limite de similaridade",
      "totalTokens": "Máximo de tokens totais",
      "promptTokens": "Máximo de tokens de entrada",
      "completionTokens": "Máximo de tokens de saída",
      "maxSeconds": "Máximo de segundos",
      "maxSecondsHelp": "O tempo é verificado após a resposta do modelo ou chamada de ferramenta atual terminar. O trabalho em execução não é interrompido.",
      "allToolCalls": "Todas as chamadas de ferramentas",
      "perToolLimits": "Limites por ferramenta",
      "toolName": "Nome da ferramenta",
      "callLimitAria": "Limite de chamadas de {{name}}",
      "removeToolLimitAria": "Remover limite de {{name}}",
      "addToolLimit": "Adicionar limite por ferramenta",
      "maxRetries": "Máximo de tentativas",
      "retryInstruction": "Instrução de nova tentativa",
      "passThreshold": "Limite de aprovação",
      "maxEvaluations": "Máximo de rodadas de avaliação",
      "graderError": "Erro do avaliador",
      "stopSafely": "Parar com segurança",
      "verifyOnceMore": "Verificar mais uma vez",
      "completionCriteria": "Critérios de conclusão",
      "criterionPlaceholder": "Descreva uma conclusão observável",
      "required": "Obrigatório",
      "weight": "Peso",
      "addCriterion": "Adicionar critério",
      "moveGateAria": "Mover {{title}}",
      "removeGate": "Remover Gate",
      "newModeName": "Novo modo de Loop",
      "defaultCustomDescription": "Um pipeline de Gates personalizado.",
      "copyName": "Cópia de {{name}}",
      "createModeAria": "Criar modo de Loop personalizado",
      "createModeTitle": "Criar modo de Loop personalizado",
      "startingTemplate": "Modelo inicial",
      "startingPipeline": "Pipeline inicial",
      "blankPipelineHint": "Comece vazio e adicione gates depois",
      "safeTemplate": "Execução segura",
      "researchTemplate": "Pesquisa com orçamento",
      "qualityTemplate": "Qualidade primeiro",
      "blankTemplate": "Pipeline vazio"
    },
    "doomLoopEnabled": "Proteção contra Repetição",
    "doomLoopEnabledTooltip": "Intervir automaticamente quando o agente fica preso repetindo as mesmas ações",
    "doomLoopAfter": "Após",
    "doomLoopRepetitions": "ações idênticas",
    "doomLoopStopAction": "Pausar e Pedir Ajuda",
    "doomLoopWarnAction": "Enviar Lembrete",
    "doomLoopSimpleMode": "Simples",
    "doomLoopAdvancedMode": "Avançado",
    "doomLoopWindowSize": "Alcance de Detecção",
    "doomLoopWindowSizeTooltip": "Quantas ações recentes verificar para repetição",
    "doomLoopSimilarity": "Sensibilidade de Correspondência",
    "doomLoopSimilarityTooltip": "Quão similares as ações devem ser para contar como repetição (menor = mais rigoroso)",
    "doomLoopStages": "Regras de Intervenção",
    "doomLoopAction": "Ação",
    "doomLoopPrompt": "Mensagem",
    "doomLoopPromptPlaceholder": "Mensagem de lembrete ou motivo da pausa...",
    "doomLoopAddStage": "Adicionar Regra",
    "iterationTitle": "Limite de Iteração",
    "iterationEnabled": "Ativar Limite de Iteração",
    "iterationEnabledTooltip": "Parar o agente após um número fixo de turnos de loop",
    "iterationMaxIterations": "Iterações Máximas",
    "iterationMaxIterationsTooltip": "Número máximo de turnos de loop antes de parar",
    "rubricTitle": "Verificação Qualitativa de Conclusão",
    "rubricEnabled": "Ativar Verificação Qualitativa de Conclusão",
    "rubricEnabledTooltip": "Acionada somente quando o agente produz uma resposta de texto sem chamadas de ferramentas.",
    "rubricPrompt": "Critérios de Conclusão em Linguagem Natural",
    "rubricPromptTooltip": "O prompt injetado para pedir ao agente que avalie a conclusão da tarefa",
    "rubricDesc": "Aplica critérios de conclusão em linguagem natural a respostas de texto sem chamadas de ferramentas e pede ao agente para continuar se ainda houver trabalho.",
    "rubricPromptPlaceholder": "Você não chamou nenhuma ferramenta. Se a tarefa está completa, confirme. Caso contrário, continue com chamadas de ferramentas.",
    "rubricMaxInterventions": "Máximo de Rodadas de Avaliação",
    "rubricMaxInterventionsTooltip": "Máximo de verificações de conclusão para respostas de texto sem chamadas de ferramentas em um turno.",
    "inLoopModes": "Ativar nos modos /goal e /mission",
    "inLoopModesTooltip": "Também aplicar quando o modo /goal ou /mission estiver ativo",
    "comingSoonEditable": "Configuração personalizada estará disponível em uma versão futura.",
    "simpleMode": "Simples",
    "advancedMode": "Avançado",
    "comingSoon": "Em breve",
    "reactModeTab": "Modelo Loop - Padrão",
    "goalModeTab": "Modelo Loop - Goal",
    "missionModeTab": "Modelo Loop - Mission",
    "goalModeInfoTitle": "Modo Goal vs Padrão",
    "goalModeInfo": "O modo padrão para após produzir uma resposta. O modo Goal mantém o agente em loop em direção a um objetivo, usando avaliação Rubric para determinar a conclusão. Todas as operações são executadas no contexto atual do agente.",
    "missionModeInfoTitle": "Modo Mission vs Goal",
    "missionModeInfo": "O modo Mission auto-decompõe tarefas complexas em subtarefas, executadas por sub-agentes Worker independentes e verificadas por sub-agentes Verifier. Cada subtarefa é executada em seu próprio contexto, evitando poluição da sessão principal.",
    "goalIterationGate": "Gate de Iteração de Objetivo",
    "goalIterationGateDesc": "Limita o número de turnos do agente em uma sessão de objetivo, rastreando iterações e uso de tokens.",
    "goalBudgetGate": "Gate de Orçamento de Tokens",
    "goalBudgetGateDesc": "Define um limite de gasto de tokens para a sessão de objetivo. Para o agente quando o orçamento é excedido.",
    "goalRubricGate": "Rubrica de Conclusão de Objetivo",
    "goalRubricGateDesc": "Avalia se o objetivo foi alcançado verificando o status da sessão.",
    "goalDoomGate": "Proteção contra Repetição",
    "goalDoomGateDesc": "Detecta padrões repetitivos durante a execução do objetivo e aciona intervenção.",
    "missionProgressGate": "Gate de Progresso da Missão",
    "missionProgressGateDesc": "Rastreia a conclusão das user stories do PRD. Continua até que todas passem ou o máximo de iterações seja atingido.",
    "missionIterBypass": "Bypass de Iteração",
    "missionIterBypassDesc": "Remove temporariamente o limite de iteração do ReAct durante a execução da missão para permitir fases longas.",
    "customLoopTitle": "Modos de Loop Personalizados",
    "customLoopDesc": "Crie seus próprios modos de loop com combinações personalizadas de gates. Em breve.",
    "autoContinueOnTextOnly": "Auto-continue Ligado text-only step",
    "autoContinueOnTextOnlyTooltip": "If the model ends a reasoning step with only text (no tool calls), inject a hint and run one extra reasoning pass with the same tool policy so multi-step tasks are less likely to stop silently. Turn off to match legacy behavior. May increase token usage when enabled.",
    "shellCommandTimeout": "Shell Command Tempo limite (s)",
    "shellCommandTimeoutTooltip": "Default timeout in seconds for the execute_shell_command tool. The LLM can still override this per-call via the timeout parameter. Useful for long-running tasks like compilation or data processing.",
    "shellCommandTimeoutPlaceholder": "Enter Tempo limite",
    "shellCommandTimeoutRequired": "Shell command Tempo limite e obrigatorio",
    "shellCommandTimeoutMin": "Shell command timeout must be at least 1 second",
    "shellCommandExecutable": "Shell Executável",
    "shellCommandExecutableTooltip": "Caminho para o shell usado pelo execute_shell_command. Linux/macOS: ex. /bin/bash, /bin/zsh. Windows: suporta powershell.exe, pwsh.exe ou shells POSIX como Git Bash. Quando vazio, usa a variável de ambiente $SHELL, depois o padrão da plataforma (/bin/sh no Unix, cmd.exe no Windows).",
    "shellCommandExecutablePlaceholder": "ex.: /bin/bash ou powershell.exe (vazio = detecção automática)",
    "maxInputLength": "Max Input Length",
    "maxInputLengthTooltip": "Maximum input length (tokens) for the model context window",
    "maxInputLengthPlaceholder": "Enter max input length",
    "maxInputLengthRequired": "Max input length e obrigatorio",
    "maxInputLengthMin": "Max input length must be at least 1000",
    "contextCompactRatio": "Compaction Threshold Ratio",
    "contextCompactRatioTooltip": "Compaction is triggered when the context length reaches this fraction of the max context length",
    "contextCompactRatioRequired": "Context compact ratio e obrigatorio",
    "contextCompactThreshold": "Compaction Threshold (tokens)",
    "contextCompactThresholdTooltip": "Auto-calculated from max context length × compaction ratio. Compaction triggers when context exceeds this value.",
    "contextCompactThresholdPlaceholder": "Auto-calculated",
    "contextCompactReserveRatio": "Reserve Threshold Ratio",
    "contextCompactReserveRatioTooltip": "Calculates the target recent-tail budget. Scroll also applies a minimum recent budget and a 40K cap, and always keeps the complete active turn.",
    "contextCompactReserveRatioRequired": "Context reserve ratio e obrigatorio",
    "contextCompactReserveThreshold": "Reserve Threshold (tokens)",
    "contextCompactReserveThresholdTooltip": "The effective target used to split the recent tail. This is a soft target; boundary messages and the complete active turn may increase the retained amount.",
    "contextCompactReserveThresholdPlaceholder": "Auto-calculated",
    "toolResultCompactRecentN": "Recent Tool Results Range",
    "toolResultCompactRecentNTooltip": "Number of recent tool-result-bearing messages that use the larger recent preview limit in Native context mode",
    "toolResultCompactRecentNRequired": "Recent tool results range e obrigatorio",
    "toolResultCompactOldThreshold": "Older Tool Result Preview Bytes",
    "toolResultCompactOldThresholdTooltip": "Maximum preview bytes for older tool results in Native context mode.",
    "toolResultCompactOldThresholdPlaceholder": "Enter preview byte limit",
    "toolResultCompactOldThresholdRequired": "Older tool result preview bytes is required",
    "toolResultCompactRecentThreshold": "Recent Tool Result Preview Bytes",
    "toolResultCompactRecentThresholdTooltip": "Maximum preview bytes before a tool result enters agent context. In Scroll mode, this also limits each recall_history page and read_file response.",
    "toolResultCompactRecentThresholdPlaceholder": "Enter preview byte limit",
    "toolResultCompactRecentThresholdRequired": "Recent tool result preview bytes is required",
    "toolResultCompactRetentionDays": "Complete Tool Result Retention Days",
    "toolResultCompactRetentionDaysTooltip": "Independent retention period for complete tool result artifacts. After cleanup, history.db may still retain a bounded preview.",
    "toolResultCompactRetentionDaysRequired": "Complete tool result retention days is required",
    "historyRetentionDays": "Dias de Retenção do Histórico",
    "historyRetentionDaysTooltip": "Dias de histórico de conversa persistente a manter. Linhas mais antigas são removidas automaticamente na inicialização e no encerramento do agente.",
    "historyRetentionDaysRequired": "Os dias de retenção do histórico são obrigatórios",
    "historyRetentionDaysForeverWarning": "Definir como 0 mantém o histórico para sempre — o armazenamento crescerá sem limite.",
    "historyRetentionDaysLargeWarning": "Um período de retenção grande pode consumir bastante armazenamento.",
    "exemptFileExtensions": "Exempt File Extensions",
    "exemptFileExtensionsTooltip": "In Native context mode, read_file results for these extensions always use the larger recent preview limit",
    "exemptFileExtensionsPlaceholder": ".md, .txt, .json",
    "exemptToolNames": "Exempt Tool Names",
    "exemptToolNamesTooltip": "In Native context mode, results from these tools always use the larger recent preview limit",
    "exemptToolNamesPlaceholder": "chat_with_agent, list_agents",
    "language": "Agente Idioma",
    "languageTooltip": "Language for agent persona files (SOUL.md, AGENTS.md, etc.). Changing this will re-copy MD files in the selected language.",
    "languageConfirmTitle": "Change Agente Idioma",
    "languageConfirmContent": "Changing the language will overwrite the following files with the new language version:\n\n  SOUL.md, AGENTS.md, PROFILE.md, MEMORY.md, BOOTSTRAP.md, HEARTBEAT.md\n\nIf you have customized any of these files, please back them up first. Your other files will not be affected.",
    "languageConfirmOk": "Change Idioma",
    "languageSaveSuccess": "Idioma Atualizado successfully",
    "languageSaveSuccessWithFiles": "Language updated, {{count}} MD file(s) copied",
    "languageSaveFailed": "Falhou to Atualizar Idioma",
    "saveSuccess": "Configuracao saved successfully",
    "saveFailed": "Falhou to Salvar Configuracao",
    "timezone": "Usuario Timezone",
    "timezoneTooltip": "Used for scheduled tasks, time display, and agent context. Defaults to your system timezone.",
    "timezoneRequired": "Please Selecionar a timezone",
    "selectTimezone": "Selecionar timezone",
    "timezoneSaveSuccess": "Timezone Atualizado successfully",
    "timezoneSaveFailed": "Falhou to Atualizar timezone",
    "loadFailed": "Falhou to load Configuracao",
    "historyMaxLength": "Max History Length",
    "historyMaxLengthTooltip": "Maximum output length (characters) for the /history command",
    "historyMaxLengthRequired": "Max history length e obrigatorio",
    "historyMaxLengthMin": "Max history length must be at least 1000",
    "historyMaxLengthPlaceholder": "Enter max length",
    "contextCompactTitle": "Context Compact Configuracao",
    "contextCompactEnabled": "Ativar Context Compaction",
    "contextCompactEnabledTooltip": "Automatically compact the context to prevent context window overflow",
    "tokenCountModel": "Token Count Modelo",
    "tokenCountModelTooltip": "Model name used for precise token counting; set to \"default\" to use built-in estimation",
    "tokenCountModelPlaceholder": "Modelo Nome or Padrao",
    "tokenCountUseMirror": "Use HuggingFace Mirror",
    "tokenCountUseMirrorTooltip": "Use a HuggingFace mirror site when downloading tokenizers",
    "tokenCountEstimateDivisor": "byte/Token Estimate Divisor",
    "tokenCountEstimateDivisorTooltip": "Divisor for byte-based token estimation (tokens ≈ byte_length / divisor). Recommended value: 3.75 ~ 4.",
    "tokenCountEstimateDivisorRequired": "Estimate divisor is Obrigatorio",
    "tokenCountEstimateDivisorMin": "Estimate divisor must be between 2 and 5",
    "toolResultCompactTitle": "Tool Result Compact Configuracao",
    "toolResultCompactEnabled": "Ativar Tool Result Compaction",
    "toolResultCompactEnabledTooltip": "Compact oversized tool call results to save context space",
    "memorySummaryTitle": "Long-term Memory Configuracao",
    "memorySummaryEnabled": "Activate Memory Summary",
    "memorySummaryEnabledTooltip": "Automatically generate and save memory summaries during context compaction",
    "dreamCronEnabled": "Ativar Dream",
    "dreamCronEnabledTooltip": "Ativa a tarefa agendada de otimização de memória por Dream",
    "dreamCron": "Agendamento do Dream",
    "dreamCronTooltip": "Expressão Cron para otimizar periodicamente memórias de longo prazo; use o interruptor acima para ativar ou desativar",
    "dreamCronPlaceholder": "0 23 * * *",
    "dreamCronRequired": "Insira uma expressão Cron quando o Dream estiver ativado",
    "dreamCronInvalid": "Insira uma expressão Cron válida de 5 campos",
    "autoMemorySearch": "Busca automática na memória (Beta)",
    "autoMemorySearchTooltip": "Auto memory search to run on every conversation turn. Each query will automatically invoke memory search capabilities, helping QwenPaw understand you better — but this increases token consumption.",
    "autoMaxResults": "Automatico Pesquisar Max Results",
    "autoMaxResultsTooltip": "Maximum number of results returned when auto memory search is enabled",
    "autoMaxResultsRequired": "Max results is Obrigatorio",
    "autoMaxResultsMin": "Max results must be at least 1",
    "embeddingConfigTitle": "Embedding Modelo Configuracao",
    "embeddingBackend": "Tipo de SDK de Embedding",
    "embeddingBackendTooltip": "Tipo de SDK usado para chamar o modelo de embedding",
    "embeddingBackendPlaceholder": "Selecione um tipo de SDK",
    "embeddingApiKey": "Chave da API",
    "embeddingApiKeyTooltip": "API key for the embedding provider; leave blank if no authentication is required",
    "embeddingApiKeyPlaceholder": "Leave blank if not required",
    "embeddingBaseUrl": "URL Base",
    "embeddingBaseUrlTooltip": "URL Base da API de embedding. Para backends compatíveis com OpenAI, este endpoint customizado é opcional; Chave da API e Nome do Modelo são obrigatórios.",
    "embeddingBaseUrlPlaceholder": "https://dashscope.aliyuncs.com/compatible-mode/v1",
    "embeddingHost": "Host",
    "embeddingHostTooltip": "URL do serviço Ollama. Deixe em branco para usar o host padrão do Ollama.",
    "embeddingHostPlaceholder": "http://localhost:11434",
    "embeddingModelName": "Modelo Nome",
    "embeddingModelNameTooltip": "Nome do modelo de embedding. Obrigatório para todos os backends de embedding.",
    "embeddingModelNamePlaceholder": "text-embedding-v4",
    "embeddingEnableCache": "Ativar Embedding Cache",
    "embeddingEnableCacheTooltip": "Cache embedding results to reduce repeated computation",
    "embeddingMaxCacheSize": "Max Cache Tamanho",
    "embeddingMaxCacheSizeTooltip": "Maximum number of entries in the embedding cache",
    "embeddingMaxCacheSizeRequired": "Max cache Tamanho e obrigatorio",
    "embeddingUseDimensions": "Use Personalizado Dimensions",
    "embeddingUseDimensionsTooltip": "Use custom embedding dimensions (only supported by some models)",
    "embeddingDimensions": "Embedding Dimensions",
    "embeddingDimensionsTooltip": "Number of embedding dimensions; takes effect when custom dimensions are enabled",
    "embeddingDimensionsRequired": "Embedding dimensions is Obrigatorio",
    "embeddingDimensionsMin": "Dimensions must be at least 1",
    "embeddingMaxInputLength": "Max Input Length",
    "embeddingMaxInputLengthTooltip": "Maximum input length (tokens) for a single embedding request",
    "embeddingMaxInputLengthRequired": "Max input length e obrigatorio",
    "embeddingMaxBatchSize": "Max Batch Tamanho",
    "embeddingMaxBatchSizeTooltip": "Maximum number of items in a single batch embedding request",
    "embeddingMaxBatchSizeRequired": "Max batch Tamanho e obrigatorio",
    "embeddingRestartWarning": "Embedding model config does not support hot reload. Save and restart the service for changes to take effect.",
    "toolExecutionLevelTitle": "Tool Execution Seguranca",
    "toolExecutionLevel": {
      "title": "Tool Execution Seguranca",
      "alertMessage": "Configure tool call approval policy to control the security level when agents execute tools",
      "strict": "Strict Modo",
      "strictDesc": "All tool calls require approval, highest security level",
      "smart": "Smart Modo",
      "smartDesc": "Low-risk tools auto-approved, medium+ risk tools require approval",
      "auto": "Automatico Modo",
      "autoDesc": "Only tools explicitly marked for approval require approval (default)",
      "off": "Desligado Modo",
      "offDesc": "Disable all tool approvals, all tools execute automatically"
    },
    "saveLevelSuccess": "Tool execution security level saved",
    "saveLevelFailed": "Failed to save tool execution security level",
    "maxContextLength": "Max Context Length",
    "maxContextLengthTooltip": "Maximum token count for the model context window, determining how much history fits in each request",
    "maxContextLengthRequired": "Max context length e obrigatorio",
    "maxContextLengthMin": "Max context length must be at least 1000",
    "maxContextLengthPlaceholder": "Enter max context length",
    "embeddingActivationNote": "Embedding é ativado quando os campos obrigatórios do backend selecionado são preenchidos.",
    "embeddingEnableHint": "Embedding é ativado quando os campos obrigatórios são preenchidos: Nome do Modelo e Chave da API para backends compatíveis com OpenAI ou Gemini; Nome do Modelo para Ollama.",
    "rebuildMemoryIndex": "Reconstruir índice de memória",
    "rebuildMemoryIndexWarning": "Esta operação limpa e reconstrói o índice de pesquisa da memória e pode consumir muita CPU e memória. Use-a apenas para reparar um índice danificado ou resultados de pesquisa anormais.",
    "rebuildMemoryIndexConfirmTitle": "Reconstruir o índice de memória?",
    "rebuildMemoryIndexConfirm": "O uso de CPU e memória pode aumentar significativamente durante a reconstrução. Esta operação não é recomendada, a menos que o índice esteja danificado ou precise de reparo.",
    "rebuildMemoryIndexSuccess": "Reconstrução do índice de memória concluída",
    "rebuildMemoryIndexFailed": "Falha ao reconstruir o índice de memória: {{error}}",
    "toolResultCompactRecentGtOld": "Recent tool result preview bytes must be greater than or equal to compact preview bytes",
    "lightContextTitle": "Context Management",
    "remeLightMemoryTitle": "Long-term Memory",
    "dialogPath": "Dialog Storage Caminho",
    "dialogPathTooltip": "Relative path for dialog persistence storage (relative to working_dir)",
    "dialogPathPlaceholder": "dialog",
    "contextCompactCollapseLabel": "Context Compaction",
    "toolResultPruningCollapseLabel": "Tool Result Pruning",
    "autoMemorySearchCollapseLabel": "Automatico Memory Pesquisar",
    "embeddingConfigCollapseLabel": "Embedding Modelo Configuracao",
    "summarizeWhenCompact": "Memory Ligado Compact",
    "summarizeWhenCompactTooltip": "Automatically generate and save memory during context compaction",
    "inboxPushEnabled": "Notificações de resultados da memória",
    "inboxPushEnabledTooltip": "Envia resultados de memória, sonho e recursos automáticos para a caixa de entrada. Desativar não interrompe as tarefas de memória.",
    "autoMemoryInterval": "Intervalo de Memória Automática",
    "autoMemoryIntervalTooltip": "Acione a memória automática a cada N consultas do usuário. 0 desativa a memória automática periódica. 1 significa memória automática após cada consulta. Recomendado: 2-5; usar 1 exige atenção ao alto consumo de tokens.",
    "autoMemoryIntervalPlaceholder": "Digite 0 para desativar a memória automática periódica",
    "autoMemoryIntervalRequired": "O intervalo de memória automática é obrigatório",
    "autoMemoryIntervalMin": "O intervalo de memória automática deve ser no mínimo 0",
    "contextManagerBackend": "Context Manager Backend",
    "contextManagerBackendTooltip": "Backend type for the context manager. Currently only Light is supported.",
    "contextStrategy": "Context Strategy",
    "contextStrategyTooltip": "How the agent manages long context. Scroll (recommended) persists evicted turns to a durable history store and recalls them on demand; Native uses in-place compression. Restart QwenPaw for changes to take effect.",
    "contextStrategyScroll": "Scroll",
    "contextStrategyNative": "Native",
    "backendRestartWarning": "Switching backends does not support hot reload. Save and restart QwenPaw for changes to take effect."
  },
  "tools": {
    "title": "Integrado Ferramentas",
    "description": "Manage built-in tools and their enabled status. Disabled tools will not be available to the agent.",
    "emptyState": "Nao Ferramentas configured",
    "loadError": "Falhou to load Ferramentas",
    "enableSuccess": "Tool Ativado successfully",
    "disableSuccess": "Tool Desativado successfully",
    "toggleError": "Falha ao toggle tool Status",
    "enableAll": "Ativar Todos",
    "disableAll": "Desativar Todos",
    "enableAllSuccess": "Todos Ferramentas Ativado",
    "disableAllSuccess": "Todos Ferramentas Desativado",
    "allEnabled": "All tools are already enabled",
    "allDisabled": "All tools are already disabled",
    "asyncExecution": "Async Execution",
    "asyncExecutionEnabled": "Async execution Ativado",
    "asyncExecutionDisabled": "Async execution Desativado",
    "configure": "Configurar",
    "configured": "Configurado",
    "requiresConfig": "Requer configuração",
    "configSaved": "Configuração salva",
    "configSaveError": "Falha ao salvar configuração",
    "active": "ativo(s)",
    "available": "Disponível",
    "noEnabled": "Nenhuma ferramenta ativada",
    "goEnableBtn": "Ativar agora",
    "configureAction": "Configurar →",
    "enableAction": "Ativar →"
  },
  "modelConfig": {
    "promptTitle": "LLM Model Required — Select in Chat After Configuration",
    "promptMessage": "Chat requires an LLM model to function. Please configure a model first, then select it from the model selector at the top of the Chat page.",
    "configureButton": "Configure Modelo",
    "skipButton": "Skip",
    "chatDisabledTitle": "Chat Desativado",
    "chatDisabledMessage": "Chat functionality is disabled because no model is configured. Please configure a model to enable chat.",
    "configureNow": "Configure Modelo",
    "modelNotConfigured": "Please configure a model in Settings before using chat"
  },
  "header": {
    "changelog": "Registro de Alterações",
    "docs": "Documentação",
    "tutorial": "Tutorial",
    "featureDemos": "Demonstração de Funções",
    "faq": "Perguntas Frequentes",
    "github": "GitHub",
    "resources": "Documentação",
    "updateAvailable": "Atualização Disponível"
  },
  "theme": {
    "dark": "Dark",
    "light": "Light",
    "system": "System"
  },
  "sidebar": {
    "newVersion": "New version available: v{{version}}, click to upgrade",
    "updateModal": {
      "title": "Novo Versao available: v{{version}}",
      "viewReleases": "Visualizar Releases",
      "installDesktopUpdate": "Atualizar agora",
      "desktopInstallHint": "QwenPaw Desktop {{version}} está pronto para instalar. O aplicativo será reiniciado após a atualização.",
      "checking": "Verificando atualizações…",
      "checkingHint": "Confirmando a versão mais recente",
      "downloading": "Baixando atualização",
      "downloadingTo": "Atualizando para a versão {{version}}",
      "downloadProgress": "{{done}} / {{total}} · {{rate}}",
      "installing": "Instalando atualização",
      "willRestart": "O aplicativo será reiniciado automaticamente após a conclusão.",
      "stepPrepare": "Preparar",
      "stepDownloading": "Baixar",
      "stepInstalling": "Instalar",
      "failedTitle": "Falha na atualização",
      "back": "Voltar",
      "retry": "Tentar Novamente",
      "errors": {
        "network": "Não foi possível alcançar o servidor de atualização. Verifique sua internet e tente novamente.",
        "signature": "Assinatura do arquivo de atualização inválida. Tente baixar novamente.",
        "appLocation": "O QwenPaw está sendo executado a partir de um local somente leitura do macOS. Mova QwenPaw.app para a pasta Aplicativos, abra-o a partir de lá e tente atualizar novamente.",
        "other": "Falha na atualização."
      },
      "updateLater": "Baixar em segundo plano",
      "backgroundDownloading": "Baixando em segundo plano…",
      "readyToInstall": "Atualização pronta",
      "readyToInstallHint": "A atualização v{{version}} foi baixada. Reinicie para instalar e abrir a nova versão.",
      "restartNow": "Atualizar agora",
      "backgroundFailed": "Falha no download em segundo plano"
    },
    "settings": {
      "language": "Idioma",
      "theme": "Tema",
      "mode": "Modo"
    },
    "simpleMode": "Modo simples",
    "fullMode": "Modo completo"
  },
  "chat": {
    "modelSelectTooltip": "Selecionar Modelo",
    "newChatTooltip": "Novo Chat",
    "searchTooltip": "Pesquisar Todos chats",
    "chatHistoryTooltip": "Chat history",
    "wideModeTooltip": "Modo amplo",
    "normalModeTooltip": "Modo normal",
    "allChats": "Todos Chats",
    "createNewChat": "Criar Novo Chat",
    "pinDrawer": "Fixar",
    "unpinDrawer": "Desafixar",
    "statusIdle": "Idle",
    "statusInProgress": "In progress",
    "disclaimer": "Works for you, grows with you",
    "greeting": "Hello, how can I help you today?",
    "description": "I am a helpful assistant that can help you with your questions.",
    "prompt1": "Let's start a new journey!",
    "prompt2": "Can you tell me what skills you have?",
    "inputPlaceholder": "\"↑↓\" for message navigation · \"/\" for quick commands (\"/approve\" or \"/deny\" during approvals)",
    "longTextUploadPrompt": "Please read the uploaded prompt file and answer it.",
    "emptyOutputError": "O assistente retornou uma resposta vazia.",
    "commands": {
      "clear": {
        "description": "Limpar the conversation context"
      },
      "compact": {
        "description": "Compact the conversation context; optional instruction supported"
      },
      "approve": {
        "description": "Approve the pending tool action and continue execution"
      },
      "deny": {
        "description": "Deny the pending tool action"
      },
      "mission": {
        "description": "Modo Mission — Decompõe tarefas em sub-agentes com contexto isolado"
      },
      "skills": {
        "description": "List chat-available skills and expose explicit skill commands"
      },
      "goal": {
        "description": "Loop Goal — Agente persegue objetivo continuamente, auto-avalia via Rubric"
      }
    },
    "attachments": {
      "tooltip": "Supports documents, images, videos, audio and more formats",
      "tooltipImageOnly": "Current model supports image upload only",
      "tooltipNoMultimodal": "No multimodal capability detected for current model, images or videos may not be processed correctly",
      "fileSizeLimit": "File size limit: {{limit}}MB",
      "fileSizeExceeded": "File size exceeds {{limit}}MB limit. Current file: {{size}}MB",
      "multimodalDisabled": "Current model does not support file upload",
      "multimodalWarning": "No multimodal capability detected for current model, images or videos may not be processed correctly",
      "imageOnlyAccept": "Current model only supports image files",
      "imageOnlyWarning": "Current model only supports images, non-image files like videos may not be processed correctly"
    },
    "rateLimitHit": "O modelo atual está com limite de taxa. Tente mudar para outro modelo gratuito.",
    "turnUsagePopover": {
      "ariaLabel": "Ver uso de tokens e contexto desta rodada",
      "turn": "Esta rodada",
      "turnEstimated": "Esta rodada ~",
      "tok": "tok",
      "inOut": "in {{inTok}} · out {{outTok}}",
      "contextLabel": "Janela de contexto:",
      "manageContext": "Gerenciar contexto",
      "compact": "Compactar",
      "new": "Nova conversa"
    },
    "rateLimitMessage": "Limite de taxa atingido. Mude para outro modelo gratuito:",
    "rateLimitSwitched": "Mudou para {{model}}",
    "speech": {
      "startRecording": "Iniciar gravação de voz (Ctrl+Shift+M)",
      "stopRecording": "Parar gravação (Ctrl+Shift+M)",
      "transcribing": "Transcrevendo...",
      "transcriptionDisabled": "A transcrição está desativada. Configure um provedor em Configurações > Transcrição de Voz.",
      "transcriptionFailed": "Falha na transcrição de voz",
      "microphoneError": "Não foi possível acessar o microfone",
      "fileTooLarge": "O arquivo de gravação é muito grande ({{size}}MB). Máximo permitido: {{limit}}MB",
      "recordingTooLong": "A gravação excede o limite de duração ({{limit}}s)"
    },
    "search": {
      "title": "Pesquisar Chat",
      "tooltip": "Pesquisar Atual Chat",
      "placeholder": "Pesquisar messages...",
      "noResults": "Nao results found",
      "resultsCount": "Found {{count}} result(s)",
      "searching": "Searching {{progress}}...",
      "loading": "Carregando...",
      "userMessage": "Usuario",
      "assistantMessage": "Assistant",
      "titleMatch": "Title"
    },
    "contextMenu": {
      "open": "Abrir",
      "rename": "Rename",
      "pin": "Pin",
      "unpin": "Unpin",
      "delete": "Excluir"
    },
    "queue": {
      "title": "Fila de mensagens",
      "paused": "Pausado",
      "sendFailed": "Falha no envio",
      "resume": "Retomar fila",
      "pause": "Pausar fila",
      "clear": "Limpar fila",
      "dragSort": "Arraste para reordenar",
      "edit": "Editar",
      "retry": "Tentar novamente",
      "skip": "Pular",
      "interruptAndSend": "Interromper e enviar",
      "delete": "Excluir",
      "file": "Arquivo",
      "noChatWarning": "Envie uma mensagem primeiro para criar uma conversa antes de usar a fila",
      "queueFull": "Fila cheia (máx. {{max}} itens). Envie ou remova algumas mensagens primeiro",
      "otherTabOwner": "This tab queues only; sending is handled by another tab"
    },
    "group": {
      "pinned": "Fixados",
      "today": "Hoje",
      "week": "Últimos 7 dias",
      "month": "Últimos 30 dias",
      "older": "Anteriores"
    },
    "sessionPanel": {
      "searchConversations": "Pesquisar…",
      "noResults": "Nenhum resultado",
      "noConversations": "Sem conversas",
      "loadingConversations": "Carregando…"
    },
    "conversationHistory": "Histórico de conversas",
    "history": {
      "empty": "Sem histórico de conversas"
    },
    "sessionGroup": {
      "today": "Hoje",
      "recent": "Últimos 7 dias",
      "earlier": "Anteriores"
    }
  },
  "security": {
    "parent": "Configuracoes",
    "security": "Seguranca",
    "title": "Seguranca",
    "description": "Manage security features for tools and skills.",
    "toolGuardTitle": "Tool Guard",
    "toolGuardDescription": "Configure security scanning for tool calls. Dangerous operations will require your explicit approval before execution.",
    "enabled": "Ativar Tool Guard",
    "enabledTooltip": "When enabled, tool calls are scanned for dangerous patterns before execution",
    "guardedTools": "Guarded Ferramentas",
    "guardedToolsTooltip": "Tools that require approval when dangerous patterns are detected. Leave empty to use the built-in default set.",
    "guardedToolsPlaceholder": "Select tools or type custom tool names",
    "deniedTools": "Denied Ferramentas",
    "deniedToolsTooltip": "Tools that are always rejected without asking for approval",
    "deniedToolsPlaceholder": "Select tools to always deny",
    "saveSuccess": "Tool guard Configuracoes saved",
    "saveFailed": "Falha ao Salvar tool guard Configuracoes",
    "loadFailed": "Falha ao load tool guard Configuracoes",
    "rules": {
      "title": "Detection Rules",
      "description": "Rules define regex patterns that trigger security alerts. Built-in rules can be disabled; custom rules can be added, edited, or deleted.",
      "id": "Rule ID",
      "severity": "Severity",
      "descriptionCol": "Descricao",
      "source": "Origem",
      "actions": "Acoes",
      "builtin": "Integrado",
      "custom": "Personalizado",
      "enable": "Ativar",
      "disable": "Desativar",
      "edit": "Editar",
      "delete": "Excluir",
      "add": "Adicionar Rule",
      "addTitle": "Adicionar Personalizado Rule",
      "editTitle": "Editar Personalizado Rule",
      "ruleId": "Rule ID",
      "ruleIdRequired": "Rule ID is Obrigatorio",
      "duplicateId": "A rule with this ID already exists",
      "tools": "Target Ferramentas",
      "toolsPlaceholder": "Leave empty to match all tools",
      "params": "Target Parameters",
      "paramsPlaceholder": "Leave empty to match all parameters",
      "severityLabel": "Severity",
      "categoryLabel": "Category",
      "patterns": "Regex Patterns",
      "patternsRequired": "At least one pattern e obrigatorio",
      "patternsTooltip": "One regex per line. Matched against tool parameter values (case-insensitive).",
      "excludePatterns": "Exclude Patterns",
      "excludePatternsTooltip": "One regex per line. If any matches, the rule is skipped for that value.",
      "descriptionLabel": "Descricao",
      "descriptionPlaceholder": "What does this rule detect?",
      "remediationLabel": "Remediation",
      "remediationPlaceholder": "Suggested action when this rule triggers",
      "preview": "Visualizar",
      "previewTitle": "Rule Detalhes",
      "actionLabel": "Action",
      "actionApproval": "Require Approval",
      "allTools": "Todos Ferramentas",
      "allParams": "Todos parameters",
      "descriptions": {
        "TOOL_CMD_CONTROL_CHARS": "Detects commands with non-printable control characters that may bypass security checks",
        "TOOL_CMD_DANGEROUS_MV": "Detects 'mv' command that may move or overwrite files unexpectedly",
        "TOOL_CMD_DANGEROUS_RM": "Detects 'rm' command that may cause data loss",
        "TOOL_CMD_DOS_FORK_BOMB": "Detects classic Bash fork bombs and mass process termination",
        "TOOL_CMD_FIND_DELETE": "Detects 'find -delete' command that may cause data loss",
        "TOOL_CMD_FS_DESTRUCTION": "Detects low-level disk formatting or wiping commands",
        "TOOL_CMD_IFS_INJECTION": "Detects commands using $IFS variable that may bypass security validation",
        "TOOL_CMD_JQ_FILE_FLAGS": "Detects jq commands using flags that may read arbitrary files or execute external code",
        "TOOL_CMD_JQ_SYSTEM": "Detects jq commands with system() function that may execute arbitrary shell commands",
        "TOOL_CMD_OBFUSCATED_EXEC": "Detects execution of base64 encoded strings passed directly to a shell interpreter",
        "TOOL_CMD_PIPE_TO_SHELL": "Detects 'curl | bash' patterns used to download and immediately execute remote payloads",
        "TOOL_CMD_PRIVILEGE_ESCALATION": "Detects privilege escalation attempts using sudo, su, doas, pkexec, or runas",
        "TOOL_CMD_PROCESS_KILL": "Detects process termination commands that may kill critical processes",
        "TOOL_CMD_PROC_ENVIRON": "Detects commands accessing /proc/*/environ that may expose sensitive environment variables",
        "TOOL_CMD_REVERSE_SHELL": "Detects attempts to establish reverse shells or unauthorized network tunnels",
        "TOOL_CMD_SERVICE_RESTART": "Detects service management commands that can disrupt system services",
        "TOOL_CMD_SYSTEM_REBOOT": "Detects system reboot or shutdown commands that will terminate the host system",
        "TOOL_CMD_SYSTEM_TAMPERING": "Detects access to cron jobs, SSH keys, or sudo permissions (including reads and modifications)",
        "TOOL_CMD_UNICODE_WHITESPACE": "Detects commands with Unicode whitespace characters that may cause parsing issues",
        "TOOL_CMD_UNSAFE_PERMISSIONS": "Detects global permission downgrades (chmod 777) or setting immutable flags",
        "TOOL_CMD_ZSH_DANGEROUS": "Detects commands using Zsh-specific builtins that may bypass security checks"
      },
      "categories": {
        "command_injection": "Command Injection",
        "code_execution": "Code Execution",
        "data_exfiltration": "Data Exfiltration",
        "path_traversal": "Caminho Traversal",
        "sensitive_file_access": "Sensitive File Access",
        "network_abuse": "Network Abuse",
        "credential_exposure": "Credential Exposure",
        "resource_abuse": "Resource Abuse",
        "privilege_escalation": "Privilege Escalation",
        "prompt_injection": "Prompt Injection",
        "other": "Other"
      }
    },
    "shellEvasion": {
      "title": "Shell Evasion Detection",
      "description": "Configure which shell evasion and obfuscation detection checks are enabled. These checks detect techniques that attempt to hide malicious intent from simpler regex-only detection.",
      "checks": {
        "command_substitution": {
          "name": "Command Substitution",
          "description": "Detects $(), backticks, process substitution, and other command substitution patterns"
        },
        "obfuscated_flags": {
          "name": "Obfuscated Flags",
          "description": "Detects ANSI-C quoting, locale quoting, and empty-quote flag obfuscation"
        },
        "backslash_escaped_whitespace": {
          "name": "Backslash Escaped Whitespace",
          "description": "Detects backslash-escaped spaces/tabs that can alter command parsing"
        },
        "backslash_escaped_operators": {
          "name": "Backslash Escaped Operators",
          "description": "Detects backslash before shell operators (;|&<>) that can hide command structure"
        },
        "newlines": {
          "name": "Hidden Newlines",
          "description": "Detects newlines and carriage returns that could separate hidden commands"
        },
        "comment_quote_desync": {
          "name": "Comment Quote Desync",
          "description": "Detects quote characters inside # comments that can desync quote tracking"
        },
        "quoted_newline": {
          "name": "Quoted Newline",
          "description": "Detects newlines inside quoted strings followed by #-prefixed lines that can hide arguments"
        }
      }
    },
    "fileGuard": {
      "title": "File Guard",
      "description": "Protect sensitive files and directories from being accessed by agent tools. Paths added here will be blocked across all tool calls.",
      "enableLabel": "Ativar File Guard",
      "path": "Caminho",
      "actions": "Acoes",
      "add": "Adicionar",
      "inputPlaceholder": "Enter file or directory path (e.g. ~/.ssh/ or /etc/passwd)",
      "empty": "No custom sensitive paths configured",
      "directory": "Directory",
      "removeConfirm": "Remove this path from the protected list?",
      "duplicate": "This path is already in the list",
      "saveSuccess": "File guard Configuracoes saved",
      "saveFailed": "Falha ao Salvar file guard Configuracoes",
      "loadFailed": "Falha ao load file guard Configuracoes",
      "allowPreviewOutsideWorkspace": "Permitir Preview Fora do Workspace no Console",
      "allowPreviewOutsideWorkspaceDesc": "Permite visualizar arquivos fora do diretório do workspace no console. A proteção de arquivos sensíveis continua ativa."
    },
    "allowNoAuthHosts": {
      "title": "Allow Nao Auth Hosts",
      "warningTitle": "Seguranca Aviso",
      "warningDescription": "IP addresses in this list can access API endpoints without authentication. By default, localhost (127.0.0.1 and ::1) are allowed for CLI access. Only add trusted IP addresses. WARNING: Adding untrusted IPs poses a serious security risk.",
      "ipAddress": "IP Address",
      "actions": "Acoes",
      "add": "Adicionar",
      "inputPlaceholder": "Enter IP address (e.g., 192.168.1.100 or ::1)",
      "empty": "Nao IP addresses configured",
      "default": "Padrao",
      "removeConfirm": "Remove this IP address from the whitelist?",
      "duplicate": "This IP address is already in the list",
      "invalidIP": "Invalid IP address Formato",
      "saveSuccess": "Allow no auth hosts settings saved",
      "saveFailed": "Failed to save allow no auth hosts settings",
      "loadFailed": "Failed to load allow no auth hosts settings"
    },
    "skillScanner": {
      "title": "Skill Scanner",
      "description": "Automatically scan skills for security threats before enabling or installing. Unsafe skills can be blocked or whitelisted.",
      "mode": "Scanner Modo",
      "modeTooltip": "Controls how the scanner handles unsafe skills: block, warn only, or disabled",
      "modeBlock": "Block",
      "modeWarn": "Warn Only",
      "modeOff": "Desligado",
      "timeout": "Scan Tempo limite (seconds)",
      "timeoutTooltip": "Maximum time to wait for a scan to complete (5-300 seconds)",
      "saveSuccess": "Skill scanner Configuracoes saved",
      "saveFailed": "Falha ao Salvar Skill scanner Configuracoes",
      "scanAlerts": {
        "title": "Scan Alerts",
        "empty": "Nao Seguranca alerts",
        "clearAll": "Limpar Todos",
        "clearConfirm": "Limpar Todos scan alerts?",
        "skillName": "Skill",
        "action": "Action",
        "actionBlocked": "Blocked",
        "actionWarned": "Warned",
        "time": "Time",
        "actions": "Acoes",
        "allowSkill": "Adicionar to Whitelist",
        "remove": "Remover",
        "viewFindings": "Visualizar Detalhes"
      },
      "whitelist": {
        "title": "Whitelist",
        "empty": "Nao Skills are whitelisted",
        "skillName": "Skill",
        "addedAt": "Added At",
        "contentHash": "Conteudo Hash",
        "actions": "Acoes",
        "remove": "Remover",
        "removeConfirm": "Remove this skill from the whitelist?",
        "addSuccess": "Skill added to whitelist",
        "removeSuccess": "Skill removed from whitelist",
        "addFailed": "Falha ao Adicionar Skill to whitelist",
        "removeFailed": "Falha ao Remover Skill from whitelist",
        "removeWillDisable": "The skill will also be disabled after removal.",
        "removeAndDisabled": "Skill removed from whitelist and disabled"
      },
      "scanError": {
        "title": "Seguranca Issues Detected",
        "description": "The following security issues were found:",
        "warnDescription": "Security issues were found but the skill was still enabled (warn mode):",
        "goToWhitelist": "Go to Whitelist",
        "moreFindings": "{{count}} more issues not shown (see Security → Skill Scanner for the full list)."
      }
    }
  },
  "login": {
    "title": "Login to QwenPaw",
    "registerTitle": "Criar Account",
    "firstUserHint": "Create your admin account to get started",
    "usernamePlaceholder": "Username",
    "passwordPlaceholder": "Password",
    "usernameRequired": "Please enter your username",
    "passwordRequired": "Please enter your password",
    "submit": "Login",
    "register": "Register",
    "failed": "Login failed, please check your credentials",
    "registerSuccess": "Registration successful",
    "registerFailed": "Registration Falhou",
    "authNotEnabled": "Autenticacao is not Ativado",
    "logout": "Logout",
    "logoutSuccess": "Logged out successfully",
    "sessionExpired": "Session expired, please login again",
    "unauthorized": "Unauthorized, please login"
  },
  "account": {
    "title": "Account",
    "currentPassword": "Atual Password",
    "currentPasswordRequired": "Digite your Atual password",
    "newUsername": "Novo Username",
    "newUsernamePlaceholder": "Leave blank to keep current",
    "newPassword": "Novo Password",
    "newPasswordPlaceholder": "Leave blank to keep current",
    "confirmPassword": "Confirmar Novo Password",
    "confirmPasswordPlaceholder": "Re-enter Novo password",
    "passwordMismatch": "Passwords do not match",
    "save": "Salvar Changes",
    "updateSuccess": "Account Atualizado successfully",
    "updateFailed": "Falhou to Atualizar account",
    "wrongPassword": "Atual password is incorrect",
    "nothingToUpdate": "Please enter a new username or password",
    "passwordEmpty": "Password cannot be blank",
    "usernameEmpty": "Username cannot be blank"
  },
  "approval": {
    "title": "Seguranca Approval Obrigatorio",
    "tool": "Tool",
    "severity": "Severity",
    "findings": "Findings",
    "parameters": "Parameters",
    "approve": "Approve",
    "deny": "Deny",
    "source": "Origem",
    "subSession": "Sub-Agent",
    "approved": "Tool call approved",
    "denied": "Tool call denied",
    "approveFailed": "Falhou ao aprovar",
    "denyFailed": "Falhou ao negar",
    "approvePattern": "Sempre Permitir",
    "strictModeHint": "Sempre permitir não está disponível no modo estrito",
    "approveExact": "Apenas Desta Vez",
    "approvalScope": "Escopo de aprovação",
    "details": "Detalhes",
    "timeoutAutoDenied": "Tempo esgotado, negado automaticamente",
    "acknowledge": "Entendi",
    "builtinSource": "Integrado",
    "ownerAgent": "Agente Proprietário",
    "executingAgent": "Agente Executando"
  },
  "pluginManager": {
    "title": "Gerenciador de Plugins",
    "description": "Instalar, gerenciar e remover plugins sem reiniciar o serviço.",
    "installed": "Plugins Instalados",
    "noPlugins": "Nenhum plugin instalado ainda",
    "installBtn": "Instalar Plugin",
    "installTitle": "Instalar Plugin",
    "dropPrimary": "Solte a pasta ou arquivo ZIP aqui",
    "dropSecondary": "ou clique para selecionar um arquivo ZIP",
    "orFromUrl": "ou a partir de URL",
    "installFromUrl": "Instalar a partir de URL",
    "urlPlaceholder": "https://example.com/plugin.zip",
    "zipOnly": "Apenas arquivos ZIP podem ser soltos como arquivos — arraste uma pasta para instalação de diretório",
    "dropFailed": "Falha ao ler a pasta solta",
    "restartHint": "Alguns plugins (por exemplo, hooks, monkey-patches) podem exigir uma reinicialização do aplicativo para entrar em vigor ou serem completamente removidos.",
    "installing": "Instalando...",
    "installSuccess": "Plugin instalado com sucesso",
    "installFailed": "Falha na instalação do plugin",
    "uninstall": "Desinstalar",
    "uninstallConfirm": "Desinstalar plugin \"{{name}}\"? Esta ação não pode ser desfeita. Alguns plugins podem exigir uma reinicialização do aplicativo para serem completamente removidos.",
    "uninstalling": "Desinstalando...",
    "uninstallSuccess": "Plugin desinstalado com sucesso",
    "uninstallFailed": "Falha na desinstalação do plugin",
    "statusLoaded": "Em execução",
    "statusUnloaded": "Não carregado",
    "type": "Tipo",
    "version": "Versão",
    "author": "Autor",
    "unknown": "Desconhecido",
    "loadFailed": "Falha ao carregar lista de plugins",
    "confirmTitle": "Confirmar Desinstalação",
    "officialTitle": "Plugins Oficiais",
    "officialDesc": "Instale plugins publicados a partir do CDN de downloads.",
    "catalogRefresh": "Atualizar",
    "catalogEmpty": "Nenhum plugin oficial disponível (o catálogo CDN pode estar vazio)",
    "catalogLoadFailed": "Falha ao carregar o catálogo de plugins oficiais",
    "catalogInstall": "Instalar",
    "catalogReinstall": "Reinstalar",
    "catalogUpgrade": "Atualização disponível",
    "catalogUpgradeBtn": "Atualizar",
    "catalogInstalled": "Instalado",
    "catalogSha256": "SHA256",
    "kindBundle": "Pacote",
    "kindTool": "Ferramenta",
    "filterByName": "Filtrar por nome",
    "filterByKind": "Filtrar por tipo",
    "marketTitle": "Plugin Market",
    "marketEmpty": "No plugins found in market",
    "marketLoadFailed": "Failed to load plugin market",
    "marketUnavailable": "Plugin Market is currently under maintenance, please try again later",
    "marketAll": "All",
    "marketSearch": "Search plugins...",
    "marketCategory": "Filter by category",
    "marketSearchResult": "Found {{count}} plugins matching \"{{keyword}}\"",
    "marketDetails": "Details",
    "marketDownloads": "Downloads",
    "marketDeveloper": "Developer"
  },
  "inbox": {
    "title": "Colheita diária de IA",
    "tabApprovals": "Aprovações",
    "tabPushMessages": "Mensagens push",
    "tabHarvests": "Colheita de IA",
    "summaryApprovals": "Aprovações",
    "summaryPushUnread": "Push não lidas",
    "summaryHarvests": "Colheitas",
    "from": "De:",
    "requestedBy": "Por",
    "markRead": "Marcar como lida",
    "markAllRead": "Marcar todas como lidas",
    "markAllReadNoUnread": "Nenhuma mensagem não lida",
    "markAllReadSuccess": "{{count}} mensagens marcadas como lidas",
    "selectAllCurrentPage": "Selecionar página atual",
    "selectedItems": "{{count}} selecionado(s)",
    "batchDeleteButton": "Exclusão em lote",
    "batchOperation": "Operação em lote",
    "exitBatch": "Sair do lote",
    "batchDeleteConfirm": "Excluir {{count}} mensagens push selecionadas?",
    "batchDeleteSuccess": "{{count}} mensagens push excluídas",
    "pushCronHeader": "Tarefa Cron: {{name}}",
    "viewDetails": "Ver detalhes",
    "deleteMessageConfirm": "Excluir esta mensagem push?",
    "viewAll": "Ver todas",
    "read": "Lida",
    "approve": "Aprovar",
    "reject": "Rejeitar",
    "ready": "Pronto",
    "harvestNow": "Colher agora",
    "createHarvest": "Criar colheita",
    "createFirstHarvest": "Crie sua primeira colheita",
    "createSuccess": "Colheita criada com sucesso",
    "emptyApprovals": "Nenhuma aprovação pendente",
    "emptyPush": "Nenhuma mensagem push",
    "emptyHarvests": "Ainda não há colheitas",
    "statusReadyToHarvest": "Pronto para colher",
    "statusGrowing": "Em crescimento",
    "harvestedTimes": "Colhido {{count}} vez(es)",
    "harvestSuccessRate": "Taxa de sucesso {{rate}}%",
    "messageDetailComingSoon": "Visualização de detalhes da mensagem — em breve!",
    "harvestSettingsComingSoon": "Configurações de colheita — em breve!",
    "messageDetailTitle": "Detalhe da execução",
    "detailCronTitle": "Tarefa Cron: {{name}}",
    "detailHeartbeatTitle": "Batimento",
    "messageNotFound": "Mensagem não encontrada",
    "detailTaskName": "Nome da tarefa",
    "detailTaskId": "ID da tarefa",
    "detailStatus": "Estado",
    "detailSeverity": "Gravidade",
    "detailAgent": "Agente",
    "detailSource": "Origem",
    "detailSourceCronJob": "Tarefa Cron",
    "detailSourceHeartbeat": "Batimento",
    "detailTrigger": "Disparo",
    "detailDuration": "Duração",
    "detailExecutedAt": "Executado em",
    "detailReceivedAt": "Recebido em",
    "detailRunId": "ID da execução",
    "detailContent": "Saída",
    "detailPayload": "Dados",
    "detailExecutionTrace": "Rastro de execução",
    "detailTraceEmpty": "Nenhum rastro de execução disponível",
    "filterByAgent": "Filtrar por agente",
    "filterBySourceType": "Filtrar por origem",
    "sourceTypeCron": "Cron",
    "sourceTypeHeartbeat": "Heartbeat",
    "sourceTypeMemory": "Memory"
  },
  "codingMode": {
    "title": "Modo de Codificação",
    "experimental": "Funcionalidade Experimental",
    "experimentalDesc": "O Modo de Codificação transforma o QwenPaw em uma IDE Web leve com editor de código, árvore de arquivos, integração Git e assistência de codificação por IA.",
    "experimentalNote": "Esta funcionalidade é experimental e ainda está em desenvolvimento ativo. Algumas funcionalidades podem ser limitadas ou mudar em atualizações futuras.",
    "confirmBtn": "Ativar Modo de Codificação",
    "enterTooltip": "Entrar no Modo de Codificação",
    "exitTooltip": "Sair do Modo de Codificação",
    "btnCode": "Código",
    "btnChat": "Chat",
    "selectProject": "Selecionar Projeto de Código",
    "selectProjectDesc": "Escolha um projeto para trabalhar ou use o workspace padrão",
    "tabWorkspace": "Workspace Padrão",
    "tabClone": "Clonar Repositório",
    "tabLocal": "Importar Projeto Local",
    "tabNew": "Novo Projeto",
    "workspaceDesc": "Usar o diretório de workspace do agente atual",
    "cloneUrl": "URL do Repositório Git",
    "cloneUrlPlaceholder": "https://github.com/user/repo.git",
    "cloneName": "Nome do Projeto (opcional)",
    "cloneNamePlaceholder": "Deixe vazio para inferir da URL",
    "cloneBtn": "Iniciar Clone",
    "cloning": "Clonando...",
    "localPath": "Caminho do Diretório Local",
    "localPathPlaceholder": "/Users/seunome/meu-projeto",
    "localPathHint": "Insira o caminho absoluto do seu projeto local",
    "openBtn": "Importar",
    "newName": "Nome do Projeto",
    "newNamePlaceholder": "meu-projeto",
    "createBtn": "Criar Projeto",
    "switchProject": "Trocar Projeto",
    "currentProject": "Projeto Atual",
    "resetToWorkspace": "Redefinir para Workspace Padrão",
    "dropPrimary": "Arraste uma pasta aqui ou clique para navegar",
    "dropSecondary": "Arraste do Finder ou cole um caminho abaixo",
    "pathHint": "Insira o caminho absoluto completo (começando com / ou ~)",
    "importing": "Importando...",
    "dropFailed": "Falha ao ler a pasta",
    "workingDir": "Diretório de trabalho",
    "importCopyNote": "A pasta será copiada para coding_projects/. Os arquivos originais não serão modificados.",
    "importCopyDesc": "A importacao cria uma copia da pasta. O Agent trabalha na copia e seus arquivos originais nao sao alterados. Para trabalhar diretamente no original, use \"Abrir diretorio\".",
    "tabOpenDir": "Abrir diretório",
    "openDirDesc": "Abrir um diretório local existente — nenhum arquivo será copiado",
    "openDirBtn": "Abrir este diretório",
    "openDirLoading": "Carregando...",
    "openDirEmpty": "Sem subdiretórios",
    "openDirHome": "Início",
    "openDirRefresh": "Atualizar",
    "openDirHiddenFolders": "Pastas Ocultas"
  },
  "market": {
    "searchPlaceholder": "Buscar habilidades em várias plataformas",
    "categoryAll": "Todos",
    "categoryPlaceholder": "Buscar categoria",
    "searchResult": "{{count}} habilidades encontradas para \"{{keyword}}\"",
    "providerUnavailable": "Provedor indisponível",
    "noResults": "Nenhum resultado",
    "startTyping": "Digite uma consulta acima para buscar no mercado",
    "browseHint": "Escolha uma categoria ou digite uma palavra-chave para navegar pelos skills em {{providers}}",
    "noDescription": "Nenhuma descrição fornecida",
    "browseMarket": "Explorar Mercado",
    "installQueue": "Fila de instalação",
    "clearCompleted": "Limpar",
    "retry": "Tentar novamente",
    "status": {
      "queued": "Na fila",
      "installing": "Instalando",
      "completed": "Concluído",
      "failed": "Falhou",
      "cancelled": "Cancelado"
    },
    "loadMore": "Carregar mais",
    "noMoreResults": "Sem mais resultados",
    "detail": {
      "title": "Detalhes da habilidade",
      "version": "Versão",
      "author": "Autor",
      "sourceUrl": "URL de instalação",
      "slug": "Identificador",
      "missing": "—"
    },
    "stats": {
      "downloads": "Downloads",
      "stars": "Estrelas",
      "installs": "Instalações",
      "likes": "Curtidas",
      "views": "Visualizações",
      "category": "Categoria",
      "updatedAt": "Atualizado em"
    },
    "queueMsg": {
      "timedOut": "A instalação expirou",
      "failedPrefix": "Falhou: {{msg}}"
    }
  },
  "startup": {
    "starting": "Iniciando backend...",
    "checking": "Conectando ao backend...",
    "error": "Falha ao iniciar o backend.",
    "errorHint": "Nao foi possivel iniciar o processo do backend. Verifique os logs do aplicativo para detalhes.",
    "errorDetails": "Mostrar detalhes do erro",
    "timeout": "O backend nao iniciou em {{seconds}} segundos.",
    "timeoutHint": "Falha ao iniciar o backend. Tente novamente ou verifique os logs do aplicativo.",
    "retry": "Tentar novamente"
  },
  "preview": {
    "error": {
      "SENSITIVE_FILE_BLOCKED": "Este arquivo está bloqueado pelo File Guard (proteção de arquivos sensíveis).",
      "OUTSIDE_WORKSPACE": "Este arquivo está fora do escopo do workspace. Ative \"Permitir Preview Fora do Workspace no Console\" em Configurações → Segurança → File Guard.",
      "FORBIDDEN": "Acesso negado: permissões insuficientes para visualizar este arquivo.",
      "NOT_FOUND": "Arquivo não encontrado. Pode ter sido movido ou excluído. Se foi usado um caminho relativo, tente usar um caminho absoluto.",
      "LOAD_FAILED": "Falha ao carregar a visualização do arquivo.",
      "LOAD_FAILED_DETAIL": "Falha ao carregar a visualização do arquivo: {{detail}}"
    }
  },
  "tool": {
    "readFile": "Ler {{file}}",
    "readFileDefault": "Ler arquivo",
    "writeFile": "Criar {{file}}",
    "writeFileDefault": "Criar arquivo",
    "editFile": "Editar {{file}}",
    "editFileDefault": "Editar arquivo",
    "appendFile": "Adicionar em {{file}}",
    "appendFileDefault": "Adicionar ao arquivo",
    "grepSearch": "Grep {{pattern}}",
    "grepSearchDefault": "Busca grep",
    "globSearch": "Glob {{pattern}}",
    "globSearchDefault": "Busca glob",
    "viewImage": "Ver imagem {{file}}",
    "viewImageDefault": "Ver imagem",
    "viewVideo": "Ver vídeo {{file}}",
    "viewVideoDefault": "Ver vídeo",
    "desktopScreenshot": "Captura de tela do desktop",
    "sendFile": "Enviar {{file}}",
    "sendFileDefault": "Enviar arquivo",
    "browserUse": "Navegar {{detail}}",
    "browserNavigate": "Abrir {{url}}",
    "browserNavigateDefault": "Abrir página",
    "browserClick": "Clicar",
    "browserType": "Digitar",
    "browserSnapshot": "Tirar snapshot",
    "browserScroll": "Rolar página",
    "getCurrentTime": "Obter hora atual",
    "setTimezone": "Definir {{timezone}}",
    "getTokenUsage": "Consultar uso de tokens",
    "memorySearch": "Buscar na memória {{query}}",
    "memorySearchDefault": "Buscar na memória",
    "listAgents": "Listar agentes",
    "chatWithAgent": "Conversar com {{agent}}",
    "chatWithAgentDefault": "Conversar com agente",
    "submitToAgent": "Enviar para {{agent}}{{task}}",
    "submitToAgentDefault": "Enviar tarefa",
    "checkAgentTask": "Verificar {{agent}} #{{taskId}}",
    "checkAgentTaskAgent": "Verificar {{agent}}",
    "checkAgentTaskDefault": "Verificar tarefa",
    "delegateExternalAgent": "Delegar {{runner}}",
    "delegateExternalAgentDefault": "Delegar agente externo",
    "materializeSkill": "Criar {{skill}}",
    "materializeSkillDefault": "Criar habilidade",
    "shell": "Executar {{command}}",
    "shellDefault": "Executar comando",
    "formatTable": {
      "file": "Arquivo",
      "lineNumber": "Linha",
      "score": "Pontuação",
      "summary": "Resumo",
      "name": "Nome",
      "id": "ID",
      "description": "Descrição",
      "status": "Status"
    },
    "loading": "Carregando...",
    "browserAction": {
      "startHeaded": "Iniciar navegador (com interface)",
      "start": "Iniciar navegador",
      "stop": "Parar navegador",
      "open": "Abrir {{url}}",
      "openDefault": "Abrir página",
      "navigate": "Navegar para {{url}}",
      "navigateDefault": "Navegar",
      "navigateBack": "Voltar",
      "click": "Clicar em {{selector}}",
      "clickDefault": "Clicar no elemento",
      "type": "Digitar {{text}}",
      "typeDefault": "Digitar texto",
      "snapshot": "Obter snapshot",
      "screenshot": "Captura de tela {{path}}",
      "screenshotDefault": "Captura de tela",
      "eval": "Avaliar {{code}}",
      "evalDefault": "Avaliar código",
      "runCode": "Executar {{code}}",
      "runCodeDefault": "Executar código",
      "closePage": "Fechar página",
      "tabs": "Abas {{action}}",
      "tabsDefault": "Gerenciar abas",
      "fillForm": "Preencher formulário",
      "fileUpload": "Fazer upload de {{filename}}",
      "fileUploadDefault": "Fazer upload de arquivo",
      "fileDownload": "Baixar {{target}}",
      "fileDownloadDefault": "Baixar arquivo",
      "pressKey": "Pressionar {{key}}",
      "pressKeyDefault": "Pressionar tecla",
      "hover": "Passar o mouse sobre {{selector}}",
      "hoverDefault": "Passar o mouse sobre elemento",
      "drag": "Arrastar",
      "selectOption": "Selecionar opção",
      "waitFor": "Aguardar {{target}}",
      "waitForDefault": "Aguardar elemento",
      "resize": "Redimensionar {{w}}x{{h}}",
      "resizeDefault": "Redimensionar janela",
      "pdf": "Exportar PDF {{path}}",
      "pdfDefault": "Exportar PDF",
      "install": "Instalar",
      "batch": "Lote"
    },
    "lineBadge": {
      "lines": "{{count}} linhas",
      "addLines": "+{{count}} linhas",
      "delLines": "-{{count}} linhas",
      "matches": "{{count}} correspondências",
      "files": "{{count}} arquivos"
    },
    "inlineResult": {
      "taskId": "Tarefa #{{id}}",
      "submitted": "Enviado"
    },
    "execute": "Executar {{tool}}",
    "executeDefault": "Executar ferramenta"
  },
  "loop": {
    "gotoSettings": "Configurações de Loop do Agente",
    "selectorTitle": "Modo de Loop",
    "selectorHint": "Escolha como o agente deve continuar",
    "selectorAria": "Selecionar modo de Loop",
    "builtInModes": "Integrados",
    "customModes": "Personalizados e plugins",
    "starting": "Iniciando",
    "running": "Em execução",
    "awaiting_user": "Aguardando sua resposta",
    "activePersistentDescription": "Este modo permanece ativo na conversa até terminar ou a conversa ser reiniciada.",
    "activeCustomDescription": "Este modo personalizado permanece ativo até usar /mode off, /clear ou /new.",
    "loadError": "Não foi possível carregar alguns modos de Loop.",
    "retry": "Tentar novamente",
    "modes": {
      "default": {
        "name": "Padrão",
        "description": "O Loop de agente controlado padrão."
      },
      "goal": {
        "name": "Objetivo",
        "description": "Trabalhe continuamente em um objetivo concreto e verificável."
      },
      "mission": {
        "name": "Missão",
        "description": "Execute uma tarefa estruturada e persistente em várias etapas."
      }
    }
  }
}
