mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-09-11 22:51:26 +00:00
ux: Improvements to the new, RCC Provider centric onboarding flow (#9709)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
This commit is contained in:
parent
4591e960ed
commit
f26d5a479f
66 changed files with 408 additions and 220 deletions
|
|
@ -1426,10 +1426,10 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
|
|||
{!cloudIsAuthenticated && taskHistory.length >= 6 && (
|
||||
<DismissibleUpsell
|
||||
upsellId="taskList2"
|
||||
icon={<Cloud className="size-5 mt-0.5 shrink-0" />}
|
||||
icon={<Cloud className="size-5 shrink-0" />}
|
||||
onClick={() => openUpsell()}
|
||||
dismissOnClick={false}
|
||||
className="!bg-vscode-editor-background mt-6 border-border rounded-xl pl-4 pr-3 py-3 !text-base">
|
||||
className="bg-none mt-6 border-border rounded-xl p-0 py-3 !text-base">
|
||||
<Trans
|
||||
i18nKey="cloud:upsell.taskList"
|
||||
components={{
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@ import { ConsecutiveMistakeLimitControl } from "./ConsecutiveMistakeLimitControl
|
|||
import { BedrockCustomArn } from "./providers/BedrockCustomArn"
|
||||
import { RooBalanceDisplay } from "./providers/RooBalanceDisplay"
|
||||
import { buildDocLink } from "@src/utils/docLinks"
|
||||
import { BookOpenText } from "lucide-react"
|
||||
|
||||
export interface ApiOptionsProps {
|
||||
uriScheme: string | undefined
|
||||
|
|
@ -466,6 +467,12 @@ const ApiOptions = ({
|
|||
const [rooOption] = options.splice(rooIndex, 1)
|
||||
options.unshift(rooOption)
|
||||
}
|
||||
} else {
|
||||
const openRouterIndex = options.findIndex((opt) => opt.value === "openrouter")
|
||||
if (openRouterIndex > 0) {
|
||||
const [openRouterOption] = options.splice(openRouterIndex, 1)
|
||||
options.unshift(openRouterOption)
|
||||
}
|
||||
}
|
||||
|
||||
return options
|
||||
|
|
@ -475,16 +482,15 @@ const ApiOptions = ({
|
|||
<div className="flex flex-col gap-3">
|
||||
<div className="flex flex-col gap-1 relative">
|
||||
<div className="flex justify-between items-center">
|
||||
<label className="block font-medium mb-1">{t("settings:providers.apiProvider")}</label>
|
||||
<label className="block font-medium">{t("settings:providers.apiProvider")}</label>
|
||||
{selectedProvider === "roo" && cloudIsAuthenticated ? (
|
||||
<RooBalanceDisplay />
|
||||
) : (
|
||||
docs && (
|
||||
<div className="text-xs text-vscode-descriptionForeground">
|
||||
<VSCodeLink href={docs.url} className="hover:text-vscode-foreground" target="_blank">
|
||||
{t("settings:providers.providerDocumentation", { provider: docs.name })}
|
||||
</VSCodeLink>
|
||||
</div>
|
||||
<VSCodeLink href={docs.url} target="_blank" className="flex gap-2">
|
||||
{docs.name}
|
||||
<BookOpenText className="size-4 inline ml-2" />
|
||||
</VSCodeLink>
|
||||
)
|
||||
)}
|
||||
</div>
|
||||
|
|
@ -509,7 +515,7 @@ const ApiOptions = ({
|
|||
routerModels={routerModels}
|
||||
selectedModelId={selectedModelId}
|
||||
uriScheme={uriScheme}
|
||||
fromWelcomeView={fromWelcomeView}
|
||||
simplifySettings={fromWelcomeView}
|
||||
organizationAllowList={organizationAllowList}
|
||||
modelValidationError={modelValidationError}
|
||||
/>
|
||||
|
|
@ -524,6 +530,7 @@ const ApiOptions = ({
|
|||
refetchRouterModels={refetchRouterModels}
|
||||
organizationAllowList={organizationAllowList}
|
||||
modelValidationError={modelValidationError}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
|
|
@ -535,6 +542,7 @@ const ApiOptions = ({
|
|||
uriScheme={uriScheme}
|
||||
organizationAllowList={organizationAllowList}
|
||||
modelValidationError={modelValidationError}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
|
|
@ -545,6 +553,7 @@ const ApiOptions = ({
|
|||
routerModels={routerModels}
|
||||
organizationAllowList={organizationAllowList}
|
||||
modelValidationError={modelValidationError}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
|
|
@ -556,15 +565,24 @@ const ApiOptions = ({
|
|||
refetchRouterModels={refetchRouterModels}
|
||||
organizationAllowList={organizationAllowList}
|
||||
modelValidationError={modelValidationError}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
{selectedProvider === "anthropic" && (
|
||||
<Anthropic apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
|
||||
<Anthropic
|
||||
apiConfiguration={apiConfiguration}
|
||||
setApiConfigurationField={setApiConfigurationField}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
{selectedProvider === "claude-code" && (
|
||||
<ClaudeCode apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
|
||||
<ClaudeCode
|
||||
apiConfiguration={apiConfiguration}
|
||||
setApiConfigurationField={setApiConfigurationField}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
{selectedProvider === "openai-native" && (
|
||||
|
|
@ -572,15 +590,24 @@ const ApiOptions = ({
|
|||
apiConfiguration={apiConfiguration}
|
||||
setApiConfigurationField={setApiConfigurationField}
|
||||
selectedModelInfo={selectedModelInfo}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
{selectedProvider === "mistral" && (
|
||||
<Mistral apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
|
||||
<Mistral
|
||||
apiConfiguration={apiConfiguration}
|
||||
setApiConfigurationField={setApiConfigurationField}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
{selectedProvider === "baseten" && (
|
||||
<Baseten apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
|
||||
<Baseten
|
||||
apiConfiguration={apiConfiguration}
|
||||
setApiConfigurationField={setApiConfigurationField}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
{selectedProvider === "bedrock" && (
|
||||
|
|
@ -588,6 +615,7 @@ const ApiOptions = ({
|
|||
apiConfiguration={apiConfiguration}
|
||||
setApiConfigurationField={setApiConfigurationField}
|
||||
selectedModelInfo={selectedModelInfo}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
|
|
@ -595,7 +623,7 @@ const ApiOptions = ({
|
|||
<Vertex
|
||||
apiConfiguration={apiConfiguration}
|
||||
setApiConfigurationField={setApiConfigurationField}
|
||||
fromWelcomeView={fromWelcomeView}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
|
|
@ -603,7 +631,7 @@ const ApiOptions = ({
|
|||
<Gemini
|
||||
apiConfiguration={apiConfiguration}
|
||||
setApiConfigurationField={setApiConfigurationField}
|
||||
fromWelcomeView={fromWelcomeView}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
|
|
@ -613,27 +641,48 @@ const ApiOptions = ({
|
|||
setApiConfigurationField={setApiConfigurationField}
|
||||
organizationAllowList={organizationAllowList}
|
||||
modelValidationError={modelValidationError}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
{selectedProvider === "lmstudio" && (
|
||||
<LMStudio apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
|
||||
<LMStudio
|
||||
apiConfiguration={apiConfiguration}
|
||||
setApiConfigurationField={setApiConfigurationField}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
{selectedProvider === "deepseek" && (
|
||||
<DeepSeek apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
|
||||
<DeepSeek
|
||||
apiConfiguration={apiConfiguration}
|
||||
setApiConfigurationField={setApiConfigurationField}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
{selectedProvider === "doubao" && (
|
||||
<Doubao apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
|
||||
<Doubao
|
||||
apiConfiguration={apiConfiguration}
|
||||
setApiConfigurationField={setApiConfigurationField}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
{selectedProvider === "qwen-code" && (
|
||||
<QwenCode apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
|
||||
<QwenCode
|
||||
apiConfiguration={apiConfiguration}
|
||||
setApiConfigurationField={setApiConfigurationField}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
{selectedProvider === "moonshot" && (
|
||||
<Moonshot apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
|
||||
<Moonshot
|
||||
apiConfiguration={apiConfiguration}
|
||||
setApiConfigurationField={setApiConfigurationField}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
{selectedProvider === "minimax" && (
|
||||
|
|
@ -671,6 +720,7 @@ const ApiOptions = ({
|
|||
routerModels={routerModels}
|
||||
organizationAllowList={organizationAllowList}
|
||||
modelValidationError={modelValidationError}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
|
|
@ -680,6 +730,7 @@ const ApiOptions = ({
|
|||
setApiConfigurationField={setApiConfigurationField}
|
||||
organizationAllowList={organizationAllowList}
|
||||
modelValidationError={modelValidationError}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
|
|
@ -697,6 +748,7 @@ const ApiOptions = ({
|
|||
setApiConfigurationField={setApiConfigurationField}
|
||||
organizationAllowList={organizationAllowList}
|
||||
modelValidationError={modelValidationError}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
|
|
@ -707,6 +759,7 @@ const ApiOptions = ({
|
|||
routerModels={routerModels}
|
||||
organizationAllowList={organizationAllowList}
|
||||
modelValidationError={modelValidationError}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
|
|
@ -733,6 +786,7 @@ const ApiOptions = ({
|
|||
cloudIsAuthenticated={cloudIsAuthenticated}
|
||||
organizationAllowList={organizationAllowList}
|
||||
modelValidationError={modelValidationError}
|
||||
simplifySettings={fromWelcomeView}
|
||||
/>
|
||||
)}
|
||||
|
||||
|
|
@ -801,24 +855,25 @@ const ApiOptions = ({
|
|||
</>
|
||||
)}
|
||||
|
||||
{selectedProvider === "roo" ? (
|
||||
<SimpleThinkingBudget
|
||||
key={`${selectedProvider}-${selectedModelId}`}
|
||||
apiConfiguration={apiConfiguration}
|
||||
setApiConfigurationField={setApiConfigurationField}
|
||||
modelInfo={selectedModelInfo}
|
||||
/>
|
||||
) : (
|
||||
<ThinkingBudget
|
||||
key={`${selectedProvider}-${selectedModelId}`}
|
||||
apiConfiguration={apiConfiguration}
|
||||
setApiConfigurationField={setApiConfigurationField}
|
||||
modelInfo={selectedModelInfo}
|
||||
/>
|
||||
)}
|
||||
{!fromWelcomeView &&
|
||||
(selectedProvider === "roo" ? (
|
||||
<SimpleThinkingBudget
|
||||
key={`${selectedProvider}-${selectedModelId}`}
|
||||
apiConfiguration={apiConfiguration}
|
||||
setApiConfigurationField={setApiConfigurationField}
|
||||
modelInfo={selectedModelInfo}
|
||||
/>
|
||||
) : (
|
||||
<ThinkingBudget
|
||||
key={`${selectedProvider}-${selectedModelId}`}
|
||||
apiConfiguration={apiConfiguration}
|
||||
setApiConfigurationField={setApiConfigurationField}
|
||||
modelInfo={selectedModelInfo}
|
||||
/>
|
||||
))}
|
||||
|
||||
{/* Gate Verbosity UI by capability flag */}
|
||||
{selectedModelInfo?.supportsVerbosity && (
|
||||
{!fromWelcomeView && selectedModelInfo?.supportsVerbosity && (
|
||||
<Verbosity
|
||||
apiConfiguration={apiConfiguration}
|
||||
setApiConfigurationField={setApiConfigurationField}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { useMemo, useState, useCallback, useEffect, useRef } from "react"
|
||||
import { VSCodeLink } from "@vscode/webview-ui-toolkit/react"
|
||||
import { Trans } from "react-i18next"
|
||||
import { ChevronsUpDown, Check, X } from "lucide-react"
|
||||
import { ChevronsUpDown, Check, X, Info } from "lucide-react"
|
||||
|
||||
import type { ProviderSettings, ModelInfo, OrganizationAllowList } from "@roo-code/types"
|
||||
|
||||
|
|
@ -54,6 +54,7 @@ interface ModelPickerProps {
|
|||
) => void
|
||||
organizationAllowList: OrganizationAllowList
|
||||
errorMessage?: string
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const ModelPicker = ({
|
||||
|
|
@ -66,6 +67,7 @@ export const ModelPicker = ({
|
|||
setApiConfigurationField,
|
||||
organizationAllowList,
|
||||
errorMessage,
|
||||
simplifySettings,
|
||||
}: ModelPickerProps) => {
|
||||
const { t } = useAppTranslation()
|
||||
|
||||
|
|
@ -246,25 +248,37 @@ export const ModelPicker = ({
|
|||
{selectedModelInfo?.deprecated && (
|
||||
<ApiErrorMessage errorMessage={t("settings:validation.modelDeprecated")} />
|
||||
)}
|
||||
{selectedModelId && selectedModelInfo && !selectedModelInfo.deprecated && (
|
||||
<ModelInfoView
|
||||
apiProvider={apiConfiguration.apiProvider}
|
||||
selectedModelId={selectedModelId}
|
||||
modelInfo={selectedModelInfo}
|
||||
isDescriptionExpanded={isDescriptionExpanded}
|
||||
setIsDescriptionExpanded={setIsDescriptionExpanded}
|
||||
/>
|
||||
|
||||
{simplifySettings ? (
|
||||
<p className="text-xs text-vscode-descriptionForeground m-0">
|
||||
<Info className="size-3 inline mr-1" />
|
||||
{t("settings:modelPicker.simplifiedExplanation")}
|
||||
</p>
|
||||
) : (
|
||||
<div>
|
||||
{selectedModelId && selectedModelInfo && !selectedModelInfo.deprecated && (
|
||||
<ModelInfoView
|
||||
apiProvider={apiConfiguration.apiProvider}
|
||||
selectedModelId={selectedModelId}
|
||||
modelInfo={selectedModelInfo}
|
||||
isDescriptionExpanded={isDescriptionExpanded}
|
||||
setIsDescriptionExpanded={setIsDescriptionExpanded}
|
||||
/>
|
||||
)}
|
||||
<div className="text-sm text-vscode-descriptionForeground">
|
||||
<Trans
|
||||
i18nKey="settings:modelPicker.automaticFetch"
|
||||
components={{
|
||||
serviceLink: <VSCodeLink href={serviceUrl} className="text-sm" />,
|
||||
defaultModelLink: (
|
||||
<VSCodeLink onClick={() => onSelect(defaultModelId)} className="text-sm" />
|
||||
),
|
||||
}}
|
||||
values={{ serviceName, defaultModelId }}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
<div className="text-sm text-vscode-descriptionForeground">
|
||||
<Trans
|
||||
i18nKey="settings:modelPicker.automaticFetch"
|
||||
components={{
|
||||
serviceLink: <VSCodeLink href={serviceUrl} className="text-sm" />,
|
||||
defaultModelLink: <VSCodeLink onClick={() => onSelect(defaultModelId)} className="text-sm" />,
|
||||
}}
|
||||
values={{ serviceName, defaultModelId }}
|
||||
/>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import { inputEventTransform, noTransform } from "../transforms"
|
|||
type AnthropicProps = {
|
||||
apiConfiguration: ProviderSettings
|
||||
setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const Anthropic = ({ apiConfiguration, setApiConfigurationField }: AnthropicProps) => {
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import { inputEventTransform } from "../transforms"
|
|||
type BasetenProps = {
|
||||
apiConfiguration: ProviderSettings
|
||||
setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const Baseten = ({ apiConfiguration, setApiConfigurationField }: BasetenProps) => {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ type BedrockProps = {
|
|||
apiConfiguration: ProviderSettings
|
||||
setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
|
||||
selectedModelInfo?: ModelInfo
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const Bedrock = ({ apiConfiguration, setApiConfigurationField, selectedModelInfo }: BedrockProps) => {
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ type ChutesProps = {
|
|||
routerModels?: RouterModels
|
||||
organizationAllowList: OrganizationAllowList
|
||||
modelValidationError?: string
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const Chutes = ({
|
||||
|
|
@ -26,6 +27,7 @@ export const Chutes = ({
|
|||
routerModels,
|
||||
organizationAllowList,
|
||||
modelValidationError,
|
||||
simplifySettings,
|
||||
}: ChutesProps) => {
|
||||
const { t } = useAppTranslation()
|
||||
|
||||
|
|
@ -69,6 +71,7 @@ export const Chutes = ({
|
|||
serviceUrl="https://llm.chutes.ai/v1/models"
|
||||
organizationAllowList={organizationAllowList}
|
||||
errorMessage={modelValidationError}
|
||||
simplifySettings={simplifySettings}
|
||||
/>
|
||||
</>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import { Slider } from "@src/components/ui"
|
|||
interface ClaudeCodeProps {
|
||||
apiConfiguration: ProviderSettings
|
||||
setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const ClaudeCode: React.FC<ClaudeCodeProps> = ({ apiConfiguration, setApiConfigurationField }) => {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ type DeepInfraProps = {
|
|||
refetchRouterModels: () => void
|
||||
organizationAllowList: OrganizationAllowList
|
||||
modelValidationError?: string
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const DeepInfra = ({
|
||||
|
|
@ -28,6 +29,7 @@ export const DeepInfra = ({
|
|||
refetchRouterModels,
|
||||
organizationAllowList,
|
||||
modelValidationError,
|
||||
simplifySettings,
|
||||
}: DeepInfraProps) => {
|
||||
const { t } = useAppTranslation()
|
||||
|
||||
|
|
@ -88,6 +90,7 @@ export const DeepInfra = ({
|
|||
serviceUrl="https://deepinfra.com/models"
|
||||
organizationAllowList={organizationAllowList}
|
||||
errorMessage={modelValidationError}
|
||||
simplifySettings={simplifySettings}
|
||||
/>
|
||||
</>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import { inputEventTransform } from "../transforms"
|
|||
type DeepSeekProps = {
|
||||
apiConfiguration: ProviderSettings
|
||||
setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const DeepSeek = ({ apiConfiguration, setApiConfigurationField }: DeepSeekProps) => {
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import { inputEventTransform } from "../transforms"
|
|||
type DoubaoProps = {
|
||||
apiConfiguration: ProviderSettings
|
||||
setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const Doubao = ({ apiConfiguration, setApiConfigurationField }: DoubaoProps) => {
|
||||
|
|
|
|||
|
|
@ -12,10 +12,10 @@ import { inputEventTransform } from "../transforms"
|
|||
type GeminiProps = {
|
||||
apiConfiguration: ProviderSettings
|
||||
setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
|
||||
fromWelcomeView?: boolean
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const Gemini = ({ apiConfiguration, setApiConfigurationField, fromWelcomeView }: GeminiProps) => {
|
||||
export const Gemini = ({ apiConfiguration, setApiConfigurationField, simplifySettings }: GeminiProps) => {
|
||||
const { t } = useAppTranslation()
|
||||
|
||||
const [googleGeminiBaseUrlSelected, setGoogleGeminiBaseUrlSelected] = useState(
|
||||
|
|
@ -74,7 +74,7 @@ export const Gemini = ({ apiConfiguration, setApiConfigurationField, fromWelcome
|
|||
/>
|
||||
)}
|
||||
|
||||
{!fromWelcomeView && (
|
||||
{!simplifySettings && (
|
||||
<>
|
||||
<Checkbox
|
||||
className="mt-6"
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ type GlamaProps = {
|
|||
uriScheme?: string
|
||||
organizationAllowList: OrganizationAllowList
|
||||
modelValidationError?: string
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const Glama = ({
|
||||
|
|
@ -28,6 +29,7 @@ export const Glama = ({
|
|||
uriScheme,
|
||||
organizationAllowList,
|
||||
modelValidationError,
|
||||
simplifySettings,
|
||||
}: GlamaProps) => {
|
||||
const { t } = useAppTranslation()
|
||||
|
||||
|
|
@ -70,6 +72,7 @@ export const Glama = ({
|
|||
serviceUrl="https://glama.ai/models"
|
||||
organizationAllowList={organizationAllowList}
|
||||
errorMessage={modelValidationError}
|
||||
simplifySettings={simplifySettings}
|
||||
/>
|
||||
</>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ type IOIntelligenceProps = {
|
|||
setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
|
||||
organizationAllowList: OrganizationAllowList
|
||||
modelValidationError?: string
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const IOIntelligence = ({
|
||||
|
|
@ -28,6 +29,7 @@ export const IOIntelligence = ({
|
|||
setApiConfigurationField,
|
||||
organizationAllowList,
|
||||
modelValidationError,
|
||||
simplifySettings,
|
||||
}: IOIntelligenceProps) => {
|
||||
const { t } = useAppTranslation()
|
||||
const { routerModels } = useExtensionState()
|
||||
|
|
@ -71,6 +73,7 @@ export const IOIntelligence = ({
|
|||
setApiConfigurationField={setApiConfigurationField}
|
||||
organizationAllowList={organizationAllowList}
|
||||
errorMessage={modelValidationError}
|
||||
simplifySettings={simplifySettings}
|
||||
/>
|
||||
</>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import { ModelRecord } from "@roo/api"
|
|||
type LMStudioProps = {
|
||||
apiConfiguration: ProviderSettings
|
||||
setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const LMStudio = ({ apiConfiguration, setApiConfigurationField }: LMStudioProps) => {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ type LiteLLMProps = {
|
|||
setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
|
||||
organizationAllowList: OrganizationAllowList
|
||||
modelValidationError?: string
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const LiteLLM = ({
|
||||
|
|
@ -26,6 +27,7 @@ export const LiteLLM = ({
|
|||
setApiConfigurationField,
|
||||
organizationAllowList,
|
||||
modelValidationError,
|
||||
simplifySettings,
|
||||
}: LiteLLMProps) => {
|
||||
const { t } = useAppTranslation()
|
||||
const { routerModels } = useExtensionState()
|
||||
|
|
@ -151,6 +153,7 @@ export const LiteLLM = ({
|
|||
setApiConfigurationField={setApiConfigurationField}
|
||||
organizationAllowList={organizationAllowList}
|
||||
errorMessage={modelValidationError}
|
||||
simplifySettings={simplifySettings}
|
||||
/>
|
||||
|
||||
{/* Show prompt caching option if the selected model supports it */}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ type MistralProps = {
|
|||
apiConfiguration: ProviderSettings
|
||||
setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
|
||||
routerModels?: RouterModels
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const Mistral = ({ apiConfiguration, setApiConfigurationField }: MistralProps) => {
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import { cn } from "@/lib/utils"
|
|||
type MoonshotProps = {
|
||||
apiConfiguration: ProviderSettings
|
||||
setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const Moonshot = ({ apiConfiguration, setApiConfigurationField }: MoonshotProps) => {
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ type OpenAIProps = {
|
|||
apiConfiguration: ProviderSettings
|
||||
setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
|
||||
selectedModelInfo?: ModelInfo
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const OpenAI = ({ apiConfiguration, setApiConfigurationField, selectedModelInfo }: OpenAIProps) => {
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ type OpenAICompatibleProps = {
|
|||
setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
|
||||
organizationAllowList: OrganizationAllowList
|
||||
modelValidationError?: string
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const OpenAICompatible = ({
|
||||
|
|
@ -35,6 +36,7 @@ export const OpenAICompatible = ({
|
|||
setApiConfigurationField,
|
||||
organizationAllowList,
|
||||
modelValidationError,
|
||||
simplifySettings,
|
||||
}: OpenAICompatibleProps) => {
|
||||
const { t } = useAppTranslation()
|
||||
|
||||
|
|
@ -147,6 +149,7 @@ export const OpenAICompatible = ({
|
|||
serviceUrl="https://platform.openai.com"
|
||||
organizationAllowList={organizationAllowList}
|
||||
errorMessage={modelValidationError}
|
||||
simplifySettings={simplifySettings}
|
||||
/>
|
||||
<R1FormatSetting
|
||||
onChange={handleInputChange("openAiR1FormatEnabled", noTransform)}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ type OpenRouterProps = {
|
|||
routerModels?: RouterModels
|
||||
selectedModelId: string
|
||||
uriScheme: string | undefined
|
||||
fromWelcomeView?: boolean
|
||||
simplifySettings?: boolean
|
||||
organizationAllowList: OrganizationAllowList
|
||||
modelValidationError?: string
|
||||
}
|
||||
|
|
@ -32,7 +32,7 @@ export const OpenRouter = ({
|
|||
setApiConfigurationField,
|
||||
routerModels,
|
||||
uriScheme,
|
||||
fromWelcomeView,
|
||||
simplifySettings,
|
||||
organizationAllowList,
|
||||
modelValidationError,
|
||||
}: OpenRouterProps) => {
|
||||
|
|
@ -77,7 +77,7 @@ export const OpenRouter = ({
|
|||
{t("settings:providers.getOpenRouterApiKey")}
|
||||
</VSCodeButtonLink>
|
||||
)}
|
||||
{!fromWelcomeView && (
|
||||
{!simplifySettings && (
|
||||
<>
|
||||
<div>
|
||||
<Checkbox
|
||||
|
|
@ -123,6 +123,7 @@ export const OpenRouter = ({
|
|||
serviceUrl="https://openrouter.ai/models"
|
||||
organizationAllowList={organizationAllowList}
|
||||
errorMessage={modelValidationError}
|
||||
simplifySettings={simplifySettings}
|
||||
/>
|
||||
</>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import { type ProviderSettings } from "@roo-code/types"
|
|||
interface QwenCodeProps {
|
||||
apiConfiguration: ProviderSettings
|
||||
setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const QwenCode: React.FC<QwenCodeProps> = ({ apiConfiguration, setApiConfigurationField }) => {
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ type RequestyProps = {
|
|||
organizationAllowList: OrganizationAllowList
|
||||
modelValidationError?: string
|
||||
uriScheme?: string
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const Requesty = ({
|
||||
|
|
@ -33,6 +34,7 @@ export const Requesty = ({
|
|||
organizationAllowList,
|
||||
modelValidationError,
|
||||
uriScheme,
|
||||
simplifySettings,
|
||||
}: RequestyProps) => {
|
||||
const { t } = useAppTranslation()
|
||||
|
||||
|
|
@ -143,6 +145,7 @@ export const Requesty = ({
|
|||
serviceUrl="https://requesty.ai"
|
||||
organizationAllowList={organizationAllowList}
|
||||
errorMessage={modelValidationError}
|
||||
simplifySettings={simplifySettings}
|
||||
/>
|
||||
</>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ type RooProps = {
|
|||
cloudIsAuthenticated: boolean
|
||||
organizationAllowList: OrganizationAllowList
|
||||
modelValidationError?: string
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const Roo = ({
|
||||
|
|
@ -24,6 +25,7 @@ export const Roo = ({
|
|||
cloudIsAuthenticated,
|
||||
organizationAllowList,
|
||||
modelValidationError,
|
||||
simplifySettings,
|
||||
}: RooProps) => {
|
||||
const { t } = useAppTranslation()
|
||||
|
||||
|
|
@ -55,6 +57,7 @@ export const Roo = ({
|
|||
serviceUrl="https://roocode.com"
|
||||
organizationAllowList={organizationAllowList}
|
||||
errorMessage={modelValidationError}
|
||||
simplifySettings={simplifySettings}
|
||||
/>
|
||||
</>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ type UnboundProps = {
|
|||
routerModels?: RouterModels
|
||||
organizationAllowList: OrganizationAllowList
|
||||
modelValidationError?: string
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const Unbound = ({
|
||||
|
|
@ -32,6 +33,7 @@ export const Unbound = ({
|
|||
routerModels,
|
||||
organizationAllowList,
|
||||
modelValidationError,
|
||||
simplifySettings,
|
||||
}: UnboundProps) => {
|
||||
const { t } = useAppTranslation()
|
||||
const [didRefetch, setDidRefetch] = useState<boolean>()
|
||||
|
|
@ -185,6 +187,7 @@ export const Unbound = ({
|
|||
setApiConfigurationField={setApiConfigurationField}
|
||||
organizationAllowList={organizationAllowList}
|
||||
errorMessage={modelValidationError}
|
||||
simplifySettings={simplifySettings}
|
||||
/>
|
||||
</>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ type VercelAiGatewayProps = {
|
|||
routerModels?: RouterModels
|
||||
organizationAllowList: OrganizationAllowList
|
||||
modelValidationError?: string
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const VercelAiGateway = ({
|
||||
|
|
@ -25,6 +26,7 @@ export const VercelAiGateway = ({
|
|||
routerModels,
|
||||
organizationAllowList,
|
||||
modelValidationError,
|
||||
simplifySettings,
|
||||
}: VercelAiGatewayProps) => {
|
||||
const { t } = useAppTranslation()
|
||||
|
||||
|
|
@ -70,6 +72,7 @@ export const VercelAiGateway = ({
|
|||
serviceUrl="https://vercel.com/ai-gateway/models"
|
||||
organizationAllowList={organizationAllowList}
|
||||
errorMessage={modelValidationError}
|
||||
simplifySettings={simplifySettings}
|
||||
/>
|
||||
</>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -12,10 +12,10 @@ import { inputEventTransform } from "../transforms"
|
|||
type VertexProps = {
|
||||
apiConfiguration: ProviderSettings
|
||||
setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
|
||||
fromWelcomeView?: boolean
|
||||
simplifySettings?: boolean
|
||||
}
|
||||
|
||||
export const Vertex = ({ apiConfiguration, setApiConfigurationField, fromWelcomeView }: VertexProps) => {
|
||||
export const Vertex = ({ apiConfiguration, setApiConfigurationField, simplifySettings }: VertexProps) => {
|
||||
const { t } = useAppTranslation()
|
||||
|
||||
const handleInputChange = useCallback(
|
||||
|
|
@ -94,7 +94,7 @@ export const Vertex = ({ apiConfiguration, setApiConfigurationField, fromWelcome
|
|||
</Select>
|
||||
</div>
|
||||
|
||||
{!fromWelcomeView && apiConfiguration.apiModelId?.startsWith("gemini") && (
|
||||
{!simplifySettings && apiConfiguration.apiModelId?.startsWith("gemini") && (
|
||||
<div className="mt-6">
|
||||
<Checkbox
|
||||
data-testid="checkbox-url-context"
|
||||
|
|
|
|||
|
|
@ -128,13 +128,13 @@ describe("Gemini", () => {
|
|||
})
|
||||
})
|
||||
|
||||
describe("fromWelcomeView prop", () => {
|
||||
it("should hide URL context and grounding checkboxes when fromWelcomeView is true, but keep custom base URL", () => {
|
||||
describe("simplifySettings prop", () => {
|
||||
it("should hide URL context and grounding checkboxes when simplifySettings is true, but keep custom base URL", () => {
|
||||
render(
|
||||
<Gemini
|
||||
apiConfiguration={defaultApiConfiguration}
|
||||
setApiConfigurationField={mockSetApiConfigurationField}
|
||||
fromWelcomeView={true}
|
||||
simplifySettings={true}
|
||||
/>,
|
||||
)
|
||||
|
||||
|
|
@ -145,12 +145,12 @@ describe("Gemini", () => {
|
|||
expect(screen.queryByTestId("checkbox-grounding-search")).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it("should show all checkboxes when fromWelcomeView is false", () => {
|
||||
it("should show all checkboxes when simplifySettings is false", () => {
|
||||
render(
|
||||
<Gemini
|
||||
apiConfiguration={defaultApiConfiguration}
|
||||
setApiConfigurationField={mockSetApiConfigurationField}
|
||||
fromWelcomeView={false}
|
||||
simplifySettings={false}
|
||||
/>,
|
||||
)
|
||||
|
||||
|
|
@ -160,7 +160,7 @@ describe("Gemini", () => {
|
|||
expect(screen.getByTestId("checkbox-grounding-search")).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it("should show all checkboxes when fromWelcomeView is undefined (default behavior)", () => {
|
||||
it("should show all checkboxes when simplifySettings is undefined (default behavior)", () => {
|
||||
render(
|
||||
<Gemini
|
||||
apiConfiguration={defaultApiConfiguration}
|
||||
|
|
|
|||
|
|
@ -138,12 +138,12 @@ describe("Vertex", () => {
|
|||
expect(urlContextCheckbox).toBeNull()
|
||||
})
|
||||
|
||||
it("should NOT render URL context checkbox when fromWelcomeView is true", () => {
|
||||
it("should NOT render URL context checkbox when simplifySettings is true", () => {
|
||||
render(
|
||||
<Vertex
|
||||
apiConfiguration={defaultApiConfiguration}
|
||||
setApiConfigurationField={mockSetApiConfigurationField}
|
||||
fromWelcomeView={true}
|
||||
simplifySettings={true}
|
||||
/>,
|
||||
)
|
||||
|
||||
|
|
@ -208,12 +208,12 @@ describe("Vertex", () => {
|
|||
expect(groundingCheckbox).toBeNull()
|
||||
})
|
||||
|
||||
it("should NOT render grounding search checkbox when fromWelcomeView is true", () => {
|
||||
it("should NOT render grounding search checkbox when simplifySettings is true", () => {
|
||||
render(
|
||||
<Vertex
|
||||
apiConfiguration={defaultApiConfiguration}
|
||||
setApiConfigurationField={mockSetApiConfigurationField}
|
||||
fromWelcomeView={true}
|
||||
simplifySettings={true}
|
||||
/>,
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,11 @@
|
|||
import { useCallback, useEffect, useRef, useState } from "react"
|
||||
import { VSCodeLink, VSCodeProgressRing, VSCodeTextField } from "@vscode/webview-ui-toolkit/react"
|
||||
import {
|
||||
VSCodeLink,
|
||||
VSCodeProgressRing,
|
||||
VSCodeRadio,
|
||||
VSCodeRadioGroup,
|
||||
VSCodeTextField,
|
||||
} from "@vscode/webview-ui-toolkit/react"
|
||||
|
||||
import type { ProviderSettings } from "@roo-code/types"
|
||||
|
||||
|
|
@ -14,7 +20,7 @@ import { Tab, TabContent } from "../common/Tab"
|
|||
|
||||
import RooHero from "./RooHero"
|
||||
import { Trans } from "react-i18next"
|
||||
import { ArrowLeft } from "lucide-react"
|
||||
import { ArrowLeft, ArrowRight, BadgeInfo } from "lucide-react"
|
||||
|
||||
type ProviderOption = "roo" | "custom"
|
||||
|
||||
|
|
@ -27,6 +33,7 @@ const WelcomeViewProvider = () => {
|
|||
const [authInProgress, setAuthInProgress] = useState(false)
|
||||
const [showManualEntry, setShowManualEntry] = useState(false)
|
||||
const [manualUrl, setManualUrl] = useState("")
|
||||
const [manualErrorMessage, setManualErrorMessage] = useState<boolean | undefined>(undefined)
|
||||
const manualUrlInputRef = useRef<HTMLInputElement | null>(null)
|
||||
|
||||
// When auth completes during the provider signup flow, save the Roo config
|
||||
|
|
@ -92,6 +99,7 @@ const WelcomeViewProvider = () => {
|
|||
setAuthInProgress(false)
|
||||
setShowManualEntry(false)
|
||||
setManualUrl("")
|
||||
setManualErrorMessage(false)
|
||||
}, [])
|
||||
|
||||
const handleManualUrlChange = (e: any) => {
|
||||
|
|
@ -101,19 +109,21 @@ const WelcomeViewProvider = () => {
|
|||
// Auto-trigger authentication when a complete URL is pasted
|
||||
setTimeout(() => {
|
||||
if (url.trim() && url.includes("://") && url.includes("/auth/clerk/callback")) {
|
||||
setManualErrorMessage(false)
|
||||
vscode.postMessage({ type: "rooCloudManualUrl", text: url.trim() })
|
||||
}
|
||||
}, 100)
|
||||
}
|
||||
|
||||
const handleKeyDown = (e: any) => {
|
||||
if (e.key === "Enter") {
|
||||
const url = manualUrl.trim()
|
||||
if (url && url.includes("://") && url.includes("/auth/clerk/callback")) {
|
||||
vscode.postMessage({ type: "rooCloudManualUrl", text: url })
|
||||
}
|
||||
const handleSubmit = useCallback(() => {
|
||||
const url = manualUrl.trim()
|
||||
if (url && url.includes("://") && url.includes("/auth/clerk/callback")) {
|
||||
setManualErrorMessage(false)
|
||||
vscode.postMessage({ type: "rooCloudManualUrl", text: url })
|
||||
} else {
|
||||
setManualErrorMessage(true)
|
||||
}
|
||||
}
|
||||
}, [manualUrl])
|
||||
|
||||
const handleOpenSignupUrl = () => {
|
||||
vscode.postMessage({ type: "rooCloudSignIn", useProviderSignup: true })
|
||||
|
|
@ -127,132 +137,149 @@ const WelcomeViewProvider = () => {
|
|||
<div className="flex flex-col items-start gap-4 pt-8">
|
||||
<VSCodeProgressRing className="size-6" />
|
||||
<h2 className="mt-0 mb-0 text-lg font-semibold">{t("welcome:waitingForCloud.heading")}</h2>
|
||||
<p className="text-sm text-vscode-descriptionForeground mt-0">
|
||||
<p className="text-vscode-descriptionForeground mt-0">
|
||||
{t("welcome:waitingForCloud.description")}
|
||||
</p>
|
||||
|
||||
<p className="text-sm text-vscode-descriptionForeground mt-2">
|
||||
<Trans
|
||||
i18nKey="welcome:waitingForCloud.noPrompt"
|
||||
components={{
|
||||
clickHere: (
|
||||
<button
|
||||
onClick={handleOpenSignupUrl}
|
||||
className="text-vscode-textLink-foreground hover:text-vscode-textLink-activeForeground underline cursor-pointer bg-transparent border-none p-0 text-sm"
|
||||
/>
|
||||
),
|
||||
}}
|
||||
/>
|
||||
</p>
|
||||
|
||||
<p className="text-sm text-vscode-descriptionForeground">
|
||||
<Trans
|
||||
i18nKey="welcome:waitingForCloud.havingTrouble"
|
||||
components={{
|
||||
clickHere: (
|
||||
<button
|
||||
onClick={() => setShowManualEntry(true)}
|
||||
className="text-vscode-textLink-foreground hover:text-vscode-textLink-activeForeground underline cursor-pointer bg-transparent border-none p-0 text-sm"
|
||||
/>
|
||||
),
|
||||
}}
|
||||
/>
|
||||
</p>
|
||||
|
||||
{showManualEntry && (
|
||||
<div className="mt-2 w-full max-w-sm">
|
||||
<p className="text-sm text-vscode-descriptionForeground mb-2">
|
||||
{t("welcome:waitingForCloud.pasteUrl")}
|
||||
</p>
|
||||
<VSCodeTextField
|
||||
ref={manualUrlInputRef as any}
|
||||
value={manualUrl}
|
||||
onChange={handleManualUrlChange}
|
||||
onKeyDown={handleKeyDown}
|
||||
placeholder="vscode://RooVeterinaryInc.roo-cline/auth/clerk/callback?state=..."
|
||||
className="w-full"
|
||||
<div className="flex gap-2 items-start pr-4 text-vscode-descriptionForeground">
|
||||
<BadgeInfo className="size-4 inline shrink-0" />
|
||||
<p className="m-0">
|
||||
<Trans
|
||||
i18nKey="welcome:waitingForCloud.noPrompt"
|
||||
components={{
|
||||
clickHere: (
|
||||
<button
|
||||
onClick={handleOpenSignupUrl}
|
||||
className="text-vscode-textLink-foreground hover:text-vscode-textLink-activeForeground underline cursor-pointer bg-transparent border-none p-0"
|
||||
/>
|
||||
),
|
||||
}}
|
||||
/>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="flex gap-2 items-start pr-4 text-vscode-descriptionForeground">
|
||||
<ArrowRight className="size-4 inline shrink-0" />
|
||||
<div>
|
||||
<p className="m-0">
|
||||
<Trans
|
||||
i18nKey="welcome:waitingForCloud.havingTrouble"
|
||||
components={{
|
||||
clickHere: (
|
||||
<button
|
||||
onClick={() => setShowManualEntry(true)}
|
||||
className="text-vscode-textLink-foreground hover:text-vscode-textLink-activeForeground underline cursor-pointer bg-transparent border-none p-0 "
|
||||
/>
|
||||
),
|
||||
}}
|
||||
/>
|
||||
</p>
|
||||
|
||||
{showManualEntry && (
|
||||
<div className="w-full max-w-sm">
|
||||
<p className="text-vscode-descriptionForeground">
|
||||
{t("welcome:waitingForCloud.pasteUrl")}
|
||||
</p>
|
||||
<div className="flex gap-2 items-center">
|
||||
<VSCodeTextField
|
||||
ref={manualUrlInputRef as any}
|
||||
value={manualUrl}
|
||||
onKeyUp={handleManualUrlChange}
|
||||
placeholder="vscode://RooVeterinaryInc.roo-cline/auth/clerk/callback?state=..."
|
||||
className="flex-1"
|
||||
/>
|
||||
<Button
|
||||
onClick={handleSubmit}
|
||||
disabled={manualUrl.length < 40}
|
||||
variant="secondary">
|
||||
<ArrowRight className="size-4" />
|
||||
</Button>
|
||||
</div>
|
||||
{manualUrl && manualErrorMessage && (
|
||||
<p className="text-vscode-errorForeground mt-2">
|
||||
{t("welcome:waitingForCloud.invalidURL")}
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="mt-4">
|
||||
<Button onClick={handleGoBack} variant="secondary">
|
||||
<ArrowLeft className="size-4" />
|
||||
{t("welcome:waitingForCloud.goBack")}
|
||||
</Button>
|
||||
</div>
|
||||
</TabContent>
|
||||
<div className="sticky bottom-0 bg-vscode-sideBar-background p-4 border-t border-vscode-panel-border">
|
||||
<Button onClick={handleGoBack} variant="secondary" className="flex items-center gap-2">
|
||||
<ArrowLeft className="size-4" />
|
||||
{t("welcome:waitingForCloud.goBack")}
|
||||
</Button>
|
||||
</div>
|
||||
</Tab>
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
<Tab>
|
||||
<TabContent className="flex flex-col gap-4 p-6">
|
||||
<TabContent className="flex flex-col gap-4 p-6 justify-center">
|
||||
<RooHero />
|
||||
<h2 className="mt-0 mb-0 text-xl">{t("welcome:greeting")}</h2>
|
||||
|
||||
<div className="text-base text-vscode-foreground">
|
||||
<p className="mb-3 leading-relaxed">
|
||||
<Trans i18nKey="welcome:introduction" />
|
||||
</p>
|
||||
<p className="mb-0 leading-relaxed">
|
||||
<div className="text-base text-vscode-foreground space-y-3">
|
||||
{selectedProvider === "roo" && (
|
||||
<p>
|
||||
<Trans i18nKey="welcome:introduction" />
|
||||
</p>
|
||||
)}
|
||||
<p>
|
||||
<Trans i18nKey="welcome:chooseProvider" />
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="mb-4">
|
||||
{/* Roo Code Cloud Provider Option */}
|
||||
<div
|
||||
className="flex items-start gap-3 p-4 mb-3 border border-vscode-panel-border rounded-md cursor-pointer hover:bg-vscode-list-hoverBackground"
|
||||
onClick={() => setSelectedProvider("roo")}>
|
||||
<input
|
||||
type="radio"
|
||||
name="provider"
|
||||
checked={selectedProvider === "roo"}
|
||||
onChange={() => setSelectedProvider("roo")}
|
||||
className="mt-1"
|
||||
/>
|
||||
<div className="flex-1">
|
||||
<span className="text-sm font-semibold mb-2 block">
|
||||
{t("welcome:providerSignup.rooCloudProvider")}
|
||||
</span>
|
||||
<p className="text-xs text-vscode-descriptionForeground mb-1">
|
||||
{t("welcome:providerSignup.rooCloudDescription")} (
|
||||
<VSCodeLink
|
||||
href="https://roocode.com/provider/pricing?utm_source=extension&utm_medium=welcome-screen&utm_campaign=provider-signup&utm_content=learn-more"
|
||||
className="text-xs">
|
||||
{t("welcome:providerSignup.learnMore")}
|
||||
</VSCodeLink>
|
||||
).
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<VSCodeRadioGroup
|
||||
value={selectedProvider}
|
||||
onChange={(e: Event | React.FormEvent<HTMLElement>) => {
|
||||
const target = ((e as CustomEvent)?.detail?.target ||
|
||||
(e.target as HTMLInputElement)) as HTMLInputElement
|
||||
setSelectedProvider(target.value as ProviderOption)
|
||||
}}>
|
||||
{/* Roo Code Cloud Provider Option */}
|
||||
<VSCodeRadio value="roo" className="flex items-start gap-2">
|
||||
<div className="flex-1 space-y-1 cursor-pointer">
|
||||
<p className="text-lg font-semibold block -mt-1">
|
||||
{t("welcome:providerSignup.rooCloudProvider")}
|
||||
</p>
|
||||
<p className="text-base text-vscode-descriptionForeground mt-0">
|
||||
{t("welcome:providerSignup.rooCloudDescription")} (
|
||||
<VSCodeLink
|
||||
href="https://roocode.com/provider/pricing?utm_source=extension&utm_medium=welcome-screen&utm_campaign=provider-signup&utm_content=learn-more"
|
||||
className="cursor-pointer">
|
||||
{t("welcome:providerSignup.learnMore")}
|
||||
</VSCodeLink>
|
||||
).
|
||||
</p>
|
||||
</div>
|
||||
</VSCodeRadio>
|
||||
|
||||
{/* Use Another Provider Option */}
|
||||
<div
|
||||
className="flex items-start gap-3 p-4 mb-4 border border-vscode-panel-border rounded-md cursor-pointer hover:bg-vscode-list-hoverBackground"
|
||||
onClick={() => setSelectedProvider("custom")}>
|
||||
<input
|
||||
type="radio"
|
||||
name="provider"
|
||||
checked={selectedProvider === "custom"}
|
||||
onChange={() => setSelectedProvider("custom")}
|
||||
className="mt-1"
|
||||
/>
|
||||
<div className="flex-1">
|
||||
<span className="text-sm font-semibold mb-2 block">
|
||||
{t("welcome:providerSignup.useAnotherProvider")}
|
||||
</span>
|
||||
<p className="text-xs text-vscode-descriptionForeground mb-1">
|
||||
{t("welcome:providerSignup.useAnotherProviderDescription")}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{/* Use Another Provider Option */}
|
||||
<VSCodeRadio value="custom" className="flex items-start gap-2">
|
||||
<div className="flex-1 space-y-1 cursor-pointer">
|
||||
<p className="text-lg font-semibold block -mt-1">
|
||||
{t("welcome:providerSignup.useAnotherProvider")}
|
||||
</p>
|
||||
<p className="text-base text-vscode-descriptionForeground mt-0">
|
||||
{t("welcome:providerSignup.useAnotherProviderDescription")}
|
||||
</p>
|
||||
</div>
|
||||
</VSCodeRadio>
|
||||
</VSCodeRadioGroup>
|
||||
|
||||
{/* Show API options only when custom provider is selected */}
|
||||
{selectedProvider === "custom" && (
|
||||
<div className="mt-4">
|
||||
{/* Expand API options only when custom provider is selected, max height is used to force a transition */}
|
||||
<div className="mb-8 border-l-2 border-vscode-panel-border pl-6 ml-[7px]">
|
||||
<div
|
||||
className={`overflow-clip transition-[max-height] ease-in-out duration-300 ${selectedProvider === "custom" ? "max-h-[600px]" : "max-h-0"}`}>
|
||||
<p className="text-base text-vscode-descriptionForeground mt-0">
|
||||
{t("welcome:providerSignup.noApiKeys")}
|
||||
</p>
|
||||
<ApiOptions
|
||||
fromWelcomeView
|
||||
apiConfiguration={apiConfiguration || {}}
|
||||
|
|
@ -262,19 +289,15 @@ const WelcomeViewProvider = () => {
|
|||
setErrorMessage={setErrorMessage}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</TabContent>
|
||||
<div className="sticky bottom-0 bg-vscode-sideBar-background p-4 border-t border-vscode-panel-border">
|
||||
<div className="flex flex-col gap-2">
|
||||
|
||||
<div className="-mt-8">
|
||||
<Button onClick={handleGetStarted} variant="primary">
|
||||
{t("welcome:providerSignup.getStarted")} →
|
||||
</Button>
|
||||
{errorMessage && selectedProvider === "custom" && (
|
||||
<div className="text-vscode-errorForeground text-sm">{errorMessage}</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</TabContent>
|
||||
</Tab>
|
||||
)
|
||||
}
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/ca/settings.json
generated
3
webview-ui/src/i18n/locales/ca/settings.json
generated
|
|
@ -858,7 +858,8 @@
|
|||
"label": "Model",
|
||||
"searchPlaceholder": "Cerca",
|
||||
"noMatchFound": "No s'ha trobat cap coincidència",
|
||||
"useCustomModel": "Utilitzar personalitzat: {{modelId}}"
|
||||
"useCustomModel": "Utilitzar personalitzat: {{modelId}}",
|
||||
"simplifiedExplanation": "Pots ajustar la configuració detallada del model més tard."
|
||||
},
|
||||
"footer": {
|
||||
"feedback": "Si teniu qualsevol pregunta o comentari, no dubteu a obrir un issue a <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> o unir-vos a <redditLink>reddit.com/r/RooCode</redditLink> o <discordLink>discord.gg/roocode</discordLink>",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/ca/welcome.json
generated
2
webview-ui/src/i18n/locales/ca/welcome.json
generated
|
|
@ -23,6 +23,7 @@
|
|||
"learnMore": "més informació",
|
||||
"useAnotherProvider": "Utilitza un altre proveïdor",
|
||||
"useAnotherProviderDescription": "Introdueix una clau API i comença.",
|
||||
"noApiKeys": "No vols haver de tractar amb claus? Opta pel Proveïdor Roo Code Cloud.",
|
||||
"getStarted": "Començar"
|
||||
},
|
||||
"waitingForCloud": {
|
||||
|
|
@ -31,6 +32,7 @@
|
|||
"noPrompt": "Si no se t'avisa per obrir una URL, <clickHere>feu clic aquí</clickHere>.",
|
||||
"havingTrouble": "Si has completat el registre però tens problemes, <clickHere>feu clic aquí</clickHere>.",
|
||||
"pasteUrl": "Enganxa la URL de resposta del teu navegador:",
|
||||
"invalidURL": "No sembla una URL de resposta vàlida. Copia el que Roo Code Cloud mostra al teu navegador.",
|
||||
"goBack": "Enrere"
|
||||
},
|
||||
"startRouter": "Recomanem utilitzar un router LLM:",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/de/settings.json
generated
3
webview-ui/src/i18n/locales/de/settings.json
generated
|
|
@ -858,7 +858,8 @@
|
|||
"label": "Modell",
|
||||
"searchPlaceholder": "Suchen",
|
||||
"noMatchFound": "Keine Übereinstimmung gefunden",
|
||||
"useCustomModel": "Benutzerdefiniert verwenden: {{modelId}}"
|
||||
"useCustomModel": "Benutzerdefiniert verwenden: {{modelId}}",
|
||||
"simplifiedExplanation": "Du kannst detaillierte Modelleinstellungen später anpassen."
|
||||
},
|
||||
"footer": {
|
||||
"feedback": "Wenn du Fragen oder Feedback hast, kannst du gerne ein Issue auf <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> eröffnen oder <redditLink>reddit.com/r/RooCode</redditLink> oder <discordLink>discord.gg/roocode</discordLink> beitreten",
|
||||
|
|
|
|||
6
webview-ui/src/i18n/locales/de/welcome.json
generated
6
webview-ui/src/i18n/locales/de/welcome.json
generated
|
|
@ -16,21 +16,23 @@
|
|||
"incentive": "Probier Roo kostenlos aus"
|
||||
}
|
||||
},
|
||||
"chooseProvider": "Um loszulegen, brauchst du einen LLM-Anbieter:",
|
||||
"chooseProvider": "Roo braucht einen LLM-Anbieter. Wähle deinen:",
|
||||
"providerSignup": {
|
||||
"rooCloudProvider": "Roo Code Cloud Provider",
|
||||
"rooCloudDescription": "Der einfachste Weg, Roo zu nutzen. Eine kuratierte Mischung aus kostenlosen und bezahlten Modellen zu niedrigen Kosten",
|
||||
"learnMore": "mehr erfahren",
|
||||
"useAnotherProvider": "Anderen Anbieter verwenden",
|
||||
"useAnotherProviderDescription": "Gib einen API-Schlüssel ein und leg los.",
|
||||
"noApiKeys": "Du möchtest dich nicht mit Schlüsseln herumschlagen? Geh mit dem Roo Code Cloud Provider.",
|
||||
"getStarted": "Loslegen"
|
||||
},
|
||||
"waitingForCloud": {
|
||||
"heading": "Wir bringen dich zu Roo Code Cloud...",
|
||||
"description": "Schließe die Anmeldung in deinem Browser ab und du wirst automatisch hierher zurückgebracht.",
|
||||
"description": "Wir bringen dich in deinen Browser, um dich für Roo Code Cloud zu registrieren. Dann bringen wir dich hierher zurück, um das Einrichten abzuschließen.",
|
||||
"noPrompt": "Wenn du nicht aufgefordert wirst, eine URL zu öffnen, <clickHere>klick hier</clickHere>.",
|
||||
"havingTrouble": "Wenn du die Anmeldung abgeschlossen hast, aber Probleme hast, <clickHere>klick hier</clickHere>.",
|
||||
"pasteUrl": "Füge die Callback-URL aus deinem Browser ein:",
|
||||
"invalidURL": "Das sieht nicht wie eine gültige Callback-URL aus. Bitte kopiere das, was Roo Code Cloud in deinem Browser anzeigt.",
|
||||
"goBack": "Zurück"
|
||||
},
|
||||
"startRouter": "Wir empfehlen die Verwendung eines LLM-Routers:",
|
||||
|
|
|
|||
|
|
@ -863,7 +863,8 @@
|
|||
"label": "Model",
|
||||
"searchPlaceholder": "Search",
|
||||
"noMatchFound": "No match found",
|
||||
"useCustomModel": "Use custom: {{modelId}}"
|
||||
"useCustomModel": "Use custom: {{modelId}}",
|
||||
"simplifiedExplanation": "You can adjust detailed model settings later."
|
||||
},
|
||||
"footer": {
|
||||
"telemetry": {
|
||||
|
|
|
|||
|
|
@ -16,21 +16,23 @@
|
|||
"incentive": "Try Roo out for free"
|
||||
}
|
||||
},
|
||||
"chooseProvider": "To get started, you need an LLM provider:",
|
||||
"chooseProvider": "Roo needs an LLM provider to work. Choose yours:",
|
||||
"providerSignup": {
|
||||
"rooCloudProvider": "Roo Code Cloud Provider",
|
||||
"rooCloudDescription": "The simplest way to use Roo. A curated mix of free and paid models at a low cost",
|
||||
"learnMore": "learn more",
|
||||
"useAnotherProvider": "Use another provider",
|
||||
"useAnotherProviderDescription": "Enter an API key and get going.",
|
||||
"noApiKeys": "Don't want to deal with keys? Go with the Roo Code Cloud Provider.",
|
||||
"getStarted": "Get started"
|
||||
},
|
||||
"waitingForCloud": {
|
||||
"heading": "Taking you to Roo Code Cloud...",
|
||||
"description": "Complete sign-up in your browser, then you'll return here automatically.",
|
||||
"description": "We'll take you to your browser to sign up for Roo Code Cloud. We'll then bring you back here to finish.",
|
||||
"noPrompt": "If you don't get prompted to open a URL, <clickHere>click here</clickHere>.",
|
||||
"havingTrouble": "If you've completed the sign up but are having trouble, <clickHere>click here</clickHere>.",
|
||||
"pasteUrl": "Paste the callback URL from your browser:",
|
||||
"havingTrouble": "If you've completed sign up but are having trouble, <clickHere>click here</clickHere>.",
|
||||
"pasteUrl": "Paste the callback URL shown in your browser:",
|
||||
"invalidURL": "That doesn't look like a valid callback URL. Please copy what Roo Code Cloud is showing in your browser.",
|
||||
"goBack": "Go back"
|
||||
},
|
||||
"startRouter": "We recommend using an LLM Router:",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/es/settings.json
generated
3
webview-ui/src/i18n/locales/es/settings.json
generated
|
|
@ -858,7 +858,8 @@
|
|||
"label": "Modelo",
|
||||
"searchPlaceholder": "Buscar",
|
||||
"noMatchFound": "No se encontraron coincidencias",
|
||||
"useCustomModel": "Usar personalizado: {{modelId}}"
|
||||
"useCustomModel": "Usar personalizado: {{modelId}}",
|
||||
"simplifiedExplanation": "Puedes ajustar la configuración detallada del modelo más tarde."
|
||||
},
|
||||
"footer": {
|
||||
"feedback": "Si tiene alguna pregunta o comentario, no dude en abrir un issue en <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> o unirse a <redditLink>reddit.com/r/RooCode</redditLink> o <discordLink>discord.gg/roocode</discordLink>",
|
||||
|
|
|
|||
6
webview-ui/src/i18n/locales/es/welcome.json
generated
6
webview-ui/src/i18n/locales/es/welcome.json
generated
|
|
@ -16,21 +16,23 @@
|
|||
"incentive": "Prueba Roo gratis"
|
||||
}
|
||||
},
|
||||
"chooseProvider": "Para comenzar, necesitas un proveedor LLM:",
|
||||
"chooseProvider": "Roo necesita un proveedor de LLM. Elige el tuyo:",
|
||||
"providerSignup": {
|
||||
"rooCloudProvider": "Proveedor Roo Code Cloud",
|
||||
"rooCloudDescription": "La forma más sencilla de usar Roo. Una mezcla seleccionada de modelos gratuitos y de pago a bajo costo",
|
||||
"learnMore": "más información",
|
||||
"useAnotherProvider": "Usar otro proveedor",
|
||||
"useAnotherProviderDescription": "Introduce una clave API y comienza.",
|
||||
"noApiKeys": "¿No quieres lidiar con claves? Ve con el Proveedor de Roo Code Cloud.",
|
||||
"getStarted": "Comenzar"
|
||||
},
|
||||
"waitingForCloud": {
|
||||
"heading": "Te llevamos a Roo Code Cloud...",
|
||||
"description": "Completa el registro en tu navegador y volverás aquí automáticamente.",
|
||||
"description": "Te llevaremos a tu navegador para que te registres en Roo Code Cloud. Luego te traeremos aquí para terminar.",
|
||||
"noPrompt": "Si no se te pide que abras una URL, <clickHere>haz clic aquí</clickHere>.",
|
||||
"havingTrouble": "Si completaste el registro pero tienes problemas, <clickHere>haz clic aquí</clickHere>.",
|
||||
"pasteUrl": "Pega la URL de respuesta de tu navegador:",
|
||||
"invalidURL": "Eso no parece ser una URL de respuesta válida. Por favor copia lo que Roo Code Cloud está mostrando en tu navegador.",
|
||||
"goBack": "Volver"
|
||||
},
|
||||
"startRouter": "Recomendamos usar un router LLM:",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/fr/settings.json
generated
3
webview-ui/src/i18n/locales/fr/settings.json
generated
|
|
@ -858,7 +858,8 @@
|
|||
"label": "Modèle",
|
||||
"searchPlaceholder": "Rechercher",
|
||||
"noMatchFound": "Aucune correspondance trouvée",
|
||||
"useCustomModel": "Utiliser personnalisé : {{modelId}}"
|
||||
"useCustomModel": "Utiliser personnalisé : {{modelId}}",
|
||||
"simplifiedExplanation": "Tu peux ajuster les paramètres détaillés du modèle ultérieurement."
|
||||
},
|
||||
"footer": {
|
||||
"feedback": "Si vous avez des questions ou des commentaires, n'hésitez pas à ouvrir un problème sur <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> ou à rejoindre <redditLink>reddit.com/r/RooCode</redditLink> ou <discordLink>discord.gg/roocode</discordLink>",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/fr/welcome.json
generated
2
webview-ui/src/i18n/locales/fr/welcome.json
generated
|
|
@ -23,6 +23,7 @@
|
|||
"learnMore": "en savoir plus",
|
||||
"useAnotherProvider": "Utiliser un autre fournisseur",
|
||||
"useAnotherProviderDescription": "Entre une clé API et commence.",
|
||||
"noApiKeys": "Tu ne veux pas te soucier des clés? Opte pour le Fournisseur Roo Code Cloud.",
|
||||
"getStarted": "Commencer"
|
||||
},
|
||||
"waitingForCloud": {
|
||||
|
|
@ -31,6 +32,7 @@
|
|||
"noPrompt": "Si tu n'es pas invité à ouvrir une URL, <clickHere>clique ici</clickHere>.",
|
||||
"havingTrouble": "Si tu as terminé l'inscription mais que tu rencontres des problèmes, <clickHere>clique ici</clickHere>.",
|
||||
"pasteUrl": "Colle l'URL de rappel depuis ton navigateur :",
|
||||
"invalidURL": "Cela ne ressemble pas à une URL de rappel valide. Copie ce que Roo Code Cloud affiche dans ton navigateur.",
|
||||
"goBack": "Retour"
|
||||
},
|
||||
"startRouter": "Nous recommandons d'utiliser un routeur LLM :",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/hi/settings.json
generated
3
webview-ui/src/i18n/locales/hi/settings.json
generated
|
|
@ -859,7 +859,8 @@
|
|||
"label": "मॉडल",
|
||||
"searchPlaceholder": "खोजें",
|
||||
"noMatchFound": "कोई मिलान नहीं मिला",
|
||||
"useCustomModel": "कस्टम उपयोग करें: {{modelId}}"
|
||||
"useCustomModel": "कस्टम उपयोग करें: {{modelId}}",
|
||||
"simplifiedExplanation": "आप बाद में विस्तृत मॉडल सेटिंग्स समायोजित कर सकते हैं।"
|
||||
},
|
||||
"footer": {
|
||||
"feedback": "यदि आपके कोई प्रश्न या प्रतिक्रिया है, तो <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> पर एक मुद्दा खोलने या <redditLink>reddit.com/r/RooCode</redditLink> या <discordLink>discord.gg/roocode</discordLink> में शामिल होने में संकोच न करें",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/hi/welcome.json
generated
2
webview-ui/src/i18n/locales/hi/welcome.json
generated
|
|
@ -23,6 +23,7 @@
|
|||
"learnMore": "और जानें",
|
||||
"useAnotherProvider": "दूसरे प्रदाता का उपयोग करें",
|
||||
"useAnotherProviderDescription": "एक API कुंजी दर्ज करें और शुरू करें।",
|
||||
"noApiKeys": "कुंजियों से निपटना नहीं चाहते? Roo Code Cloud प्रदाता के साथ जाएं।",
|
||||
"getStarted": "शुरू करें"
|
||||
},
|
||||
"waitingForCloud": {
|
||||
|
|
@ -31,6 +32,7 @@
|
|||
"noPrompt": "यदि आपको URL खोलने के लिए संकेत नहीं मिलता है, तो <clickHere>यहां क्लिक करें</clickHere>।",
|
||||
"havingTrouble": "यदि आपने साइन अप पूरा कर लिया है लेकिन समस्या हो रही है, तो <clickHere>यहां क्लिक करें</clickHere>।",
|
||||
"pasteUrl": "अपने ब्राउज़र से कॉलबैक URL पेस्ट करें:",
|
||||
"invalidURL": "यह एक वैध कॉलबैक URL नहीं लगता है। कृपया वह कॉपी करें जो Roo Code Cloud आपके ब्राउज़र में दिखा रहा है।",
|
||||
"goBack": "वापस जाएं"
|
||||
},
|
||||
"startRouter": "हम एक LLM राउटर का उपयोग करने की सलाह देते हैं:",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/id/settings.json
generated
3
webview-ui/src/i18n/locales/id/settings.json
generated
|
|
@ -888,7 +888,8 @@
|
|||
"label": "Model",
|
||||
"searchPlaceholder": "Cari",
|
||||
"noMatchFound": "Tidak ada yang cocok ditemukan",
|
||||
"useCustomModel": "Gunakan kustom: {{modelId}}"
|
||||
"useCustomModel": "Gunakan kustom: {{modelId}}",
|
||||
"simplifiedExplanation": "Anda dapat menyesuaikan pengaturan model terperinci nanti."
|
||||
},
|
||||
"footer": {
|
||||
"feedback": "Jika kamu punya pertanyaan atau feedback, jangan ragu untuk membuka issue di <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> atau bergabung <redditLink>reddit.com/r/RooCode</redditLink> atau <discordLink>discord.gg/roocode</discordLink>",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/id/welcome.json
generated
2
webview-ui/src/i18n/locales/id/welcome.json
generated
|
|
@ -23,6 +23,7 @@
|
|||
"learnMore": "pelajari lebih lanjut",
|
||||
"useAnotherProvider": "Gunakan penyedia lain",
|
||||
"useAnotherProviderDescription": "Masukkan kunci API dan mulai.",
|
||||
"noApiKeys": "Tidak ingin menangani kunci? Pilih Penyedia Roo Code Cloud.",
|
||||
"getStarted": "Mulai"
|
||||
},
|
||||
"waitingForCloud": {
|
||||
|
|
@ -31,6 +32,7 @@
|
|||
"noPrompt": "Jika kamu tidak diminta untuk membuka URL, <clickHere>klik di sini</clickHere>.",
|
||||
"havingTrouble": "Jika kamu telah menyelesaikan pendaftaran tetapi mengalami masalah, <clickHere>klik di sini</clickHere>.",
|
||||
"pasteUrl": "Tempel URL callback dari browser Anda:",
|
||||
"invalidURL": "Itu tidak terlihat seperti URL callback yang valid. Salin apa yang ditampilkan Roo Code Cloud di browser Anda.",
|
||||
"goBack": "Kembali"
|
||||
},
|
||||
"startRouter": "Kami merekomendasikan menggunakan Router LLM:",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/it/settings.json
generated
3
webview-ui/src/i18n/locales/it/settings.json
generated
|
|
@ -859,7 +859,8 @@
|
|||
"label": "Modello",
|
||||
"searchPlaceholder": "Cerca",
|
||||
"noMatchFound": "Nessuna corrispondenza trovata",
|
||||
"useCustomModel": "Usa personalizzato: {{modelId}}"
|
||||
"useCustomModel": "Usa personalizzato: {{modelId}}",
|
||||
"simplifiedExplanation": "Puoi modificare le impostazioni dettagliate del modello in seguito."
|
||||
},
|
||||
"footer": {
|
||||
"feedback": "Se hai domande o feedback, sentiti libero di aprire un issue su <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> o unirti a <redditLink>reddit.com/r/RooCode</redditLink> o <discordLink>discord.gg/roocode</discordLink>",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/it/welcome.json
generated
2
webview-ui/src/i18n/locales/it/welcome.json
generated
|
|
@ -23,6 +23,7 @@
|
|||
"learnMore": "scopri di più",
|
||||
"useAnotherProvider": "Usa un altro provider",
|
||||
"useAnotherProviderDescription": "Inserisci una chiave API e inizia.",
|
||||
"noApiKeys": "Non vuoi occuparti di chiavi? Scegli il Provider Roo Code Cloud.",
|
||||
"getStarted": "Inizia"
|
||||
},
|
||||
"waitingForCloud": {
|
||||
|
|
@ -31,6 +32,7 @@
|
|||
"noPrompt": "Se non ti viene chiesto di aprire un URL, <clickHere>fai clic qui</clickHere>.",
|
||||
"havingTrouble": "Se hai completato l'iscrizione ma hai problemi, <clickHere>fai clic qui</clickHere>.",
|
||||
"pasteUrl": "Incolla l'URL di callback dal tuo browser:",
|
||||
"invalidURL": "Questo non sembra un URL di callback valido. Copia quello che Roo Code Cloud mostra nel tuo browser.",
|
||||
"goBack": "Indietro"
|
||||
},
|
||||
"startRouter": "Consigliamo di utilizzare un router LLM:",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/ja/settings.json
generated
3
webview-ui/src/i18n/locales/ja/settings.json
generated
|
|
@ -859,7 +859,8 @@
|
|||
"label": "モデル",
|
||||
"searchPlaceholder": "検索",
|
||||
"noMatchFound": "一致するものが見つかりません",
|
||||
"useCustomModel": "カスタムを使用: {{modelId}}"
|
||||
"useCustomModel": "カスタムを使用: {{modelId}}",
|
||||
"simplifiedExplanation": "詳細なモデル設定は後で調整できます。"
|
||||
},
|
||||
"footer": {
|
||||
"feedback": "質問やフィードバックがある場合は、<githubLink>github.com/RooCodeInc/Roo-Code</githubLink>で問題を開くか、<redditLink>reddit.com/r/RooCode</redditLink>や<discordLink>discord.gg/roocode</discordLink>に参加してください",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/ja/welcome.json
generated
2
webview-ui/src/i18n/locales/ja/welcome.json
generated
|
|
@ -23,6 +23,7 @@
|
|||
"learnMore": "詳細を見る",
|
||||
"useAnotherProvider": "別のプロバイダーを使用",
|
||||
"useAnotherProviderDescription": "APIキーを入力して始める。",
|
||||
"noApiKeys": "キーを扱いたくないですか?Roo Code Cloudプロバイダーを選びましょう。",
|
||||
"getStarted": "始める"
|
||||
},
|
||||
"waitingForCloud": {
|
||||
|
|
@ -31,6 +32,7 @@
|
|||
"noPrompt": "URLを開くように促されない場合は、<clickHere>ここをクリック</clickHere>してください。",
|
||||
"havingTrouble": "サインアップを完了しましたが問題がある場合は、<clickHere>ここをクリック</clickHere>してください。",
|
||||
"pasteUrl": "ブラウザからコールバックURLを貼り付けてください:",
|
||||
"invalidURL": "有効なコールバックURLのようには見えません。Roo Code Cloudがブラウザに表示しているものをコピーしてください。",
|
||||
"goBack": "戻る"
|
||||
},
|
||||
"startRouter": "LLMルーターの使用をお勧めします:",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/ko/settings.json
generated
3
webview-ui/src/i18n/locales/ko/settings.json
generated
|
|
@ -859,7 +859,8 @@
|
|||
"label": "모델",
|
||||
"searchPlaceholder": "검색",
|
||||
"noMatchFound": "일치하는 항목 없음",
|
||||
"useCustomModel": "사용자 정의 사용: {{modelId}}"
|
||||
"useCustomModel": "사용자 정의 사용: {{modelId}}",
|
||||
"simplifiedExplanation": "나중에 자세한 모델 설정을 조정할 수 있습니다."
|
||||
},
|
||||
"footer": {
|
||||
"feedback": "질문이나 피드백이 있으시면 <githubLink>github.com/RooCodeInc/Roo-Code</githubLink>에서 이슈를 열거나 <redditLink>reddit.com/r/RooCode</redditLink> 또는 <discordLink>discord.gg/roocode</discordLink>에 가입하세요",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/ko/welcome.json
generated
2
webview-ui/src/i18n/locales/ko/welcome.json
generated
|
|
@ -23,6 +23,7 @@
|
|||
"learnMore": "자세히 알아보기",
|
||||
"useAnotherProvider": "다른 제공업체 사용",
|
||||
"useAnotherProviderDescription": "API 키를 입력하고 시작하세요.",
|
||||
"noApiKeys": "키를 다루기 싫으세요? Roo Code Cloud 제공업체를 선택하세요.",
|
||||
"getStarted": "시작하기"
|
||||
},
|
||||
"waitingForCloud": {
|
||||
|
|
@ -31,6 +32,7 @@
|
|||
"noPrompt": "URL을 열도록 요청받지 않으면 <clickHere>여기를 클릭</clickHere>하세요.",
|
||||
"havingTrouble": "가입을 완료했지만 문제가 있으면 <clickHere>여기를 클릭</clickHere>하세요.",
|
||||
"pasteUrl": "브라우저에서 콜백 URL을 붙여넣으세요:",
|
||||
"invalidURL": "유효한 콜백 URL로 보이지 않습니다. Roo Code Cloud에서 브라우저에 표시하는 내용을 복사하세요.",
|
||||
"goBack": "돌아가기"
|
||||
},
|
||||
"startRouter": "LLM 라우터 사용을 권장합니다:",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/nl/settings.json
generated
3
webview-ui/src/i18n/locales/nl/settings.json
generated
|
|
@ -859,7 +859,8 @@
|
|||
"label": "Model",
|
||||
"searchPlaceholder": "Zoeken",
|
||||
"noMatchFound": "Geen overeenkomsten gevonden",
|
||||
"useCustomModel": "Aangepast gebruiken: {{modelId}}"
|
||||
"useCustomModel": "Aangepast gebruiken: {{modelId}}",
|
||||
"simplifiedExplanation": "Je kunt later gedetailleerde modelinstellingen aanpassen."
|
||||
},
|
||||
"footer": {
|
||||
"feedback": "Heb je vragen of feedback? Open gerust een issue op <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> of sluit je aan bij <redditLink>reddit.com/r/RooCode</redditLink> of <discordLink>discord.gg/roocode</discordLink>",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/nl/welcome.json
generated
2
webview-ui/src/i18n/locales/nl/welcome.json
generated
|
|
@ -23,6 +23,7 @@
|
|||
"learnMore": "meer informatie",
|
||||
"useAnotherProvider": "Gebruik een andere provider",
|
||||
"useAnotherProviderDescription": "Voer een API-sleutel in en ga aan de slag.",
|
||||
"noApiKeys": "Geen zin in sleutels? Kies dan voor de Roo Code Cloud Provider.",
|
||||
"getStarted": "Beginnen"
|
||||
},
|
||||
"waitingForCloud": {
|
||||
|
|
@ -31,6 +32,7 @@
|
|||
"noPrompt": "Als je niet wordt gevraagd een URL te openen, <clickHere>klik hier</clickHere>.",
|
||||
"havingTrouble": "Als je de registratie hebt voltooid maar problemen hebt, <clickHere>klik hier</clickHere>.",
|
||||
"pasteUrl": "Plak de callback-URL vanuit je browser:",
|
||||
"invalidURL": "Dat ziet er niet uit als een geldige callback-URL. Kopieer wat Roo Code Cloud in je browser toont.",
|
||||
"goBack": "Terug"
|
||||
},
|
||||
"startRouter": "We raden aan om een LLM-router te gebruiken:",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/pl/settings.json
generated
3
webview-ui/src/i18n/locales/pl/settings.json
generated
|
|
@ -859,7 +859,8 @@
|
|||
"label": "Model",
|
||||
"searchPlaceholder": "Wyszukaj",
|
||||
"noMatchFound": "Nie znaleziono dopasowań",
|
||||
"useCustomModel": "Użyj niestandardowy: {{modelId}}"
|
||||
"useCustomModel": "Użyj niestandardowy: {{modelId}}",
|
||||
"simplifiedExplanation": "Można dostosować szczegółowe ustawienia modelu później."
|
||||
},
|
||||
"footer": {
|
||||
"feedback": "Jeśli masz jakiekolwiek pytania lub opinie, śmiało otwórz zgłoszenie na <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> lub dołącz do <redditLink>reddit.com/r/RooCode</redditLink> lub <discordLink>discord.gg/roocode</discordLink>",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/pl/welcome.json
generated
2
webview-ui/src/i18n/locales/pl/welcome.json
generated
|
|
@ -23,6 +23,7 @@
|
|||
"learnMore": "dowiedz się więcej",
|
||||
"useAnotherProvider": "Użyj innego dostawcy",
|
||||
"useAnotherProviderDescription": "Wprowadź klucz API i zacznij.",
|
||||
"noApiKeys": "Nie chcesz się zajmować kluczami? Wybierz Dostawcę Roo Code Cloud.",
|
||||
"getStarted": "Rozpocznij"
|
||||
},
|
||||
"waitingForCloud": {
|
||||
|
|
@ -31,6 +32,7 @@
|
|||
"noPrompt": "Jeśli nie zostaniesz poproszony o otwarcie adresu URL, <clickHere>kliknij tutaj</clickHere>.",
|
||||
"havingTrouble": "Jeśli ukończyłeś rejestrację, ale masz problemy, <clickHere>kliknij tutaj</clickHere>.",
|
||||
"pasteUrl": "Wklej adres URL wywołania zwrotnego z przeglądarki:",
|
||||
"invalidURL": "To nie wygląda na ważny adres URL wywołania zwrotnego. Skopiuj to, co Roo Code Cloud pokazuje w Twojej przeglądarce.",
|
||||
"goBack": "Wróć"
|
||||
},
|
||||
"startRouter": "Zalecamy korzystanie z routera LLM:",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/pt-BR/settings.json
generated
3
webview-ui/src/i18n/locales/pt-BR/settings.json
generated
|
|
@ -859,7 +859,8 @@
|
|||
"label": "Modelo",
|
||||
"searchPlaceholder": "Pesquisar",
|
||||
"noMatchFound": "Nenhuma correspondência encontrada",
|
||||
"useCustomModel": "Usar personalizado: {{modelId}}"
|
||||
"useCustomModel": "Usar personalizado: {{modelId}}",
|
||||
"simplifiedExplanation": "Você pode ajustar as configurações detalhadas do modelo mais tarde."
|
||||
},
|
||||
"footer": {
|
||||
"feedback": "Se tiver alguma dúvida ou feedback, sinta-se à vontade para abrir um problema em <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> ou juntar-se a <redditLink>reddit.com/r/RooCode</redditLink> ou <discordLink>discord.gg/roocode</discordLink>",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/pt-BR/welcome.json
generated
2
webview-ui/src/i18n/locales/pt-BR/welcome.json
generated
|
|
@ -23,6 +23,7 @@
|
|||
"learnMore": "saiba mais",
|
||||
"useAnotherProvider": "Usar outro provedor",
|
||||
"useAnotherProviderDescription": "Digite uma chave API e comece.",
|
||||
"noApiKeys": "Não quer lidar com chaves? Escolha o Provedor Roo Code Cloud.",
|
||||
"getStarted": "Começar"
|
||||
},
|
||||
"waitingForCloud": {
|
||||
|
|
@ -31,6 +32,7 @@
|
|||
"noPrompt": "Se você não for solicitado a abrir uma URL, <clickHere>clique aqui</clickHere>.",
|
||||
"havingTrouble": "Se você completou o registro mas está tendo problemas, <clickHere>clique aqui</clickHere>.",
|
||||
"pasteUrl": "Cole a URL de callback do seu navegador:",
|
||||
"invalidURL": "Isso não parece uma URL de callback válida. Copie o que o Roo Code Cloud está mostrando no seu navegador.",
|
||||
"goBack": "Voltar"
|
||||
},
|
||||
"startRouter": "Recomendamos usar um roteador LLM:",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/ru/settings.json
generated
3
webview-ui/src/i18n/locales/ru/settings.json
generated
|
|
@ -859,7 +859,8 @@
|
|||
"label": "Модель",
|
||||
"searchPlaceholder": "Поиск",
|
||||
"noMatchFound": "Совпадений не найдено",
|
||||
"useCustomModel": "Использовать пользовательскую: {{modelId}}"
|
||||
"useCustomModel": "Использовать пользовательскую: {{modelId}}",
|
||||
"simplifiedExplanation": "Ты сможешь настроить подробные параметры модели позже."
|
||||
},
|
||||
"footer": {
|
||||
"feedback": "Если у вас есть вопросы или предложения, откройте issue на <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> или присоединяйтесь к <redditLink>reddit.com/r/RooCode</redditLink> или <discordLink>discord.gg/roocode</discordLink>",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/ru/welcome.json
generated
2
webview-ui/src/i18n/locales/ru/welcome.json
generated
|
|
@ -23,6 +23,7 @@
|
|||
"learnMore": "подробнее",
|
||||
"useAnotherProvider": "Использовать другого провайдера",
|
||||
"useAnotherProviderDescription": "Введи API-ключ и начни.",
|
||||
"noApiKeys": "Не хочешь заниматься ключами? Выбери Провайдер Roo Code Cloud.",
|
||||
"getStarted": "Начать"
|
||||
},
|
||||
"waitingForCloud": {
|
||||
|
|
@ -31,6 +32,7 @@
|
|||
"noPrompt": "Если вас не попросят открыть URL, <clickHere>нажмите здесь</clickHere>.",
|
||||
"havingTrouble": "Если вы завершили регистрацию, но у вас возникли проблемы, <clickHere>нажмите здесь</clickHere>.",
|
||||
"pasteUrl": "Вставьте URL обратного вызова из браузера:",
|
||||
"invalidURL": "Это не похоже на корректный URL обратного вызова. Скопируй то, что показывает Roo Code Cloud в твоем браузере.",
|
||||
"goBack": "Назад"
|
||||
},
|
||||
"startRouter": "Мы рекомендуем использовать маршрутизатор LLM:",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/tr/settings.json
generated
3
webview-ui/src/i18n/locales/tr/settings.json
generated
|
|
@ -859,7 +859,8 @@
|
|||
"label": "Model",
|
||||
"searchPlaceholder": "Ara",
|
||||
"noMatchFound": "Eşleşme bulunamadı",
|
||||
"useCustomModel": "Özel kullan: {{modelId}}"
|
||||
"useCustomModel": "Özel kullan: {{modelId}}",
|
||||
"simplifiedExplanation": "Ayrıntılı model ayarlarını daha sonra ayarlayabilirsiniz."
|
||||
},
|
||||
"footer": {
|
||||
"feedback": "Herhangi bir sorunuz veya geri bildiriminiz varsa, <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> adresinde bir konu açmaktan veya <redditLink>reddit.com/r/RooCode</redditLink> ya da <discordLink>discord.gg/roocode</discordLink>'a katılmaktan çekinmeyin",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/tr/welcome.json
generated
2
webview-ui/src/i18n/locales/tr/welcome.json
generated
|
|
@ -23,6 +23,7 @@
|
|||
"learnMore": "daha fazla bilgi",
|
||||
"useAnotherProvider": "Başka bir sağlayıcı kullan",
|
||||
"useAnotherProviderDescription": "Bir API anahtarı gir ve başla.",
|
||||
"noApiKeys": "Anahtarlarla uğraşmak istemez misin? Roo Code Cloud Sağlayıcısı'nı seç.",
|
||||
"getStarted": "Başla"
|
||||
},
|
||||
"waitingForCloud": {
|
||||
|
|
@ -31,6 +32,7 @@
|
|||
"noPrompt": "URL açmanız istenmezse, <clickHere>buraya tıkla</clickHere>.",
|
||||
"havingTrouble": "Kaydı tamamladıysan ama sorun yaşıyorsan, <clickHere>buraya tıkla</clickHere>.",
|
||||
"pasteUrl": "Tarayıcınızdan geri arama URL'sini yapıştırın:",
|
||||
"invalidURL": "Bu geçerli bir geri arama URL'si gibi görünmüyor. Roo Code Cloud'un tarayıcında gösterdiği şeyi kopyala.",
|
||||
"goBack": "Geri Dön"
|
||||
},
|
||||
"startRouter": "Bir LLM yönlendiricisi kullanmanı öneririz:",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/vi/settings.json
generated
3
webview-ui/src/i18n/locales/vi/settings.json
generated
|
|
@ -859,7 +859,8 @@
|
|||
"label": "Mô hình",
|
||||
"searchPlaceholder": "Tìm kiếm",
|
||||
"noMatchFound": "Không tìm thấy kết quả",
|
||||
"useCustomModel": "Sử dụng tùy chỉnh: {{modelId}}"
|
||||
"useCustomModel": "Sử dụng tùy chỉnh: {{modelId}}",
|
||||
"simplifiedExplanation": "Bạn có thể điều chỉnh cài đặt mô hình chi tiết sau."
|
||||
},
|
||||
"footer": {
|
||||
"feedback": "Nếu bạn có bất kỳ câu hỏi hoặc phản hồi nào, vui lòng mở một vấn đề tại <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> hoặc tham gia <redditLink>reddit.com/r/RooCode</redditLink> hoặc <discordLink>discord.gg/roocode</discordLink>",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/vi/welcome.json
generated
2
webview-ui/src/i18n/locales/vi/welcome.json
generated
|
|
@ -23,6 +23,7 @@
|
|||
"learnMore": "tìm hiểu thêm",
|
||||
"useAnotherProvider": "Sử dụng nhà cung cấp khác",
|
||||
"useAnotherProviderDescription": "Nhập khóa API và bắt đầu.",
|
||||
"noApiKeys": "Không muốn phải xử lý các khóa? Hãy sử dụng Nhà cung cấp Roo Code Cloud.",
|
||||
"getStarted": "Bắt đầu"
|
||||
},
|
||||
"waitingForCloud": {
|
||||
|
|
@ -31,6 +32,7 @@
|
|||
"noPrompt": "Nếu bạn không được nhắc mở URL, <clickHere>hãy nhấp vào đây</clickHere>.",
|
||||
"havingTrouble": "Nếu bạn đã hoàn thành đăng ký nhưng gặp sự cố, <clickHere>hãy nhấp vào đây</clickHere>.",
|
||||
"pasteUrl": "Dán URL callback từ trình duyệt của bạn:",
|
||||
"invalidURL": "Điều đó không giống như một URL callback hợp lệ. Vui lòng sao chép những gì Roo Code Cloud đang hiển thị trong trình duyệt của bạn.",
|
||||
"goBack": "Quay lại"
|
||||
},
|
||||
"startRouter": "Chúng tôi khuyên bạn nên sử dụng bộ định tuyến LLM:",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/zh-CN/settings.json
generated
3
webview-ui/src/i18n/locales/zh-CN/settings.json
generated
|
|
@ -859,7 +859,8 @@
|
|||
"label": "模型",
|
||||
"searchPlaceholder": "搜索",
|
||||
"noMatchFound": "未找到匹配项",
|
||||
"useCustomModel": "使用自定义:{{modelId}}"
|
||||
"useCustomModel": "使用自定义:{{modelId}}",
|
||||
"simplifiedExplanation": "你可以稍后调整详细的模型设置。"
|
||||
},
|
||||
"footer": {
|
||||
"feedback": "如果您有任何问题或反馈,请随时在 <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> 上提出问题或加入 <redditLink>reddit.com/r/RooCode</redditLink> 或 <discordLink>discord.gg/roocode</discordLink>",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/zh-CN/welcome.json
generated
2
webview-ui/src/i18n/locales/zh-CN/welcome.json
generated
|
|
@ -23,6 +23,7 @@
|
|||
"learnMore": "了解更多",
|
||||
"useAnotherProvider": "使用其他提供商",
|
||||
"useAnotherProviderDescription": "输入 API 密钥即可开始。",
|
||||
"noApiKeys": "不想处理密钥?选择 Roo Code Cloud 提供商吧。",
|
||||
"getStarted": "开始使用"
|
||||
},
|
||||
"waitingForCloud": {
|
||||
|
|
@ -31,6 +32,7 @@
|
|||
"noPrompt": "如果你未被提示打开 URL,<clickHere>请点击此处</clickHere>。",
|
||||
"havingTrouble": "如果你已完成注册但遇到问题,<clickHere>请点击此处</clickHere>。",
|
||||
"pasteUrl": "从浏览器粘贴回调 URL:",
|
||||
"invalidURL": "这看起来不像是有效的回调 URL。请复制 Roo Code Cloud 在你的浏览器中显示的内容。",
|
||||
"goBack": "返回"
|
||||
},
|
||||
"startRouter": "我们推荐使用 LLM 路由器:",
|
||||
|
|
|
|||
3
webview-ui/src/i18n/locales/zh-TW/settings.json
generated
3
webview-ui/src/i18n/locales/zh-TW/settings.json
generated
|
|
@ -859,7 +859,8 @@
|
|||
"label": "模型",
|
||||
"searchPlaceholder": "搜尋",
|
||||
"noMatchFound": "找不到符合的項目",
|
||||
"useCustomModel": "使用自訂模型:{{modelId}}"
|
||||
"useCustomModel": "使用自訂模型:{{modelId}}",
|
||||
"simplifiedExplanation": "你可以稍後調整詳細的模型設定。"
|
||||
},
|
||||
"footer": {
|
||||
"feedback": "若您有任何問題或建議,歡迎至 <githubLink>github.com/RooCodeInc/Roo-Code</githubLink> 提出 issue,或加入 <redditLink>reddit.com/r/RooCode</redditLink> 或 <discordLink>discord.gg/roocode</discordLink> 討論。",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/zh-TW/welcome.json
generated
2
webview-ui/src/i18n/locales/zh-TW/welcome.json
generated
|
|
@ -23,6 +23,7 @@
|
|||
"learnMore": "了解更多",
|
||||
"useAnotherProvider": "使用其他提供者",
|
||||
"useAnotherProviderDescription": "輸入 API 金鑰即可開始。",
|
||||
"noApiKeys": "不想處理金鑰?選擇 Roo Code Cloud 提供者吧。",
|
||||
"getStarted": "開始使用"
|
||||
},
|
||||
"waitingForCloud": {
|
||||
|
|
@ -31,6 +32,7 @@
|
|||
"noPrompt": "如果您未被提示開啟 URL,<clickHere>請點擊此處</clickHere>。",
|
||||
"havingTrouble": "如果您已完成註冊但遇到問題,<clickHere>請點擊此處</clickHere>。",
|
||||
"pasteUrl": "從瀏覽器貼上回呼 URL:",
|
||||
"invalidURL": "這看起來不像是有效的回呼 URL。請複製 Roo Code Cloud 在您的瀏覽器中顯示的內容。",
|
||||
"goBack": "返回"
|
||||
},
|
||||
"startRouter": "我們建議使用 LLM 路由器:",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue