Upgrade Supernova (#8330)

This commit is contained in:
Matt Rubens 2025-09-26 15:37:36 -04:00 committed by GitHub
parent 5e218febdb
commit 8a7d90e43b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
22 changed files with 195 additions and 24 deletions

View file

@ -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,

View file

@ -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 "/"
*/

View file

@ -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"))

View file

@ -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

View file

@ -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.",

View file

@ -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.",

View file

@ -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.",

View file

@ -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.",

View file

@ -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.",

View file

@ -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> चुनें।",

View file

@ -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.",

View file

@ -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.",

View file

@ -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> を選択して開始してください。",

View file

@ -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>를 선택하여 시작하세요.",

View file

@ -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.",

View file

@ -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ąć.",

View file

@ -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.",

View file

@ -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 в Настройках для начала работы.",

View file

@ -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.",

View file

@ -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.",

View file

@ -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> 开始使用。",

View file

@ -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> 開始使用。",