crosscheck-mcp 0.2.13 → 0.2.14

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.
@@ -495,8 +495,21 @@ function isCreditsFailure(status, bodyText) {
495
495
  }
496
496
  return false;
497
497
  }
498
- function httpFailureToProviderError(provider, status, bodyText, retryAfterS) {
498
+ var MODEL_ACCESS_RE = /model_not_found|does not have access to model|does not exist|model[\s_]not[\s_]found|invalid model|unknown model|unsupported model/i;
499
+ function isModelAccessFailure(status, bodyText) {
500
+ if (status < 400 || status >= 500) return false;
501
+ return MODEL_ACCESS_RE.test(bodyText);
502
+ }
503
+ function httpFailureToProviderError(provider, status, bodyText, retryAfterS, model) {
499
504
  const detail = bodyText.slice(0, 512);
505
+ if (isModelAccessFailure(status, bodyText)) {
506
+ const modelRef = model ? `"${model}"` : "the configured model";
507
+ return new ProviderError(
508
+ "client",
509
+ `${provider}: your account/project doesn't have access to ${modelRef} (HTTP ${status}). This is a model-access problem, not a key problem \u2014 your ${provider} API key is fine, ${modelRef} just isn't enabled for this account/project. Fix: run \`crosscheck models set ${provider} <a-model-you-have-access-to>\` (or set ${provider.toUpperCase()}_MODEL in your .env until that's available). Detail: ${detail}`,
510
+ { status }
511
+ );
512
+ }
500
513
  if (isCreditsFailure(status, bodyText)) {
501
514
  return new ProviderError(
502
515
  "auth",
@@ -825,7 +838,7 @@ async function sendAnthropic(args) {
825
838
  return { text, attempts: 1, usage: applyPricing(usage, args.pricing) };
826
839
  }
827
840
  const bodyText = await respLike.text().catch(() => "");
828
- throw httpFailureToProviderError("anthropic", status, bodyText, parseRetryAfter(respLike));
841
+ throw httpFailureToProviderError("anthropic", status, bodyText, parseRetryAfter(respLike), args.model);
829
842
  };
830
843
  await acquireRateLimit("anthropic", args.signal ? { signal: args.signal } : void 0);
831
844
  return sendWithRetry(attemptOnce, resolveRetryConfig(), args.signal);
@@ -1003,7 +1016,7 @@ async function sendGemini(args) {
1003
1016
  return { text, attempts: 1, usage: applyPricing2(usage, args.pricing) };
1004
1017
  }
1005
1018
  const bodyText = await respLike.text().catch(() => "");
1006
- throw httpFailureToProviderError("gemini", status, bodyText, parseRetryAfter(respLike));
1019
+ throw httpFailureToProviderError("gemini", status, bodyText, parseRetryAfter(respLike), args.model);
1007
1020
  };
1008
1021
  await acquireRateLimit("gemini", args.signal ? { signal: args.signal } : void 0);
1009
1022
  return sendWithRetry(attemptOnce, resolveRetryConfig(), args.signal);
@@ -1176,7 +1189,7 @@ async function sendOpenAICompatible(args) {
1176
1189
  return { text, attempts: 1, usage: applyPricing3(usage, args.pricing) };
1177
1190
  }
1178
1191
  const bodyText = await respLike.text().catch(() => "");
1179
- throw httpFailureToProviderError(args.provider, status, bodyText, parseRetryAfter(respLike));
1192
+ throw httpFailureToProviderError(args.provider, status, bodyText, parseRetryAfter(respLike), args.model);
1180
1193
  };
1181
1194
  await acquireRateLimit(args.provider, args.signal ? { signal: args.signal } : void 0);
1182
1195
  return sendWithRetry(attemptOnce, resolveRetryConfig(), args.signal);
@@ -1185,7 +1198,10 @@ async function sendOpenAICompatible(args) {
1185
1198
  // src/providers/registry.ts
1186
1199
  var DEFAULT_MODELS = {
1187
1200
  anthropic: "claude-opus-5",
1188
- openai: "gpt-5.5",
1201
+ // gpt-5.5 is not enabled on every OpenAI account/project (some are still
1202
+ // capped at gpt-5) — gpt-5 is the safer, more broadly available default
1203
+ // until a user/org explicitly opts into 5.5 via `crosscheck models set`.
1204
+ openai: "gpt-5",
1189
1205
  xai: "grok-4-latest",
1190
1206
  mistral: "mistral-large-latest",
1191
1207
  groq: "llama-3.3-70b-versatile",
@@ -1280,7 +1296,7 @@ var import_zod = require("zod");
1280
1296
 
1281
1297
  // src/server-meta.ts
1282
1298
  var SERVER_NAME = "crosscheck-agent";
1283
- var SERVER_VERSION = true ? "0.2.13" : "0.0.0-dev";
1299
+ var SERVER_VERSION = true ? "0.2.14" : "0.0.0-dev";
1284
1300
 
1285
1301
  // src/tools/audit.ts
1286
1302
  var import_node_fs4 = require("fs");
@@ -11490,7 +11506,7 @@ var CHECK_INTERVAL_SECONDS = 3 * 24 * 60 * 60;
11490
11506
  var DEFAULT_PACKAGE = "crosscheck-cli";
11491
11507
  var FETCH_TIMEOUT_MS = 3e3;
11492
11508
  function engineVersion() {
11493
- return true ? "0.2.13" : "0.0.0-dev";
11509
+ return true ? "0.2.14" : "0.0.0-dev";
11494
11510
  }
11495
11511
  function defaultUpdateCachePath() {
11496
11512
  const base = process.env["CROSSCHECK_DATA_DIR"] || import_node_path12.default.join(import_node_os2.default.homedir() || import_node_os2.default.tmpdir(), ".crosscheck");