crosscheck-mcp 0.2.17 → 0.2.19
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/browser-ext.cjs +128 -17
- package/dist/browser-ext.cjs.map +1 -1
- package/dist/browser-ext.js +128 -17
- package/dist/browser-ext.js.map +1 -1
- package/dist/node-stdio.cjs +130 -17
- package/dist/node-stdio.cjs.map +1 -1
- package/dist/node-stdio.js +130 -17
- package/dist/node-stdio.js.map +1 -1
- package/package.json +1 -1
package/dist/browser-ext.js
CHANGED
|
@@ -1200,18 +1200,24 @@ async function sendOpenAICompatible(args) {
|
|
|
1200
1200
|
// src/providers/registry.ts
|
|
1201
1201
|
var DEFAULT_MODELS = {
|
|
1202
1202
|
anthropic: "claude-opus-5",
|
|
1203
|
-
|
|
1204
|
-
// capped at gpt-5) — gpt-5 is the safer, more broadly available default
|
|
1205
|
-
// until a user/org explicitly opts into 5.5 via `crosscheck models set`.
|
|
1206
|
-
openai: "gpt-5",
|
|
1203
|
+
openai: "gpt-5.6-sol",
|
|
1207
1204
|
xai: "grok-4-latest",
|
|
1208
1205
|
mistral: "mistral-large-latest",
|
|
1209
1206
|
groq: "llama-3.3-70b-versatile",
|
|
1210
1207
|
deepseek: "deepseek-chat",
|
|
1211
|
-
gemini: "gemini-3.
|
|
1208
|
+
gemini: "gemini-3.8-flash",
|
|
1212
1209
|
kimi: "kimi-k3",
|
|
1213
1210
|
qwen: "qwen3.8-max"
|
|
1214
1211
|
};
|
|
1212
|
+
var DEFAULT_FALLBACKS = {
|
|
1213
|
+
// gpt-5.6 requires a billing-enabled account and is excluded from the free
|
|
1214
|
+
// tier, so gpt-5 remains the broadly-available floor. One hop, not a
|
|
1215
|
+
// ladder — an intermediate 5.5 step would just be another model to reason
|
|
1216
|
+
// about.
|
|
1217
|
+
openai: ["gpt-5"],
|
|
1218
|
+
// 3.8 Flash is recent enough that some projects won't have it yet.
|
|
1219
|
+
gemini: ["gemini-3.1-pro-preview"]
|
|
1220
|
+
};
|
|
1215
1221
|
var MODEL_ENV_VARS = {
|
|
1216
1222
|
anthropic: "ANTHROPIC_MODEL",
|
|
1217
1223
|
openai: "OPENAI_MODEL",
|
|
@@ -1229,7 +1235,11 @@ function parseFallbackModels(raw) {
|
|
|
1229
1235
|
}
|
|
1230
1236
|
function fallbackModelsFor(env, provider) {
|
|
1231
1237
|
const envVar = MODEL_ENV_VARS[provider];
|
|
1232
|
-
|
|
1238
|
+
const fromEnv = envVar ? parseFallbackModels(env[`${envVar}_FALLBACKS`]) : [];
|
|
1239
|
+
if (fromEnv.length > 0) return fromEnv;
|
|
1240
|
+
const pinned = envVar ? env[envVar] : void 0;
|
|
1241
|
+
if (pinned && pinned !== DEFAULT_MODELS[provider]) return [];
|
|
1242
|
+
return DEFAULT_FALLBACKS[provider] ?? [];
|
|
1233
1243
|
}
|
|
1234
1244
|
function buildProviders(opts) {
|
|
1235
1245
|
const out = {};
|
|
@@ -1320,7 +1330,7 @@ import { z } from "zod";
|
|
|
1320
1330
|
|
|
1321
1331
|
// src/server-meta.ts
|
|
1322
1332
|
var SERVER_NAME = "crosscheck-agent";
|
|
1323
|
-
var SERVER_VERSION = true ? "0.2.
|
|
1333
|
+
var SERVER_VERSION = true ? "0.2.19" : "0.0.0-dev";
|
|
1324
1334
|
|
|
1325
1335
|
// src/tools/audit.ts
|
|
1326
1336
|
import { readdirSync, readFileSync as readFileSync3, statSync } from "fs";
|
|
@@ -2890,7 +2900,7 @@ function numberOrNull(v) {
|
|
|
2890
2900
|
import { performance as performance2 } from "perf_hooks";
|
|
2891
2901
|
|
|
2892
2902
|
// src/core/co-reason.ts
|
|
2893
|
-
var CO_REASON_MODEL = "gpt-5.6";
|
|
2903
|
+
var CO_REASON_MODEL = "gpt-5.6-sol";
|
|
2894
2904
|
var CO_REASON_PROVIDER = "openai";
|
|
2895
2905
|
var CO_REASON_LABEL = "GPT-5.6";
|
|
2896
2906
|
function pickCoReasoner(providers, upgradeRequested) {
|
|
@@ -4248,8 +4258,10 @@ var SUPER_MODELS = {
|
|
|
4248
4258
|
// on it succeeded as recently as 2026-08-30 — so it is an unlisted alias
|
|
4249
4259
|
// rather than a dead id.
|
|
4250
4260
|
xai: [DEFAULT_MODELS["xai"]],
|
|
4251
|
-
// 3.8 Flash
|
|
4252
|
-
|
|
4261
|
+
// 3.8 Flash is now BOTH the everyday default and the super pick for Gemini,
|
|
4262
|
+
// so this can no longer borrow DEFAULT_MODELS as its fallback — that would
|
|
4263
|
+
// repeat the same model and retry one that just failed. Named explicitly.
|
|
4264
|
+
gemini: ["gemini-3.8-flash", "gemini-3.1-pro-preview"],
|
|
4253
4265
|
kimi: [DEFAULT_MODELS["kimi"]],
|
|
4254
4266
|
qwen: [DEFAULT_MODELS["qwen"]]
|
|
4255
4267
|
};
|
|
@@ -10099,11 +10111,13 @@ function runListProviders(args, opts) {
|
|
|
10099
10111
|
const providers = [];
|
|
10100
10112
|
for (const name of names) {
|
|
10101
10113
|
const prov = opts.providers[name];
|
|
10114
|
+
const superChain = superRequested ? superChainFor(name) : [];
|
|
10102
10115
|
providers.push({
|
|
10103
10116
|
name,
|
|
10104
10117
|
available: prov !== void 0,
|
|
10105
10118
|
active: active.has(name),
|
|
10106
|
-
model: superRequested ?
|
|
10119
|
+
model: superRequested ? superPrimary(name) ?? null : prov ? prov.model : null,
|
|
10120
|
+
...superChain.length > 1 ? { fallbacks: superChain.slice(1) } : {}
|
|
10107
10121
|
});
|
|
10108
10122
|
}
|
|
10109
10123
|
const result = {
|
|
@@ -10115,6 +10129,80 @@ function runListProviders(args, opts) {
|
|
|
10115
10129
|
return result;
|
|
10116
10130
|
}
|
|
10117
10131
|
|
|
10132
|
+
// src/tools/models.ts
|
|
10133
|
+
var KNOWN_PROVIDERS7 = [
|
|
10134
|
+
"anthropic",
|
|
10135
|
+
"openai",
|
|
10136
|
+
"xai",
|
|
10137
|
+
"gemini",
|
|
10138
|
+
"mistral",
|
|
10139
|
+
"groq",
|
|
10140
|
+
"deepseek",
|
|
10141
|
+
"kimi",
|
|
10142
|
+
"qwen"
|
|
10143
|
+
];
|
|
10144
|
+
var PICKER_URL = "https://crosscheckagent.com/account/models";
|
|
10145
|
+
var SUPER_ENV_VARS2 = {
|
|
10146
|
+
anthropic: "ANTHROPIC_SUPER_MODEL",
|
|
10147
|
+
openai: "OPENAI_SUPER_MODEL",
|
|
10148
|
+
xai: "XAI_SUPER_MODEL",
|
|
10149
|
+
gemini: "GEMINI_SUPER_MODEL",
|
|
10150
|
+
kimi: "KIMI_SUPER_MODEL",
|
|
10151
|
+
qwen: "QWEN_SUPER_MODEL",
|
|
10152
|
+
mistral: "MISTRAL_SUPER_MODEL",
|
|
10153
|
+
groq: "GROQ_SUPER_MODEL",
|
|
10154
|
+
deepseek: "DEEPSEEK_SUPER_MODEL"
|
|
10155
|
+
};
|
|
10156
|
+
var MODEL_ENV_VARS2 = {
|
|
10157
|
+
anthropic: "ANTHROPIC_MODEL",
|
|
10158
|
+
openai: "OPENAI_MODEL",
|
|
10159
|
+
xai: "XAI_MODEL",
|
|
10160
|
+
gemini: "GEMINI_MODEL",
|
|
10161
|
+
kimi: "KIMI_MODEL",
|
|
10162
|
+
qwen: "QWEN_MODEL",
|
|
10163
|
+
mistral: "MISTRAL_MODEL",
|
|
10164
|
+
groq: "GROQ_MODEL",
|
|
10165
|
+
deepseek: "DEEPSEEK_MODEL"
|
|
10166
|
+
};
|
|
10167
|
+
function runModels(args, opts) {
|
|
10168
|
+
const env = opts.env ?? process.env;
|
|
10169
|
+
const active = new Set(opts.activeProviders ?? Object.keys(opts.providers));
|
|
10170
|
+
const onlySuper = isSuperRequested(args);
|
|
10171
|
+
const names = onlySuper ? SUPER_PROVIDER_NAMES : KNOWN_PROVIDERS7;
|
|
10172
|
+
const rows = [];
|
|
10173
|
+
for (const name of names) {
|
|
10174
|
+
const prov = opts.providers[name];
|
|
10175
|
+
const conferModel = prov ? prov.model : null;
|
|
10176
|
+
const conferPinned = Boolean(MODEL_ENV_VARS2[name] && env[MODEL_ENV_VARS2[name]]);
|
|
10177
|
+
const conferSource = !prov ? "unconfigured" : conferPinned ? "preference" : "default";
|
|
10178
|
+
const superVar = SUPER_ENV_VARS2[name];
|
|
10179
|
+
const superPinned = Boolean(superVar && env[superVar]);
|
|
10180
|
+
const chain = superChainFor(name, env);
|
|
10181
|
+
rows.push({
|
|
10182
|
+
provider: name,
|
|
10183
|
+
available: prov !== void 0,
|
|
10184
|
+
active: active.has(name),
|
|
10185
|
+
confer: conferModel,
|
|
10186
|
+
confer_source: conferSource,
|
|
10187
|
+
super: superPrimary(name, env) ?? null,
|
|
10188
|
+
super_source: superPinned ? "preference" : chain.length > 0 ? "default" : "unconfigured",
|
|
10189
|
+
...chain.length > 1 ? { super_fallbacks: chain.slice(1) } : {}
|
|
10190
|
+
});
|
|
10191
|
+
}
|
|
10192
|
+
const pinned = rows.filter(
|
|
10193
|
+
(r) => r.confer_source === "preference" || r.super_source === "preference"
|
|
10194
|
+
).length;
|
|
10195
|
+
return {
|
|
10196
|
+
tool: "models",
|
|
10197
|
+
providers: rows,
|
|
10198
|
+
...onlySuper ? { super_mode: true } : {},
|
|
10199
|
+
pinned_count: pinned,
|
|
10200
|
+
// Read-only by design — say so, and say where selection actually happens,
|
|
10201
|
+
// rather than leaving someone to guess why nothing changed.
|
|
10202
|
+
how_to_change: `This is read-only. Choose models at ${PICKER_URL} \u2014 a dropdown per provider, with separate tabs for \`confer\` and \`confer super\` \u2014 then run \`crosscheck models sync\`, or restart the MCP server. In the terminal, \`crosscheck models set <provider> <model>\` pins one and \`crosscheck models fallback <provider> <model>\` greenlights a fallback (tried ONLY when the pinned model is inaccessible, never for a bad key, a rate limit, or a 500). Terminal commands edit the confer set only; picking a separate super lineup is browser-only for now.`
|
|
10203
|
+
};
|
|
10204
|
+
}
|
|
10205
|
+
|
|
10118
10206
|
// src/tools/pick.ts
|
|
10119
10207
|
import { performance as performance11 } from "perf_hooks";
|
|
10120
10208
|
var PICK_SCORES_SCHEMA = {
|
|
@@ -10434,7 +10522,7 @@ function resolveProviders7(names, available, allowlist) {
|
|
|
10434
10522
|
}
|
|
10435
10523
|
return out;
|
|
10436
10524
|
}
|
|
10437
|
-
var
|
|
10525
|
+
var KNOWN_PROVIDERS8 = [
|
|
10438
10526
|
"anthropic",
|
|
10439
10527
|
"openai",
|
|
10440
10528
|
"xai",
|
|
@@ -10448,7 +10536,7 @@ function unknownProviderError6(unknownNames, available) {
|
|
|
10448
10536
|
const typos = [];
|
|
10449
10537
|
for (const n of unknownNames) {
|
|
10450
10538
|
const key = n.trim().toLowerCase();
|
|
10451
|
-
if (
|
|
10539
|
+
if (KNOWN_PROVIDERS8.includes(key)) notRegistered.push(n);
|
|
10452
10540
|
else typos.push(n);
|
|
10453
10541
|
}
|
|
10454
10542
|
return {
|
|
@@ -11597,7 +11685,7 @@ function resolveProviders8(names, available, allowlist) {
|
|
|
11597
11685
|
}
|
|
11598
11686
|
return out;
|
|
11599
11687
|
}
|
|
11600
|
-
var
|
|
11688
|
+
var KNOWN_PROVIDERS9 = [
|
|
11601
11689
|
"anthropic",
|
|
11602
11690
|
"openai",
|
|
11603
11691
|
"xai",
|
|
@@ -11611,7 +11699,7 @@ function unknownProviderError7(unknownNames, available) {
|
|
|
11611
11699
|
const typos = [];
|
|
11612
11700
|
for (const n of unknownNames) {
|
|
11613
11701
|
const key = n.trim().toLowerCase();
|
|
11614
|
-
if (
|
|
11702
|
+
if (KNOWN_PROVIDERS9.includes(key)) notRegistered.push(n);
|
|
11615
11703
|
else typos.push(n);
|
|
11616
11704
|
}
|
|
11617
11705
|
return {
|
|
@@ -11661,7 +11749,7 @@ var CHECK_INTERVAL_SECONDS = 3 * 24 * 60 * 60;
|
|
|
11661
11749
|
var DEFAULT_PACKAGE = "crosscheck-cli";
|
|
11662
11750
|
var FETCH_TIMEOUT_MS = 3e3;
|
|
11663
11751
|
function engineVersion() {
|
|
11664
|
-
return true ? "0.2.
|
|
11752
|
+
return true ? "0.2.19" : "0.0.0-dev";
|
|
11665
11753
|
}
|
|
11666
11754
|
function defaultUpdateCachePath() {
|
|
11667
11755
|
const base = process.env["CROSSCHECK_DATA_DIR"] || path9.join(os.homedir() || os.tmpdir(), ".crosscheck");
|
|
@@ -12254,7 +12342,15 @@ var HELP_CATALOG = [
|
|
|
12254
12342
|
primaryArg: "(none)",
|
|
12255
12343
|
summary: "Show configured providers, their default models, and active status.",
|
|
12256
12344
|
example: "xc list_providers",
|
|
12257
|
-
detail: "Lists every provider Crosscheck knows about, which have keys configured, each one's default model, and whether it's active in the panel."
|
|
12345
|
+
detail: "Lists every provider Crosscheck knows about, which have keys configured, each one's default model, and whether it's active in the panel. For what each provider will actually RUN on each panel, and how to change it, use `xc models`."
|
|
12346
|
+
},
|
|
12347
|
+
{
|
|
12348
|
+
name: "models",
|
|
12349
|
+
category: "Operations",
|
|
12350
|
+
primaryArg: "(none)",
|
|
12351
|
+
summary: "Where to choose which model each provider uses, per panel.",
|
|
12352
|
+
example: "xc models \xB7 xc models super:true",
|
|
12353
|
+
detail: "Every provider has a default model, and `super` has its own flagship lineup. Both are defaults you can change, per provider, per machine.\n\nEasiest in the browser: crosscheckagent.com/account/models. A dropdown per provider, with separate tabs for `confer` (the everyday panel, also used by debate/audit/plan) and `confer super` (the flagship lineup). The blank option names the engine's own default, so leaving a row alone tells you what you're getting. Save, then run `crosscheck models sync` in your terminal \u2014 or just restart the MCP server.\n\nFrom the terminal: `crosscheck models list` shows what this machine will actually use and why (env var, your preference, org policy, or default); `crosscheck models set <provider> <model>` pins one; `crosscheck models fallback <provider> <model>` greenlights a fallback, tried ONLY if the pinned model comes back inaccessible \u2014 never for a bad key, a rate limit, or a 500, since a different model wouldn't fix those.\n\nTwo things that catch people out. Leaving a provider blank in the super tab means 'inherit my confer choice', not 'reset to default'. And the terminal commands edit the confer set only \u2014 choosing a separate lineup for super is browser-only for now."
|
|
12258
12354
|
},
|
|
12259
12355
|
{
|
|
12260
12356
|
name: "recommend_panel",
|
|
@@ -12522,6 +12618,7 @@ function registerCoreTools(opts = {}) {
|
|
|
12522
12618
|
o.repoRoot
|
|
12523
12619
|
),
|
|
12524
12620
|
listProvidersTool(o.providers ?? {}, o.activeProviders ?? null, o.moderatorDefault ?? "anthropic"),
|
|
12621
|
+
modelsTool(o.providers ?? {}, o.activeProviders ?? null),
|
|
12525
12622
|
recallTool(o.storage, o.bridge),
|
|
12526
12623
|
sessionMemoryTool(o.storage, o.bridge),
|
|
12527
12624
|
scoreboardTool(o.storage, o.bridge, o.eventsPath),
|
|
@@ -12937,6 +13034,20 @@ function listProvidersTool(providers, activeProviders, moderatorDefault) {
|
|
|
12937
13034
|
})
|
|
12938
13035
|
};
|
|
12939
13036
|
}
|
|
13037
|
+
function modelsTool(providers, activeProviders) {
|
|
13038
|
+
return {
|
|
13039
|
+
name: "models",
|
|
13040
|
+
description: "Show which model each provider will use, for BOTH panels \u2014 plain confer and `super` \u2014 with where each choice came from (your preference or the engine default), plus where to change them. Read-only; selection happens in the browser or the CLI.",
|
|
13041
|
+
inputSchema: {
|
|
13042
|
+
type: "object",
|
|
13043
|
+
additionalProperties: true,
|
|
13044
|
+
properties: {
|
|
13045
|
+
super: { type: "boolean", description: "Narrow the listing to the super lineup." }
|
|
13046
|
+
}
|
|
13047
|
+
},
|
|
13048
|
+
handler: async (args) => runModels(args, { providers, activeProviders })
|
|
13049
|
+
};
|
|
13050
|
+
}
|
|
12940
13051
|
function reviewTool(providers, allowlist, bridge, storage, breakers, transcriptsDir, repoRoot) {
|
|
12941
13052
|
return {
|
|
12942
13053
|
name: "review",
|