From 58dbcbb9d2dc3ff0b306109afb72b45ea19bf768 Mon Sep 17 00:00:00 2001 From: mforce <> Date: Sun, 3 May 2026 20:28:44 -0700 Subject: [PATCH] fix: empty token in config overrides provider default + hardcoded error Three fixes: - setup.ts: don't save token when empty (omit field so provider default kicks in via the ?? chain) - cli.ts: treat empty-string config values as undefined so they don't block fallthrough to provider defaults - cli.ts: error messages now show actual provider name instead of hardcoding 'custom', and suggest `claudely setup` as a fix Also improves setup wizard UX: shows provider defaults in prompts when the saved value differs from the default. --- src/cli.ts | 8 ++++---- src/setup.ts | 21 +++++++++++++++------ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/cli.ts b/src/cli.ts index 4972122..7999684 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -163,18 +163,18 @@ async function main(): Promise { } const baseUrl = - values["base-url"] ?? process.env.CLAUDELY_BASE_URL ?? config.baseUrl ?? provider.defaultBaseUrl(); - const token = values.token ?? process.env.CLAUDELY_TOKEN ?? config.token ?? provider.defaultToken; + values["base-url"] ?? process.env.CLAUDELY_BASE_URL ?? (config.baseUrl || undefined) ?? provider.defaultBaseUrl(); + const token = values.token ?? process.env.CLAUDELY_TOKEN ?? (config.token || undefined) ?? provider.defaultToken; if (!baseUrl) { console.error( - "claudely: provider 'custom' requires --base-url (or $CLAUDELY_BASE_URL)", + `claudely: provider '${providerName}' requires --base-url (or $CLAUDELY_BASE_URL, or run \`claudely setup\`)`, ); return 2; } if (!token) { console.error( - "claudely: provider 'custom' requires --token (or $CLAUDELY_TOKEN)", + `claudely: provider '${providerName}' requires --token (or $CLAUDELY_TOKEN, or run \`claudely setup\`)`, ); return 2; } diff --git a/src/setup.ts b/src/setup.ts index b4fa060..a4ce401 100644 --- a/src/setup.ts +++ b/src/setup.ts @@ -29,14 +29,22 @@ export async function runSetup(): Promise { const provider = PROVIDERS[providerName]; + const providerDefault = provider.defaultBaseUrl(); const baseUrl = await input({ - message: "Base URL", - default: existing.baseUrl ?? provider.defaultBaseUrl(), + message: existing.baseUrl && existing.baseUrl !== providerDefault + ? `Base URL (provider default: ${providerDefault})` + : "Base URL", + default: existing.baseUrl || providerDefault, }); + const tokenDefault = provider.defaultToken; const token = await input({ - message: "Auth token", - default: existing.token ?? provider.defaultToken, + message: tokenDefault + ? existing.token && existing.token !== tokenDefault + ? `Auth token (provider default: ${tokenDefault})` + : "Auth token" + : "Auth token (required)", + default: existing.token || tokenDefault, }); let models: ModelEntry[] = []; @@ -73,13 +81,14 @@ export async function runSetup(): Promise { if (manual) model = manual; } - const config: ClaudelyConfig = { provider: providerName, baseUrl, token }; + const config: ClaudelyConfig = { provider: providerName, baseUrl }; + if (token) config.token = token; if (model) config.model = model; console.log("\nConfig to save:"); console.log(` provider: ${config.provider}`); console.log(` baseUrl: ${config.baseUrl}`); - console.log(` token: ${config.token}`); + console.log(` token: ${config.token ?? "(provider default)"}`); if (config.model) console.log(` model: ${config.model}`); console.log();