claudish 7.55.0 → 7.56.0

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.
Files changed (2) hide show
  1. package/dist/index.js +216 -10
  2. package/package.json +5 -5
package/dist/index.js CHANGED
@@ -729,7 +729,7 @@ var init_onepassword_config = __esm(() => {
729
729
  });
730
730
 
731
731
  // src/version.ts
732
- var VERSION = "7.55.0";
732
+ var VERSION = "7.56.0";
733
733
 
734
734
  // src/logger.ts
735
735
  var exports_logger = {};
@@ -28057,6 +28057,7 @@ var init_provider_definitions = __esm(() => {
28057
28057
  { prefix: "antigravity/", stripPrefix: true },
28058
28058
  { prefix: "go/", stripPrefix: true }
28059
28059
  ],
28060
+ modelDiscovery: { path: "", format: "antigravity" },
28060
28061
  isDirectApi: true,
28061
28062
  description: "Antigravity subscription (ag@; go@ deprecated)"
28062
28063
  },
@@ -30105,6 +30106,17 @@ var init_openai_api_format = __esm(() => {
30105
30106
  });
30106
30107
 
30107
30108
  // src/auth/antigravity-token.ts
30109
+ var exports_antigravity_token = {};
30110
+ __export(exports_antigravity_token, {
30111
+ writeSharedAntigravityToken: () => writeSharedAntigravityToken,
30112
+ readSharedAntigravityToken: () => readSharedAntigravityToken,
30113
+ locateAgyBinary: () => locateAgyBinary,
30114
+ hasSharedAntigravityToken: () => hasSharedAntigravityToken,
30115
+ getValidAntigravityAccessToken: () => getValidAntigravityAccessToken,
30116
+ forceRefreshAntigravityToken: () => forceRefreshAntigravityToken,
30117
+ deleteSharedAntigravityToken: () => deleteSharedAntigravityToken,
30118
+ _resetAntigravityTokenState: () => _resetAntigravityTokenState
30119
+ });
30108
30120
  import { execFileSync } from "child_process";
30109
30121
  import { existsSync as existsSync7 } from "fs";
30110
30122
  import { homedir as homedir9 } from "os";
@@ -30298,6 +30310,17 @@ var init_antigravity_token = __esm(() => {
30298
30310
  });
30299
30311
 
30300
30312
  // src/auth/antigravity-user.ts
