claudish 5.3.0 → 5.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -27484,6 +27484,7 @@ __export(exports_logger, {
27484
27484
  setLogLevel: () => setLogLevel,
27485
27485
  maskCredential: () => maskCredential,
27486
27486
  logStructured: () => logStructured,
27487
+ logStderr: () => logStderr,
27487
27488
  log: () => log,
27488
27489
  isLoggingEnabled: () => isLoggingEnabled,
27489
27490
  initLogger: () => initLogger,
@@ -27557,6 +27558,11 @@ function log(message, forceConsole = false) {
27557
27558
  console.log(message);
27558
27559
  }
27559
27560
  }
27561
+ function logStderr(message) {
27562
+ process.stderr.write(`[claudish] ${message}
27563
+ `);
27564
+ log(message);
27565
+ }
27560
27566
  function getLogFilePath() {
27561
27567
  return logFilePath;
27562
27568
  }
@@ -35387,7 +35393,7 @@ async function fetchGLMCodingModels2() {
35387
35393
  return [];
35388
35394
  }
35389
35395
  }
35390
- var __filename5, __dirname5, VERSION = "5.3.0", CACHE_MAX_AGE_DAYS3 = 2, MODELS_JSON_PATH, CLAUDISH_CACHE_DIR3, ALL_MODELS_JSON_PATH2;
35396
+ var __filename5, __dirname5, VERSION = "5.3.1", CACHE_MAX_AGE_DAYS3 = 2, MODELS_JSON_PATH, CLAUDISH_CACHE_DIR3, ALL_MODELS_JSON_PATH2;
35391
35397
  var init_cli = __esm(() => {
35392
35398
  init_config();
35393
35399
  init_model_loader();
@@ -63220,6 +63226,7 @@ class ComposedHandler {
63220
63226
  await this.provider.refreshAuth();
63221
63227
  } catch (err) {
63222
63228
  log(`[${this.provider.displayName}] Auth/health check failed: ${err.message}`);
63229
+ logStderr(`Error [${this.provider.displayName}]: Auth/health check failed — ${err.message}. Check credentials and server.`);
63223
63230
  return c.json({ error: { type: "connection_error", message: err.message } }, 503);
63224
63231
  }
63225
63232
  if (this.provider.getContextWindow) {
@@ -63253,6 +63260,7 @@ class ComposedHandler {
63253
63260
  if (error46.code === "ECONNREFUSED" || error46.cause?.code === "ECONNREFUSED") {
63254
63261
  const msg = `Cannot connect to ${this.provider.displayName} at ${endpoint}. Make sure the server is running.`;
63255
63262
  log(`[${this.provider.displayName}] ${msg}`);
63263
+ logStderr(`Error: ${msg} Check the server is running.`);
63256
63264
  return c.json({ error: { type: "connection_error", message: msg } }, 503);
63257
63265
  }
63258
63266
  throw error46;
@@ -63277,15 +63285,19 @@ class ComposedHandler {
63277
63285
  } else {
63278
63286
  const errorText = await retryResp.text();
63279
63287
  log(`[${this.provider.displayName}] Retry failed: ${errorText}`);
63288
+ logStderr(`Error [${this.provider.displayName}]: HTTP ${retryResp.status} after auth retry. Check API key.`);
63280
63289
  return c.json({ error: errorText }, retryResp.status);
63281
63290
  }
63282
63291
  } catch (err) {
63283
63292
  log(`[${this.provider.displayName}] Auth refresh failed: ${err.message}`);
63293
+ logStderr(`Error [${this.provider.displayName}]: Authentication failed — ${err.message}. Check API key.`);
63284
63294
  return c.json({ error: { type: "authentication_error", message: err.message } }, 401);
63285
63295
  }
63286
63296
  } else {
63287
63297
  const errorText = await response.text();
63288
63298
  log(`[${this.provider.displayName}] Error: ${errorText}`);
63299
+ const hint = getRecoveryHint(response.status, errorText, this.provider.displayName);
63300
+ logStderr(`Error [${this.provider.displayName}]: HTTP ${response.status}. ${hint}`);
63289
63301
  return c.json({ error: errorText }, response.status);
63290
63302
  }
63291
63303
  }
@@ -63360,6 +63372,34 @@ class ComposedHandler {
63360
63372
  }
63361
63373
  }
63362
63374
  }
