crosscheck-mcp 0.2.10 → 0.2.12
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 +83 -20
- package/dist/browser-ext.cjs.map +1 -1
- package/dist/browser-ext.js +83 -20
- package/dist/browser-ext.js.map +1 -1
- package/dist/node-stdio.cjs +73 -18
- package/dist/node-stdio.cjs.map +1 -1
- package/dist/node-stdio.js +73 -18
- package/dist/node-stdio.js.map +1 -1
- package/dist/pricing.json +14 -2
- package/dist/self-check.cjs +1000 -0
- package/dist/self-check.cjs.map +1 -0
- package/dist/self-check.d.cts +30 -0
- package/dist/self-check.d.ts +30 -0
- package/dist/self-check.js +977 -0
- package/dist/self-check.js.map +1 -0
- package/package.json +7 -2
package/dist/browser-ext.cjs
CHANGED
|
@@ -44,8 +44,8 @@ var pricing_default = {
|
|
|
44
44
|
_meta: {
|
|
45
45
|
currency: "USD",
|
|
46
46
|
unit: "per_1k_tokens",
|
|
47
|
-
updated_at: "2026-
|
|
48
|
-
notes: "Prices reflect public list pricing per provider. cached_per_1k applies to prompt tokens served from prompt-cache (Anthropic) or input-cache (OpenAI) when supported. Update when providers change rates. Missing models fall back to cost=0 with estimated=true. 2026-06-07: removed decommissioned gemini-2.0-flash / gemini-2.0-flash-lite (Google returns 404) and replaced the low-tier lite model with gemini-2.5-flash-lite. 2026-06-08: bumped the default Anthropic model to claude-opus-4-8. Kept gemini-2.5-pro as the Gemini default (gemini-3.1-pro-preview measured ~2.2x the cost at $2/$12 per M \u2014 output-token dominated by ~1.5k thinking tokens \u2014 so not worth it for a 1-of-4 panel voice). 2026-06-09: corrected rates verified against live provider pricing pages \u2014 gemini-2.5-pro output $5->$10/M; gemini-2.5-flash $0.15/$0.60 -> $0.30/$2.50; gpt-5 $5/$15 -> $1.25/$10 (cached $0.125); grok-4-latest input $5->$3/M (legacy grok-4 tier). Anthropic opus/sonnet/haiku rates confirmed unchanged. Older/unused models (gpt-4o, o1, o3, grok-3) not all re-verified. 2026-07-02: added claude-fable-5 as the optional reasoning-upgrade model (used only for the lead reasoning seat when the operator bumps a heavy task). 2026-07-04: set claude-fable-5 to its real pay-as-you-go API price effective 2026-07-07 \u2014 $10/M input ($0.01/1k), $50/M output ($0.05/1k), cached at 10% of input ($0.001/1k). Dropped the estimated flag. Note: Fable 5 is cheaper than opus-4-8 on both input and output. 2026-07-09: Google retired gemini-2.5-pro AND gemini-3-pro-preview (both now 404 'no longer available'). Moved the Gemini default to gemini-3.1-pro-preview ($2/M in, $12/M out, cache $0.20/M \u2014 the newest working pro; note it's a preview and may need another bump) and added gemini-3.5-flash ($1.50/M in, $9/M out, cache $0.15/M \u2014 GA) to the low/cheap tier. Removed the dead gemini-2.5-pro rate. IMPORTANT: gemini-3.x are heavy thinking models \u2014 thoughtsTokenCount (billed as output) is now folded into completion_tokens in the adapter, so cost reflects reasoning tokens. 2026-07-13: bumped the default OpenAI model to gpt-5.5 ($5/M in, $30/M out, cached $0.50/M \u2014 verified live). Note gpt-5.5 is markedly pricier than gpt-5 ($1.25/$10): ~4x input, 3x output. Kept gpt-5 in the table for cost lookups on pinned installs. 2026-07-16: added gpt-5.6 at the Sol (flagship) tier \u2014 $5/M in, $30/M out, cached $0.50/M (cache-write $6.25/M not modeled). gpt-5.6 is the second premium voice for the max-reasoning co-reasoner (runs alongside claude-fable-5 when an OpenAI key is set). Terra/Luna tiers not added (unused). 2026-07-17: added Moonshot AI (Kimi) provider with kimi-k3, base URL https://api.moonshot.ai/v1. Confirmed real rates \u2014 $3.00/M input (cache miss, $0.003/1k), $15.00/M output ($0.015/1k), $0.30/M cache-hit input ($0.0003/1k); 1M-token context. Kimi K3 is reasoning-class (temperature must be 1; uses max_completion_tokens). 2026-07-24: added claude-opus-5 ($5/M in, $25/M out, cached $0.50/M -- 10% of input, matching this table's existing cache-discount ratio) and made it the default anthropic model (was claude-opus-4-8). Fable 5 remains the reasoning-upgrade/super-mode target, unchanged."
|
|
47
|
+
updated_at: "2026-08-04",
|
|
48
|
+
notes: "Prices reflect public list pricing per provider. cached_per_1k applies to prompt tokens served from prompt-cache (Anthropic) or input-cache (OpenAI) when supported. Update when providers change rates. Missing models fall back to cost=0 with estimated=true. 2026-06-07: removed decommissioned gemini-2.0-flash / gemini-2.0-flash-lite (Google returns 404) and replaced the low-tier lite model with gemini-2.5-flash-lite. 2026-06-08: bumped the default Anthropic model to claude-opus-4-8. Kept gemini-2.5-pro as the Gemini default (gemini-3.1-pro-preview measured ~2.2x the cost at $2/$12 per M \u2014 output-token dominated by ~1.5k thinking tokens \u2014 so not worth it for a 1-of-4 panel voice). 2026-06-09: corrected rates verified against live provider pricing pages \u2014 gemini-2.5-pro output $5->$10/M; gemini-2.5-flash $0.15/$0.60 -> $0.30/$2.50; gpt-5 $5/$15 -> $1.25/$10 (cached $0.125); grok-4-latest input $5->$3/M (legacy grok-4 tier). Anthropic opus/sonnet/haiku rates confirmed unchanged. Older/unused models (gpt-4o, o1, o3, grok-3) not all re-verified. 2026-07-02: added claude-fable-5 as the optional reasoning-upgrade model (used only for the lead reasoning seat when the operator bumps a heavy task). 2026-07-04: set claude-fable-5 to its real pay-as-you-go API price effective 2026-07-07 \u2014 $10/M input ($0.01/1k), $50/M output ($0.05/1k), cached at 10% of input ($0.001/1k). Dropped the estimated flag. Note: Fable 5 is cheaper than opus-4-8 on both input and output. 2026-07-09: Google retired gemini-2.5-pro AND gemini-3-pro-preview (both now 404 'no longer available'). Moved the Gemini default to gemini-3.1-pro-preview ($2/M in, $12/M out, cache $0.20/M \u2014 the newest working pro; note it's a preview and may need another bump) and added gemini-3.5-flash ($1.50/M in, $9/M out, cache $0.15/M \u2014 GA) to the low/cheap tier. Removed the dead gemini-2.5-pro rate. IMPORTANT: gemini-3.x are heavy thinking models \u2014 thoughtsTokenCount (billed as output) is now folded into completion_tokens in the adapter, so cost reflects reasoning tokens. 2026-07-13: bumped the default OpenAI model to gpt-5.5 ($5/M in, $30/M out, cached $0.50/M \u2014 verified live). Note gpt-5.5 is markedly pricier than gpt-5 ($1.25/$10): ~4x input, 3x output. Kept gpt-5 in the table for cost lookups on pinned installs. 2026-07-16: added gpt-5.6 at the Sol (flagship) tier \u2014 $5/M in, $30/M out, cached $0.50/M (cache-write $6.25/M not modeled). gpt-5.6 is the second premium voice for the max-reasoning co-reasoner (runs alongside claude-fable-5 when an OpenAI key is set). Terra/Luna tiers not added (unused). 2026-07-17: added Moonshot AI (Kimi) provider with kimi-k3, base URL https://api.moonshot.ai/v1. Confirmed real rates \u2014 $3.00/M input (cache miss, $0.003/1k), $15.00/M output ($0.015/1k), $0.30/M cache-hit input ($0.0003/1k); 1M-token context. Kimi K3 is reasoning-class (temperature must be 1; uses max_completion_tokens). 2026-07-24: added claude-opus-5 ($5/M in, $25/M out, cached $0.50/M -- 10% of input, matching this table's existing cache-discount ratio) and made it the default anthropic model (was claude-opus-4-8). Fable 5 remains the reasoning-upgrade/super-mode target, unchanged. 2026-08-04: added Alibaba Cloud Qwen provider (OpenAI-compatible, DashScope international endpoint https://dashscope-intl.aliyuncs.com/compatible-mode/v1) with default model qwen3.8-max -- confirmed business pricing $2.00/M input ($0.002/1k), $6.00/M output ($0.006/1k), cache estimated at 10% of input ($0.0002/1k, not independently confirmed). Also added qwen3.7-max as a fallback tier at $1.25/M in ($0.00125/1k) / $3.75/M out ($0.00375/1k). Note: the model string initially configured (qwen-v3.8 / qwen-v3.7) does not exist on DashScope and 404s -- live-probed the real key against qwen3.8-max, qwen3.7-max, qwen3-max, qwen-max, and qwen-plus, all of which work; corrected the default and pricing keys to qwen3.8-max/qwen3.7-max and fixed QWEN_MODEL in both .env files to match. Qwen's Max tier is a standard instruct model, not reasoning-class -- normal temperature/max_tokens handling."
|
|
49
49
|
},
|
|
50
50
|
anthropic: {
|
|
51
51
|
"claude-opus-4-5": {
|
|
@@ -233,6 +233,18 @@ var pricing_default = {
|
|
|
233
233
|
cached_per_1k: 3e-4
|
|
234
234
|
}
|
|
235
235
|
},
|
|
236
|
+
qwen: {
|
|
237
|
+
"qwen3.8-max": {
|
|
238
|
+
prompt_per_1k: 2e-3,
|
|
239
|
+
completion_per_1k: 6e-3,
|
|
240
|
+
cached_per_1k: 2e-4
|
|
241
|
+
},
|
|
242
|
+
"qwen3.7-max": {
|
|
243
|
+
prompt_per_1k: 125e-5,
|
|
244
|
+
completion_per_1k: 375e-5,
|
|
245
|
+
cached_per_1k: 125e-6
|
|
246
|
+
}
|
|
247
|
+
},
|
|
236
248
|
_tiers: {
|
|
237
249
|
low: {
|
|
238
250
|
description: "Cheap, fast models for simple subtasks (extraction, formatting, short summaries).",
|
|
@@ -430,7 +442,11 @@ var PROVIDER_CAPS = {
|
|
|
430
442
|
system_role: "separate",
|
|
431
443
|
supports_temperature: true,
|
|
432
444
|
reasoning_prefixes: ["gemini-3.1-pro", "gemini-3.5-flash", "gemini-2.5-pro"]
|
|
433
|
-
}
|
|
445
|
+
},
|
|
446
|
+
// Qwen's "Max" tier (qwen-v3.8, qwen-v3.7) is a standard instruct/chat
|
|
447
|
+
// model, not a visible-reasoning model like QwQ — normal temperature and
|
|
448
|
+
// max_tokens handling, same as xai/mistral/groq/deepseek.
|
|
449
|
+
qwen: { family: "openai_chat", system_role: "inline", supports_temperature: true }
|
|
434
450
|
};
|
|
435
451
|
function isReasoningModel(provider, model) {
|
|
436
452
|
const caps = PROVIDER_CAPS[provider];
|
|
@@ -1001,7 +1017,12 @@ var OPENAI_COMPAT_DEFAULT_URLS = {
|
|
|
1001
1017
|
groq: "https://api.groq.com/openai/v1/chat/completions",
|
|
1002
1018
|
deepseek: "https://api.deepseek.com/v1/chat/completions",
|
|
1003
1019
|
// Moonshot AI (Kimi). OpenAI-compatible chat completions endpoint.
|
|
1004
|
-
kimi: "https://api.moonshot.ai/v1/chat/completions"
|
|
1020
|
+
kimi: "https://api.moonshot.ai/v1/chat/completions",
|
|
1021
|
+
// Alibaba Cloud DashScope (Qwen). International endpoint — the mainland
|
|
1022
|
+
// China endpoint (dashscope.aliyuncs.com) 403s/404s from outside China in
|
|
1023
|
+
// a way that can look like a bad key; this is the deliberate default for
|
|
1024
|
+
// a US-based deployment.
|
|
1025
|
+
qwen: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions"
|
|
1005
1026
|
};
|
|
1006
1027
|
var OPENAI_COMPAT_NATIVE_STRUCTURED = /* @__PURE__ */ new Set([
|
|
1007
1028
|
"openai"
|
|
@@ -1170,7 +1191,8 @@ var DEFAULT_MODELS = {
|
|
|
1170
1191
|
groq: "llama-3.3-70b-versatile",
|
|
1171
1192
|
deepseek: "deepseek-chat",
|
|
1172
1193
|
gemini: "gemini-3.1-pro-preview",
|
|
1173
|
-
kimi: "kimi-k3"
|
|
1194
|
+
kimi: "kimi-k3",
|
|
1195
|
+
qwen: "qwen3.8-max"
|
|
1174
1196
|
};
|
|
1175
1197
|
function buildProviders(opts) {
|
|
1176
1198
|
const out = {};
|
|
@@ -1185,7 +1207,8 @@ function buildProviders(opts) {
|
|
|
1185
1207
|
{ name: "mistral", keyEnv: "MISTRAL_API_KEY", modelEnv: "MISTRAL_MODEL", defaultModel: DEFAULT_MODELS["mistral"] },
|
|
1186
1208
|
{ name: "groq", keyEnv: "GROQ_API_KEY", modelEnv: "GROQ_MODEL", defaultModel: DEFAULT_MODELS["groq"] },
|
|
1187
1209
|
{ name: "deepseek", keyEnv: "DEEPSEEK_API_KEY", modelEnv: "DEEPSEEK_MODEL", defaultModel: DEFAULT_MODELS["deepseek"] },
|
|
1188
|
-
{ name: "kimi", keyEnv: "KIMI_API_KEY", modelEnv: "KIMI_MODEL", defaultModel: DEFAULT_MODELS["kimi"] }
|
|
1210
|
+
{ name: "kimi", keyEnv: "KIMI_API_KEY", modelEnv: "KIMI_MODEL", defaultModel: DEFAULT_MODELS["kimi"] },
|
|
1211
|
+
{ name: "qwen", keyEnv: "QWEN_API_KEY", modelEnv: "QWEN_MODEL", defaultModel: DEFAULT_MODELS["qwen"] }
|
|
1189
1212
|
];
|
|
1190
1213
|
for (const s of openAiCompatSpec) {
|
|
1191
1214
|
const apiKey = opts.env[s.keyEnv];
|
|
@@ -1257,7 +1280,7 @@ var import_zod = require("zod");
|
|
|
1257
1280
|
|
|
1258
1281
|
// src/server-meta.ts
|
|
1259
1282
|
var SERVER_NAME = "crosscheck-agent";
|
|
1260
|
-
var SERVER_VERSION = true ? "0.2.
|
|
1283
|
+
var SERVER_VERSION = true ? "0.2.12" : "0.0.0-dev";
|
|
1261
1284
|
|
|
1262
1285
|
// src/tools/audit.ts
|
|
1263
1286
|
var import_node_fs4 = require("fs");
|
|
@@ -4106,7 +4129,9 @@ var SUPER_MODELS = {
|
|
|
4106
4129
|
// already the default — no-op retarget
|
|
4107
4130
|
gemini: DEFAULT_MODELS["gemini"],
|
|
4108
4131
|
// already the default — no-op retarget
|
|
4109
|
-
kimi: DEFAULT_MODELS["kimi"]
|
|
4132
|
+
kimi: DEFAULT_MODELS["kimi"],
|
|
4133
|
+
// already the default — no-op retarget
|
|
4134
|
+
qwen: DEFAULT_MODELS["qwen"]
|
|
4110
4135
|
// already the default — no-op retarget
|
|
4111
4136
|
};
|
|
4112
4137
|
var SUPER_PROVIDER_NAMES = Object.keys(SUPER_MODELS);
|
|
@@ -9892,7 +9917,8 @@ var KNOWN_PROVIDERS6 = [
|
|
|
9892
9917
|
"mistral",
|
|
9893
9918
|
"groq",
|
|
9894
9919
|
"deepseek",
|
|
9895
|
-
"kimi"
|
|
9920
|
+
"kimi",
|
|
9921
|
+
"qwen"
|
|
9896
9922
|
];
|
|
9897
9923
|
var USAGE_HINT = "Pass a 'providers' array to confer/debate/plan/review to pick an ad-hoc subset, e.g. providers=['openai','gemini']. Omit the field to use the configured active set.";
|
|
9898
9924
|
function runListProviders(args, opts) {
|
|
@@ -11464,7 +11490,7 @@ var CHECK_INTERVAL_SECONDS = 3 * 24 * 60 * 60;
|
|
|
11464
11490
|
var DEFAULT_PACKAGE = "crosscheck-cli";
|
|
11465
11491
|
var FETCH_TIMEOUT_MS = 3e3;
|
|
11466
11492
|
function engineVersion() {
|
|
11467
|
-
return true ? "0.2.
|
|
11493
|
+
return true ? "0.2.12" : "0.0.0-dev";
|
|
11468
11494
|
}
|
|
11469
11495
|
function defaultUpdateCachePath() {
|
|
11470
11496
|
const base = process.env["CROSSCHECK_DATA_DIR"] || import_node_path12.default.join(import_node_os2.default.homedir() || import_node_os2.default.tmpdir(), ".crosscheck");
|
|
@@ -12288,8 +12314,24 @@ function registerCoreTools(opts = {}) {
|
|
|
12288
12314
|
o.repoRoot,
|
|
12289
12315
|
o.workerToolsCfg
|
|
12290
12316
|
),
|
|
12291
|
-
triangulateTool(
|
|
12292
|
-
|
|
12317
|
+
triangulateTool(
|
|
12318
|
+
o.providers ?? {},
|
|
12319
|
+
o.providerAllowlist ?? null,
|
|
12320
|
+
o.bridge,
|
|
12321
|
+
o.storage,
|
|
12322
|
+
o.circuitBreakers,
|
|
12323
|
+
o.transcriptsDir,
|
|
12324
|
+
o.repoRoot
|
|
12325
|
+
),
|
|
12326
|
+
planTool(
|
|
12327
|
+
o.providers ?? {},
|
|
12328
|
+
o.providerAllowlist ?? null,
|
|
12329
|
+
o.bridge,
|
|
12330
|
+
o.storage,
|
|
12331
|
+
o.circuitBreakers,
|
|
12332
|
+
o.transcriptsDir,
|
|
12333
|
+
o.repoRoot
|
|
12334
|
+
),
|
|
12293
12335
|
critiqueTool(
|
|
12294
12336
|
o.providers ?? {},
|
|
12295
12337
|
o.providerAllowlist ?? null,
|
|
@@ -12299,7 +12341,15 @@ function registerCoreTools(opts = {}) {
|
|
|
12299
12341
|
o.transcriptsDir,
|
|
12300
12342
|
o.repoRoot
|
|
12301
12343
|
),
|
|
12302
|
-
reviewTool(
|
|
12344
|
+
reviewTool(
|
|
12345
|
+
o.providers ?? {},
|
|
12346
|
+
o.providerAllowlist ?? null,
|
|
12347
|
+
o.bridge,
|
|
12348
|
+
o.storage,
|
|
12349
|
+
o.circuitBreakers,
|
|
12350
|
+
o.transcriptsDir,
|
|
12351
|
+
o.repoRoot
|
|
12352
|
+
),
|
|
12303
12353
|
listProvidersTool(o.providers ?? {}, o.activeProviders ?? null, o.moderatorDefault ?? "anthropic"),
|
|
12304
12354
|
recallTool(o.storage, o.bridge),
|
|
12305
12355
|
sessionMemoryTool(o.storage, o.bridge),
|
|
@@ -12716,7 +12766,7 @@ function listProvidersTool(providers, activeProviders, moderatorDefault) {
|
|
|
12716
12766
|
})
|
|
12717
12767
|
};
|
|
12718
12768
|
}
|
|
12719
|
-
function reviewTool(providers, allowlist, bridge) {
|
|
12769
|
+
function reviewTool(providers, allowlist, bridge, storage, breakers, transcriptsDir, repoRoot) {
|
|
12720
12770
|
return {
|
|
12721
12771
|
name: "review",
|
|
12722
12772
|
description: "Have an LLM panel peer-review a code or proposal snippet. Returns the confer envelope (one answer per provider).",
|
|
@@ -12735,7 +12785,11 @@ function reviewTool(providers, allowlist, bridge) {
|
|
|
12735
12785
|
handler: (args) => runReview(args, {
|
|
12736
12786
|
providers,
|
|
12737
12787
|
allowlist,
|
|
12738
|
-
...bridge ? { bridge } : {}
|
|
12788
|
+
...bridge ? { bridge } : {},
|
|
12789
|
+
...storage ? { storage } : {},
|
|
12790
|
+
...breakers ? { breakers } : {},
|
|
12791
|
+
...transcriptsDir ? { transcriptsDir } : {},
|
|
12792
|
+
...repoRoot ? { repoRoot } : {}
|
|
12739
12793
|
})
|
|
12740
12794
|
};
|
|
12741
12795
|
}
|
|
@@ -12767,7 +12821,7 @@ function critiqueTool(providers, allowlist, bridge, storage, breakers, transcrip
|
|
|
12767
12821
|
})
|
|
12768
12822
|
};
|
|
12769
12823
|
}
|
|
12770
|
-
function planTool(providers, allowlist, bridge) {
|
|
12824
|
+
function planTool(providers, allowlist, bridge, storage, breakers, transcriptsDir, repoRoot) {
|
|
12771
12825
|
return {
|
|
12772
12826
|
name: "plan",
|
|
12773
12827
|
description: 'Have an LLM panel debate a step-by-step plan for the stated goal under the given constraints. Returns the debate envelope with a moderator-synthesised plan. Defaults to `mode: "fast"` (2 rounds + early_stop) \u2014 set `mode: "thorough"` for 5 rounds without early_stop. Explicit `max_rounds` / `early_stop` / `early_stop_threshold` always override the mode preset. Use `structured: true` for schema-validated synthesis.',
|
|
@@ -12794,11 +12848,15 @@ function planTool(providers, allowlist, bridge) {
|
|
|
12794
12848
|
handler: (args) => runPlan(args, {
|
|
12795
12849
|
providers,
|
|
12796
12850
|
allowlist,
|
|
12797
|
-
...bridge ? { bridge } : {}
|
|
12851
|
+
...bridge ? { bridge } : {},
|
|
12852
|
+
...storage ? { storage } : {},
|
|
12853
|
+
...breakers ? { breakers } : {},
|
|
12854
|
+
...transcriptsDir ? { transcriptsDir } : {},
|
|
12855
|
+
...repoRoot ? { repoRoot } : {}
|
|
12798
12856
|
})
|
|
12799
12857
|
};
|
|
12800
12858
|
}
|
|
12801
|
-
function triangulateTool(providers, allowlist, bridge) {
|
|
12859
|
+
function triangulateTool(providers, allowlist, bridge, storage, breakers, transcriptsDir, repoRoot) {
|
|
12802
12860
|
return {
|
|
12803
12861
|
name: "triangulate",
|
|
12804
12862
|
description: "Run a coordinate flow and reshape the output as a consensus + minority report with per-provider weights. v1 uses 1.0 weights (matches a fresh provider_stats DB); future versions thread real win-rate weights when the DB layer ports.",
|
|
@@ -12819,7 +12877,11 @@ function triangulateTool(providers, allowlist, bridge) {
|
|
|
12819
12877
|
handler: (args) => runTriangulate(args, {
|
|
12820
12878
|
providers,
|
|
12821
12879
|
allowlist,
|
|
12822
|
-
...bridge ? { bridge } : {}
|
|
12880
|
+
...bridge ? { bridge } : {},
|
|
12881
|
+
...storage ? { storage } : {},
|
|
12882
|
+
...breakers ? { breakers } : {},
|
|
12883
|
+
...transcriptsDir ? { transcriptsDir } : {},
|
|
12884
|
+
...repoRoot ? { repoRoot } : {}
|
|
12823
12885
|
})
|
|
12824
12886
|
};
|
|
12825
12887
|
}
|
|
@@ -13085,7 +13147,8 @@ var KEY_ENV = {
|
|
|
13085
13147
|
groq: "GROQ_API_KEY",
|
|
13086
13148
|
deepseek: "DEEPSEEK_API_KEY",
|
|
13087
13149
|
mistral: "MISTRAL_API_KEY",
|
|
13088
|
-
kimi: "KIMI_API_KEY"
|
|
13150
|
+
kimi: "KIMI_API_KEY",
|
|
13151
|
+
qwen: "QWEN_API_KEY"
|
|
13089
13152
|
};
|
|
13090
13153
|
function createCrosscheck(opts) {
|
|
13091
13154
|
const env = {};
|