From 6765bdded87afce7524a8b5a5df07742c8fd2a47 Mon Sep 17 00:00:00 2001 From: Julio Date: Mon, 21 Apr 2025 08:37:44 -0400 Subject: [PATCH 1/6] Add a new button to import settings on the welcome screen without requiring to set an API key. --- src/core/config/importExport.ts | 10 +++++++++- webview-ui/src/components/welcome/WelcomeView.tsx | 10 +++++++++- webview-ui/src/i18n/locales/ca/welcome.json | 3 ++- webview-ui/src/i18n/locales/de/welcome.json | 3 ++- webview-ui/src/i18n/locales/en/welcome.json | 3 ++- webview-ui/src/i18n/locales/es/welcome.json | 3 ++- webview-ui/src/i18n/locales/fr/welcome.json | 3 ++- webview-ui/src/i18n/locales/hi/welcome.json | 3 ++- webview-ui/src/i18n/locales/it/welcome.json | 3 ++- webview-ui/src/i18n/locales/pl/welcome.json | 3 ++- webview-ui/src/i18n/locales/pt-BR/welcome.json | 3 ++- webview-ui/src/i18n/locales/vi/welcome.json | 3 ++- webview-ui/src/i18n/locales/zh-CN/welcome.json | 3 ++- webview-ui/src/i18n/locales/zh-TW/welcome.json | 3 ++- 14 files changed, 42 insertions(+), 14 deletions(-) diff --git a/src/core/config/importExport.ts b/src/core/config/importExport.ts index f8059160a2e..7d9f31a9ec8 100644 --- a/src/core/config/importExport.ts +++ b/src/core/config/importExport.ts @@ -49,8 +49,16 @@ export const importSettings = async ({ providerSettingsManager, contextProxy }: } await providerSettingsManager.import(newProviderProfiles) - await contextProxy.setValues(globalSettings) + + // Roo uses providerSettingsManager to manage api configs, but Cline uses ContextProxy, and to due to some legacy + // code from it, we need to set the the provider setttings here as well. + // For the future we should remove the provider from the proxy and keep providerSettingsManager as source of truth for apiConfig. + const firstApiConfig = Object.values(providerProfiles.apiConfigs)[0] + if (firstApiConfig) { + contextProxy.setProviderSettings(firstApiConfig) + } + contextProxy.setValue("currentApiConfigName", providerProfiles.currentApiConfigName) contextProxy.setValue("listApiConfigMeta", await providerSettingsManager.listConfig()) diff --git a/webview-ui/src/components/welcome/WelcomeView.tsx b/webview-ui/src/components/welcome/WelcomeView.tsx index 07871496a43..c5aefd53933 100644 --- a/webview-ui/src/components/welcome/WelcomeView.tsx +++ b/webview-ui/src/components/welcome/WelcomeView.tsx @@ -1,5 +1,5 @@ import { useCallback, useState } from "react" -import { VSCodeButton } from "@vscode/webview-ui-toolkit/react" +import { VSCodeButton, VSCodeLink } from "@vscode/webview-ui-toolkit/react" import { useExtensionState } from "@src/context/ExtensionStateContext" import { validateApiConfiguration } from "@src/utils/validate" import { vscode } from "@src/utils/vscode" @@ -113,6 +113,14 @@ const WelcomeView = () => {
+
+ vscode.postMessage({ type: "importSettings" })} + className="text-sm"> + {t("welcome:importSettings")} + +
{t("welcome:start")} diff --git a/webview-ui/src/i18n/locales/ca/welcome.json b/webview-ui/src/i18n/locales/ca/welcome.json index bbc2c5d64ca..d1c73ee6b6f 100644 --- a/webview-ui/src/i18n/locales/ca/welcome.json +++ b/webview-ui/src/i18n/locales/ca/welcome.json @@ -23,5 +23,6 @@ "allow": "Permetre", "deny": "Denegar" }, - "or": "o" + "or": "o", + "importSettings": "Importar configuració" } diff --git a/webview-ui/src/i18n/locales/de/welcome.json b/webview-ui/src/i18n/locales/de/welcome.json index 8c8202f6721..e92f63b1492 100644 --- a/webview-ui/src/i18n/locales/de/welcome.json +++ b/webview-ui/src/i18n/locales/de/welcome.json @@ -23,5 +23,6 @@ "allow": "Erlauben", "deny": "Ablehnen" }, - "or": "oder" + "or": "oder", + "importSettings": "Einstellungen importieren" } diff --git a/webview-ui/src/i18n/locales/en/welcome.json b/webview-ui/src/i18n/locales/en/welcome.json index 5f46a80a03c..f4b6e044bda 100644 --- a/webview-ui/src/i18n/locales/en/welcome.json +++ b/webview-ui/src/i18n/locales/en/welcome.json @@ -23,5 +23,6 @@ "allow": "Allow", "deny": "Deny" }, - "or": "or" + "or": "or", + "importSettings": "Import Settings" } diff --git a/webview-ui/src/i18n/locales/es/welcome.json b/webview-ui/src/i18n/locales/es/welcome.json index ccbf65bc6b2..819bb485dee 100644 --- a/webview-ui/src/i18n/locales/es/welcome.json +++ b/webview-ui/src/i18n/locales/es/welcome.json @@ -23,5 +23,6 @@ "allow": "Permitir", "deny": "Denegar" }, - "or": "o" + "or": "o", + "importSettings": "Importar configuración" } diff --git a/webview-ui/src/i18n/locales/fr/welcome.json b/webview-ui/src/i18n/locales/fr/welcome.json index 4b3bb435402..6dbe4534c42 100644 --- a/webview-ui/src/i18n/locales/fr/welcome.json +++ b/webview-ui/src/i18n/locales/fr/welcome.json @@ -23,5 +23,6 @@ "allow": "Autoriser", "deny": "Refuser" }, - "or": "ou" + "or": "ou", + "importSettings": "Importer les paramètres" } diff --git a/webview-ui/src/i18n/locales/hi/welcome.json b/webview-ui/src/i18n/locales/hi/welcome.json index 2c858d50b99..960e22164b0 100644 --- a/webview-ui/src/i18n/locales/hi/welcome.json +++ b/webview-ui/src/i18n/locales/hi/welcome.json @@ -23,5 +23,6 @@ "allow": "अनुमति दें", "deny": "अस्वीकार करें" }, - "or": "या" + "or": "या", + "importSettings": "सेटिंग्स आयात करें" } diff --git a/webview-ui/src/i18n/locales/it/welcome.json b/webview-ui/src/i18n/locales/it/welcome.json index f521778b25c..45c7bf58a98 100644 --- a/webview-ui/src/i18n/locales/it/welcome.json +++ b/webview-ui/src/i18n/locales/it/welcome.json @@ -23,5 +23,6 @@ "allow": "Consenti", "deny": "Nega" }, - "or": "o" + "or": "o", + "importSettings": "Importa impostazioni" } diff --git a/webview-ui/src/i18n/locales/pl/welcome.json b/webview-ui/src/i18n/locales/pl/welcome.json index b85aa0029b1..4a49b953284 100644 --- a/webview-ui/src/i18n/locales/pl/welcome.json +++ b/webview-ui/src/i18n/locales/pl/welcome.json @@ -23,5 +23,6 @@ "allow": "Zezwól", "deny": "Odmów" }, - "or": "lub" + "or": "lub", + "importSettings": "Importuj ustawienia" } diff --git a/webview-ui/src/i18n/locales/pt-BR/welcome.json b/webview-ui/src/i18n/locales/pt-BR/welcome.json index 561655cf7b9..a36cd511eda 100644 --- a/webview-ui/src/i18n/locales/pt-BR/welcome.json +++ b/webview-ui/src/i18n/locales/pt-BR/welcome.json @@ -23,5 +23,6 @@ "allow": "Permitir", "deny": "Negar" }, - "or": "ou" + "or": "ou", + "importSettings": "Importar configurações" } diff --git a/webview-ui/src/i18n/locales/vi/welcome.json b/webview-ui/src/i18n/locales/vi/welcome.json index 4a80252b661..aee957d6c07 100644 --- a/webview-ui/src/i18n/locales/vi/welcome.json +++ b/webview-ui/src/i18n/locales/vi/welcome.json @@ -23,5 +23,6 @@ "allow": "Cho phép", "deny": "Từ chối" }, - "or": "hoặc" + "or": "hoặc", + "importSettings": "Nhập cài đặt" } diff --git a/webview-ui/src/i18n/locales/zh-CN/welcome.json b/webview-ui/src/i18n/locales/zh-CN/welcome.json index 580d84cb660..95cffd131c2 100644 --- a/webview-ui/src/i18n/locales/zh-CN/welcome.json +++ b/webview-ui/src/i18n/locales/zh-CN/welcome.json @@ -23,5 +23,6 @@ "allow": "允许", "deny": "拒绝" }, - "or": "或" + "or": "或", + "importSettings": "导入设置" } diff --git a/webview-ui/src/i18n/locales/zh-TW/welcome.json b/webview-ui/src/i18n/locales/zh-TW/welcome.json index ab3ac52fcb8..62e543add3f 100644 --- a/webview-ui/src/i18n/locales/zh-TW/welcome.json +++ b/webview-ui/src/i18n/locales/zh-TW/welcome.json @@ -23,5 +23,6 @@ "allow": "允許", "deny": "拒絕" }, - "or": "或是" + "or": "或是", + "importSettings": "匯入設定" } From e1ca69660573297815c38d9f774282270d454c01 Mon Sep 17 00:00:00 2001 From: cte Date: Mon, 28 Apr 2025 15:52:41 -0700 Subject: [PATCH 2/6] Fix tests --- src/core/config/__tests__/importExport.test.ts | 1 + src/core/config/importExport.ts | 14 ++++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/core/config/__tests__/importExport.test.ts b/src/core/config/__tests__/importExport.test.ts index 8330187b3b4..eef83959cc6 100644 --- a/src/core/config/__tests__/importExport.test.ts +++ b/src/core/config/__tests__/importExport.test.ts @@ -56,6 +56,7 @@ describe("importExport", () => { setValues: jest.fn(), setValue: jest.fn(), export: jest.fn().mockImplementation(() => Promise.resolve({})), + setProviderSettings: jest.fn(), } as unknown as jest.Mocked // Setup customModesManager mock diff --git a/src/core/config/importExport.ts b/src/core/config/importExport.ts index b4b6b44b177..f1f7142348c 100644 --- a/src/core/config/importExport.ts +++ b/src/core/config/importExport.ts @@ -9,6 +9,7 @@ import { globalSettingsSchema } from "../../schemas" import { ProviderSettingsManager, providerProfilesSchema } from "./ProviderSettingsManager" import { ContextProxy } from "./ContextProxy" import { CustomModesManager } from "./CustomModesManager" +import { ProviderSettings } from "../../exports/types" type ImportOptions = { providerSettingsManager: ProviderSettingsManager @@ -38,6 +39,7 @@ export const importSettings = async ({ providerSettingsManager, contextProxy, cu try { const previousProviderProfiles = await providerSettingsManager.export() + const { providerProfiles: newProviderProfiles, globalSettings } = schema.parse( JSON.parse(await fs.readFile(uris[0].fsPath, "utf-8")), ) @@ -61,12 +63,12 @@ export const importSettings = async ({ providerSettingsManager, contextProxy, cu await providerSettingsManager.import(newProviderProfiles) await contextProxy.setValues(globalSettings) - // Roo uses providerSettingsManager to manage api configs, but Cline uses ContextProxy, and to due to some legacy - // code from it, we need to set the the provider setttings here as well. - // For the future we should remove the provider from the proxy and keep providerSettingsManager as source of truth for apiConfig. - const firstApiConfig = Object.values(providerProfiles.apiConfigs)[0] - if (firstApiConfig) { - contextProxy.setProviderSettings(firstApiConfig) + // For the future we should remove the provider from the proxy and keep + // providerSettingsManager as source of truth for apiConfig. + const providerSettings: ProviderSettings = Object.values(providerProfiles.apiConfigs)[0] + + if (providerSettings) { + contextProxy.setProviderSettings(providerSettings) } contextProxy.setValue("currentApiConfigName", providerProfiles.currentApiConfigName) From 09ccacf90d4fa69bf18d2da0d7969a165e80081e Mon Sep 17 00:00:00 2001 From: cte Date: Mon, 28 Apr 2025 15:58:32 -0700 Subject: [PATCH 3/6] Tidy --- src/core/config/importExport.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/core/config/importExport.ts b/src/core/config/importExport.ts index f1f7142348c..f2456c7cabe 100644 --- a/src/core/config/importExport.ts +++ b/src/core/config/importExport.ts @@ -6,10 +6,10 @@ import * as vscode from "vscode" import { z } from "zod" import { globalSettingsSchema } from "../../schemas" + import { ProviderSettingsManager, providerProfilesSchema } from "./ProviderSettingsManager" import { ContextProxy } from "./ContextProxy" import { CustomModesManager } from "./CustomModesManager" -import { ProviderSettings } from "../../exports/types" type ImportOptions = { providerSettingsManager: ProviderSettingsManager @@ -63,15 +63,18 @@ export const importSettings = async ({ providerSettingsManager, contextProxy, cu await providerSettingsManager.import(newProviderProfiles) await contextProxy.setValues(globalSettings) - // For the future we should remove the provider from the proxy and keep - // providerSettingsManager as source of truth for apiConfig. - const providerSettings: ProviderSettings = Object.values(providerProfiles.apiConfigs)[0] + // Set the current provider. + const currentProviderName = providerProfiles.currentApiConfigName + const currentProvider = providerProfiles.apiConfigs[currentProviderName] + contextProxy.setValue("currentApiConfigName", currentProviderName) - if (providerSettings) { - contextProxy.setProviderSettings(providerSettings) + // TODO: It seems like we don't need to have the provider settings in + // the proxy; we can just use providerSettingsManager as the source of + // truth. + if (currentProvider) { + contextProxy.setProviderSettings(currentProvider) } - contextProxy.setValue("currentApiConfigName", providerProfiles.currentApiConfigName) contextProxy.setValue("listApiConfigMeta", await providerSettingsManager.listConfig()) return { providerProfiles, globalSettings, success: true } From 4edc1588e51862e41018114ae7c0dd8dfc02c4e2 Mon Sep 17 00:00:00 2001 From: Chris Estreich Date: Mon, 28 Apr 2025 15:58:56 -0700 Subject: [PATCH 4/6] Update webview-ui/src/components/welcome/WelcomeView.tsx Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> --- webview-ui/src/components/welcome/WelcomeView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webview-ui/src/components/welcome/WelcomeView.tsx b/webview-ui/src/components/welcome/WelcomeView.tsx index 11b04ea8dc7..8ff19293cb6 100644 --- a/webview-ui/src/components/welcome/WelcomeView.tsx +++ b/webview-ui/src/components/welcome/WelcomeView.tsx @@ -117,7 +117,7 @@ const WelcomeView = () => {
vscode.postMessage({ type: "importSettings" })} + onClick={e => { e.preventDefault(); vscode.postMessage({ type: "importSettings" }) }} className="text-sm"> {t("welcome:importSettings")} From 828d21cd0f59486a952ab5c9069c8073028e15fd Mon Sep 17 00:00:00 2001 From: cte Date: Mon, 28 Apr 2025 15:59:41 -0700 Subject: [PATCH 5/6] Prettier --- webview-ui/src/components/welcome/WelcomeView.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/webview-ui/src/components/welcome/WelcomeView.tsx b/webview-ui/src/components/welcome/WelcomeView.tsx index 8ff19293cb6..536a654844b 100644 --- a/webview-ui/src/components/welcome/WelcomeView.tsx +++ b/webview-ui/src/components/welcome/WelcomeView.tsx @@ -117,7 +117,10 @@ const WelcomeView = () => {
{ e.preventDefault(); vscode.postMessage({ type: "importSettings" }) }} + onClick={(e) => { + e.preventDefault() + vscode.postMessage({ type: "importSettings" }) + }} className="text-sm"> {t("welcome:importSettings")} From 9921bf5a6e8fce7a35c0c338d1ac55e7ac7d79ed Mon Sep 17 00:00:00 2001 From: cte Date: Mon, 28 Apr 2025 16:06:32 -0700 Subject: [PATCH 6/6] Add missing translations --- webview-ui/src/i18n/locales/ja/welcome.json | 3 ++- webview-ui/src/i18n/locales/ko/welcome.json | 3 ++- webview-ui/src/i18n/locales/ru/welcome.json | 3 ++- webview-ui/src/i18n/locales/tr/welcome.json | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/webview-ui/src/i18n/locales/ja/welcome.json b/webview-ui/src/i18n/locales/ja/welcome.json index d4af12478d7..4374895cc3d 100644 --- a/webview-ui/src/i18n/locales/ja/welcome.json +++ b/webview-ui/src/i18n/locales/ja/welcome.json @@ -23,5 +23,6 @@ "allow": "許可", "deny": "拒否" }, - "or": "または" + "or": "または", + "importSettings": "設定をインポート" } diff --git a/webview-ui/src/i18n/locales/ko/welcome.json b/webview-ui/src/i18n/locales/ko/welcome.json index 320e2f4af61..42d790f33a5 100644 --- a/webview-ui/src/i18n/locales/ko/welcome.json +++ b/webview-ui/src/i18n/locales/ko/welcome.json @@ -23,5 +23,6 @@ "allow": "허용", "deny": "거부" }, - "or": "또는" + "or": "또는", + "importSettings": "설정 가져오기" } diff --git a/webview-ui/src/i18n/locales/ru/welcome.json b/webview-ui/src/i18n/locales/ru/welcome.json index 676bc1594ba..5695a419930 100644 --- a/webview-ui/src/i18n/locales/ru/welcome.json +++ b/webview-ui/src/i18n/locales/ru/welcome.json @@ -23,5 +23,6 @@ "allow": "Разрешить", "deny": "Запретить" }, - "or": "или" + "or": "или", + "importSettings": "Импорт настроек" } diff --git a/webview-ui/src/i18n/locales/tr/welcome.json b/webview-ui/src/i18n/locales/tr/welcome.json index a2d6cc7cfae..b7d8141813c 100644 --- a/webview-ui/src/i18n/locales/tr/welcome.json +++ b/webview-ui/src/i18n/locales/tr/welcome.json @@ -23,5 +23,6 @@ "allow": "İzin Ver", "deny": "Reddet" }, - "or": "veya" + "or": "veya", + "importSettings": "Ayarları İçe Aktar" }