crosscheck-mcp 0.2.26 → 0.2.27

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.
@@ -2094,7 +2094,7 @@ async function sendOpenAICompatible(args) {
2094
2094
  // src/providers/registry.ts
2095
2095
  var DEFAULT_MODELS = {
2096
2096
  anthropic: "claude-opus-5-5",
2097
- openai: "gpt-5.6-sol",
2097
+ openai: "gpt-6-sol",
2098
2098
  xai: "grok-4-latest",
2099
2099
  mistral: "mistral-large-latest",
2100
2100
  groq: "llama-3.3-70b-versatile",
@@ -2358,13 +2358,13 @@ Examples:
2358
2358
  This convention is opt-in: a user message without the \`xc\`/\`XC\` prefix should NOT be auto-routed here. Pick tools normally based on the conversation.
2359
2359
 
2360
2360
  Reasoning upgrade (Fable 5):
2361
- - The reasoning tools (plan, solve, debate, orchestrate, audit, triangulate) can bump their lead reasoning seat to Fable 5 \u2014 Anthropic's newest thinking model \u2014 instead of the default Opus 4.8. Only that one seat is upgraded; other panel seats stay on their normal models, so premium tokens are not wasted.
2361
+ - The reasoning tools (plan, solve, debate, orchestrate, audit, triangulate) can bump their lead reasoning seat to Fable 5 \u2014 Anthropic's newest thinking model \u2014 instead of the default Opus 5.5. Only that one seat is upgraded; other panel seats stay on their normal models, so premium tokens are not wasted.
2362
2362
  - When a tool result includes a "suggested_upgrade" block, the engine judged the task reasoning-heavy. Surface it: ask the user something like "This looks reasoning-heavy \u2014 bump the lead seat to Fable 5 (higher quality, higher cost)?" If they say yes, re-run the SAME tool with reasoning:"max" added. Do NOT upgrade silently.
2363
2363
  - If the user explicitly asks for the best/deepest reasoning up front, pass reasoning:"max" directly. A result with reasoning_upgrade.applied = true confirms Fable 5 was used.
2364
2364
 
2365
2365
  Super mode (confer / debate / plan / triangulate / list_providers only \u2014 internal team trial, do not mention this outside the team or write it into any docs/help text):
2366
2366
  - When the token immediately after the tool name is \`super\` (e.g. \`xc confer super what's the best caching strategy?\`), pass \`super: true\` in that tool's args and treat everything after \`super\` as the normal primary-argument text (same slot as usual \u2014 \`question\`/\`topic\`/\`goal\`). Example: \`xc confer super what's the best caching strategy?\` \u2192 \`mcp__crosscheck__confer({ question: "what's the best caching strategy?", super: true })\`.
2367
- - This swaps the panel to a fixed top-tier lineup (one flagship model per provider, restricted to providers the user actually has keys for) and triples the completion-token budget. For debate/plan/triangulate it also forces the Fable 5 + GPT-5.6 co-reasoner synthesis path automatically \u2014 no need to also pass reasoning:"max".
2367
+ - This swaps the panel to a fixed top-tier lineup (one flagship model per provider, restricted to providers the user actually has keys for) and triples the completion-token budget. For debate/plan/triangulate it also forces the Fable 5 + OpenAI co-reasoner synthesis path automatically \u2014 no need to also pass reasoning:"max".
2368
2368
  - A result with a "super_mode" block confirms it ran; show the panel it used.
2369
2369
  - \`xc list_providers super\` (no text after \`super\` \u2014 list_providers takes no other args) \u2192 \`mcp__crosscheck__list_providers({ super: true })\`. Shows the top-tier lineup and which of those models are actually available, instead of the normal default-model listing.
2370
2370
 
@@ -2381,7 +2381,7 @@ var import_zod = require("zod");
2381
2381
  // src/server-meta.ts
2382
2382
  init_cjs_shims();
2383
2383
  var SERVER_NAME = "crosscheck-agent";
2384
- var SERVER_VERSION = true ? "0.2.26" : "0.0.0-dev";
2384
+ var SERVER_VERSION = true ? "0.2.27" : "0.0.0-dev";
2385
2385
 
2386
2386
  // src/tools/audit.ts
2387
2387
  init_cjs_shims();
@@ -3984,13 +3984,25 @@ var import_node_perf_hooks = require("perf_hooks");
3984
3984
 
3985
3985
  // src/core/co-reason.ts
3986
3986
  init_cjs_shims();
3987
- var CO_REASON_MODEL = "gpt-5.6-sol";
3987
+ var CO_REASON_MODEL = "gpt-6-sol";
3988
+ var CO_REASON_ALTERNATE = "gpt-6-astra";
3989
+ var LABELS = {
3990
+ "gpt-6-sol": "GPT-6 Sol",
3991
+ "gpt-6-astra": "GPT-6 Astra",
3992
+ "gpt-5.6-sol": "GPT-5.6 Sol"
3993
+ };
3994
+ function coReasonLabel(model) {
3995
+ return LABELS[model] ?? model;
3996
+ }
3997
+ var CO_REASON_LABEL = coReasonLabel(CO_REASON_MODEL);
3988
3998
  var CO_REASON_PROVIDER = "openai";
3989
- var CO_REASON_LABEL = "GPT-5.6";
3990
- function pickCoReasoner(providers, upgradeRequested) {
3999
+ function pickCoReasoner(providers, upgradeRequested, openAiSeatModel) {
3991
4000
  if (!upgradeRequested) return null;
3992
4001
  const base = providers[CO_REASON_PROVIDER];
3993
- return base ? retargetProvider(base, CO_REASON_MODEL) : null;
4002
+ if (!base) return null;
4003
+ const seat = openAiSeatModel ?? base.model;
4004
+ const model = seat === CO_REASON_MODEL ? CO_REASON_ALTERNATE : CO_REASON_MODEL;
4005
+ return retargetProvider(base, model);
3994
4006
  }
3995
4007
  async function coReasonThenInject(opts) {
3996
4008
  const { provider, messages, maxTokens } = opts;
@@ -4221,7 +4233,7 @@ function buildSuggestedUpgrade(toolName, assessment) {
4221
4233
  model: UPGRADE_MODEL,
4222
4234
  label: UPGRADE_LABEL,
4223
4235
  reason: assessment.reason,
4224
- how: `re-run \`${toolName}\` with reasoning:"max" (or upgrade:true) to route the lead reasoning seat to ${UPGRADE_LABEL}, and \u2014 when an OpenAI key is configured \u2014 add a GPT-5.6 second-opinion pass that ${UPGRADE_LABEL} weighs before finalizing. Other panel seats stay on their normal models.`
4236
+ how: `re-run \`${toolName}\` with reasoning:"max" (or upgrade:true) to route the lead reasoning seat to ${UPGRADE_LABEL}, and \u2014 when an OpenAI key is configured \u2014 add an OpenAI second-opinion pass that ${UPGRADE_LABEL} weighs before finalizing (the result names which model ran). Other panel seats stay on their normal models.`
4225
4237
  };
4226
4238
  }
