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 +50 -6
- package/package.json +1 -1
- package/recommended-models.json +1 -1
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.
|
|
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
|
-
|
|
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
|
-
|
|
64176
|
-
|
|
64177
|
-
|
|
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