claudish 4.5.2 → 4.5.3

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
@@ -31237,6 +31237,86 @@ async function fetchGLMCodingModels() {
31237
31237
  return [];
31238
31238
  }
31239
31239
  }
31240
+ async function fetchGLMDirectModels() {
31241
+ try {
31242
+ const response = await fetch("https://models.dev/api.json", {
31243
+ signal: AbortSignal.timeout(5000)
31244
+ });
31245
+ if (!response.ok) {
31246
+ return [];
31247
+ }
31248
+ const data = await response.json();
31249
+ const codingPlan = data["zai-coding-plan"];
31250
+ if (!codingPlan?.models)
31251
+ return [];
31252
+ return Object.entries(codingPlan.models).filter(([_, m]) => m.tool_call === true).map(([id, m]) => {
31253
+ const inputModalities = m.modalities?.input || [];
31254
+ const supportsVision = inputModalities.includes("image") || inputModalities.includes("video");
31255
+ const contextLength = m.limit?.context || 131072;
31256
+ const inputCost = m.cost?.input || 0;
31257
+ const outputCost = m.cost?.output || 0;
31258
+ const isFree = inputCost === 0 && outputCost === 0;
31259
+ return {
31260
+ id: `glm@${id}`,
31261
+ name: m.name || id,
31262
+ description: `GLM/Zhipu direct API`,
31263
+ provider: "GLM",
31264
+ pricing: {
31265
+ input: isFree ? "FREE" : `$${inputCost.toFixed(2)}`,
31266
+ output: isFree ? "FREE" : `$${outputCost.toFixed(2)}`,
31267
+ average: isFree ? "FREE" : `$${((inputCost + outputCost) / 2).toFixed(2)}/1M`
31268
+ },
31269
+ context: contextLength >= 1e6 ? `${Math.round(contextLength / 1e6)}M` : `${Math.round(contextLength / 1000)}K`,
31270
+ contextLength,
31271
+ supportsTools: true,
31272
+ supportsReasoning: m.reasoning || false,
31273
+ supportsVision,
31274
+ isFree,
31275
+ source: "GLM"
31276
+ };
31277
+ });
31278
+ } catch {
31279
+ return [];
31280
+ }
31281
+ }
31282
+ async function fetchOllamaCloudModels() {
31283
+ try {
31284
+ const response = await fetch("https://models.dev/api.json", {
31285
+ signal: AbortSignal.timeout(5000)
31286
+ });
31287
+ if (!response.ok) {
31288
+ return [];
31289
+ }
31290
+ const data = await response.json();
31291
+ const ollamaCloud = data["ollama-cloud"];
31292
+ if (!ollamaCloud?.models)
31293
+ return [];
31294
+ return Object.entries(ollamaCloud.models).filter(([_, m]) => m.tool_call === true).map(([id, m]) => {
31295
+ const inputModalities = m.modalities?.input || [];
31296
+ const supportsVision = inputModalities.includes("image") || inputModalities.includes("video");
31297
+ const contextLength = m.limit?.context || 131072;
31298
+ return {
31299
+ id: `oc@${id}`,
31300
+ name: m.name || id,
31301
+ description: `OllamaCloud`,
31302
+ provider: "OllamaCloud",
31303
+ pricing: {
31304
+ input: "N/A",
31305
+ output: "N/A",
31306
+ average: "N/A"
31307
+ },
31308
+ context: contextLength >= 1e6 ? `${Math.round(contextLength / 1e6)}M` : `${Math.round(contextLength / 1000)}K`,
31309
+ contextLength,
31310
+ supportsTools: true,
31311
+ supportsReasoning: m.reasoning || false,
31312
+ supportsVision,
31313
+ source: "OllamaCloud"
31314
+ };
31315
+ });
31316
+ } catch {
31317
+ return [];
31318
+ }
31319
+ }
31240
31320
  function shouldRefreshForFreeModels() {
31241
31321
  if (!existsSync6(ALL_MODELS_JSON_PATH)) {
31242
31322
  return true;
@@ -31282,16 +31362,18 @@ async function getFreeModels() {
31282
31362
  return combined;
31283
31363
  }
31284
31364
  async function getAllModelsForSearch() {
31285
- const [openRouterModels, xaiModels, geminiModels, openaiModels, glmCodingModels, zenModels] = await Promise.all([
31365
+ const [openRouterModels, xaiModels, geminiModels, openaiModels, glmDirectModels, glmCodingModels, ollamaCloudModels, zenModels] = await Promise.all([
31286
31366
  fetchAllModels().then((models) => models.map(toModelInfo)),
31287
31367
  fetchXAIModels(),
31288
31368
  fetchGeminiModels(),
31289
31369
  fetchOpenAIModels(),
31370
+ fetchGLMDirectModels(),
31290
31371
  fetchGLMCodingModels(),
31372
+ fetchOllamaCloudModels(),
31291
31373
  fetchZenFreeModels()
31292
31374
  ]);
31293
- const directApiModels = [...xaiModels, ...geminiModels, ...openaiModels, ...glmCodingModels];
31294
- const allModels = [...zenModels, ...directApiModels, ...openRouterModels];
31375
+ const directApiModels = [...xaiModels, ...geminiModels, ...openaiModels, ...glmDirectModels, ...glmCodingModels];
31376
+ const allModels = [...zenModels, ...ollamaCloudModels, ...directApiModels, ...openRouterModels];
31295
31377
  return allModels;
31296
31378
  }
31297
31379
  function formatModelChoice(model, showSource = false) {
@@ -31309,7 +31391,10 @@ function formatModelChoice(model, showSource = false) {
31309
31391
  OpenRouter: "OR",
31310
31392
  xAI: "xAI",
31311
31393
  Gemini: "Gem",
31312
- OpenAI: "OAI"
31394
+ OpenAI: "OAI",
31395
+ GLM: "GLM",
31396
+ "GLM Coding": "GC",
31397
+ OllamaCloud: "OC"
31313
31398
  };
31314
31399
  const sourceTag = sourceTagMap[model.source] || model.source;
31315
31400
  return `${sourceTag} ${model.id} (${priceStr}, ${ctxStr}${capsStr})`;
@@ -31323,6 +31408,13 @@ function fuzzyMatch(text, query) {
31323
31408
  return 1;
31324
31409
  if (lowerText.includes(lowerQuery))
31325
31410
  return 0.8;
31411
+ const normSep = (s) => s.replace(/[\s\-_.]/g, "");
31412
+ const tn = normSep(lowerText);
31413
+ const qn = normSep(lowerQuery);
31414
+ if (tn === qn)
31415
+ return 0.95;
31416
+ if (tn.includes(qn))
31417
+ return 0.75;
31326
31418
  let queryIdx = 0;
31327
31419
  let score = 0;
31328
31420
  for (let i = 0;i < lowerText.length && queryIdx < lowerQuery.length; i++) {
@@ -31406,12 +31498,12 @@ function getKnownModels(provider) {
31406
31498
  { id: "google@gemini-2.0-flash", name: "Gemini 2.0 Flash", context: "1M" }
31407
31499
  ],
31408
31500
  openai: [
31501
+ { id: "oai@gpt-5.3-codex", name: "GPT-5.3 Codex", context: "400K", description: "Latest coding model" },
31502
+ { id: "oai@gpt-5.2-codex", name: "GPT-5.2 Codex", context: "400K", description: "Coding model" },
31503
+ { id: "oai@gpt-5.1-codex-mini", name: "GPT-5.1 Codex Mini", context: "400K", description: "Fast coding model" },
31409
31504
  { id: "oai@o3", name: "o3", context: "200K", description: "Reasoning model" },
31410
31505
  { id: "oai@o4-mini", name: "o4-mini", context: "200K", description: "Fast reasoning model" },
31411
- { id: "oai@gpt-4.1", name: "GPT-4.1", context: "1M", description: "Latest model" },
31412
- { id: "oai@gpt-4.1-mini", name: "GPT-4.1 Mini", context: "1M", description: "Latest mini model" },
31413
- { id: "oai@gpt-4o", name: "GPT-4o", context: "128K", description: "Multimodal model" },
31414
- { id: "oai@gpt-4o-mini", name: "GPT-4o Mini", context: "128K", description: "Fast multimodal model" }
31506
+ { id: "oai@gpt-4.1", name: "GPT-4.1", context: "1M", description: "Large context model" }
31415
31507
  ],
31416
31508
  xai: [
31417
31509
  { id: "xai@grok-4", name: "Grok 4", context: "256K" },
@@ -31426,15 +31518,22 @@ function getKnownModels(provider) {
31426
31518
  { id: "kimi@moonshot-v1-128k", name: "Moonshot V1 128K", context: "128K" }
31427
31519
  ],
31428
31520
  glm: [
31429
- { id: "glm@glm-4-plus", name: "GLM-4 Plus", context: "128K" },
31430
- { id: "glm@glm-4-flash", name: "GLM-4 Flash", context: "128K" }
31521
+ { id: "glm@glm-5", name: "GLM-5", context: "200K", description: "Latest GLM model with reasoning" },
31522
+ { id: "glm@glm-4.7", name: "GLM-4.7", context: "200K", description: "GLM 4.7 with reasoning" },
31523
+ { id: "glm@glm-4.7-flash", name: "GLM-4.7 Flash", context: "200K", description: "Fast GLM 4.7" },
31524
+ { id: "glm@glm-4.6", name: "GLM-4.6", context: "200K" },
31525
+ { id: "glm@glm-4.5-flash", name: "GLM-4.5 Flash", context: "128K" }
31431
31526
  ],
31432
31527
  zai: [
31433
31528
  { id: "zai@glm-4.7", name: "GLM 4.7 (Z.AI)", context: "128K" }
31434
31529
  ],
31435
31530
  ollamacloud: [
31436
- { id: "oc@llama-3.3-70b", name: "Llama 3.3 70B", context: "128K" },
31437
- { id: "oc@llama-3.1-405b", name: "Llama 3.1 405B", context: "128K" }
31531
+ { id: "oc@glm-5", name: "GLM-5", context: "203K", description: "GLM-5 on OllamaCloud" },
31532
+ { id: "oc@deepseek-v3.2", name: "DeepSeek V3.2", context: "164K", description: "DeepSeek V3.2 on OllamaCloud" },
31533
+ { id: "oc@gemini-3-pro-preview", name: "Gemini 3 Pro Preview", context: "1M", description: "Gemini 3 Pro on OllamaCloud" },
31534
+ { id: "oc@kimi-k2.5", name: "Kimi K2.5", context: "262K", description: "Kimi K2.5 on OllamaCloud" },
31535
+ { id: "oc@qwen3-coder-next", name: "Qwen3 Coder Next", context: "262K", description: "Qwen3 Coder on OllamaCloud" },
31536
+ { id: "oc@minimax-m2.1", name: "MiniMax M2.1", context: "205K", description: "MiniMax M2.1 on OllamaCloud" }
31438
31537
  ]
31439
31538
  };
31440
31539
  const providerDisplay = provider.charAt(0).toUpperCase() + provider.slice(1);
@@ -31656,7 +31755,7 @@ var init_model_selector = __esm(() => {
31656
31755
  { name: "Kimi / Moonshot", value: "kimi", description: "Direct API (MOONSHOT_API_KEY)" },
31657
31756
  { name: "GLM / Zhipu", value: "glm", description: "Direct API (ZHIPU_API_KEY)" },
31658
31757
  { name: "Z.AI", value: "zai", description: "Z.AI API (ZAI_API_KEY)" },
31659
- { name: "OllamaCloud", value: "ollamacloud", description: "Cloud Llama models (OLLAMA_API_KEY)" },
31758
+ { name: "OllamaCloud", value: "ollamacloud", description: "Cloud models (OLLAMA_API_KEY)" },
31660
31759
  { name: "Ollama (local)", value: "ollama", description: "Local Ollama instance" },
31661
31760
  { name: "LM Studio (local)", value: "lmstudio", description: "Local LM Studio instance" },
31662
31761
  { name: "Enter custom model", value: "custom", description: "Type a provider@model specification" }
@@ -31680,6 +31779,8 @@ var init_model_selector = __esm(() => {
31680
31779
  google: "Gemini",
31681
31780
  openai: "OpenAI",
31682
31781
  xai: "xAI",
31782
+ glm: "GLM",
31783
+ ollamacloud: "OllamaCloud",
31683
31784
  zen: "Zen"
31684
31785
  };
31685
31786
  });
@@ -32359,6 +32460,15 @@ function fuzzyScore2(text, query) {
32359
32460
  return 0.8;
32360
32461
  if (t.includes(q))
32361
32462
  return 0.6;
32463
+ const normSep = (s) => s.replace(/[\s\-_.]/g, "");
32464
+ const tn = normSep(t);
32465
+ const qn = normSep(q);
32466
+ if (tn === qn)
32467
+ return 0.95;
32468
+ if (tn.startsWith(qn))
32469
+ return 0.85;
32470
+ if (tn.includes(qn))
32471
+ return 0.65;
32362
32472
  let score = 0;
32363
32473
  let tIdx = 0;
32364
32474
  let qIdx = 0;
@@ -34631,7 +34741,7 @@ async function fetchGLMCodingModels2() {
34631
34741
  return [];
34632
34742
  }
34633
34743
  }
34634
- var __filename5, __dirname5, VERSION = "4.5.2", CACHE_MAX_AGE_DAYS3 = 2, MODELS_JSON_PATH, CLAUDISH_CACHE_DIR3, ALL_MODELS_JSON_PATH2;
34744
+ var __filename5, __dirname5, VERSION = "4.5.3", CACHE_MAX_AGE_DAYS3 = 2, MODELS_JSON_PATH, CLAUDISH_CACHE_DIR3, ALL_MODELS_JSON_PATH2;
34635
34745
  var init_cli = __esm(() => {
34636
34746
  init_config();
34637
34747
  init_model_loader();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudish",
3
- "version": "4.5.2",
3
+ "version": "4.5.3",
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",
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.5",
2
+ "version": "1.2.0",
3
3
  "lastUpdated": "2026-02-12",
4
4
  "source": "https://openrouter.ai/models?categories=programming&fmt=cards&order=top-weekly",
5
5
  "models": [