4227
4239
 
@@ -4524,8 +4536,9 @@ ${rubricText}`;
4524
4536
  const upgradeRequested = isUpgradeRequested(args);
4525
4537
  const upgraded = upgradeRequested && opts.providers["anthropic"] !== void 0;
4526
4538
  const auditorForCall = upgraded ? retargetProvider(opts.providers["anthropic"], UPGRADE_MODEL) : auditor;
4539
+ const coProvider = pickCoReasoner(opts.providers, upgradeRequested);
4527
4540
  const coReason = await coReasonThenInject({
4528
- provider: pickCoReasoner(opts.providers, upgradeRequested),
4541
+ provider: coProvider,
4529
4542
  messages: msgs,
4530
4543
  maxTokens: 2048,
4531
4544
  purpose: "audit-coreason"
@@ -4609,7 +4622,7 @@ ${rubricText}`;
4609
4622
  model: UPGRADE_MODEL,
4610
4623
  label: UPGRADE_LABEL,
4611
4624
  seat: "auditor",
4612
- ...coReasoned ? { co_reasoner: { model: CO_REASON_MODEL, label: CO_REASON_LABEL } } : {}
4625
+ ...coReasoned ? { co_reasoner: { model: coProvider.model, label: coReasonLabel(coProvider.model) } } : {}
4613
4626
  };
