crosscheck-mcp 0.2.6 → 0.2.8

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.
@@ -1006,7 +1006,7 @@ import { z } from "zod";
1006
1006
 
1007
1007
  // src/server-meta.ts
1008
1008
  var SERVER_NAME = "crosscheck-agent";
1009
- var SERVER_VERSION = true ? "0.2.6" : "0.0.0-dev";
1009
+ var SERVER_VERSION = true ? "0.2.8" : "0.0.0-dev";
1010
1010
 
1011
1011
  // src/tools/audit.ts
1012
1012
  import { readdirSync, readFileSync as readFileSync3, statSync } from "fs";
@@ -3845,6 +3845,33 @@ async function pickAutoPanel(storage, purpose, n, providers, allowlist) {
3845
3845
  return { providers: ranked.slice(0, Math.max(1, n)), coldStart: true };
3846
3846
  }
3847
3847
 
3848
+ // src/core/super-mode.ts
3849
+ var SUPER_MODELS = {
3850
+ anthropic: UPGRADE_MODEL,
3851
+ // "claude-fable-5"
3852
+ openai: CO_REASON_MODEL,
3853
+ // "gpt-5.6"
3854
+ xai: DEFAULT_MODELS["xai"],
3855
+ // already the default — no-op retarget
3856
+ gemini: DEFAULT_MODELS["gemini"],
3857
+ // already the default — no-op retarget
3858
+ kimi: DEFAULT_MODELS["kimi"]
3859
+ // already the default — no-op retarget
3860
+ };
3861
+ var SUPER_PROVIDER_NAMES = Object.keys(SUPER_MODELS);
3862
+ function isSuperRequested(args) {
3863
+ return args["super"] === true;
3864
+ }
3865
+ function retargetForSuper(p) {
3866
+ const model = SUPER_MODELS[p.name];
3867
+ return model ? retargetProvider(p, model) : p;
3868
+ }
3869
+ var SUPER_BUDGET_MULTIPLIER = 3;
3870
+ var SUPER_BUDGET_CEILING = 16e3;
3871
+ function superBudget(base) {
3872
+ return Math.min(base * SUPER_BUDGET_MULTIPLIER, SUPER_BUDGET_CEILING);
3873
+ }
3874
+
3848
3875
  // src/core/session-memory.ts
3849
3876
  var SESSION_MEMORY_DEFAULT_LIMIT = 50;
3850
3877
  var SESSION_MEMORY_INJECT_BUDGET_CHARS = 4e3;
