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.
@@ -1039,7 +1039,7 @@ var import_zod = require("zod");
1039
1039
 
1040
1040
  // src/server-meta.ts
1041
1041
  var SERVER_NAME = "crosscheck-agent";
1042
- var SERVER_VERSION = true ? "0.2.6" : "0.0.0-dev";
1042
+ var SERVER_VERSION = true ? "0.2.8" : "0.0.0-dev";
1043
1043
 
1044
1044
  // src/tools/audit.ts
1045
1045
  var import_node_fs4 = require("fs");
@@ -3878,6 +3878,33 @@ async function pickAutoPanel(storage, purpose, n, providers, allowlist) {
3878
3878
  return { providers: ranked.slice(0, Math.max(1, n)), coldStart: true };
3879
3879
  }
3880
3880
 
3881
+ // src/core/super-mode.ts
3882
+ var SUPER_MODELS = {
3883
+ anthropic: UPGRADE_MODEL,
3884
+ // "claude-fable-5"
3885
+ openai: CO_REASON_MODEL,
3886
+ // "gpt-5.6"
3887
+ xai: DEFAULT_MODELS["xai"],
3888
+ // already the default — no-op retarget
3889
+ gemini: DEFAULT_MODELS["gemini"],
3890
+ // already the default — no-op retarget
3891
+ kimi: DEFAULT_MODELS["kimi"]
3892
+ // already the default — no-op retarget
3893
+ };
3894
+ var SUPER_PROVIDER_NAMES = Object.keys(SUPER_MODELS);
3895
+ function isSuperRequested(args) {
3896
+ return args["super"] === true;
3897
+ }
3898
+ function retargetForSuper(p) {
3899
+ const model = SUPER_MODELS[p.name];
3900
+ return model ? retargetProvider(p, model) : p;
3901
+ }
3902
+ var SUPER_BUDGET_MULTIPLIER = 3;
3903
+ var SUPER_BUDGET_CEILING = 16e3;
3904
+ function superBudget(base) {
3905
+ return Math.min(base * SUPER_BUDGET_MULTIPLIER, SUPER_BUDGET_CEILING);
3906
+ }
3907
+
3881
3908
  // src/core/session-memory.ts
3882
3909
  var SESSION_MEMORY_DEFAULT_LIMIT = 50;
3883
3910
  var SESSION_MEMORY_INJECT_BUDGET_CHARS = 4e3;