4614
4627
  } else if (upgradeRequested) {
4615
4628
  result["reasoning_upgrade"] = {
@@ -5348,8 +5361,12 @@ var SUPER_MODELS = {
5348
5361
  // Fable 5.1 verified present on the account; 5 as the fallback for accounts
5349
5362
  // that haven't been granted 5.1 yet.
5350
5363
  anthropic: ["claude-fable-5-1", UPGRADE_MODEL],
5351
- // Astra when it exists; gpt-5.6 until then. See the note above.
5352
- openai: ["gpt-6-astra", CO_REASON_MODEL],
5364
+ // Astra is live (verified against the account's model list 2026-09-23).
5365
+ // The fallback is named explicitly rather than reusing CO_REASON_MODEL:
5366
+ // that constant means "OpenAI's top reasoning model" for the max-reasoning
5367
+ // co-reasoner, which is a different question from "what should super fall
5368
+ // back to". Sharing the symbol silently coupled two unrelated decisions.
5369
+ openai: ["gpt-6-astra", "gpt-6-sol"],
5353
5370
  // Explicitly left as-is per product decision. Note grok-4-latest is not in
5354
5371
  // xAI's published model list, but it resolves in practice — real panel calls
5355
5372
  // on it succeeded as recently as 2026-08-30 — so it is an unlisted alias
@@ -8338,8 +8355,9 @@ ${recombineSys}` : recombineSys },
8338
8355
  provider: synthProvider.name
8339
8356
  } }
8340
8357
  );
8358
+ const coProvider = pickCoReasoner(opts.providers, upgradeRequested);
8341
8359
  const coReason = await coReasonThenInject({
8342
- provider: pickCoReasoner(opts.providers, upgradeRequested),
8360
+ provider: coProvider,
8343
8361
  messages: recMsgs,
8344
8362
  maxTokens,
8345
8363
  purpose: "orchestrate-coreason"
@@ -8398,7 +8416,7 @@ ${recombineSys}` : recombineSys },
8398
8416
  model: UPGRADE_MODEL,
8399
8417
  label: UPGRADE_LABEL,
8400
8418
  seat: "recombine/synthesis",
8401
- ...coReasoned ? { co_reasoner: { model: CO_REASON_MODEL, label: CO_REASON_LABEL } } : {}
8419
+ ...coReasoned ? { co_reasoner: { model: coProvider.model, label: coReasonLabel(coProvider.model) } } : {}
8402
8420
  };
8403
8421
  } else if (upgradeRequested) {
8404
8422
  result["reasoning_upgrade"] = {
@@ -9747,8 +9765,9 @@ CRITIQUES:
9747
9765
  ${critiqueBlock}`
9748
9766
  }
9749
9767
  ];
9768
+ const coProvider = pickCoReasoner(opts.providers, upgradeRequested);
9750
9769
  const coReason = await coReasonThenInject({
9751
- provider: pickCoReasoner(opts.providers, upgradeRequested),
9770
+ provider: coProvider,
9752
9771
  messages: synthMessages,
9753
9772
  maxTokens,
9754
9773
  purpose: "coordinate-coreason"
@@ -9812,7 +9831,7 @@ ${critiqueBlock}`
9812
9831
  model: superRequested ? superPrimary("anthropic") ?? UPGRADE_MODEL : UPGRADE_MODEL,
9813
9832
  label: UPGRADE_LABEL,
9814
9833
  seat: "synthesizer",
9815
- ...coReasonAns ? { co_reasoner: { model: CO_REASON_MODEL, label: CO_REASON_LABEL } } : {}
9834
+ ...coReasonAns ? { co_reasoner: { model: coProvider.model, label: coReasonLabel(coProvider.model) } } : {}
9816
9835
  };
9817
9836
  } else if (upgradeRequested) {
9818
9837
  result["reasoning_upgrade"] = {
@@ -10539,6 +10558,7 @@ ${prior.body}` });
10539
10558
  let synthesisErrors = [];
10540
10559
  let personaMeta = null;
10541
10560
  let coReasoned = false;
10561
+ let coReasonerModel = null;
10542
10562
  if (moderator) {
10543
10563
  const synthProvider = superRequested && opts.providers["anthropic"] ? retargetForSuper(opts.providers["anthropic"]) : upgraded ? retargetProvider(opts.providers["anthropic"], UPGRADE_MODEL) : moderator;
10544
10564
  const condensed = buildModeratorTranscript(transcript);
@@ -10566,13 +10586,16 @@ TRANSCRIPT:
10566
10586
  ${condensed}`
10567
10587
  }
10568
10588
  ];
