diff --git a/.codex b/.codex new file mode 100644 index 00000000000..e69de29bb2d diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b25d32598a..ce40eb29375 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Roo Code Changelog +## 3.53.1 + +### Patch Changes + +- Add the Zoo Code migration handoff flow, including a VS Code command, activation notification, and release announcement actions to prepare Roo data for import into Zoo Code. + ## 3.53.0 ### Minor Changes diff --git a/README.md b/README.md index 498a847aeb7..391f300bee3 100644 --- a/README.md +++ b/README.md @@ -13,19 +13,15 @@ > Your AI-Powered Dev Team, Right in Your Editor -## What's New in v3.53.0 +## Final Roo Code Update: Move to Zoo Code -> ### The Roo Code plugin is not going away. +> ### Roo is back as Zoo Code. > -> You may have seen the [recent announcement](https://x.com/mattrubens/status/2046636598859559114) that Roo Code hit 3 million installs and the original team is going all-in on Roomote. We know that news was hard for a lot of you. This plugin means a lot to us and to you, and we hear you. +> This final Roo Code update helps you move your local setup to the new community-maintained Zoo Code extension. > -> The good news: **a community team has stepped up to carry Roo Code forward**, and we're working with them on an official handoff so the plugin you rely on keeps getting maintained and improved. +> To migrate, install **Zoo Code** from your extension gallery as `ZooCodeOrganization.zoo-code`, then run **Roo Code: Prepare Zoo Migration** from the command palette. Roo creates a copy-based handoff bundle under its global storage with your settings and task history while leaving your original Roo data untouched. Provider profiles and API keys are included only if you explicitly choose to include them. -**What's new in this release:** - -- Add GPT-5.5 support via the OpenAI Codex provider. -- Add Claude Opus 4.7 support on Vertex AI. -- Add previous checkpoint navigation controls in chat so you can step back through prior checkpoints more easily. +Read the community announcement: [Roo is back as Zoo](https://www.reddit.com/r/RooCode/comments/1syufn1/roo_is_back_as_zoo/)
🌐 Available languages @@ -49,7 +45,7 @@ - [简体中文](locales/zh-CN/README.md) - [繁體中文](locales/zh-TW/README.md) - ... -
+ --- diff --git a/locales/ca/README.md b/locales/ca/README.md index 0713b0d74b6..221477ba9fb 100644 --- a/locales/ca/README.md +++ b/locales/ca/README.md @@ -13,19 +13,15 @@ > El teu equip de desenvolupament impulsat per IA, directament al teu editor -## Novetats de la v3.53.0 +## Actualització final de Roo Code: passa a Zoo Code -> ### El plugin Roo Code no desapareix. +> ### Roo torna com a Zoo Code. > -> Potser has vist l'[anunci recent](https://x.com/mattrubens/status/2046636598859559114) que Roo Code ha arribat a 3 milions d'instal·lacions i que l'equip original es bolca completament amb Roomote. Sabem que aquesta notícia ha estat dura per a molts de vosaltres. Aquest plugin ens importa molt, tant a nosaltres com a tu, i t'escoltem. +> Aquesta actualització final de Roo Code t'ajuda a moure la configuració local a la nova extensió Zoo Code mantinguda per la comunitat. > -> La bona notícia: **un equip de la comunitat ha donat un pas endavant per portar Roo Code cap endavant**, i estem treballant amb ells en un relleu oficial perquè el plugin en què confies continuï rebent manteniment i millores. +> Per migrar, instal·la **Zoo Code** des de la teva galeria d'extensions com a `ZooCodeOrganization.zoo-code` i després executa **Roo Code: Prepare Zoo Migration** des de la paleta d'ordres. Roo crea un paquet de traspàs basat en còpia dins del seu emmagatzematge global amb la teva configuració i l'historial de tasques, sense tocar les dades originals de Roo. Els perfils de proveïdor i les claus d'API només s'inclouen si tries explícitament incloure'ls. -**Novetats d'aquesta versió:** - -- S'ha afegit suport per a GPT-5.5 mitjançant el proveïdor OpenAI Codex. -- S'ha afegit suport per a Claude Opus 4.7 a Vertex AI. -- S'han afegit controls de navegació per checkpoints anteriors al xat, perquè puguis tornar enrere pels checkpoints previs més fàcilment. +Llegeix l'anunci de la comunitat: [Roo is back as Zoo](https://www.reddit.com/r/RooCode/comments/1syufn1/roo_is_back_as_zoo/)
🌐 Idiomes disponibles @@ -49,7 +45,7 @@ - [简体中文](../zh-CN/README.md) - [繁體中文](../zh-TW/README.md) - ... -
+ --- diff --git a/locales/de/README.md b/locales/de/README.md index 50ac67ca109..de4ae3ce159 100644 --- a/locales/de/README.md +++ b/locales/de/README.md @@ -13,19 +13,15 @@ > Dein KI-gestütztes Dev-Team – direkt in deinem Editor -## Neu in v3.53.0 +## Letztes Roo Code-Update: Wechsel zu Zoo Code -> ### Das Roo Code-Plugin verschwindet nicht. +> ### Roo ist als Zoo Code zurück. > -> Du hast vielleicht die [neuliche Ankündigung](https://x.com/mattrubens/status/2046636598859559114) gesehen, dass Roo Code 3 Millionen Installationen erreicht hat und das ursprüngliche Team sich voll auf Roomote konzentriert. Wir wissen, dass diese Nachricht für viele von euch schwer war. Dieses Plugin bedeutet uns und dir sehr viel, und wir hören dich. +> Dieses letzte Roo Code-Update hilft dir, deine lokale Einrichtung zur neuen, von der Community gepflegten Zoo Code-Erweiterung zu übertragen. > -> Die gute Nachricht: **ein Community-Team hat sich bereit erklärt, Roo Code weiterzuführen**, und wir arbeiten mit ihnen an einer offiziellen Übergabe, damit das Plugin, auf das du dich verlässt, weiterhin gepflegt und verbessert wird. +> Installiere für die Migration **Zoo Code** aus deiner Erweiterungsgalerie als `ZooCodeOrganization.zoo-code` und führe dann **Roo Code: Prepare Zoo Migration** über die Befehlspalette aus. Roo erstellt in seinem globalen Speicher ein kopiebasiertes Übergabepaket mit deinen Einstellungen und deinem Aufgabenverlauf, ohne deine ursprünglichen Roo-Daten zu verändern. Provider-Profile und API-Schlüssel werden nur eingeschlossen, wenn du das ausdrücklich auswählst. -**Neu in dieser Version:** - -- GPT-5.5-Unterstützung über den OpenAI Codex-Provider hinzugefügt. -- Claude Opus 4.7-Unterstützung auf Vertex AI hinzugefügt. -- Steuerelemente zur Navigation zu vorherigen Checkpoints im Chat hinzugefügt, damit du leichter durch frühere Checkpoints zurückspringen kannst. +Lies die Community-Ankündigung: [Roo is back as Zoo](https://www.reddit.com/r/RooCode/comments/1syufn1/roo_is_back_as_zoo/)
🌐 Verfügbare Sprachen @@ -49,7 +45,7 @@ - [简体中文](../zh-CN/README.md) - [繁體中文](../zh-TW/README.md) - ... -
+ --- diff --git a/locales/es/README.md b/locales/es/README.md index 06d518e44bc..3565585fcbc 100644 --- a/locales/es/README.md +++ b/locales/es/README.md @@ -13,19 +13,15 @@ > Tu equipo de desarrollo con IA, directamente en tu editor -## Novedades de la v3.53.0 +## Actualización final de Roo Code: pasa a Zoo Code -> ### El plugin de Roo Code no va a desaparecer. +> ### Roo vuelve como Zoo Code. > -> Puede que hayas visto el [anuncio reciente](https://x.com/mattrubens/status/2046636598859559114) de que Roo Code ha llegado a 3 millones de instalaciones y que el equipo original se está volcando por completo en Roomote. Sabemos que esa noticia fue dura para muchos de vosotros. Este plugin significa mucho para nosotros y para ti, y te escuchamos. +> Esta actualización final de Roo Code te ayuda a mover tu configuración local a la nueva extensión Zoo Code mantenida por la comunidad. > -> La buena noticia: **un equipo de la comunidad ha dado un paso adelante para seguir adelante con Roo Code**, y estamos trabajando con ellos en un relevo oficial para que el plugin del que dependes siga recibiendo mantenimiento y mejoras. +> Para migrar, instala **Zoo Code** desde tu galería de extensiones como `ZooCodeOrganization.zoo-code` y luego ejecuta **Roo Code: Prepare Zoo Migration** desde la paleta de comandos. Roo crea un paquete de traspaso basado en copia en su almacenamiento global con tu configuración e historial de tareas, sin tocar tus datos originales de Roo. Los perfiles de proveedor y las claves de API solo se incluyen si eliges incluirlos explícitamente. -**Novedades de esta versión:** - -- Se añadió soporte para GPT-5.5 a través del proveedor OpenAI Codex. -- Se añadió soporte para Claude Opus 4.7 en Vertex AI. -- Se añadieron controles de navegación por checkpoints anteriores en el chat para que puedas retroceder por los checkpoints previos más fácilmente. +Lee el anuncio de la comunidad: [Roo is back as Zoo](https://www.reddit.com/r/RooCode/comments/1syufn1/roo_is_back_as_zoo/)
🌐 Idiomas disponibles @@ -49,7 +45,7 @@ - [简体中文](../zh-CN/README.md) - [繁體中文](../zh-TW/README.md) - ... -
+ --- diff --git a/locales/fr/README.md b/locales/fr/README.md index 2561ac4f4ff..39d09ef1f31 100644 --- a/locales/fr/README.md +++ b/locales/fr/README.md @@ -13,19 +13,15 @@ > Ton équipe de dev propulsée par l'IA, directement dans ton éditeur -## Nouveautés de la v3.53.0 +## Dernière mise à jour de Roo Code : passer à Zoo Code -> ### L'extension Roo Code ne va pas disparaître. +> ### Roo revient sous le nom Zoo Code. > -> Tu as peut-être vu l'[annonce récente](https://x.com/mattrubens/status/2046636598859559114) : Roo Code a franchi les 3 millions d'installations et l'équipe d'origine se consacre désormais entièrement à Roomote. On sait que cette nouvelle a été difficile pour beaucoup d'entre vous. Cette extension compte énormément pour nous comme pour toi, et on t'entend. +> Cette dernière mise à jour de Roo Code t'aide à déplacer ta configuration locale vers la nouvelle extension Zoo Code maintenue par la communauté. > -> La bonne nouvelle : **une équipe de la communauté a décidé de prendre le relais pour faire avancer Roo Code**, et on travaille avec eux sur une transmission officielle pour que l'extension sur laquelle tu comptes continue d'être maintenue et améliorée. +> Pour migrer, installe **Zoo Code** depuis ta galerie d'extensions sous l'id `ZooCodeOrganization.zoo-code`, puis lance **Roo Code: Prepare Zoo Migration** depuis la palette de commandes. Roo crée dans son stockage global un paquet de transfert basé sur une copie avec tes paramètres et ton historique de tâches, sans modifier tes données Roo d'origine. Les profils de fournisseurs et les clés API ne sont inclus que si tu choisis explicitement de les inclure. -**Nouveautés de cette version :** - -- Ajout du support de GPT-5.5 via le fournisseur OpenAI Codex. -- Ajout du support de Claude Opus 4.7 sur Vertex AI. -- Ajout de contrôles de navigation vers les checkpoints précédents dans le chat pour que tu puisses revenir en arrière plus facilement à travers les checkpoints antérieurs. +Lis l'annonce de la communauté : [Roo is back as Zoo](https://www.reddit.com/r/RooCode/comments/1syufn1/roo_is_back_as_zoo/)
🌐 Langues disponibles @@ -49,7 +45,7 @@ - [简体中文](../zh-CN/README.md) - [繁體中文](../zh-TW/README.md) - ... -
+ --- diff --git a/locales/hi/README.md b/locales/hi/README.md index 9b26f2dcbc7..9f02f3307fe 100644 --- a/locales/hi/README.md +++ b/locales/hi/README.md @@ -13,19 +13,15 @@ > तुम्हारी AI-संचालित डेवलपमेंट टीम, सीधे तुम्हारे एडिटर में -## v3.53.0 में नया क्या है +## Roo Code का अंतिम अपडेट: Zoo Code पर जाएँ -> ### Roo Code plugin कहीं नहीं जा रहा है। +> ### Roo, Zoo Code के रूप में वापस आ गया है। > -> आपने शायद [हाल ही की घोषणा](https://x.com/mattrubens/status/2046636598859559114) देखी होगी कि Roo Code ने 30 लाख installs पार कर लिए हैं और मूल टीम पूरी तरह Roomote पर focus कर रही है। हम जानते हैं कि यह खबर आप में से कई के लिए कठिन थी। यह plugin हमारे और आपके लिए बहुत मायने रखता है, और हम आपकी बात सुन रहे हैं। +> Roo Code का यह अंतिम अपडेट आपकी स्थानीय सेटअप को समुदाय द्वारा maintained नई Zoo Code extension में ले जाने में मदद करता है। > -> अच्छी खबर: **एक community team ने Roo Code को आगे ले जाने की ज़िम्मेदारी ली है**, और हम उनके साथ एक आधिकारिक handoff पर काम कर रहे हैं ताकि जिस plugin पर आप भरोसा करते हैं, उसका maintenance और improvement जारी रहे। +> माइग्रेट करने के लिए, अपनी extension gallery से **Zoo Code** को `ZooCodeOrganization.zoo-code` के रूप में इंस्टॉल करें, फिर command palette से **Roo Code: Prepare Zoo Migration** चलाएँ। Roo अपने global storage में आपकी settings और task history के साथ copy-based handoff bundle बनाता है, जबकि आपका मूल Roo data untouched रहता है। Provider profiles और API keys तभी शामिल होते हैं जब आप स्पष्ट रूप से उन्हें शामिल करना चुनते हैं। -**इस रिलीज़ में नया क्या है:** - -- OpenAI Codex provider के माध्यम से GPT-5.5 support जोड़ा गया। -- Vertex AI पर Claude Opus 4.7 support जोड़ा गया। -- चैट में पिछले checkpoint navigation controls जोड़े गए ताकि आप पिछले checkpoints पर आसानी से वापस जा सकें। +समुदाय की घोषणा पढ़ें: [Roo is back as Zoo](https://www.reddit.com/r/RooCode/comments/1syufn1/roo_is_back_as_zoo/)
🌐 उपलब्ध भाषाएँ @@ -49,7 +45,7 @@ - [简体中文](../zh-CN/README.md) - [繁體中文](../zh-TW/README.md) - ... -
+ --- diff --git a/locales/id/README.md b/locales/id/README.md index 09b82fe866e..84c85b7ff38 100644 --- a/locales/id/README.md +++ b/locales/id/README.md @@ -13,19 +13,15 @@ > Tim dev bertenaga AI-mu, langsung di editor kamu -## Yang Baru di v3.53.0 +## Pembaruan Terakhir Roo Code: Pindah ke Zoo Code -> ### Plugin Roo Code tidak akan hilang. +> ### Roo kembali sebagai Zoo Code. > -> Kamu mungkin sudah melihat [pengumuman baru-baru ini](https://x.com/mattrubens/status/2046636598859559114) bahwa Roo Code mencapai 3 juta instalasi dan tim aslinya sepenuhnya fokus ke Roomote. Kami tahu berita itu berat bagi banyak dari kalian. Plugin ini sangat berarti bagi kami dan bagi kamu, dan kami mendengarmu. +> Pembaruan terakhir Roo Code ini membantumu memindahkan setup lokal ke ekstensi Zoo Code baru yang dikelola komunitas. > -> Kabar baiknya: **sebuah tim komunitas telah maju untuk melanjutkan Roo Code**, dan kami sedang bekerja sama dengan mereka untuk serah terima resmi agar plugin yang kamu andalkan tetap dirawat dan ditingkatkan. +> Untuk migrasi, instal **Zoo Code** dari galeri ekstensi kamu sebagai `ZooCodeOrganization.zoo-code`, lalu jalankan **Roo Code: Prepare Zoo Migration** dari command palette. Roo membuat handoff bundle berbasis salinan di global storage miliknya berisi pengaturan dan riwayat tugasmu, tanpa mengubah data Roo asli. Profil penyedia dan kunci API hanya disertakan jika kamu secara eksplisit memilih untuk menyertakannya. -**Yang baru di rilis ini:** - -- Menambahkan dukungan GPT-5.5 melalui provider OpenAI Codex. -- Menambahkan dukungan Claude Opus 4.7 di Vertex AI. -- Menambahkan kontrol navigasi checkpoint sebelumnya di chat agar kamu bisa melangkah mundur melalui checkpoint sebelumnya dengan lebih mudah. +Baca pengumuman komunitas: [Roo is back as Zoo](https://www.reddit.com/r/RooCode/comments/1syufn1/roo_is_back_as_zoo/)
🌐 Bahasa yang tersedia @@ -49,7 +45,7 @@ - [简体中文](../zh-CN/README.md) - [繁體中文](../zh-TW/README.md) - ... -
+ --- diff --git a/locales/it/README.md b/locales/it/README.md index 29b692578a8..f8280b8940a 100644 --- a/locales/it/README.md +++ b/locales/it/README.md @@ -13,19 +13,15 @@ > Il tuo team di sviluppo con IA, direttamente nel tuo editor -## Novità in v3.53.0 +## Ultimo aggiornamento di Roo Code: passa a Zoo Code -> ### Il plugin Roo Code non sta per sparire. +> ### Roo torna come Zoo Code. > -> Potresti aver visto l'[annuncio recente](https://x.com/mattrubens/status/2046636598859559114): Roo Code ha raggiunto 3 milioni di installazioni e il team originale si sta concentrando completamente su Roomote. Sappiamo che questa notizia è stata dura per molti di voi. Questo plugin significa tanto per noi e per te, e ti ascoltiamo. +> Questo ultimo aggiornamento di Roo Code ti aiuta a spostare la configurazione locale nella nuova estensione Zoo Code mantenuta dalla community. > -> La buona notizia: **un team della community si è fatto avanti per portare avanti Roo Code**, e stiamo lavorando con loro a un passaggio di consegne ufficiale, così il plugin su cui conti continuerà a essere mantenuto e migliorato. +> Per migrare, installa **Zoo Code** dalla tua galleria estensioni come `ZooCodeOrganization.zoo-code`, poi esegui **Roo Code: Prepare Zoo Migration** dalla palette dei comandi. Roo crea nel suo storage globale un bundle di handoff basato su copia con le tue impostazioni e la cronologia dei task, senza modificare i dati Roo originali. I profili provider e le chiavi API vengono inclusi solo se scegli esplicitamente di includerli. -**Novità in questa versione:** - -- Aggiunto supporto a GPT-5.5 tramite il provider OpenAI Codex. -- Aggiunto supporto a Claude Opus 4.7 su Vertex AI. -- Aggiunti controlli di navigazione dei checkpoint precedenti nella chat così puoi tornare indietro più facilmente attraverso i checkpoint precedenti. +Leggi l'annuncio della community: [Roo is back as Zoo](https://www.reddit.com/r/RooCode/comments/1syufn1/roo_is_back_as_zoo/)
🌐 Lingue disponibili @@ -49,7 +45,7 @@ - [简体中文](../zh-CN/README.md) - [繁體中文](../zh-TW/README.md) - ... -
+ --- diff --git a/locales/ja/README.md b/locales/ja/README.md index ba30ad20605..c2a34e90797 100644 --- a/locales/ja/README.md +++ b/locales/ja/README.md @@ -13,19 +13,15 @@ > あなたのエディタの中に、AIで強化された開発チームを -## v3.53.0 の新機能 +## Roo Code 最終アップデート: Zoo Code へ移行 -> ### Roo Code プラグインはなくなりません。 +> ### Roo は Zoo Code として戻ってきました。 > -> Roo Code のインストール数が300万に達し、元のチームが Roomote に全力で取り組むという[先日のお知らせ](https://x.com/mattrubens/status/2046636598859559114)をご覧になったかもしれません。この知らせが多くの方にとって辛いものだったことは承知しています。このプラグインは私たちにとっても、あなたにとっても大切な存在であり、皆さんの声はしっかり届いています。 +> この Roo Code の最終アップデートは、ローカル環境をコミュニティがメンテナンスする新しい Zoo Code 拡張機能へ移行するためのものです。 > -> 良いお知らせです:**コミュニティチームが Roo Code を受け継いで前進させることを引き受けてくれました**。頼りにしているこのプラグインが引き続きメンテナンスと改善を受けられるよう、私たちは彼らと公式な引き継ぎを進めています。 +> 移行するには、拡張機能ギャラリーから **Zoo Code** を `ZooCodeOrganization.zoo-code` としてインストールし、コマンドパレットから **Roo Code: Prepare Zoo Migration** を実行してください。Roo はグローバルストレージ内に、設定とタスク履歴を含むコピー方式のハンドオフバンドルを作成します。元の Roo データは変更されません。プロバイダープロファイルと API キーは、明示的に含めることを選択した場合にのみ含まれます。 -**今回のリリースの新機能:** - -- OpenAI Codex プロバイダー経由で GPT-5.5 のサポートを追加。 -- Vertex AI 上での Claude Opus 4.7 のサポートを追加。 -- 以前のチェックポイントに簡単に戻れるように、チャットに以前のチェックポイントへのナビゲーションコントロールを追加。 +コミュニティのお知らせを読む: [Roo is back as Zoo](https://www.reddit.com/r/RooCode/comments/1syufn1/roo_is_back_as_zoo/)
🌐 利用可能な言語 @@ -49,7 +45,7 @@ - [简体中文](../zh-CN/README.md) - [繁體中文](../zh-TW/README.md) - ... -
+ --- diff --git a/locales/ko/README.md b/locales/ko/README.md index 6c7e66b7216..43b709d0e38 100644 --- a/locales/ko/README.md +++ b/locales/ko/README.md @@ -13,19 +13,15 @@ > AI로 강화된 너의 개발 팀, 네 에디터 안에 -## v3.53.0의 새로운 기능 +## Roo Code 마지막 업데이트: Zoo Code로 이동 -> ### Roo Code 플러그인은 사라지지 않아요. +> ### Roo가 Zoo Code로 돌아왔어요. > -> Roo Code가 300만 설치를 돌파했고, 원래 팀이 Roomote에 전념하기로 했다는 [최근 발표](https://x.com/mattrubens/status/2046636598859559114)를 보셨을 거예요. 많은 분들께 이 소식이 힘들게 다가왔다는 걸 알고 있어요. 이 플러그인은 저희와 여러분 모두에게 큰 의미가 있고, 여러분의 목소리를 듣고 있어요. +> 이번 Roo Code 마지막 업데이트는 로컬 설정을 커뮤니티가 유지 관리하는 새 Zoo Code 확장으로 옮길 수 있게 도와줘요. > -> 좋은 소식이 있어요: **커뮤니티 팀이 Roo Code를 계속 이어가기로 나섰어요**. 여러분이 의지하는 이 플러그인이 계속 유지 관리되고 개선될 수 있도록, 저희는 그들과 공식적인 인수인계를 진행하고 있어요. +> 마이그레이션하려면 확장 갤러리에서 **Zoo Code**를 `ZooCodeOrganization.zoo-code`로 설치한 다음, 명령 팔레트에서 **Roo Code: Prepare Zoo Migration**을 실행하세요. Roo는 전역 저장소에 설정과 작업 기록이 담긴 복사 기반 핸드오프 번들을 만들고, 기존 Roo 데이터는 그대로 둡니다. 제공자 프로필과 API 키는 명시적으로 포함하기로 선택한 경우에만 포함됩니다. -**이번 릴리스의 새로운 기능:** - -- OpenAI Codex 제공업체를 통해 GPT-5.5 지원을 추가했어요. -- Vertex AI에서 Claude Opus 4.7 지원을 추가했어요. -- 이전 체크포인트로 더 쉽게 돌아갈 수 있도록 채팅에 이전 체크포인트 탐색 컨트롤을 추가했어요. +커뮤니티 발표 읽기: [Roo is back as Zoo](https://www.reddit.com/r/RooCode/comments/1syufn1/roo_is_back_as_zoo/)
🌐 사용 가능한 언어 @@ -49,7 +45,7 @@ - [简体中文](../zh-CN/README.md) - [繁體中文](../zh-TW/README.md) - ... -
+ --- diff --git a/locales/nl/README.md b/locales/nl/README.md index 242bfaade8b..56ee064d8d0 100644 --- a/locales/nl/README.md +++ b/locales/nl/README.md @@ -13,19 +13,15 @@ > Jouw AI-aangedreven dev-team, rechtstreeks in je editor -## Nieuw in v3.53.0 +## Laatste Roo Code-update: overstappen naar Zoo Code -> ### De Roo Code-plugin gaat niet weg. +> ### Roo is terug als Zoo Code. > -> Je hebt misschien de [recente aankondiging](https://x.com/mattrubens/status/2046636598859559114) gezien dat Roo Code 3 miljoen installaties heeft bereikt en het oorspronkelijke team zich volledig richt op Roomote. We weten dat dat nieuws voor velen van jullie moeilijk was. Deze plugin betekent veel voor ons en voor jou, en we horen je. +> Deze laatste Roo Code-update helpt je om je lokale setup naar de nieuwe, door de community onderhouden Zoo Code-extensie te verplaatsen. > -> Het goede nieuws: **een community-team heeft zich aangemeld om Roo Code voort te zetten**, en we werken samen aan een officiële overdracht, zodat de plugin waar je op vertrouwt onderhouden en verbeterd blijft worden. +> Installeer voor de migratie **Zoo Code** vanuit je extensiegalerie als `ZooCodeOrganization.zoo-code` en voer daarna **Roo Code: Prepare Zoo Migration** uit via het opdrachtenpalet. Roo maakt in zijn globale opslag een kopie-gebaseerde handoff-bundel met je instellingen en taakgeschiedenis, terwijl je oorspronkelijke Roo-gegevens ongemoeid blijven. Providerprofielen en API-sleutels worden alleen opgenomen als je daar expliciet voor kiest. -**Wat is er nieuw in deze versie:** - -- GPT-5.5-ondersteuning toegevoegd via de OpenAI Codex-provider. -- Claude Opus 4.7-ondersteuning op Vertex AI toegevoegd. -- Bediening toegevoegd in de chat om terug te navigeren naar eerdere checkpoints, zodat je makkelijker kunt teruggaan door vorige checkpoints. +Lees de community-aankondiging: [Roo is back as Zoo](https://www.reddit.com/r/RooCode/comments/1syufn1/roo_is_back_as_zoo/)
🌐 Beschikbare talen @@ -49,7 +45,7 @@ - [简体中文](../zh-CN/README.md) - [繁體中文](../zh-TW/README.md) - ... -
+ --- diff --git a/locales/pl/README.md b/locales/pl/README.md index 1f389fb9d22..0a19c7b1e13 100644 --- a/locales/pl/README.md +++ b/locales/pl/README.md @@ -13,19 +13,15 @@ > Twój zespół deweloperski zasilany AI — prosto w edytorze -## Nowości w v3.53.0 +## Ostatnia aktualizacja Roo Code: przejdź na Zoo Code -> ### Wtyczka Roo Code nie znika. +> ### Roo wraca jako Zoo Code. > -> Być może widziałeś [niedawne ogłoszenie](https://x.com/mattrubens/status/2046636598859559114), że Roo Code osiągnął 3 miliony instalacji, a oryginalny zespół całkowicie skupia się na Roomote. Wiemy, że ta wiadomość była trudna dla wielu z was. Ta wtyczka wiele dla nas i dla ciebie znaczy, i słyszymy was. +> Ta ostatnia aktualizacja Roo Code pomaga przenieść lokalną konfigurację do nowego rozszerzenia Zoo Code utrzymywanego przez społeczność. > -> Dobra wiadomość: **zespół społeczności zgłosił się, żeby poprowadzić Roo Code dalej**, i pracujemy z nimi nad oficjalnym przekazaniem, żeby wtyczka, na której polegasz, była nadal utrzymywana i ulepszana. +> Aby przeprowadzić migrację, zainstaluj **Zoo Code** z galerii rozszerzeń jako `ZooCodeOrganization.zoo-code`, a następnie uruchom **Roo Code: Prepare Zoo Migration** z palety poleceń. Roo tworzy w swoim globalnym magazynie pakiet handoff oparty na kopii, zawierający twoje ustawienia i historię zadań, bez zmieniania oryginalnych danych Roo. Profile dostawców i klucze API są dołączane tylko wtedy, gdy wyraźnie wybierzesz ich dołączenie. -**Nowości w tej wersji:** - -- Dodano obsługę GPT-5.5 przez dostawcę OpenAI Codex. -- Dodano obsługę Claude Opus 4.7 w Vertex AI. -- Dodano w czacie kontrolki nawigacji do poprzednich checkpointów, żebyś mógł łatwiej cofać się do wcześniejszych checkpointów. +Przeczytaj ogłoszenie społeczności: [Roo is back as Zoo](https://www.reddit.com/r/RooCode/comments/1syufn1/roo_is_back_as_zoo/)
🌐 Dostępne języki @@ -49,7 +45,7 @@ - [简体中文](../zh-CN/README.md) - [繁體中文](../zh-TW/README.md) - ... -
+ --- diff --git a/locales/pt-BR/README.md b/locales/pt-BR/README.md index 95c5de5aaff..e0ebdd45377 100644 --- a/locales/pt-BR/README.md +++ b/locales/pt-BR/README.md @@ -13,19 +13,15 @@ > Seu time de desenvolvimento com IA, direto no seu editor -## Novidades na v3.53.0 +## Atualização final do Roo Code: migre para o Zoo Code -> ### O plugin Roo Code não vai acabar. +> ### Roo voltou como Zoo Code. > -> Você pode ter visto o [anúncio recente](https://x.com/mattrubens/status/2046636598859559114) de que o Roo Code atingiu 3 milhões de instalações e a equipe original está se dedicando totalmente ao Roomote. Sabemos que essa notícia foi difícil para muitos de vocês. Esse plugin significa muito para nós e para você, e ouvimos o que você tem a dizer. +> Esta atualização final do Roo Code ajuda você a mover sua configuração local para a nova extensão Zoo Code mantida pela comunidade. > -> A boa notícia: **um time da comunidade assumiu a tarefa de levar o Roo Code adiante**, e estamos trabalhando com eles em uma transição oficial para que o plugin em que você confia continue recebendo manutenção e melhorias. +> Para migrar, instale **Zoo Code** pela sua galeria de extensões como `ZooCodeOrganization.zoo-code` e depois execute **Roo Code: Prepare Zoo Migration** pela paleta de comandos. O Roo cria um pacote de handoff baseado em cópia no armazenamento global dele com suas configurações e histórico de tarefas, sem alterar seus dados originais do Roo. Perfis de provedores e chaves de API só são incluídos se você escolher explicitamente incluí-los. -**Novidades nesta versão:** - -- Adicionado suporte ao GPT-5.5 através do provedor OpenAI Codex. -- Adicionado suporte ao Claude Opus 4.7 no Vertex AI. -- Adicionados controles de navegação por checkpoints anteriores no chat para você voltar por checkpoints anteriores com mais facilidade. +Leia o anúncio da comunidade: [Roo is back as Zoo](https://www.reddit.com/r/RooCode/comments/1syufn1/roo_is_back_as_zoo/)
🌐 Idiomas disponíveis @@ -49,7 +45,7 @@ - [简体中文](../zh-CN/README.md) - [繁體中文](../zh-TW/README.md) - ... -
+ --- diff --git a/locales/ru/README.md b/locales/ru/README.md index dbfdcf7f64d..0dec9372060 100644 --- a/locales/ru/README.md +++ b/locales/ru/README.md @@ -13,19 +13,15 @@ > Твоя команда разработчиков на ИИ — прямо в редакторе -## Что нового в v3.53.0 +## Финальное обновление Roo Code: переход на Zoo Code -> ### Плагин Roo Code никуда не денется. +> ### Roo возвращается как Zoo Code. > -> Возможно, ты видел [недавнее объявление](https://x.com/mattrubens/status/2046636598859559114) о том, что Roo Code достиг 3 миллионов установок, а оригинальная команда полностью переключается на Roomote. Мы понимаем, что эта новость была непростой для многих из вас. Этот плагин много значит для нас и для тебя, и мы тебя слышим. +> Это финальное обновление Roo Code помогает перенести локальную настройку в новое расширение Zoo Code, поддерживаемое сообществом. > -> Хорошая новость: **команда сообщества взяла на себя задачу продолжать развивать Roo Code**, и мы работаем с ними над официальной передачей, чтобы плагин, на который ты полагаешься, продолжал получать поддержку и улучшения. +> Для миграции установите **Zoo Code** из вашей галереи расширений как `ZooCodeOrganization.zoo-code`, затем запустите **Roo Code: Prepare Zoo Migration** из палитры команд. Roo создаст в своем глобальном хранилище копируемый пакет handoff с вашими настройками и историей задач, не изменяя исходные данные Roo. Профили провайдеров и API-ключи включаются только если вы явно выберете их включение. -**Что нового в этом релизе:** - -- Добавлена поддержка GPT-5.5 через провайдер OpenAI Codex. -- Добавлена поддержка Claude Opus 4.7 в Vertex AI. -- В чат добавлены элементы управления навигацией по предыдущим контрольным точкам, чтобы ты мог легче переходить назад через ранее созданные контрольные точки. +Прочитайте объявление сообщества: [Roo is back as Zoo](https://www.reddit.com/r/RooCode/comments/1syufn1/roo_is_back_as_zoo/)
🌐 Доступные языки @@ -49,7 +45,7 @@ - [简体中文](../zh-CN/README.md) - [繁體中文](../zh-TW/README.md) - ... -
+ --- diff --git a/locales/tr/README.md b/locales/tr/README.md index 3b662b3b9a1..c4bae664a27 100644 --- a/locales/tr/README.md +++ b/locales/tr/README.md @@ -13,19 +13,15 @@ > AI destekli dev ekibin, doğrudan editörünün içinde -## v3.53.0'daki Yenilikler +## Son Roo Code Güncellemesi: Zoo Code'a geç -> ### Roo Code eklentisi bir yere gitmiyor. +> ### Roo, Zoo Code olarak geri döndü. > -> Roo Code'un 3 milyon kuruluma ulaştığı ve orijinal ekibin tüm enerjisini Roomote'a verdiği [son duyuruyu](https://x.com/mattrubens/status/2046636598859559114) görmüş olabilirsin. Bu haberin birçoğunuz için zor olduğunu biliyoruz. Bu eklenti bizim ve senin için çok şey ifade ediyor ve seni duyuyoruz. +> Bu son Roo Code güncellemesi, yerel kurulumunu topluluk tarafından sürdürülen yeni Zoo Code eklentisine taşımanı sağlar. > -> İyi haber: **bir topluluk ekibi Roo Code'u ileriye taşımak için öne çıktı**, ve güvendiğin eklentinin bakımı ve geliştirilmesinin sürmesi için onlarla resmi bir devir çalışması yürütüyoruz. +> Geçiş yapmak için **Zoo Code**'u eklenti galerinden `ZooCodeOrganization.zoo-code` olarak yükle, ardından komut paletinden **Roo Code: Prepare Zoo Migration** komutunu çalıştır. Roo, global depolamasında ayarların ve görev geçmişinle kopya tabanlı bir handoff paketi oluşturur; orijinal Roo verilerine dokunmaz. Sağlayıcı profilleri ve API anahtarları yalnızca açıkça dahil etmeyi seçersen dahil edilir. -**Bu sürümdeki yenilikler:** - -- OpenAI Codex sağlayıcısı üzerinden GPT-5.5 desteği eklendi. -- Vertex AI'da Claude Opus 4.7 desteği eklendi. -- Önceki checkpoint'ler arasında daha kolay geri adım atabilmen için sohbete önceki checkpoint navigasyon kontrolleri eklendi. +Topluluk duyurusunu oku: [Roo is back as Zoo](https://www.reddit.com/r/RooCode/comments/1syufn1/roo_is_back_as_zoo/)
🌐 Mevcut diller @@ -49,7 +45,7 @@ - [简体中文](../zh-CN/README.md) - [繁體中文](../zh-TW/README.md) - ... -
+ --- diff --git a/locales/vi/README.md b/locales/vi/README.md index 60dbbb99e04..0c41b375df9 100644 --- a/locales/vi/README.md +++ b/locales/vi/README.md @@ -13,19 +13,15 @@ > Đội ngũ dev dùng AI của bạn, ngay trong trình chỉnh sửa -## Điểm mới trong v3.53.0 +## Bản cập nhật cuối của Roo Code: chuyển sang Zoo Code -> ### Plugin Roo Code sẽ không biến mất. +> ### Roo trở lại dưới tên Zoo Code. > -> Bạn có thể đã thấy [thông báo gần đây](https://x.com/mattrubens/status/2046636598859559114) rằng Roo Code đã đạt 3 triệu lượt cài đặt và đội ngũ ban đầu đang dồn toàn lực cho Roomote. Chúng tôi biết rằng tin này thật khó khăn với nhiều bạn. Plugin này có ý nghĩa rất lớn với chúng tôi và với bạn, và chúng tôi lắng nghe bạn. +> Bản cập nhật cuối này của Roo Code giúp bạn chuyển thiết lập cục bộ sang tiện ích Zoo Code mới do cộng đồng duy trì. > -> Tin tốt: **một đội ngũ từ cộng đồng đã đứng ra tiếp tục đưa Roo Code đi tiếp**, và chúng tôi đang làm việc với họ về việc bàn giao chính thức để plugin mà bạn đang tin cậy tiếp tục được bảo trì và cải thiện. +> Để di chuyển, hãy cài đặt **Zoo Code** từ thư viện tiện ích của bạn với mã `ZooCodeOrganization.zoo-code`, rồi chạy **Roo Code: Prepare Zoo Migration** từ command palette. Roo tạo một handoff bundle dạng sao chép trong global storage của Roo, bao gồm cài đặt và lịch sử tác vụ của bạn, đồng thời giữ nguyên dữ liệu Roo gốc. Hồ sơ nhà cung cấp và khóa API chỉ được bao gồm nếu bạn chủ động chọn đưa chúng vào. -**Điểm mới trong bản phát hành này:** - -- Thêm hỗ trợ GPT-5.5 thông qua nhà cung cấp OpenAI Codex. -- Thêm hỗ trợ Claude Opus 4.7 trên Vertex AI. -- Thêm các điều khiển điều hướng checkpoint trước đó trong chat để bạn có thể quay lại các checkpoint trước dễ dàng hơn. +Đọc thông báo từ cộng đồng: [Roo is back as Zoo](https://www.reddit.com/r/RooCode/comments/1syufn1/roo_is_back_as_zoo/)
🌐 Các ngôn ngữ có sẵn @@ -49,7 +45,7 @@ - [简体中文](../zh-CN/README.md) - [繁體中文](../zh-TW/README.md) - ... -
+ --- diff --git a/locales/zh-CN/README.md b/locales/zh-CN/README.md index 7d7c9741205..00781546ce4 100644 --- a/locales/zh-CN/README.md +++ b/locales/zh-CN/README.md @@ -13,19 +13,15 @@ > 你的 AI 驱动开发团队,就在你的编辑器里 -## v3.53.0 新增内容 +## Roo Code 最终更新:迁移到 Zoo Code -> ### Roo Code 插件不会消失。 +> ### Roo 以 Zoo Code 的形式回来了。 > -> 你可能已经看到[最近的公告](https://x.com/mattrubens/status/2046636598859559114):Roo Code 已突破 300 万次安装,原团队正全力投入 Roomote。我们知道这个消息让许多人感到难受。这个插件对我们和你都意义重大,你的心声我们听到了。 +> 这次 Roo Code 的最终更新会帮助你把本地设置迁移到由社区维护的新 Zoo Code 扩展。 > -> 好消息是:**一支社区团队已挺身而出,继续推进 Roo Code**,我们正与他们协作进行正式交接,让你所依赖的插件继续得到维护和改进。 +> 要迁移,请从你的扩展图库安装 **Zoo Code**,扩展 ID 为 `ZooCodeOrganization.zoo-code`,然后从命令面板运行 **Roo Code: Prepare Zoo Migration**。Roo 会在其全局存储中创建一个基于复制的交接包,包含你的设置和任务历史,同时保留原始 Roo 数据不变。只有在你明确选择包含时,才会包含提供商配置文件和 API 密钥。 -**本次发布的新增内容:** - -- 通过 OpenAI Codex 提供商新增对 GPT-5.5 的支持。 -- 在 Vertex AI 上新增对 Claude Opus 4.7 的支持。 -- 在聊天中新增了上一存档点导航控件,让你可以更轻松地回退到此前的存档点。 +阅读社区公告:[Roo is back as Zoo](https://www.reddit.com/r/RooCode/comments/1syufn1/roo_is_back_as_zoo/)
🌐 可用语言 @@ -49,7 +45,7 @@ - [简体中文](../zh-CN/README.md) - [繁體中文](../zh-TW/README.md) - ... -
+ --- diff --git a/locales/zh-TW/README.md b/locales/zh-TW/README.md index 659e515bff4..74a0e7d2a42 100644 --- a/locales/zh-TW/README.md +++ b/locales/zh-TW/README.md @@ -13,19 +13,15 @@ > 您的 AI 驅動開發團隊,就在您的編輯器中 -## v3.53.0 新功能 +## Roo Code 最終更新:遷移到 Zoo Code -> ### Roo Code 外掛不會消失。 +> ### Roo 以 Zoo Code 的形式回來了。 > -> 你可能已經看到[最近的公告](https://x.com/mattrubens/status/2046636598859559114):Roo Code 已突破 300 萬次安裝,原團隊將全心投入 Roomote。我們知道這個消息讓許多人感到難受。這個外掛對我們和你都意義重大,你的心聲我們聽到了。 +> 這次 Roo Code 的最終更新會協助你把本機設定遷移到由社群維護的新 Zoo Code 擴充功能。 > -> 好消息是:**一支社群團隊已挺身而出,繼續推進 Roo Code**,我們正與他們協作進行正式交接,讓你所仰賴的外掛持續受到維護與改進。 +> 若要遷移,請從你的擴充功能圖庫安裝 **Zoo Code**,擴充功能 ID 為 `ZooCodeOrganization.zoo-code`,然後從命令選擇區執行 **Roo Code: Prepare Zoo Migration**。Roo 會在其全域儲存空間中建立以複製為基礎的交接包,包含你的設定和任務歷史,同時保留原始 Roo 資料不變。只有在你明確選擇包含時,才會包含供應商設定檔和 API 金鑰。 -**此版本新增內容:** - -- 透過 OpenAI Codex 供應商新增對 GPT-5.5 的支援。 -- 在 Vertex AI 上新增對 Claude Opus 4.7 的支援。 -- 在聊天中新增了前一個存檔點導覽控制項,讓你可以更輕鬆地回到此前的存檔點。 +閱讀社群公告:[Roo is back as Zoo](https://www.reddit.com/r/RooCode/comments/1syufn1/roo_is_back_as_zoo/)
🌐 支援語言 @@ -49,7 +45,7 @@ - [简体中文](../zh-CN/README.md) - [繁體中文](../zh-TW/README.md) - ... -
+ --- diff --git a/packages/types/src/vscode-extension-host.ts b/packages/types/src/vscode-extension-host.ts index b20539afe49..6264371b461 100644 --- a/packages/types/src/vscode-extension-host.ts +++ b/packages/types/src/vscode-extension-host.ts @@ -427,6 +427,8 @@ export interface WebviewMessage { | "terminalOperation" | "clearTask" | "didShowAnnouncement" + | "prepareZooMigration" + | "installZooExtension" | "selectImages" | "exportCurrentTask" | "shareCurrentTask" diff --git a/packages/types/src/vscode.ts b/packages/types/src/vscode.ts index fd28f2e9945..d38569e8f14 100644 --- a/packages/types/src/vscode.ts +++ b/packages/types/src/vscode.ts @@ -42,6 +42,7 @@ export const commandIds = [ "setCustomStoragePath", "importSettings", + "prepareZooMigration", "focusInput", "acceptInput", diff --git a/src/__mocks__/fs/promises.ts b/src/__mocks__/fs/promises.ts index daed479d4a3..22aeef7a91a 100644 --- a/src/__mocks__/fs/promises.ts +++ b/src/__mocks__/fs/promises.ts @@ -150,6 +150,68 @@ const mockFs = { throw error }), + rm: vi.fn().mockImplementation(async (targetPath: string, options?: { recursive?: boolean; force?: boolean }) => { + if (mockFiles.has(targetPath)) { + mockFiles.delete(targetPath) + return Promise.resolve() + } + + if (mockDirectories.has(targetPath)) { + for (const filePath of Array.from(mockFiles.keys())) { + if (filePath.startsWith(`${targetPath}/`)) { + mockFiles.delete(filePath) + } + } + for (const dirPath of Array.from(mockDirectories.values()) as string[]) { + if (dirPath === targetPath || dirPath.startsWith(`${targetPath}/`)) { + mockDirectories.delete(dirPath) + } + } + return Promise.resolve() + } + + if (options?.force) { + return Promise.resolve() + } + + const error = new Error(`ENOENT: no such file or directory, rm '${targetPath}'`) + ;(error as any).code = "ENOENT" + throw error + }), + + cp: vi.fn().mockImplementation(async (sourcePath: string, destinationPath: string) => { + if (mockFiles.has(sourcePath)) { + const parentDir = destinationPath.split("/").slice(0, -1).join("/") + ensureDirectoryExists(parentDir) + mockFiles.set(destinationPath, mockFiles.get(sourcePath)) + return Promise.resolve() + } + + if (mockDirectories.has(sourcePath)) { + ensureDirectoryExists(destinationPath) + for (const dirPath of Array.from(mockDirectories.values()) as string[]) { + if (dirPath.startsWith(`${sourcePath}/`)) { + ensureDirectoryExists(destinationPath + dirPath.slice(sourcePath.length)) + } + } + for (const [filePath, content] of Array.from(mockFiles.entries())) { + if (filePath.startsWith(`${sourcePath}/`)) { + const copiedPath = destinationPath + filePath.slice(sourcePath.length) + const parentDir = copiedPath.split("/").slice(0, -1).join("/") + ensureDirectoryExists(parentDir) + mockFiles.set(copiedPath, content) + } + } + return Promise.resolve() + } + + const error = new Error(`ENOENT: no such file or directory, cp '${sourcePath}'`) + ;(error as any).code = "ENOENT" + throw error + }), + + chmod: vi.fn().mockResolvedValue(undefined), + constants: require("fs").constants, // Expose mock data for test assertions diff --git a/src/activate/registerCommands.ts b/src/activate/registerCommands.ts index f02ee8309a3..6b0caf2f1e2 100644 --- a/src/activate/registerCommands.ts +++ b/src/activate/registerCommands.ts @@ -13,6 +13,7 @@ import { handleNewTask } from "./handleTask" import { CodeIndexManager } from "../services/code-index/manager" import { importSettingsWithFeedback } from "../core/config/importExport" import { MdmService } from "../services/mdm/MdmService" +import { createZooMigrationHandoff, promptAndCreateZooMigrationHandoff } from "../services/zoo-migration/ZooMigration" import { t } from "../i18n" /** @@ -155,6 +156,30 @@ const getCommandsMap = ({ context, outputChannel, provider }: RegisterCommandOpt filePath, ) }, + prepareZooMigration: async (options?: { skipPrompt?: boolean; includeSecrets?: boolean }) => { + try { + const migrationOptions = { + context, + contextProxy: provider.contextProxy, + providerSettingsManager: provider.providerSettingsManager, + outputChannel, + } + + if (options?.skipPrompt) { + return await createZooMigrationHandoff({ + ...migrationOptions, + includeSecrets: options.includeSecrets ?? false, + }) + } + + return await promptAndCreateZooMigrationHandoff(migrationOptions) + } catch (error) { + const message = error instanceof Error ? error.message : String(error) + outputChannel.appendLine(`[Zoo Migration] Failed to prepare migration handoff: ${message}`) + await vscode.window.showErrorMessage(t("common:zooMigration.handoffFailed", { error: message })) + return undefined + } + }, focusInput: async () => { try { await focusPanel(tabPanel, sidebarPanel) diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 1106d340050..cf9b6f901a1 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -169,7 +169,7 @@ export class ClineProvider public isViewLaunched = false public settingsImportedAt?: number - public readonly latestAnnouncementId = "apr-2026-v3.53.0-community-handoff-gpt55-opus47" // v3.53.0 Community handoff, GPT-5.5, Claude Opus 4.7, checkpoint navigation + public readonly latestAnnouncementId = "may-2026-v3.53.1-zoo-migration-handoff" // v3.53.1 Zoo migration handoff public readonly providerSettingsManager: ProviderSettingsManager public readonly customModesManager: CustomModesManager diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index e3b8c1bea88..f7e48b7f74a 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -54,6 +54,10 @@ import { openImage, saveImage } from "../../integrations/misc/image-handler" import { selectImages } from "../../integrations/misc/process-images" import { getTheme } from "../../integrations/theme/getTheme" import { searchWorkspaceFiles } from "../../services/search/file-search" +import { + installOrShowZooExtension, + promptAndCreateZooMigrationHandoff, +} from "../../services/zoo-migration/ZooMigration" import { fileExistsAtPath } from "../../utils/fs" import { playTts, setTtsEnabled, setTtsSpeed, stopTts } from "../../utils/tts" import { searchCommits } from "../../utils/git" @@ -766,6 +770,22 @@ export const webviewMessageHandler = async ( await updateGlobalState("lastShownAnnouncementId", provider.latestAnnouncementId) await provider.postStateToWebview() break + case "prepareZooMigration": + try { + await promptAndCreateZooMigrationHandoff({ + context: provider.context, + contextProxy: provider.contextProxy, + providerSettingsManager: provider.providerSettingsManager, + }) + } catch (error) { + const message = error instanceof Error ? error.message : String(error) + provider.log(`[Zoo Migration] Failed to prepare migration handoff from announcement: ${message}`) + await vscode.window.showErrorMessage(t("common:zooMigration.handoffFailed", { error: message })) + } + break + case "installZooExtension": + await installOrShowZooExtension() + break case "selectImages": const images = await selectImages() await provider.postMessageToWebview({ diff --git a/src/extension.ts b/src/extension.ts index 19c0d70585a..d24c4ed5e93 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -39,6 +39,7 @@ import { MdmService } from "./services/mdm/MdmService" import { migrateSettings } from "./utils/migrateSettings" import { autoImportSettings } from "./utils/autoImportSettings" import { API } from "./extension/api" +import { showZooMigrationNotice } from "./services/zoo-migration/ZooMigration" import { handleUri, @@ -317,6 +318,12 @@ export async function activate(context: vscode.ExtensionContext) { registerCommands({ context, outputChannel, provider }) + void showZooMigrationNotice(context, { outputChannel }).catch((error) => { + outputChannel.appendLine( + `[Zoo Migration] Failed to show migration notice: ${error instanceof Error ? error.message : String(error)}`, + ) + }) + /** * We use the text document content provider API to show the left side for diff * view by creating a virtual document for the original content. This makes it diff --git a/src/i18n/locales/ca/common.json b/src/i18n/locales/ca/common.json index 33188fce193..9723ea5d568 100644 --- a/src/i18n/locales/ca/common.json +++ b/src/i18n/locales/ca/common.json @@ -23,6 +23,22 @@ "delete_config_profile": "Estàs segur que vols eliminar aquest perfil de configuració?", "delete_custom_mode_with_rules": "Esteu segur que voleu suprimir aquest mode {scope}?\n\nAixò també suprimirà la carpeta de regles associada a:\n{rulesFolderPath}" }, + "zooMigration": { + "actions": { + "installZoo": "Instal·la Zoo", + "prepareMigration": "Prepara la migració", + "learnMore": "Més informació", + "later": "Més tard", + "includeApiKeys": "Inclou les claus d'API", + "skipApiKeys": "Omet les claus d'API", + "cancel": "Cancel·la" + }, + "notice": "Roo Code està passant a Zoo Code. Pots preparar un paquet de migració basat en còpia per a Zoo sense eliminar les teves dades de Roo.", + "installUnavailable": "Zoo Code està disponible com a ZooCodeOrganization.zoo-code. La instal·lació automàtica no s'ha completat, així que s'ha obert la vista Extensions perquè el puguis instal·lar des de la galeria d'extensions configurada.", + "preparePrompt": "Vols preparar un paquet de migració local de Zoo Code? Si inclous les claus d'API, els secrets del proveïdor s'escriuran en un fitxer local perquè Zoo els pugui importar i després eliminar el paquet.", + "handoffPrepared": "Paquet de migració de Zoo Code preparat a {{path}}. Instal·la Zoo Code i importa des d'aquest paquet.", + "handoffFailed": "No s'ha pogut preparar el paquet de migració de Zoo Code: {{error}}" + }, "errors": { "invalid_data_uri": "Format d'URI de dades no vàlid", "error_copying_image": "Error copiant la imatge: {{errorMessage}}", diff --git a/src/i18n/locales/de/common.json b/src/i18n/locales/de/common.json index 861d9da5768..85a1a18ec82 100644 --- a/src/i18n/locales/de/common.json +++ b/src/i18n/locales/de/common.json @@ -19,6 +19,22 @@ "delete_config_profile": "Möchtest du dieses Konfigurationsprofil wirklich löschen?", "delete_custom_mode_with_rules": "Bist du sicher, dass du diesen {scope}-Modus löschen möchtest?\n\nDadurch wird auch der zugehörige Regelordner unter folgender Adresse gelöscht:\n{rulesFolderPath}" }, + "zooMigration": { + "actions": { + "installZoo": "Zoo Installieren", + "prepareMigration": "Migration Vorbereiten", + "learnMore": "Mehr Erfahren", + "later": "Später", + "includeApiKeys": "API-Schlüssel Einschließen", + "skipApiKeys": "API-Schlüssel Überspringen", + "cancel": "Abbrechen" + }, + "notice": "Roo Code wechselt zu Zoo Code. Du kannst eine kopierbasierte Migrationsübergabe für Zoo vorbereiten, ohne deine Roo-Daten zu löschen.", + "installUnavailable": "Zoo Code ist als ZooCodeOrganization.zoo-code verfügbar. Die automatische Installation wurde nicht abgeschlossen, deshalb wurde die Erweiterungsansicht geöffnet, damit du es aus deiner konfigurierten Erweiterungsgalerie installieren kannst.", + "preparePrompt": "Lokale Zoo Code-Migrationsübergabe vorbereiten? Wenn du API-Schlüssel einschließt, werden Provider-Secrets in eine lokale Datei geschrieben, damit Zoo sie importieren und die Übergabe danach löschen kann.", + "handoffPrepared": "Zoo Code-Migrationsübergabe unter {{path}} vorbereitet. Installiere Zoo Code und importiere aus dieser Übergabe.", + "handoffFailed": "Zoo Code-Migrationsübergabe konnte nicht vorbereitet werden: {{error}}" + }, "errors": { "invalid_data_uri": "Ungültiges Daten-URI-Format", "error_copying_image": "Fehler beim Kopieren des Bildes: {{errorMessage}}", diff --git a/src/i18n/locales/en/common.json b/src/i18n/locales/en/common.json index d65fe183679..a418b5ff6d0 100644 --- a/src/i18n/locales/en/common.json +++ b/src/i18n/locales/en/common.json @@ -19,6 +19,22 @@ "delete_config_profile": "Are you sure you want to delete this configuration profile?", "delete_custom_mode_with_rules": "Are you sure you want to delete this {scope} mode?\n\nThis will also delete the associated rules folder at:\n{rulesFolderPath}" }, + "zooMigration": { + "actions": { + "installZoo": "Install Zoo", + "prepareMigration": "Prepare Migration", + "learnMore": "Learn More", + "later": "Later", + "includeApiKeys": "Include API keys", + "skipApiKeys": "Skip API keys", + "cancel": "Cancel" + }, + "notice": "Roo Code is transitioning to Zoo Code. You can prepare a copy-based migration handoff for Zoo without deleting your Roo data.", + "installUnavailable": "Zoo Code is available as ZooCodeOrganization.zoo-code. Automatic install did not complete, so the Extensions view has been opened so you can install it from your configured extension gallery.", + "preparePrompt": "Prepare a local Zoo Code migration handoff? Including API keys writes provider secrets to a local file so Zoo can import them, then delete the handoff after import.", + "handoffPrepared": "Zoo Code migration handoff prepared at {{path}}. Install Zoo Code and import from this handoff.", + "handoffFailed": "Failed to prepare Zoo Code migration handoff: {{error}}" + }, "errors": { "invalid_data_uri": "Invalid data URI format", "error_copying_image": "Error copying image: {{errorMessage}}", diff --git a/src/i18n/locales/es/common.json b/src/i18n/locales/es/common.json index 82be83956b0..3e5b44e4c71 100644 --- a/src/i18n/locales/es/common.json +++ b/src/i18n/locales/es/common.json @@ -19,6 +19,22 @@ "delete_config_profile": "¿Estás seguro de que deseas eliminar este perfil de configuración?", "delete_custom_mode_with_rules": "¿Estás seguro de que quieres eliminar este modo {scope}?\n\nEsto también eliminará la carpeta de reglas asociada en:\n{rulesFolderPath}" }, + "zooMigration": { + "actions": { + "installZoo": "Instalar Zoo", + "prepareMigration": "Preparar Migración", + "learnMore": "Más Información", + "later": "Más Tarde", + "includeApiKeys": "Incluir claves de API", + "skipApiKeys": "Omitir claves de API", + "cancel": "Cancelar" + }, + "notice": "Roo Code está pasando a Zoo Code. Puedes preparar una entrega de migración basada en copia para Zoo sin eliminar tus datos de Roo.", + "installUnavailable": "Zoo Code está disponible como ZooCodeOrganization.zoo-code. La instalación automática no se completó, así que se abrió la vista de Extensiones para que puedas instalarlo desde tu galería de extensiones configurada.", + "preparePrompt": "¿Preparar una entrega local de migración a Zoo Code? Si incluyes claves de API, los secrets del proveedor se escribirán en un archivo local para que Zoo pueda importarlos y luego eliminar la entrega.", + "handoffPrepared": "Entrega de migración a Zoo Code preparada en {{path}}. Instala Zoo Code e importa desde esta entrega.", + "handoffFailed": "No se pudo preparar la entrega de migración a Zoo Code: {{error}}" + }, "errors": { "invalid_data_uri": "Formato de URI de datos no válido", "error_copying_image": "Error copiando la imagen: {{errorMessage}}", diff --git a/src/i18n/locales/fr/common.json b/src/i18n/locales/fr/common.json index 6fc05ff94a3..97f0c0bc8c1 100644 --- a/src/i18n/locales/fr/common.json +++ b/src/i18n/locales/fr/common.json @@ -19,6 +19,22 @@ "delete_config_profile": "Êtes-vous sûr de vouloir supprimer ce profil de configuration ?", "delete_custom_mode_with_rules": "Êtes-vous sûr de vouloir supprimer ce mode {scope} ?\n\nCela supprimera également le dossier de règles associé à l'adresse :\n{rulesFolderPath}" }, + "zooMigration": { + "actions": { + "installZoo": "Installer Zoo", + "prepareMigration": "Préparer la Migration", + "learnMore": "En Savoir Plus", + "later": "Plus Tard", + "includeApiKeys": "Inclure les clés API", + "skipApiKeys": "Ignorer les clés API", + "cancel": "Annuler" + }, + "notice": "Roo Code passe à Zoo Code. Tu peux préparer un transfert de migration par copie pour Zoo sans supprimer tes données Roo.", + "installUnavailable": "Zoo Code est disponible sous l'id ZooCodeOrganization.zoo-code. L'installation automatique ne s'est pas terminée, donc la vue Extensions a été ouverte pour que tu puisses l'installer depuis ta galerie d'extensions configurée.", + "preparePrompt": "Préparer un transfert local de migration Zoo Code ? Inclure les clés API écrit les secrets du fournisseur dans un fichier local afin que Zoo puisse les importer, puis supprimer le transfert après import.", + "handoffPrepared": "Transfert de migration Zoo Code préparé dans {{path}}. Installe Zoo Code et importe depuis ce transfert.", + "handoffFailed": "Échec de la préparation du transfert de migration Zoo Code : {{error}}" + }, "errors": { "invalid_data_uri": "Format d'URI de données invalide", "error_copying_image": "Erreur lors de la copie de l'image : {{errorMessage}}", diff --git a/src/i18n/locales/hi/common.json b/src/i18n/locales/hi/common.json index 528ed6d45f5..af6449e00c4 100644 --- a/src/i18n/locales/hi/common.json +++ b/src/i18n/locales/hi/common.json @@ -19,6 +19,22 @@ "delete_config_profile": "क्या आप वाकई इस कॉन्फ़िगरेशन प्रोफ़ाइल को हटाना चाहते हैं?", "delete_custom_mode_with_rules": "क्या आप वाकई इस {scope} मोड को हटाना चाहते हैं?\n\nयह संबंधित नियम फ़ोल्डर को भी यहाँ हटा देगा:\n{rulesFolderPath}" }, + "zooMigration": { + "actions": { + "installZoo": "Zoo इंस्टॉल करें", + "prepareMigration": "माइग्रेशन तैयार करें", + "learnMore": "और जानें", + "later": "बाद में", + "includeApiKeys": "API कुंजियां शामिल करें", + "skipApiKeys": "API कुंजियां छोड़ें", + "cancel": "रद्द करें" + }, + "notice": "Roo Code, Zoo Code में बदल रहा है। आप Roo डेटा हटाए बिना Zoo के लिए कॉपी-आधारित माइग्रेशन हैंडऑफ तैयार कर सकते हैं।", + "installUnavailable": "Zoo Code, ZooCodeOrganization.zoo-code के रूप में उपलब्ध है। स्वचालित इंस्टॉल पूरा नहीं हुआ, इसलिए Extensions दृश्य खोला गया है ताकि आप इसे अपनी कॉन्फ़िगर की गई एक्सटेंशन गैलरी से इंस्टॉल कर सकें।", + "preparePrompt": "स्थानीय Zoo Code माइग्रेशन हैंडऑफ तैयार करें? API कुंजियां शामिल करने से प्रदाता secrets एक स्थानीय फ़ाइल में लिखे जाएंगे ताकि Zoo उन्हें आयात कर सके और फिर आयात के बाद हैंडऑफ हटा सके।", + "handoffPrepared": "Zoo Code माइग्रेशन हैंडऑफ {{path}} पर तैयार है। Zoo Code इंस्टॉल करें और इस हैंडऑफ से आयात करें।", + "handoffFailed": "Zoo Code माइग्रेशन हैंडऑफ तैयार करने में विफल: {{error}}" + }, "errors": { "invalid_data_uri": "अमान्य डेटा URI फॉर्मेट", "error_copying_image": "छवि कॉपी करने में त्रुटि: {{errorMessage}}", diff --git a/src/i18n/locales/id/common.json b/src/i18n/locales/id/common.json index cb1c3231fb8..8a5a0976a91 100644 --- a/src/i18n/locales/id/common.json +++ b/src/i18n/locales/id/common.json @@ -19,6 +19,22 @@ "delete_config_profile": "Apakah kamu yakin ingin menghapus profil konfigurasi ini?", "delete_custom_mode_with_rules": "Anda yakin ingin menghapus mode {scope} ini?\n\nIni juga akan menghapus folder aturan terkait di:\n{rulesFolderPath}" }, + "zooMigration": { + "actions": { + "installZoo": "Instal Zoo", + "prepareMigration": "Siapkan Migrasi", + "learnMore": "Pelajari Selengkapnya", + "later": "Nanti", + "includeApiKeys": "Sertakan kunci API", + "skipApiKeys": "Lewati kunci API", + "cancel": "Batal" + }, + "notice": "Roo Code sedang beralih ke Zoo Code. Kamu bisa menyiapkan handoff migrasi berbasis salinan untuk Zoo tanpa menghapus data Roo-mu.", + "installUnavailable": "Zoo Code tersedia sebagai ZooCodeOrganization.zoo-code. Instal otomatis tidak selesai, jadi tampilan Extensions telah dibuka agar kamu bisa menginstalnya dari galeri ekstensi yang dikonfigurasi.", + "preparePrompt": "Siapkan handoff migrasi Zoo Code lokal? Menyertakan kunci API akan menulis secret penyedia ke file lokal agar Zoo bisa mengimpornya, lalu menghapus handoff setelah impor.", + "handoffPrepared": "Handoff migrasi Zoo Code disiapkan di {{path}}. Instal Zoo Code dan impor dari handoff ini.", + "handoffFailed": "Gagal menyiapkan handoff migrasi Zoo Code: {{error}}" + }, "errors": { "invalid_data_uri": "Format data URI tidak valid", "error_copying_image": "Error menyalin gambar: {{errorMessage}}", diff --git a/src/i18n/locales/it/common.json b/src/i18n/locales/it/common.json index b4e522cb732..175d3cc869a 100644 --- a/src/i18n/locales/it/common.json +++ b/src/i18n/locales/it/common.json @@ -19,6 +19,22 @@ "delete_config_profile": "Sei sicuro di voler eliminare questo profilo di configurazione?", "delete_custom_mode_with_rules": "Sei sicuro di voler eliminare questa modalità {scope}?\n\nQuesto eliminerà anche la cartella delle regole associata in:\n{rulesFolderPath}" }, + "zooMigration": { + "actions": { + "installZoo": "Installa Zoo", + "prepareMigration": "Prepara Migrazione", + "learnMore": "Scopri di Più", + "later": "Più Tardi", + "includeApiKeys": "Includi chiavi API", + "skipApiKeys": "Salta chiavi API", + "cancel": "Annulla" + }, + "notice": "Roo Code sta passando a Zoo Code. Puoi preparare un handoff di migrazione basato su copia per Zoo senza eliminare i tuoi dati Roo.", + "installUnavailable": "Zoo Code è disponibile come ZooCodeOrganization.zoo-code. L'installazione automatica non è stata completata, quindi la vista Estensioni è stata aperta per permetterti di installarlo dalla galleria estensioni configurata.", + "preparePrompt": "Preparare un handoff locale di migrazione Zoo Code? Includere le chiavi API scrive i secret dei provider in un file locale, così Zoo può importarli e poi eliminare l'handoff dopo l'importazione.", + "handoffPrepared": "Handoff di migrazione Zoo Code preparato in {{path}}. Installa Zoo Code e importa da questo handoff.", + "handoffFailed": "Impossibile preparare l'handoff di migrazione Zoo Code: {{error}}" + }, "errors": { "invalid_data_uri": "Formato URI dati non valido", "error_copying_image": "Errore durante la copia dell'immagine: {{errorMessage}}", diff --git a/src/i18n/locales/ja/common.json b/src/i18n/locales/ja/common.json index 7b63b6f7298..f7df0d053e9 100644 --- a/src/i18n/locales/ja/common.json +++ b/src/i18n/locales/ja/common.json @@ -19,6 +19,22 @@ "delete_config_profile": "この設定プロファイルを削除してもよろしいですか?", "delete_custom_mode_with_rules": "この{scope}モードを削除してもよろしいですか?\n\nこれにより、関連するルールフォルダも次の場所で削除されます:\n{rulesFolderPath}" }, + "zooMigration": { + "actions": { + "installZoo": "Zoo をインストール", + "prepareMigration": "移行を準備", + "learnMore": "詳しく見る", + "later": "後で", + "includeApiKeys": "API キーを含める", + "skipApiKeys": "API キーをスキップ", + "cancel": "キャンセル" + }, + "notice": "Roo Code は Zoo Code へ移行しています。Roo のデータを削除せずに、Zoo 用のコピー方式の移行ハンドオフを準備できます。", + "installUnavailable": "Zoo Code は ZooCodeOrganization.zoo-code として利用できます。自動インストールが完了しなかったため、設定済みの拡張機能ギャラリーからインストールできるように Extensions ビューを開きました。", + "preparePrompt": "ローカルの Zoo Code 移行ハンドオフを準備しますか?API キーを含めると、Zoo がインポートできるようにプロバイダーの secret がローカルファイルに書き込まれ、インポート後にハンドオフを削除できます。", + "handoffPrepared": "Zoo Code 移行ハンドオフを {{path}} に準備しました。Zoo Code をインストールして、このハンドオフからインポートしてください。", + "handoffFailed": "Zoo Code 移行ハンドオフの準備に失敗しました: {{error}}" + }, "errors": { "invalid_data_uri": "データURIフォーマットが無効です", "error_copying_image": "画像のコピー中にエラーが発生しました:{{errorMessage}}", diff --git a/src/i18n/locales/ko/common.json b/src/i18n/locales/ko/common.json index fbde3225bb1..d0d00f1723e 100644 --- a/src/i18n/locales/ko/common.json +++ b/src/i18n/locales/ko/common.json @@ -19,6 +19,22 @@ "delete_config_profile": "이 구성 프로필을 삭제하시겠습니까?", "delete_custom_mode_with_rules": "이 {scope} 모드를 삭제하시겠습니까?\n\n이렇게 하면 연결된 규칙 폴더도 다음 위치에서 삭제됩니다:\n{rulesFolderPath}" }, + "zooMigration": { + "actions": { + "installZoo": "Zoo 설치", + "prepareMigration": "마이그레이션 준비", + "learnMore": "자세히 보기", + "later": "나중에", + "includeApiKeys": "API 키 포함", + "skipApiKeys": "API 키 건너뛰기", + "cancel": "취소" + }, + "notice": "Roo Code가 Zoo Code로 전환됩니다. Roo 데이터를 삭제하지 않고 Zoo용 복사 기반 마이그레이션 핸드오프를 준비할 수 있습니다.", + "installUnavailable": "Zoo Code는 ZooCodeOrganization.zoo-code로 제공됩니다. 자동 설치가 완료되지 않아, 구성된 확장 갤러리에서 설치할 수 있도록 Extensions 보기를 열었습니다.", + "preparePrompt": "로컬 Zoo Code 마이그레이션 핸드오프를 준비할까요? API 키를 포함하면 Zoo가 가져올 수 있도록 공급자 secrets가 로컬 파일에 기록되고, 가져온 후 핸드오프를 삭제할 수 있습니다.", + "handoffPrepared": "Zoo Code 마이그레이션 핸드오프가 {{path}}에 준비되었습니다. Zoo Code를 설치하고 이 핸드오프에서 가져오세요.", + "handoffFailed": "Zoo Code 마이그레이션 핸드오프 준비 실패: {{error}}" + }, "errors": { "invalid_data_uri": "잘못된 데이터 URI 형식", "error_copying_image": "이미지 복사 중 오류 발생: {{errorMessage}}", diff --git a/src/i18n/locales/nl/common.json b/src/i18n/locales/nl/common.json index eba274c96ec..9d63f48e10a 100644 --- a/src/i18n/locales/nl/common.json +++ b/src/i18n/locales/nl/common.json @@ -19,6 +19,22 @@ "delete_config_profile": "Weet je zeker dat je dit configuratieprofiel wilt verwijderen?", "delete_custom_mode_with_rules": "Weet je zeker dat je deze {scope}-modus wilt verwijderen?\n\nDit verwijdert ook de bijbehorende regelsmap op:\n{rulesFolderPath}" }, + "zooMigration": { + "actions": { + "installZoo": "Zoo Installeren", + "prepareMigration": "Migratie Voorbereiden", + "learnMore": "Meer Informatie", + "later": "Later", + "includeApiKeys": "API-sleutels Opnemen", + "skipApiKeys": "API-sleutels Overslaan", + "cancel": "Annuleren" + }, + "notice": "Roo Code stapt over naar Zoo Code. Je kunt een kopie-gebaseerde migratiehandoff voor Zoo voorbereiden zonder je Roo-gegevens te verwijderen.", + "installUnavailable": "Zoo Code is beschikbaar als ZooCodeOrganization.zoo-code. De automatische installatie is niet voltooid, daarom is de Extensions-weergave geopend zodat je het vanuit je geconfigureerde extensiegalerie kunt installeren.", + "preparePrompt": "Een lokale Zoo Code-migratiehandoff voorbereiden? Als je API-sleutels opneemt, worden provider-secrets naar een lokaal bestand geschreven zodat Zoo ze kan importeren en de handoff daarna kan verwijderen.", + "handoffPrepared": "Zoo Code-migratiehandoff voorbereid op {{path}}. Installeer Zoo Code en importeer vanuit deze handoff.", + "handoffFailed": "Kan Zoo Code-migratiehandoff niet voorbereiden: {{error}}" + }, "errors": { "invalid_data_uri": "Ongeldig data-URI-formaat", "error_copying_image": "Fout bij kopiëren van afbeelding: {{errorMessage}}", diff --git a/src/i18n/locales/pl/common.json b/src/i18n/locales/pl/common.json index 20b568281bb..c132c6774bb 100644 --- a/src/i18n/locales/pl/common.json +++ b/src/i18n/locales/pl/common.json @@ -19,6 +19,22 @@ "delete_config_profile": "Czy na pewno chcesz usunąć ten profil konfiguracyjny?", "delete_custom_mode_with_rules": "Czy na pewno chcesz usunąć ten tryb {scope}?\n\nSpowoduje to również usunięcie powiązanego folderu reguł pod adresem:\n{rulesFolderPath}" }, + "zooMigration": { + "actions": { + "installZoo": "Zainstaluj Zoo", + "prepareMigration": "Przygotuj Migrację", + "learnMore": "Dowiedz się Więcej", + "later": "Później", + "includeApiKeys": "Dołącz klucze API", + "skipApiKeys": "Pomiń klucze API", + "cancel": "Anuluj" + }, + "notice": "Roo Code przechodzi na Zoo Code. Możesz przygotować dla Zoo migrację przez kopię bez usuwania danych Roo.", + "installUnavailable": "Zoo Code jest dostępny jako ZooCodeOrganization.zoo-code. Automatyczna instalacja nie została ukończona, więc otwarto widok Extensions, aby można było zainstalować go ze skonfigurowanej galerii rozszerzeń.", + "preparePrompt": "Przygotować lokalną migrację Zoo Code? Dołączenie kluczy API zapisze secrets dostawców do lokalnego pliku, aby Zoo mogło je zaimportować, a następnie usunąć plik po imporcie.", + "handoffPrepared": "Migracja Zoo Code została przygotowana w {{path}}. Zainstaluj Zoo Code i zaimportuj dane z tego pliku.", + "handoffFailed": "Nie udało się przygotować migracji Zoo Code: {{error}}" + }, "errors": { "invalid_data_uri": "Nieprawidłowy format URI danych", "error_copying_image": "Błąd kopiowania obrazu: {{errorMessage}}", diff --git a/src/i18n/locales/pt-BR/common.json b/src/i18n/locales/pt-BR/common.json index 38abc8c8047..4f1a7d2b2b1 100644 --- a/src/i18n/locales/pt-BR/common.json +++ b/src/i18n/locales/pt-BR/common.json @@ -23,6 +23,22 @@ "delete_config_profile": "Tem certeza de que deseja excluir este perfil de configuração?", "delete_custom_mode_with_rules": "Tem certeza de que deseja excluir este modo {scope}?\n\nIsso também excluirá a pasta de regras associada em:\n{rulesFolderPath}" }, + "zooMigration": { + "actions": { + "installZoo": "Instalar Zoo", + "prepareMigration": "Preparar Migração", + "learnMore": "Saiba Mais", + "later": "Mais Tarde", + "includeApiKeys": "Incluir chaves de API", + "skipApiKeys": "Ignorar chaves de API", + "cancel": "Cancelar" + }, + "notice": "Roo Code está migrando para Zoo Code. Você pode preparar uma entrega de migração baseada em cópia para o Zoo sem excluir seus dados do Roo.", + "installUnavailable": "Zoo Code está disponível como ZooCodeOrganization.zoo-code. A instalação automática não foi concluída, então a visualização Extensões foi aberta para que você possa instalá-lo pela galeria de extensões configurada.", + "preparePrompt": "Preparar uma entrega local de migração para o Zoo Code? Incluir chaves de API grava os secrets dos provedores em um arquivo local para que o Zoo possa importá-los e depois excluir a entrega após a importação.", + "handoffPrepared": "Entrega de migração do Zoo Code preparada em {{path}}. Instale o Zoo Code e importe a partir desta entrega.", + "handoffFailed": "Falha ao preparar a entrega de migração do Zoo Code: {{error}}" + }, "errors": { "invalid_data_uri": "Formato de URI de dados inválido", "error_copying_image": "Erro ao copiar imagem: {{errorMessage}}", diff --git a/src/i18n/locales/ru/common.json b/src/i18n/locales/ru/common.json index d124f597318..dd3b7fff812 100644 --- a/src/i18n/locales/ru/common.json +++ b/src/i18n/locales/ru/common.json @@ -19,6 +19,22 @@ "delete_config_profile": "Вы уверены, что хотите удалить этот профиль конфигурации?", "delete_custom_mode_with_rules": "Вы уверены, что хотите удалить этот режим {scope}?\n\nЭто также приведет к удалению соответствующей папки правил по адресу:\n{rulesFolderPath}" }, + "zooMigration": { + "actions": { + "installZoo": "Установить Zoo", + "prepareMigration": "Подготовить миграцию", + "learnMore": "Подробнее", + "later": "Позже", + "includeApiKeys": "Включить API-ключи", + "skipApiKeys": "Пропустить API-ключи", + "cancel": "Отмена" + }, + "notice": "Roo Code переходит на Zoo Code. Вы можете подготовить копируемый пакет миграции для Zoo, не удаляя данные Roo.", + "installUnavailable": "Zoo Code доступен как ZooCodeOrganization.zoo-code. Автоматическая установка не завершилась, поэтому открыт раздел Extensions, чтобы вы могли установить его из настроенной галереи расширений.", + "preparePrompt": "Подготовить локальный пакет миграции Zoo Code? Если включить API-ключи, secrets провайдеров будут записаны в локальный файл, чтобы Zoo мог импортировать их, а затем удалить пакет после импорта.", + "handoffPrepared": "Пакет миграции Zoo Code подготовлен в {{path}}. Установите Zoo Code и импортируйте данные из этого пакета.", + "handoffFailed": "Не удалось подготовить пакет миграции Zoo Code: {{error}}" + }, "errors": { "invalid_data_uri": "Неверный формат URI данных", "error_copying_image": "Ошибка копирования изображения: {{errorMessage}}", diff --git a/src/i18n/locales/tr/common.json b/src/i18n/locales/tr/common.json index 00dcf6fc33d..ce1dd9bd254 100644 --- a/src/i18n/locales/tr/common.json +++ b/src/i18n/locales/tr/common.json @@ -19,6 +19,22 @@ "delete_config_profile": "Bu yapılandırma profilini silmek istediğinizden emin misiniz?", "delete_custom_mode_with_rules": "Bu {scope} modunu silmek istediğinizden emin misiniz?\n\nBu işlem, ilişkili kurallar klasörünü de şu konumdan silecektir:\n{rulesFolderPath}" }, + "zooMigration": { + "actions": { + "installZoo": "Zoo'yu Yükle", + "prepareMigration": "Geçişi Hazırla", + "learnMore": "Daha Fazla Bilgi", + "later": "Daha Sonra", + "includeApiKeys": "API anahtarlarını dahil et", + "skipApiKeys": "API anahtarlarını atla", + "cancel": "İptal" + }, + "notice": "Roo Code, Zoo Code'a geçiyor. Roo verilerini silmeden Zoo için kopya tabanlı bir geçiş handoff'u hazırlayabilirsin.", + "installUnavailable": "Zoo Code, ZooCodeOrganization.zoo-code olarak mevcut. Otomatik yükleme tamamlanmadı, bu yüzden yapılandırılmış eklenti galerinden yükleyebilmen için Extensions görünümü açıldı.", + "preparePrompt": "Yerel bir Zoo Code geçiş handoff'u hazırlansın mı? API anahtarlarını dahil etmek, sağlayıcı secrets değerlerini Zoo'nun içe aktarabilmesi ve içe aktarma sonrası handoff'u silebilmesi için yerel bir dosyaya yazar.", + "handoffPrepared": "Zoo Code geçiş handoff'u {{path}} konumunda hazırlandı. Zoo Code'u yükle ve bu handoff'tan içe aktar.", + "handoffFailed": "Zoo Code geçiş handoff'u hazırlanamadı: {{error}}" + }, "errors": { "invalid_data_uri": "Geçersiz veri URI formatı", "error_copying_image": "Resim kopyalanırken hata oluştu: {{errorMessage}}", diff --git a/src/i18n/locales/vi/common.json b/src/i18n/locales/vi/common.json index decd4ff53ef..a03dc1effa8 100644 --- a/src/i18n/locales/vi/common.json +++ b/src/i18n/locales/vi/common.json @@ -19,6 +19,22 @@ "delete_config_profile": "Bạn có chắc chắn muốn xóa hồ sơ cấu hình này không?", "delete_custom_mode_with_rules": "Bạn có chắc chắn muốn xóa chế độ {scope} này không?\n\nThao tác này cũng sẽ xóa thư mục quy tắc liên quan tại:\n{rulesFolderPath}" }, + "zooMigration": { + "actions": { + "installZoo": "Cài đặt Zoo", + "prepareMigration": "Chuẩn bị Di chuyển", + "learnMore": "Tìm hiểu Thêm", + "later": "Để sau", + "includeApiKeys": "Bao gồm khóa API", + "skipApiKeys": "Bỏ qua khóa API", + "cancel": "Hủy" + }, + "notice": "Roo Code đang chuyển sang Zoo Code. Bạn có thể chuẩn bị handoff di chuyển dạng sao chép cho Zoo mà không xóa dữ liệu Roo của mình.", + "installUnavailable": "Zoo Code có sẵn dưới tên ZooCodeOrganization.zoo-code. Quá trình cài đặt tự động chưa hoàn tất, nên khung Extensions đã được mở để bạn có thể cài đặt từ thư viện tiện ích đã cấu hình.", + "preparePrompt": "Chuẩn bị handoff di chuyển Zoo Code cục bộ? Bao gồm khóa API sẽ ghi secrets của nhà cung cấp vào một tệp cục bộ để Zoo có thể nhập chúng, rồi xóa handoff sau khi nhập.", + "handoffPrepared": "Handoff di chuyển Zoo Code đã được chuẩn bị tại {{path}}. Cài đặt Zoo Code và nhập từ handoff này.", + "handoffFailed": "Không thể chuẩn bị handoff di chuyển Zoo Code: {{error}}" + }, "errors": { "invalid_data_uri": "Định dạng URI dữ liệu không hợp lệ", "error_copying_image": "Lỗi khi sao chép hình ảnh: {{errorMessage}}", diff --git a/src/i18n/locales/zh-CN/common.json b/src/i18n/locales/zh-CN/common.json index 6df1f78b167..abd1026b405 100644 --- a/src/i18n/locales/zh-CN/common.json +++ b/src/i18n/locales/zh-CN/common.json @@ -19,6 +19,22 @@ "delete_config_profile": "您确定要删除此配置文件吗?", "delete_custom_mode_with_rules": "您确定要删除此 {scope} 模式吗?\n\n这也将删除位于以下位置的关联规则文件夹:\n{rulesFolderPath}" }, + "zooMigration": { + "actions": { + "installZoo": "安装 Zoo", + "prepareMigration": "准备迁移", + "learnMore": "了解更多", + "later": "稍后", + "includeApiKeys": "包含 API 密钥", + "skipApiKeys": "跳过 API 密钥", + "cancel": "取消" + }, + "notice": "Roo Code 正在迁移到 Zoo Code。你可以为 Zoo 准备基于复制的迁移交接包,而不会删除你的 Roo 数据。", + "installUnavailable": "Zoo Code 已以 ZooCodeOrganization.zoo-code 提供。自动安装未完成,因此已打开 Extensions 视图,你可以从已配置的扩展图库中安装它。", + "preparePrompt": "要准备本地 Zoo Code 迁移交接包吗?包含 API 密钥会将提供商 secrets 写入本地文件,以便 Zoo 导入,并在导入后删除该交接包。", + "handoffPrepared": "Zoo Code 迁移交接包已准备在 {{path}}。请安装 Zoo Code 并从此交接包导入。", + "handoffFailed": "无法准备 Zoo Code 迁移交接包:{{error}}" + }, "errors": { "invalid_mcp_config": "项目MCP配置格式无效", "invalid_mcp_settings_format": "MCP设置JSON格式无效。请确保您的设置遵循正确的JSON格式。", diff --git a/src/i18n/locales/zh-TW/common.json b/src/i18n/locales/zh-TW/common.json index be4a76fc5b9..bcc2af47283 100644 --- a/src/i18n/locales/zh-TW/common.json +++ b/src/i18n/locales/zh-TW/common.json @@ -19,6 +19,22 @@ "delete_config_profile": "您確定要刪除此設定檔案嗎?", "delete_custom_mode_with_rules": "您確定要刪除此 {scope} 模式嗎?\n\n這也將刪除位於以下位置的關聯規則資料夾:\n{rulesFolderPath}" }, + "zooMigration": { + "actions": { + "installZoo": "安裝 Zoo", + "prepareMigration": "準備遷移", + "learnMore": "瞭解更多", + "later": "稍後", + "includeApiKeys": "包含 API 金鑰", + "skipApiKeys": "略過 API 金鑰", + "cancel": "取消" + }, + "notice": "Roo Code 正在遷移到 Zoo Code。你可以為 Zoo 準備以複製為基礎的遷移交接包,而不會刪除你的 Roo 資料。", + "installUnavailable": "Zoo Code 已以 ZooCodeOrganization.zoo-code 提供。自動安裝未完成,因此已開啟 Extensions 檢視,你可以從已設定的擴充功能圖庫安裝它。", + "preparePrompt": "要準備本機 Zoo Code 遷移交接包嗎?包含 API 金鑰會將供應商 secrets 寫入本機檔案,讓 Zoo 匯入,然後在匯入後刪除交接包。", + "handoffPrepared": "Zoo Code 遷移交接包已準備在 {{path}}。請安裝 Zoo Code 並從此交接包匯入。", + "handoffFailed": "無法準備 Zoo Code 遷移交接包:{{error}}" + }, "errors": { "invalid_data_uri": "資料 URI 格式無效", "error_copying_image": "複製圖片時發生錯誤:{{errorMessage}}", diff --git a/src/package.json b/src/package.json index cb3b93d1602..e3b5c278e20 100644 --- a/src/package.json +++ b/src/package.json @@ -3,7 +3,7 @@ "displayName": "%extension.displayName%", "description": "%extension.description%", "publisher": "RooVeterinaryInc", - "version": "3.53.0", + "version": "3.53.1", "icon": "assets/icons/icon.png", "galleryBanner": { "color": "#617A91", @@ -155,6 +155,11 @@ "title": "%command.importSettings.title%", "category": "%configuration.title%" }, + { + "command": "roo-cline.prepareZooMigration", + "title": "%command.prepareZooMigration.title%", + "category": "%configuration.title%" + }, { "command": "roo-cline.focusInput", "title": "%command.focusInput.title%", diff --git a/src/package.nls.ca.json b/src/package.nls.ca.json index 2781ed169cf..746e9410240 100644 --- a/src/package.nls.ca.json +++ b/src/package.nls.ca.json @@ -10,6 +10,7 @@ "command.focusInput.title": "Enfocar Camp d'Entrada", "command.setCustomStoragePath.title": "Establir Ruta d'Emmagatzematge Personalitzada", "command.importSettings.title": "Importar Configuració", + "command.prepareZooMigration.title": "Prepara la migració a Zoo Code", "command.terminal.addToContext.title": "Afegir Contingut del Terminal al Context", "command.terminal.fixCommand.title": "Corregir Aquesta Ordre", "command.terminal.explainCommand.title": "Explicar Aquesta Ordre", diff --git a/src/package.nls.de.json b/src/package.nls.de.json index a77a253ef06..f30c8b9ed21 100644 --- a/src/package.nls.de.json +++ b/src/package.nls.de.json @@ -10,6 +10,7 @@ "command.focusInput.title": "Eingabefeld Fokussieren", "command.setCustomStoragePath.title": "Benutzerdefinierten Speicherpfad Festlegen", "command.importSettings.title": "Einstellungen Importieren", + "command.prepareZooMigration.title": "Zoo Code-Migration Vorbereiten", "command.terminal.addToContext.title": "Terminal-Inhalt zum Kontext Hinzufügen", "command.terminal.fixCommand.title": "Diesen Befehl Reparieren", "command.terminal.explainCommand.title": "Diesen Befehl Erklären", diff --git a/src/package.nls.es.json b/src/package.nls.es.json index a1c729080e2..7fe8eeebd61 100644 --- a/src/package.nls.es.json +++ b/src/package.nls.es.json @@ -10,6 +10,7 @@ "command.focusInput.title": "Enfocar Campo de Entrada", "command.setCustomStoragePath.title": "Establecer Ruta de Almacenamiento Personalizada", "command.importSettings.title": "Importar Configuración", + "command.prepareZooMigration.title": "Preparar Migración a Zoo Code", "command.terminal.addToContext.title": "Añadir Contenido de Terminal al Contexto", "command.terminal.fixCommand.title": "Corregir Este Comando", "command.terminal.explainCommand.title": "Explicar Este Comando", diff --git a/src/package.nls.fr.json b/src/package.nls.fr.json index 2d009c0038d..495d661da28 100644 --- a/src/package.nls.fr.json +++ b/src/package.nls.fr.json @@ -10,6 +10,7 @@ "command.focusInput.title": "Focus sur le Champ de Saisie", "command.setCustomStoragePath.title": "Définir le Chemin de Stockage Personnalisé", "command.importSettings.title": "Importer les Paramètres", + "command.prepareZooMigration.title": "Préparer la Migration vers Zoo Code", "command.terminal.addToContext.title": "Ajouter le Contenu du Terminal au Contexte", "command.terminal.fixCommand.title": "Corriger cette Commande", "command.terminal.explainCommand.title": "Expliquer cette Commande", diff --git a/src/package.nls.hi.json b/src/package.nls.hi.json index c51f3ee95ee..227af866ffa 100644 --- a/src/package.nls.hi.json +++ b/src/package.nls.hi.json @@ -10,6 +10,7 @@ "command.focusInput.title": "इनपुट फ़ील्ड पर फोकस करें", "command.setCustomStoragePath.title": "कस्टम स्टोरेज पाथ सेट करें", "command.importSettings.title": "सेटिंग्स इम्पोर्ट करें", + "command.prepareZooMigration.title": "Zoo Code माइग्रेशन तैयार करें", "command.terminal.addToContext.title": "टर्मिनल सामग्री को संदर्भ में जोड़ें", "command.terminal.fixCommand.title": "यह कमांड ठीक करें", "command.terminal.explainCommand.title": "यह कमांड समझाएं", diff --git a/src/package.nls.id.json b/src/package.nls.id.json index 2a7607f3e7c..70c962bf174 100644 --- a/src/package.nls.id.json +++ b/src/package.nls.id.json @@ -20,6 +20,7 @@ "command.focusInput.title": "Fokus ke Field Input", "command.setCustomStoragePath.title": "Atur Path Penyimpanan Kustom", "command.importSettings.title": "Impor Pengaturan", + "command.prepareZooMigration.title": "Siapkan Migrasi Zoo Code", "command.terminal.addToContext.title": "Tambahkan Konten Terminal ke Konteks", "command.terminal.fixCommand.title": "Perbaiki Perintah Ini", "command.terminal.explainCommand.title": "Jelaskan Perintah Ini", diff --git a/src/package.nls.it.json b/src/package.nls.it.json index c94471355d4..e7b8aa2b575 100644 --- a/src/package.nls.it.json +++ b/src/package.nls.it.json @@ -10,6 +10,7 @@ "command.focusInput.title": "Focalizza Campo di Input", "command.setCustomStoragePath.title": "Imposta Percorso di Archiviazione Personalizzato", "command.importSettings.title": "Importa Impostazioni", + "command.prepareZooMigration.title": "Prepara la Migrazione a Zoo Code", "command.terminal.addToContext.title": "Aggiungi Contenuto del Terminale al Contesto", "command.terminal.fixCommand.title": "Correggi Questo Comando", "command.terminal.explainCommand.title": "Spiega Questo Comando", diff --git a/src/package.nls.ja.json b/src/package.nls.ja.json index ff6040d7734..faa42f45cb5 100644 --- a/src/package.nls.ja.json +++ b/src/package.nls.ja.json @@ -20,6 +20,7 @@ "command.focusInput.title": "入力フィールドにフォーカス", "command.setCustomStoragePath.title": "カスタムストレージパスの設定", "command.importSettings.title": "設定をインポート", + "command.prepareZooMigration.title": "Zoo Code への移行を準備", "command.terminal.addToContext.title": "ターミナルの内容をコンテキストに追加", "command.terminal.fixCommand.title": "このコマンドを修正", "command.terminal.explainCommand.title": "このコマンドを説明", diff --git a/src/package.nls.json b/src/package.nls.json index 177b392f775..53828046831 100644 --- a/src/package.nls.json +++ b/src/package.nls.json @@ -20,6 +20,7 @@ "command.focusInput.title": "Focus Input Field", "command.setCustomStoragePath.title": "Set Custom Storage Path", "command.importSettings.title": "Import Settings", + "command.prepareZooMigration.title": "Prepare Zoo Code Migration", "command.terminal.addToContext.title": "Add Terminal Content to Context", "command.terminal.fixCommand.title": "Fix This Command", "command.terminal.explainCommand.title": "Explain This Command", diff --git a/src/package.nls.ko.json b/src/package.nls.ko.json index f0912835b8b..d760ba9e4c8 100644 --- a/src/package.nls.ko.json +++ b/src/package.nls.ko.json @@ -10,6 +10,7 @@ "command.focusInput.title": "입력 필드 포커스", "command.setCustomStoragePath.title": "사용자 지정 저장소 경로 설정", "command.importSettings.title": "설정 가져오기", + "command.prepareZooMigration.title": "Zoo Code 마이그레이션 준비", "command.terminal.addToContext.title": "터미널 내용을 컨텍스트에 추가", "command.terminal.fixCommand.title": "이 명령어 수정", "command.terminal.explainCommand.title": "이 명령어 설명", diff --git a/src/package.nls.nl.json b/src/package.nls.nl.json index fef3ca7219c..eb5ee869da1 100644 --- a/src/package.nls.nl.json +++ b/src/package.nls.nl.json @@ -20,6 +20,7 @@ "command.focusInput.title": "Focus op Invoerveld", "command.setCustomStoragePath.title": "Aangepast Opslagpad Instellen", "command.importSettings.title": "Instellingen Importeren", + "command.prepareZooMigration.title": "Zoo Code-migratie Voorbereiden", "command.terminal.addToContext.title": "Terminalinhoud aan Context Toevoegen", "command.terminal.fixCommand.title": "Repareer Dit Commando", "command.terminal.explainCommand.title": "Leg Dit Commando Uit", diff --git a/src/package.nls.pl.json b/src/package.nls.pl.json index 8c1f66450d1..1ceeee044fa 100644 --- a/src/package.nls.pl.json +++ b/src/package.nls.pl.json @@ -10,6 +10,7 @@ "command.focusInput.title": "Fokus na Pole Wprowadzania", "command.setCustomStoragePath.title": "Ustaw Niestandardową Ścieżkę Przechowywania", "command.importSettings.title": "Importuj Ustawienia", + "command.prepareZooMigration.title": "Przygotuj Migrację do Zoo Code", "command.terminal.addToContext.title": "Dodaj Zawartość Terminala do Kontekstu", "command.terminal.fixCommand.title": "Napraw tę Komendę", "command.terminal.explainCommand.title": "Wyjaśnij tę Komendę", diff --git a/src/package.nls.pt-BR.json b/src/package.nls.pt-BR.json index 84cbf42c097..dbf82a9e0aa 100644 --- a/src/package.nls.pt-BR.json +++ b/src/package.nls.pt-BR.json @@ -10,6 +10,7 @@ "command.focusInput.title": "Focar Campo de Entrada", "command.setCustomStoragePath.title": "Definir Caminho de Armazenamento Personalizado", "command.importSettings.title": "Importar Configurações", + "command.prepareZooMigration.title": "Preparar Migração para o Zoo Code", "command.terminal.addToContext.title": "Adicionar Conteúdo do Terminal ao Contexto", "command.terminal.fixCommand.title": "Corrigir Este Comando", "command.terminal.explainCommand.title": "Explicar Este Comando", diff --git a/src/package.nls.ru.json b/src/package.nls.ru.json index be8df040323..b5938568354 100644 --- a/src/package.nls.ru.json +++ b/src/package.nls.ru.json @@ -20,6 +20,7 @@ "command.focusInput.title": "Фокус на поле ввода", "command.setCustomStoragePath.title": "Указать путь хранения", "command.importSettings.title": "Импортировать настройки", + "command.prepareZooMigration.title": "Подготовить миграцию в Zoo Code", "command.terminal.addToContext.title": "Добавить содержимое терминала в контекст", "command.terminal.fixCommand.title": "Исправить эту команду", "command.terminal.explainCommand.title": "Объяснить эту команду", diff --git a/src/package.nls.tr.json b/src/package.nls.tr.json index a815188e8aa..4b0d4f28b9e 100644 --- a/src/package.nls.tr.json +++ b/src/package.nls.tr.json @@ -10,6 +10,7 @@ "command.focusInput.title": "Giriş Alanına Odaklan", "command.setCustomStoragePath.title": "Özel Depolama Yolunu Ayarla", "command.importSettings.title": "Ayarları İçe Aktar", + "command.prepareZooMigration.title": "Zoo Code Geçişini Hazırla", "command.terminal.addToContext.title": "Terminal İçeriğini Bağlama Ekle", "command.terminal.fixCommand.title": "Bu Komutu Düzelt", "command.terminal.explainCommand.title": "Bu Komutu Açıkla", diff --git a/src/package.nls.vi.json b/src/package.nls.vi.json index 6052080dfa3..3608c37e33e 100644 --- a/src/package.nls.vi.json +++ b/src/package.nls.vi.json @@ -10,6 +10,7 @@ "command.focusInput.title": "Tập Trung vào Trường Nhập", "command.setCustomStoragePath.title": "Đặt Đường Dẫn Lưu Trữ Tùy Chỉnh", "command.importSettings.title": "Nhập Cài Đặt", + "command.prepareZooMigration.title": "Chuẩn bị Di chuyển sang Zoo Code", "command.terminal.addToContext.title": "Thêm Nội Dung Terminal vào Ngữ Cảnh", "command.terminal.fixCommand.title": "Sửa Lệnh Này", "command.terminal.explainCommand.title": "Giải Thích Lệnh Này", diff --git a/src/package.nls.zh-CN.json b/src/package.nls.zh-CN.json index 9254d494d9b..c1343f7b7a4 100644 --- a/src/package.nls.zh-CN.json +++ b/src/package.nls.zh-CN.json @@ -10,6 +10,7 @@ "command.focusInput.title": "聚焦输入框", "command.setCustomStoragePath.title": "设置自定义存储路径", "command.importSettings.title": "导入设置", + "command.prepareZooMigration.title": "准备迁移到 Zoo Code", "command.terminal.addToContext.title": "将终端内容添加到上下文", "command.terminal.fixCommand.title": "修复此命令", "command.terminal.explainCommand.title": "解释此命令", diff --git a/src/package.nls.zh-TW.json b/src/package.nls.zh-TW.json index a8030d69141..1cdbfa261a9 100644 --- a/src/package.nls.zh-TW.json +++ b/src/package.nls.zh-TW.json @@ -10,6 +10,7 @@ "command.focusInput.title": "聚焦輸入框", "command.setCustomStoragePath.title": "設定自訂儲存路徑", "command.importSettings.title": "匯入設定", + "command.prepareZooMigration.title": "準備遷移到 Zoo Code", "command.terminal.addToContext.title": "將終端內容新增到上下文", "command.terminal.fixCommand.title": "修復此命令", "command.terminal.explainCommand.title": "解釋此命令", diff --git a/src/services/zoo-migration/ZooMigration.ts b/src/services/zoo-migration/ZooMigration.ts new file mode 100644 index 00000000000..fe18ab7b635 --- /dev/null +++ b/src/services/zoo-migration/ZooMigration.ts @@ -0,0 +1,296 @@ +import * as fs from "fs/promises" +import * as path from "path" +import * as vscode from "vscode" + +import type { GlobalSettings } from "@roo-code/types" + +import { ContextProxy } from "../../core/config/ContextProxy" +import type { ProviderProfiles } from "../../core/config/ProviderSettingsManager" +import { t } from "../../i18n" +import { Package } from "../../shared/package" +import { fileExistsAtPath } from "../../utils/fs" +import { getStorageBasePath } from "../../utils/storage" + +const HANDOFF_SCHEMA_VERSION = 1 +const HANDOFF_DIR_NAME = "zoo-migration" +const HANDOFF_FILE_NAME = "handoff-v1.json" + +const ZOO_REPOSITORY_URL = "https://github.com/Zoo-Code-Org/Zoo-Code" +const ZOO_ANNOUNCEMENT_URL = "https://www.reddit.com/r/RooCode/comments/1syufn1/roo_is_back_as_zoo/" +const ZOO_EXTENSION_ID = "ZooCodeOrganization.zoo-code" + +const CONFIGURATION_KEYS = [ + "allowedCommands", + "deniedCommands", + "commandExecutionTimeout", + "commandTimeoutAllowlist", + "preventCompletionWithOpenTodos", + "vsCodeLmModelSelector", + "customStoragePath", + "enableCodeActions", + "autoImportSettingsPath", + "maximumIndexedFilesForFileSearch", + "useAgentRules", + "apiRequestTimeout", + "newTaskRequireTodos", + "codeIndex.embeddingBatchSize", + "debug", + "debugProxy.enabled", + "debugProxy.serverUrl", + "debugProxy.tlsInsecure", +] as const + +type ConfigurationValue = { + value: unknown + globalValue?: unknown + workspaceValue?: unknown + workspaceFolderValue?: unknown +} + +type HandoffCopiedData = { + settings?: string + tasks?: string +} + +export type ZooMigrationHandoff = { + schemaVersion: typeof HANDOFF_SCHEMA_VERSION + createdAt: string + source: { + extensionId: string + publisher: string + name: string + version: string + globalStoragePath: string + storageBasePath: string + } + zoo: { + repositoryUrl: string + announcementUrl: string + extensionId: string + } + containsSecrets: boolean + globalSettings?: GlobalSettings + vscodeConfiguration: Record + providerProfiles?: ProviderProfiles + copiedData: HandoffCopiedData +} + +export type CreateZooMigrationHandoffOptions = { + context: vscode.ExtensionContext + contextProxy: ContextProxy + providerSettingsManager: { + export: () => Promise + } + includeSecrets: boolean + outputChannel?: vscode.OutputChannel +} + +export type CreateZooMigrationHandoffResult = { + handoffPath: string + handoff: ZooMigrationHandoff +} + +export type ShowZooMigrationNoticeOptions = { + outputChannel?: vscode.OutputChannel + delayMs?: number +} + +export async function createZooMigrationHandoff({ + context, + contextProxy, + providerSettingsManager, + includeSecrets, + outputChannel, +}: CreateZooMigrationHandoffOptions): Promise { + const createdAt = new Date().toISOString() + const migrationDir = path.join(context.globalStorageUri.fsPath, HANDOFF_DIR_NAME) + const dataDir = path.join(migrationDir, "data") + const storageBasePath = await getStorageBasePath(context.globalStorageUri.fsPath) + const copiedData: HandoffCopiedData = {} + + await fs.mkdir(dataDir, { recursive: true }) + + await copyDataDirectory({ + sourcePath: path.join(storageBasePath, "settings"), + destinationPath: path.join(dataDir, "settings"), + relativePath: "data/settings", + copiedData, + key: "settings", + outputChannel, + }) + + await copyDataDirectory({ + sourcePath: path.join(storageBasePath, "tasks"), + destinationPath: path.join(dataDir, "tasks"), + relativePath: "data/tasks", + copiedData, + key: "tasks", + outputChannel, + }) + + const globalSettings = await contextProxy.export() + const providerProfiles = includeSecrets ? await providerSettingsManager.export() : undefined + const handoff: ZooMigrationHandoff = { + schemaVersion: HANDOFF_SCHEMA_VERSION, + createdAt, + source: { + extensionId: `${Package.publisher}.${Package.name}`, + publisher: Package.publisher, + name: Package.name, + version: Package.version, + globalStoragePath: context.globalStorageUri.fsPath, + storageBasePath, + }, + zoo: { + repositoryUrl: ZOO_REPOSITORY_URL, + announcementUrl: ZOO_ANNOUNCEMENT_URL, + extensionId: ZOO_EXTENSION_ID, + }, + containsSecrets: includeSecrets, + globalSettings, + vscodeConfiguration: getRooConfigurationValues(), + providerProfiles, + copiedData, + } + + const handoffPath = path.join(migrationDir, HANDOFF_FILE_NAME) + await fs.writeFile(handoffPath, JSON.stringify(handoff, null, 2), "utf-8") + await restrictFilePermissions(handoffPath, outputChannel) + + outputChannel?.appendLine(`[Zoo Migration] Prepared handoff at ${handoffPath}`) + + return { handoffPath, handoff } +} + +export async function showZooMigrationNotice( + context: vscode.ExtensionContext, + { outputChannel, delayMs = 1500 }: ShowZooMigrationNoticeOptions = {}, +): Promise { + if (delayMs > 0) { + await new Promise((resolve) => setTimeout(resolve, delayMs)) + } + + const installAction = t("common:zooMigration.actions.installZoo") + const migrateAction = t("common:zooMigration.actions.prepareMigration") + const learnMoreAction = t("common:zooMigration.actions.learnMore") + const laterAction = t("common:zooMigration.actions.later") + outputChannel?.appendLine(`[Zoo Migration] Showing migration notice for ${Package.version}`) + const result = await vscode.window.showInformationMessage( + t("common:zooMigration.notice"), + installAction, + migrateAction, + learnMoreAction, + laterAction, + ) + + if (!result) { + outputChannel?.appendLine("[Zoo Migration] Migration notice dismissed without selection; it may be shown again") + return + } + + outputChannel?.appendLine(`[Zoo Migration] Migration notice selected: ${result}`) + + if (result === installAction) { + await installOrShowZooExtension() + } else if (result === migrateAction) { + await vscode.commands.executeCommand(`${Package.name}.prepareZooMigration`) + } else if (result === learnMoreAction) { + await vscode.env.openExternal(vscode.Uri.parse(ZOO_REPOSITORY_URL)) + } +} + +export async function installOrShowZooExtension(): Promise { + try { + await vscode.commands.executeCommand("workbench.extensions.installExtension", ZOO_EXTENSION_ID) + } catch { + await vscode.commands.executeCommand("workbench.extensions.search", ZOO_EXTENSION_ID) + await vscode.window.showInformationMessage(t("common:zooMigration.installUnavailable")) + } +} + +export async function promptAndCreateZooMigrationHandoff(options: { + context: vscode.ExtensionContext + contextProxy: ContextProxy + providerSettingsManager: CreateZooMigrationHandoffOptions["providerSettingsManager"] + outputChannel?: vscode.OutputChannel +}): Promise { + const includeSecretsAction = t("common:zooMigration.actions.includeApiKeys") + const noSecretsAction = t("common:zooMigration.actions.skipApiKeys") + const cancelAction = t("common:zooMigration.actions.cancel") + const result = await vscode.window.showWarningMessage( + t("common:zooMigration.preparePrompt"), + { modal: true }, + includeSecretsAction, + noSecretsAction, + cancelAction, + ) + + if (!result || result === cancelAction) { + return undefined + } + + const handoffResult = await createZooMigrationHandoff({ + ...options, + includeSecrets: result === includeSecretsAction, + }) + + await vscode.window.showInformationMessage( + t("common:zooMigration.handoffPrepared", { path: handoffResult.handoffPath }), + ) + + return handoffResult +} + +function getRooConfigurationValues(): Record { + const configuration = vscode.workspace.getConfiguration(Package.name) + + return Object.fromEntries( + CONFIGURATION_KEYS.map((key) => { + const inspected = typeof configuration.inspect === "function" ? configuration.inspect(key) : undefined + return [ + key, + { + value: configuration.get(key), + globalValue: inspected?.globalValue, + workspaceValue: inspected?.workspaceValue, + workspaceFolderValue: inspected?.workspaceFolderValue, + }, + ] + }), + ) +} + +async function copyDataDirectory({ + sourcePath, + destinationPath, + relativePath, + copiedData, + key, + outputChannel, +}: { + sourcePath: string + destinationPath: string + relativePath: string + copiedData: HandoffCopiedData + key: keyof HandoffCopiedData + outputChannel?: vscode.OutputChannel +}) { + if (!(await fileExistsAtPath(sourcePath))) { + outputChannel?.appendLine(`[Zoo Migration] No ${key} directory found at ${sourcePath}; skipping`) + return + } + + await fs.rm(destinationPath, { recursive: true, force: true }) + await fs.cp(sourcePath, destinationPath, { recursive: true }) + copiedData[key] = relativePath +} + +async function restrictFilePermissions(filePath: string, outputChannel?: vscode.OutputChannel) { + try { + await fs.chmod(filePath, 0o600) + } catch (error) { + outputChannel?.appendLine( + `[Zoo Migration] Could not restrict handoff permissions: ${error instanceof Error ? error.message : String(error)}`, + ) + } +} diff --git a/src/services/zoo-migration/__tests__/ZooMigration.spec.ts b/src/services/zoo-migration/__tests__/ZooMigration.spec.ts new file mode 100644 index 00000000000..ac5f0e19e44 --- /dev/null +++ b/src/services/zoo-migration/__tests__/ZooMigration.spec.ts @@ -0,0 +1,252 @@ +import * as fs from "fs/promises" +import * as os from "os" +import * as path from "path" +import * as vscode from "vscode" + +import packageJson from "../../../package.json" +import { createZooMigrationHandoff, installOrShowZooExtension, showZooMigrationNotice } from "../ZooMigration" + +describe("createZooMigrationHandoff", () => { + let tmpDir: string + + beforeEach(async () => { + tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "roo-zoo-migration-")) + vi.spyOn(vscode.workspace, "getConfiguration").mockReturnValue({ + get: vi.fn((key: string, defaultValue?: unknown) => { + if (key === "customStoragePath") { + return "" + } + return defaultValue + }), + inspect: vi.fn((key: string) => ({ + globalValue: key === "allowedCommands" ? ["git diff"] : undefined, + })), + } as any) + }) + + afterEach(async () => { + vi.restoreAllMocks() + await fs.rm(tmpDir, { recursive: true, force: true }) + }) + + it("creates a copy-based handoff with settings and tasks but excludes cache data", async () => { + const context = makeContext(tmpDir) + await fs.mkdir(path.join(tmpDir, "settings"), { recursive: true }) + await fs.mkdir(path.join(tmpDir, "tasks", "task-1"), { recursive: true }) + await fs.mkdir(path.join(tmpDir, "cache"), { recursive: true }) + await fs.writeFile(path.join(tmpDir, "settings", "mcp_settings.json"), "{}") + await fs.writeFile(path.join(tmpDir, "tasks", "task-1", "history_item.json"), "{}") + await fs.writeFile(path.join(tmpDir, "cache", "openrouter_models.json"), "{}") + + const result = await createZooMigrationHandoff({ + context, + contextProxy: { export: vi.fn().mockResolvedValue({ mode: "code" }) } as any, + providerSettingsManager: { export: vi.fn().mockResolvedValue({ currentApiConfigName: "default" }) }, + includeSecrets: false, + }) + + const handoffJson = JSON.parse(await fs.readFile(result.handoffPath, "utf-8")) + expect(handoffJson.containsSecrets).toBe(false) + expect(handoffJson.providerProfiles).toBeUndefined() + expect(handoffJson.globalSettings).toEqual({ mode: "code" }) + expect(handoffJson.zoo.extensionId).toBe("ZooCodeOrganization.zoo-code") + expect(Object.keys(handoffJson.vscodeConfiguration).sort()).toEqual(getContributedRooConfigurationKeys()) + expect(handoffJson.copiedData).toEqual({ + settings: "data/settings", + tasks: "data/tasks", + }) + await expect( + fs.readFile(path.join(tmpDir, "zoo-migration", "data", "settings", "mcp_settings.json"), "utf-8"), + ).resolves.toBe("{}") + await expect( + fs.readFile(path.join(tmpDir, "zoo-migration", "data", "tasks", "task-1", "history_item.json"), "utf-8"), + ).resolves.toBe("{}") + await expect( + fs.access(path.join(tmpDir, "zoo-migration", "data", "cache", "openrouter_models.json")), + ).rejects.toThrow() + }) + + it("exports provider profiles only when the user opts into secret migration", async () => { + const context = makeContext(tmpDir) + const providerProfiles = { + currentApiConfigName: "default", + apiConfigs: { + default: { + id: "profile-1", + apiProvider: "openai", + openAiApiKey: "secret-key", + }, + }, + } + + const result = await createZooMigrationHandoff({ + context, + contextProxy: { export: vi.fn().mockResolvedValue({}) } as any, + providerSettingsManager: { export: vi.fn().mockResolvedValue(providerProfiles as any) }, + includeSecrets: true, + }) + + const handoffJson = JSON.parse(await fs.readFile(result.handoffPath, "utf-8")) + expect(handoffJson.containsSecrets).toBe(true) + expect(handoffJson.providerProfiles).toEqual(providerProfiles) + }) + + it("uses a configured custom storage path as the source data path", async () => { + const customStoragePath = path.join(tmpDir, "custom-storage") + const context = makeContext(path.join(tmpDir, "global-storage")) + await fs.mkdir(path.join(customStoragePath, "settings"), { recursive: true }) + await fs.writeFile(path.join(customStoragePath, "settings", "custom_modes.yaml"), "customModes: []\n") + + vi.spyOn(vscode.workspace, "getConfiguration").mockReturnValue({ + get: vi.fn((key: string, defaultValue?: unknown) => { + if (key === "customStoragePath") { + return customStoragePath + } + return defaultValue + }), + inspect: vi.fn(), + } as any) + + const result = await createZooMigrationHandoff({ + context, + contextProxy: { export: vi.fn().mockResolvedValue({}) } as any, + providerSettingsManager: { export: vi.fn().mockResolvedValue({ currentApiConfigName: "default" }) }, + includeSecrets: false, + }) + + expect(result.handoff.source.storageBasePath).toBe(customStoragePath) + await expect( + fs.readFile( + path.join(tmpDir, "global-storage", "zoo-migration", "data", "settings", "custom_modes.yaml"), + "utf-8", + ), + ).resolves.toBe("customModes: []\n") + }) +}) + +describe("showZooMigrationNotice", () => { + afterEach(() => { + vi.restoreAllMocks() + }) + + it("shows the migration notice on activation", async () => { + const update = vi.fn().mockResolvedValue(undefined) + const context = { + globalState: { + get: vi.fn().mockReturnValue(undefined), + update, + }, + } as any + const outputChannel = { appendLine: vi.fn() } as any + const showInformationMessage = vi + .spyOn(vscode.window, "showInformationMessage") + .mockImplementation((async (_message: string, ...actions: unknown[]) => actions.at(-1)) as any) + + await showZooMigrationNotice(context, { outputChannel, delayMs: 0 }) + + expect(showInformationMessage).toHaveBeenCalled() + expect(update).not.toHaveBeenCalled() + expect(outputChannel.appendLine).toHaveBeenCalledWith("[Zoo Migration] Showing migration notice for 3.53.1") + }) + + it("does not mark the notice shown when VS Code dismisses it without a user selection", async () => { + const update = vi.fn().mockResolvedValue(undefined) + const context = { + globalState: { + get: vi.fn().mockReturnValue(undefined), + update, + }, + } as any + vi.spyOn(vscode.window, "showInformationMessage").mockResolvedValue(undefined) + + await showZooMigrationNotice(context, { delayMs: 0 }) + + expect(update).not.toHaveBeenCalled() + }) + + it("does not mark the notice shown when the user chooses Learn More", async () => { + const update = vi.fn().mockResolvedValue(undefined) + const context = { + globalState: { + get: vi.fn().mockReturnValue(undefined), + update, + }, + } as any + vi.spyOn(vscode.window, "showInformationMessage").mockImplementation((async ( + _message: string, + ...actions: unknown[] + ) => actions.at(2)) as any) + const openExternal = vi.spyOn(vscode.env, "openExternal").mockResolvedValue(true) + + await showZooMigrationNotice(context, { delayMs: 0 }) + + expect(openExternal).toHaveBeenCalled() + expect(update).not.toHaveBeenCalled() + }) + + it("shows the notice even when older persistent state says it was already shown", async () => { + const context = { + globalState: { + get: vi.fn().mockReturnValue(true), + update: vi.fn(), + }, + } as any + const showInformationMessage = vi.spyOn(vscode.window, "showInformationMessage").mockResolvedValue(undefined) + + await showZooMigrationNotice(context, { delayMs: 0 }) + + expect(showInformationMessage).toHaveBeenCalled() + expect(context.globalState.update).not.toHaveBeenCalled() + }) +}) + +describe("installOrShowZooExtension", () => { + afterEach(() => { + vi.restoreAllMocks() + }) + + it("installs the published Zoo Code marketplace extension", async () => { + const executeCommand = vi.spyOn(vscode.commands, "executeCommand").mockResolvedValue(undefined) + + await installOrShowZooExtension() + + expect(executeCommand).toHaveBeenCalledWith( + "workbench.extensions.installExtension", + "ZooCodeOrganization.zoo-code", + ) + }) + + it("falls back to extension search when the configured gallery cannot install Zoo Code yet", async () => { + const executeCommand = vi + .spyOn(vscode.commands, "executeCommand") + .mockRejectedValueOnce(new Error("Extension not found")) + .mockResolvedValueOnce(undefined) + const showInformationMessage = vi.spyOn(vscode.window, "showInformationMessage").mockResolvedValue(undefined) + + await installOrShowZooExtension() + + expect(executeCommand).toHaveBeenNthCalledWith( + 1, + "workbench.extensions.installExtension", + "ZooCodeOrganization.zoo-code", + ) + expect(executeCommand).toHaveBeenNthCalledWith(2, "workbench.extensions.search", "ZooCodeOrganization.zoo-code") + expect(showInformationMessage).toHaveBeenCalled() + }) +}) + +function makeContext(globalStoragePath: string): vscode.ExtensionContext { + return { + globalStorageUri: vscode.Uri.file(globalStoragePath), + globalState: { + get: vi.fn(), + update: vi.fn().mockResolvedValue(undefined), + }, + } as any +} + +function getContributedRooConfigurationKeys(): string[] { + return Object.keys((packageJson as any).contributes.configuration.properties) + .map((key) => key.replace(/^roo-cline\./, "")) + .sort() +} diff --git a/webview-ui/src/components/chat/Announcement.tsx b/webview-ui/src/components/chat/Announcement.tsx index 180767be440..715a572f5dd 100644 --- a/webview-ui/src/components/chat/Announcement.tsx +++ b/webview-ui/src/components/chat/Announcement.tsx @@ -1,7 +1,7 @@ import { memo, type ReactNode, useState } from "react" import { Trans } from "react-i18next" import { SiDiscord, SiReddit, SiX } from "react-icons/si" -import { VSCodeLink } from "@vscode/webview-ui-toolkit/react" +import { VSCodeButton, VSCodeLink } from "@vscode/webview-ui-toolkit/react" import { Package } from "@roo/package" import { useAppTranslation } from "@src/i18n/TranslationContext" @@ -40,7 +40,7 @@ const Announcement = ({ hideAnnouncement }: AnnouncementProps) => { {t("chat:announcement.title", { version: Package.version })}
- {/* Community Handoff Notice */} + {/* Zoo Handoff Notice */}

{t("chat:announcement.handoff.heading")} @@ -48,26 +48,39 @@ const Announcement = ({ hideAnnouncement }: AnnouncementProps) => {

}} />

