crosscheck-mcp 0.2.6 → 0.2.7

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.7" : "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
@@ -9996,6 +10084,7 @@ Return: (1) the plan as numbered steps, (2) risks, (3) alternatives considered.`
9996
10084
  if (args["reasoning"] !== void 0) debateArgs["reasoning"] = args["reasoning"];
9997
10085
  if (args["upgrade"] !== void 0) debateArgs["upgrade"] = args["upgrade"];
9998
10086
  if (args["model"] !== void 0) debateArgs["model"] = args["model"];
10087
+ if (args["super"] !== void 0) debateArgs["super"] = args["super"];
9999
10088
  const result = await runDebate(debateArgs, opts);
10000
10089
  if (result["suggested_upgrade"] && typeof result["suggested_upgrade"] === "object") {
10001
10090
  const su = result["suggested_upgrade"];
@@ -11138,7 +11227,7 @@ var CHECK_INTERVAL_SECONDS = 3 * 24 * 60 * 60;
11138
11227
  var DEFAULT_PACKAGE = "crosscheck-cli";
11139
11228
  var FETCH_TIMEOUT_MS = 3e3;
11140
11229
  function engineVersion() {
11141
- return true ? "0.2.6" : "0.0.0-dev";
11230
+ return true ? "0.2.7" : "0.0.0-dev";
11142
11231
  }
11143
11232
  function defaultUpdateCachePath() {
11144
11233
  const base = process.env["CROSSCHECK_DATA_DIR"] || path9.join(os.homedir() || os.tmpdir(), ".crosscheck");
@@ -11494,6 +11583,7 @@ async function runTriangulate(args, opts) {
11494
11583
  if (args["reasoning"] !== void 0) coordArgs["reasoning"] = args["reasoning"];
11495
11584
  if (args["upgrade"] !== void 0) coordArgs["upgrade"] = args["upgrade"];
11496
11585
  if (args["model"] !== void 0) coordArgs["model"] = args["model"];
11586
+ if (args["super"] !== void 0) coordArgs["super"] = args["super"];
11497
11587
  const coord = await runCoordinate(coordArgs, opts);
11498
11588
  if (typeof coord["error"] === "string") return coord;
11499
11589
  const synth = coord["synthesis_structured"] ?? {};
@@ -11544,7 +11634,8 @@ async function runTriangulate(args, opts) {
11544
11634
  "blocked_by_allowlist",
11545
11635
  "skipped_unknown_providers",
11546
11636
  "reasoning_upgrade",
11547
- "suggested_upgrade"
11637
+ "suggested_upgrade",
11638
+ "super_mode"
11548
11639
  ]) {
11549
11640
  if (k in coord) result[k] = coord[k];
11550
11641
  }
@@ -12456,7 +12547,8 @@ function planTool(providers, allowlist, bridge) {
12456
12547
  mode: { type: "string", enum: ["fast", "thorough"] },
12457
12548
  max_rounds: { type: "integer", minimum: 1 },
12458
12549
  early_stop: { type: "boolean" },
12459
- early_stop_threshold: { type: "number", minimum: 0, maximum: 1 }
12550
+ early_stop_threshold: { type: "number", minimum: 0, maximum: 1 },
12551
+ super: { type: "boolean" }
12460
12552
  },
12461
12553
  required: ["goal"]
12462
12554
  },
@@ -12480,7 +12572,8 @@ function triangulateTool(providers, allowlist, bridge) {
12480
12572
  context: { type: "string" },
12481
12573
  providers: { type: "array", items: { type: "string" } },
12482
12574
  session_id: { type: "string" },
12483
- untrusted_input: { type: "boolean" }
12575
+ untrusted_input: { type: "boolean" },
12576
+ super: { type: "boolean" }
12484
12577
  },
12485
12578
  required: ["question"]
12486
12579
  },
@@ -12548,7 +12641,8 @@ function debateTool(providers, allowlist, bridge, innerCallers, storage, pricing
12548
12641
  auto_panel: { type: "boolean" },
12549
12642
  auto_panel_n: { type: "integer" },
12550
12643
  inject_session_memory: { type: "boolean" },
12551
- worker_tools: { type: "array", items: { type: "string" } }
12644
+ worker_tools: { type: "array", items: { type: "string" } },
12645
+ super: { type: "boolean" }
12552
12646
  },
12553
12647
  required: ["topic"]
12554
12648
  },
@@ -12597,7 +12691,8 @@ function conferTool(providers, allowlist, bridge, moderator, pricing, storage, i
12597
12691
  inject_session_memory: { type: "boolean" },
12598
12692
  auto_panel: { type: "boolean" },
12599
12693
  auto_panel_n: { type: "integer" },
12600
- worker_tools: { type: "array", items: { type: "string" } }
12694
+ worker_tools: { type: "array", items: { type: "string" } },
12695
+ super: { type: "boolean" }
12601
12696
  },
12602
12697
  required: ["question"]
12603
12698
  },