63375
+ function getRecoveryHint(status, errorText, providerName) {
63376
+ const lower = errorText.toLowerCase();
63377
+ if (status === 503 || lower.includes("overloaded")) {
63378
+ return "Provider overloaded. Retry or use a different model.";
63379
+ }
63380
+ if (status === 429 || lower.includes("rate limit")) {
63381
+ return "Rate limited. Wait, reduce concurrency, or check plan limits.";
63382
+ }
63383
+ if (status === 401 || status === 403) {
63384
+ return "Check API key / OAuth credentials.";
63385
+ }
63386
+ if (status === 404) {
63387
+ return "Verify model name is correct.";
63388
+ }
63389
+ if (status === 400) {
63390
+ if (lower.includes("unsupported content type") || lower.includes("unsupported_content_type")) {
63391
+ return "Model doesn't support this content format. Try a different model.";
63392
+ }
63393
+ if (lower.includes("context") || lower.includes("too long") || lower.includes("token")) {
63394
+ return "Input too large. Reduce message history or use a larger-context model.";
63395
+ }
63396
+ return "Request format may be incompatible with provider.";
63397
+ }
63398
+ if (status >= 500) {
63399
+ return "Server error — retry after a brief wait.";
63400
+ }
63401
+ return `Unexpected HTTP ${status} from ${providerName}.`;
63402
+ }
63363
63403
  var init_composed_handler = __esm(() => {
63364
63404
  init_adapter_manager();
63365
63405
  init_middleware();
@@ -64089,7 +64129,10 @@ async function createProxyServer(port, openrouterApiKey, model, monitorMode = fa
64089
64129
  }
64090
64130
  const resolution = resolveModelProvider(targetModel);
64091
64131
  if (resolution.wasAutoRouted && resolution.autoRouteMessage) {
64092
- console.error(`[Auto-route] ${resolution.autoRouteMessage}`);
64132
+ if (!options.quiet) {
64133
+ console.error(`[Auto-route] ${resolution.autoRouteMessage}`);
64134
+ }
64135
+ log(`[Auto-route] ${resolution.autoRouteMessage}`);
64093
64136
  }
64094
64137
  if (resolution.category === "openrouter") {
64095
64138
  if (resolution.wasAutoRouted && resolution.fullModelId) {
@@ -64172,9 +64215,9 @@ async function createProxyServer(port, openrouterApiKey, model, monitorMode = fa
64172
64215
  log(`[Proxy] Created OllamaCloud handler (composed): ${resolved.modelName}`);
64173
64216
  } else if (resolved.provider.name === "litellm") {
64174
64217
  if (!resolved.provider.baseUrl) {
64175
- console.error("Error: LITELLM_BASE_URL or --litellm-url is required for LiteLLM provider.");
64176
- console.error("Set it with: export LITELLM_BASE_URL='https://your-litellm-instance.com'");
64177
- console.error("Or use: claudish --litellm-url https://your-instance.com --model litellm@model 'task'");
64218
+ logStderr("Error: LITELLM_BASE_URL or --litellm-url is required for LiteLLM provider.");
64219
+ logStderr("Set it with: export LITELLM_BASE_URL='https://your-litellm-instance.com'");
64220
+ logStderr("Or use: claudish --litellm-url https://your-instance.com --model litellm@model 'task'");
64178
64221
  return null;
64179
64222
  }
64180
64223
  const provider = new LiteLLMProvider(resolved.provider.baseUrl, apiKey, resolved.modelName);
@@ -64845,7 +64888,8 @@ async function runCli() {
64845
64888
  subagent: cliConfig.modelSubagent
64846
64889
  };
64847
64890
  const proxy = await createProxyServer2(port, cliConfig.monitor ? undefined : cliConfig.openrouterApiKey, cliConfig.monitor ? undefined : explicitModel, cliConfig.monitor, cliConfig.anthropicApiKey, modelMap, {
64848
- summarizeTools: cliConfig.summarizeTools
64891
+ summarizeTools: cliConfig.summarizeTools,
64892
+ quiet: cliConfig.quiet
64849
64893
  });
64850
64894
  let exitCode = 0;
64851
64895
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudish",
3
- "version": "5.3.0",
3
+ "version": "5.3.1",
4
4
  "description": "Run Claude Code with any model - OpenRouter, Ollama, LM Studio & local models",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -121,7 +121,7 @@
121
121
  "average": "$0.32/1M"
122
122
  },
123
123
  "context": "163K",
124
- "maxOutputTokens": 163840,
124
+ "maxOutputTokens": 65536,
125
125
  "modality": "text->text",
126
126
  "supportsTools": true,
127
127
  "supportsReasoning": true,