30313
+ var exports_antigravity_user = {};
30314
+ __export(exports_antigravity_user, {
30315
+ setupAntigravityUser: () => setupAntigravityUser,
30316
+ retrieveUserQuota: () => retrieveUserQuota,
30317
+ resetAntigravityUserCache: () => resetAntigravityUserCache,
30318
+ getServedAntigravityModels: () => getServedAntigravityModels,
30319
+ getAntigravityTierFullName: () => getAntigravityTierFullName,
30320
+ getAntigravityTierDisplayName: () => getAntigravityTierDisplayName,
30321
+ buildAntigravityUserAgent: () => buildAntigravityUserAgent,
30322
+ _resetAntigravityServedModelsCache: () => _resetAntigravityServedModelsCache
30323
+ });
30301
30324
  function makeTerminalSetupError(message) {
30302
30325
  const err = new Error(message);
30303
30326
  err.terminal = true;
@@ -30357,6 +30380,9 @@ function getAntigravityTierDisplayName() {
30357
30380
  return "Antigravity Free";
30358
30381
  return cachedAgTierName || "Antigravity";
30359
30382
  }
30383
+ function getAntigravityTierFullName() {
30384
+ return cachedAgTierName || getAntigravityTierDisplayName();
30385
+ }
30360
30386
  async function retrieveUserQuota(accessToken, projectId) {
30361
30387
  try {
30362
30388
  const res = await fetch(`${ANTIGRAVITY_API_BASE}:retrieveUserQuota`, {
@@ -30364,7 +30390,7 @@ async function retrieveUserQuota(accessToken, projectId) {
30364
30390
  headers: {
30365
30391
  Authorization: `Bearer ${accessToken}`,
30366
30392
  "Content-Type": "application/json",
30367
- "User-Agent": `GeminiCLI/0.5.6/gemini-code-assist (${process.platform}; ${process.arch})`
30393
+ "User-Agent": buildAntigravityUserAgent()
30368
30394
  },
30369
30395
  body: JSON.stringify({ project: projectId })
30370
30396
  });
@@ -30398,7 +30424,21 @@ async function getServedAntigravityModels(accessToken, projectId, opts) {
30398
30424
  const servedIds = data.models ? Object.keys(data.models) : [];
30399
30425
  const defaultId = typeof data.defaultAgentModelId === "string" ? data.defaultAgentModelId : null;
30400
30426
  if (servedIds.length > 0) {
30401
- agServedCache = { servedIds, defaultId };
30427
+ const meta3 = {};
30428
+ for (const [id, record4] of Object.entries(data.models ?? {})) {
30429
+ const entry = {};
30430
+ if (typeof record4?.maxTokens === "number" && record4.maxTokens > 0) {
30431
+ entry.contextWindow = record4.maxTokens;
30432
+ }
30433
+ if (typeof record4?.maxOutputTokens === "number" && record4.maxOutputTokens > 0) {
30434
+ entry.maxOutputTokens = record4.maxOutputTokens;
30435
+ }
30436
+ if (typeof record4?.displayName === "string" && record4.displayName) {
30437
+ entry.displayName = record4.displayName;
30438
+ }
30439
+ meta3[id] = entry;
30440
+ }
30441
+ agServedCache = { servedIds, defaultId, meta: meta3 };
30402
30442
  agServedCacheAt = now;
30403
30443
  return agServedCache;
30404
30444
  }
@@ -30410,7 +30450,11 @@ async function getServedAntigravityModels(accessToken, projectId, opts) {
30410
30450
  }
30411
30451
  if (agServedCache)
30412
30452
  return agServedCache;
30413
- return { servedIds: [], defaultId: null };
30453
+ return { servedIds: [], defaultId: null, meta: {} };
30454
+ }
30455
+ function _resetAntigravityServedModelsCache() {
30456
+ agServedCache = null;
30457
+ agServedCacheAt = 0;
30414
30458
  }
30415
30459
  var ANTIGRAVITY_API_BASE = "https://cloudcode-pa.googleapis.com/v1internal", SERVED_MODELS_TTL_MS, ANTIGRAVITY_IDE_TYPE = "ANTIGRAVITY", cachedAgProjectId = null, cachedAgTierId = null, cachedAgTierName = null, agServedCache = null, agServedCacheAt = 0;
30416
30460
  var init_antigravity_user = __esm(() => {
@@ -32142,6 +32186,10 @@ async function resolveGrokClientVersion() {
32142
32186
  } catch {}
32143
32187
  return FALLBACK_GROK_CLIENT_VERSION;
32144
32188
  }
32189
+ function readGrokProxyUrl() {
32190
+ const fromEnv = process.env[GROK_PROXY_URL_ENV]?.trim();
32191
+ return (fromEnv || DEFAULT_GROK_PROXY_URL).replace(/\/+$/, "");
32192
+ }
32145
32193
  function grokAuthHeaders(token, version2 = readGrokClientVersion()) {
32146
32194
  return {
32147
32195
  Authorization: `Bearer ${token}`,
@@ -32254,7 +32302,7 @@ function refreshShared(cred) {
32254
32302
  }
32255
32303
  return refreshInFlight;
32256
32304
  }
32257
- var GROK_CLIENT_IDENTIFIER = "grok-shell", FALLBACK_GROK_CLIENT_VERSION = "1.0.4", LEGACY_SCOPE = "https://accounts.x.ai/sign-in", EXPIRY_SKEW_MS2, grokHomeOverride = null, claudishOAuthPathOverride = null, GROK_CHANNEL_URL = "https://x.ai/cli/stable", liveClientVersion = null, SIGN_IN_HINT, refreshInFlight = null;
32305
+ var GROK_PROXY_URL_ENV = "GROK_PROXY_URL", DEFAULT_GROK_PROXY_URL = "https://cli-chat-proxy.grok.com/v1", GROK_CLIENT_IDENTIFIER = "grok-shell", FALLBACK_GROK_CLIENT_VERSION = "1.0.4", LEGACY_SCOPE = "https://accounts.x.ai/sign-in", EXPIRY_SKEW_MS2, grokHomeOverride = null, claudishOAuthPathOverride = null, GROK_CHANNEL_URL = "https://x.ai/cli/stable", liveClientVersion = null, SIGN_IN_HINT, refreshInFlight = null;
32258
32306
  var init_grok_credentials = __esm(() => {
32259
32307
  init_grok_oauth();
32260
32308
  EXPIRY_SKEW_MS2 = 5 * 60 * 1000;
@@ -32976,15 +33024,22 @@ function validateVertexOAuthConfig() {
32976
33024
  }
32977
33025
  return null;
32978
33026
  }
33027
+ function vertexApiHost(location) {
33028
+ if (location === "global")
33029
+ return "aiplatform.googleapis.com";
33030
+ if (location === "eu")
33031
+ return "aiplatform.eu.rep.googleapis.com";
33032
+ return `${location}-aiplatform.googleapis.com`;
33033
+ }
32979
33034
  function buildVertexOAuthEndpoint(config2, publisher, model, streaming = true) {
32980
33035
  const method = streaming ? "streamGenerateContent" : "generateContent";
32981
33036
  if (publisher === "google") {
32982
33037
  const sseParam = streaming ? "?alt=sse" : "";
32983
- return `https://${config2.location}-aiplatform.googleapis.com/v1/` + `projects/${config2.projectId}/locations/${config2.location}/` + `publishers/${publisher}/models/${model}:${method}${sseParam}`;
33038
+ return `https://${vertexApiHost(config2.location)}/v1/` + `projects/${config2.projectId}/locations/${config2.location}/` + `publishers/${publisher}/models/${model}:${method}${sseParam}`;
32984
33039
  }
32985
33040
  if (publisher === "mistralai") {
32986
33041
  const mistralMethod = streaming ? "streamRawPredict" : "rawPredict";
32987
- return `https://${config2.location}-aiplatform.googleapis.com/v1/` + `projects/${config2.projectId}/locations/${config2.location}/` + `publishers/mistralai/models/${model}:${mistralMethod}`;
33042
+ return `https://${vertexApiHost(config2.location)}/v1/` + `projects/${config2.projectId}/locations/${config2.location}/` + `publishers/mistralai/models/${model}:${mistralMethod}`;
32988
33043
  }
32989
33044
  return `https://aiplatform.googleapis.com/v1/projects/${config2.projectId}/locations/global/endpoints/openapi/chat/completions`;
32990
33045
  }
@@ -35368,6 +35423,27 @@ function windowFromBucket(bucket) {
35368
35423
  }
35369
35424
  return window2;
35370
35425
  }
35426
+ function parseModelVersion(modelId) {
35427
+ const match = modelId.match(/(?:^|-)(\d+(?:[.-]\d+)*)(?![0-9a-z])/i);
35428
+ if (!match)
35429
+ return;
35430
+ const [major, minor] = match[1].split(/[.-]/);
35431
+ const value = Number(`${major}.${(minor ?? "0").slice(0, 3)}`);
35432
+ return Number.isFinite(value) ? value : undefined;
35433
+ }
35434
+ function compareModelRecency(a, b) {
35435
+ const va = parseModelVersion(a.id);
35436
+ const vb = parseModelVersion(b.id);
35437
+ if (va === undefined && vb === undefined)
35438
+ return a.id.localeCompare(b.id);
35439
+ if (va === undefined)
35440
+ return 1;
35441
+ if (vb === undefined)
35442
+ return -1;
35443
+ if (vb !== va)
35444
+ return vb - va;
35445
+ return a.id.localeCompare(b.id);
35446
+ }
35371
35447
  function planFromBuckets(buckets, activeModelId) {
35372
35448
  const windows = [];
35373
35449
  if (activeModelId) {
@@ -35383,6 +35459,7 @@ function planFromBuckets(buckets, activeModelId) {
35383
35459
  if (w)
35384
35460
  windows.push(w);
35385
35461
  }
35462
+ windows.sort(compareModelRecency);
35386
35463
  }
35387
35464
  if (windows.length === 0)
35388
35465
  return;
@@ -35601,6 +35678,106 @@ var init_codex = __esm(() => {
35601
35678
  };
35602
35679
  });
35603
35680
 
35681
+ // src/auth/quota/sources/grok.ts
35682
+ function periodLabel(type) {
35683
+ switch (type) {
35684
+ case "USAGE_PERIOD_TYPE_WEEKLY":
35685
+ return "7d";
35686
+ case "USAGE_PERIOD_TYPE_DAILY":
35687
+ return "24h";
35688
+ case "USAGE_PERIOD_TYPE_MONTHLY":
35689
+ return "30d";
35690
+ default:
35691
+ if (!type)
35692
+ return "period";
35693
+ return type.replace(/^USAGE_PERIOD_TYPE_/, "").toLowerCase() || "period";
35694
+ }
35695
+ }
35696
+ function windowsFromBilling(config2) {
35697
+ const resetsAt = config2.currentPeriod?.end ?? config2.billingPeriodEnd;
35698
+ const label = periodLabel(config2.currentPeriod?.type);
35699
+ const windows = [];
35700
+ for (const entry of config2.productUsage ?? []) {
35701
+ if (typeof entry?.usagePercent !== "number" || !entry.product)
35702
+ continue;
35703
+ const used = toUsedPct(entry.usagePercent);
35704
+ if (used === undefined)
35705
+ continue;
35706
+ const w = { id: entry.product, used_pct: used };
35707
+ if (resetsAt)
35708
+ w.resets_at = resetsAt;
35709
+ windows.push(w);
35710
+ }
35711
+ if (windows.length === 0 && typeof config2.creditUsagePercent === "number") {
35712
+ const used = toUsedPct(config2.creditUsagePercent);
35713
+ if (used !== undefined) {
35714
+ const w = { id: label, used_pct: used };
35715
+ if (resetsAt)
35716
+ w.resets_at = resetsAt;
35717
+ windows.push(w);
35718
+ }
35719
+ }
35720
+ return windows;
35721
+ }
35722
+ async function fetchPlan2() {
35723
+ try {
35724
+ const [token, version2] = await Promise.all([
35725
+ resolveGrokAccessToken(),
35726
+ resolveGrokClientVersion()
35727
+ ]);
35728
+ const res = await fetch(`${readGrokProxyUrl()}${BILLING_PATH}`, {
35729
+ method: "GET",
35730
+ headers: grokAuthHeaders(token, version2)
35731
+ });
35732
+ if (!res.ok) {
35733
+ log(`[quota:grok] billing fetch failed: ${res.status}`);
35734
+ return;
35735
+ }
35736
+ const body = await res.json();
35737
+ const config2 = body?.config;
35738
+ if (!config2)
35739
+ return;
35740
+ const windows = windowsFromBilling(config2);
35741
+ if (windows.length === 0)
35742
+ return;
35743
+ return {
35744
+ label: "Grok Build",
35745
+ windows,
35746
+ source: "provider",
35747
+ observed_at: new Date().toISOString()
35748
+ };
35749
+ } catch (err) {
35750
+ log(`[quota:grok] billing fetch error: ${err}`);
35751
+ return;
35752
+ }
35753
+ }
35754
+ var BILLING_PATH = "/billing?format=credits", grokQuotaAdapter;
35755
+ var init_grok = __esm(() => {
35756
+ init_logger();
35757
+ init_grok_credentials();
35758
+ init_types2();
35759
+ grokQuotaAdapter = {
35760
+ providerId: "grok-subscription",
35761
+ label: "Grok Build",
35762
+ capability() {
35763
+ return { kind: "endpoint" };
35764
+ },
35765
+ isAvailable() {
35766
+ try {
35767
+ return hasGrokCredentials();
35768
+ } catch {
35769
+ return false;
35770
+ }
35771
+ },
35772
+ poll(_ctx) {
35773
+ return fetchPlan2();
35774
+ },
35775
+ fetchExplicit(_ctx) {
35776
+ return fetchPlan2();
35777
+ }
35778
+ };
35779
+ });
35780
+
35604
35781
  // src/auth/quota/registry.ts
35605
35782
  function unsupported(providerId, label, evidence) {
35606
35783
  return {
@@ -35624,6 +35801,7 @@ var PROBED_ON = "2026-08-05", NO_SURFACE, ADAPTERS, BY_ID;
35624
35801
  var init_registry = __esm(() => {
35625
35802
  init_antigravity2();
35626
35803
  init_codex();
35804
+ init_grok();
35627
35805
  NO_SURFACE = [
35628
35806
  {
35629
35807
  id: "glm-coding",
@@ -35753,6 +35931,7 @@ var init_registry = __esm(() => {
35753
35931
  ADAPTERS = [
35754
35932
  codexQuotaAdapter,
35755
35933
  antigravityQuotaAdapter,
35934
+ grokQuotaAdapter,
35756
35935
  ...NO_SURFACE.map((p) => unsupported(p.id, p.label, p.evidence))
35757
35936
  ];
35758
35937
  BY_ID = new Map(ADAPTERS.map((a) => [a.providerId, a]));
@@ -43036,6 +43215,27 @@ async function discoverProviderModels(providerName) {
43036
43215
  _cache.set(providerName, { models: models2, expiresAt: Date.now() + CACHE_TTL_MS });
43037
43216
  return models2;
43038
43217
  }
43218
+ if (descriptor.format === "antigravity") {
43219
+ const { getValidAntigravityAccessToken: getValidAntigravityAccessToken2 } = await Promise.resolve().then(() => (init_antigravity_token(), exports_antigravity_token));
43220
+ const { setupAntigravityUser: setupAntigravityUser2, getServedAntigravityModels: getServedAntigravityModels2 } = await Promise.resolve().then(() => (init_antigravity_user(), exports_antigravity_user));
43221
+ const token = await getValidAntigravityAccessToken2();
43222
+ if (!token) {
43223
+ return recordFailure({ kind: "no-credentials", provider: providerName });
43224
+ }
43225
+ const { projectId } = await setupAntigravityUser2(token);
43226
+ const { servedIds, meta: meta3 } = await getServedAntigravityModels2(token, projectId);
43227
+ if (servedIds.length === 0) {
43228
+ return recordFailure({ kind: "empty-roster", provider: providerName });
43229
+ }
43230
+ const models2 = servedIds.map((id) => {
43231
+ const m = meta3[id];
43232
+ return m?.contextWindow ? { id, contextWindow: m.contextWindow } : { id };
43233
+ });
43234
+ _failures.delete(providerName);
43235
+ log(`[model-discovery:${providerName}] discovered ${models2.length} models`);
43236
+ _cache.set(providerName, { models: models2, expiresAt: Date.now() + CACHE_TTL_MS });
43237
+ return models2;
43238
+ }
43039
43239
  if (descriptor.format === "ollama-tags") {
43040
43240
  const { fetchOllamaModels: fetchOllamaModels2 } = await Promise.resolve().then(() => exports_ollama_discovery);
43041
43241
  const installed = await fetchOllamaModels2({ enrichCapabilities: false });
@@ -67277,12 +67477,16 @@ function renderPlan(adapter, plan) {
67277
67477
  console.log("");
67278
67478
  console.log(` ${peakColor}${B}${peak}%${R} ${D}peak usage across ${plan.windows.length} window${plan.windows.length === 1 ? "" : "s"}${R}`);
67279
67479
  console.log("");
67480
+ const NAME_MIN = 14;
67481
+ const NAME_MAX = 28;
67482
+ const widest = plan.windows.reduce((m, w) => Math.max(m, w.id.length), 0);
67483
+ const nameWidth = Math.min(NAME_MAX, Math.max(NAME_MIN, widest + 1));
67280
67484
  for (const w of plan.windows) {
67281
67485
  const color = colorFor(w.used_pct);
67282
67486
  const bar = buildUsageBar(w.used_pct / 100, color, 24);
67283
67487
  const reset = w.resets_at ? formatRelativeReset(w.resets_at) : "";
67284
- const name = w.id.length > 14 ? `${w.id.slice(0, 13)}\u2026` : w.id;
67285
- console.log(` ${GRY}\u2502${R} ${WHT}${name.padEnd(14)}${R}${bar} ${color}${String(w.used_pct).padStart(3)}%${R} ${GRY}${I}${reset}${R}`);
67488
+ const name = w.id.length > nameWidth ? `${w.id.slice(0, nameWidth - 1)}\u2026` : w.id;
67489
+ console.log(` ${GRY}\u2502${R} ${WHT}${name.padEnd(nameWidth)}${R}${bar} ${color}${String(w.used_pct).padStart(3)}%${R} ${GRY}${I}${reset}${R}`);
67286
67490
  }
67287
67491
  console.log("");
67288
67492
  console.log(` ${GRN}\u2588${R}${GRY} <50%${R} ${YEL}\u2588${R}${GRY} 50-80%${R} ${RED}\u2588${R}${GRY} >80%${R} ${D}\u2591 available${R}`);
@@ -67370,7 +67574,9 @@ var init_quota_command = __esm(() => {
67370
67574
  sakana: "sakana-subscription",
67371
67575
  fugu: "sakana-subscription",
67372
67576
  zen: "opencode-zen-go",
67373
- qwen: "qwen-cloud"
67577
+ qwen: "qwen-cloud",
67578
+ grok: "grok-subscription",
67579
+ supergrok: "grok-subscription"
67374
67580
  };
67375
67581
  });
67376
67582
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudish",
3
- "version": "7.55.0",
3
+ "version": "7.56.0",
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",
@@ -60,10 +60,10 @@
60
60
  "ai"
61
61
  ],
62
62
  "optionalDependencies": {
63
- "@claudish/magmux-darwin-arm64": "7.55.0",
64
- "@claudish/magmux-darwin-x64": "7.55.0",
65
- "@claudish/magmux-linux-arm64": "7.55.0",
66
- "@claudish/magmux-linux-x64": "7.55.0"
63
+ "@claudish/magmux-darwin-arm64": "7.56.0",
64
+ "@claudish/magmux-darwin-x64": "7.56.0",
65
+ "@claudish/magmux-linux-arm64": "7.56.0",
66
+ "@claudish/magmux-linux-x64": "7.56.0"
67
67
  },
68
68
  "author": "Jack Rudenko <i@madappgang.com>",
69
69
  "license": "MIT",