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.
@@ -77,10 +77,40 @@ var pricing_default = {
77
77
  }
78
78
  },
79
79
  openai: {
80
+ "gpt-6-astra": {
81
+ prompt_per_1k: 0.01,
82
+ completion_per_1k: 0.05,
83
+ cached_per_1k: 1e-3
84
+ },
85
+ "gpt-6-sol": {
86
+ prompt_per_1k: 2e-3,
87
+ completion_per_1k: 0.01,
88
+ cached_per_1k: 2e-4
89
+ },
90
+ "gpt-6-luna": {
91
+ prompt_per_1k: 1e-4,
92
+ completion_per_1k: 5e-4,
93
+ cached_per_1k: 1e-5
94
+ },
95
+ "gpt-5.6-sol": {
96
+ prompt_per_1k: 4e-3,
97
+ completion_per_1k: 0.02,
98
+ cached_per_1k: 4e-4
99
+ },
100
+ "gpt-5.6-terra": {
101
+ prompt_per_1k: 2e-3,
102
+ completion_per_1k: 0.012,
103
+ cached_per_1k: 2e-4
104
+ },
105
+ "gpt-5.6-luna": {
106
+ prompt_per_1k: 2e-4,
107
+ completion_per_1k: 12e-4,
108
+ cached_per_1k: 2e-5
109
+ },
80
110
  "gpt-5.6": {
81
- prompt_per_1k: 5e-3,
82
- completion_per_1k: 0.03,
83
- cached_per_1k: 5e-4
111
+ prompt_per_1k: 4e-3,
112
+ completion_per_1k: 0.02,
113
+ cached_per_1k: 4e-4
84
114
  },
85
115
  "gpt-5.5": {
86
116
  prompt_per_1k: 5e-3,
@@ -93,9 +123,14 @@ var pricing_default = {
93
123
  cached_per_1k: 125e-6
94
124
  },
95
125
  "gpt-5-mini": {
96
- prompt_per_1k: 5e-4,
97
- completion_per_1k: 15e-4,
98
- cached_per_1k: 25e-5
126
+ prompt_per_1k: 25e-5,
127
+ completion_per_1k: 2e-3,
128
+ cached_per_1k: 25e-6
129
+ },
130
+ "gpt-5-nano": {
131
+ prompt_per_1k: 5e-5,
132
+ completion_per_1k: 4e-4,
133
+ cached_per_1k: 5e-6
99
134
  },
100
135
  "gpt-4o": {
101
136
  prompt_per_1k: 25e-4,
@@ -118,19 +153,14 @@ var pricing_default = {
118
153
  cached_per_1k: 15e-4
119
154
  },
120
155
  o3: {
121
- prompt_per_1k: 0.01,
122
- completion_per_1k: 0.04,
123
- cached_per_1k: 5e-3
156
+ prompt_per_1k: 2e-3,
157
+ completion_per_1k: 8e-3,
158
+ cached_per_1k: 5e-4
124
159
  },
125
160
  "o3-mini": {
126
161
  prompt_per_1k: 11e-4,
127
162
  completion_per_1k: 44e-4,
128
163
  cached_per_1k: 55e-5
129
- },
130
- "gpt-6-astra": {
131
- prompt_per_1k: 0.01,
132
- completion_per_1k: 0.05,
133
- cached_per_1k: 1e-3
134
164
  }
135
165
  },
136
166
  xai: {
@@ -1299,7 +1329,7 @@ async function sendOpenAICompatible(args) {
1299
1329
  // src/providers/registry.ts
1300
1330
  var DEFAULT_MODELS = {
1301
1331
  anthropic: "claude-opus-5-5",
1302
- openai: "gpt-5.6-sol",
1332
+ openai: "gpt-6-sol",
1303
1333
  xai: "grok-4-latest",
1304
1334
  mistral: "mistral-large-latest",
1305
1335
  groq: "llama-3.3-70b-versatile",
@@ -1445,7 +1475,7 @@ import { z } from "zod";
1445
1475
 
1446
1476
  // src/server-meta.ts
1447
1477
  var SERVER_NAME = "crosscheck-agent";
1448
- var SERVER_VERSION = true ? "0.2.26" : "0.0.0-dev";
1478
+ var SERVER_VERSION = true ? "0.2.27" : "0.0.0-dev";
1449
1479
 
1450
1480
  // src/tools/audit.ts
1451
1481
  import { readdirSync, readFileSync as readFileSync3, statSync } from "fs";
@@ -3019,13 +3049,25 @@ function numberOrNull(v) {
3019
3049
  import { performance as performance2 } from "perf_hooks";
3020
3050
 
3021
3051
  // src/core/co-reason.ts
3022
- var CO_REASON_MODEL = "gpt-5.6-sol";
3052
+ var CO_REASON_MODEL = "gpt-6-sol";
3053
+ var CO_REASON_ALTERNATE = "gpt-6-astra";
3054
+ var LABELS = {
3055
+ "gpt-6-sol": "GPT-6 Sol",
3056
+ "gpt-6-astra": "GPT-6 Astra",
3057
+ "gpt-5.6-sol": "GPT-5.6 Sol"
3058
+ };
3059
+ function coReasonLabel(model) {
3060
+ return LABELS[model] ?? model;
3061
+ }
3062
+ var CO_REASON_LABEL = coReasonLabel(CO_REASON_MODEL);
3023
3063
  var CO_REASON_PROVIDER = "openai";
3024
- var CO_REASON_LABEL = "GPT-5.6";
3025
- function pickCoReasoner(providers, upgradeRequested) {
3064
+ function pickCoReasoner(providers, upgradeRequested, openAiSeatModel) {
3026
3065
  if (!upgradeRequested) return null;
3027
3066
  const base = providers[CO_REASON_PROVIDER];
3028
- return base ? retargetProvider(base, CO_REASON_MODEL) : null;
3067
+ if (!base) return null;
3068
+ const seat = openAiSeatModel ?? base.model;
3069
+ const model = seat === CO_REASON_MODEL ? CO_REASON_ALTERNATE : CO_REASON_MODEL;
3070
+ return retargetProvider(base, model);
3029
3071
  }
3030
3072
  async function coReasonThenInject(opts) {
3031
3073
  const { provider, messages, maxTokens } = opts;
@@ -3251,7 +3293,7 @@ function buildSuggestedUpgrade(toolName, assessment) {
3251
3293
  model: UPGRADE_MODEL,
3252
3294
  label: UPGRADE_LABEL,
3253
3295
  reason: assessment.reason,
3254
- 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.`
3296
+ 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.`
3255
3297
  };
3256
3298
  }
3257
3299
 
@@ -3554,8 +3596,9 @@ ${rubricText}`;
3554
3596
  const upgradeRequested = isUpgradeRequested(args);
3555
3597
  const upgraded = upgradeRequested && opts.providers["anthropic"] !== void 0;
3556
3598
  const auditorForCall = upgraded ? retargetProvider(opts.providers["anthropic"], UPGRADE_MODEL) : auditor;
3599
+ const coProvider = pickCoReasoner(opts.providers, upgradeRequested);
3557
3600
  const coReason = await coReasonThenInject({
3558
- provider: pickCoReasoner(opts.providers, upgradeRequested),
3601
+ provider: coProvider,
3559
3602
  messages: msgs,
3560
3603
  maxTokens: 2048,
3561
3604
  purpose: "audit-coreason"
@@ -3639,7 +3682,7 @@ ${rubricText}`;
3639
3682
  model: UPGRADE_MODEL,
3640
3683
  label: UPGRADE_LABEL,
3641
3684
  seat: "auditor",
3642
- ...coReasoned ? { co_reasoner: { model: CO_REASON_MODEL, label: CO_REASON_LABEL } } : {}
3685
+ ...coReasoned ? { co_reasoner: { model: coProvider.model, label: coReasonLabel(coProvider.model) } } : {}
3643
3686
  };
3644
3687
  } else if (upgradeRequested) {
3645
3688
  result["reasoning_upgrade"] = {
@@ -4370,8 +4413,12 @@ var SUPER_MODELS = {
4370
4413
  // Fable 5.1 verified present on the account; 5 as the fallback for accounts
4371
4414
  // that haven't been granted 5.1 yet.
4372
4415
  anthropic: ["claude-fable-5-1", UPGRADE_MODEL],
4373
- // Astra when it exists; gpt-5.6 until then. See the note above.
4374
- openai: ["gpt-6-astra", CO_REASON_MODEL],
4416
+ // Astra is live (verified against the account's model list 2026-09-23).
4417
+ // The fallback is named explicitly rather than reusing CO_REASON_MODEL:
4418
+ // that constant means "OpenAI's top reasoning model" for the max-reasoning
4419
+ // co-reasoner, which is a different question from "what should super fall
4420
+ // back to". Sharing the symbol silently coupled two unrelated decisions.
4421
+ openai: ["gpt-6-astra", "gpt-6-sol"],
4375
4422
  // Explicitly left as-is per product decision. Note grok-4-latest is not in
4376
4423
  // xAI's published model list, but it resolves in practice — real panel calls
4377
4424
  // on it succeeded as recently as 2026-08-30 — so it is an unlisted alias
@@ -7352,8 +7399,9 @@ ${recombineSys}` : recombineSys },
7352
7399
  provider: synthProvider.name
7353
7400
  } }
7354
7401
  );
7402
+ const coProvider = pickCoReasoner(opts.providers, upgradeRequested);
7355
7403
  const coReason = await coReasonThenInject({
7356
- provider: pickCoReasoner(opts.providers, upgradeRequested),
7404
+ provider: coProvider,
7357
7405
  messages: recMsgs,
7358
7406
  maxTokens,
7359
7407
  purpose: "orchestrate-coreason"
@@ -7412,7 +7460,7 @@ ${recombineSys}` : recombineSys },
7412
7460
  model: UPGRADE_MODEL,
7413
7461
  label: UPGRADE_LABEL,
7414
7462
  seat: "recombine/synthesis",
7415
- ...coReasoned ? { co_reasoner: { model: CO_REASON_MODEL, label: CO_REASON_LABEL } } : {}
7463
+ ...coReasoned ? { co_reasoner: { model: coProvider.model, label: coReasonLabel(coProvider.model) } } : {}
7416
7464
  };
7417
7465
  } else if (upgradeRequested) {
7418
7466
  result["reasoning_upgrade"] = {
@@ -8758,8 +8806,9 @@ CRITIQUES:
8758
8806
  ${critiqueBlock}`
8759
8807
  }
8760
8808
  ];
8809
+ const coProvider = pickCoReasoner(opts.providers, upgradeRequested);
8761
8810
  const coReason = await coReasonThenInject({
8762
- provider: pickCoReasoner(opts.providers, upgradeRequested),
8811
+ provider: coProvider,
8763
8812
  messages: synthMessages,
8764
8813
  maxTokens,
8765
8814
  purpose: "coordinate-coreason"
@@ -8823,7 +8872,7 @@ ${critiqueBlock}`
8823
8872
  model: superRequested ? superPrimary("anthropic") ?? UPGRADE_MODEL : UPGRADE_MODEL,
8824
8873
  label: UPGRADE_LABEL,
8825
8874
  seat: "synthesizer",
8826
- ...coReasonAns ? { co_reasoner: { model: CO_REASON_MODEL, label: CO_REASON_LABEL } } : {}
8875
+ ...coReasonAns ? { co_reasoner: { model: coProvider.model, label: coReasonLabel(coProvider.model) } } : {}
8827
8876
  };
8828
8877
  } else if (upgradeRequested) {
8829
8878
  result["reasoning_upgrade"] = {
@@ -9545,6 +9594,7 @@ ${prior.body}` });
9545
9594
  let synthesisErrors = [];
9546
9595
  let personaMeta = null;
9547
9596
  let coReasoned = false;
9597
+ let coReasonerModel = null;
9548
9598
  if (moderator) {
9549
9599
  const synthProvider = superRequested && opts.providers["anthropic"] ? retargetForSuper(opts.providers["anthropic"]) : upgraded ? retargetProvider(opts.providers["anthropic"], UPGRADE_MODEL) : moderator;
9550
9600
  const condensed = buildModeratorTranscript(transcript);
@@ -9572,13 +9622,16 @@ TRANSCRIPT:
9572
9622
  ${condensed}`
9573
9623
  }
9574
9624
  ];
9625
+ const openAiSeat = selected.find((p) => p.name === "openai")?.model;
9626
+ const coProvider = pickCoReasoner(opts.providers, upgradeRequested, openAiSeat);
9575
9627
  const coReason = await coReasonThenInject({
9576
- provider: pickCoReasoner(opts.providers, upgradeRequested),
9628
+ provider: coProvider,
9577
9629
  messages: synthMessages,
9578
9630
  maxTokens,
9579
9631
  purpose: "debate-coreason"
9580
9632
  });
9581
9633
  synthMessages = coReason.messages;
9634
+ coReasonerModel = coProvider?.model ?? null;
9582
9635
  if (coReason.answer) extraAnswers.push(coReason.answer);
9583
9636
  coReasoned = coReason.answer !== null;
9584
9637
  if (structuredOpt) {
@@ -9637,7 +9690,7 @@ ${condensed}`
9637
9690
  model: superRequested ? superPrimary("anthropic") ?? UPGRADE_MODEL : UPGRADE_MODEL,
9638
9691
  label: UPGRADE_LABEL,
9639
9692
  seat: "moderator synthesis",
9640
- ...coReasoned ? { co_reasoner: { model: CO_REASON_MODEL, label: CO_REASON_LABEL } } : {}
9693
+ ...coReasoned && coReasonerModel ? { co_reasoner: { model: coReasonerModel, label: coReasonLabel(coReasonerModel) } } : {}
9641
9694
  };
9642
9695
  } else if (upgradeRequested) {
9643
9696
  result["reasoning_upgrade"] = {
@@ -11661,7 +11714,7 @@ Re-emit the FULL solution. No commentary.`
11661
11714
  model: UPGRADE_MODEL,
11662
11715
  label: UPGRADE_LABEL,
11663
11716
  seat: "solver",
11664
- ...coReasoned ? { co_reasoner: { model: CO_REASON_MODEL, label: CO_REASON_LABEL } } : {}
11717
+ ...coReasoned ? { co_reasoner: { model: coProvider.model, label: coReasonLabel(coProvider.model) } } : {}
11665
11718
  };
11666
11719
  } else if (upgradeRequested) {
11667
11720
  result["reasoning_upgrade"] = {
@@ -11950,7 +12003,7 @@ var CHECK_INTERVAL_SECONDS = 3 * 24 * 60 * 60;
11950
12003
  var DEFAULT_PACKAGE = "crosscheck-cli";
11951
12004
  var FETCH_TIMEOUT_MS = 3e3;
11952
12005
  function engineVersion() {
11953
- return true ? "0.2.26" : "0.0.0-dev";
12006
+ return true ? "0.2.27" : "0.0.0-dev";
11954
12007
  }
11955
12008
  function defaultUpdateCachePath() {
11956
12009
  const base = process.env["CROSSCHECK_DATA_DIR"] || path9.join(os.homedir() || os.tmpdir(), ".crosscheck");