From 0e9d36bb540dac761cb2be6251d08ed826280670 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Barreiro?= <52393857+BarreiroT@users.noreply.github.com> Date: Fri, 8 May 2026 22:12:00 +0200 Subject: [PATCH] Centralize the API url (#77) * Centralize the API url * Export constant in the index.browser --- sdk/apps/cli/src/acp/auth.ts | 4 +++- sdk/apps/cli/src/commands/auth.ts | 3 ++- sdk/apps/cli/src/tui/cline-account.ts | 2 +- .../components/dialogs/provider-picker.tsx | 3 ++- sdk/apps/cli/src/tui/views/onboarding/auth.ts | 3 ++- sdk/apps/cli/src/utils/enterprise.ts | 3 +-- .../examples/desktop-app/sidecar/commands.ts | 3 ++- .../runtime-oauth-token-manager.ts | 2 +- .../services/llms/cline-recommended-models.ts | 3 ++- .../providers/local-provider-service.ts | 3 ++- sdk/packages/llms/src/providers/builtins.ts | 19 ++++++++++--------- sdk/packages/shared/src/index.browser.ts | 6 +++++- sdk/packages/shared/src/index.ts | 6 +++++- sdk/packages/shared/src/llms/requests.ts | 2 ++ 14 files changed, 40 insertions(+), 22 deletions(-) diff --git a/sdk/apps/cli/src/acp/auth.ts b/sdk/apps/cli/src/acp/auth.ts index 6123bb8cb3..d9724cd699 100644 --- a/sdk/apps/cli/src/acp/auth.ts +++ b/sdk/apps/cli/src/acp/auth.ts @@ -1,4 +1,5 @@ import type { ProviderSettings, ProviderSettingsManager } from "@cline/core"; +import { DEFAULT_CLINE_API_BASE_URL } from "@cline/shared"; import type { OAuthCredentials } from "../commands/auth"; import { getPersistedProviderApiKey, @@ -83,7 +84,8 @@ async function performOAuthLogin( if (providerId === "cline") { return coreOAuth.loginClineOAuth({ - apiBaseUrl: existingSettings?.baseUrl?.trim() || "https://api.cline.bot", + apiBaseUrl: + existingSettings?.baseUrl?.trim() || DEFAULT_CLINE_API_BASE_URL, callbacks, useWorkOSDeviceAuth: true, }); diff --git a/sdk/apps/cli/src/commands/auth.ts b/sdk/apps/cli/src/commands/auth.ts index 1a5558d25e..15f1b04d39 100644 --- a/sdk/apps/cli/src/commands/auth.ts +++ b/sdk/apps/cli/src/commands/auth.ts @@ -6,6 +6,7 @@ import { type ProviderSettings, type ProviderSettingsManager, } from "@cline/core"; +import { DEFAULT_CLINE_API_BASE_URL } from "@cline/shared"; import { Command } from "commander"; import open from "open"; import React from "react"; @@ -280,7 +281,7 @@ async function loginWithOAuthProvider( if (providerId === "cline") { return oauthApi.loginClineOAuth({ - apiBaseUrl: existing?.baseUrl?.trim() || "https://api.cline.bot", + apiBaseUrl: existing?.baseUrl?.trim() || DEFAULT_CLINE_API_BASE_URL, useWorkOSDeviceAuth: true, callbacks, }); diff --git a/sdk/apps/cli/src/tui/cline-account.ts b/sdk/apps/cli/src/tui/cline-account.ts index a8b5e4d240..072e0fd1b6 100644 --- a/sdk/apps/cli/src/tui/cline-account.ts +++ b/sdk/apps/cli/src/tui/cline-account.ts @@ -8,11 +8,11 @@ import { type ProviderSettings, ProviderSettingsManager, } from "@cline/core"; +import { DEFAULT_CLINE_API_BASE_URL } from "@cline/shared"; import { formatCreditBalance, normalizeCreditBalance } from "../utils/output"; import { toProviderApiKey } from "../utils/provider-auth"; import type { Config } from "../utils/types"; -const DEFAULT_CLINE_API_BASE_URL = "https://api.cline.bot"; const WORKOS_TOKEN_PREFIX = "workos:"; type ClineAccountConfig = Pick; diff --git a/sdk/apps/cli/src/tui/components/dialogs/provider-picker.tsx b/sdk/apps/cli/src/tui/components/dialogs/provider-picker.tsx index 78fc473940..db00d2b790 100644 --- a/sdk/apps/cli/src/tui/components/dialogs/provider-picker.tsx +++ b/sdk/apps/cli/src/tui/components/dialogs/provider-picker.tsx @@ -7,6 +7,7 @@ import { saveLocalProviderSettings, startClineDeviceAuth, } from "@cline/core"; +import { DEFAULT_CLINE_API_BASE_URL } from "@cline/shared"; import type { ChoiceContext } from "@opentui-ui/dialog"; import { useDialogKeyboard } from "@opentui-ui/dialog/react"; import open from "open"; @@ -454,7 +455,7 @@ export function OAuthLoginContent( const manager = new ProviderSettingsManager(); const existing = manager.getProviderSettings(providerId); - const apiBaseUrl = existing?.baseUrl?.trim() || "https://api.cline.bot"; + const apiBaseUrl = existing?.baseUrl?.trim() || DEFAULT_CLINE_API_BASE_URL; startClineDeviceAuth() .then((result) => { diff --git a/sdk/apps/cli/src/tui/views/onboarding/auth.ts b/sdk/apps/cli/src/tui/views/onboarding/auth.ts index 76b9349152..0608163102 100644 --- a/sdk/apps/cli/src/tui/views/onboarding/auth.ts +++ b/sdk/apps/cli/src/tui/views/onboarding/auth.ts @@ -5,6 +5,7 @@ import { saveLocalProviderOAuthCredentials, startClineDeviceAuth, } from "@cline/core"; +import { DEFAULT_CLINE_API_BASE_URL } from "@cline/shared"; import open from "open"; export type OnboardingOAuthProviderId = "cline" | "oca" | "openai-codex"; @@ -73,7 +74,7 @@ export function runDeviceCodeAuthFlow(input: { const existing = input.providerSettingsManager.getProviderSettings( input.providerId, ); - const apiBaseUrl = existing?.baseUrl?.trim() || "https://api.cline.bot"; + const apiBaseUrl = existing?.baseUrl?.trim() || DEFAULT_CLINE_API_BASE_URL; startClineDeviceAuth() .then((result) => { diff --git a/sdk/apps/cli/src/utils/enterprise.ts b/sdk/apps/cli/src/utils/enterprise.ts index c10db81a11..78c1ca1170 100644 --- a/sdk/apps/cli/src/utils/enterprise.ts +++ b/sdk/apps/cli/src/utils/enterprise.ts @@ -14,10 +14,9 @@ import { readEnterpriseSessionBlobUploadMetadata, registerEnterpriseSessionBlobUpload, } from "@cline/enterprise"; -import { RemoteConfigSchema } from "@cline/shared"; +import { DEFAULT_CLINE_API_BASE_URL, RemoteConfigSchema } from "@cline/shared"; import { getCliTelemetryService } from "./telemetry"; -const DEFAULT_CLINE_API_BASE_URL = "https://api.cline.bot"; const initializedRemoteConfigKeys = new Set(); async function loadCliRemoteConfigBundle(): Promise< diff --git a/sdk/apps/examples/desktop-app/sidecar/commands.ts b/sdk/apps/examples/desktop-app/sidecar/commands.ts index 6cb5df06d3..5b57f0781b 100644 --- a/sdk/apps/examples/desktop-app/sidecar/commands.ts +++ b/sdk/apps/examples/desktop-app/sidecar/commands.ts @@ -46,6 +46,7 @@ import { setDisabledTools, toggleDisabledTool, } from "@cline/core"; +import { DEFAULT_CLINE_API_BASE_URL } from "@cline/shared"; import { broadcastEvent, resolveSidecarAskQuestion } from "./context"; import { findArtifactUnderDir, @@ -926,7 +927,7 @@ export async function handleCommand( const manager = new ProviderSettingsManager(); const settings = manager.getProviderSettings("cline"); const accountService = new ClineAccountService({ - apiBaseUrl: settings?.baseUrl?.trim() || "https://api.cline.bot", + apiBaseUrl: settings?.baseUrl?.trim() || DEFAULT_CLINE_API_BASE_URL, getAuthToken: async () => resolveLocalClineAuthToken(settings), }); return await executeClineAccountAction( diff --git a/sdk/packages/core/src/runtime/orchestration/runtime-oauth-token-manager.ts b/sdk/packages/core/src/runtime/orchestration/runtime-oauth-token-manager.ts index 8e5f11cb05..724dac4f2b 100644 --- a/sdk/packages/core/src/runtime/orchestration/runtime-oauth-token-manager.ts +++ b/sdk/packages/core/src/runtime/orchestration/runtime-oauth-token-manager.ts @@ -1,4 +1,5 @@ import { + DEFAULT_CLINE_API_BASE_URL, type ITelemetryService, isOAuthProviderId, type OAuthProviderId, @@ -13,7 +14,6 @@ import { decodeJwtPayload } from "../../auth/utils"; import { ProviderSettingsManager } from "../../services/storage/provider-settings-manager"; import type { ProviderSettings } from "../../types/provider-settings"; -const DEFAULT_CLINE_API_BASE_URL = "https://api.cline.bot"; const WORKOS_TOKEN_PREFIX = "workos:"; type ManagedOAuthProviderId = OAuthProviderId; diff --git a/sdk/packages/core/src/services/llms/cline-recommended-models.ts b/sdk/packages/core/src/services/llms/cline-recommended-models.ts index faad701abc..55b256262a 100644 --- a/sdk/packages/core/src/services/llms/cline-recommended-models.ts +++ b/sdk/packages/core/src/services/llms/cline-recommended-models.ts @@ -1,3 +1,4 @@ +import { DEFAULT_CLINE_API_BASE_URL } from "@cline/shared"; import { ProviderSettingsManager } from "../storage/provider-settings-manager"; export interface ClineRecommendedModel { @@ -22,7 +23,7 @@ export interface FetchClineRecommendedModelsOptions { timeoutMs?: number; } -const DEFAULT_API_BASE_URL = "https://api.cline.bot"; +const DEFAULT_API_BASE_URL = DEFAULT_CLINE_API_BASE_URL; const DEFAULT_REQUEST_TIMEOUT_MS = 5_000; export const FALLBACK_CLINE_RECOMMENDED_MODELS: ClineRecommendedModelsData = { diff --git a/sdk/packages/core/src/services/providers/local-provider-service.ts b/sdk/packages/core/src/services/providers/local-provider-service.ts index e9b4766666..bd8ca662bc 100644 --- a/sdk/packages/core/src/services/providers/local-provider-service.ts +++ b/sdk/packages/core/src/services/providers/local-provider-service.ts @@ -1,6 +1,7 @@ import * as LlmsModels from "@cline/llms"; import { type AddProviderActionRequest, + DEFAULT_CLINE_API_BASE_URL, isOAuthProviderId, type OAuthProviderId, type ProviderCapability, @@ -701,7 +702,7 @@ export async function loginLocalProvider( if (providerId === "cline") { return loginClineOAuth({ - apiBaseUrl: existing?.baseUrl?.trim() || "https://api.cline.bot", + apiBaseUrl: existing?.baseUrl?.trim() || DEFAULT_CLINE_API_BASE_URL, useWorkOSDeviceAuth: true, callbacks, }); diff --git a/sdk/packages/llms/src/providers/builtins.ts b/sdk/packages/llms/src/providers/builtins.ts index 4ccb30ff51..7d1d22112d 100644 --- a/sdk/packages/llms/src/providers/builtins.ts +++ b/sdk/packages/llms/src/providers/builtins.ts @@ -1,11 +1,12 @@ -import type { - GatewayModelCapability, - GatewayModelDefinition, - GatewayProviderManifest, - GatewayProviderMetadata, - GatewayProviderSettings, - JsonValue, - ProviderCapability, +import { + DEFAULT_CLINE_API_BASE_URL, + type GatewayModelCapability, + type GatewayModelDefinition, + type GatewayProviderManifest, + type GatewayProviderMetadata, + type GatewayProviderSettings, + type JsonValue, + type ProviderCapability, } from "@cline/shared"; import { getGeneratedModelsForProvider } from "../catalog/catalog.generated-access"; import type { @@ -215,7 +216,7 @@ const OPENAI_COMPATIBLE_SPECS: BuiltinSpec[] = [ modelsProviderId: "openrouter", defaultModelId: "anthropic/claude-sonnet-4.6", apiKeyEnv: ["CLINE_API_KEY"], - defaults: { baseUrl: "https://api.cline.bot/api/v1" }, + defaults: { baseUrl: `${DEFAULT_CLINE_API_BASE_URL}/api/v1` }, metadata: { promptCacheStrategy: "anthropic-automatic" }, }, { diff --git a/sdk/packages/shared/src/index.browser.ts b/sdk/packages/shared/src/index.browser.ts index 132ac6f491..cd43e35033 100644 --- a/sdk/packages/shared/src/index.browser.ts +++ b/sdk/packages/shared/src/index.browser.ts @@ -125,7 +125,11 @@ export { resolveReasoningBudgetFromRatio, resolveReasoningEffortRatio, } from "./llms/reasoning-effort"; -export { DEFAULT_REQUEST_HEADERS, serializeAbortReason } from "./llms/requests"; +export { + DEFAULT_CLINE_API_BASE_URL, + DEFAULT_REQUEST_HEADERS, + serializeAbortReason, +} from "./llms/requests"; export type { ToolApprovalRequest, ToolApprovalResult, diff --git a/sdk/packages/shared/src/index.ts b/sdk/packages/shared/src/index.ts index e93d5d983a..faeb6a664b 100644 --- a/sdk/packages/shared/src/index.ts +++ b/sdk/packages/shared/src/index.ts @@ -139,7 +139,11 @@ export { resolveReasoningBudgetFromRatio, resolveReasoningEffortRatio, } from "./llms/reasoning-effort"; -export { DEFAULT_REQUEST_HEADERS, serializeAbortReason } from "./llms/requests"; +export { + DEFAULT_CLINE_API_BASE_URL, + DEFAULT_REQUEST_HEADERS, + serializeAbortReason, +} from "./llms/requests"; export type { ToolApprovalRequest, ToolApprovalResult, diff --git a/sdk/packages/shared/src/llms/requests.ts b/sdk/packages/shared/src/llms/requests.ts index 43dbe45fc9..5673267b05 100644 --- a/sdk/packages/shared/src/llms/requests.ts +++ b/sdk/packages/shared/src/llms/requests.ts @@ -1,3 +1,5 @@ +export const DEFAULT_CLINE_API_BASE_URL = "https://api.cline.bot"; + export const DEFAULT_REQUEST_HEADERS: Record = { "HTTP-Referer": "https://cline.bot", "X-Title": "Cline",