Matt Rubens 5 месяцев назад
Родитель
Сommit
8a7d90e43b

+ 5 - 5
packages/types/src/providers/roo.ts

@@ -2,7 +2,7 @@ import type { ModelInfo } from "../model.js"
 
 export type RooModelId =
 	| "xai/grok-code-fast-1"
-	| "roo/code-supernova"
+	| "roo/code-supernova-1-million"
 	| "xai/grok-4-fast"
 	| "deepseek/deepseek-chat-v3.1"
 
@@ -19,15 +19,15 @@ export const rooModels = {
 		description:
 			"A reasoning model that is blazing fast and excels at agentic coding, accessible for free through Roo Code Cloud for a limited time. (Note: the free prompts and completions are logged by xAI and used to improve the model.)",
 	},
-	"roo/code-supernova": {
-		maxTokens: 16_384,
-		contextWindow: 200_000,
+	"roo/code-supernova-1-million": {
+		maxTokens: 30_000,
+		contextWindow: 1_000_000,
 		supportsImages: true,
 		supportsPromptCache: true,
 		inputPrice: 0,
 		outputPrice: 0,
 		description:
-			"A versatile agentic coding stealth model that supports image inputs, accessible for free through Roo Code Cloud for a limited time. (Note: the free prompts and completions are logged by the model provider and used to improve the model.)",
+			"A versatile agentic coding stealth model with a 1M token context window that supports image inputs, accessible for free through Roo Code Cloud for a limited time. (Note: the free prompts and completions are logged by the model provider and used to improve the model.)",
 	},
 	"xai/grok-4-fast": {
 		maxTokens: 30_000,

+ 56 - 0
src/core/config/ProviderSettingsManager.ts

@@ -10,11 +10,24 @@ import {
 	ProviderSettingsEntry,
 	DEFAULT_CONSECUTIVE_MISTAKE_LIMIT,
 	getModelId,
+	type ProviderName,
+	type RooModelId,
 } from "@roo-code/types"
 import { TelemetryService } from "@roo-code/telemetry"
 
 import { Mode, modes } from "../../shared/modes"
 
+// Type-safe model migrations mapping
+type ModelMigrations = {
+	[K in ProviderName]?: Record<string, string>
+}
+
+const MODEL_MIGRATIONS: ModelMigrations = {
+	roo: {
+		"roo/code-supernova": "roo/code-supernova-1-million" as RooModelId,
+	},
+} as const satisfies ModelMigrations
+
 export interface SyncCloudProfilesResult {
 	hasChanges: boolean
 	activeProfileChanged: boolean
@@ -108,6 +121,11 @@ export class ProviderSettingsManager {
 					isDirty = true
 				}
 
+				// Apply model migrations for all providers
+				if (this.applyModelMigrations(providerProfiles)) {
+					isDirty = true
+				}
+
 				// Ensure all configs have IDs.
 				for (const [_name, apiConfig] of Object.entries(providerProfiles.apiConfigs)) {
 					if (!apiConfig.id) {
@@ -275,6 +293,44 @@ export class ProviderSettingsManager {
 		}
 	}
 
+	/**
+	 * Apply model migrations for all providers
+	 * Returns true if any migrations were applied
+	 */
+	private applyModelMigrations(providerProfiles: ProviderProfiles): boolean {
+		let migrated = false
+
+		try {
+			for (const [_name, apiConfig] of Object.entries(providerProfiles.apiConfigs)) {
+				// Skip configs without provider or model ID
+				if (!apiConfig.apiProvider || !apiConfig.apiModelId) {
+					continue
+				}
+
+				// Check if this provider has migrations (with type safety)
+				const provider = apiConfig.apiProvider as ProviderName
+				const providerMigrations = MODEL_MIGRATIONS[provider]
+				if (!providerMigrations) {
+					continue
+				}
+
+				// Check if the current model ID needs migration
+				const newModelId = providerMigrations[apiConfig.apiModelId]
+				if (newModelId && newModelId !== apiConfig.apiModelId) {
+					console.log(
+						`[ModelMigration] Migrating ${apiConfig.apiProvider} model from ${apiConfig.apiModelId} to ${newModelId}`,
+					)
+					apiConfig.apiModelId = newModelId
+					migrated = true
+				}
+			}
+		} catch (error) {
+			console.error(`[ModelMigration] Failed to apply model migrations:`, error)
+		}
+
+		return migrated
+	}
+
 	/**
 	 * Clean model ID by removing prefix before "/"
 	 */

+ 115 - 0
src/core/config/__tests__/ProviderSettingsManager.spec.ts

@@ -229,6 +229,121 @@ describe("ProviderSettingsManager", () => {
 			expect(storedConfig.migrations.todoListEnabledMigrated).toEqual(true)
 		})
 
+		it("should apply model migrations for all providers", async () => {
+			mockSecrets.get.mockResolvedValue(
+				JSON.stringify({
+					currentApiConfigName: "default",
+					apiConfigs: {
+						default: {
+							config: {},
+							id: "default",
+							apiProvider: "roo",
+							apiModelId: "roo/code-supernova", // Old model ID
+						},
+						test: {
+							apiProvider: "roo",
+							apiModelId: "roo/code-supernova", // Old model ID
+						},
+						existing: {
+							apiProvider: "roo",
+							apiModelId: "roo/code-supernova-1-million", // Already migrated
+						},
+						otherProvider: {
+							apiProvider: "anthropic",
+							apiModelId: "roo/code-supernova", // Should not be migrated (different provider)
+						},
+						noProvider: {
+							id: "no-provider",
+							apiModelId: "roo/code-supernova", // Should not be migrated (no provider)
+						},
+					},
+					migrations: {
+						rateLimitSecondsMigrated: true,
+						diffSettingsMigrated: true,
+						openAiHeadersMigrated: true,
+						consecutiveMistakeLimitMigrated: true,
+						todoListEnabledMigrated: true,
+					},
+				}),
+			)
+
+			await providerSettingsManager.initialize()
+
+			// Get the last call to store, which should contain the migrated config
+			const calls = mockSecrets.store.mock.calls
+			const storedConfig = JSON.parse(calls[calls.length - 1][1])
+
+			// Roo provider configs should be migrated
+			expect(storedConfig.apiConfigs.default.apiModelId).toEqual("roo/code-supernova-1-million")
+			expect(storedConfig.apiConfigs.test.apiModelId).toEqual("roo/code-supernova-1-million")
+			expect(storedConfig.apiConfigs.existing.apiModelId).toEqual("roo/code-supernova-1-million")
+
+			// Non-roo provider configs should not be migrated
+			expect(storedConfig.apiConfigs.otherProvider.apiModelId).toEqual("roo/code-supernova")
+			expect(storedConfig.apiConfigs.noProvider.apiModelId).toEqual("roo/code-supernova")
+		})
+
+		it("should apply model migrations every time, not just once", async () => {
+			// First load with old model
+			mockSecrets.get.mockResolvedValue(
+				JSON.stringify({
+					currentApiConfigName: "default",
+					apiConfigs: {
+						default: {
+							apiProvider: "roo",
+							apiModelId: "roo/code-supernova",
+							id: "default",
+						},
+					},
+					migrations: {
+						rateLimitSecondsMigrated: true,
+						diffSettingsMigrated: true,
+						openAiHeadersMigrated: true,
+						consecutiveMistakeLimitMigrated: true,
+						todoListEnabledMigrated: true,
+					},
+				}),
+			)
+
+			await providerSettingsManager.initialize()
+
+			// Verify migration happened
+			let calls = mockSecrets.store.mock.calls
+			let storedConfig = JSON.parse(calls[calls.length - 1][1])
+			expect(storedConfig.apiConfigs.default.apiModelId).toEqual("roo/code-supernova-1-million")
+
+			// Create a new instance to simulate another load
+			const newManager = new ProviderSettingsManager(mockContext)
+
+			// Somehow the model got reverted (e.g., manual edit, sync issue)
+			mockSecrets.get.mockResolvedValue(
+				JSON.stringify({
+					currentApiConfigName: "default",
+					apiConfigs: {
+						default: {
+							apiProvider: "roo",
+							apiModelId: "roo/code-supernova", // Old model again
+							id: "default",
+						},
+					},
+					migrations: {
+						rateLimitSecondsMigrated: true,
+						diffSettingsMigrated: true,
+						openAiHeadersMigrated: true,
+						consecutiveMistakeLimitMigrated: true,
+						todoListEnabledMigrated: true,
+					},
+				}),
+			)
+
+			await newManager.initialize()
+
+			// Verify migration happened again
+			calls = mockSecrets.store.mock.calls
+			storedConfig = JSON.parse(calls[calls.length - 1][1])
+			expect(storedConfig.apiConfigs.default.apiModelId).toEqual("roo/code-supernova-1-million")
+		})
+
 		it("should throw error if secrets storage fails", async () => {
 			mockSecrets.get.mockRejectedValue(new Error("Storage failed"))
 

+ 1 - 1
src/core/webview/ClineProvider.ts

@@ -144,7 +144,7 @@ export class ClineProvider
 
 	public isViewLaunched = false
 	public settingsImportedAt?: number
-	public readonly latestAnnouncementId = "sep-2025-code-supernova" // Code Supernova stealth model announcement
+	public readonly latestAnnouncementId = "sep-2025-code-supernova-1m" // Code Supernova 1M context window announcement
 	public readonly providerSettingsManager: ProviderSettingsManager
 	public readonly customModesManager: CustomModesManager
 

+ 1 - 1
webview-ui/src/i18n/locales/ca/chat.json

@@ -287,7 +287,7 @@
 	"announcement": {
 		"title": "🎉 Roo Code {{version}} Llançat",
 		"stealthModel": {
-			"feature": "<bold>Model stealth GRATUÏT per temps limitat</bold> - Code Supernova: Un model de codificació agèntica versàtil que suporta entrades d'imatges, disponible a través de Roo Code Cloud.",
+			"feature": "<bold>Model stealth GRATUÏT per temps limitat</bold> - Code Supernova: Ara actualitzat amb una <bold>finestra de context d'1M tokens</bold>! Un model de codificació agèntica versàtil que suporta entrades d'imatges, disponible a través de Roo Code Cloud.",
 			"note": "(Nota: els prompts i completacions són registrats pel creador del model i utilitzats per millorar-lo)",
 			"connectButton": "Connectar a Roo Code Cloud",
 			"selectModel": "Selecciona <code>roo/code-supernova</code> del proveïdor Roo Code Cloud a Configuració per començar.",

+ 1 - 1
webview-ui/src/i18n/locales/de/chat.json

@@ -287,7 +287,7 @@
 	"announcement": {
 		"title": "🎉 Roo Code {{version}} veröffentlicht",
 		"stealthModel": {
-			"feature": "<bold>Zeitlich begrenztes KOSTENLOSES Stealth-Modell</bold> - Code Supernova: Ein vielseitiges agentisches Coding-Modell, das Bildeingaben unterstützt und über Roo Code Cloud zugänglich ist.",
+			"feature": "<bold>Zeitlich begrenztes KOSTENLOSES Stealth-Modell</bold> - Code Supernova: Jetzt mit einem <bold>1M Token Kontextfenster</bold> erweitert! Ein vielseitiges agentisches Coding-Modell, das Bildeingaben unterstützt und über Roo Code Cloud zugänglich ist.",
 			"note": "(Hinweis: Prompts und Vervollständigungen werden vom Modellersteller protokolliert und zur Verbesserung des Modells verwendet)",
 			"connectButton": "Mit Roo Code Cloud verbinden",
 			"selectModel": "Wähle <code>roo/code-supernova</code> vom Roo Code Cloud-Provider in den Einstellungen aus, um zu beginnen.",

+ 1 - 1
webview-ui/src/i18n/locales/en/chat.json

@@ -295,7 +295,7 @@
 	"announcement": {
 		"title": "🎉 Roo Code {{version}} Released",
 		"stealthModel": {
-			"feature": "<bold>Limited-time FREE stealth model</bold> - Code Supernova: A versatile agentic coding model that supports image inputs, accessible through Roo Code Cloud.",
+			"feature": "<bold>Limited-time FREE stealth model</bold> - Code Supernova: Now upgraded with a <bold>1M token context window</bold>! A versatile agentic coding model that supports image inputs, accessible through Roo Code Cloud.",
 			"note": "(Note: prompts and completions are logged by the model creator and used to improve the model)",
 			"connectButton": "Connect to Roo Code Cloud",
 			"selectModel": "Select <code>roo/code-supernova</code> from the Roo Code Cloud provider in Settings to get started.",

+ 1 - 1
webview-ui/src/i18n/locales/es/chat.json

@@ -287,7 +287,7 @@
 	"announcement": {
 		"title": "🎉 Roo Code {{version}} publicado",
 		"stealthModel": {
-			"feature": "<bold>Modelo stealth GRATUITO por tiempo limitado</bold> - Code Supernova: Un modelo de codificación agéntica versátil que soporta entradas de imágenes, accesible a través de Roo Code Cloud.",
+			"feature": "<bold>Modelo stealth GRATUITO por tiempo limitado</bold> - Code Supernova: ¡Ahora actualizado con una <bold>ventana de contexto de 1M tokens</bold>! Un modelo de codificación agéntica versátil que soporta entradas de imágenes, accesible a través de Roo Code Cloud.",
 			"note": "(Nota: los prompts y completaciones son registrados por el creador del modelo y utilizados para mejorarlo)",
 			"connectButton": "Conectar a Roo Code Cloud",
 			"selectModel": "Selecciona <code>roo/code-supernova</code> del proveedor Roo Code Cloud en Configuración para comenzar.",

+ 1 - 1
webview-ui/src/i18n/locales/fr/chat.json

@@ -287,7 +287,7 @@
 	"announcement": {
 		"title": "🎉 Roo Code {{version}} est sortie",
 		"stealthModel": {
-			"feature": "<bold>Modèle stealth GRATUIT pour une durée limitée</bold> - Code Supernova : Un modèle de codage agentique polyvalent qui prend en charge les entrées d'images, accessible via Roo Code Cloud.",
+			"feature": "<bold>Modèle stealth GRATUIT pour une durée limitée</bold> - Code Supernova : Maintenant amélioré avec une <bold>fenêtre de contexte de 1M tokens</bold> ! Un modèle de codage agentique polyvalent qui prend en charge les entrées d'images, accessible via Roo Code Cloud.",
 			"note": "(Note : les prompts et complétions sont enregistrés par le créateur du modèle et utilisés pour l'améliorer)",
 			"connectButton": "Se connecter à Roo Code Cloud",
 			"selectModel": "Sélectionnez <code>roo/code-supernova</code> du fournisseur Roo Code Cloud dans Paramètres pour commencer.",

+ 1 - 1
webview-ui/src/i18n/locales/hi/chat.json

@@ -287,7 +287,7 @@
 	"announcement": {
 		"title": "🎉 Roo Code {{version}} रिलीज़ हुआ",
 		"stealthModel": {
-			"feature": "<bold>सीमित समय के लिए मुफ़्त स्टेल्थ मॉडल</bold> - Code Supernova: एक बहुमुखी एजेंटिक कोडिंग मॉडल जो छवि इनपुट का समर्थन करता है, Roo Code Cloud के माध्यम से उपलब्ध।",
+			"feature": "<bold>सीमित समय के लिए मुफ़्त स्टेल्थ मॉडल</bold> - Code Supernova: अब <bold>1M Token संदर्भ विंडो</bold> के साथ अपग्रेड हुआ! एक बहुमुखी एजेंटिक कोडिंग मॉडल जो छवि इनपुट का समर्थन करता है, Roo Code Cloud के माध्यम से उपलब्ध।",
 			"note": "(नोट: प्रॉम्प्ट्स और कम्प्लीशन्स मॉडल निर्माता द्वारा लॉग किए जाते हैं और मॉडल को बेहतर बनाने के लिए उपयोग किए जाते हैं)",
 			"connectButton": "Roo Code Cloud से कनेक्ट करें",
 			"selectModel": "आरंभ करने के लिए सेटिंग्स में Roo Code Cloud प्रोवाइडर से <code>roo/code-supernova</code> चुनें।",

+ 1 - 1
webview-ui/src/i18n/locales/id/chat.json

@@ -299,7 +299,7 @@
 	"announcement": {
 		"title": "🎉 Roo Code {{version}} Dirilis",
 		"stealthModel": {
-			"feature": "<bold>Model stealth GRATIS waktu terbatas</bold> - Code Supernova: Model coding agentik serbaguna yang mendukung input gambar, tersedia melalui Roo Code Cloud.",
+			"feature": "<bold>Model stealth GRATIS waktu terbatas</bold> - Code Supernova: Sekarang diupgrade dengan <bold>jendela konteks 1M token</bold>! Model coding agentik serbaguna yang mendukung input gambar, tersedia melalui Roo Code Cloud.",
 			"note": "(Catatan: prompt dan completion dicatat oleh pembuat model dan digunakan untuk meningkatkan model)",
 			"connectButton": "Hubungkan ke Roo Code Cloud",
 			"selectModel": "Pilih <code>roo/code-supernova</code> dari penyedia Roo Code Cloud di Pengaturan untuk memulai.",

+ 1 - 1
webview-ui/src/i18n/locales/it/chat.json

@@ -287,7 +287,7 @@
 	"announcement": {
 		"title": "🎉 Rilasciato Roo Code {{version}}",
 		"stealthModel": {
-			"feature": "<bold>Modello stealth GRATUITO per tempo limitato</bold> - Code Supernova: Un modello di codificazione agentiva versatile che supporta input di immagini, accessibile tramite Roo Code Cloud.",
+			"feature": "<bold>Modello stealth GRATUITO per tempo limitato</bold> - Code Supernova: Ora potenziato con una <bold>finestra di contesto da 1M token</bold>! Un modello di codificazione agentiva versatile che supporta input di immagini, accessibile tramite Roo Code Cloud.",
 			"note": "(Nota: i prompt e le completazioni vengono registrati dal creatore del modello e utilizzati per migliorarlo)",
 			"connectButton": "Connetti a Roo Code Cloud",
 			"selectModel": "Seleziona <code>roo/code-supernova</code> dal provider Roo Code Cloud nelle Impostazioni per iniziare.",

+ 1 - 1
webview-ui/src/i18n/locales/ja/chat.json

@@ -287,7 +287,7 @@
 	"announcement": {
 		"title": "🎉 Roo Code {{version}} リリース",
 		"stealthModel": {
-			"feature": "<bold>期間限定無料ステルスモデル</bold> - Code Supernova:画像入力をサポートする多目的エージェントコーディングモデル、Roo Code Cloud 経由で利用可能。",
+			"feature": "<bold>期間限定無料ステルスモデル</bold> - Code Supernova:<bold>1Mトークンコンテキストウィンドウ</bold>にアップグレード!画像入力をサポートする多目的エージェントコーディングモデル、Roo Code Cloud 経由で利用可能。",
 			"note": "(注意:プロンプトと補完はモデル作成者によってログに記録され、モデルの改善に使用されます)",
 			"connectButton": "Roo Code Cloud に接続",
 			"selectModel": "設定で Roo Code Cloud プロバイダーから <code>roo/code-supernova</code> を選択して開始してください。",

+ 1 - 1
webview-ui/src/i18n/locales/ko/chat.json

@@ -287,7 +287,7 @@
 	"announcement": {
 		"title": "🎉 Roo Code {{version}} 출시",
 		"stealthModel": {
-			"feature": "<bold>기간 한정 무료 스텔스 모델</bold> - Code Supernova: 이미지 입력을 지원하는 다목적 에이전틱 코딩 모델, Roo Code Cloud를 통해 이용 가능.",
+			"feature": "<bold>기간 한정 무료 스텔스 모델</bold> - Code Supernova: 이제 <bold>1M 토큰 컨텍스트 윈도우</bold>로 업그레이드되었습니다! 이미지 입력을 지원하는 다목적 에이전틱 코딩 모델, Roo Code Cloud를 통해 이용 가능.",
 			"note": "(참고: 프롬프트와 완성은 모델 제작자에 의해 기록되고 모델 개선에 사용됩니다)",
 			"connectButton": "Roo Code Cloud에 연결",
 			"selectModel": "설정에서 Roo Code Cloud 제공업체의 <code>roo/code-supernova</code>를 선택하여 시작하세요.",

+ 1 - 1
webview-ui/src/i18n/locales/nl/chat.json

@@ -272,7 +272,7 @@
 	"announcement": {
 		"title": "🎉 Roo Code {{version}} uitgebracht",
 		"stealthModel": {
-			"feature": "<bold>Beperkt tijd GRATIS stealth model</bold> - Code Supernova: Een veelzijdig agentisch codeermodel dat beeldinvoer ondersteunt, beschikbaar via Roo Code Cloud.",
+			"feature": "<bold>Beperkt tijd GRATIS stealth model</bold> - Code Supernova: Nu geüpgraded met een <bold>1M token contextvenster</bold>! Een veelzijdig agentisch codeermodel dat beeldinvoer ondersteunt, beschikbaar via Roo Code Cloud.",
 			"note": "(Opmerking: prompts en aanvullingen worden gelogd door de modelmaker en gebruikt om het model te verbeteren)",
 			"connectButton": "Verbinden met Roo Code Cloud",
 			"selectModel": "Selecteer <code>roo/code-supernova</code> van de Roo Code Cloud provider in Instellingen om te beginnen.",

+ 1 - 1
webview-ui/src/i18n/locales/pl/chat.json

@@ -287,7 +287,7 @@
 	"announcement": {
 		"title": "🎉 Roo Code {{version}} wydany",
 		"stealthModel": {
-			"feature": "<bold>Darmowy model stealth na ograniczony czas</bold> - Code Supernova: Wszechstronny model kodowania agentowego, który obsługuje wprowadzanie obrazów, dostępny przez Roo Code Cloud.",
+			"feature": "<bold>Darmowy model stealth na ograniczony czas</bold> - Code Supernova: Teraz ulepszony z <bold>oknem kontekstu 1M tokenów</bold>! Wszechstronny model kodowania agentowego, który obsługuje wprowadzanie obrazów, dostępny przez Roo Code Cloud.",
 			"note": "(Uwaga: prompty i uzupełnienia są rejestrowane przez twórcę modelu i używane do jego ulepszania)",
 			"connectButton": "Połącz z Roo Code Cloud",
 			"selectModel": "Wybierz <code>roo/code-supernova</code> od dostawcy Roo Code Cloud w Ustawieniach, aby rozpocząć.",

+ 1 - 1
webview-ui/src/i18n/locales/pt-BR/chat.json

@@ -287,7 +287,7 @@
 	"announcement": {
 		"title": "🎉 Roo Code {{version}} Lançado",
 		"stealthModel": {
-			"feature": "<bold>Modelo stealth GRATUITO por tempo limitado</bold> - Code Supernova: Um modelo de codificação agêntica versátil que suporta entradas de imagem, acessível através do Roo Code Cloud.",
+			"feature": "<bold>Modelo stealth GRATUITO por tempo limitado</bold> - Code Supernova: Agora atualizado com uma <bold>janela de contexto de 1M tokens</bold>! Um modelo de codificação agêntica versátil que suporta entradas de imagem, acessível através do Roo Code Cloud.",
 			"note": "(Nota: prompts e completações são registrados pelo criador do modelo e usados para melhorá-lo)",
 			"connectButton": "Conectar ao Roo Code Cloud",
 			"selectModel": "Selecione <code>roo/code-supernova</code> do provedor Roo Code Cloud em Configurações para começar.",

+ 1 - 1
webview-ui/src/i18n/locales/ru/chat.json

@@ -273,7 +273,7 @@
 	"announcement": {
 		"title": "🎉 Выпущен Roo Code {{version}}",
 		"stealthModel": {
-			"feature": "<bold>Бесплатная скрытая модель на ограниченное время</bold> - Code Supernova: Универсальная модель агентного программирования, поддерживающая ввод изображений, доступная через Roo Code Cloud.",
+			"feature": "<bold>Бесплатная скрытая модель на ограниченное время</bold> - Code Supernova: Теперь обновлена до <bold>контекстного окна 1M токенов</bold>! Универсальная модель агентного программирования, поддерживающая ввод изображений, доступная через Roo Code Cloud.",
 			"note": "(Примечание: промпты и дополнения записываются создателем модели и используются для её улучшения)",
 			"connectButton": "Подключиться к Roo Code Cloud",
 			"selectModel": "Выберите <code>roo/code-supernova</code> от провайдера Roo Code Cloud в Настройках для начала работы.",

+ 1 - 1
webview-ui/src/i18n/locales/tr/chat.json

@@ -288,7 +288,7 @@
 	"announcement": {
 		"title": "🎉 Roo Code {{version}} Yayınlandı",
 		"stealthModel": {
-			"feature": "<bold>Sınırlı süre ÜCRETSİZ gizli model</bold> - Code Supernova: Görüntü girişlerini destekleyen çok amaçlı acentik kodlama modeli, Roo Code Cloud üzerinden kullanılabilir.",
+			"feature": "<bold>Sınırlı süre ÜCRETSİZ gizli model</bold> - Code Supernova: Artık <bold>1M token bağlam penceresi</bold> ile yükseltildi! Görüntü girişlerini destekleyen çok amaçlı acentik kodlama modeli, Roo Code Cloud üzerinden kullanılabilir.",
 			"note": "(Not: istemler ve tamamlamalar model yaratıcısı tarafından kaydedilir ve modeli geliştirmek için kullanılır)",
 			"connectButton": "Roo Code Cloud'a bağlan",
 			"selectModel": "Başlamak için Ayarlar'da Roo Code Cloud sağlayıcısından <code>roo/code-supernova</code>'yı seçin.",

+ 1 - 1
webview-ui/src/i18n/locales/vi/chat.json

@@ -288,7 +288,7 @@
 	"announcement": {
 		"title": "🎉 Roo Code {{version}} Đã phát hành",
 		"stealthModel": {
-			"feature": "<bold>Mô hình stealth MIỄN PHÍ có thời hạn</bold> - Code Supernova: 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.",
+			"feature": "<bold>Mô hình stealth MIỄN PHÍ có thời hạn</bold> - Code Supernova: Hiện đã được nâng cấp với <bold>cửa sổ ngữ cảnh 1M token</bold>! 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.",
 			"note": "(Lưu ý: các prompt và completion được ghi lại bởi người tạo mô hình và được sử dụng để cải thiện mô hình)",
 			"connectButton": "Kết nối với Roo Code Cloud",
 			"selectModel": "Chọn <code>roo/code-supernova</code> từ nhà cung cấp Roo Code Cloud trong Cài đặt để bắt đầu.",

+ 1 - 1
webview-ui/src/i18n/locales/zh-CN/chat.json

@@ -288,7 +288,7 @@
 	"announcement": {
 		"title": "🎉 Roo Code {{version}} 已发布",
 		"stealthModel": {
-			"feature": "<bold>限时免费隐形模型</bold> - Code Supernova:一个支持图像输入的多功能代理编程模型,通过 Roo Code Cloud 提供。",
+			"feature": "<bold>限时免费隐形模型</bold> - Code Supernova:现已升级为 <bold>1M Token 上下文窗口</bold>!一个支持图像输入的多功能代理编程模型,通过 Roo Code Cloud 提供。",
 			"note": "(注意:提示词和补全内容会被模型创建者记录并用于改进模型)",
 			"connectButton": "连接到 Roo Code Cloud",
 			"selectModel": "在设置中从 Roo Code Cloud 提供商选择 <code>roo/code-supernova</code> 开始使用。",

+ 1 - 1
webview-ui/src/i18n/locales/zh-TW/chat.json

@@ -297,7 +297,7 @@
 	"announcement": {
 		"title": "🎉 Roo Code {{version}} 已發布",
 		"stealthModel": {
-			"feature": "<bold>限時免費隱形模型</bold> - Code Supernova:一個支援圖像輸入的多功能代理程式編程模型,透過 Roo Code Cloud 提供。",
+			"feature": "<bold>限時免費隱形模型</bold> - Code Supernova:現已升級為 <bold>1M Token 上下文視窗</bold>!一個支援圖像輸入的多功能代理程式編程模型,透過 Roo Code Cloud 提供。",
 			"note": "(注意:提示和完成會被模型創建者記錄並用於改進模型)",
 			"connectButton": "連接到 Roo Code Cloud",
 			"selectModel": "在設定中從 Roo Code Cloud 提供商選擇 <code>roo/code-supernova</code> 開始使用。",