import type { Translations } from "./types"; export const pt: Translations = { common: { save: "Guardar", saving: "A guardar...", cancel: "Cancelar", close: "Fechar", confirm: "Confirmar", delete: "Eliminar", refresh: "Atualizar", retry: "Tentar novamente", search: "Pesquisar...", loading: "A carregar...", create: "Criar", creating: "A criar...", set: "Definir", replace: "Substituir", clear: "Limpar", live: "Ativo", off: "Desligado", enabled: "ativado", disabled: "desativado", active: "ativo", inactive: "inativo", unknown: "desconhecido", untitled: "Sem título", none: "Nenhum", form: "Formulário", noResults: "Sem resultados", of: "de", page: "Página", msgs: "msgs", tools: "ferramentas", match: "correspondência", other: "Outro", configured: "configurado", removed: "removido", failedToToggle: "Falha ao alternar", failedToRemove: "Falha ao remover", failedToReveal: "Falha ao revelar", collapse: "Recolher", expand: "Expandir", general: "Geral", messaging: "Mensagens", pluginLoadFailed: "Não foi possível carregar o script deste plugin. Verifique o separador Network (dashboard-plugins/…) e o caminho do plugin no servidor.", pluginNotRegistered: "O script do plugin não chamou register(), ou o script falhou. Abra a consola do browser para mais detalhes.", }, app: { brand: "Hermes Agent", brandShort: "HA", closeNavigation: "Fechar navegação", closeModelTools: "Fechar modelo e ferramentas", footer: { org: "Nous Research", }, activeSessionsLabel: "Sessões ativas:", gatewayStatusLabel: "Estado do gateway:", gatewayStrip: { failed: "Falha ao iniciar", off: "Desligado", running: "A executar", starting: "A iniciar", stopped: "Parado", }, nav: { analytics: "Análise", chat: "Chat", config: "Configuração", cron: "Cron", documentation: "Documentação", keys: "Chaves", logs: "Registos", models: "Modelos", profiles: "perfis: multiagentes", plugins: "Plugins", sessions: "Sessões", skills: "Competências", }, modelToolsSheetSubtitle: "e ferramentas", modelToolsSheetTitle: "Modelo", navigation: "Navegação", openDocumentation: "Abrir documentação num novo separador", openNavigation: "Abrir navegação", pluginNavSection: "Plugins", sessionsActiveCount: "{count} ativa(s)", statusOverview: "Visão geral do estado", system: "Sistema", webUi: "Web UI", }, status: { actionFailed: "Ação falhou", actionFinished: "Concluído", actions: "Ações", agent: "Agente", activeSessions: "Sessões ativas", connected: "Ligado", connectedPlatforms: "Plataformas ligadas", disconnected: "Desligado", error: "Erro", failed: "Falhou", gateway: "Gateway", gatewayFailedToStart: "O gateway falhou ao iniciar", lastUpdate: "Última atualização", noneRunning: "Nenhum", notRunning: "Não está a executar", pid: "PID", platformDisconnected: "desligado", platformError: "erro", recentSessions: "Sessões recentes", restartGateway: "Reiniciar gateway", restartingGateway: "A reiniciar gateway…", running: "A executar", runningRemote: "A executar (remoto)", startFailed: "Falha ao iniciar", starting: "A iniciar", startedInBackground: "Iniciado em segundo plano — verifique os registos para acompanhar", stopped: "Parado", updateHermes: "Atualizar Hermes", updatingHermes: "A atualizar Hermes…", waitingForOutput: "À espera de saída…", }, sessions: { title: "Sessões", searchPlaceholder: "Pesquisar conteúdo das mensagens...", noSessions: "Ainda não há sessões", noMatch: "Nenhuma sessão corresponde à pesquisa", startConversation: "Inicie uma conversa para a ver aqui", noMessages: "Sem mensagens", untitledSession: "Sessão sem título", deleteSession: "Eliminar sessão", confirmDeleteTitle: "Eliminar sessão?", confirmDeleteMessage: "Esta ação remove permanentemente a conversa e todas as suas mensagens. Não é possível anular.", sessionDeleted: "Sessão eliminada", failedToDelete: "Falha ao eliminar a sessão", resumeInChat: "Retomar no Chat", previousPage: "Página anterior", nextPage: "Página seguinte", roles: { user: "Utilizador", assistant: "Assistente", system: "Sistema", tool: "Ferramenta", }, }, analytics: { period: "Período:", totalTokens: "Tokens totais", totalSessions: "Sessões totais", apiCalls: "Chamadas à API", dailyTokenUsage: "Utilização diária de tokens", dailyBreakdown: "Detalhe diário", perModelBreakdown: "Detalhe por modelo", topSkills: "Competências principais", skill: "Competência", loads: "Carregadas pelo agente", edits: "Geridas pelo agente", lastUsed: "Última utilização", input: "Entrada", output: "Saída", total: "Total", noUsageData: "Sem dados de utilização para este período", startSession: "Inicie uma sessão para ver as análises aqui", date: "Data", model: "Modelo", tokens: "Tokens", perDayAvg: "/dia (média)", acrossModels: "em {count} modelos", inOut: "{input} entrada / {output} saída", }, models: { modelsUsed: "Modelos utilizados", estimatedCost: "Custo est.", tokens: "tokens", sessions: "sessões", avgPerSession: "média/sessão", apiCalls: "chamadas à API", toolCalls: "chamadas a ferramentas", noModelsData: "Sem dados de utilização de modelos para este período", startSession: "Inicie uma sessão para ver os dados de modelos aqui", }, logs: { title: "Registos", autoRefresh: "Atualização automática", file: "Ficheiro", level: "Nível", component: "Componente", lines: "Linhas", noLogLines: "Não foram encontradas linhas de registo", }, cron: { confirmDeleteMessage: "Esta ação remove a tarefa do agendamento. Não é possível anular.", confirmDeleteTitle: "Eliminar tarefa agendada?", newJob: "Nova tarefa cron", nameOptional: "Nome (opcional)", namePlaceholder: "ex: Resumo diário", prompt: "Prompt", promptPlaceholder: "O que deve o agente fazer em cada execução?", schedule: "Agendamento (expressão cron)", schedulePlaceholder: "0 9 * * *", deliverTo: "Entregar a", scheduledJobs: "Tarefas agendadas", noJobs: "Sem tarefas cron configuradas. Crie uma acima.", last: "Última", next: "Próxima", pause: "Pausar", resume: "Retomar", triggerNow: "Acionar agora", delivery: { local: "Local", telegram: "Telegram", discord: "Discord", slack: "Slack", email: "Email", }, }, profiles: { newProfile: "Novo perfil", name: "Nome", namePlaceholder: "ex: coder, writer, etc.", nameRequired: "O nome é obrigatório", nameRule: "Apenas letras minúsculas, dígitos, _ e -; deve começar com letra ou dígito; até 64 caracteres.", invalidName: "Nome de perfil inválido", cloneFromDefault: "Clonar configuração do perfil predefinido", allProfiles: "Perfis", noProfiles: "Não foram encontrados perfis.", defaultBadge: "predefinido", hasEnv: "env", model: "Modelo", skills: "Competências", rename: "Renomear", editSoul: "Editar SOUL.md", soulSection: "SOUL.md (personalidade / prompt do sistema)", soulPlaceholder: "# Como este agente se deve comportar…", saveSoul: "Guardar SOUL", soulSaved: "SOUL.md guardado", openInTerminal: "Copiar comando da CLI", commandCopied: "Copiado para a área de transferência", copyFailed: "Não foi possível copiar", confirmDeleteTitle: "Eliminar perfil?", confirmDeleteMessage: "Esta ação elimina permanentemente o perfil '{name}' — configuração, chaves, memórias, sessões, competências, tarefas cron. Não é possível anular.", created: "Criado", deleted: "Eliminado", renamed: "Renomeado", }, pluginsPage: { contextEngineLabel: "Motor de contexto", dashboardSlots: "Slots do dashboard", disableRuntime: "Desativar", enableAfterInstall: "Ativar após instalação", enableRuntime: "Ativar", forceReinstall: "Forçar reinstalação (eliminar pasta existente primeiro)", headline: "Descobrir, instalar, ativar e atualizar plugins Hermes (paridade com `hermes plugins`).", identifierLabel: "URL Git ou owner/repo", inactive: "inativo", installBtn: "Instalar a partir do Git", installHeading: "Instalar a partir de GitHub / URL Git", installHint: "Use a forma curta owner/repo ou um URL completo de clone https:// ou git@.", memoryProviderLabel: "Fornecedor de memória", missingEnvWarn: "Defina os seguintes em Chaves antes de o plugin poder executar:", noDashboardTab: "Sem separador no dashboard", openTab: "Abrir", orphanHeading: "Extensões só de dashboard (sem plugin.yaml de agente correspondente)", pluginListHeading: "Plugins instalados", providerDefaults: "incorporado / predefinido", providersHeading: "Plugins de fornecedor em runtime", providersHint: "Escreve memory.provider (vazio = incorporado) e context.engine no config.yaml. Aplicado na próxima sessão.", refreshDashboard: "Re-analisar extensões do dashboard", removeConfirm: "Remover este plugin de ~/.hermes/plugins/?", removeHint: "Apenas plugins instalados pelo utilizador em ~/.hermes/plugins podem ser removidos.", rescanHeading: "Registo de plugins SPA", rescanHint: "Re-analise depois de adicionar ficheiros em disco para que a barra lateral detete novos manifestos.", runtimeHeading: "Runtime do gateway (plugins YAML)", saveProviders: "Guardar definições do fornecedor", savedProviders: "Definições do fornecedor guardadas.", sourceBadge: "Fonte", authRequired: "Autenticação necessária", authRequiredHint: "Execute este comando para autenticar:", updateGit: "Git pull", versionBadge: "Versão", showInSidebar: "Mostrar na barra lateral", hideFromSidebar: "Ocultar da barra lateral", }, skills: { title: "Competências", searchPlaceholder: "Pesquisar competências e conjuntos de ferramentas...", enabledOf: "{enabled}/{total} ativadas", all: "Todas", categories: "Categorias", filters: "Filtros", noSkills: "Nenhuma competência encontrada. As competências são carregadas de ~/.hermes/skills/", noSkillsMatch: "Nenhuma competência corresponde à pesquisa ou filtro.", skillCount: "{count} competência{s}", resultCount: "{count} resultado{s}", noDescription: "Sem descrição disponível.", toolsets: "Conjuntos de ferramentas", toolsetLabel: "conjunto {name}", noToolsetsMatch: "Nenhum conjunto de ferramentas corresponde à pesquisa.", setupNeeded: "Configuração necessária", disabledForCli: "Desativado para CLI", more: "+{count} mais", }, config: { configPath: "~/.hermes/config.yaml", filters: "Filtros", sections: "Secções", exportConfig: "Exportar configuração como JSON", importConfig: "Importar configuração de JSON", resetDefaults: "Repor predefinições", resetScopeTooltip: "Repor {scope} para predefinições", confirmResetScope: "Repor todas as definições de {scope} para os valores predefinidos? Isto apenas atualiza o formulário — as alterações só são escritas em config.yaml quando premir Guardar.", resetScopeToast: "{scope} reposto para predefinições — reveja e Guarde para persistir", rawYaml: "Configuração YAML em bruto", searchResults: "Resultados da pesquisa", fields: "campo{s}", noFieldsMatch: 'Nenhum campo corresponde a "{query}"', configSaved: "Configuração guardada", yamlConfigSaved: "Configuração YAML guardada", failedToSave: "Falha ao guardar", failedToSaveYaml: "Falha ao guardar YAML", failedToLoadRaw: "Falha ao carregar configuração em bruto", configImported: "Configuração importada — reveja e guarde", invalidJson: "Ficheiro JSON inválido", categories: { general: "Geral", agent: "Agente", terminal: "Terminal", display: "Visualização", delegation: "Delegação", memory: "Memória", compression: "Compressão", security: "Segurança", browser: "Browser", voice: "Voz", tts: "Texto para fala", stt: "Fala para texto", logging: "Registo", discord: "Discord", auxiliary: "Auxiliar", }, }, env: { changesNote: "As alterações são guardadas em disco imediatamente. As sessões ativas detetam novas chaves automaticamente.", confirmClearMessage: "O valor armazenado para esta variável será removido do seu ficheiro .env. Esta ação não pode ser anulada a partir da UI.", confirmClearTitle: "Limpar esta chave?", description: "Gerir chaves de API e segredos armazenados em", hideAdvanced: "Ocultar avançadas", showAdvanced: "Mostrar avançadas", llmProviders: "Fornecedores LLM", providersConfigured: "{configured} de {total} fornecedores configurados", getKey: "Obter chave", notConfigured: "{count} não configurado(s)", notSet: "Não definido", keysCount: "{count} chave{s}", enterValue: "Introduzir valor...", replaceCurrentValue: "Substituir valor atual ({preview})", showValue: "Mostrar valor real", hideValue: "Ocultar valor", }, oauth: { title: "Inícios de sessão de fornecedor (OAuth)", providerLogins: "Inícios de sessão de fornecedor (OAuth)", description: "{connected} de {total} fornecedores OAuth ligados. Os fluxos de início de sessão são executados via CLI; clique em Copiar comando e cole num terminal para configurar.", connected: "Ligado", expired: "Expirado", notConnected: "Não ligado. Execute {command} num terminal.", runInTerminal: "num terminal.", noProviders: "Não foram detetados fornecedores compatíveis com OAuth.", login: "Iniciar sessão", disconnect: "Desligar", managedExternally: "Gerido externamente", copied: "Copiado ✓", cli: "CLI", copyCliCommand: "Copiar comando CLI (para externo / fallback)", connect: "Ligar", sessionExpires: "A sessão expira em {time}", initiatingLogin: "A iniciar fluxo de início de sessão…", exchangingCode: "A trocar código por tokens…", connectedClosing: "Ligado! A fechar…", loginFailed: "Início de sessão falhou.", sessionExpired: "Sessão expirada. Clique em Tentar novamente para iniciar um novo início de sessão.", reOpenAuth: "Reabrir página de autenticação", reOpenVerification: "Reabrir página de verificação", submitCode: "Submeter código", pasteCode: "Cole o código de autorização (com sufixo #state também é válido)", waitingAuth: "À espera que autorize no browser…", enterCodePrompt: "Foi aberto um novo separador. Introduza este código se for solicitado:", pkceStep1: "Foi aberto um novo separador para claude.ai. Inicie sessão e clique em Authorize.", pkceStep2: "Copie o código de autorização mostrado após autorizar.", pkceStep3: "Cole-o abaixo e submeta.", flowLabels: { pkce: "Início de sessão pelo browser (PKCE)", device_code: "Código de dispositivo", external: "CLI externa", }, expiresIn: "expira em {time}", }, language: { switchTo: "Mudar para inglês", }, theme: { title: "Tema", switchTheme: "Mudar tema", }, achievements: { hero: { kicker: "Agentic Gamerscore", title: "Hermes Achievements", subtitle: "Distintivos colecionáveis do Hermes obtidos a partir do histórico real de sessões. Conquistas conhecidas mas ainda não obtidas aparecem como Descobertas; conquistas Secretas permanecem ocultas até surgir o primeiro comportamento correspondente.", scan_subtitle: "A analisar o histórico de sessões do Hermes. A primeira análise pode demorar 5–10 segundos em históricos extensos.", }, actions: { rescan: "Voltar a analisar", }, stats: { unlocked: "Desbloqueadas", unlocked_hint: "distintivos obtidos", discovered: "Descobertas", discovered_hint: "conhecidas, ainda não obtidas", secrets: "Secretas", secrets_hint: "ocultas até ao primeiro sinal", highest_tier: "Nível mais alto", highest_tier_hint: "Copper → Silver → Gold → Diamond → Olympian", latest: "Mais recente", latest_hint_empty: "execute mais o Hermes", none_yet: "Ainda nenhuma", }, state: { unlocked: "Desbloqueada", discovered: "Descoberta", secret: "Secreta", }, tier: { target: "Objetivo {tier}", hidden: "Oculto", complete: "Completo", objective: "Objetivo", }, progress: { hidden: "oculto", }, scan: { building_headline: "A construir perfil de conquistas…", building_detail: "A ler sessões, chamadas de ferramentas, metadados de modelos e estado de desbloqueio.", starting_headline: "A iniciar análise de conquistas…", progress_detail: "Analisadas {scanned} de {total} sessões · {pct}%. Os distintivos são desbloqueados à medida que mais histórico é processado.", idle_detail: "A ler sessões, chamadas de ferramentas, metadados de modelos e estado de desbloqueio. Os distintivos aparecem aqui à medida que são desbloqueados.", }, guide: { tiers_header: "Níveis", secret_header: "Conquistas secretas", secret_body: "As secretas escondem o seu acionador exato. Assim que o Hermes detetar um sinal relacionado, o cartão passa a Descoberta e mostra o requisito.", scan_status_header: "Estado da análise", scan_status_body: "O Hermes analisa o histórico local uma vez e depois os cartões aparecem automaticamente. Nada está bloqueado se isto demorar alguns segundos.", what_scanned_header: "O que é analisado", what_scanned_body: "Sessões, chamadas de ferramentas, metadados de modelos, erros, conquistas e estado de desbloqueio local.", }, card: { share_title: "Partilhar esta conquista", share_label: "Partilhar {name}", share_text: "Partilhar", how_to_reveal: "Como revelar", what_counts: "O que conta", evidence_label: "Evidência", evidence_session_fallback: "sessão", no_evidence: "Ainda sem evidência", }, latest: { header: "Desbloqueios recentes", }, empty: { no_secrets_header: "Não restam segredos ocultos nesta análise.", no_secrets_body: "Pista: as secretas começam normalmente em padrões pouco comuns de falha ou de utilizador avançado — conflitos de portas, barreiras de permissões, variáveis de ambiente em falta, erros de YAML, colisões de Docker, uso de rollback/checkpoint, acertos de cache ou pequenas correções após muito texto a vermelho.", }, filters: { all_categories: "Todas", visibility_all: "todas", visibility_unlocked: "desbloqueadas", visibility_discovered: "descobertas", visibility_secret: "secretas", }, share: { dialog_label: "Partilhar conquista", header: "Partilhar: {name}", close: "Fechar", rendering: "A renderizar…", card_alt: "Cartão de partilha de {name}", error_generic: "Algo correu mal.", x_title: "Abre o X com uma publicação pré-preenchida", x_button: "Partilhar no X", copy_title: "Copiar a imagem para colar na sua publicação", copy_button: "Copiar imagem", copied: "Copiado ✓", download_button: "Transferir PNG", hint: "Partilhar no X abre uma publicação pré-preenchida num novo separador. Clique primeiro em Copiar imagem se quiser anexar o distintivo 1200×630 — o X permite colá-lo diretamente no compositor da publicação. Transferir PNG guarda o ficheiro para utilização em qualquer lado.", clipboard_unsupported: "A cópia de imagens para a área de transferência não é suportada neste navegador — utilize Transferir.", tweet_text: "Just unlocked {tier_part}\"{name}\" in Hermes Agent ☤", }, }, kanban: { loading: "A carregar o quadro Kanban…", loadFailed: "Falha ao carregar o quadro Kanban: ", loadFailedHint: "O backend cria automaticamente kanban.db na primeira leitura. Se persistir, consulte os registos do dashboard.", board: "Quadro", newBoard: "+ Novo quadro", newBoardTitle: "Novo quadro", newBoardDescription: "Os quadros permitem-lhe separar fluxos de trabalho não relacionados — um por projeto, repositório ou domínio. Os workers de um quadro nunca veem as tarefas de outro quadro.", slug: "Slug", slugHint: "— minúsculas, hífenes, p. ex. atm10-server", displayName: "Nome a apresentar", displayNameHint: "(opcional)", description: "Descrição", descriptionHint: "(opcional)", icon: "Ícone", iconHint: "(carácter único ou emoji)", switchAfterCreate: "Mudar para este quadro após o criar", cancel: "Cancelar", creating: "A criar…", createBoard: "Criar quadro", search: "Pesquisar", filterCards: "Filtrar cartões…", tenant: "Tenant", allTenants: "Todos os tenants", assignee: "Responsável", allProfiles: "Todos os perfis", showArchived: "Mostrar arquivados", lanesByProfile: "Faixas por perfil", nudgeDispatcher: "Despertar o dispatcher", refresh: "Atualizar", selected: "selecionado(s)", complete: "Concluir", archive: "Arquivar", apply: "Aplicar", clear: "Limpar", createTask: "Criar tarefa nesta coluna", noTasks: "— sem tarefas —", unassigned: "sem atribuição", untitled: "(sem título)", loadingDetail: "A carregar…", addComment: "Adicionar um comentário… (Enter para submeter)", comment: "Comentário", status: "Estado", workspace: "Espaço de trabalho", skills: "Competências", createdBy: "Criado por", result: "Resultado", comments: "Comentários", events: "Eventos", runHistory: "Histórico de execuções", workerLog: "Registo do worker", loadingLog: "A carregar registo…", noWorkerLog: "— ainda não há registo do worker (a tarefa não foi iniciada ou o registo foi rotacionado) —", noDescription: "— sem descrição —", noComments: "— sem comentários —", edit: "editar", save: "Guardar", dependencies: "Dependências", parents: "Pais:", children: "Filhos:", none: "nenhum", addParent: "— adicionar pai —", addChild: "— adicionar filho —", removeDependency: "Remover dependência", block: "Bloquear", unblock: "Desbloquear", notifyHomeChannels: "Notificar canais principais", diagnostics: "Diagnósticos", hide: "Ocultar", show: "Mostrar", attention: "Atenção", tasksNeedAttention: "tarefas precisam de atenção", taskNeedsAttention: "1 tarefa precisa de atenção", diagnostic: "diagnóstico", open: "Abrir", close: "Fechar (Esc)", reassignTo: "Reatribuir a:", copied: "Copiado", copyCommand: "Copiar comando para a área de transferência", reclaim: "Reivindicar", reassign: "Reatribuir", renderingError: "O separador Kanban encontrou um erro de renderização", reloadView: "Recarregar vista", wsAuthFailed: "Falha de autenticação WebSocket — recarregue a página para atualizar o token de sessão.", markDone: "Marcar {n} tarefa(s) como concluídas?", markArchived: "Arquivar {n} tarefa(s)?", warning: "Aviso", phantomIds: "Ids fantasma:", active: "ativo", ended: "terminado", noProfile: "(sem perfil)", showAllAttempts: "Mostrar todas as tentativas", sendingUpdates: "A enviar atualizações para", sendNotifications: "Enviar notificações de completed / blocked / gave_up para", archiveBoardConfirm: "Arquivar o quadro '{name}'? Será movido para boards/_archived/ para que possa recuperá-lo mais tarde. As tarefas deste quadro deixarão de aparecer em qualquer parte da interface.", archiveBoardTitle: "Arquivar este quadro", boardSwitcherHint: "Os quadros permitem-lhe separar fluxos de trabalho não relacionados", taskCreatedWarning: "Tarefa criada, mas: ", moveFailed: "Falha ao mover: ", bulkFailed: "Em lote: ", completionBlockedHallucination: "⚠ Conclusão bloqueada — ids de cartões fantasma", suspectedHallucinatedReferences: "⚠ O texto referenciou ids de cartões fantasma", pickProfileFirst: "Escolha primeiro um perfil.", unblockedMessage: "{id} desbloqueado. A tarefa está pronta para o próximo tick.", unblockFailed: "Falha ao desbloquear: ", reclaimedMessage: "{id} reivindicado. A tarefa voltou a ready.", reclaimFailed: "Falha ao reivindicar: ", reassignedMessage: "{id} reatribuído a {profile}.", reassignFailed: "Falha ao reatribuir: ", selectForBulk: "Selecionar para ações em lote", clickToEdit: "Clique para editar", clickToEditAssignee: "Clique para editar responsável", emptyAssignee: "(vazio = remover atribuição)", columnLabels: { triage: "Triagem", todo: "A fazer", scheduled: "Agendado", ready: "Pronto", running: "Em curso", blocked: "Bloqueado", done: "Concluído", archived: "Arquivado", }, columnHelp: { triage: "Ideias em bruto — um specifier vai detalhar a especificação", todo: "À espera de dependências ou sem atribuição", scheduled: "À espera de um atraso conhecido ou de um seguimento agendado", ready: "Dependências satisfeitas; atribua um perfil para despachar", running: "Reivindicado por um worker — em execução", blocked: "O worker pediu intervenção humana", done: "Concluído", archived: "Arquivado", }, confirmDone: "Marcar esta tarefa como concluída? A reivindicação do worker é libertada e os filhos dependentes ficam prontos.", confirmArchive: "Arquivar esta tarefa? Desaparece da vista padrão do quadro.", confirmBlocked: "Marcar esta tarefa como bloqueada? A reivindicação do worker é libertada.", completionSummary: "Resumo de conclusão para {label}. Será guardado como o resultado da tarefa.", completionSummaryRequired: "É necessário um resumo de conclusão antes de marcar uma tarefa como concluída.", triagePlaceholder: "Ideia aproximada — a IA irá especificá-la…", taskTitlePlaceholder: "Título da nova tarefa…", specifier: "specifier", assigneePlaceholder: "responsável", priority: "Prioridade", skillsPlaceholder: "competências (opcional, separadas por vírgulas): translation, github-code-review", noParent: "— sem pai —", workspacePathDir: "caminho do espaço de trabalho (obrigatório, p. ex. ~/projects/my-app)", workspacePathOptional: "caminho do espaço de trabalho (opcional, derivado do responsável se vazio)", logTruncated: "(a mostrar os últimos 100 KB — registo completo em ", logAt: ")", }, };