@@ -4466,11 +4493,12 @@ async function runConfer(args, opts) {
4466
4493
  const question = typeof args["question"] === "string" ? args["question"] : String(args["question"] ?? "");
4467
4494
  const context = typeof args["context"] === "string" ? args["context"] : "";
4468
4495
  const autoPanel = Boolean(args["auto_panel"]);
4496
+ const superRequested = isSuperRequested(args);
4469
4497
  const callerProvidersRaw = args["providers"];
4470
4498
  const callerSuppliedProviders = Array.isArray(callerProvidersRaw) && callerProvidersRaw.length > 0;
4471
4499
  let resolvedProviders = callerProvidersRaw;
4472
4500
  let autoPanelMeta = null;
4473
- if (autoPanel && !callerSuppliedProviders && opts.storage) {
4501
+ if (autoPanel && !callerSuppliedProviders && !superRequested && opts.storage) {
4474
4502
  const autoNRaw = Number(args["auto_panel_n"]);
4475
4503
  const autoN = Number.isFinite(autoNRaw) && autoNRaw > 0 ? Math.trunc(autoNRaw) : AUTO_PANEL_DEFAULT_N;
4476
4504
  const picked = await pickAutoPanel(
@@ -4490,6 +4518,9 @@ async function runConfer(args, opts) {
4490
4518
  };
4491
4519
  }
4492
4520
  }
4521
+ if (superRequested && !callerSuppliedProviders) {
4522
+ resolvedProviders = SUPER_PROVIDER_NAMES;
4523
+ }
4493
4524
  let { selected, unknown: unknownNames, blocked } = resolveProviders(
4494
4525
  resolvedProviders,
4495
4526
  opts.providers,
@@ -4507,8 +4538,11 @@ async function runConfer(args, opts) {
4507
4538
  }
4508
4539
  return { tool: "confer", error: "no active providers have API keys in .env" };
4509
4540
  }
4541
+ if (superRequested) {
4542
+ selected = selected.map(retargetForSuper);
4543
+ }
4510
4544
  let cheapModePanelMeta = null;
4511
- if (opts.ctx?.cheap_mode === true && !callerSuppliedProviders && selected.length > 1) {
4545
+ if (opts.ctx?.cheap_mode === true && !callerSuppliedProviders && !superRequested && selected.length > 1) {
4512
4546
  if (!opts.pricing) {
4513
4547
  cheapModePanelMeta = {
4514
4548
  before: selected.length,
@@ -4585,7 +4619,7 @@ ${ctxBody}` });
4585
4619
  if (injectMem && opts.storage && sessionId) {
4586
4620
  await injectSessionMemoryInline(messages, opts.storage, sessionId);
4587
4621
  }
4588
- const maxTokens = opts.maxTokens ?? 4096;
4622
+ const maxTokens = superRequested ? superBudget(opts.maxTokens ?? 4096) : opts.maxTokens ?? 4096;
4589
4623
  const earlyStop = Boolean(args["early_stop"]);
4590
4624
  const earlyStopThresholdRaw = Number(args["early_stop_threshold"]);
4591
4625
  const earlyStopThreshold = Number.isFinite(earlyStopThresholdRaw) ? earlyStopThresholdRaw : 0.7;
@@ -4706,6 +4740,13 @@ ${ctxBody}` });
4706
4740
  }
4707
4741
  if (unknownNames.length > 0) result["skipped_unknown_providers"] = unknownNames;
4708
4742
  if (blocked.length > 0) result["blocked_by_allowlist"] = blocked;
4743
+ if (superRequested) {
4744
+ result["super_mode"] = {
4745
+ applied: true,
4746
+ panel: selected.map((p) => ({ provider: p.name, model: p.model })),
4747
+ max_tokens: maxTokens
4748
+ };
4749
+ }
4709
4750
  const allCallEnvelopes = [
4710
4751
  ...sanitized,
4711
4752
  ...extraAnswers.map((a) => a)
@@ -7943,6 +7984,7 @@ var ROLE_TURN_SCHEMA = {
7943
7984
  async function runCoordinate(args, opts) {
7944
7985
  const callStartedWall = import_node_perf_hooks7.performance.now();
7945
7986
  const callStartedCpu = process.cpuUsage();
7987
+ const superRequested = isSuperRequested(args);
7946
7988
  const requestedWorkerTools = Array.isArray(args["worker_tools"]) ? args["worker_tools"].filter(
7947
7989
  (t) => typeof t === "string"
7948
7990
  ) : [];
@@ -7958,6 +8000,13 @@ async function runCoordinate(args, opts) {
7958
8000
  const workerToolsNeedsBridge = acceptedWorkerTools.length > 0 && !opts.innerCallers;
7959
8001
  const needsBridge = DEFERRED_OPTS3.some((k) => Boolean(args[k])) || workerToolsNeedsBridge;
7960
8002
  if (needsBridge) {
8003
+ if (superRequested) {
8004
+ return errorEnvelope7(
8005
+ "COORDINATE_SUPER_NOT_NATIVE",
8006
+ "super mode requested but worker_tools needs the Python bridge",
8007
+ "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."
8008
+ );
8009
+ }
7961
8010
  if (opts.bridge && opts.bridge.toolNames.has("coordinate")) {
7962
8011
  return await deferCoordinate(args, opts.bridge);
7963
8012
  }
@@ -7971,8 +8020,11 @@ async function runCoordinate(args, opts) {
7971
8020
  const canary = untrusted ? mintCanary() : null;
7972
8021
  const topic = typeof args["topic"] === "string" ? args["topic"] : String(args["topic"] ?? "");
7973
8022
  const context = typeof args["context"] === "string" ? args["context"] : "";
8023
+ const callerProvidersRaw = args["providers"];
8024
+ const callerSuppliedProviders = Array.isArray(callerProvidersRaw) && callerProvidersRaw.length > 0;
8025
+ const resolvedProviders = superRequested && !callerSuppliedProviders ? SUPER_PROVIDER_NAMES : callerProvidersRaw;
7974
8026
  const { selected, unknown: unknownNames, blocked } = resolveProviders4(
7975
- args["providers"],
8027
+ resolvedProviders,
7976
8028
  opts.providers,
7977
8029
  opts.allowlist ?? null
7978
8030
  );
@@ -7999,9 +8051,10 @@ async function runCoordinate(args, opts) {
7999
8051
  const synthName = typeof args["synthesizer"] === "string" && args["synthesizer"] ? args["synthesizer"] : typeof args["moderator"] === "string" && args["moderator"] ? args["moderator"] : opts.moderator ?? "anthropic";
8000
8052
  const proposer = opts.providers[proposerName.toLowerCase()] ?? selected[0];
8001
8053
  const synth = opts.providers[synthName.toLowerCase()] ?? proposer;
8002
- const upgradeRequested = isUpgradeRequested(args);
8054
+ const proposerForCall = superRequested ? retargetForSuper(proposer) : proposer;
8055
+ const upgradeRequested = isUpgradeRequested(args) || superRequested;
8003
8056
  const upgraded = upgradeRequested && opts.providers["anthropic"] !== void 0;
8004
- const synthForCall = upgraded ? retargetProvider(opts.providers["anthropic"], UPGRADE_MODEL) : synth;
8057
+ const synthForCall = upgraded ? retargetProvider(opts.providers["anthropic"], UPGRADE_MODEL) : superRequested ? retargetForSuper(synth) : synth;
8005
8058
  let critics = [];
8006
8059
  if (Array.isArray(args["critics"])) {
8007
8060
  for (const n of args["critics"]) {
@@ -8024,7 +8077,10 @@ async function runCoordinate(args, opts) {
8024
8077
  available_now: Object.keys(opts.providers).sort()
8025
8078
  };
8026
8079
  }
8027
- const maxTokens = opts.maxTokens ?? 4096;
8080
+ if (superRequested) {
8081
+ critics = critics.map(retargetForSuper);
8082
+ }
8083
+ const maxTokens = superRequested ? superBudget(opts.maxTokens ?? 4096) : opts.maxTokens ?? 4096;
8028
8084
  let topicBlock = `TOPIC: ${topic}`;
8029
8085
  if (context) {
8030
8086
  const ctxBlock = untrusted ? wrapUntrusted(context, canary) : context;
@@ -8102,7 +8158,7 @@ ${UNTRUSTED_SYSTEM_NOTE}`;
8102
8158
  { role: "system", content: propSystem },
8103
8159
  { role: "user", content: topicBlock }
8104
8160
  ];
8105
- const propResult = await runRoleTurn(proposer, propMessages, ROLE_TURN_SCHEMA);
8161
+ const propResult = await runRoleTurn(proposerForCall, propMessages, ROLE_TURN_SCHEMA);
8106
8162
  const proposalObj = propResult.obj;
8107
8163
  const proposalAns = propResult.answer;
8108
8164
  const proposalRender = formatRoleTurn(
@@ -8226,6 +8282,17 @@ ${critiqueBlock}`
8226
8282
  result["suggested_upgrade"] = buildSuggestedUpgrade("coordinate", assessment);
8227
8283
  }
8228
8284
  }
8285
+ if (superRequested) {
8286
+ result["super_mode"] = {
8287
+ applied: true,
8288
+ panel: [
8289
+ { provider: proposerForCall.name, model: proposerForCall.model },
8290
+ ...critics.map((p) => ({ provider: p.name, model: p.model })),
8291
+ { provider: synthForCall.name, model: synthForCall.model }
8292
+ ],
8293
+ max_tokens: maxTokens
8294
+ };
8295
+ }
8229
8296
  const allCallEnvelopes = [
8230
8297
  scannedProposal,
8231
8298
  ...scannedCritiques,
@@ -8636,6 +8703,7 @@ var DEFERRED_OPTS4 = [
8636
8703
  async function runDebate(args, opts) {
8637
8704
  const callStartedWall = import_node_perf_hooks9.performance.now();
8638
8705
  const callStartedCpu = process.cpuUsage();
8706
+ const superRequested = isSuperRequested(args);
8639
8707
  const extraAnswers = [];
8640
8708
  const requestedWorkerTools = Array.isArray(args["worker_tools"]) ? args["worker_tools"].filter(
8641
8709
  (t) => typeof t === "string"
@@ -8652,6 +8720,13 @@ async function runDebate(args, opts) {
8652
8720
  const workerToolsNeedsBridge = acceptedWorkerTools.length > 0 && !opts.innerCallers;
8653
8721
  const needsBridge = DEFERRED_OPTS4.some((k) => Boolean(args[k])) || workerToolsNeedsBridge;
8654
8722
  if (needsBridge) {
8723
+ if (superRequested) {
8724
+ return errorEnvelope9(
8725
+ "DEBATE_SUPER_NOT_NATIVE",
8726
+ "super mode requested but worker_tools needs the Python bridge",
8727
+ "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."
8728
+ );
8729
+ }
8655
8730
  if (opts.bridge && opts.bridge.toolNames.has("debate")) {
8656
8731
  return await deferDebate(args, opts.bridge);
8657
8732
  }
@@ -8680,7 +8755,7 @@ async function runDebate(args, opts) {
8680
8755
  const callerSuppliedProviders = Array.isArray(callerProvidersRaw) && callerProvidersRaw.length > 0;
8681
8756
  let resolvedProviders = callerProvidersRaw;
8682
8757
  let autoPanelMeta = null;
8683
- if (autoPanel && !callerSuppliedProviders && opts.storage) {
8758
+ if (autoPanel && !callerSuppliedProviders && !superRequested && opts.storage) {
8684
8759
  const autoNRaw = Number(args["auto_panel_n"]);
8685
8760
  const autoN = Number.isFinite(autoNRaw) && autoNRaw > 0 ? Math.trunc(autoNRaw) : AUTO_PANEL_DEFAULT_N;
8686
8761
  const picked = await pickAutoPanel(
@@ -8700,7 +8775,10 @@ async function runDebate(args, opts) {
8700
8775
  };
8701
8776
  }
8702
8777
  }
8703
- const { selected, unknown: unknownNames, blocked } = resolveProviders6(
8778
+ if (superRequested && !callerSuppliedProviders) {
8779
+ resolvedProviders = SUPER_PROVIDER_NAMES;
8780
+ }
8781
+ let { selected, unknown: unknownNames, blocked } = resolveProviders6(
8704
8782
  resolvedProviders,
8705
8783
  opts.providers,
8706
8784
  opts.allowlist ?? null
@@ -8724,7 +8802,10 @@ async function runDebate(args, opts) {
8724
8802
  available_now: Object.keys(opts.providers).sort()
8725
8803
  };
8726
8804
  }
8727
- const maxTokens = opts.maxTokens ?? 4096;
8805
+ if (superRequested) {
8806
+ selected = selected.map(retargetForSuper);
8807
+ }
8808
+ const maxTokens = superRequested ? superBudget(opts.maxTokens ?? 4096) : opts.maxTokens ?? 4096;
8728
8809
  let memBlock = "";
8729
8810
  if (Boolean(args["inject_session_memory"]) && opts.storage && sessionId) {
8730
8811
  memBlock = await renderSessionMemoryBlock(opts.storage, sessionId);
@@ -8765,7 +8846,7 @@ async function runDebate(args, opts) {
8765
8846
  let agreementBlock = null;
8766
8847
  const moderatorName = typeof args["moderator"] === "string" && args["moderator"] ? args["moderator"] : opts.moderator ?? "anthropic";
8767
8848
  const moderator = opts.providers[moderatorName.toLowerCase()] ?? selected[0];
8768
- const upgradeRequested = isUpgradeRequested(args);
8849
+ const upgradeRequested = isUpgradeRequested(args) || superRequested;
8769
8850
  const upgraded = upgradeRequested && opts.providers["anthropic"] !== void 0;
8770
8851
  for (let rnd = 1; rnd <= maxRounds; rnd++) {
8771
8852
  const roundMessages = [
@@ -8836,7 +8917,7 @@ ${prior}` });
8836
8917
  let personaMeta = null;
8837
8918
  let coReasoned = false;
8838
8919
  if (moderator) {
8839
- const synthProvider = upgraded ? retargetProvider(opts.providers["anthropic"], UPGRADE_MODEL) : moderator;
8920
+ const synthProvider = upgraded ? retargetProvider(opts.providers["anthropic"], UPGRADE_MODEL) : superRequested ? retargetForSuper(moderator) : moderator;
8840
8921
  const condensed = transcript.map(
8841
8922
  (e) => `[${e.provider} \u2014 round ${e.round}]
8842
8923
  ${e.response ?? "(error)"}`
@@ -8971,6 +9052,13 @@ ${condensed}`
8971
9052
  }
8972
9053
  if (unknownNames.length > 0) result["skipped_unknown_providers"] = unknownNames;
8973
9054
  if (blocked.length > 0) result["blocked_by_allowlist"] = blocked;
9055
+ if (superRequested) {
9056
+ result["super_mode"] = {
9057
+ applied: true,
9058
+ panel: selected.map((p) => ({ provider: p.name, model: p.model })),
9059
+ max_tokens: maxTokens
9060
+ };
9061
+ }
8974
9062
  const allCallEnvelopes = [
8975
9063
  ...transcript,
8976
9064
  ...extraAnswers
@@ -9589,24 +9677,27 @@ var KNOWN_PROVIDERS6 = [
9589
9677
  "kimi"
9590
9678
  ];
9591
9679
  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.";
9592
- function runListProviders(_args, opts) {
9593
- void _args;
9680
+ function runListProviders(args, opts) {
9681
+ const superRequested = isSuperRequested(args);
9594
9682
  const active = new Set(opts.activeProviders ?? Object.keys(opts.providers));
9683
+ const names = superRequested ? SUPER_PROVIDER_NAMES : KNOWN_PROVIDERS6;
9595
9684
  const providers = [];
9596
- for (const name of KNOWN_PROVIDERS6) {
9685
+ for (const name of names) {
9597
9686
  const prov = opts.providers[name];
9598
9687
  providers.push({
9599
9688
  name,
9600
9689
  available: prov !== void 0,
9601
9690
  active: active.has(name),
9602
- model: prov ? prov.model : null
9691
+ model: superRequested ? SUPER_MODELS[name] : prov ? prov.model : null
9603
9692
  });
9604
9693
  }
9605
- return {
9694
+ const result = {
9606
9695
  providers,
9607
9696
  moderator_default: opts.moderatorDefault ?? "anthropic",
9608
9697
  usage_hint: USAGE_HINT
9609
9698
  };
9699
+ if (superRequested) result["super_mode"] = true;
9700
+ return result;
9610
9701
  }
9611
9702
 
9612
9703
  // src/tools/pick.ts
@@ -10012,6 +10103,7 @@ Return: (1) the plan as numbered steps, (2) risks, (3) alternatives considered.`
10012
10103
  if (args["reasoning"] !== void 0) debateArgs["reasoning"] = args["reasoning"];
10013
10104
  if (args["upgrade"] !== void 0) debateArgs["upgrade"] = args["upgrade"];
10014
10105
  if (args["model"] !== void 0) debateArgs["model"] = args["model"];
10106
+ if (args["super"] !== void 0) debateArgs["super"] = args["super"];
10015
10107
  const result = await runDebate(debateArgs, opts);
10016
10108
  if (result["suggested_upgrade"] && typeof result["suggested_upgrade"] === "object") {
10017
10109
  const su = result["suggested_upgrade"];
@@ -11154,7 +11246,7 @@ var CHECK_INTERVAL_SECONDS = 3 * 24 * 60 * 60;
11154
11246
  var DEFAULT_PACKAGE = "crosscheck-cli";
11155
11247
  var FETCH_TIMEOUT_MS = 3e3;
11156
11248
  function engineVersion() {
11157
- return true ? "0.2.6" : "0.0.0-dev";
11249
+ return true ? "0.2.8" : "0.0.0-dev";
11158
11250
  }
11159
11251
  function defaultUpdateCachePath() {
11160
11252
  const base = process.env["CROSSCHECK_DATA_DIR"] || import_node_path12.default.join(import_node_os2.default.homedir() || import_node_os2.default.tmpdir(), ".crosscheck");
@@ -11510,6 +11602,7 @@ async function runTriangulate(args, opts) {
11510
11602
  if (args["reasoning"] !== void 0) coordArgs["reasoning"] = args["reasoning"];
11511
11603
  if (args["upgrade"] !== void 0) coordArgs["upgrade"] = args["upgrade"];
11512
11604
  if (args["model"] !== void 0) coordArgs["model"] = args["model"];
11605
+ if (args["super"] !== void 0) coordArgs["super"] = args["super"];
11513
11606
  const coord = await runCoordinate(coordArgs, opts);
11514
11607
  if (typeof coord["error"] === "string") return coord;
11515
11608
  const synth = coord["synthesis_structured"] ?? {};
@@ -11560,7 +11653,8 @@ async function runTriangulate(args, opts) {
11560
11653
  "blocked_by_allowlist",
11561
11654
  "skipped_unknown_providers",
11562
11655
  "reasoning_upgrade",
11563
- "suggested_upgrade"
11656
+ "suggested_upgrade",
11657
+ "super_mode"
11564
11658
  ]) {
11565
11659
  if (k in coord) result[k] = coord[k];
11566
11660
  }
@@ -12393,7 +12487,9 @@ function listProvidersTool(providers, activeProviders, moderatorDefault) {
12393
12487
  inputSchema: {
12394
12488
  type: "object",
12395
12489
  additionalProperties: true,
12396
- properties: {}
12490
+ properties: {
12491
+ super: { type: "boolean" }
12492
+ }
12397
12493
  },
12398
12494
  handler: async (args) => runListProviders(args, {
12399
12495
  providers,
@@ -12472,7 +12568,8 @@ function planTool(providers, allowlist, bridge) {
12472
12568
  mode: { type: "string", enum: ["fast", "thorough"] },
12473
12569
  max_rounds: { type: "integer", minimum: 1 },
12474
12570
  early_stop: { type: "boolean" },
12475
- early_stop_threshold: { type: "number", minimum: 0, maximum: 1 }
12571
+ early_stop_threshold: { type: "number", minimum: 0, maximum: 1 },
12572
+ super: { type: "boolean" }
12476
12573
  },
12477
12574
  required: ["goal"]
12478
12575
  },
@@ -12496,7 +12593,8 @@ function triangulateTool(providers, allowlist, bridge) {
12496
12593
  context: { type: "string" },
12497
12594
  providers: { type: "array", items: { type: "string" } },
12498
12595
  session_id: { type: "string" },
12499
- untrusted_input: { type: "boolean" }
12596
+ untrusted_input: { type: "boolean" },
12597
+ super: { type: "boolean" }
12500
12598
  },
12501
12599
  required: ["question"]
12502
12600
  },
@@ -12564,7 +12662,8 @@ function debateTool(providers, allowlist, bridge, innerCallers, storage, pricing
12564
12662
  auto_panel: { type: "boolean" },
12565
12663
  auto_panel_n: { type: "integer" },
12566
12664
  inject_session_memory: { type: "boolean" },
12567
- worker_tools: { type: "array", items: { type: "string" } }
12665
+ worker_tools: { type: "array", items: { type: "string" } },
12666
+ super: { type: "boolean" }
12568
12667
  },
12569
12668
  required: ["topic"]
12570
12669
  },
@@ -12613,7 +12712,8 @@ function conferTool(providers, allowlist, bridge, moderator, pricing, storage, i
12613
12712
  inject_session_memory: { type: "boolean" },
12614
12713
  auto_panel: { type: "boolean" },
12615
12714
  auto_panel_n: { type: "integer" },
12616
- worker_tools: { type: "array", items: { type: "string" } }
12715
+ worker_tools: { type: "array", items: { type: "string" } },
12716
+ super: { type: "boolean" }
12617
12717
  },
12618
12718
  required: ["question"]
12619
12719
  },