diff --git a/app/src/lib/i18n/ar.ts b/app/src/lib/i18n/ar.ts index f63c227e1..5e56d3751 100644 --- a/app/src/lib/i18n/ar.ts +++ b/app/src/lib/i18n/ar.ts @@ -353,9 +353,9 @@ const messages: TranslationMap = { 'skills.explorer.installed': 'مثبت', 'skills.explorer.install': 'تثبيت', 'skills.explorer.installing': 'جارٍ التثبيت…', - 'skills.integrations': 'التطبيقات', + 'skills.integrations': 'تكاملات Composio', 'skills.integrationsSubtitle': - 'اتصالات OAuth السحابية — سجّل الدخول بحسابك وتُدار الرموز بأمان حتى يتمكن الوكلاء من القراءة والتصرف نيابةً عنك. لا حاجة لإدارة مفاتيح API.', + 'اتصالات OAuth السحابية — سجّل الدخول بحسابك ويتولى Composio إدارة الرموز حتى يتمكن الوكلاء من القراءة والتصرف نيابةً عنك. لا حاجة لإدارة مفاتيح API.', 'skills.composio.noApiKeyTitle': 'لم يتم إعداد مفتاح Composio API', 'skills.composio.noApiKeyDescription': 'يستخدم الوضع المحلي مفتاح Composio API الخاص بك. افتح الإعدادات ← الخيارات المتقدمة ← Composio لإضافته قبل توصيل التكاملات هنا.', @@ -4167,7 +4167,7 @@ const messages: TranslationMap = { 'skills.channelIcon.telegram': 'Telegram', 'skills.channelIcon.web': 'الويب', 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'OAuth', + 'skills.composio.poweredBy': 'مدعوم من Composio', 'skills.composio.staleStatusTitle': 'تظهر الاتصالات حالة قديمة', 'skills.create.allowedTools': 'الأدوات المسموح بها', 'skills.create.allowedToolsHelp': 'تم عرضها في المادة الأمامية SKILL.md كـ', diff --git a/app/src/lib/i18n/bn.ts b/app/src/lib/i18n/bn.ts index 433dcd3bb..1a9df1da5 100644 --- a/app/src/lib/i18n/bn.ts +++ b/app/src/lib/i18n/bn.ts @@ -358,9 +358,9 @@ const messages: TranslationMap = { 'skills.explorer.installed': 'ইনস্টল করা হয়েছে', 'skills.explorer.install': 'ইনস্টল করুন', 'skills.explorer.installing': 'ইনস্টল হচ্ছে…', - 'skills.integrations': 'অ্যাপস', + 'skills.integrations': 'Composio ইন্টিগ্রেশন', 'skills.integrationsSubtitle': - 'ক্লাউড-ভিত্তিক OAuth সংযোগ — আপনার অ্যাকাউন্ট দিয়ে সাইন ইন করুন এবং টোকেন নিরাপদে পরিচালিত হয় যাতে এজেন্টরা আপনার পক্ষে পড়তে এবং কাজ করতে পারে। কোনো API কী পরিচালনা করতে হবে না।', + 'ক্লাউড-ভিত্তিক OAuth সংযোগ — আপনার অ্যাকাউন্ট দিয়ে সাইন ইন করুন এবং Composio টোকেন পরিচালনা করে যাতে এজেন্টরা আপনার পক্ষে পড়তে এবং কাজ করতে পারে। কোনো API কী পরিচালনা করতে হবে না।', 'skills.composio.noApiKeyTitle': 'কোনো Composio API Key কনফিগার করা নেই', 'skills.composio.noApiKeyDescription': 'লোকাল মোডে আপনার নিজের Composio API key ব্যবহার হয়। এখানে ইন্টিগ্রেশন যুক্ত করার আগে Settings → Advanced → Composio খুলে একটি key যোগ করুন।', @@ -4251,7 +4251,7 @@ const messages: TranslationMap = { 'skills.channelIcon.telegram': 'Telegram', 'skills.channelIcon.web': 'ওয়েব', 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'OAuth', + 'skills.composio.poweredBy': 'Composio দ্বারা চালিত', 'skills.composio.staleStatusTitle': 'সংযোগগুলি পুরানো অবস্থা দেখাচ্ছে', 'skills.create.allowedTools': 'অনুমোদিত টুল', 'skills.create.allowedToolsHelp': 'হিসাবে SKILL.md ফ্রন্টম্যাটারে রেন্ডার করা হয়েছে', diff --git a/app/src/lib/i18n/de.ts b/app/src/lib/i18n/de.ts index 7cc6f7d1d..332857dc2 100644 --- a/app/src/lib/i18n/de.ts +++ b/app/src/lib/i18n/de.ts @@ -369,9 +369,9 @@ const messages: TranslationMap = { 'skills.explorer.installed': 'Installiert', 'skills.explorer.install': 'Installieren', 'skills.explorer.installing': 'Wird installiert…', - 'skills.integrations': 'Apps', + 'skills.integrations': 'Composio-Integrationen', 'skills.integrationsSubtitle': - 'Cloud-basierte OAuth-Verbindungen – mit deinem Konto anmelden und Tokens werden sicher verwaltet, damit Agenten in deinem Namen lesen und handeln können. Keine API-Schlüssel notwendig.', + 'Cloud-basierte OAuth-Verbindungen – mit deinem Konto anmelden und Composio verwaltet die Tokens, damit Agenten in deinem Namen lesen und handeln können. Keine API-Schlüssel notwendig.', 'skills.composio.noApiKeyTitle': 'Kein Composio-API-Schlüssel konfiguriert', 'skills.composio.noApiKeyDescription': 'Im lokalen Modus wird dein eigener Composio-API-Schlüssel verwendet. Öffne Einstellungen → Erweitert → Composio, um einen Schlüssel hinzuzufügen, bevor du hier Integrationen verbindest.', @@ -4364,7 +4364,7 @@ const messages: TranslationMap = { 'skills.channelIcon.telegram': 'Telegram', 'skills.channelIcon.web': 'Web', 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'OAuth', + 'skills.composio.poweredBy': 'Unterstützt von Composio', 'skills.composio.staleStatusTitle': 'Verbindungen zeigen den veralteten Status an', 'skills.create.allowedTools': 'Erlaubte Werkzeuge', 'skills.create.allowedToolsHelp': 'Im SKILL.md-Frontmatter gerendert als', diff --git a/app/src/lib/i18n/en.ts b/app/src/lib/i18n/en.ts index 278b4327c..7f8eb171c 100644 --- a/app/src/lib/i18n/en.ts +++ b/app/src/lib/i18n/en.ts @@ -397,9 +397,9 @@ const en: TranslationMap = { 'skills.explorer.installed': 'Installed', 'skills.explorer.install': 'Install', 'skills.explorer.installing': 'Installing…', - 'skills.integrations': 'Apps', + 'skills.integrations': 'Composio Integrations', 'skills.integrationsSubtitle': - 'Cloud-based OAuth connections — sign in with your account and tokens are brokered securely so agents can read and act on your behalf. No API keys to manage.', + 'Cloud-based OAuth connections — sign in with your account and Composio brokers the tokens so agents can read and act on your behalf. No API keys to manage.', 'skills.composio.noApiKeyTitle': 'No Composio API Key Configured', 'skills.composio.noApiKeyDescription': 'Local mode uses your own Composio API key. Open Settings → Advanced → Composio to add one before connecting integrations here.', @@ -4796,7 +4796,7 @@ const en: TranslationMap = { 'skills.channelIcon.telegram': 'Telegram', 'skills.channelIcon.web': 'Web', 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'OAuth', + 'skills.composio.poweredBy': 'Powered by Composio', 'skills.composio.staleStatusTitle': 'Connections are showing stale status', 'skills.create.allowedTools': 'Allowed tools', 'skills.create.allowedToolsHelp': 'Rendered into the SKILL.md frontmatter as', diff --git a/app/src/lib/i18n/es.ts b/app/src/lib/i18n/es.ts index d0b15be25..9f850d1c4 100644 --- a/app/src/lib/i18n/es.ts +++ b/app/src/lib/i18n/es.ts @@ -370,9 +370,9 @@ const messages: TranslationMap = { 'skills.explorer.installed': 'Instalada', 'skills.explorer.install': 'Instalar', 'skills.explorer.installing': 'Instalando…', - 'skills.integrations': 'Aplicaciones', + 'skills.integrations': 'Integraciones de Composio', 'skills.integrationsSubtitle': - 'Conexiones OAuth en la nube: inicia sesión con tu cuenta y los tokens se gestionan de forma segura para que los agentes puedan leer y actuar en tu nombre. Sin claves de API que administrar.', + 'Conexiones OAuth en la nube: inicia sesión con tu cuenta y Composio gestiona los tokens para que los agentes puedan leer y actuar en tu nombre. Sin claves de API que administrar.', 'skills.composio.noApiKeyTitle': 'No hay una API key de Composio configurada', 'skills.composio.noApiKeyDescription': 'El modo local usa tu propia API key de Composio. Abre Ajustes → Avanzado → Composio para añadir una antes de conectar integraciones aquí.', @@ -4336,7 +4336,7 @@ const messages: TranslationMap = { 'skills.channelIcon.telegram': 'Telegram', 'skills.channelIcon.web': 'Web', 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'OAuth', + 'skills.composio.poweredBy': 'Desarrollado por Composio', 'skills.composio.staleStatusTitle': 'Las conexiones muestran un estado obsoleto', 'skills.create.allowedTools': 'Herramientas permitidas', 'skills.create.allowedToolsHelp': 'Representado en el frontmatter de SKILL.md como', diff --git a/app/src/lib/i18n/fr.ts b/app/src/lib/i18n/fr.ts index a7e0a088e..a1f088e86 100644 --- a/app/src/lib/i18n/fr.ts +++ b/app/src/lib/i18n/fr.ts @@ -369,9 +369,9 @@ const messages: TranslationMap = { 'skills.explorer.installed': 'Installée', 'skills.explorer.install': 'Installer', 'skills.explorer.installing': 'Installation…', - 'skills.integrations': 'Applications', + 'skills.integrations': 'Intégrations Composio', 'skills.integrationsSubtitle': - 'Connexions OAuth cloud — connectez-vous avec votre compte et les jetons sont gérés en toute sécurité pour que les agents puissent lire et agir en votre nom. Aucune clé API à gérer.', + 'Connexions OAuth cloud — connectez-vous avec votre compte et Composio gère les jetons pour que les agents puissent lire et agir en votre nom. Aucune clé API à gérer.', 'skills.composio.noApiKeyTitle': 'Aucune clé API Composio configurée', 'skills.composio.noApiKeyDescription': 'Le mode local utilise votre propre clé API Composio. Ouvrez Paramètres → Avancé → Composio pour en ajouter une avant de connecter des intégrations ici.', @@ -4354,7 +4354,7 @@ const messages: TranslationMap = { 'skills.channelIcon.telegram': 'Telegram', 'skills.channelIcon.web': 'Web', 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'OAuth', + 'skills.composio.poweredBy': 'Propulsé par Composio', 'skills.composio.staleStatusTitle': 'Les connexions affichent un état obsolète', 'skills.create.allowedTools': 'Outils autorisés', 'skills.create.allowedToolsHelp': 'Rendu dans le frontmatter SKILL.md comme', diff --git a/app/src/lib/i18n/hi.ts b/app/src/lib/i18n/hi.ts index 3ffa949a4..a9718dade 100644 --- a/app/src/lib/i18n/hi.ts +++ b/app/src/lib/i18n/hi.ts @@ -357,9 +357,9 @@ const messages: TranslationMap = { 'skills.explorer.installed': 'इंस्टॉल किया गया', 'skills.explorer.install': 'इंस्टॉल करें', 'skills.explorer.installing': 'इंस्टॉल हो रहा है…', - 'skills.integrations': 'ऐप्स', + 'skills.integrations': 'Composio इंटीग्रेशन', 'skills.integrationsSubtitle': - 'क्लाउड-आधारित OAuth कनेक्शन — अपने अकाउंट से साइन इन करें और टोकन सुरक्षित रूप से प्रबंधित होते हैं ताकि एजेंट आपकी ओर से पढ़ और कार्य कर सकें। कोई API कुंजी प्रबंधित नहीं करनी।', + 'क्लाउड-आधारित OAuth कनेक्शन — अपने अकाउंट से साइन इन करें और Composio टोकन ब्रोकर करता है ताकि एजेंट आपकी ओर से पढ़ और कार्य कर सकें। कोई API कुंजी प्रबंधित नहीं करनी।', 'skills.composio.noApiKeyTitle': 'कोई Composio API key कॉन्फ़िगर नहीं है', 'skills.composio.noApiKeyDescription': 'लोकल मोड आपकी अपनी Composio API key का उपयोग करता है। यहाँ integrations जोड़ने से पहले Settings → Advanced → Composio खोलकर key जोड़ें।', @@ -4256,7 +4256,7 @@ const messages: TranslationMap = { 'skills.channelIcon.telegram': 'Telegram', 'skills.channelIcon.web': 'वेब', 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'OAuth', + 'skills.composio.poweredBy': 'Composio द्वारा संचालित', 'skills.composio.staleStatusTitle': 'कनेक्शन पुरानी स्थिति दिखा रहे हैं', 'skills.create.allowedTools': 'अनुमत टूल्स', 'skills.create.allowedToolsHelp': 'SKILL.md फ्रंटमैटर में प्रस्तुत किया गया', diff --git a/app/src/lib/i18n/id.ts b/app/src/lib/i18n/id.ts index 7c88baf81..9fb65bd72 100644 --- a/app/src/lib/i18n/id.ts +++ b/app/src/lib/i18n/id.ts @@ -361,9 +361,9 @@ const messages: TranslationMap = { 'skills.explorer.installed': 'Terpasang', 'skills.explorer.install': 'Pasang', 'skills.explorer.installing': 'Memasang…', - 'skills.integrations': 'Aplikasi', + 'skills.integrations': 'Integrasi Composio', 'skills.integrationsSubtitle': - 'Koneksi OAuth berbasis cloud — masuk dengan akun Anda dan token dikelola dengan aman agar agen dapat membaca dan bertindak atas nama Anda. Tidak perlu mengelola API key.', + 'Koneksi OAuth berbasis cloud — masuk dengan akun Anda dan Composio mengelola token agar agen dapat membaca dan bertindak atas nama Anda. Tidak perlu mengelola API key.', 'skills.composio.noApiKeyTitle': 'Belum ada API key Composio yang dikonfigurasi', 'skills.composio.noApiKeyDescription': 'Mode lokal menggunakan API key Composio milik Anda sendiri. Buka Pengaturan → Lanjutan → Composio untuk menambahkannya sebelum menghubungkan integrasi di sini.', @@ -4270,7 +4270,7 @@ const messages: TranslationMap = { 'skills.channelIcon.telegram': 'Telegram', 'skills.channelIcon.web': 'Web', 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'OAuth', + 'skills.composio.poweredBy': 'Didukung oleh Composio', 'skills.composio.staleStatusTitle': 'Koneksi menunjukkan status basi', 'skills.create.allowedTools': 'Tool yang diizinkan', 'skills.create.allowedToolsHelp': 'Dirender ke frontmatter SKILL.md sebagai', diff --git a/app/src/lib/i18n/it.ts b/app/src/lib/i18n/it.ts index 4505aa6af..b2f2d6b62 100644 --- a/app/src/lib/i18n/it.ts +++ b/app/src/lib/i18n/it.ts @@ -365,9 +365,9 @@ const messages: TranslationMap = { 'skills.explorer.installed': 'Installata', 'skills.explorer.install': 'Installa', 'skills.explorer.installing': 'Installazione…', - 'skills.integrations': 'App', + 'skills.integrations': 'Integrazioni Composio', 'skills.integrationsSubtitle': - 'Connessioni OAuth basate su cloud — accedi con il tuo account e i token sono gestiti in modo sicuro affinché gli agenti possano leggere e agire per tuo conto. Nessuna chiave API da gestire.', + 'Connessioni OAuth basate su cloud — accedi con il tuo account e Composio gestisce i token affinché gli agenti possano leggere e agire per tuo conto. Nessuna chiave API da gestire.', 'skills.composio.noApiKeyTitle': 'Nessuna chiave API Composio configurata', 'skills.composio.noApiKeyDescription': 'La modalità locale usa la tua chiave API Composio. Apri Impostazioni → Avanzate → Composio per aggiungerne una prima di collegare le integrazioni qui.', @@ -4329,7 +4329,7 @@ const messages: TranslationMap = { 'skills.channelIcon.telegram': 'Telegram', 'skills.channelIcon.web': 'Web', 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'OAuth', + 'skills.composio.poweredBy': 'Offerto da Composio', 'skills.composio.staleStatusTitle': 'Le connessioni mostrano uno stato obsoleto', 'skills.create.allowedTools': 'Strumenti consentiti', 'skills.create.allowedToolsHelp': 'Resi nel frontmatter SKILL.md come', diff --git a/app/src/lib/i18n/ko.ts b/app/src/lib/i18n/ko.ts index 4b63e0816..61391b856 100644 --- a/app/src/lib/i18n/ko.ts +++ b/app/src/lib/i18n/ko.ts @@ -358,9 +358,9 @@ const messages: TranslationMap = { 'skills.explorer.installed': '설치됨', 'skills.explorer.install': '설치', 'skills.explorer.installing': '설치 중…', - 'skills.integrations': '앱', + 'skills.integrations': 'Composio 통합', 'skills.integrationsSubtitle': - '클라우드 기반 OAuth 연결 — 계정으로 로그인하면 토큰이 안전하게 관리되어 에이전트가 사용자를 대신해 읽고 작동할 수 있습니다. API 키 관리가 필요 없습니다.', + '클라우드 기반 OAuth 연결 — 계정으로 로그인하면 Composio가 토큰을 관리하여 에이전트가 사용자를 대신해 읽고 작동할 수 있습니다. API 키 관리가 필요 없습니다.', 'skills.composio.noApiKeyTitle': '아니요 Composio API 키가 구성됨', 'skills.composio.noApiKeyDescription': '로컬 모드에서는 자체 Composio API 키를 사용합니다. 설정 → 고급 → Composio에서 키를 추가한 후 여기서 통합을 연결하세요.', @@ -4210,7 +4210,7 @@ const messages: TranslationMap = { 'skills.channelIcon.telegram': 'Telegram', 'skills.channelIcon.web': '웹', 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'OAuth', + 'skills.composio.poweredBy': 'Composio 제공', 'skills.composio.staleStatusTitle': '연결이 오래된 상태를 표시합니다.', 'skills.create.allowedTools': '허용된 도구', 'skills.create.allowedToolsHelp': 'SKILL.md 앞부분에 다음과 같이 렌더링됩니다.', diff --git a/app/src/lib/i18n/pl.ts b/app/src/lib/i18n/pl.ts index 962a60bad..55fce1871 100644 --- a/app/src/lib/i18n/pl.ts +++ b/app/src/lib/i18n/pl.ts @@ -363,9 +363,9 @@ const messages: TranslationMap = { 'skills.explorer.installed': 'Zainstalowano', 'skills.explorer.install': 'Zainstaluj', 'skills.explorer.installing': 'Instalowanie…', - 'skills.integrations': 'Aplikacje', + 'skills.integrations': 'Integracje Composio', 'skills.integrationsSubtitle': - 'Chmurowe połączenia OAuth — zaloguj się swoim kontem, a tokeny są bezpiecznie zarządzane, dzięki czemu agenci mogą czytać i działać w Twoim imieniu. Bez kluczy API do utrzymywania.', + 'Chmurowe połączenia OAuth — zaloguj się swoim kontem, a Composio pośredniczy w tokenach, dzięki czemu agenci mogą czytać i działać w Twoim imieniu. Bez kluczy API do utrzymywania.', 'skills.composio.noApiKeyTitle': 'Brak skonfigurowanego klucza API Composio', 'skills.composio.noApiKeyDescription': 'W trybie lokalnym używany jest Twój własny klucz API Composio. Otwórz Ustawienia → Zaawansowane → Composio, aby dodać klucz, zanim podłączysz tutaj integracje.', @@ -4323,7 +4323,7 @@ const messages: TranslationMap = { 'skills.channelIcon.telegram': 'Telegram', 'skills.channelIcon.web': 'Sieć', 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'OAuth', + 'skills.composio.poweredBy': 'Napędzane przez Composio', 'skills.composio.staleStatusTitle': 'Połączenia pokazują nieaktualny status', 'skills.create.allowedTools': 'Dozwolone narzędzia', 'skills.create.allowedToolsHelp': 'Renderowane do nagłówka frontmatter SKILL.md jako', diff --git a/app/src/lib/i18n/pt.ts b/app/src/lib/i18n/pt.ts index f7aa78c03..3f4b345ee 100644 --- a/app/src/lib/i18n/pt.ts +++ b/app/src/lib/i18n/pt.ts @@ -369,9 +369,9 @@ const messages: TranslationMap = { 'skills.explorer.installed': 'Instalada', 'skills.explorer.install': 'Instalar', 'skills.explorer.installing': 'Instalando…', - 'skills.integrations': 'Aplicativos', + 'skills.integrations': 'Integrações do Composio', 'skills.integrationsSubtitle': - 'Conexões OAuth baseadas em nuvem — faça login com sua conta e os tokens são gerenciados com segurança para que os agentes possam ler e agir em seu nome. Sem chaves de API para gerenciar.', + 'Conexões OAuth baseadas em nuvem — faça login com sua conta e o Composio gerencia os tokens para que os agentes possam ler e agir em seu nome. Sem chaves de API para gerenciar.', 'skills.composio.noApiKeyTitle': 'Nenhuma chave de API do Composio configurada', 'skills.composio.noApiKeyDescription': 'O modo local usa sua própria chave de API do Composio. Abra Configurações → Avançado → Composio para adicionar uma antes de conectar integrações aqui.', @@ -4331,7 +4331,7 @@ const messages: TranslationMap = { 'skills.channelIcon.telegram': 'Telegram', 'skills.channelIcon.web': 'Web', 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'OAuth', + 'skills.composio.poweredBy': 'Desenvolvido por Composio', 'skills.composio.staleStatusTitle': 'As conexões estão mostrando status obsoleto', 'skills.create.allowedTools': 'Ferramentas permitidas', 'skills.create.allowedToolsHelp': 'Renderizado no frontmatter SKILL.md como', diff --git a/app/src/lib/i18n/ru.ts b/app/src/lib/i18n/ru.ts index 6820cbd18..53adb0511 100644 --- a/app/src/lib/i18n/ru.ts +++ b/app/src/lib/i18n/ru.ts @@ -363,9 +363,9 @@ const messages: TranslationMap = { 'skills.explorer.installed': 'Установлено', 'skills.explorer.install': 'Установить', 'skills.explorer.installing': 'Установка…', - 'skills.integrations': 'Приложения', + 'skills.integrations': 'Интеграции Composio', 'skills.integrationsSubtitle': - 'Облачные OAuth-подключения — войдите в свой аккаунт, и токены управляются безопасно, чтобы агенты могли читать и действовать от вашего имени. Никаких API-ключей для управления.', + 'Облачные OAuth-подключения — войдите в свой аккаунт, и Composio управляет токенами, чтобы агенты могли читать и действовать от вашего имени. Никаких API-ключей для управления.', 'skills.composio.noApiKeyTitle': 'Ключ API Composio не настроен', 'skills.composio.noApiKeyDescription': 'Локальный режим использует ваш собственный ключ API Composio. Откройте Настройки → Дополнительно → Composio, чтобы добавить ключ перед подключением интеграций здесь.', @@ -4295,7 +4295,7 @@ const messages: TranslationMap = { 'skills.channelIcon.telegram': 'Telegram', 'skills.channelIcon.web': 'Интернет', 'skills.channelIcon.yuanbao': 'Yuanbao', - 'skills.composio.poweredBy': 'OAuth', + 'skills.composio.poweredBy': 'Работает на Composio', 'skills.composio.staleStatusTitle': 'Соединения показывают устаревший статус', 'skills.create.allowedTools': 'Разрешённые инструменты', 'skills.create.allowedToolsHelp': 'Отображается в SKILL.md как', diff --git a/app/src/lib/i18n/zh-CN.ts b/app/src/lib/i18n/zh-CN.ts index 2a3d0bbcf..0f21e5bbf 100644 --- a/app/src/lib/i18n/zh-CN.ts +++ b/app/src/lib/i18n/zh-CN.ts @@ -342,9 +342,9 @@ const messages: TranslationMap = { 'skills.explorer.installed': '已安装', 'skills.explorer.install': '安装', 'skills.explorer.installing': '安装中…', - 'skills.integrations': '应用', + 'skills.integrations': 'Composio 集成', 'skills.integrationsSubtitle': - '基于云端的 OAuth 连接——使用您的账户登录,令牌将被安全管理,让智能体能以您的名义读取数据并执行操作,无需管理 API 密钥。', + '基于云端的 OAuth 连接——使用您的账户登录,Composio 代管令牌,让智能体能以您的名义读取数据并执行操作,无需管理 API 密钥。', 'skills.composio.noApiKeyTitle': '尚未配置 Composio API 密钥', 'skills.composio.noApiKeyDescription': '本地模式使用你自己的 Composio API 密钥。在此连接集成之前,请打开 设置 → 高级 → Composio 添加一个密钥。', @@ -4043,7 +4043,7 @@ const messages: TranslationMap = { 'skills.channelIcon.telegram': 'Telegram', 'skills.channelIcon.web': '网络', 'skills.channelIcon.yuanbao': '元宝', - 'skills.composio.poweredBy': 'OAuth', + 'skills.composio.poweredBy': '由 Composio 提供支持', 'skills.composio.staleStatusTitle': '连接显示陈旧状态', 'skills.create.allowedTools': '允许的工具', 'skills.create.allowedToolsHelp': '渲染到 SKILL.md frontmatter 中为', diff --git a/app/src/pages/__tests__/Skills.channels-grid.test.tsx b/app/src/pages/__tests__/Skills.channels-grid.test.tsx index 11c4b9ab3..912c3d844 100644 --- a/app/src/pages/__tests__/Skills.channels-grid.test.tsx +++ b/app/src/pages/__tests__/Skills.channels-grid.test.tsx @@ -152,7 +152,7 @@ describe('Skills page — Channels grid', () => { fireEvent.click(screen.getByRole('tab', { name: 'Apps' })); // The Apps tab owns the Integrations category filter. - const integrationsHeading = screen.getByRole('heading', { name: 'Apps' }); + const integrationsHeading = screen.getByRole('heading', { name: 'Composio Integrations' }); const integrationsCard = integrationsHeading.closest('.rounded-2xl'); expect(integrationsCard).not.toBeNull(); const filterTabs = within(integrationsCard as HTMLElement) diff --git a/app/src/pages/__tests__/Skills.composio-catalog.test.tsx b/app/src/pages/__tests__/Skills.composio-catalog.test.tsx index 37e5d67c2..513f3589f 100644 --- a/app/src/pages/__tests__/Skills.composio-catalog.test.tsx +++ b/app/src/pages/__tests__/Skills.composio-catalog.test.tsx @@ -86,7 +86,7 @@ describe('Skills page — Composio catalog fallback', () => { renderWithProviders(, { initialEntries: ['/connections'] }); openAppsTab(); - expect(screen.getByRole('heading', { name: 'Apps' })).toBeInTheDocument(); + expect(screen.getByRole('heading', { name: 'Composio Integrations' })).toBeInTheDocument(); expect(screen.getByText('Discord')).toBeInTheDocument(); expect(screen.getByText('Google Calendar')).toBeInTheDocument(); expect(screen.getByText('Google Drive')).toBeInTheDocument(); @@ -103,7 +103,7 @@ describe('Skills page — Composio catalog fallback', () => { // missing Composio Zoom tile even though the Meeting bots card also // renders a "Zoom" entry on the same page. const integrationsSection = screen - .getByRole('heading', { name: 'Apps' }) + .getByRole('heading', { name: 'Composio Integrations' }) .closest('.rounded-2xl'); expect(integrationsSection).not.toBeNull(); expect(within(integrationsSection as HTMLElement).getByText('Zoom')).toBeInTheDocument(); @@ -120,7 +120,7 @@ describe('Skills page — Composio catalog fallback', () => { expect(screen.getByText('Backend unavailable')).toBeInTheDocument(); const integrationsSection = screen - .getByRole('heading', { name: 'Apps' }) + .getByRole('heading', { name: 'Composio Integrations' }) .closest('.rounded-2xl'); expect(integrationsSection).not.toBeNull(); const gmailTile = within(integrationsSection as HTMLElement).getByRole('button', { @@ -143,7 +143,7 @@ describe('Skills page — Composio catalog fallback', () => { openAppsTab(); const integrationsSection = screen - .getByRole('heading', { name: 'Apps' }) + .getByRole('heading', { name: 'Composio Integrations' }) .closest('.rounded-2xl'); expect(integrationsSection).not.toBeNull(); const gmailTile = within(integrationsSection as HTMLElement).getByRole('button', { @@ -178,7 +178,7 @@ describe('Skills page — Composio catalog fallback', () => { openAppsTab(); const integrationsSection = screen - .getByRole('heading', { name: 'Apps' }) + .getByRole('heading', { name: 'Composio Integrations' }) .closest('.rounded-2xl'); expect(integrationsSection).not.toBeNull(); expect(within(integrationsSection as HTMLElement).getByText('2')).toBeInTheDocument(); @@ -198,7 +198,7 @@ describe('Skills page — Composio catalog fallback', () => { openAppsTab(); const integrationsSection = screen - .getByRole('heading', { name: 'Apps' }) + .getByRole('heading', { name: 'Composio Integrations' }) .closest('.rounded-2xl'); expect(integrationsSection).not.toBeNull(); // No Preview badges anywhere in the integrations grid. The @@ -222,7 +222,7 @@ describe('Skills page — Composio catalog fallback', () => { openAppsTab(); const integrationsSection = screen - .getByRole('heading', { name: 'Apps' }) + .getByRole('heading', { name: 'Composio Integrations' }) .closest('.rounded-2xl'); expect(integrationsSection).not.toBeNull(); const zohoTile = within(integrationsSection as HTMLElement).getByRole('button', { diff --git a/app/src/pages/__tests__/Skills.third-party-gmail-sync.test.tsx b/app/src/pages/__tests__/Skills.third-party-gmail-sync.test.tsx index d2ad119b6..61c20c421 100644 --- a/app/src/pages/__tests__/Skills.third-party-gmail-sync.test.tsx +++ b/app/src/pages/__tests__/Skills.third-party-gmail-sync.test.tsx @@ -44,7 +44,7 @@ describe('Skills page — Gmail composio integration', () => { fireEvent.click(screen.getByRole('tab', { name: 'Apps' })); const integrationsSection = screen - .getByRole('heading', { name: 'Apps' }) + .getByRole('heading', { name: 'Composio Integrations' }) .closest('.rounded-2xl'); expect(integrationsSection).not.toBeNull(); expect(within(integrationsSection as HTMLElement).getByText('Gmail')).toBeInTheDocument(); diff --git a/app/src/pages/__tests__/Skills.third-party-notion-debug-tools.test.tsx b/app/src/pages/__tests__/Skills.third-party-notion-debug-tools.test.tsx index d96e12c38..5ba2ae814 100644 --- a/app/src/pages/__tests__/Skills.third-party-notion-debug-tools.test.tsx +++ b/app/src/pages/__tests__/Skills.third-party-notion-debug-tools.test.tsx @@ -39,7 +39,7 @@ describe('Skills page — Notion composio integration', () => { renderWithProviders(, { initialEntries: ['/connections'] }); fireEvent.click(screen.getByRole('tab', { name: 'Apps' })); - expect(screen.getByRole('heading', { name: 'Apps' })).toBeInTheDocument(); + expect(screen.getByRole('heading', { name: 'Composio Integrations' })).toBeInTheDocument(); const notionTile = screen.getByRole('button', { name: /Notion.*Connect/i }); expect(notionTile).toBeInTheDocument(); diff --git a/app/test/playwright/specs/composio-triggers-flow.spec.ts b/app/test/playwright/specs/composio-triggers-flow.spec.ts index 7622d9052..dd1480e7e 100644 --- a/app/test/playwright/specs/composio-triggers-flow.spec.ts +++ b/app/test/playwright/specs/composio-triggers-flow.spec.ts @@ -84,10 +84,10 @@ async function bootSkillsPage(page: Page, userId: string) { await dismissWalkthroughIfPresent(page); // Phase 2: "Composio" tab renamed to "Apps" await page.getByRole('tab', { name: 'Apps' }).click(); - // Phase 2: heading is now "Apps" (skills.integrations), "Composio Integrations" removed - await expect(page.getByRole('heading', { name: 'Apps', exact: true })).toBeVisible({ - timeout: 20_000, - }); + // Heading reads "Composio Integrations" (skills.integrations); the tab is "Apps" + await expect( + page.getByRole('heading', { name: 'Composio Integrations', exact: true }) + ).toBeVisible({ timeout: 20_000 }); } async function openGmailManageModal(page: Page) { @@ -186,11 +186,11 @@ test.describe('Composio triggers flow', () => { await page.reload(); await waitForAppReady(page); await dismissWalkthroughIfPresent(page); - // Phase 2: "Composio" tab renamed to "Apps"; heading is now "Apps" + // Tab is "Apps"; heading reads "Composio Integrations" await page.getByRole('tab', { name: 'Apps' }).click(); - await expect(page.getByRole('heading', { name: 'Apps', exact: true })).toBeVisible({ - timeout: 20_000, - }); + await expect( + page.getByRole('heading', { name: 'Composio Integrations', exact: true }) + ).toBeVisible({ timeout: 20_000 }); const dialog = await openGmailManageModal(page); await expect(dialog.getByTestId('trigger-toggles')).toBeVisible(); diff --git a/app/test/playwright/specs/connector-gmail-composio.spec.ts b/app/test/playwright/specs/connector-gmail-composio.spec.ts index 0d86d8915..e0ce406f1 100644 --- a/app/test/playwright/specs/connector-gmail-composio.spec.ts +++ b/app/test/playwright/specs/connector-gmail-composio.spec.ts @@ -77,7 +77,7 @@ async function bootSkillsPage(page: Page, userId: string) { await dismissWalkthroughIfPresent(page); // Phase 2: "Composio" tab renamed to "Apps" await page.getByRole('tab', { name: 'Apps' }).click(); - const heading = page.getByRole('heading', { name: 'Apps', exact: true }); + const heading = page.getByRole('heading', { name: 'Composio Integrations', exact: true }); if (!(await heading.isVisible().catch(() => false))) { const connectionsButton = page.getByRole('button', { name: 'Connections' }); if (await connectionsButton.isVisible().catch(() => false)) { @@ -89,9 +89,9 @@ async function bootSkillsPage(page: Page, userId: string) { await dismissWalkthroughIfPresent(page); } } - await expect(page.getByRole('heading', { name: 'Apps', exact: true })).toBeVisible({ - timeout: 20_000, - }); + await expect( + page.getByRole('heading', { name: 'Composio Integrations', exact: true }) + ).toBeVisible({ timeout: 20_000 }); } async function reloadSkills(page: Page) { @@ -100,7 +100,7 @@ async function reloadSkills(page: Page) { async function ensureComposioSurface(page: Page) { // Phase 2: /skills → /connections, "Composio" tab renamed to "Apps" - const heading = page.getByRole('heading', { name: 'Apps', exact: true }); + const heading = page.getByRole('heading', { name: 'Composio Integrations', exact: true }); for (let attempt = 0; attempt < 3; attempt++) { await page.evaluate(() => { window.location.hash = '/connections'; diff --git a/app/test/playwright/specs/connector-session-guard-matrix.spec.ts b/app/test/playwright/specs/connector-session-guard-matrix.spec.ts index 32c3a50a6..4d7d2dcf2 100644 --- a/app/test/playwright/specs/connector-session-guard-matrix.spec.ts +++ b/app/test/playwright/specs/connector-session-guard-matrix.spec.ts @@ -74,9 +74,9 @@ async function bootSkills(page: Page, userId: string): Promise { await waitForAppReady(page); await dismissWalkthroughIfPresent(page); await page.getByRole('tab', { name: 'Apps' }).click(); - await expect(page.getByRole('heading', { name: 'Apps', exact: true })).toBeVisible({ - timeout: 20_000, - }); + await expect( + page.getByRole('heading', { name: 'Composio Integrations', exact: true }) + ).toBeVisible({ timeout: 20_000 }); } async function assertSessionAlive(page: Page): Promise { diff --git a/app/test/playwright/specs/gmail-flow.spec.ts b/app/test/playwright/specs/gmail-flow.spec.ts index d37f10ada..d75afb9a0 100644 --- a/app/test/playwright/specs/gmail-flow.spec.ts +++ b/app/test/playwright/specs/gmail-flow.spec.ts @@ -70,10 +70,10 @@ async function bootSkillsPage(page: Page, userId: string) { }); await waitForAppReady(page); await dismissWalkthroughIfPresent(page); - // Phase 2: "Composio" tab renamed to "Apps"; heading is now "Apps" (skills.integrations) + // Tab is "Apps"; the h2 heading reads "Composio Integrations" (skills.integrations) await page.getByRole('tab', { name: 'Apps' }).click(); - // Wait for the Apps tab grid to be visible — the h2 heading text is now "Apps" - const heading = page.getByRole('heading', { name: 'Apps', exact: true }); + // Wait for the Apps tab grid to be visible — the h2 heading text is "Composio Integrations" + const heading = page.getByRole('heading', { name: 'Composio Integrations', exact: true }); await expect(heading).toBeVisible({ timeout: 20_000 }); } @@ -141,9 +141,11 @@ test.describe('Gmail Integration Flows', () => { test('execute and disconnect routes do not blank the skills page', async ({ page }) => { await callCoreRpc('openhuman.composio_execute', { tool: ACTION, arguments: {} }); - // Phase 2: "Composio" tab renamed to "Apps"; heading is now "Apps" (skills.integrations) + // Tab is "Apps"; the h2 heading reads "Composio Integrations" (skills.integrations) await page.getByRole('tab', { name: 'Apps' }).click(); - await expect(page.getByRole('heading', { name: 'Apps', exact: true })).toBeVisible(); + await expect( + page.getByRole('heading', { name: 'Composio Integrations', exact: true }) + ).toBeVisible(); await callCoreRpc('openhuman.composio_delete_connection', { connection_id: CONNECTION_ID }); const requests = await getRequestLog(); diff --git a/app/test/playwright/specs/skills-registry.spec.ts b/app/test/playwright/specs/skills-registry.spec.ts index f5409f502..5dfa2f9a5 100644 --- a/app/test/playwright/specs/skills-registry.spec.ts +++ b/app/test/playwright/specs/skills-registry.spec.ts @@ -40,8 +40,10 @@ test.describe('Skills registry flow', () => { await expect(page.getByRole('tab', { name: 'Messaging', exact: true })).toBeVisible(); await expect(page.getByRole('tab', { name: 'Tools', exact: true })).toBeVisible(); await page.getByRole('tab', { name: 'Apps', exact: true }).click(); - // Phase 2: heading is now "Apps" (skills.integrations), "Composio Integrations" removed - await expect(page.getByRole('heading', { name: 'Apps', exact: true })).toBeVisible(); + // Heading reads "Composio Integrations" (skills.integrations); the tab is "Apps" + await expect( + page.getByRole('heading', { name: 'Composio Integrations', exact: true }) + ).toBeVisible(); await expect( page.getByText(/Gmail|Notion|Telegram|GitHub|Google Drive/, { exact: false }).first() ).toBeVisible();