diff --git a/apps/app/src/i18n/index.ts b/apps/app/src/i18n/index.ts index 1d5fe5d08..e35a141fb 100644 --- a/apps/app/src/i18n/index.ts +++ b/apps/app/src/i18n/index.ts @@ -3,18 +3,19 @@ import en from "./locales/en"; import ja from "./locales/ja"; import zh from "./locales/zh"; import vi from "./locales/vi"; +import ptBR from "./locales/pt-BR"; import { LANGUAGE_PREF_KEY } from "../app/constants"; /** * Supported languages */ -export type Language = "en" | "ja" | "zh" | "vi"; +export type Language = "en" | "ja" | "zh" | "vi" | "pt-BR"; export type Locale = Language; /** * All supported languages - single source of truth */ -export const LANGUAGES: Language[] = ["en", "ja", "zh", "vi"]; +export const LANGUAGES: Language[] = ["en", "ja", "zh", "vi", "pt-BR"]; /** * Language options for UI - single source of truth @@ -24,6 +25,7 @@ export const LANGUAGE_OPTIONS = [ { value: "ja" as Language, label: "日本語", nativeName: "日本語" }, { value: "zh" as Language, label: "简体中文", nativeName: "简体中文" }, { value: "vi" as Language, label: "Vietnamese", nativeName: "Tiếng Việt" }, + { value: "pt-BR" as Language, label: "Portuguese (BR)", nativeName: "Português (BR)" }, ] as const; /** @@ -34,6 +36,7 @@ const TRANSLATIONS: Record> = { ja, zh, vi, + "pt-BR": ptBR, }; /** @@ -89,6 +92,7 @@ export const setLocale = (newLocale: Language) => { */ export const t = (key: string, localeOverride?: Language): string => { const loc = localeOverride ?? locale(); +1 // Try target language first if (TRANSLATIONS[loc]?.[key]) { diff --git a/apps/app/src/i18n/locales/index.ts b/apps/app/src/i18n/locales/index.ts index 0e6818961..5dc635193 100644 --- a/apps/app/src/i18n/locales/index.ts +++ b/apps/app/src/i18n/locales/index.ts @@ -5,3 +5,4 @@ export { default as en } from "./en"; export { default as ja } from "./ja"; export { default as zh } from "./zh"; export { default as vi } from "./vi"; +export { default as pt-BR } from "./pt-BR"; diff --git a/apps/app/src/i18n/locales/pt-BR.ts b/apps/app/src/i18n/locales/pt-BR.ts new file mode 100644 index 000000000..81a06fb6b --- /dev/null +++ b/apps/app/src/i18n/locales/pt-BR.ts @@ -0,0 +1,861 @@ +/** + * Traduções para português do Brasil + * Termos profissionais (Skills, Plugins, Commands, Sessions, OpenCode, OpenPackage, OpenWork) NÃO são traduzidos + */ + +export default { + // ==================== Dashboard ==================== + "dashboard.title": "Dashboard", + "dashboard.sessions": "Sessões", + "dashboard.commands": "Comandos", + "dashboard.skills": "Skills", + "dashboard.plugins": "Plugins", + "dashboard.mcps": "Apps", + "dashboard.settings": "Configurações", + "dashboard.home": "Home", + "dashboard.runs": "Execuções", + "dashboard.find_workspace": "Buscar workspace...", + "dashboard.workspaces": "Workspaces", + "dashboard.no_workspaces": "Nenhum workspace encontrado.", + "dashboard.new_workspace": "Novo Workspace...", + "dashboard.new_remote_workspace": "Adicionar Workspace Remoto...", + "dashboard.forget_workspace": "Esquecer workspace", + "dashboard.remote": "Remoto", + "dashboard.connection": "Conexão", + "dashboard.local_engine": "Engine Local", + "dashboard.client_mode": "Modo Cliente", + "dashboard.connected": "Conectado", + "dashboard.not_connected": "Não conectado", + "dashboard.stop_disconnect": "Parar e Desconectar", + "dashboard.disconnect": "Desconectar", + "dashboard.new_task": "Nova Tarefa", + "dashboard.new": "Novo", + "dashboard.busy": "Ocupado", + "dashboard.hero_title": "O que vamos fazer hoje?", + "dashboard.hero_description": "Descreva um resultado. O OpenWork vai executar e manter um histórico de auditoria.", + "dashboard.quick_start_commands": "Comandos de Início Rápido", + "dashboard.view_all": "Ver todos", + "dashboard.no_commands": "Nenhum comando ainda. Comandos iniciais aparecerão aqui.", + "dashboard.run_command": "Executar um comando salvo", + "dashboard.recent_sessions": "Sessões Recentes", + "dashboard.this_workspace": "este workspace", + "dashboard.no_sessions": "Nenhuma sessão ainda.", + "dashboard.idle": "Ocioso", + "dashboard.running": "Em execução", + "dashboard.completed": "Concluído", + "dashboard.failed": "Falhou", + "dashboard.repairing_cache": "Reparando cache", + "dashboard.repair_cache": "Reparar cache", + "dashboard.retry": "Tentar novamente", + "dashboard.alpha": "Alpha", + "dashboard.create_workspace_title": "Criar Workspace", + "dashboard.create_workspace_subtitle": "Inicializar um novo workspace baseado em pasta.", + "dashboard.create_workspace_confirm": "Criar Workspace", + "dashboard.create_sandbox_confirm": "Criar como sandbox", + "share_skill_destination.title": "Para onde esta skill deve ir?", + "share_skill_destination.subtitle": "Escolha um workspace existente ou crie um novo antes de importar esta skill compartilhada.", + "share_skill_destination.skill_label": "Skill compartilhada", + "share_skill_destination.fallback_skill_name": "Skill compartilhada", + "share_skill_destination.trigger_label": "Gatilho", + "share_skill_destination.current_badge": "Atual", + "share_skill_destination.existing_workers": "Workspaces existentes", + "share_skill_destination.no_workers": "Nenhum workspace está pronto ainda. Crie um ou conecte um workspace remoto para instalar esta skill.", + "share_skill_destination.new_destination": "Novo destino", + "share_skill_destination.selection_ready": "Pronto para adicionar", + "share_skill_destination.selected_badge": "Selecionado", + "share_skill_destination.selected_hint": "Selecionado. Revise o destino abaixo e confirme.", + "share_skill_destination.footer_idle": "Escolha um workspace para continuar.", + "share_skill_destination.footer_selected": "Workspace selecionado:", + "share_skill_destination.confirm_button": "Adicionar skill ao workspace", + "share_skill_destination.confirm_busy": "Adicionando skill...", + "share_skill_destination.local_badge": "Local", + "share_skill_destination.remote_badge": "Remoto", + "share_skill_destination.sandbox_badge": "Sandbox", + "share_skill_destination.create_worker": "Criar novo workspace", + "share_skill_destination.create_worker_desc": "Abrir o fluxo de configuração do workspace e adicionar esta skill após o novo workspace estar pronto.", + "share_skill_destination.connect_remote": "Conectar workspace remoto", + "share_skill_destination.connect_remote_desc": "Vincular um host OpenWork e selecioná-lo na lista para importar esta skill.", + "dashboard.sandbox_get_ready_title": "Sandboxes precisam do Docker", + "dashboard.sandbox_get_ready_action": "Preparar o sistema", + "dashboard.sandbox_get_ready_desc": "Execute este workspace em um container Docker isolado para execuções mais seguras e reproduzíveis.", + "dashboard.sandbox_checking_docker": "Verificando Docker...", + "dashboard.create_remote_workspace_title": "Adicionar Workspace Remoto", + "dashboard.create_remote_workspace_subtitle": "Salvar um servidor OpenWork como workspace.", + "dashboard.create_remote_workspace_confirm": "Adicionar Workspace", + "dashboard.edit_remote_workspace_title": "Editar Conexão Remota", + "dashboard.edit_remote_workspace_subtitle": "Atualizar os dados do servidor OpenWork para este workspace.", + "dashboard.edit_remote_workspace_confirm": "Salvar conexão", + "dashboard.remote_workspace_title": "Workspace remoto", + "dashboard.remote_workspace_hint": "Acompanhe um servidor OpenWork e reconecte a qualquer momento.", + "dashboard.remote_base_url_label": "URL do servidor OpenWork", + "dashboard.remote_base_url_placeholder": "http://127.0.0.1:8787", + "dashboard.remote_base_url_required": "Adicione uma URL de servidor para continuar.", + "dashboard.openwork_host_label": "URL do servidor OpenWork", + "dashboard.openwork_host_placeholder": "https://seu-servidor.openwork.app", + "dashboard.openwork_host_hint": "Use a URL fornecida pelo seu servidor OpenWork.", + "dashboard.openwork_host_token_label": "Token de colaborador ou proprietário", + "dashboard.openwork_host_token_placeholder": "Cole seu token", + "dashboard.openwork_host_token_hint": "Opcional. Cole um token de colaborador para acesso rotineiro ou um token de proprietário quando este cliente precisar responder a prompts de permissão.", + "dashboard.remote_mode_openwork_alpha": "Servidor OpenWork", + "dashboard.remote_mode_direct": "Direto (legado)", + "dashboard.remote_connection_openwork": "OpenWork", + "dashboard.remote_connection_direct": "Direto", + "dashboard.remote_directory_label": "Diretório do workspace (opcional)", + "dashboard.remote_directory_placeholder": "/home/equipe/projeto", + "dashboard.remote_directory_hint": "Deixe em branco para usar o padrão do servidor.", + "dashboard.remote_display_name_label": "Nome de exibição (opcional)", + "dashboard.remote_display_name_placeholder": "Workspace da equipe de design", + "dashboard.select_folder": "Selecionar Pasta", + "dashboard.choose_folder": "Escolher uma pasta", + "dashboard.choose_folder_next": "Compartilhar arquivos com seu workspace.", + "dashboard.change": "Alterar", + "dashboard.opening": "Abrindo...", + "dashboard.choose_preset": "Escolher Predefinição", + "dashboard.choose_folder_continue": "Escolha uma pasta para continuar.", + "dashboard.starter_workspace": "Workspace inicial", + "dashboard.starter_workspace_desc": "Pré-configurado para mostrar como usar plugins, comandos e skills.", + "dashboard.empty_workspace": "Workspace vazio", + "dashboard.empty_workspace_desc": "Comece com uma pasta em branco e adicione o que precisar.", + "dashboard.blueprints_workspace": "Blueprints", + "dashboard.blueprints_workspace_desc": "Comece com um workspace pronto para automação com skills reutilizáveis, comandos e fluxos compartilhados.", + + // ==================== Workspace ==================== + "workspace.rename_title": "Editar nome do workspace", + "workspace.rename_description": "Atualizar o nome exibido na barra lateral.", + "workspace.rename_label": "Nome do workspace", + "workspace.rename_placeholder": "Workspace da equipe de design", + + // ==================== Session ==================== + "session.no_selected": "Nenhuma sessão selecionada", + "session.back_to_dashboard": "Voltar ao dashboard", + "session.new_task": "Nova tarefa", + "session.recents": "Recentes", + "session.recents_notice": "Estas tarefas são executadas localmente e não sincronizam entre dispositivos.", + "session.ready_to_work_title": "Pronto para trabalhar", + "session.ready_to_work_description": "Descreva uma tarefa. Vou mostrar o progresso e pedir permissões quando necessário.", + "session.document_label": "Documento", + "session.standard_label": "Padrão", + "session.no_artifacts_fallback": "Nenhum artefato ainda.", + "session.active_plugins_label": "Plugins ativos", + "session.active_plugins_count": "{count}", + "session.no_plugins_loaded": "Nenhum plugin carregado.", + "session.selected_folders_label": "Pastas selecionadas", + "session.selected_folders_count": "{count}", + "session.working_files_label": "Arquivos de trabalho", + "session.none_yet_label": "Nenhum ainda.", + "session.permission_required_title": "Permissão Necessária", + "session.permission_required_description": "O OpenCode está solicitando permissão para continuar.", + "session.permission_label_uppercase": "Permissão", + "session.scope_label_uppercase": "Escopo", + "session.details_label": "Detalhes", + "session.steps_notice_text": "Os passos serão exibidos conforme a tarefa avança.", + "session.ready_to_work": "Pronto para trabalhar", + "session.ready_description": "Descreva uma tarefa. Vou mostrar o progresso e pedir permissões quando necessário.", + "session.hide_steps": "Ocultar passos", + "session.view_steps": "Ver passos", + "session.open": "Abrir", + "session.reveal": "Mostrar", + "session.opened_toast": "Aberto no app padrão.", + "session.revealed_toast": "Exibido no gerenciador de arquivos.", + "session.artifact_path_missing": "Caminho do artefato ausente.", + "session.desktop_only": "Abrir está disponível apenas no app desktop.", + "session.open_failed": "Não foi possível abrir o artefato.", + "session.model": "Modelo", + "session.ready": "Pronto", + "session.connect_provider": "Conecte um provedor para personalizar isso.", + "session.running": "Em execução", + "session.progress": "Progresso", + "session.steps_notice": "Os passos serão exibidos conforme a tarefa avança.", + "session.artifacts": "Artefatos", + "session.no_artifacts": "Nenhum artefato ainda.", + "session.context": "Contexto", + "session.active_plugins": "Plugins ativos", + "session.no_plugins": "Nenhum plugin carregado.", + "session.selected_folders": "Pastas selecionadas", + "session.working_files": "Arquivos de trabalho", + "session.none_yet": "Nenhum ainda.", + "session.document": "Documento", + "session.standard": "Padrão", + "session.try_notion_prompt": "Experimente agora: configure meu CRM no Notion", + "session.insert_prompt": "Inserir prompt", + "session.placeholder": "Pergunte ao OpenWork...", + "session.run": "Executar", + "session.permission_required": "Permissão Necessária", + "session.permission_description": "O OpenCode está solicitando permissão para continuar.", + "session.permission_label": "Permissão", + "session.scope_label": "Escopo", + "session.details": "Detalhes", + "session.deny": "Negar", + "session.once": "Uma vez", + "session.allow_for_session": "Permitir para esta sessão", + "session.tasks_local_hint": "Estas tarefas são executadas localmente e não sincronizam entre dispositivos.", + "session.recents_label": "Recentes", + "session.model_standard": "Padrão", + "session.run_button_title": "Executar", + "session.rename_title": "Renomear sessão", + "session.rename_description": "Atualizar o nome desta sessão.", + "session.rename_label": "Nome da sessão", + "session.rename_placeholder": "Digite um novo nome", + + // ==================== Commands ==================== + "commands.new": "Novo", + "commands.empty_state": "Salve um prompt ou comando para executá-lo novamente com um toque.", + "commands.workspace": "Este workspace", + "commands.global": "Todos os workspaces", + "commands.other": "Outros comandos", + "commands.run": "Executar", + "commands.modal_title": "Salvar um fluxo reutilizável", + "commands.modal_description": "Armazene um prompt ou comando para reutilização rápida.", + "commands.name_label": "Nome do comando", + "commands.name_placeholder": "ex: daily-standup", + "commands.name_hint": "Isso se torna /daily-standup no OpenCode.", + "commands.description_label": "Descrição (opcional)", + "commands.description_placeholder": "O que este comando faz?", + "commands.template_label": "Instruções", + "commands.template_placeholder": "Escreva as instruções que deseja reutilizar…", + "commands.template_hint": "Use $ARGUMENTS para aceitar detalhes.", + "commands.details_required": "Detalhes", + "commands.default_description": "Executar um comando salvo", + "commands.command_label": "Comando", + "commands.details_label": "Detalhes", + "commands.details_placeholder": "Adicionar detalhes opcionais", + "commands.details_hint": "Estes detalhes são passados ao comando.", + "commands.run_modal_title": "Executar comando", + "commands.run_modal_description": "Adicione detalhes opcionais antes de executar.", + "commands.run_modal_run": "Executar comando", + "commands.name_will_be": "Será criado como", + "commands.override_title": "Substituir comando existente?", + "commands.override_description": "Já existe um comando com este nome.", + "commands.override_warning": "Isso substituirá o comando \"{name}\" existente. Esta ação não pode ser desfeita.", + "commands.override_confirm": "Substituir", + "commands.override_cancel": "Manter existente", + + // ==================== Skills ==================== + "skills.title": "Skills", + "skills.subtitle": "Gerenciar skills para este workspace.", + "skills.refresh": "Atualizar", + "skills.add_title": "Adicionar skills", + "skills.add_description": "Instale um comando inicial, importe uma skill ou abra a pasta.", + "skills.install_from_openpackage": "Instalar do OpenPackage", + "skills.host_mode_only": "Apenas workspace local", + "skills.install": "Instalar", + "skills.installed_label": "Instalado", + "skills.install_hint": "Instala pacotes OpenPackage no workspace atual. As skills devem ficar em `.opencode/skills`.", + "skills.import_local": "Importar skill local", + "skills.import_local_hint": "Copiar uma pasta de skill existente para este workspace.", + "skills.import": "Importar", + "skills.curated_packages": "Pacotes selecionados", + "skills.view": "Visualizar", + "skills.search_placeholder": "Buscar pacotes ou listas (ex: claude, registry, community)", + "skills.no_matches": "Nenhuma correspondência. Tente uma busca diferente.", + "skills.install_package": "Instalar", + "skills.registry_notice": "Publicar no registro OpenPackage (`opkg push`) requer autenticação. Uma busca no registro e sincronização de lista está planejada.", + "skills.installed": "Skills instaladas", + "skills.no_skills": "Nenhuma skill detectada em `.opencode/skills`, `.claude/skills` ou `~/.agents/skills`.", + "skills.desktop_required": "O gerenciamento de skills requer o app desktop.", + "skills.host_only_error": "O gerenciamento de skills requer um workspace local ou servidor OpenWork conectado.", + "skills.install_skill_creator": "Instalar criador de skills", + "skills.install_skill_creator_hint": "Esta skill permite criar outras skills diretamente pelo chat.", + "skills.installing_skill_creator": "Instalando criador de skills...", + "skills.skill_creator_installed": "Criador de skills instalado.", + "skills.skill_creator_already_installed": "O criador de skills já está instalado.", + "skills.install_failed": "Falha na instalação da skill.", + "skills.reveal_folder": "Abrir pasta de skills", + "skills.reveal_folder_hint": "Abrir o diretório de skills no Finder.", + "skills.reveal_button": "Mostrar no Finder", + "skills.reveal_failed": "Falha ao abrir a pasta de skills.", + "skills.uninstall": "Desinstalar", + "skills.uninstall_title": "Desinstalar skill?", + "skills.uninstall_warning": "Isso excluirá permanentemente a skill `{name}` do seu workspace.", + "skills.uninstall_failed": "Falha ao desinstalar a skill.", + "skills.uninstalled": "Skill removida.", + "skills.source_placeholder": "github:anthropics/claude-code", + "skills.notion_crm_title": "Skills de Enriquecimento do Notion CRM", + "skills.notion_crm_description": "Adicionar fluxos de enriquecimento para contatos, pipelines e acompanhamentos.", + "skills.notion_crm_card_description": "Enriqueça dados do Notion CRM com skills prontas.", + "skills.connect_host_to_load": "Conecte um servidor OpenWork para carregar skills.", + "skills.pick_workspace_first": "Escolha primeiro uma pasta de workspace.", + "skills.no_skills_found": "Nenhuma skill encontrada ainda.", + "skills.installed_description": "Skills disponíveis neste workspace.", + "skills.failed_to_load": "Falha ao carregar skills", + "skills.plugin_management_host_only": "O gerenciamento de plugins requer o app desktop.", + "skills.plugins_host_only": "Plugins estão disponíveis apenas no app desktop.", + "skills.pick_project_for_plugins": "Escolha uma pasta de projeto para gerenciar os plugins do projeto.", + "skills.pick_project_for_active": "Escolha uma pasta de projeto para carregar os plugins ativos.", + "skills.no_opencode_found": "Nenhum opencode.json encontrado ainda. Adicione um plugin para criar um.", + "skills.no_opencode_workspace": "Nenhum opencode.json neste workspace ainda.", + "skills.failed_parse_opencode": "Falha ao processar opencode.json", + "skills.failed_load_opencode": "Falha ao carregar opencode.json", + "skills.failed_load_active": "Falha ao carregar plugins ativos.", + "skills.enter_plugin_name": "Digite o nome do pacote do plugin.", + "skills.plugin_already_listed": "Plugin já listado no opencode.json.", + "skills.failed_update_opencode": "Falha ao atualizar opencode.json", + "skills.opackage_install_host_only": "Instalações OpenPackage requerem o app desktop.", + "skills.pick_project_first": "Escolha primeiro uma pasta de projeto.", + "skills.enter_opackage_source": "Digite a fonte do OpenPackage (ex: github:anthropics/claude-code).", + "skills.installing_opackage": "Instalando OpenPackage...", + "skills.install_complete": "Instalado.", + "skills.curated_list_notice": "Esta é uma lista selecionada, não um OpenPackage ainda. Copie o link ou aguarde o PRD para a integração de busca no registro.", + "skills.import_host_only": "Importação de skill requer o app desktop.", + "skills.select_skill_folder": "Selecionar pasta da skill", + "skills.import_failed": "Falha na importação ({status})", + "skills.imported": "Importado.", + "skills.unknown_error": "Erro desconhecido", + + // ==================== Plugins ==================== + "plugins.title": "Plugins OpenCode", + "plugins.description": "Gerenciar `opencode.json` para os plugins do seu projeto ou globais do OpenCode.", + "plugins.config_label": "Config", + "plugins.config_not_loaded": "Ainda não carregado", + "plugins.suggested_label": "Plugins sugeridos", + "plugins.no_plugins_yet": "Nenhum plugin configurado ainda.", + "plugins.enabled_label": "Ativado", + "plugins.open_label": "Abrir", + "plugins.path_label": "Caminho", + "plugins.scope_project": "Projeto", + "plugins.scope_global": "Global", + "plugins.refresh": "Atualizar", + "plugins.config": "Config", + "plugins.not_loaded": "Ainda não carregado", + "plugins.suggested": "Plugins sugeridos", + "plugins.hide_setup": "Ocultar configuração", + "plugins.setup": "Configurar", + "plugins.added": "Adicionado", + "plugins.add": "Adicionar", + "plugins.enabled": "Ativado", + "plugins.no_plugins": "Nenhum plugin configurado ainda.", + "plugins.add_label": "Adicionar plugin", + "plugins.placeholder": "opencode-wakatime", + "plugins.add_hint": "Adicione nomes de pacotes npm, ex: opencode-wakatime", + + // ==================== Apps (MCP) ==================== + "mcp.apps_title": "Apps", + "mcp.apps_subtitle": "Conecte suas ferramentas favoritas para que o OpenWork as use em seu nome.", + "mcp.app_connected": "app conectado", + "mcp.apps_connected": "apps conectados", + "mcp.title": "Apps", + "mcp.description": "Conecte suas ferramentas com um clique.", + "mcp.alpha_banner_title": "Os Apps estão em acesso antecipado enquanto refinamos a experiência.", + "mcp.alpha_banner_help": "Se quiser ajudar, abra um PR e inclua um vídeo curto mostrando o fluxo de login funcionando de ponta a ponta.", + "mcp.mcps_title": "Apps", + "mcp.connect_mcp_hint": "Conecte apps para expandir o que o OpenWork pode fazer.", + "mcp.finish_setup": "Quase lá", + "mcp.finish_setup_hint": "Toque em Ativar para terminar de conectar seu app.", + "mcp.activate_button": "Ativar", + "mcp.reload_banner_title": "Quase lá", + "mcp.reload_banner_description": "Toque em Ativar para terminar de conectar seu app.", + "mcp.reload_banner_description_blocked": "Uma tarefa está em execução. Pare-a primeiro e então ative.", + "mcp.reload_banner_blocked_hint": "Pare a tarefa em execução para ativar.", + "mcp.available_apps": "Apps disponíveis", + "mcp.one_click_connect": "Conectar com um clique", + "mcp.tap_to_connect": "Toque para conectar", + "mcp.connected_badge": "Conectado", + "mcp.your_apps": "Seus apps", + "mcp.last_synced": "Sincronizado", + "mcp.no_apps_yet": "Nenhum app conectado ainda", + "mcp.no_apps_hint": "Conecte um acima para começar.", + "mcp.quick_connect_title": "Apps disponíveis", + "mcp.oauth_only_label": "Um clique", + "mcp.connected_status": "Conectado", + "mcp.no_env_vars": "Nenhuma configuração adicional necessária.", + "mcp.connected_title": "Seus apps", + "mcp.from_opencode_json": "Da configuração", + "mcp.no_servers_yet": "Nenhum app conectado ainda.", + "mcp.edit_config_title": "Editar arquivo de configuração", + "mcp.edit_config_description": "Os apps são armazenados no arquivo de configuração do seu workspace.", + "mcp.docs_link": "Saiba mais", + "mcp.scope_project": "Este workspace", + "mcp.scope_global": "Todos os workers", + "mcp.config_label": "Config", + "mcp.config_file": "Arquivo de configuração", + "mcp.config_not_loaded": "Ainda não carregado", + "mcp.open_file_label": "Abrir arquivo", + "mcp.reveal_in_finder": "Mostrar no Finder", + "mcp.opening_label": "Abrindo...", + "mcp.file_not_found": "Arquivo de configuração ainda não criado", + "mcp.config_load_failed": "Não foi possível carregar o arquivo de configuração", + "mcp.open_file": "Abrir arquivo", + "mcp.pick_workspace_error": "Escolha primeiro uma pasta de workspace.", + "mcp.reveal_config_failed": "Não foi possível abrir o arquivo de configuração", + "mcp.alpha_warning": "Os Apps estão em acesso antecipado enquanto refinamos a experiência.", + "mcp.github_issue": "Ver issue #9510 no GitHub", + "mcp.contribution_guide": "Se quiser ajudar, abra um PR e inclua um vídeo curto mostrando o fluxo de login funcionando de ponta a ponta.", + "mcp.advanced_settings": "Configurações avançadas", + "mcp.advanced_settings_hint": "Edite arquivos de configuração e gerencie conexões manualmente.", + "mcp.hide_advanced": "Ocultar configurações avançadas", + "mcp.show_advanced": "Mostrar configurações avançadas", + "mcp.mcps_label": "Apps", + "mcp.mcps_description": "Conecte apps para expandir o que o OpenWork pode fazer.", + "mcp.configured": "configurado", + "mcp.updated": "Sincronizado", + "mcp.reload_required": "Ativação necessária", + "mcp.reload_description": "Ative para começar a usar a nova conexão.", + "mcp.reload_engine": "Ativar", + "mcp.quick_connect": "Apps disponíveis", + "mcp.oauth_only": "Um clique", + "mcp.connecting": "Conectando...", + "mcp.connect": "Conectar", + "mcp.connected": "Conectado", + "mcp.connected_label": "Conectado", + "mcp.no_env_required": "Nenhuma configuração adicional necessária.", + "mcp.config_source": "Da configuração", + "mcp.no_servers": "Nenhum app conectado ainda.", + "mcp.advanced": "Avançado", + "mcp.advanced_description": "Para conexões personalizadas.", + "mcp.hide": "Ocultar", + "mcp.show": "Mostrar", + "mcp.server_name": "Nome do app", + "mcp.server_name_placeholder": "github-copilot", + "mcp.server_url": "URL do servidor", + "mcp.server_url_placeholder": "https://api.githubcopilot.com/mcp/", + "mcp.oauth": "Entrar", + "mcp.api_key": "Chave de API", + "mcp.enabled": "Ativado", + "mcp.disabled": "Desativado", + "mcp.add_mcp": "Adicionar app", + "mcp.verify_connection": "Testar conexão", + "mcp.cli_guidance": "Comando no terminal (avançado)", + "mcp.config_locations": "A configuração pode ficar em opencode.json, opencode.jsonc ou .opencode/opencode.json.", + "mcp.app_details": "Detalhes do app", + "mcp.details_title": "Detalhes do app", + "mcp.select_app_hint": "Selecione um app para ver os detalhes.", + "mcp.select_server_hint": "Selecione um app para ver os detalhes.", + "mcp.connection_type": "Conexão", + "mcp.type_cloud": "Nuvem (entrar com sua conta)", + "mcp.type_local": "Local (roda neste dispositivo)", + "mcp.capabilities_label": "Recursos", + "mcp.cap_tools": "Ferramentas de IA", + "mcp.cap_signin": "Login na conta", + "mcp.tools_enabled_label": "Ferramentas de IA", + "mcp.oauth_ready_label": "Login na conta", + "mcp.usage_hint_text": "Mencione o nome do app no seu prompt para usar suas ferramentas.", + "mcp.issue_label": "Problema", + "mcp.technical_details": "Detalhes técnicos", + "mcp.next_steps_label": "O que fazer", + "mcp.reload_step": "Ative após conectar um novo app.", + "mcp.auth_step": "Entre quando solicitado.", + "mcp.connection_failed": "Problema de conexão, tente novamente", + "mcp.needs_auth": "Login necessário", + "mcp.register_client": "Configuração necessária", + "mcp.status_disabled": "Pausado", + "mcp.disconnected": "Offline", + "mcp.failed": "Problema", + "mcp.friendly_status_ready": "Pronto", + "mcp.friendly_status_needs_signin": "Login necessário", + "mcp.friendly_status_paused": "Pausado", + "mcp.friendly_status_offline": "Offline", + "mcp.friendly_status_issue": "Problema", + "mcp.host_mode_only": "Apps requerem o app desktop.", + "mcp.pick_workspace_first": "Escolha primeiro uma pasta de workspace.", + "mcp.desktop_required": "Apps requerem o app desktop.", + "mcp.connect_server_first": "Conecte-se ao servidor primeiro.", + "mcp.reload_required_after_add": "Ative para começar a usar o novo app.", + "mcp.connect_failed": "Não foi possível conectar. Tente novamente.", + "mcp.enter_name_and_url": "Digite um nome e URL para o app.", + "mcp.enter_url_first": "Digite uma URL primeiro.", + "mcp.use_debug_command": "Execute opencode mcp debug para solucionar problemas.", + "mcp.add_failed": "Não foi possível adicionar o app.", + "mcp.remove_app": "Remover", + "mcp.remove_failed": "Não foi possível remover o app.", + "mcp.remove_modal_title": "Remover app", + "mcp.remove_modal_message": "Tem certeza que deseja remover {server}? Você pode adicioná-lo de volta a qualquer momento.", + + // Add MCP Modal + "mcp.add_modal_title": "Adicionar Servidor MCP", + "mcp.add_modal_subtitle": "Conecte um servidor MCP personalizado por URL ou comando local.", + "mcp.server_type": "Tipo", + "mcp.type_remote": "Remoto (URL)", + "mcp.type_local_cmd": "Local (comando)", + "mcp.server_command": "Comando", + "mcp.server_command_placeholder": "npx -y @modelcontextprotocol/server-sequential-thinking", + "mcp.server_command_hint": "O comando shell para iniciar o servidor.", + "mcp.oauth_optional_label": "Requer login OAuth", + "mcp.remote_workspace_url_hint": "Workers remotos conectam mais rápido com servidores MCP baseados em URL.", + "mcp.add_server_button": "Adicionar servidor", + "mcp.name_required": "Digite um nome para o servidor.", + "mcp.url_or_command_required": "Digite uma URL para servidores remotos ou um comando para servidores locais.", + + "mcp.logout_label": "OAuth", + "mcp.logout_action": "Sair", + "mcp.logout_working": "Saindo...", + "mcp.logout_hint": "Remove as credenciais OAuth armazenadas. Você precisará entrar novamente.", + "mcp.login_action": "Entrar", + "mcp.login_hint": "Conecte sua conta para terminar de configurar este app.", + "mcp.login_unavailable": "Este app não suporta login pelo OpenWork.", + "mcp.logout_modal_title": "Sair deste app?", + "mcp.logout_modal_message": "Isso removerá as credenciais OAuth armazenadas para {server}. Você precisará entrar novamente para usar este app.", + "mcp.logout_success": "Saiu de {server}.", + "mcp.logout_failed": "Falha ao sair.", + + // MCP Auth Modal + "mcp.auth.open_browser_signin": "Abriremos seu navegador para concluir o login.", + "mcp.auth.connect_server": "Conectar {server}", + "mcp.auth.already_connected": "Já Conectado", + "mcp.auth.already_connected_description": "{server} já está autenticado e pronto para uso.", + "mcp.auth.configured_previously": "O MCP pode ter sido configurado globalmente ou em uma sessão anterior. Você pode fechar este modal e começar a usar as ferramentas MCP imediatamente.", + "mcp.auth.reload_engine_retry": "Aplicar alterações e tentar novamente", + "mcp.auth.retry_now": "Tentar Agora", + "mcp.auth.retry": "Tentar novamente", + "mcp.auth.reload_failed": "Falha ao recarregar o worker antes do login.", + "mcp.auth.applying_changes_title": "Aplicando alterações antes do login", + "mcp.auth.applying_changes_body": "Estamos reiniciando o worker para que o novo MCP esteja pronto para autenticar.", + "mcp.auth.waiting_for_conversation_title": "Aguardando conversa ser concluída", + "mcp.auth.waiting_for_conversation_body": "Vamos redirecioná-lo para autenticar assim que possível.", + "mcp.auth.waiting_for_session": "Aguardando {sessão} terminar", + "mcp.auth.force_stop": "Forçar parada", + "mcp.auth.force_stopping": "Parando...", + "mcp.auth.reload_before_oauth": "Recarregue o engine para concluir a configuração deste MCP antes de iniciar o OAuth.", + "mcp.auth.reload_notice": "Para isso ter efeito, o OpenWork precisa reiniciar o serviço worker. Isso pode interromper uma sessão em andamento.", + "mcp.auth.reload_blocked": "O recarregamento está pausado enquanto uma sessão está em execução. Pare a execução para concluir a configuração.", + "mcp.auth.reload_remote_confirm": "Para isso ter efeito, o OpenWork precisa reiniciar o serviço worker. Isso pode parar sua sessão em andamento. Continuar?", + "mcp.auth.reload_needed": "Conclua a configuração recarregando o engine e tente conectar novamente.", + "mcp.auth.manual_finish_title": "Servidor remoto?", + "mcp.auth.manual_finish_hint": "Cole a URL de callback (localhost:19876) ou apenas o código para concluir a conexão.", + "mcp.auth.callback_label": "URL de callback ou código", + "mcp.auth.callback_placeholder": "http://127.0.0.1:19876/mcp/oauth/callback?code=...", + "mcp.auth.complete_connection": "Concluir conexão", + "mcp.auth.callback_invalid": "Cole a URL de callback ou o parâmetro de código para concluir o OAuth.", + "mcp.auth.port_forward_hint": "Dica: encaminhe a porta de callback se necessário: ssh -L 19876:127.0.0.1:19876 user@host", + "mcp.auth.step1_title": "Abrindo seu navegador", + "mcp.auth.step1_description": "Iniciaremos o fluxo de login do {server} automaticamente.", + "mcp.auth.step2_title": "Autorizar o OpenWork", + "mcp.auth.step2_description": "Entre e aprove o acesso quando solicitado.", + "mcp.auth.step3_title": "Volte aqui quando terminar", + "mcp.auth.step3_description": "Concluiremos a conexão assim que a autorização for completada.", + "mcp.auth.waiting_authorization": "Aguardando a autorização ser concluída no seu navegador...", + "mcp.auth.follow_browser_steps": "Siga os passos de autorização no navegador.", + "mcp.auth.reopen_browser_link": "Clique aqui para reabrir o navegador", + "mcp.auth.done": "Concluído", + "mcp.auth.cancel": "Cancelar", + "mcp.auth.im_done": "Terminei", + "mcp.auth.client_registration_required": "O registro do cliente é necessário antes de continuar com o OAuth.", + "mcp.auth.server_disabled": "Este servidor MCP está desativado. Ative-o e tente novamente.", + "mcp.auth.oauth_failed": "Falha na autenticação OAuth.", + "mcp.auth.invalid_refresh_token": "O token de atualização OAuth é inválido ou expirou. Reautorize para continuar.", + "mcp.auth.reauth_action": "Reautorizar OAuth", + "mcp.auth.reauth_running": "Reautorizando...", + "mcp.auth.reauth_failed": "Falha na reautorização.", + "mcp.auth.reauth_cli_hint": "Execute: opencode mcp auth {server}", + "mcp.auth.reauth_remote_hint": "Reautorize a partir da máquina que executa este worker.", + "mcp.auth.authorization_still_required": "A autorização ainda é necessária. Tente novamente para reiniciar o fluxo.", + "mcp.auth.oauth_not_supported_hint": "Isso pode significar:\n• O servidor MCP não anuncia capacidades OAuth\n• O engine precisa recarregar para descobrir as capacidades do servidor\n• Tente: opencode mcp auth {server} pela CLI", + "mcp.auth.try_reload_engine": "{message}. Tente recarregar o engine primeiro.", + "mcp.auth.failed_to_start_oauth": "Falha ao iniciar fluxo OAuth", + "mcp.auth.oauth_completed_reload": "OAuth concluído. Recarregue o engine para ativar o MCP.", + + // ==================== Settings ==================== + "settings.title": "Configurações", + "settings.connection": "Conexão", + "settings.engine_source": "Fonte do engine", + "settings.from_path": "Via PATH", + "settings.from_sidecar": "Sidecar integrado", + "settings.engine_source_description": "PATH usa o OpenCode instalado (padrão). Sidecar usará um binário integrado quando disponível.", + "settings.sidecar_unsupported": "Sidecar disponível no Windows", + "settings.sidecar_unavailable_detail": "Sidecar é integrado quando disponível.", + "settings.model": "Modelo", + "settings.model_description": "Padrões e controles de raciocínio para execuções.", + "settings.change": "Alterar", + "settings.engine_path": "PATH", + "settings.engine_sidecar": "Sidecar", + "settings.thinking": "Raciocínio", + "settings.thinking_description": "Mostrar partes de raciocínio (apenas no modo Desenvolvedor).", + "settings.on": "Ativado", + "settings.off": "Desativado", + "settings.model_variant": "Variante do modelo", + "settings.edit": "Editar", + "settings.default_model": "Modelo padrão", + "settings.session_model": "Modelo", + "settings.model_description_default": "Escolha entre seus provedores configurados. Esta seleção será usada para novas sessões.", + "settings.model_description_session": "Escolha entre seus provedores configurados. Esta seleção se aplica à sua próxima mensagem.", + "settings.search_models": "Buscar modelos…", + "settings.showing_models": "Exibindo {count} de {total}", + "settings.model_variant_prompt": "Variante do modelo (específica do provedor, ex: high/max/minimal). Deixe em branco para limpar.", + "settings.model_fallback": "Alternativa", + "settings.model_default": "Padrão", + "settings.model_free": "Gratuito", + "settings.model_reasoning": "Raciocínio", + "settings.done": "Concluído", + "settings.updates": "Atualizações", + "settings.updates_description": "Manter o OpenWork atualizado.", + "settings.automatic_checks": "Verificações automáticas", + "settings.automatic_checks_description": "Uma vez por dia (silencioso)", + "settings.update_checking": "Verificando...", + "settings.update_available": "Atualização disponível: v", + "settings.update_downloading": "Baixando...", + "settings.update_ready": "Pronto para instalar: v", + "settings.update_error": "Falha na verificação de atualização", + "settings.update_uptodate": "Atualizado", + "settings.last_checked": "Última verificação", + "settings.published": "Publicado", + "settings.check_update": "Verificar", + "settings.install_restart": "Instalar e Reiniciar", + "settings.update_not_supported": "Atualizações não são suportadas neste ambiente.", + "settings.update_desktop_only": "Atualizações estão disponíveis apenas no app desktop.", + "settings.startup": "Inicialização", + "settings.mode_label": "modo", + "settings.switch_mode": "Alternar", + "settings.reset_startup": "Redefinir modo de inicialização padrão", + "settings.reset_startup_description": "Apaga sua preferência salva e exibe a seleção de modo na próxima inicialização.", + "settings.advanced": "Avançado", + "settings.advanced_description": "Redefinir estado local do OpenWork para retestar o onboarding.", + "settings.reset_onboarding": "Redefinir onboarding", + "settings.reset_onboarding_description": "Apaga as preferências do OpenWork e reinicia o app.", + "settings.reset_app_data": "Redefinir dados do app", + "settings.reset_app_data_description": "Mais agressivo. Apaga cache + dados do OpenWork.", + "settings.reset": "Redefinir", + "settings.requires_typing": "Requer digitação", + "settings.will_restart": "e reiniciará o app.", + "settings.reset_onboarding_title": "Redefinir onboarding", + "settings.reset_app_data_title": "Redefinir dados do app", + "settings.reset_confirmation_hint": "Digite RESET para confirmar. O OpenWork será reiniciado.", + "settings.reset_onboarding_warning": "Apaga preferências locais e marcadores de onboarding do workspace no OpenWork.", + "settings.reset_app_data_warning": "Apaga cache e dados do OpenWork neste dispositivo.", + "settings.reset_stop_active_runs": "Pare as execuções ativas antes de redefinir.", + "settings.reset_confirmation_label": "Confirmação", + "settings.reset_confirmation_placeholder": "Digite RESET", + "settings.reset_cancel": "Cancelar", + "settings.reset_confirm_button": "Redefinir e Reiniciar", + "settings.developer": "Desenvolvedor", + "settings.opencode_cache": "Cache do OpenCode", + "settings.opencode_cache_description": "Repara dados em cache usados para iniciar o engine. Seguro de executar.", + "settings.repair_cache": "Reparar cache", + "settings.repairing_cache": "Reparando cache", + "settings.cache_repair_requires_desktop": "O reparo de cache requer o app desktop", + "settings.pending_permissions": "Permissões pendentes", + "settings.recent_events": "Eventos recentes", + "settings.notion_connected": "Conectado", + "settings.reload_required": "Recarregamento necessário", + "settings.connection_failed": "Falha na conexão", + "settings.notion_not_connected": "Não conectado", + "settings.show_thinking": "Mostrar raciocínio", + "settings.update": "Atualizar", + "settings.about": "Sobre", + "settings.version": "Versão", + "settings.check_for_updates": "Verificar atualizações", + "settings.download_update": "Baixar atualização", + "settings.install_update": "Instalar atualização e reiniciar", + "settings.enable_developer_mode": "Ativar Modo Desenvolvedor", + "settings.disable_developer_mode": "Desativar Modo Desenvolvedor", + "settings.stop_engine": "Parar engine", + "settings.disconnect": "Desconectar", + "settings.language": "Idioma", + "settings.language.description": "Escolha seu idioma preferido", + "settings.connection_title": "Conexão", + "settings.engine_source_label": "Fonte do engine", + "settings.engine_source_hint": "PATH usa o OpenCode instalado (padrão). Sidecar usará um binário integrado quando disponível.", + "settings.sidecar_unavailable": "Sidecar é integrado quando disponível.", + "settings.model_title": "Modelo", + "settings.model_hint": "Padrões e controles de raciocínio para execuções.", + "settings.thinking_label": "Raciocínio", + "settings.thinking_hint": "Mostrar partes de raciocínio (apenas no modo Desenvolvedor).", + "settings.model_variant_label": "Variante do modelo", + "settings.appearance_title": "Aparência", + "settings.appearance_hint": "Seguir o sistema ou forçar modo claro/escuro.", + "settings.theme_system": "Sistema", + "settings.theme_light": "Claro", + "settings.theme_dark": "Escuro", + "settings.theme_system_hint": "O modo sistema segue automaticamente a preferência do seu SO.", + "settings.updates_title": "Atualizações", + "settings.updates_hint": "Manter o OpenWork atualizado.", + "settings.automatic_checks_label": "Verificações automáticas", + "settings.automatic_checks_hint": "Uma vez por dia (silencioso)", + "settings.last_checked_time": "Última verificação {time}", + "settings.published_date": "Publicado em {date}", + "settings.update_not_supported_hint": "Atualizações não são suportadas neste ambiente.", + "settings.update_desktop_only_hint": "Atualizações estão disponíveis apenas no app desktop.", + "settings.startup_title": "Inicialização", + "settings.mode_suffix": "modo", + "settings.reset_startup_label": "Redefinir modo de inicialização padrão", + "settings.reset_startup_hint": "Apaga sua preferência salva e exibe a seleção de modo na próxima inicialização.", + "settings.advanced_title": "Avançado", + "settings.advanced_hint": "Redefinir estado local do OpenWork para retestar o onboarding.", + "settings.reset_onboarding_label": "Redefinir onboarding", + "settings.reset_onboarding_hint": "Apaga as preferências do OpenWork e reinicia o app.", + "settings.reset_app_data_label": "Redefinir dados do app", + "settings.reset_app_data_hint": "Mais agressivo. Apaga cache + dados do OpenWork.", + "settings.reset_requires_hint": "Requer digitar RESET e reiniciará o app.", + "settings.developer_title": "Desenvolvedor", + "settings.opencode_cache_label": "Cache do OpenCode", + "settings.opencode_cache_hint": "Repara dados em cache usados para iniciar o engine. Seguro de executar.", + "settings.migration_recovery_label": "Recuperação de migração", + "settings.migration_recovery_hint": "Use isso se a inicialização local falhar ao migrar de dados JSON legados.", + "settings.fix_migration": "Corrigir migração", + "settings.fixing_migration": "Corrigindo migração...", + "settings.migration_repair_requires_desktop": "O reparo de migração requer o app desktop", + "settings.pending_permissions_label": "Permissões pendentes", + "settings.recent_events_label": "Eventos recentes", + "settings.stop_active_runs_hint": "Pare as execuções ativas para atualizar", + "settings.stop_active_runs_reset_hint": "Pare as execuções ativas para redefinir", + "settings.stop_runs_to_update": "Pare as execuções ativas para atualizar", + "settings.stop_runs_to_reset": "Pare as execuções ativas para redefinir", + "settings.updates_not_supported": "Atualizações não são suportadas neste ambiente.", + "settings.updates_desktop_only": "Atualizações estão disponíveis apenas no app desktop.", + + // ==================== Reload ==================== + "reload.toast_title": "Atualizações disponíveis", + "reload.toast_description": "Recarregue o workspace para aplicar as alterações de configuração.", + "reload.toast_warning": "Para todas as tarefas ativas.", + "reload.toast_warning_active": "Recarregar para {count} tarefa(s) ativa(s).", + "reload.toast_reload": "Recarregar", + "reload.toast_reload_stopped": "Recarregar e Parar Tarefas", + "reload.toast_reloading": "Recarregando...", + "reload.toast_dismiss": "Depois", + "reload.toast_blocked_host": "O recarregamento está disponível apenas para workers locais.", + "reload.toast_blocked_connect": "Conecte-se a este workspace para recarregar.", + "reload.toast_blocked_runs": "Aguardando as tarefas ativas serem concluídas antes de recarregar.", + + // ==================== Onboarding ==================== + "onboarding.starting_host": "Iniciando servidor OpenWork...", + "onboarding.searching_host": "Conectando ao servidor OpenWork...", + "onboarding.getting_ready": "Preparando tudo", + "onboarding.verifying": "Verificando handshake seguro", + "onboarding.create_first_workspace": "Crie seu primeiro workspace", + "onboarding.create_workspace": "Criar um workspace", + "onboarding.workspace_description": "Escolha uma pasta e um predefinição para configurar seu workspace.", + "onboarding.start": "Iniciar OpenWork", + "onboarding.back": "Voltar", + "onboarding.advanced_settings": "Configurações avançadas", + "onboarding.opencode_engine": "Engine OpenCode", + "onboarding.refresh": "Atualizar", + "onboarding.checking_cli": "Verificando OpenCode CLI...", + "onboarding.cli_not_found": "OpenCode CLI não encontrado.", + "onboarding.cli_needs_update": "O OpenCode CLI precisa de uma atualização para o serve.", + "onboarding.opencode": "OpenCode", + "onboarding.cli_ready": "OpenCode CLI pronto.", + "onboarding.cli_version": "OpenCode {version}", + "onboarding.windows_install_instruction": "Instale o OpenCode para Windows e reinicie o OpenWork. Certifique-se de que opencode.exe está no PATH.", + "onboarding.install_instruction": "Instale o OpenCode para ativar o servidor local (sem terminal necessário).", + "onboarding.install": "Instalar OpenCode", + "onboarding.recheck": "Verificar novamente", + "onboarding.ready_message": "O OpenCode está pronto para iniciar o servidor local.", + "onboarding.resolved_path": "Caminho resolvido", + "onboarding.version": "Versão", + "onboarding.search_notes": "Notas de busca", + "onboarding.serve_help": "saída de serve --help", + "onboarding.workspace_folder_label": "Um workspace é uma pasta com suas próprias skills, plugins e comandos.", + "onboarding.theme_label": "Tema", + "onboarding.theme_current": "Atual: {mode}", + "onboarding.theme_system": "Sistema", + "onboarding.theme_light": "Claro", + "onboarding.theme_dark": "Escuro", + "onboarding.access_label": "Acesso", + "onboarding.folders_allowed": "{count} pasta(s) permitida(s)", + "onboarding.manage_access_hint": "Você pode gerenciar o acesso nas configurações avançadas.", + "onboarding.open_settings_hint": "Precisa de opções de engine ou acesso? Abra as Configurações.", + "onboarding.open_settings": "Abrir Configurações", + "onboarding.add_folder_path": "Adicionar caminho de pasta", + "onboarding.pick": "Selecionar", + "onboarding.add": "Adicionar", + "onboarding.remove": "Remover", + "onboarding.cli_label": "OpenCode CLI", + "onboarding.cli_checking": "Verificando instalação...", + "onboarding.cli_not_found_hint": "Não encontrado. Instale para executar o servidor local.", + "onboarding.cli_version_installed": "Instalado", + "onboarding.cli_recheck": "Verificar novamente", + "onboarding.cli_install_commands": "Instale o OpenCode com um dos comandos abaixo e reinicie o OpenWork.", + "onboarding.show_search_notes": "Mostrar notas de busca", + "onboarding.last_checked": "Última verificação {time}", + "onboarding.fix_migration": "Corrigir migração", + "onboarding.fixing_migration": "Corrigindo migração...", + "onboarding.fix_migration_hint": "Para o engine local, executa opencode db migrate e tenta inicializar novamente.", + "onboarding.server_url_placeholder": "http://localhost:8088", + "onboarding.directory_placeholder": "meu-projeto", + "onboarding.connect_host": "Conectar ao servidor", + "onboarding.connect_description": "Conectar-se a um servidor OpenCode existente (LAN ou túnel).", + "onboarding.server_url": "URL do servidor", + "onboarding.directory": "Diretório (opcional)", + "onboarding.directory_hint": "Use se o servidor executar múltiplos workers.", + "onboarding.connect": "Conectar", + "onboarding.remote_workspace_title": "Conectar ao servidor OpenWork", + "onboarding.remote_workspace_description": "Conecte-se a um servidor OpenWork para acessar um workspace de qualquer lugar.", + "onboarding.remote_workspace_action": "Conectar", + "onboarding.remote_workspace_card_title": "Conectar um workspace remoto", + "onboarding.remote_workspace_card_description": "Conecte-se a um servidor OpenWork para acessar um workspace compartilhado.", + "onboarding.advanced_openwork_host": "Servidor OpenWork", + "onboarding.advanced_openwork_hint": "Use uma URL de servidor e token de acesso para acesso compartilhado.", + "onboarding.advanced_opencode_direct": "Avançado: OpenCode direto", + "onboarding.advanced_opencode_hint": "Conecte diretamente a um engine OpenCode quando nenhum servidor estiver disponível.", + "onboarding.welcome_title": "Como você quer executar o OpenWork hoje?", + "onboarding.run_local": "Executar localmente", + "onboarding.run_local_description": "O OpenWork executa o OpenCode localmente e mantém seu trabalho privado.", + "onboarding.engine_running": "Engine já em execução", + "onboarding.attach_description": "Conectar à sessão existente neste dispositivo.", + "onboarding.attach": "Conectar", + "onboarding.remember_choice": "Lembrar minha escolha para a próxima vez", + "onboarding.client_mode": "Conectar como Cliente (Emparelhamento Remoto)", + "onboarding.default_workspace_path": "~/OpenWork/Worker", + "onboarding.authorize_folder": "Autorizar pasta", + "onboarding.choose_workspace_folder": "Escolher pasta do workspace", + + // ==================== Common ==================== + "common.alpha": "Alpha", + "common.change": "Alterar", + "common.refresh": "Atualizar", + "common.new": "Novo", + "common.install": "Instalar", + "common.delete": "Excluir", + "common.edit": "Editar", + "common.save": "Salvar", + "common.cancel": "Cancelar", + "common.close": "Fechar", + "common.open": "Abrir", + "common.show": "Mostrar", + "common.hide": "Ocultar", + "common.path": "Caminho", + "common.choose": "Escolher", + "common.retry": "Tentar novamente", + "common.untitled": "Sem título", + "common.default_parens": "(padrão)", + "common.on": "Ativado", + "common.off": "Desativado", + + // ==================== Status ==================== + "status.connected": "Conectado", + "status.disconnected": "Desconectado", + "status.idle": "Ocioso", + "status.busy": "Ocupado", + "status.running": "Em execução", + "status.live": "Ao vivo", + "status.connecting": "Conectando", + "status.creating_workspace": "Criando workspace", + "status.deleting_command": "Excluindo comando", + "status.saving_workspace_command": "Salvando comando do workspace", + "status.saving_command": "Salvando comando", + "status.loading_session": "Carregando sessão", + "status.creating_task": "Criando nova tarefa", + "status.starting_engine": "Iniciando engine", + "status.reloading_engine": "Recarregando engine", + "status.restarting_engine": "Reiniciando engine", + "status.installing_opencode": "Instalando OpenCode", + "status.repairing_migration": "Reparando migração", + "status.disconnecting": "Desconectando", + + // ==================== Workspace Switching ==================== + "workspace.switching_title": "Abrindo {name}", + "workspace.switching_title_unknown": "Abrindo workspace", + "workspace.switching_subtitle": "Vamos trazer seu trabalho recente de volta.", + "workspace.switching_status_preparing": "Preparando tudo", + "workspace.switching_status_connecting": "Verificando sua conexão", + "workspace.switching_status_loading": "Carregando tarefas recentes", + "workspace.switching_status_almost": "Quase lá", + + "app.connection_lost": "Conexão com o servidor perdida. Por favor, recarregue.", + "app.unknown_error": "Erro desconhecido", + "app.error.tauri_required": "Esta ação requer o runtime do app Tauri.", + "app.error.choose_folder": "Escolha uma pasta para continuar.", + "app.error.pick_workspace_folder": "Selecione primeiro uma pasta de workspace.", + "app.error.remote_base_url_required": "Adicione uma URL de servidor para continuar.", + "app.error.host_requires_local": "Selecione um workspace local para iniciar o engine.", + "app.error.sidecar_unsupported_windows": "O OpenCode Sidecar é integrado no Windows quando disponível. Usando PATH como alternativa.", + "app.error.install_failed": "Falha na instalação do OpenCode. Veja os logs acima.", + "app.migration.desktop_required": "O reparo de migração requer o app desktop.", + "app.migration.local_only": "O reparo de migração está disponível apenas para workers locais.", + "app.migration.workspace_required": "Selecione uma pasta de workspace local antes de reparar a migração.", + "app.migration.unsupported": "Este binário do OpenCode não suporta `opencode db migrate`. Atualize o OpenCode para >=1.2.6 ou mude para o engine integrado.", + "app.migration.failed": "Falha na migração do OpenCode.", + "app.migration.restart_failed": "Migração concluída, mas o OpenWork não conseguiu reiniciar o engine local.", + "app.migration.success": "Migração reparada. A inicialização local foi tentada novamente.", + "app.error.command_name_template_required": "O nome e as instruções do comando são obrigatórios.", + "app.error.workspace_commands_desktop": "Comandos requerem o app desktop.", + "app.error.command_scope_unknown": "Este comando não pode ser gerenciado neste modo.", +} as const; \ No newline at end of file diff --git a/apps/server/package.json b/apps/server/package.json index b1f6fc6ff..5e7a12a9f 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -43,7 +43,7 @@ }, "dependencies": { "jsonc-parser": "^3.2.1", - "minimatch": "^10.0.1", + "minimatch": "^10.2.3", "yaml": "^2.6.1" }, "devDependencies": { diff --git a/apps/share/package.json b/apps/share/package.json index c2cd0adf3..56d9c5442 100644 --- a/apps/share/package.json +++ b/apps/share/package.json @@ -14,7 +14,7 @@ "@paper-design/shaders-react": "0.0.71", "@vercel/blob": "^0.27.0", "jsonc-parser": "^3.3.1", - "next": "16.1.6", + "next": "16.1.7", "react": "19.2.4", "react-dom": "19.2.4", "sharp": "^0.34.5", diff --git a/ee/apps/den-web/package.json b/ee/apps/den-web/package.json index e7c93eb55..1b0fe9776 100644 --- a/ee/apps/den-web/package.json +++ b/ee/apps/den-web/package.json @@ -9,7 +9,7 @@ "lint": "next lint" }, "dependencies": { - "next": "14.2.5", + "next": "15.5.14", "react": "18.2.0", "react-dom": "18.2.0" }, diff --git a/ee/apps/landing/package.json b/ee/apps/landing/package.json index 51a456389..002aab52c 100644 --- a/ee/apps/landing/package.json +++ b/ee/apps/landing/package.json @@ -12,7 +12,7 @@ "@paper-design/shaders-react": "0.0.71", "framer-motion": "^12.35.1", "lucide-react": "^0.577.0", - "next": "14.2.5", + "next": "15.5.14", "react": "18.2.0", "react-dom": "18.2.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 56ce5b6e8..94fc88dfb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -193,8 +193,8 @@ importers: specifier: ^3.2.1 version: 3.3.1 minimatch: - specifier: ^10.0.1 - version: 10.1.1 + specifier: ^10.2.3 + version: 10.2.3 yaml: specifier: ^2.6.1 version: 2.8.2 @@ -224,8 +224,8 @@ importers: specifier: ^3.3.1 version: 3.3.1 next: - specifier: 16.1.6 - version: 16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + specifier: 15.5.14 + version: 15.5.14(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: specifier: 19.2.4 version: 19.2.4 @@ -401,8 +401,8 @@ importers: ee/apps/den-web: dependencies: next: - specifier: 14.2.5 - version: 14.2.5(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: 15.5.14 + version: 15.5.14(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: specifier: 18.2.0 version: 18.2.0 @@ -478,8 +478,8 @@ importers: specifier: ^0.577.0 version: 0.577.0(react@18.2.0) next: - specifier: 14.2.5 - version: 14.2.5(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: 15.5.14 + version: 15.5.14(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: specifier: 18.2.0 version: 18.2.0 @@ -1545,14 +1545,6 @@ packages: cpu: [x64] os: [win32] - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.0': - resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} - engines: {node: 20 || >=22} - '@isaacs/fs-minipass@4.0.1': resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} @@ -1712,14 +1704,14 @@ packages: '@marijn/find-cluster-break@1.0.2': resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} - '@next/env@14.2.5': - resolution: {integrity: sha512-/zZGkrTOsraVfYjGP8uM0p6r0BDT6xWpkjdVbcz66PJVSpwXX3yNiRycxAuDfBKGWBrZBXRuK/YVlkNgxHGwmA==} + '@next/env@15.5.14': + resolution: {integrity: sha512-aXeirLYuASxEgi4X4WhfXsShCFxWDfNn/8ZeC5YXAS2BB4A8FJi1kwwGL6nvMVboE7fZCzmJPNdMvVHc8JpaiA==} '@next/env@16.1.6': resolution: {integrity: sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==} - '@next/swc-darwin-arm64@14.2.5': - resolution: {integrity: sha512-/9zVxJ+K9lrzSGli1///ujyRfon/ZneeZ+v4ptpiPoOU+GKZnm8Wj8ELWU1Pm7GHltYRBklmXMTUqM/DqQ99FQ==} + '@next/swc-darwin-arm64@15.5.14': + resolution: {integrity: sha512-Y9K6SPzobnZvrRDPO2s0grgzC+Egf0CqfbdvYmQVaztV890zicw8Z8+4Vqw8oPck8r1TjUHxVh8299Cg4TrxXg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -1730,8 +1722,8 @@ packages: cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@14.2.5': - resolution: {integrity: sha512-vXHOPCwfDe9qLDuq7U1OYM2wUY+KQ4Ex6ozwsKxp26BlJ6XXbHleOUldenM67JRyBfVjv371oneEvYd3H2gNSA==} + '@next/swc-darwin-x64@15.5.14': + resolution: {integrity: sha512-aNnkSMjSFRTOmkd7qoNI2/rETQm/vKD6c/Ac9BZGa9CtoOzy3c2njgz7LvebQJ8iPxdeTuGnAjagyis8a9ifBw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -1742,8 +1734,8 @@ packages: cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@14.2.5': - resolution: {integrity: sha512-vlhB8wI+lj8q1ExFW8lbWutA4M2ZazQNvMWuEDqZcuJJc78iUnLdPPunBPX8rC4IgT6lIx/adB+Cwrl99MzNaA==} + '@next/swc-linux-arm64-gnu@15.5.14': + resolution: {integrity: sha512-tjlpia+yStPRS//6sdmlVwuO1Rioern4u2onafa5n+h2hCS9MAvMXqpVbSrjgiEOoCs0nJy7oPOmWgtRRNSM5Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1754,8 +1746,8 @@ packages: cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@14.2.5': - resolution: {integrity: sha512-NpDB9NUR2t0hXzJJwQSGu1IAOYybsfeB+LxpGsXrRIb7QOrYmidJz3shzY8cM6+rO4Aojuef0N/PEaX18pi9OA==} + '@next/swc-linux-arm64-musl@15.5.14': + resolution: {integrity: sha512-8B8cngBaLadl5lbDRdxGCP1Lef8ipD6KlxS3v0ElDAGil6lafrAM3B258p1KJOglInCVFUjk751IXMr2ixeQOQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1766,8 +1758,8 @@ packages: cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@14.2.5': - resolution: {integrity: sha512-8XFikMSxWleYNryWIjiCX+gU201YS+erTUidKdyOVYi5qUQo/gRxv/3N1oZFCgqpesN6FPeqGM72Zve+nReVXQ==} + '@next/swc-linux-x64-gnu@15.5.14': + resolution: {integrity: sha512-bAS6tIAg8u4Gn3Nz7fCPpSoKAexEt2d5vn1mzokcqdqyov6ZJ6gu6GdF9l8ORFrBuRHgv3go/RfzYz5BkZ6YSQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1778,8 +1770,8 @@ packages: cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@14.2.5': - resolution: {integrity: sha512-6QLwi7RaYiQDcRDSU/os40r5o06b5ue7Jsk5JgdRBGGp8l37RZEh9JsLSM8QF0YDsgcosSeHjglgqi25+m04IQ==} + '@next/swc-linux-x64-musl@15.5.14': + resolution: {integrity: sha512-mMxv/FcrT7Gfaq4tsR22l17oKWXZmH/lVqcvjX0kfp5I0lKodHYLICKPoX1KRnnE+ci6oIUdriUhuA3rBCDiSw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1790,8 +1782,8 @@ packages: cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@14.2.5': - resolution: {integrity: sha512-1GpG2VhbspO+aYoMOQPQiqc/tG3LzmsdBH0LhnDS3JrtDx2QmzXe0B6mSZZiN3Bq7IOMXxv1nlsjzoS1+9mzZw==} + '@next/swc-win32-arm64-msvc@15.5.14': + resolution: {integrity: sha512-OTmiBlYThppnvnsqx0rBqjDRemlmIeZ8/o4zI7veaXoeO1PVHoyj2lfTfXTiiGjCyRDhA10y4h6ZvZvBiynr2g==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -1802,14 +1794,8 @@ packages: cpu: [arm64] os: [win32] - '@next/swc-win32-ia32-msvc@14.2.5': - resolution: {integrity: sha512-Igh9ZlxwvCDsu6438FXlQTHlRno4gFpJzqPjSIBZooD22tKeI4fE/YMRoHVJHmrQ2P5YL1DoZ0qaOKkbeFWeMg==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - - '@next/swc-win32-x64-msvc@14.2.5': - resolution: {integrity: sha512-tEQ7oinq1/CjSG9uSTerca3v4AZ+dFa+4Yu6ihaG8Ud8ddqLQgFGcnwYls13H5X5CPDPZJdYxyeMui6muOLd4g==} + '@next/swc-win32-x64-msvc@15.5.14': + resolution: {integrity: sha512-+W7eFf3RS7m4G6tppVTOSyP9Y6FsJXfOuKzav1qKniiFm3KFByQfPEcouHdjlZmysl4zJGuGLQ/M9XyVeyeNEg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -2513,15 +2499,9 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@swc/helpers@0.5.5': - resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} - '@tailwindcss/node@4.1.18': resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} @@ -2893,9 +2873,18 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + baseline-browser-mapping@2.10.10: + resolution: {integrity: sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ==} + engines: {node: '>=6.0.0'} + hasBin: true + baseline-browser-mapping@2.9.14: resolution: {integrity: sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==} hasBin: true @@ -2987,6 +2976,10 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + engines: {node: 18 || 20 || >=22} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -3059,6 +3052,9 @@ packages: caniuse-lite@1.0.30001764: resolution: {integrity: sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==} + caniuse-lite@1.0.30001781: + resolution: {integrity: sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -3838,12 +3834,12 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - minimatch@10.1.1: - resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} - engines: {node: 20 || >=22} + minimatch@10.2.3: + resolution: {integrity: sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==} + engines: {node: 18 || 20 || >=22} - minimatch@8.0.4: - resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} + minimatch@8.0.7: + resolution: {integrity: sha512-V+1uQNdzybxa14e/p00HZnQNNcTjnRJjDxg2V8wtkjFctq4M7hXFws4oekyTP0Jebeq7QYtpFyOeBAjc88zvYg==} engines: {node: '>=16 || 14 >=14.17'} minipass@4.2.8: @@ -3897,22 +3893,24 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} - next@14.2.5: - resolution: {integrity: sha512-0f8aRfBVL+mpzfBjYfQuLWh2WyAwtJXCRfkPF4UJ5qd2YwrHczsrSzXU4tRMV0OAxR8ZJZWPFn6uhSC56UTsLA==} - engines: {node: '>=18.17.0'} - deprecated: This version has a security vulnerability. Please upgrade to a patched version. See https://nextjs.org/blog/security-update-2025-12-11 for more details. + next@15.5.14: + resolution: {integrity: sha512-M6S+4JyRjmKic2Ssm7jHUPkE6YUJ6lv4507jprsSZLulubz0ihO2E+S4zmQK3JZ2ov81JrugukKU4Tz0ivgqqQ==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 - react: ^18.2.0 - react-dom: ^18.2.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 sass: ^1.3.0 peerDependenciesMeta: '@opentelemetry/api': optional: true '@playwright/test': optional: true + babel-plugin-react-compiler: + optional: true sass: optional: true @@ -4434,19 +4432,6 @@ packages: style-mod@4.1.3: resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==} - styled-jsx@5.1.1: - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true - styled-jsx@5.1.6: resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} engines: {node: '>= 12.0.0'} @@ -5924,12 +5909,6 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.0': - dependencies: - '@isaacs/balanced-match': 4.0.1 - '@isaacs/fs-minipass@4.0.1': dependencies: minipass: 7.1.2 @@ -6179,56 +6158,54 @@ snapshots: '@marijn/find-cluster-break@1.0.2': {} - '@next/env@14.2.5': {} + '@next/env@15.5.14': {} - '@next/env@16.1.6': {} + '@next/env@16.1.6': + optional: true - '@next/swc-darwin-arm64@14.2.5': + '@next/swc-darwin-arm64@15.5.14': optional: true '@next/swc-darwin-arm64@16.1.6': optional: true - '@next/swc-darwin-x64@14.2.5': + '@next/swc-darwin-x64@15.5.14': optional: true '@next/swc-darwin-x64@16.1.6': optional: true - '@next/swc-linux-arm64-gnu@14.2.5': + '@next/swc-linux-arm64-gnu@15.5.14': optional: true '@next/swc-linux-arm64-gnu@16.1.6': optional: true - '@next/swc-linux-arm64-musl@14.2.5': + '@next/swc-linux-arm64-musl@15.5.14': optional: true '@next/swc-linux-arm64-musl@16.1.6': optional: true - '@next/swc-linux-x64-gnu@14.2.5': + '@next/swc-linux-x64-gnu@15.5.14': optional: true '@next/swc-linux-x64-gnu@16.1.6': optional: true - '@next/swc-linux-x64-musl@14.2.5': + '@next/swc-linux-x64-musl@15.5.14': optional: true '@next/swc-linux-x64-musl@16.1.6': optional: true - '@next/swc-win32-arm64-msvc@14.2.5': + '@next/swc-win32-arm64-msvc@15.5.14': optional: true '@next/swc-win32-arm64-msvc@16.1.6': optional: true - '@next/swc-win32-ia32-msvc@14.2.5': - optional: true - - '@next/swc-win32-x64-msvc@14.2.5': + '@next/swc-win32-x64-msvc@15.5.14': optional: true '@next/swc-win32-x64-msvc@16.1.6': @@ -7077,17 +7054,10 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@swc/counter@0.1.3': {} - '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 - '@swc/helpers@0.5.5': - dependencies: - '@swc/counter': 0.1.3 - tslib: 2.8.1 - '@tailwindcss/node@4.1.18': dependencies: '@jridgewell/remapping': 2.3.5 @@ -7461,8 +7431,13 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + base64-js@1.5.1: {} + baseline-browser-mapping@2.10.10: + optional: true + baseline-browser-mapping@2.9.14: {} better-auth@1.4.18(drizzle-kit@0.31.9)(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(bun-types@1.3.6)(kysely@0.28.11)(mysql2@3.17.4))(mysql2@3.17.4)(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(solid-js@1.9.10): @@ -7524,6 +7499,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.5: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -7531,7 +7510,7 @@ snapshots: browserslist@4.28.1: dependencies: baseline-browser-mapping: 2.9.14 - caniuse-lite: 1.0.30001764 + caniuse-lite: 1.0.30001781 electron-to-chromium: 1.5.267 node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -7598,6 +7577,8 @@ snapshots: caniuse-lite@1.0.30001764: {} + caniuse-lite@1.0.30001781: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -8028,7 +8009,7 @@ snapshots: glob@9.3.5: dependencies: fs.realpath: 1.0.0 - minimatch: 8.0.4 + minimatch: 8.0.7 minipass: 4.2.8 path-scurry: 1.11.1 @@ -8298,11 +8279,11 @@ snapshots: mime@3.0.0: {} - minimatch@10.1.1: + minimatch@10.2.3: dependencies: - '@isaacs/brace-expansion': 5.0.0 + brace-expansion: 5.0.5 - minimatch@8.0.4: + minimatch@8.0.7: dependencies: brace-expansion: 2.0.2 @@ -8353,29 +8334,52 @@ snapshots: negotiator@0.6.3: {} - next@14.2.5(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + next@15.5.14(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@next/env': 14.2.5 - '@swc/helpers': 0.5.5 - busboy: 1.6.0 - caniuse-lite: 1.0.30001764 - graceful-fs: 4.2.11 + '@next/env': 15.5.14 + '@swc/helpers': 0.5.15 + caniuse-lite: 1.0.30001781 postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(react@18.2.0) + styled-jsx: 5.1.6(react@18.2.0) optionalDependencies: - '@next/swc-darwin-arm64': 14.2.5 - '@next/swc-darwin-x64': 14.2.5 - '@next/swc-linux-arm64-gnu': 14.2.5 - '@next/swc-linux-arm64-musl': 14.2.5 - '@next/swc-linux-x64-gnu': 14.2.5 - '@next/swc-linux-x64-musl': 14.2.5 - '@next/swc-win32-arm64-msvc': 14.2.5 - '@next/swc-win32-ia32-msvc': 14.2.5 - '@next/swc-win32-x64-msvc': 14.2.5 + '@next/swc-darwin-arm64': 15.5.14 + '@next/swc-darwin-x64': 15.5.14 + '@next/swc-linux-arm64-gnu': 15.5.14 + '@next/swc-linux-arm64-musl': 15.5.14 + '@next/swc-linux-x64-gnu': 15.5.14 + '@next/swc-linux-x64-musl': 15.5.14 + '@next/swc-win32-arm64-msvc': 15.5.14 + '@next/swc-win32-x64-msvc': 15.5.14 '@opentelemetry/api': 1.9.0 '@playwright/test': 1.58.2 + sharp: 0.34.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + next@15.5.14(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + '@next/env': 15.5.14 + '@swc/helpers': 0.5.15 + caniuse-lite: 1.0.30001781 + postcss: 8.4.31 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + styled-jsx: 5.1.6(react@19.2.4) + optionalDependencies: + '@next/swc-darwin-arm64': 15.5.14 + '@next/swc-darwin-x64': 15.5.14 + '@next/swc-linux-arm64-gnu': 15.5.14 + '@next/swc-linux-arm64-musl': 15.5.14 + '@next/swc-linux-x64-gnu': 15.5.14 + '@next/swc-linux-x64-musl': 15.5.14 + '@next/swc-win32-arm64-msvc': 15.5.14 + '@next/swc-win32-x64-msvc': 15.5.14 + '@opentelemetry/api': 1.9.0 + '@playwright/test': 1.58.2 + sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -8384,8 +8388,8 @@ snapshots: dependencies: '@next/env': 16.1.6 '@swc/helpers': 0.5.15 - baseline-browser-mapping: 2.9.14 - caniuse-lite: 1.0.30001764 + baseline-browser-mapping: 2.10.10 + caniuse-lite: 1.0.30001781 postcss: 8.4.31 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -8405,6 +8409,7 @@ snapshots: transitivePeerDependencies: - '@babel/core' - babel-plugin-macros + optional: true node-fetch@2.7.0: dependencies: @@ -8938,7 +8943,7 @@ snapshots: style-mod@4.1.3: {} - styled-jsx@5.1.1(react@18.2.0): + styled-jsx@5.1.6(react@18.2.0): dependencies: client-only: 0.0.1 react: 18.2.0