- { - e.preventDefault() - vscode.postMessage({ - type: "openExternal", - url: "https://x.com/mattrubens/status/2046636598859559114", - }) - }}> + {t("chat:announcement.handoff.readMore")}
- {/* Regular Release Highlights */} + {/* Zoo Migration */} +
+

{t("chat:announcement.zooMigration.heading")}

+

{t("chat:announcement.zooMigration.description")}

+
+ { + vscode.postMessage({ type: "prepareZooMigration" }) + }}> + {t("chat:announcement.zooMigration.prepareButton")} + + { + vscode.postMessage({ type: "installZooExtension" }) + }}> + {t("chat:announcement.zooMigration.installButton")} + +
+
+ + {/* Migration Details */}
-

{t("chat:announcement.release.heading")}

+

{t("chat:announcement.zooMigration.detailsHeading")}

    -
  • {t("chat:announcement.release.gpt55")}
  • -
  • {t("chat:announcement.release.claudeOpus47")}
  • -
  • {t("chat:announcement.release.checkpointNav")}
  • +
  • {t("chat:announcement.zooMigration.copiesData")}
  • +
  • {t("chat:announcement.zooMigration.keepsOriginals")}
  • +
  • {t("chat:announcement.zooMigration.apiKeysOptIn")}
diff --git a/webview-ui/src/components/chat/__tests__/Announcement.spec.tsx b/webview-ui/src/components/chat/__tests__/Announcement.spec.tsx index 84254ae9e9c..bcef5937d16 100644 --- a/webview-ui/src/components/chat/__tests__/Announcement.spec.tsx +++ b/webview-ui/src/components/chat/__tests__/Announcement.spec.tsx @@ -2,6 +2,8 @@ import React from "react" import { render, screen } from "@/utils/test-utils" +import { vscode } from "@src/utils/vscode" + import Announcement from "../Announcement" vi.mock("@src/utils/vscode", () => ({ @@ -12,11 +14,16 @@ vi.mock("@src/utils/vscode", () => ({ vi.mock("@roo/package", () => ({ Package: { - version: "3.53.0", + version: "3.53.1", }, })) vi.mock("@vscode/webview-ui-toolkit/react", () => ({ + VSCodeButton: ({ children, onClick, ...props }: React.ButtonHTMLAttributes) => ( + + ), VSCodeLink: ({ children, href, onClick, ...props }: React.AnchorHTMLAttributes) => ( {children} @@ -32,18 +39,24 @@ vi.mock("@src/i18n/TranslationContext", () => ({ useAppTranslation: () => ({ t: (key: string, options?: { version?: string }) => { const translations: Record = { - "chat:announcement.release.heading": "What's New:", - "chat:announcement.release.gpt55": - "GPT-5.5 via OpenAI Codex: Added GPT-5.5 support in the OpenAI Codex provider so you can use the latest model straight from Roo Code.", - "chat:announcement.release.claudeOpus47": - "Claude Opus 4.7 on Vertex AI: Added Claude Opus 4.7 to the Vertex AI provider for Anthropic's newest flagship reasoning model.", - "chat:announcement.release.checkpointNav": - "Previous Checkpoint Navigation: Added controls in chat to jump back through prior checkpoints, with full i18n support.", - "chat:announcement.handoff.heading": "The Roo Code plugin is not going away.", + "chat:announcement.handoff.heading": "Roo is back as Zoo Code.", + "chat:announcement.handoff.readMore": "Read the Zoo announcement", + "chat:announcement.zooMigration.heading": "Prepare your Zoo migration", + "chat:announcement.zooMigration.description": + "Create a handoff bundle from Roo's local storage. Roo keeps your original data in place and asks before including API keys.", + "chat:announcement.zooMigration.prepareButton": "Prepare Migration", + "chat:announcement.zooMigration.installButton": "Install Zoo", + "chat:announcement.zooMigration.detailsHeading": "What this does:", + "chat:announcement.zooMigration.copiesData": + "Copies your Roo settings and task history into a Zoo migration folder.", + "chat:announcement.zooMigration.keepsOriginals": + "Leaves your existing Roo folders untouched so you can verify the handoff first.", + "chat:announcement.zooMigration.apiKeysOptIn": + "Includes provider profiles and API keys only if you explicitly choose to include them.", } if (key === "chat:announcement.title") { - return `Roo Code ${options?.version ?? ""} Released` + return `Roo Code ${options?.version ?? ""}: Move to Zoo Code` } return translations[key] ?? key @@ -52,23 +65,15 @@ vi.mock("@src/i18n/TranslationContext", () => ({ })) describe("Announcement", () => { - it("renders the v3.53.0 announcement title and highlights", () => { + it("renders the v3.53.1 Zoo migration announcement", () => { render() - expect(screen.getByText("Roo Code 3.53.0 Released")).toBeInTheDocument() - expect( - screen.getByText( - "GPT-5.5 via OpenAI Codex: Added GPT-5.5 support in the OpenAI Codex provider so you can use the latest model straight from Roo Code.", - ), - ).toBeInTheDocument() - expect( - screen.getByText( - "Claude Opus 4.7 on Vertex AI: Added Claude Opus 4.7 to the Vertex AI provider for Anthropic's newest flagship reasoning model.", - ), - ).toBeInTheDocument() + expect(screen.getByText("Roo Code 3.53.1: Move to Zoo Code")).toBeInTheDocument() + expect(screen.getByText("Roo is back as Zoo Code.")).toBeInTheDocument() + expect(screen.getByText("Prepare your Zoo migration")).toBeInTheDocument() expect( screen.getByText( - "Previous Checkpoint Navigation: Added controls in chat to jump back through prior checkpoints, with full i18n support.", + "Create a handoff bundle from Roo's local storage. Roo keeps your original data in place and asks before including API keys.", ), ).toBeInTheDocument() }) @@ -78,4 +83,14 @@ describe("Announcement", () => { expect(screen.getAllByRole("listitem")).toHaveLength(3) }) + + it("posts Zoo migration actions from the announcement", () => { + render() + + screen.getByRole("button", { name: "Prepare Migration" }).click() + expect(vscode.postMessage).toHaveBeenCalledWith({ type: "prepareZooMigration" }) + + screen.getByRole("button", { name: "Install Zoo" }).click() + expect(vscode.postMessage).toHaveBeenCalledWith({ type: "installZooExtension" }) + }) }) diff --git a/webview-ui/src/i18n/locales/ca/chat.json b/webview-ui/src/i18n/locales/ca/chat.json index 889927e8636..fa0fc4efe5b 100644 --- a/webview-ui/src/i18n/locales/ca/chat.json +++ b/webview-ui/src/i18n/locales/ca/chat.json @@ -338,7 +338,7 @@ "timerPrefix": "Aprovació automàtica habilitada. Seleccionant en {{seconds}}s…" }, "announcement": { - "title": "Roo Code {{version}} Llançat", + "title": "Roo Code {{version}}: passa a Zoo Code", "support": "Si us plau, dona suport a Roo Code fent una estrella al nostre GitHub.", "stealthModel": { "feature": "Model stealth GRATUÏT per temps limitat - Code Supernova: Ara actualitzat amb una finestra de context d'1M tokens! Un model de codificació agèntica versàtil que suporta entrades d'imatges, disponible a través de Roo Code Cloud.", @@ -348,9 +348,9 @@ "goToSettingsButton": "Anar a Configuració" }, "handoff": { - "heading": "El plugin Roo Code no desapareix.", - "description": "Potser has vist l'anunci recent que Roo Code ha arribat a 3 milions d'instal·lacions i que l'equip original es bolca completament amb Roomote. Sabem que aquesta notícia ha estat dura per a molts de vosaltres. Aquest plugin ens importa molt, tant a nosaltres com a tu, i t'escoltem. La bona notícia: un equip de la comunitat ha donat un pas endavant per portar Roo Code cap endavant, i estem treballant amb ells en un relleu oficial perquè el plugin en què confies continuï rebent manteniment i millores.", - "readMore": "Llegir l'anunci original de Matt Rubens" + "heading": "Roo torna com a Zoo Code.", + "description": "Aquesta darrera actualització de Roo Code t’ajuda a moure la configuració local a la nova extensió Zoo Code mantinguda per la comunitat. Roo continua instal·lat prou temps per preparar un paquet de traspàs per a Zoo.", + "readMore": "Llegeix l’anunci de Zoo" }, "release": { "heading": "Què hi ha de nou:", @@ -363,6 +363,16 @@ "specialized": "Presentem Explainer, Planner i Coder - tres agents al núvol especialitzats per millorar els teus fluxos de treball.", "description": "Els agents treballen junts al núvol i es poden activar des del web o mitjançant Slack.", "tryButton": "Prova els Agents al Núvol" + }, + "zooMigration": { + "heading": "Prepara la migració a Zoo", + "description": "Crea un paquet de traspàs des de l’emmagatzematge local de Roo. Roo manté les dades originals al seu lloc i et demana permís abans d’incloure claus d’API.", + "prepareButton": "Prepara la migració", + "installButton": "Instal·la Zoo", + "detailsHeading": "Què fa això:", + "copiesData": "Copia la configuració de Roo i l’historial de tasques a una carpeta de migració de Zoo.", + "keepsOriginals": "Deixa intactes les carpetes existents de Roo perquè puguis verificar primer el traspàs.", + "apiKeysOptIn": "Inclou perfils de proveïdor i claus d’API només si tries explícitament incloure’ls." } }, "costs": { diff --git a/webview-ui/src/i18n/locales/de/chat.json b/webview-ui/src/i18n/locales/de/chat.json index 8212bc0ab00..200a8edc6cb 100644 --- a/webview-ui/src/i18n/locales/de/chat.json +++ b/webview-ui/src/i18n/locales/de/chat.json @@ -338,7 +338,7 @@ "timerPrefix": "Automatische Genehmigung aktiviert. Wähle in {{seconds}}s…" }, "announcement": { - "title": "Roo Code {{version}} veröffentlicht", + "title": "Roo Code {{version}}: Zu Zoo Code wechseln", "support": "Bitte unterstütze Roo Code, indem du uns auf GitHub einen Stern gibst.", "stealthModel": { "feature": "Zeitlich begrenztes KOSTENLOSES Stealth-Modell - Code Supernova: Jetzt mit einem 1M Token Kontextfenster erweitert! Ein vielseitiges agentisches Coding-Modell, das Bildeingaben unterstützt und über Roo Code Cloud zugänglich ist.", @@ -348,9 +348,9 @@ "goToSettingsButton": "Zu den Einstellungen" }, "handoff": { - "heading": "Das Roo Code-Plugin verschwindet nicht.", - "description": "Du hast vielleicht die neuliche Ankündigung gesehen, dass Roo Code 3 Millionen Installationen erreicht hat und das ursprüngliche Team sich voll auf Roomote konzentriert. Wir wissen, dass diese Nachricht für viele von euch schwer war. Dieses Plugin bedeutet uns und dir sehr viel, und wir hören dich. Die gute Nachricht: ein Community-Team hat sich bereit erklärt, Roo Code weiterzuführen, und wir arbeiten mit ihnen an einer offiziellen Übergabe, damit das Plugin, auf das du dich verlässt, weiterhin gepflegt und verbessert wird.", - "readMore": "Die ursprüngliche Ankündigung von Matt Rubens lesen" + "heading": "Roo ist als Zoo Code zurück.", + "description": "Dieses letzte Roo Code-Update hilft dir, deine lokale Einrichtung zur neuen, von der Community gepflegten Zoo Code-Erweiterung zu verschieben. Roo bleibt lange genug installiert, um ein Übergabepaket für Zoo vorzubereiten.", + "readMore": "Zoo-Ankündigung lesen" }, "release": { "heading": "Was ist neu:", @@ -363,6 +363,16 @@ "specialized": "Wir stellen Explainer, Planner und Coder vor - drei spezialisierte Cloud-Agenten zur Verbesserung deiner Workflows.", "description": "Die Agenten arbeiten zusammen in der Cloud und können vom Web oder über Slack ausgelöst werden.", "tryButton": "Probiere Cloud-Agenten aus" + }, + "zooMigration": { + "heading": "Bereite deine Zoo-Migration vor", + "description": "Erstelle ein Übergabepaket aus Roos lokalem Speicher. Roo lässt deine Originaldaten an Ort und Stelle und fragt nach, bevor API-Schlüssel eingeschlossen werden.", + "prepareButton": "Migration vorbereiten", + "installButton": "Zoo installieren", + "detailsHeading": "Was dabei passiert:", + "copiesData": "Kopiert deine Roo-Einstellungen und deinen Aufgabenverlauf in einen Zoo-Migrationsordner.", + "keepsOriginals": "Lässt deine vorhandenen Roo-Ordner unverändert, damit du die Übergabe zuerst prüfen kannst.", + "apiKeysOptIn": "Schließt Anbieterprofile und API-Schlüssel nur ein, wenn du dich ausdrücklich dafür entscheidest." } }, "costs": { diff --git a/webview-ui/src/i18n/locales/en/chat.json b/webview-ui/src/i18n/locales/en/chat.json index 6f1badac1f1..eae7bb0f3ba 100644 --- a/webview-ui/src/i18n/locales/en/chat.json +++ b/webview-ui/src/i18n/locales/en/chat.json @@ -357,7 +357,7 @@ "triggerLabelAll": "BRRR" }, "announcement": { - "title": "Roo Code {{version}} Released", + "title": "Roo Code {{version}}: Move to Zoo Code", "support": "Please support Roo Code by starring us on GitHub.", "stealthModel": { "feature": "Limited-time FREE stealth model - Code Supernova: Now upgraded with a 1M token context window! A versatile agentic coding model that supports image inputs, accessible through Roo Code Cloud.", @@ -367,9 +367,9 @@ "goToSettingsButton": "Go to Settings" }, "handoff": { - "heading": "The Roo Code plugin is not going away.", - "description": "You may have seen the recent announcement that Roo Code hit 3 million installs and the original team is going all-in on Roomote. We know that news was hard for a lot of you. This plugin means a lot to us and to you, and we hear you. The good news: a community team has stepped up to carry Roo Code forward, and we're working with them on an official handoff so the plugin you rely on keeps getting maintained and improved.", - "readMore": "Read the original announcement from Matt Rubens" + "heading": "Roo is back as Zoo Code.", + "description": "This final Roo Code update helps you move your local setup to the new Zoo Code extension maintained by the community. Roo stays installed long enough to prepare a handoff bundle for Zoo.", + "readMore": "Read the Zoo announcement" }, "release": { "heading": "What's New:", @@ -382,6 +382,16 @@ "specialized": "Introducing Explainer, Planner, and Coder - three specialized cloud agents to enhance your workflows.", "description": "The agents work together in the cloud and can be triggered from the web or through Slack.", "tryButton": "Try Cloud Agents" + }, + "zooMigration": { + "heading": "Prepare your Zoo migration", + "description": "Create a handoff bundle from Roo's local storage. Roo keeps your original data in place and asks before including API keys.", + "prepareButton": "Prepare Migration", + "installButton": "Install Zoo", + "detailsHeading": "What this does:", + "copiesData": "Copies your Roo settings and task history into a Zoo migration folder.", + "keepsOriginals": "Leaves your existing Roo folders untouched so you can verify the handoff first.", + "apiKeysOptIn": "Includes provider profiles and API keys only if you explicitly choose to include them." } }, "reasoning": { diff --git a/webview-ui/src/i18n/locales/es/chat.json b/webview-ui/src/i18n/locales/es/chat.json index 61f398ea6a6..95f02394c4c 100644 --- a/webview-ui/src/i18n/locales/es/chat.json +++ b/webview-ui/src/i18n/locales/es/chat.json @@ -338,7 +338,7 @@ "timerPrefix": "Aprobación automática habilitada. Seleccionando en {{seconds}}s…" }, "announcement": { - "title": "Roo Code {{version}} publicado", + "title": "Roo Code {{version}}: pásate a Zoo Code", "support": "Por favor, apoya a Roo Code dándonos una estrella en GitHub.", "stealthModel": { "feature": "Modelo stealth GRATUITO por tiempo limitado - Code Supernova: ¡Ahora actualizado con una ventana de contexto de 1M tokens! Un modelo de codificación agéntica versátil que soporta entradas de imágenes, accesible a través de Roo Code Cloud.", @@ -348,9 +348,9 @@ "goToSettingsButton": "Ir a Configuración" }, "handoff": { - "heading": "El plugin de Roo Code no va a desaparecer.", - "description": "Puede que hayas visto el anuncio reciente de que Roo Code ha llegado a 3 millones de instalaciones y que el equipo original se está volcando por completo en Roomote. Sabemos que esa noticia fue dura para muchos de vosotros. Este plugin significa mucho para nosotros y para ti, y te escuchamos. La buena noticia: un equipo de la comunidad ha dado un paso adelante para seguir adelante con Roo Code, y estamos trabajando con ellos en un relevo oficial para que el plugin del que dependes siga recibiendo mantenimiento y mejoras.", - "readMore": "Leer el anuncio original de Matt Rubens" + "heading": "Roo vuelve como Zoo Code.", + "description": "Esta última actualización de Roo Code te ayuda a mover tu configuración local a la nueva extensión Zoo Code mantenida por la comunidad. Roo seguirá instalado el tiempo suficiente para preparar un paquete de traspaso para Zoo.", + "readMore": "Leer el anuncio de Zoo" }, "release": { "heading": "Qué hay de nuevo:", @@ -363,6 +363,16 @@ "specialized": "Presentamos Explainer, Planner y Coder - tres agentes en la nube especializados para mejorar tus flujos de trabajo.", "description": "Los agentes trabajan juntos en la nube y se pueden activar desde la web o mediante Slack.", "tryButton": "Prueba los Agentes en la Nube" + }, + "zooMigration": { + "heading": "Prepara tu migración a Zoo", + "description": "Crea un paquete de traspaso desde el almacenamiento local de Roo. Roo mantiene tus datos originales en su sitio y te pregunta antes de incluir claves de API.", + "prepareButton": "Preparar migración", + "installButton": "Instalar Zoo", + "detailsHeading": "Qué hace esto:", + "copiesData": "Copia tu configuración de Roo y el historial de tareas en una carpeta de migración de Zoo.", + "keepsOriginals": "Deja intactas tus carpetas actuales de Roo para que puedas verificar primero el traspaso.", + "apiKeysOptIn": "Incluye perfiles de proveedor y claves de API solo si eliges incluirlos explícitamente." } }, "costs": { diff --git a/webview-ui/src/i18n/locales/fr/chat.json b/webview-ui/src/i18n/locales/fr/chat.json index 151aaf578bb..87d466355a8 100644 --- a/webview-ui/src/i18n/locales/fr/chat.json +++ b/webview-ui/src/i18n/locales/fr/chat.json @@ -338,7 +338,7 @@ "timerPrefix": "Approbation automatique activée. Sélection dans {{seconds}}s…" }, "announcement": { - "title": "Roo Code {{version}} est sortie", + "title": "Roo Code {{version}} : passer à Zoo Code", "support": "Soutiens Roo Code en nous donnant une étoile sur GitHub.", "stealthModel": { "feature": "Modèle stealth GRATUIT pour une durée limitée - Code Supernova : Maintenant amélioré avec une fenêtre de contexte de 1M tokens ! Un modèle de codage agentique polyvalent qui prend en charge les entrées d'images, accessible via Roo Code Cloud.", @@ -348,9 +348,9 @@ "goToSettingsButton": "Aller aux Paramètres" }, "handoff": { - "heading": "L'extension Roo Code ne va pas disparaître.", - "description": "Tu as peut-être vu l'annonce récente : Roo Code a franchi les 3 millions d'installations et l'équipe d'origine se consacre désormais entièrement à Roomote. On sait que cette nouvelle a été difficile pour beaucoup d'entre vous. Cette extension compte énormément pour nous comme pour toi, et on t'entend. La bonne nouvelle : une équipe de la communauté a décidé de prendre le relais pour faire avancer Roo Code, et on travaille avec eux sur une transmission officielle pour que l'extension sur laquelle tu comptes continue d'être maintenue et améliorée.", - "readMore": "Lire l'annonce originale de Matt Rubens" + "heading": "Roo revient sous le nom Zoo Code.", + "description": "Cette dernière mise à jour de Roo Code t’aide à déplacer ta configuration locale vers la nouvelle extension Zoo Code maintenue par la communauté. Roo reste installé assez longtemps pour préparer un paquet de transfert pour Zoo.", + "readMore": "Lire l’annonce de Zoo" }, "release": { "heading": "Quoi de neuf :", @@ -363,6 +363,16 @@ "specialized": "Présentation d'Explainer, Planner et Coder - trois agents cloud spécialisés pour améliorer tes workflows.", "description": "Les agents travaillent ensemble dans le cloud et peuvent être déclenchés depuis le web ou via Slack.", "tryButton": "Essayer les Agents Cloud" + }, + "zooMigration": { + "heading": "Prépare ta migration vers Zoo", + "description": "Crée un paquet de transfert depuis le stockage local de Roo. Roo laisse tes données d’origine en place et te demande confirmation avant d’inclure les clés API.", + "prepareButton": "Préparer la migration", + "installButton": "Installer Zoo", + "detailsHeading": "Ce que cela fait :", + "copiesData": "Copie tes paramètres Roo et ton historique de tâches dans un dossier de migration Zoo.", + "keepsOriginals": "Laisse tes dossiers Roo existants intacts pour que tu puisses vérifier le transfert d’abord.", + "apiKeysOptIn": "Inclut les profils de fournisseurs et les clés API uniquement si tu choisis explicitement de les inclure." } }, "costs": { diff --git a/webview-ui/src/i18n/locales/hi/chat.json b/webview-ui/src/i18n/locales/hi/chat.json index 6529cc068e2..f303d0ebd2d 100644 --- a/webview-ui/src/i18n/locales/hi/chat.json +++ b/webview-ui/src/i18n/locales/hi/chat.json @@ -338,7 +338,7 @@ "timerPrefix": "ऑटो-अनुमोदन सक्षम है। {{seconds}}s में चयन किया जा रहा है…" }, "announcement": { - "title": "Roo Code {{version}} रिलीज़ हुआ", + "title": "Roo Code {{version}}: Zoo Code पर जाएँ", "support": "कृपया GitHub पर हमें स्टार देकर Roo Code का समर्थन करें।", "stealthModel": { "feature": "सीमित समय के लिए मुफ़्त स्टेल्थ मॉडल - Code Supernova: अब 1M Token संदर्भ विंडो के साथ अपग्रेड हुआ! एक बहुमुखी एजेंटिक कोडिंग मॉडल जो छवि इनपुट का समर्थन करता है, Roo Code Cloud के माध्यम से उपलब्ध।", @@ -348,9 +348,9 @@ "goToSettingsButton": "सेटिंग्स पर जाएं" }, "handoff": { - "heading": "Roo Code plugin कहीं नहीं जा रहा है।", - "description": "आपने शायद हाल ही की घोषणा देखी होगी कि Roo Code ने 30 लाख installs पार कर लिए हैं और मूल टीम पूरी तरह Roomote पर focus कर रही है। हम जानते हैं कि यह खबर आप में से कई के लिए कठिन थी। यह plugin हमारे और आपके लिए बहुत मायने रखता है, और हम आपकी बात सुन रहे हैं। अच्छी खबर: एक community team ने Roo Code को आगे ले जाने की ज़िम्मेदारी ली है, और हम उनके साथ एक आधिकारिक handoff पर काम कर रहे हैं ताकि जिस plugin पर आप भरोसा करते हैं, उसका maintenance और improvement जारी रहे।", - "readMore": "Matt Rubens की मूल घोषणा पढ़ें" + "heading": "Roo अब Zoo Code के रूप में वापस है।", + "description": "यह अंतिम Roo Code अपडेट आपके स्थानीय सेटअप को समुदाय द्वारा मेंटेन किए जा रहे नए Zoo Code एक्सटेंशन में ले जाने में मदद करता है। Roo इतना समय इंस्टॉल रहेगा कि Zoo के लिए handoff bundle तैयार कर सके।", + "readMore": "Zoo घोषणा पढ़ें" }, "release": { "heading": "नया क्या है:", @@ -363,6 +363,16 @@ "specialized": "Explainer, Planner, और Coder की शुरुआत - तीन विशेष क्लाउड एजेंट आपके वर्कफ़्लो को बेहतर बनाने के लिए।", "description": "एजेंट क्लाउड में एक साथ काम करते हैं और web या Slack के माध्यम से ट्रिगर किए जा सकते हैं।", "tryButton": "क्लाउड एजेंट आज़माएं" + }, + "zooMigration": { + "heading": "अपना Zoo migration तैयार करें", + "description": "Roo के local storage से handoff bundle बनाएँ। Roo आपका मूल डेटा वहीं रखता है और API keys शामिल करने से पहले पूछता है।", + "prepareButton": "Migration तैयार करें", + "installButton": "Zoo इंस्टॉल करें", + "detailsHeading": "यह क्या करता है:", + "copiesData": "आपकी Roo settings और task history को Zoo migration folder में कॉपी करता है।", + "keepsOriginals": "आपके मौजूदा Roo folders को बिना बदले छोड़ता है ताकि आप पहले handoff जाँच सकें।", + "apiKeysOptIn": "Provider profiles और API keys तभी शामिल करता है जब आप साफ़ तौर पर उन्हें शामिल करना चुनते हैं।" } }, "costs": { diff --git a/webview-ui/src/i18n/locales/id/chat.json b/webview-ui/src/i18n/locales/id/chat.json index 57500934032..ac9250f212d 100644 --- a/webview-ui/src/i18n/locales/id/chat.json +++ b/webview-ui/src/i18n/locales/id/chat.json @@ -367,7 +367,7 @@ "triggerLabelAll": "BRRR" }, "announcement": { - "title": "Roo Code {{version}} Dirilis", + "title": "Roo Code {{version}}: pindah ke Zoo Code", "support": "Dukung Roo Code dengan memberi kami bintang di GitHub.", "stealthModel": { "feature": "Model stealth GRATIS waktu terbatas - Code Supernova: Sekarang diupgrade dengan jendela konteks 1M token! Model coding agentik serbaguna yang mendukung input gambar, tersedia melalui Roo Code Cloud.", @@ -377,9 +377,9 @@ "goToSettingsButton": "Pergi ke Pengaturan" }, "handoff": { - "heading": "Plugin Roo Code tidak akan hilang.", - "description": "Kamu mungkin sudah melihat pengumuman baru-baru ini bahwa Roo Code mencapai 3 juta instalasi dan tim aslinya sepenuhnya fokus ke Roomote. Kami tahu berita itu berat bagi banyak dari kalian. Plugin ini sangat berarti bagi kami dan bagi kamu, dan kami mendengarmu. Kabar baiknya: sebuah tim komunitas telah maju untuk melanjutkan Roo Code, dan kami sedang bekerja sama dengan mereka untuk serah terima resmi agar plugin yang kamu andalkan tetap dirawat dan ditingkatkan.", - "readMore": "Baca pengumuman asli dari Matt Rubens" + "heading": "Roo kembali sebagai Zoo Code.", + "description": "Update terakhir Roo Code ini membantumu memindahkan setup lokal ke ekstensi Zoo Code baru yang dikelola komunitas. Roo tetap terpasang cukup lama untuk menyiapkan paket handoff bagi Zoo.", + "readMore": "Baca pengumuman Zoo" }, "release": { "heading": "Yang Baru:", @@ -392,6 +392,16 @@ "specialized": "Memperkenalkan Explainer, Planner, dan Coder - tiga agen cloud khusus untuk meningkatkan alur kerja Anda.", "description": "Agen bekerja bersama di cloud dan dapat dipicu dari web atau melalui Slack.", "tryButton": "Coba Agen Cloud" + }, + "zooMigration": { + "heading": "Siapkan migrasi Zoo kamu", + "description": "Buat paket handoff dari penyimpanan lokal Roo. Roo mempertahankan data asli di tempatnya dan meminta izin sebelum menyertakan API key.", + "prepareButton": "Siapkan Migrasi", + "installButton": "Instal Zoo", + "detailsHeading": "Yang dilakukan:", + "copiesData": "Menyalin pengaturan Roo dan riwayat tugas ke folder migrasi Zoo.", + "keepsOriginals": "Membiarkan folder Roo yang ada tetap utuh agar kamu bisa memeriksa handoff terlebih dulu.", + "apiKeysOptIn": "Menyertakan profil provider dan API key hanya jika kamu secara eksplisit memilih untuk menyertakannya." } }, "reasoning": { diff --git a/webview-ui/src/i18n/locales/it/chat.json b/webview-ui/src/i18n/locales/it/chat.json index 6bd860c0e1d..c3a998120f9 100644 --- a/webview-ui/src/i18n/locales/it/chat.json +++ b/webview-ui/src/i18n/locales/it/chat.json @@ -338,7 +338,7 @@ "timerPrefix": "Approvazione automatica abilitata. Selezione tra {{seconds}}s…" }, "announcement": { - "title": "Rilasciato Roo Code {{version}}", + "title": "Roo Code {{version}}: passa a Zoo Code", "support": "Sostieni Roo Code lasciandoci una stella su GitHub.", "stealthModel": { "feature": "Modello stealth GRATUITO per tempo limitato - Code Supernova: Ora potenziato con una finestra di contesto da 1M token! Un modello di codificazione agentiva versatile che supporta input di immagini, accessibile tramite Roo Code Cloud.", @@ -348,9 +348,9 @@ "goToSettingsButton": "Vai alle Impostazioni" }, "handoff": { - "heading": "Il plugin Roo Code non sta per sparire.", - "description": "Potresti aver visto l'annuncio recente: Roo Code ha raggiunto 3 milioni di installazioni e il team originale si sta concentrando completamente su Roomote. Sappiamo che questa notizia è stata dura per molti di voi. Questo plugin significa tanto per noi e per te, e ti ascoltiamo. La buona notizia: un team della community si è fatto avanti per portare avanti Roo Code, e stiamo lavorando con loro a un passaggio di consegne ufficiale, così il plugin su cui conti continuerà a essere mantenuto e migliorato.", - "readMore": "Leggi l'annuncio originale di Matt Rubens" + "heading": "Roo torna come Zoo Code.", + "description": "Questo ultimo aggiornamento di Roo Code ti aiuta a spostare la configurazione locale nella nuova estensione Zoo Code mantenuta dalla community. Roo resta installato il tempo necessario per preparare un pacchetto di handoff per Zoo.", + "readMore": "Leggi l’annuncio di Zoo" }, "release": { "heading": "Novità:", @@ -363,6 +363,16 @@ "specialized": "Presentazione di Explainer, Planner e Coder - tre agenti cloud specializzati per migliorare i tuoi flussi di lavoro.", "description": "Gli agenti lavorano insieme nel cloud e possono essere attivati dal web o tramite Slack.", "tryButton": "Prova gli Agenti Cloud" + }, + "zooMigration": { + "heading": "Prepara la migrazione a Zoo", + "description": "Crea un pacchetto di handoff dallo storage locale di Roo. Roo lascia i dati originali al loro posto e chiede conferma prima di includere le chiavi API.", + "prepareButton": "Prepara migrazione", + "installButton": "Installa Zoo", + "detailsHeading": "Cosa fa:", + "copiesData": "Copia le impostazioni di Roo e la cronologia delle attività in una cartella di migrazione Zoo.", + "keepsOriginals": "Lascia intatte le cartelle Roo esistenti così puoi verificare prima l’handoff.", + "apiKeysOptIn": "Include profili provider e chiavi API solo se scegli esplicitamente di includerli." } }, "costs": { diff --git a/webview-ui/src/i18n/locales/ja/chat.json b/webview-ui/src/i18n/locales/ja/chat.json index 8e5889c853f..d3040872829 100644 --- a/webview-ui/src/i18n/locales/ja/chat.json +++ b/webview-ui/src/i18n/locales/ja/chat.json @@ -338,7 +338,7 @@ "timerPrefix": "自動承認が有効です。{{seconds}}秒後に選択中…" }, "announcement": { - "title": "Roo Code {{version}} リリース", + "title": "Roo Code {{version}}: Zoo Code へ移行", "support": "GitHubでスターを付けてRoo Codeを応援してください。", "stealthModel": { "feature": "期間限定無料ステルスモデル - Code Supernova:1Mトークンコンテキストウィンドウにアップグレード!画像入力をサポートする多目的エージェントコーディングモデル、Roo Code Cloud 経由で利用可能。", @@ -348,9 +348,9 @@ "goToSettingsButton": "設定に移動" }, "handoff": { - "heading": "Roo Code プラグインはなくなりません。", - "description": "Roo Code のインストール数が300万に達し、元のチームが Roomote に全力で取り組むという先日のお知らせをご覧になったかもしれません。この知らせが多くの方にとって辛いものだったことは承知しています。このプラグインは私たちにとっても、あなたにとっても大切な存在であり、皆さんの声はしっかり届いています。良いお知らせです:コミュニティチームが Roo Code を受け継いで前進させることを引き受けてくれました。頼りにしているこのプラグインが引き続きメンテナンスと改善を受けられるよう、私たちは彼らと公式な引き継ぎを進めています。", - "readMore": "Matt Rubens による最初のお知らせを読む" + "heading": "Roo は Zoo Code として戻ってきました。", + "description": "この最後の Roo Code アップデートは、ローカル設定をコミュニティがメンテナンスする新しい Zoo Code 拡張機能へ移すためのものです。Roo は Zoo 向けのハンドオフバンドルを準備できるよう、しばらくインストールされたままになります。", + "readMore": "Zoo の発表を読む" }, "release": { "heading": "新機能:", @@ -363,6 +363,16 @@ "specialized": "ExplainerPlannerCoder の 3 つの専門クラウドエージェントを紹介します。ワークフローを強化します。", "description": "エージェントはクラウドで連携して動作し、Web または Slack からトリガーできます。", "tryButton": "クラウドエージェントを試す" + }, + "zooMigration": { + "heading": "Zoo への移行を準備", + "description": "Roo のローカルストレージからハンドオフバンドルを作成します。Roo は元データをそのまま残し、API キーを含める前に確認します。", + "prepareButton": "移行を準備", + "installButton": "Zoo をインストール", + "detailsHeading": "実行されること:", + "copiesData": "Roo の設定とタスク履歴を Zoo 移行フォルダーにコピーします。", + "keepsOriginals": "既存の Roo フォルダーは変更せず、先にハンドオフ内容を確認できます。", + "apiKeysOptIn": "プロバイダープロファイルと API キーは、明示的に選択した場合にのみ含めます。" } }, "costs": { diff --git a/webview-ui/src/i18n/locales/ko/chat.json b/webview-ui/src/i18n/locales/ko/chat.json index 42555e647d2..535d6fbeb88 100644 --- a/webview-ui/src/i18n/locales/ko/chat.json +++ b/webview-ui/src/i18n/locales/ko/chat.json @@ -338,7 +338,7 @@ "timerPrefix": "자동 승인 활성화됨. {{seconds}}초 후 선택 중…" }, "announcement": { - "title": "Roo Code {{version}} 출시", + "title": "Roo Code {{version}}: Zoo Code로 이동", "support": "GitHub에서 별표를 눌러 Roo Code를 응원해 주세요.", "stealthModel": { "feature": "기간 한정 무료 스텔스 모델 - Code Supernova: 이제 1M 토큰 컨텍스트 윈도우로 업그레이드되었습니다! 이미지 입력을 지원하는 다목적 에이전틱 코딩 모델, Roo Code Cloud를 통해 이용 가능.", @@ -348,9 +348,9 @@ "goToSettingsButton": "설정으로 이동" }, "handoff": { - "heading": "Roo Code 플러그인은 사라지지 않아요.", - "description": "Roo Code가 300만 설치를 돌파했고, 원래 팀이 Roomote에 전념하기로 했다는 최근 발표를 보셨을 거예요. 많은 분들께 이 소식이 힘들게 다가왔다는 걸 알고 있어요. 이 플러그인은 저희와 여러분 모두에게 큰 의미가 있고, 여러분의 목소리를 듣고 있어요. 좋은 소식이 있어요: 커뮤니티 팀이 Roo Code를 계속 이어가기로 나섰어요. 여러분이 의지하는 이 플러그인이 계속 유지 관리되고 개선될 수 있도록, 저희는 그들과 공식적인 인수인계를 진행하고 있어요.", - "readMore": "Matt Rubens의 원본 발표 읽기" + "heading": "Roo가 Zoo Code로 돌아왔습니다.", + "description": "이번 마지막 Roo Code 업데이트는 로컬 설정을 커뮤니티가 유지 관리하는 새 Zoo Code 확장으로 옮길 수 있게 도와줍니다. Roo는 Zoo용 handoff bundle을 준비할 수 있도록 충분한 기간 동안 설치된 상태로 남습니다.", + "readMore": "Zoo 공지 읽기" }, "release": { "heading": "새로운 기능:", @@ -363,6 +363,16 @@ "specialized": "Explainer, Planner, Coder 세 가지 전문 클라우드 에이전트를 소개합니다. 워크플로우를 향상시킵니다.", "description": "에이전트는 클라우드에서 함께 작동하며 웹 또는 Slack을 통해 트리거할 수 있습니다.", "tryButton": "클라우드 에이전트 사용해보기" + }, + "zooMigration": { + "heading": "Zoo migration 준비", + "description": "Roo의 local storage에서 handoff bundle을 만듭니다. Roo는 원본 데이터를 그대로 두고 API key를 포함하기 전에 확인합니다.", + "prepareButton": "Migration 준비", + "installButton": "Zoo 설치", + "detailsHeading": "수행되는 작업:", + "copiesData": "Roo 설정과 작업 기록을 Zoo migration folder로 복사합니다.", + "keepsOriginals": "기존 Roo 폴더는 그대로 두어 먼저 handoff를 확인할 수 있습니다.", + "apiKeysOptIn": "Provider profile과 API key는 명시적으로 포함을 선택한 경우에만 포함합니다." } }, "costs": { diff --git a/webview-ui/src/i18n/locales/nl/chat.json b/webview-ui/src/i18n/locales/nl/chat.json index b6325e17081..0c010e05706 100644 --- a/webview-ui/src/i18n/locales/nl/chat.json +++ b/webview-ui/src/i18n/locales/nl/chat.json @@ -311,7 +311,7 @@ "triggerLabelAll": "BRRR" }, "announcement": { - "title": "Roo Code {{version}} uitgebracht", + "title": "Roo Code {{version}}: stap over naar Zoo Code", "support": "Steun Roo Code door ons een ster te geven op GitHub.", "stealthModel": { "feature": "Beperkt tijd GRATIS stealth model - Code Supernova: Nu geüpgraded met een 1M token contextvenster! Een veelzijdig agentisch codeermodel dat beeldinvoer ondersteunt, beschikbaar via Roo Code Cloud.", @@ -321,9 +321,9 @@ "goToSettingsButton": "Ga naar Instellingen" }, "handoff": { - "heading": "De Roo Code-plugin gaat niet weg.", - "description": "Je hebt misschien de recente aankondiging gezien dat Roo Code 3 miljoen installaties heeft bereikt en het oorspronkelijke team zich volledig richt op Roomote. We weten dat dat nieuws voor velen van jullie moeilijk was. Deze plugin betekent veel voor ons en voor jou, en we horen je. Het goede nieuws: een community-team heeft zich aangemeld om Roo Code voort te zetten, en we werken samen aan een officiële overdracht, zodat de plugin waar je op vertrouwt onderhouden en verbeterd blijft worden.", - "readMore": "Lees de originele aankondiging van Matt Rubens" + "heading": "Roo is terug als Zoo Code.", + "description": "Deze laatste Roo Code-update helpt je je lokale setup te verplaatsen naar de nieuwe Zoo Code-extensie die door de community wordt onderhouden. Roo blijft lang genoeg geïnstalleerd om een overdrachtspakket voor Zoo klaar te zetten.", + "readMore": "Lees de Zoo-aankondiging" }, "release": { "heading": "Wat is er nieuw:", @@ -336,6 +336,16 @@ "specialized": "Introductie van Explainer, Planner en Coder - drie gespecialiseerde cloud-agents om je workflows te verbeteren.", "description": "De agents werken samen in de cloud en kunnen worden geactiveerd vanaf het web of via Slack.", "tryButton": "Probeer Cloud-agents" + }, + "zooMigration": { + "heading": "Bereid je Zoo-migratie voor", + "description": "Maak een overdrachtspakket vanuit Roo’s lokale opslag. Roo laat je oorspronkelijke data staan en vraagt toestemming voordat API-sleutels worden meegenomen.", + "prepareButton": "Migratie voorbereiden", + "installButton": "Zoo installeren", + "detailsHeading": "Wat dit doet:", + "copiesData": "Kopieert je Roo-instellingen en taakgeschiedenis naar een Zoo-migratiemap.", + "keepsOriginals": "Laat je bestaande Roo-mappen ongemoeid zodat je de overdracht eerst kunt controleren.", + "apiKeysOptIn": "Neemt providerprofielen en API-sleutels alleen mee als je daar expliciet voor kiest." } }, "reasoning": { diff --git a/webview-ui/src/i18n/locales/pl/chat.json b/webview-ui/src/i18n/locales/pl/chat.json index c377a78a5be..ca8ecee268a 100644 --- a/webview-ui/src/i18n/locales/pl/chat.json +++ b/webview-ui/src/i18n/locales/pl/chat.json @@ -338,7 +338,7 @@ "timerPrefix": "Automatyczne zatwierdzanie włączone. Zaznaczanie za {{seconds}}s…" }, "announcement": { - "title": "Roo Code {{version}} wydany", + "title": "Roo Code {{version}}: przejdź na Zoo Code", "support": "Wesprzyj Roo Code, dając nam gwiazdkę na GitHub.", "stealthModel": { "feature": "Darmowy model stealth na ograniczony czas - Code Supernova: Teraz ulepszony z oknem kontekstu 1M tokenów! Wszechstronny model kodowania agentowego, który obsługuje wprowadzanie obrazów, dostępny przez Roo Code Cloud.", @@ -348,9 +348,9 @@ "goToSettingsButton": "Przejdź do Ustawień" }, "handoff": { - "heading": "Wtyczka Roo Code nie znika.", - "description": "Być może widziałeś niedawne ogłoszenie, że Roo Code osiągnął 3 miliony instalacji, a oryginalny zespół całkowicie skupia się na Roomote. Wiemy, że ta wiadomość była trudna dla wielu z was. Ta wtyczka wiele dla nas i dla ciebie znaczy, i słyszymy was. Dobra wiadomość: zespół społeczności zgłosił się, żeby poprowadzić Roo Code dalej, i pracujemy z nimi nad oficjalnym przekazaniem, żeby wtyczka, na której polegasz, była nadal utrzymywana i ulepszana.", - "readMore": "Przeczytaj oryginalne ogłoszenie Matta Rubensa" + "heading": "Roo wraca jako Zoo Code.", + "description": "Ta ostatnia aktualizacja Roo Code pomaga przenieść lokalną konfigurację do nowego rozszerzenia Zoo Code utrzymywanego przez społeczność. Roo pozostaje zainstalowane wystarczająco długo, aby przygotować pakiet przekazania dla Zoo.", + "readMore": "Przeczytaj ogłoszenie Zoo" }, "release": { "heading": "Co nowego:", @@ -363,6 +363,16 @@ "specialized": "Przedstawiamy Explainer, Planner i Coder - trzech wyspecjalizowanych agentów chmurowych, aby ulepszyć Twoje przepływy pracy.", "description": "Agenci pracują razem w chmurze i mogą być uruchamiani z sieci lub przez Slack.", "tryButton": "Wypróbuj agentów chmurowych" + }, + "zooMigration": { + "heading": "Przygotuj migrację do Zoo", + "description": "Utwórz pakiet przekazania z lokalnego magazynu Roo. Roo zostawia oryginalne dane na miejscu i pyta przed dołączeniem kluczy API.", + "prepareButton": "Przygotuj migrację", + "installButton": "Zainstaluj Zoo", + "detailsHeading": "Co to robi:", + "copiesData": "Kopiuje ustawienia Roo i historię zadań do folderu migracji Zoo.", + "keepsOriginals": "Pozostawia istniejące foldery Roo bez zmian, aby można było najpierw sprawdzić przekazanie.", + "apiKeysOptIn": "Dołącza profile dostawców i klucze API tylko wtedy, gdy wyraźnie wybierzesz ich dołączenie." } }, "costs": { diff --git a/webview-ui/src/i18n/locales/pt-BR/chat.json b/webview-ui/src/i18n/locales/pt-BR/chat.json index fe65244eaf2..07694cfbb5e 100644 --- a/webview-ui/src/i18n/locales/pt-BR/chat.json +++ b/webview-ui/src/i18n/locales/pt-BR/chat.json @@ -338,7 +338,7 @@ "timerPrefix": "Aprovação automática ativada. Selecionando em {{seconds}}s…" }, "announcement": { - "title": "Roo Code {{version}} Lançado", + "title": "Roo Code {{version}}: migre para o Zoo Code", "support": "Apoie o Roo Code nos dando uma estrela no GitHub.", "stealthModel": { "feature": "Modelo stealth GRATUITO por tempo limitado - Code Supernova: Agora atualizado com uma janela de contexto de 1M tokens! Um modelo de codificação agêntica versátil que suporta entradas de imagem, acessível através do Roo Code Cloud.", @@ -348,9 +348,9 @@ "goToSettingsButton": "Ir para Configurações" }, "handoff": { - "heading": "O plugin Roo Code não vai acabar.", - "description": "Você pode ter visto o anúncio recente de que o Roo Code atingiu 3 milhões de instalações e a equipe original está se dedicando totalmente ao Roomote. Sabemos que essa notícia foi difícil para muitos de vocês. Esse plugin significa muito para nós e para você, e ouvimos o que você tem a dizer. A boa notícia: um time da comunidade assumiu a tarefa de levar o Roo Code adiante, e estamos trabalhando com eles em uma transição oficial para que o plugin em que você confia continue recebendo manutenção e melhorias.", - "readMore": "Leia o anúncio original do Matt Rubens" + "heading": "O Roo voltou como Zoo Code.", + "description": "Esta última atualização do Roo Code ajuda você a mover sua configuração local para a nova extensão Zoo Code mantida pela comunidade. O Roo continua instalado tempo suficiente para preparar um pacote de transferência para o Zoo.", + "readMore": "Ler o anúncio do Zoo" }, "release": { "heading": "Novidades:", @@ -363,6 +363,16 @@ "specialized": "Apresentando Explainer, Planner e Coder - três agentes em nuvem especializados para aprimorar seus fluxos de trabalho.", "description": "Os agentes trabalham juntos na nuvem e podem ser acionados a partir da web ou por meio do Slack.", "tryButton": "Experimentar Agentes em Nuvem" + }, + "zooMigration": { + "heading": "Prepare sua migração para o Zoo", + "description": "Crie um pacote de transferência a partir do armazenamento local do Roo. O Roo mantém seus dados originais no lugar e pergunta antes de incluir chaves de API.", + "prepareButton": "Preparar migração", + "installButton": "Instalar Zoo", + "detailsHeading": "O que isso faz:", + "copiesData": "Copia suas configurações do Roo e o histórico de tarefas para uma pasta de migração do Zoo.", + "keepsOriginals": "Mantém suas pastas atuais do Roo intactas para você verificar a transferência primeiro.", + "apiKeysOptIn": "Inclui perfis de provedores e chaves de API somente se você escolher explicitamente incluí-los." } }, "costs": { diff --git a/webview-ui/src/i18n/locales/ru/chat.json b/webview-ui/src/i18n/locales/ru/chat.json index ca9f9640e75..ee6e85deddf 100644 --- a/webview-ui/src/i18n/locales/ru/chat.json +++ b/webview-ui/src/i18n/locales/ru/chat.json @@ -312,7 +312,7 @@ "triggerLabelAll": "BRRR" }, "announcement": { - "title": "Выпущен Roo Code {{version}}", + "title": "Roo Code {{version}}: переход на Zoo Code", "support": "Поддержите Roo Code, поставив нам звезду на GitHub.", "stealthModel": { "feature": "Бесплатная скрытая модель на ограниченное время - Code Supernova: Теперь обновлена до контекстного окна 1M токенов! Универсальная модель агентного программирования, поддерживающая ввод изображений, доступная через Roo Code Cloud.", @@ -322,9 +322,9 @@ "goToSettingsButton": "Перейти к Настройкам" }, "handoff": { - "heading": "Плагин Roo Code никуда не денется.", - "description": "Возможно, ты видел недавнее объявление о том, что Roo Code достиг 3 миллионов установок, а оригинальная команда полностью переключается на Roomote. Мы понимаем, что эта новость была непростой для многих из вас. Этот плагин много значит для нас и для тебя, и мы тебя слышим. Хорошая новость: команда сообщества взяла на себя задачу продолжать развивать Roo Code, и мы работаем с ними над официальной передачей, чтобы плагин, на который ты полагаешься, продолжал получать поддержку и улучшения.", - "readMore": "Прочитать оригинальное объявление Matt Rubens" + "heading": "Roo возвращается как Zoo Code.", + "description": "Это последнее обновление Roo Code помогает перенести локальную настройку в новое расширение Zoo Code, которое поддерживает сообщество. Roo останется установленным достаточно долго, чтобы подготовить пакет передачи для Zoo.", + "readMore": "Прочитать объявление Zoo" }, "release": { "heading": "Что нового:", @@ -337,6 +337,16 @@ "specialized": "Представляем Explainer, Planner и Coder - трёх специализированных облачных агентов для улучшения ваших рабочих процессов.", "description": "Агенты работают вместе в облаке и могут быть запущены из веб-интерфейса или через Slack.", "tryButton": "Попробовать облачных агентов" + }, + "zooMigration": { + "heading": "Подготовь миграцию в Zoo", + "description": "Создай пакет передачи из локального хранилища Roo. Roo оставляет исходные данные на месте и спрашивает перед включением API-ключей.", + "prepareButton": "Подготовить миграцию", + "installButton": "Установить Zoo", + "detailsHeading": "Что это делает:", + "copiesData": "Копирует настройки Roo и историю задач в папку миграции Zoo.", + "keepsOriginals": "Оставляет существующие папки Roo без изменений, чтобы ты сначала мог проверить передачу.", + "apiKeysOptIn": "Включает профили провайдеров и API-ключи только если ты явно выберешь их включение." } }, "reasoning": { diff --git a/webview-ui/src/i18n/locales/tr/chat.json b/webview-ui/src/i18n/locales/tr/chat.json index c1042ddc169..6711c6f83e0 100644 --- a/webview-ui/src/i18n/locales/tr/chat.json +++ b/webview-ui/src/i18n/locales/tr/chat.json @@ -339,7 +339,7 @@ "timerPrefix": "Otomatik onay etkinleştirildi. {{seconds}}s içinde seçim yapılıyor…" }, "announcement": { - "title": "Roo Code {{version}} Yayınlandı", + "title": "Roo Code {{version}}: Zoo Code’a geç", "support": "GitHub'da yıldız vererek Roo Code'u destekle.", "stealthModel": { "feature": "Sınırlı süre ÜCRETSİZ gizli model - Code Supernova: Artık 1M token bağlam penceresi ile yükseltildi! Görüntü girişlerini destekleyen çok amaçlı acentik kodlama modeli, Roo Code Cloud üzerinden kullanılabilir.", @@ -349,9 +349,9 @@ "goToSettingsButton": "Ayarlar'a Git" }, "handoff": { - "heading": "Roo Code eklentisi bir yere gitmiyor.", - "description": "Roo Code'un 3 milyon kuruluma ulaştığı ve orijinal ekibin tüm enerjisini Roomote'a verdiği son duyuruyu görmüş olabilirsin. Bu haberin birçoğunuz için zor olduğunu biliyoruz. Bu eklenti bizim ve senin için çok şey ifade ediyor ve seni duyuyoruz. İyi haber: bir topluluk ekibi Roo Code'u ileriye taşımak için öne çıktı ve güvendiğin eklentinin bakımı ve geliştirilmesinin sürmesi için onlarla resmi bir devir çalışması yürütüyoruz.", - "readMore": "Matt Rubens'in orijinal duyurusunu oku" + "heading": "Roo, Zoo Code olarak geri döndü.", + "description": "Bu son Roo Code güncellemesi, yerel kurulumunu topluluk tarafından sürdürülen yeni Zoo Code uzantısına taşıman için yardımcı olur. Roo, Zoo için bir handoff paketi hazırlayacak kadar kurulu kalır.", + "readMore": "Zoo duyurusunu oku" }, "release": { "heading": "Yenilikler:", @@ -364,6 +364,16 @@ "specialized": "Explainer, Planner ve Coder tanıtımı - iş akışlarını geliştirmek için üç özel bulut ajanı.", "description": "Ajanlar bulutta birlikte çalışır ve web'den veya Slack üzerinden tetiklenebilir.", "tryButton": "Bulut Ajanlarını Dene" + }, + "zooMigration": { + "heading": "Zoo migration hazırlığını yap", + "description": "Roo’nun local storage alanından bir handoff paketi oluştur. Roo özgün verilerini yerinde bırakır ve API key eklemeden önce sorar.", + "prepareButton": "Migration hazırla", + "installButton": "Zoo yükle", + "detailsHeading": "Bu ne yapar:", + "copiesData": "Roo ayarlarını ve görev geçmişini bir Zoo migration klasörüne kopyalar.", + "keepsOriginals": "Handoff’u önce doğrulayabilmen için mevcut Roo klasörlerini olduğu gibi bırakır.", + "apiKeysOptIn": "Provider profillerini ve API key’leri yalnızca açıkça dahil etmeyi seçersen ekler." } }, "costs": { diff --git a/webview-ui/src/i18n/locales/vi/chat.json b/webview-ui/src/i18n/locales/vi/chat.json index 1e82396685d..494b3d93ac7 100644 --- a/webview-ui/src/i18n/locales/vi/chat.json +++ b/webview-ui/src/i18n/locales/vi/chat.json @@ -339,7 +339,7 @@ "timerPrefix": "Phê duyệt tự động được bật. Chọn trong {{seconds}}s…" }, "announcement": { - "title": "Roo Code {{version}} Đã phát hành", + "title": "Roo Code {{version}}: chuyển sang Zoo Code", "support": "Hãy ủng hộ Roo Code bằng cách gắn sao cho chúng tôi trên GitHub.", "stealthModel": { "feature": "Mô hình stealth MIỄN PHÍ có thời hạn - Code Supernova: Hiện đã được nâng cấp với cửa sổ ngữ cảnh 1M token! Một mô hình lập trình agentic đa năng hỗ trợ đầu vào hình ảnh, có sẵn qua Roo Code Cloud.", @@ -349,9 +349,9 @@ "goToSettingsButton": "Đi tới Cài đặt" }, "handoff": { - "heading": "Plugin Roo Code sẽ không biến mất.", - "description": "Bạn có thể đã thấy thông báo gần đây rằng Roo Code đã đạt 3 triệu lượt cài đặt và đội ngũ ban đầu đang dồn toàn lực cho Roomote. Chúng tôi biết rằng tin này thật khó khăn với nhiều bạn. Plugin này có ý nghĩa rất lớn với chúng tôi và với bạn, và chúng tôi lắng nghe bạn. Tin tốt: một đội ngũ từ cộng đồng đã đứng ra tiếp tục đưa Roo Code đi tiếp, và chúng tôi đang làm việc với họ về việc bàn giao chính thức để plugin mà bạn đang tin cậy tiếp tục được bảo trì và cải thiện.", - "readMore": "Đọc thông báo gốc từ Matt Rubens" + "heading": "Roo trở lại với tên Zoo Code.", + "description": "Bản cập nhật Roo Code cuối cùng này giúp bạn chuyển thiết lập cục bộ sang extension Zoo Code mới do cộng đồng duy trì. Roo vẫn được cài đủ lâu để chuẩn bị gói handoff cho Zoo.", + "readMore": "Đọc thông báo về Zoo" }, "release": { "heading": "Tính năng mới:", @@ -364,6 +364,16 @@ "specialized": "Giới thiệu Explainer, PlannerCoder - ba agent đám mây chuyên biệt để nâng cao quy trình làm việc của bạn.", "description": "Các agent làm việc cùng nhau trên đám mây và có thể được kích hoạt từ web hoặc qua Slack.", "tryButton": "Dùng thử Agents trên Cloud" + }, + "zooMigration": { + "heading": "Chuẩn bị migration sang Zoo", + "description": "Tạo gói handoff từ bộ nhớ cục bộ của Roo. Roo giữ nguyên dữ liệu gốc và hỏi trước khi bao gồm API key.", + "prepareButton": "Chuẩn bị migration", + "installButton": "Cài Zoo", + "detailsHeading": "Việc này sẽ:", + "copiesData": "Sao chép cài đặt Roo và lịch sử tác vụ vào thư mục migration của Zoo.", + "keepsOriginals": "Giữ nguyên các thư mục Roo hiện có để bạn kiểm tra handoff trước.", + "apiKeysOptIn": "Chỉ bao gồm provider profile và API key nếu bạn chủ động chọn đưa chúng vào." } }, "costs": { diff --git a/webview-ui/src/i18n/locales/zh-CN/chat.json b/webview-ui/src/i18n/locales/zh-CN/chat.json index 8fe5d14ee8c..44e3c669092 100644 --- a/webview-ui/src/i18n/locales/zh-CN/chat.json +++ b/webview-ui/src/i18n/locales/zh-CN/chat.json @@ -339,7 +339,7 @@ "timerPrefix": "自动批准已启用。{{seconds}}秒后选择中…" }, "announcement": { - "title": "Roo Code {{version}} 已发布", + "title": "Roo Code {{version}}:迁移到 Zoo Code", "support": "请在 GitHub 上为我们点星支持 Roo Code。", "stealthModel": { "feature": "限时免费隐形模型 - Code Supernova:现已升级为 1M Token 上下文窗口!一个支持图像输入的多功能代理编程模型,通过 Roo Code Cloud 提供。", @@ -349,9 +349,9 @@ "goToSettingsButton": "前往设置" }, "handoff": { - "heading": "Roo Code 插件不会消失。", - "description": "你可能已经看到最近的公告:Roo Code 已突破 300 万次安装,原团队正全力投入 Roomote。我们知道这个消息让许多人感到难受。这个插件对我们和你都意义重大,你的心声我们听到了。好消息是:一支社区团队已挺身而出,继续推进 Roo Code,我们正与他们协作进行正式交接,让你所依赖的插件继续得到维护和改进。", - "readMore": "阅读 Matt Rubens 的原始公告" + "heading": "Roo 以 Zoo Code 的形式回来了。", + "description": "这次 Roo Code 的最后更新会帮助你把本地配置迁移到由社区维护的新 Zoo Code 扩展。Roo 会保留安装足够久,以便为 Zoo 准备 handoff bundle。", + "readMore": "阅读 Zoo 公告" }, "release": { "heading": "新增功能:", @@ -364,6 +364,16 @@ "specialized": "推出 ExplainerPlannerCoder - 三个专业云代理来增强你的工作流程。", "description": "代理在云端协同工作,可从网页或通过 Slack 触发。", "tryButton": "试用云代理" + }, + "zooMigration": { + "heading": "准备 Zoo 迁移", + "description": "从 Roo 的本地存储创建 handoff bundle。Roo 会保留原始数据,并且在包含 API key 之前先征求你的同意。", + "prepareButton": "准备迁移", + "installButton": "安装 Zoo", + "detailsHeading": "这会执行:", + "copiesData": "将你的 Roo 设置和任务历史复制到 Zoo 迁移文件夹。", + "keepsOriginals": "保持现有 Roo 文件夹不变,方便你先验证 handoff。", + "apiKeysOptIn": "只有在你明确选择包含时,才会加入 provider profile 和 API key。" } }, "costs": { diff --git a/webview-ui/src/i18n/locales/zh-TW/chat.json b/webview-ui/src/i18n/locales/zh-TW/chat.json index 515124e8e1d..3defe7b68eb 100644 --- a/webview-ui/src/i18n/locales/zh-TW/chat.json +++ b/webview-ui/src/i18n/locales/zh-TW/chat.json @@ -360,7 +360,7 @@ "triggerLabelAll": "BRRR" }, "announcement": { - "title": "Roo Code {{version}} 已發布", + "title": "Roo Code {{version}}:移轉到 Zoo Code", "support": "請在 GitHub 上給 Roo Code 星星支持我們。", "stealthModel": { "feature": "限時免費隱形模型 - Code Supernova:現已升級為 1M Token 上下文視窗!一個支援影像輸入的多功能代理程式設計模型,透過 Roo Code Cloud 提供。", @@ -370,9 +370,9 @@ "goToSettingsButton": "前往設定" }, "handoff": { - "heading": "Roo Code 外掛不會消失。", - "description": "你可能已經看到最近的公告:Roo Code 已突破 300 萬次安裝,原團隊將全心投入 Roomote。我們知道這個消息讓許多人感到難受。這個外掛對我們和你都意義重大,你的心聲我們聽到了。好消息是:一支社群團隊已挺身而出,繼續推進 Roo Code,我們正與他們協作進行正式交接,讓你所仰賴的外掛持續受到維護與改進。", - "readMore": "閱讀 Matt Rubens 的原始公告" + "heading": "Roo 以 Zoo Code 的形式回來了。", + "description": "這次 Roo Code 的最後更新會協助你把本機設定移轉到由社群維護的新 Zoo Code 擴充功能。Roo 會保留安裝足夠久,以便為 Zoo 準備 handoff bundle。", + "readMore": "閱讀 Zoo 公告" }, "release": { "heading": "新增功能:", @@ -385,6 +385,16 @@ "specialized": "推出 ExplainerPlannerCoder,三個專業雲端代理用來強化工作流程。", "description": "代理在雲端協同工作,可從網頁或透過 Slack 觸發。", "tryButton": "試用雲端代理" + }, + "zooMigration": { + "heading": "準備 Zoo 移轉", + "description": "從 Roo 的本機儲存建立 handoff bundle。Roo 會保留原始資料,並在包含 API key 前先詢問你。", + "prepareButton": "準備移轉", + "installButton": "安裝 Zoo", + "detailsHeading": "這會執行:", + "copiesData": "將你的 Roo 設定和任務歷史複製到 Zoo 移轉資料夾。", + "keepsOriginals": "保持現有 Roo 資料夾不變,讓你可以先驗證 handoff。", + "apiKeysOptIn": "只有在你明確選擇包含時,才會加入 provider profile 和 API key。" } }, "reasoning": {