@@ -4433,11 +4460,12 @@ async function runConfer(args, opts) {
4433
4460
  const question = typeof args["question"] === "string" ? args["question"] : String(args["question"] ?? "");
4434
4461
  const context = typeof args["context"] === "string" ? args["context"] : "";
4435
4462
  const autoPanel = Boolean(args["auto_panel"]);
4463
+ const superRequested = isSuperRequested(args);
4436
4464
  const callerProvidersRaw = args["providers"];
4437
4465
  const callerSuppliedProviders = Array.isArray(callerProvidersRaw) && callerProvidersRaw.length > 0;
4438
4466
  let resolvedProviders = callerProvidersRaw;
4439
4467
  let autoPanelMeta = null;
4440
- if (autoPanel && !callerSuppliedProviders && opts.storage) {
4468
+ if (autoPanel && !callerSuppliedProviders && !superRequested && opts.storage) {
4441
4469
  const autoNRaw = Number(args["auto_panel_n"]);
4442
4470
  const autoN = Number.isFinite(autoNRaw) && autoNRaw > 0 ? Math.trunc(autoNRaw) : AUTO_PANEL_DEFAULT_N;
4443
4471
  const picked = await pickAutoPanel(
@@ -4457,6 +4485,9 @@ async function runConfer(args, opts) {
4457
4485
  };
4458
4486
  }
4459
4487
  }
4488
+ if (superRequested && !callerSuppliedProviders) {
4489
+ resolvedProviders = SUPER_PROVIDER_NAMES;
4490
+ }
4460
4491
  let { selected, unknown: unknownNames, blocked } = resolveProviders(
4461
4492
  resolvedProviders,
4462
4493
  opts.providers,
@@ -4474,8 +4505,11 @@ async function runConfer(args, opts) {
4474
4505
  }
4475
4506
  return { tool: "confer", error: "no active providers have API keys in .env" };
4476
4507
  }
4508
+ if (superRequested) {
4509
+ selected = selected.map(retargetForSuper);
4510
+ }
4477
4511
  let cheapModePanelMeta = null;
4478
- if (opts.ctx?.cheap_mode === true && !callerSuppliedProviders && selected.length > 1) {
4512
+ if (opts.ctx?.cheap_mode === true && !callerSuppliedProviders && !superRequested && selected.length > 1) {
4479
4513
  if (!opts.pricing) {
4480
4514
  cheapModePanelMeta = {
4481
4515
  before: selected.length,
@@ -4552,7 +4586,7 @@ ${ctxBody}` });
4552
4586
  if (injectMem && opts.storage && sessionId) {
4553
4587
  await injectSessionMemoryInline(messages, opts.storage, sessionId);
4554
4588
  }
4555
- const maxTokens = opts.maxTokens ?? 4096;
4589
+ const maxTokens = superRequested ? superBudget(opts.maxTokens ?? 4096) : opts.maxTokens ?? 4096;
4556
4590
  const earlyStop = Boolean(args["early_stop"]);
4557
4591
  const earlyStopThresholdRaw = Number(args["early_stop_threshold"]);
4558
4592
  const earlyStopThreshold = Number.isFinite(earlyStopThresholdRaw) ? earlyStopThresholdRaw : 0.7;
@@ -4673,6 +4707,13 @@ ${ctxBody}` });
4673
4707
  }
4674
4708
  if (unknownNames.length > 0) result["skipped_unknown_providers"] = unknownNames;
4675
4709
  if (blocked.length > 0) result["blocked_by_allowlist"] = blocked;
4710
+ if (superRequested) {
4711
+ result["super_mode"] = {
4712
+ applied: true,
4713
+ panel: selected.map((p) => ({ provider: p.name, model: p.model })),
4714
+ max_tokens: maxTokens
4715
+ };
4716
+ }
4676
4717
  const allCallEnvelopes = [
4677
4718
  ...sanitized,
4678
4719
  ...extraAnswers.map((a) => a)
@@ -7927,6 +7968,7 @@ var ROLE_TURN_SCHEMA = {
7927
7968
  async function runCoordinate(args, opts) {
7928
7969
  const callStartedWall = performance8.now();
7929
7970
  const callStartedCpu = process.cpuUsage();
7971
+ const superRequested = isSuperRequested(args);
7930
7972
  const requestedWorkerTools = Array.isArray(args["worker_tools"]) ? args["worker_tools"].filter(
7931
7973
  (t) => typeof t === "string"
7932
7974
  ) : [];
@@ -7942,6 +7984,13 @@ async function runCoordinate(args, opts) {
7942
7984
  const workerToolsNeedsBridge = acceptedWorkerTools.length > 0 && !opts.innerCallers;
7943
7985
  const needsBridge = DEFERRED_OPTS3.some((k) => Boolean(args[k])) || workerToolsNeedsBridge;
7944
7986
  if (needsBridge) {
7987
+ if (superRequested) {
7988
+ return errorEnvelope7(
7989
+ "COORDINATE_SUPER_NOT_NATIVE",
7990
+ "super mode requested but worker_tools needs the Python bridge",
7991
+ "worker_tools without innerCallers wired defers to the Python bridge, which doesn't support super mode. Drop worker_tools, or wire innerCallers, to use super."
7992
+ );
7993
+ }
7945
7994
  if (opts.bridge && opts.bridge.toolNames.has("coordinate")) {
7946
7995
  return await deferCoordinate(args, opts.bridge);
7947
7996
  }
@@ -7955,8 +8004,11 @@ async function runCoordinate(args, opts) {
7955
8004
  const canary = untrusted ? mintCanary() : null;
7956
8005
  const topic = typeof args["topic"] === "string" ? args["topic"] : String(args["topic"] ?? "");
7957
8006
  const context = typeof args["context"] === "string" ? args["context"] : "";
8007
+ const callerProvidersRaw = args["providers"];
8008
+ const callerSuppliedProviders = Array.isArray(callerProvidersRaw) && callerProvidersRaw.length > 0;
8009
+ const resolvedProviders = superRequested && !callerSuppliedProviders ? SUPER_PROVIDER_NAMES : callerProvidersRaw;
7958
8010
  const { selected, unknown: unknownNames, blocked } = resolveProviders4(
7959
- args["providers"],
8011
+ resolvedProviders,
7960
8012
  opts.providers,
7961
8013
  opts.allowlist ?? null
7962
8014
  );
@@ -7983,9 +8035,10 @@ async function runCoordinate(args, opts) {
7983
8035
  const synthName = typeof args["synthesizer"] === "string" && args["synthesizer"] ? args["synthesizer"] : typeof args["moderator"] === "string" && args["moderator"] ? args["moderator"] : opts.moderator ?? "anthropic";
7984
8036
  const proposer = opts.providers[proposerName.toLowerCase()] ?? selected[0];
7985
8037
  const synth = opts.providers[synthName.toLowerCase()] ?? proposer;
7986
- const upgradeRequested = isUpgradeRequested(args);
8038
+ const proposerForCall = superRequested ? retargetForSuper(proposer) : proposer;
8039
+ const upgradeRequested = isUpgradeRequested(args) || superRequested;
7987
8040
  const upgraded = upgradeRequested && opts.providers["anthropic"] !== void 0;
7988
- const synthForCall = upgraded ? retargetProvider(opts.providers["anthropic"], UPGRADE_MODEL) : synth;
8041
+ const synthForCall = upgraded ? retargetProvider(opts.providers["anthropic"], UPGRADE_MODEL) : superRequested ? retargetForSuper(synth) : synth;
7989
8042
  let critics = [];
7990
8043
  if (Array.isArray(args["critics"])) {
7991
8044
  for (const n of args["critics"]) {
@@ -8008,7 +8061,10 @@ async function runCoordinate(args, opts) {
8008
8061
  available_now: Object.keys(opts.providers).sort()
8009
8062
  };
8010
8063
  }
8011
- const maxTokens = opts.maxTokens ?? 4096;
8064
+ if (superRequested) {
8065
+ critics = critics.map(retargetForSuper);
8066
+ }
8067
+ const maxTokens = superRequested ? superBudget(opts.maxTokens ?? 4096) : opts.maxTokens ?? 4096;
8012
8068
  let topicBlock = `TOPIC: ${topic}`;
8013
8069
  if (context) {
8014
8070
  const ctxBlock = untrusted ? wrapUntrusted(context, canary) : context;
@@ -8086,7 +8142,7 @@ ${UNTRUSTED_SYSTEM_NOTE}`;
8086
8142
  { role: "system", content: propSystem },
8087
8143
  { role: "user", content: topicBlock }
8088
8144
  ];
8089
- const propResult = await runRoleTurn(proposer, propMessages, ROLE_TURN_SCHEMA);
8145
+ const propResult = await runRoleTurn(proposerForCall, propMessages, ROLE_TURN_SCHEMA);
8090
8146
  const proposalObj = propResult.obj;
8091
8147
  const proposalAns = propResult.answer;
8092
8148
  const proposalRender = formatRoleTurn(
@@ -8210,6 +8266,17 @@ ${critiqueBlock}`
8210
8266
  result["suggested_upgrade"] = buildSuggestedUpgrade("coordinate", assessment);
8211
8267
  }
8212
8268
  }
8269
+ if (superRequested) {
8270
+ result["super_mode"] = {
8271
+ applied: true,
8272
+ panel: [
8273
+ { provider: proposerForCall.name, model: proposerForCall.model },
8274
+ ...critics.map((p) => ({ provider: p.name, model: p.model })),
8275
+ { provider: synthForCall.name, model: synthForCall.model }
8276
+ ],
8277
+ max_tokens: maxTokens
8278
+ };
8279
+ }
8213
8280
  const allCallEnvelopes = [
8214
8281
  scannedProposal,
8215
8282
  ...scannedCritiques,
@@ -8620,6 +8687,7 @@ var DEFERRED_OPTS4 = [
8620
8687
  async function runDebate(args, opts) {
8621
8688
  const callStartedWall = performance10.now();
8622
8689
  const callStartedCpu = process.cpuUsage();
8690
+ const superRequested = isSuperRequested(args);
8623
8691
  const extraAnswers = [];
8624
8692
  const requestedWorkerTools = Array.isArray(args["worker_tools"]) ? args["worker_tools"].filter(
8625
8693
  (t) => typeof t === "string"
@@ -8636,6 +8704,13 @@ async function runDebate(args, opts) {
8636
8704
  const workerToolsNeedsBridge = acceptedWorkerTools.length > 0 && !opts.innerCallers;
8637
8705
  const needsBridge = DEFERRED_OPTS4.some((k) => Boolean(args[k])) || workerToolsNeedsBridge;
8638
8706
  if (needsBridge) {
8707
+ if (superRequested) {
8708
+ return errorEnvelope9(
8709
+ "DEBATE_SUPER_NOT_NATIVE",
8710
+ "super mode requested but worker_tools needs the Python bridge",
8711
+ "worker_tools without innerCallers wired defers to the Python bridge, which doesn't support super mode. Drop worker_tools, or wire innerCallers, to use super."
8712
+ );
8713
+ }
8639
8714
  if (opts.bridge && opts.bridge.toolNames.has("debate")) {
8640
8715
  return await deferDebate(args, opts.bridge);
8641
8716
  }
@@ -8664,7 +8739,7 @@ async function runDebate(args, opts) {
8664
8739
  const callerSuppliedProviders = Array.isArray(callerProvidersRaw) && callerProvidersRaw.length > 0;
8665
8740
  let resolvedProviders = callerProvidersRaw;
8666
8741
  let autoPanelMeta = null;
8667
- if (autoPanel && !callerSuppliedProviders && opts.storage) {
8742
+ if (autoPanel && !callerSuppliedProviders && !superRequested && opts.storage) {
8668
8743
  const autoNRaw = Number(args["auto_panel_n"]);
8669
8744
  const autoN = Number.isFinite(autoNRaw) && autoNRaw > 0 ? Math.trunc(autoNRaw) : AUTO_PANEL_DEFAULT_N;
8670
8745
  const picked = await pickAutoPanel(
@@ -8684,7 +8759,10 @@ async function runDebate(args, opts) {
8684
8759
  };
8685
8760
  }
8686
8761
  }
8687
- const { selected, unknown: unknownNames, blocked } = resolveProviders6(
8762
+ if (superRequested && !callerSuppliedProviders) {
8763
+ resolvedProviders = SUPER_PROVIDER_NAMES;
8764
+ }
8765
+ let { selected, unknown: unknownNames, blocked } = resolveProviders6(
8688
8766
  resolvedProviders,
8689
8767
  opts.providers,
8690
8768
  opts.allowlist ?? null
@@ -8708,7 +8786,10 @@ async function runDebate(args, opts) {
8708
8786
  available_now: Object.keys(opts.providers).sort()
8709
8787
  };
8710
8788
  }
8711
- const maxTokens = opts.maxTokens ?? 4096;
8789
+ if (superRequested) {
8790
+ selected = selected.map(retargetForSuper);
8791
+ }
8792
+ const maxTokens = superRequested ? superBudget(opts.maxTokens ?? 4096) : opts.maxTokens ?? 4096;
8712
8793
  let memBlock = "";
8713
8794
  if (Boolean(args["inject_session_memory"]) && opts.storage && sessionId) {
8714
8795
  memBlock = await renderSessionMemoryBlock(opts.storage, sessionId);
@@ -8749,7 +8830,7 @@ async function runDebate(args, opts) {
8749
8830
  let agreementBlock = null;
8750
8831
  const moderatorName = typeof args["moderator"] === "string" && args["moderator"] ? args["moderator"] : opts.moderator ?? "anthropic";
8751
8832
  const moderator = opts.providers[moderatorName.toLowerCase()] ?? selected[0];
8752
- const upgradeRequested = isUpgradeRequested(args);
8833
+ const upgradeRequested = isUpgradeRequested(args) || superRequested;
8753
8834
  const upgraded = upgradeRequested && opts.providers["anthropic"] !== void 0;
8754
8835
  for (let rnd = 1; rnd <= maxRounds; rnd++) {
8755
8836
  const roundMessages = [
@@ -8820,7 +8901,7 @@ ${prior}` });
8820
8901
  let personaMeta = null;
8821
8902
  let coReasoned = false;
8822
8903
  if (moderator) {
8823
- const synthProvider = upgraded ? retargetProvider(opts.providers["anthropic"], UPGRADE_MODEL) : moderator;
8904
+ const synthProvider = upgraded ? retargetProvider(opts.providers["anthropic"], UPGRADE_MODEL) : superRequested ? retargetForSuper(moderator) : moderator;
8824
8905
  const condensed = transcript.map(
8825
8906
  (e) => `[${e.provider} \u2014 round ${e.round}]
8826
8907
  ${e.response ?? "(error)"}`
@@ -8955,6 +9036,13 @@ ${condensed}`
8955
9036
  }
8956
9037
  if (unknownNames.length > 0) result["skipped_unknown_providers"] = unknownNames;
8957
9038
  if (blocked.length > 0) result["blocked_by_allowlist"] = blocked;
9039
+ if (superRequested) {
9040
+ result["super_mode"] = {
9041
+ applied: true,
9042
+ panel: selected.map((p) => ({ provider: p.name, model: p.model })),
9043
+ max_tokens: maxTokens
9044
+ };
9045
+ }
8958
9046
  const allCallEnvelopes = [
8959
9047
  ...transcript,
8960
9048
  ...extraAnswers
@@ -9573,24 +9661,27 @@ var KNOWN_PROVIDERS6 = [
9573
9661
  "kimi"
9574
9662
  ];
9575
9663
  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.";
9576
- function runListProviders(_args, opts) {
9577
- void _args;
9664
+ function runListProviders(args, opts) {
9665
+ const superRequested = isSuperRequested(args);
9578
9666
  const active = new Set(opts.activeProviders ?? Object.keys(opts.providers));
9667
+ const names = superRequested ? SUPER_PROVIDER_NAMES : KNOWN_PROVIDERS6;
9579
9668
  const providers = [];
9580
- for (const name of KNOWN_PROVIDERS6) {
9669
+ for (const name of names) {
9581
9670
  const prov = opts.providers[name];
9582
9671
  providers.push({
9583
9672
  name,
9584
9673
  available: prov !== void 0,
9585
9674
  active: active.has(name),
9586
- model: prov ? prov.model : null
9675
+ model: superRequested ? SUPER_MODELS[name] : prov ? prov.model : null
9587
9676
  });
9588
9677
  }
9589
- return {
9678
+ const result = {
9590
9679
  providers,
9591
9680
  moderator_default: opts.moderatorDefault ?? "anthropic",
9592
9681
  usage_hint: USAGE_HINT
9593
9682
  };
9683
+ if (superRequested) result["super_mode"] = true;
9684
+ return result;
9594
9685
  }
9595
9686
 
9596
9687
  // src/tools/pick.ts
@@ -9996,6 +10087,7 @@ Return: (1) the plan as numbered steps, (2) risks, (3) alternatives considered.`
9996
10087
  if (args["reasoning"] !== void 0) debateArgs["reasoning"] = args["reasoning"];
9997
10088
  if (args["upgrade"] !== void 0) debateArgs["upgrade"] = args["upgrade"];
9998
10089
  if (args["model"] !== void 0) debateArgs["model"] = args["model"];
10090
+ if (args["super"] !== void 0) debateArgs["super"] = args["super"];
9999
10091
  const result = await runDebate(debateArgs, opts);
10000
10092
  if (result["suggested_upgrade"] && typeof result["suggested_upgrade"] === "object") {
10001
10093
  const su = result["suggested_upgrade"];
@@ -11138,7 +11230,7 @@ var CHECK_INTERVAL_SECONDS = 3 * 24 * 60 * 60;
11138
11230
  var DEFAULT_PACKAGE = "crosscheck-cli";
11139
11231
  var FETCH_TIMEOUT_MS = 3e3;
11140
11232
  function engineVersion() {
11141
- return true ? "0.2.6" : "0.0.0-dev";
11233
+ return true ? "0.2.8" : "0.0.0-dev";
11142
11234
  }
11143
11235
  function defaultUpdateCachePath() {
11144
11236
  const base = process.env["CROSSCHECK_DATA_DIR"] || path9.join(os.homedir() || os.tmpdir(), ".crosscheck");
@@ -11494,6 +11586,7 @@ async function runTriangulate(args, opts) {
11494
11586
  if (args["reasoning"] !== void 0) coordArgs["reasoning"] = args["reasoning"];
11495
11587
  if (args["upgrade"] !== void 0) coordArgs["upgrade"] = args["upgrade"];
11496
11588
  if (args["model"] !== void 0) coordArgs["model"] = args["model"];
11589
+ if (args["super"] !== void 0) coordArgs["super"] = args["super"];
11497
11590
  const coord = await runCoordinate(coordArgs, opts);
11498
11591
  if (typeof coord["error"] === "string") return coord;
11499
11592
  const synth = coord["synthesis_structured"] ?? {};
@@ -11544,7 +11637,8 @@ async function runTriangulate(args, opts) {
11544
11637
  "blocked_by_allowlist",
11545
11638
  "skipped_unknown_providers",
11546
11639
  "reasoning_upgrade",
11547
- "suggested_upgrade"
11640
+ "suggested_upgrade",
11641
+ "super_mode"
11548
11642
  ]) {
11549
11643
  if (k in coord) result[k] = coord[k];
11550
11644
  }
@@ -12377,7 +12471,9 @@ function listProvidersTool(providers, activeProviders, moderatorDefault) {
12377
12471
  inputSchema: {
12378
12472
  type: "object",
12379
12473
  additionalProperties: true,
12380
- properties: {}
12474
+ properties: {
12475
+ super: { type: "boolean" }
12476
+ }
12381
12477
  },
12382
12478
  handler: async (args) => runListProviders(args, {
12383
12479
  providers,
@@ -12456,7 +12552,8 @@ function planTool(providers, allowlist, bridge) {
12456
12552
  mode: { type: "string", enum: ["fast", "thorough"] },
12457
12553
  max_rounds: { type: "integer", minimum: 1 },
12458
12554
  early_stop: { type: "boolean" },
12459
- early_stop_threshold: { type: "number", minimum: 0, maximum: 1 }
12555
+ early_stop_threshold: { type: "number", minimum: 0, maximum: 1 },
12556
+ super: { type: "boolean" }
12460
12557
  },
12461
12558
  required: ["goal"]
12462
12559
  },
@@ -12480,7 +12577,8 @@ function triangulateTool(providers, allowlist, bridge) {
12480
12577
  context: { type: "string" },
12481
12578
  providers: { type: "array", items: { type: "string" } },
12482
12579
  session_id: { type: "string" },
12483
- untrusted_input: { type: "boolean" }
12580
+ untrusted_input: { type: "boolean" },
12581
+ super: { type: "boolean" }
12484
12582
  },
12485
12583
  required: ["question"]
12486
12584
  },
@@ -12548,7 +12646,8 @@ function debateTool(providers, allowlist, bridge, innerCallers, storage, pricing
12548
12646
  auto_panel: { type: "boolean" },
12549
12647
  auto_panel_n: { type: "integer" },
12550
12648
  inject_session_memory: { type: "boolean" },
12551
- worker_tools: { type: "array", items: { type: "string" } }
12649
+ worker_tools: { type: "array", items: { type: "string" } },
12650
+ super: { type: "boolean" }
12552
12651
  },
12553
12652
  required: ["topic"]
12554
12653
  },
@@ -12597,7 +12696,8 @@ function conferTool(providers, allowlist, bridge, moderator, pricing, storage, i
12597
12696
  inject_session_memory: { type: "boolean" },
12598
12697
  auto_panel: { type: "boolean" },
12599
12698
  auto_panel_n: { type: "integer" },
12600
- worker_tools: { type: "array", items: { type: "string" } }
12699
+ worker_tools: { type: "array", items: { type: "string" } },
12700
+ super: { type: "boolean" }
12601
12701
  },
12602
12702
  required: ["question"]
12603
12703
  },