10589
+ const openAiSeat = selected.find((p) => p.name === "openai")?.model;
10590
+ const coProvider = pickCoReasoner(opts.providers, upgradeRequested, openAiSeat);
10569
10591
  const coReason = await coReasonThenInject({
10570
- provider: pickCoReasoner(opts.providers, upgradeRequested),
10592
+ provider: coProvider,
10571
10593
  messages: synthMessages,
10572
10594
  maxTokens,
10573
10595
  purpose: "debate-coreason"
10574
10596
  });
10575
10597
  synthMessages = coReason.messages;
10598
+ coReasonerModel = coProvider?.model ?? null;
10576
10599
  if (coReason.answer) extraAnswers.push(coReason.answer);
10577
10600
  coReasoned = coReason.answer !== null;
10578
10601
  if (structuredOpt) {
@@ -10631,7 +10654,7 @@ ${condensed}`
10631
10654
  model: superRequested ? superPrimary("anthropic") ?? UPGRADE_MODEL : UPGRADE_MODEL,
10632
10655
  label: UPGRADE_LABEL,
10633
10656
  seat: "moderator synthesis",
10634
- ...coReasoned ? { co_reasoner: { model: CO_REASON_MODEL, label: CO_REASON_LABEL } } : {}
10657
+ ...coReasoned && coReasonerModel ? { co_reasoner: { model: coReasonerModel, label: coReasonLabel(coReasonerModel) } } : {}
10635
10658
  };
10636
10659
  } else if (upgradeRequested) {
10637
10660
  result["reasoning_upgrade"] = {
@@ -12667,7 +12690,7 @@ Re-emit the FULL solution. No commentary.`
12667
12690
  model: UPGRADE_MODEL,
12668
12691
  label: UPGRADE_LABEL,
12669
12692
  seat: "solver",
12670
- ...coReasoned ? { co_reasoner: { model: CO_REASON_MODEL, label: CO_REASON_LABEL } } : {}
12693
+ ...coReasoned ? { co_reasoner: { model: coProvider.model, label: coReasonLabel(coProvider.model) } } : {}
12671
12694
  };
12672
12695
  } else if (upgradeRequested) {
12673
12696
  result["reasoning_upgrade"] = {
@@ -12958,7 +12981,7 @@ var CHECK_INTERVAL_SECONDS = 3 * 24 * 60 * 60;
12958
12981
  var DEFAULT_PACKAGE = "crosscheck-cli";
12959
12982
  var FETCH_TIMEOUT_MS = 3e3;
12960
12983
  function engineVersion() {
12961
- return true ? "0.2.26" : "0.0.0-dev";
12984
+ return true ? "0.2.27" : "0.0.0-dev";
12962
12985
  }
12963
12986
  function defaultUpdateCachePath() {
12964
12987
  const base = process.env["CROSSCHECK_DATA_DIR"] || import_node_path13.default.join(import_node_os2.default.homedir() || import_node_os2.default.tmpdir(), ".crosscheck");