github-router 0.3.175 → 0.3.176

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.
@@ -1072,13 +1072,15 @@ function pickClaudeDefault(opusFamily = DEFAULT_OPUS_FAMILY) {
1072
1072
  return bareSlug;
1073
1073
  }
1074
1074
  /**
1075
- * Default model for `github-router codex`. `gpt-5.5` is the new flagship
1076
- * `/responses` model; the fallback chain handles older Copilot tiers where
1077
- * 5.5 hasn't rolled out yet. `resolveCodexModel` provides a final
1078
- * "best available `/responses` model" safety net beyond this list.
1075
+ * Default model for `github-router codex`. `gpt-5.6-sol` is the flagship
1076
+ * `/responses` model; the fallback chain (led by `gpt-5.5`) handles older
1077
+ * Copilot tiers or a rollout-lag window where sol hasn't appeared yet.
1078
+ * `resolveCodexModel` provides a final "best available `/responses` model"
1079
+ * safety net beyond this list.
1079
1080
  */
1080
- const DEFAULT_CODEX_MODEL = "gpt-5.5";
1081
+ const DEFAULT_CODEX_MODEL = "gpt-5.6-sol";
1081
1082
  const DEFAULT_CODEX_MODEL_FALLBACKS = [
1083
+ "gpt-5.5",
1082
1084
  "gpt-5.4",
1083
1085
  "gpt-5.3-codex",
1084
1086
  "gpt-5.2-codex"
@@ -6079,10 +6081,12 @@ const T0_MODEL_CHAIN = [
6079
6081
  const T1_MODEL_CHAIN = [
6080
6082
  "gpt-5.4-mini",
6081
6083
  "gpt-5-mini",
6084
+ "gpt-5.6-sol",
6082
6085
  "gpt-5.5",
6083
6086
  "gemini-3.1-pro-preview"
6084
6087
  ];
6085
6088
  const T2_MODEL_CHAIN = [
6089
+ "gpt-5.6-sol",
6086
6090
  "gpt-5.5",
6087
6091
  "claude-opus-4.8",
6088
6092
  "gemini-3.1-pro-preview"
@@ -6984,7 +6988,7 @@ async function observeUnit(unit) {
6984
6988
  * present — an explicitly-chosen model that Copilot can't serve THROWS rather
6985
6989
  * than being silently swapped for a fallback (a silent class-switch could send
6986
6990
  * the task to a weaker/wrong model the operator never asked for).
6987
- * - `chosen` unset: default to {@link DEFAULT_CODEX_MODEL} (gpt-5.5), walking
6991
+ * - `chosen` unset: default to {@link DEFAULT_CODEX_MODEL} (gpt-5.6-sol), walking
6988
6992
  * {@link DEFAULT_CODEX_MODEL_FALLBACKS} only when a catalog says the preferred
6989
6993
  * default is absent (older Copilot tiers).
6990
6994
  *
@@ -9324,7 +9328,7 @@ function buildRoleAgent(role) {
9324
9328
  "Verification commands and outcomes",
9325
9329
  "Risks and follow-ups"
9326
9330
  ],
9327
- model: "gpt-5.5"
9331
+ model: "gpt-5.6-sol"
9328
9332
  },
9329
9333
  reviewer: {
9330
9334
  description: "Adversarial code reviewer for concrete diffs; reports real findings with severity and file:line.",
@@ -9404,7 +9408,7 @@ function buildRoleAgent(role) {
9404
9408
  "Commands run and outcomes",
9405
9409
  "Failures that require implementation work"
9406
9410
  ],
9407
- model: "gpt-5.5"
9411
+ model: "gpt-5.6-sol"
9408
9412
  }
9409
9413
  }[role];
9410
9414
  const modelLine = spec.model === void 0 ? "" : `model: ${spec.model}\n`;
@@ -10469,7 +10473,7 @@ function createFirstMateTools(depsOverride = {}) {
10469
10473
  acceptance_criteria: stringProp("User-blessed acceptance criteria for the mission."),
10470
10474
  priority: numberProp("Optional numeric priority; higher values are handled by controller policy."),
10471
10475
  house_rules: stringProp("Optional repository or operator constraints."),
10472
- default_model: stringProp("Model the GitHub cloud coding agent uses for this mission's tasks; defaults to gpt-5.5."),
10476
+ default_model: stringProp("Model the GitHub cloud coding agent uses for this mission's tasks; defaults to gpt-5.6-sol."),
10473
10477
  plan_gate: enumProp(["hard", "soft"], "Plan-review gate. hard (default) requires the flow's review before build and re-plans on a rejecting review; soft auto-advances a passing plan review to build without human approval but escalates a rejecting review to a human."),
10474
10478
  ci_required: boolProp("When true, refuse merge approval if the repository reports no CI for the PR head.")
10475
10479
  }, [
@@ -23494,7 +23498,8 @@ async function countTokens(body, extraHeaders, callerSignal, retryTransient = fa
23494
23498
  *
23495
23499
  * Returns true iff Copilot's live catalog (`state.models?.data`) contains
23496
23500
  * ALL THREE peer models the consensus protocol needs:
23497
- * - `gpt-5.5` (codex_critic's model)
23501
+ * - an OpenAI frontier model (`gpt-5.6-sol`, else `gpt-5.5` — see
23502
+ * `resolveOpenAiFrontier`)
23498
23503
  * - `claude-opus-4-7` (opus_critic's model)
23499
23504
  * - any `gemini-3.X.*pro` (gemini_critic's model family — matches the
23500
23505
  * same regex `geminiAvailable()` uses, so the gate stays in sync if
@@ -23515,22 +23520,42 @@ function geminiAvailable(source = state) {
23515
23520
  if (!models) return false;
23516
23521
  return models.some((m) => /^gemini-3\..*pro/i.test(m.id));
23517
23522
  }
23523
+ /**
23524
+ * OpenAI frontier reasoning models in preference order. `gpt-5.6-sol` is the
23525
+ * current default; `gpt-5.5` is retained as a fallback. Both share the same
23526
+ * `pro_plus/business/enterprise/max` restriction tier, so the fallback only
23527
+ * matters during a rollout-lag window where the newer slug hasn't yet appeared
23528
+ * in the account's catalog.
23529
+ */
23530
+ const OPENAI_FRONTIER_MODELS = ["gpt-5.6-sol", "gpt-5.5"];
23531
+ /**
23532
+ * First available OpenAI frontier model in the live catalog (prefer
23533
+ * `gpt-5.6-sol`, fall back to `gpt-5.5`). Returns undefined when neither is
23534
+ * present. With `requireToolCalls`, only returns a model whose catalog entry
23535
+ * advertises `tool_calls`.
23536
+ */
23537
+ function resolveOpenAiFrontier(opts) {
23538
+ const models = state.models?.data;
23539
+ if (!models) return void 0;
23540
+ for (const id of OPENAI_FRONTIER_MODELS) {
23541
+ const found = models.find((m) => m.id === id);
23542
+ if (!found) continue;
23543
+ if (opts?.requireToolCalls && found.capabilities?.supports?.tool_calls !== true) continue;
23544
+ return id;
23545
+ }
23546
+ }
23518
23547
  function standInToolEnabled() {
23519
23548
  const models = state.models?.data;
23520
23549
  if (!models) return false;
23521
- const hasGpt55 = models.some((m) => m.id === "gpt-5.5");
23550
+ const hasOpenAi = resolveOpenAiFrontier() != null;
23522
23551
  const hasOpus = models.some((m) => m.id === "claude-opus-4-7" || m.id === "claude-opus-4.7");
23523
23552
  const hasGeminiPro = geminiAvailable();
23524
- return hasGpt55 && hasOpus && hasGeminiPro;
23553
+ return hasOpenAi && hasOpus && hasGeminiPro;
23525
23554
  }
23526
- const IMPLEMENTER_SUBAGENT_MODEL = "gpt-5.5";
23527
- /** Return the native implementer subagent model iff it is live with tool calls. */
23555
+ /** Return the native implementer subagent model iff it is live with tool calls.
23556
+ * Prefers `gpt-5.6-sol`, falls back to `gpt-5.5`. */
23528
23557
  function implementerSubagentModel() {
23529
- const models = state.models?.data;
23530
- if (!models) return void 0;
23531
- const found = models.find((m) => m.id === IMPLEMENTER_SUBAGENT_MODEL);
23532
- if (!found) return void 0;
23533
- return found.capabilities?.supports?.tool_calls === true ? IMPLEMENTER_SUBAGENT_MODEL : void 0;
23558
+ return resolveOpenAiFrontier({ requireToolCalls: true });
23534
23559
  }
23535
23560
  /**
23536
23561
  * Gate for the worker tools (`explore`, `review`, `implement`).
@@ -23542,7 +23567,7 @@ function implementerSubagentModel() {
23542
23567
  * true`. The worker loop is function-calling; a model that can't
23543
23568
  * emit tool_calls is unusable, so dormant-register (omit from
23544
23569
  * `tools/list`) keeps the surface honest. (The implement default
23545
- * `gpt-5.5` is NOT gated here — if it's absent, implement calls
23570
+ * `gpt-5.6-sol` is NOT gated here — if it's absent, implement calls
23546
23571
  * surface a clean resolve error rather than disabling all worker
23547
23572
  * tools, since explore/review still work.)
23548
23573
  * 2. The operator hasn't set `GH_ROUTER_DISABLE_WORKER_TOOLS=1`
@@ -23801,7 +23826,7 @@ function checkAuth(c) {
23801
23826
  /**
23802
23827
  * The 1M-context Opus 4.6 variant (`claude-opus-4.6-1m`, `max_prompt_tokens`
23803
23828
  * 936K). opus_critic prefers it so it can take large artifacts in one shot
23804
- * (the whole point of pairing it with gpt-5.5 as the big-window peers);
23829
+ * (the whole point of pairing it with gpt-5.6-sol as the big-window peers);
23805
23830
  * falls back to the 200K `claude-opus-4-6` when the catalog doesn't carry
23806
23831
  * a 1M 4.6 slug. The regex is version-anchored to 4.6 AND requires a
23807
23832
  * `-1m` suffix boundary (not a permissive `.*1m`), so it does NOT
@@ -24011,7 +24036,7 @@ async function predictedWindowOverflow(persona, prompt, context) {
24011
24036
  }
24012
24037
  if (tokens <= budget) return void 0;
24013
24038
  const opusHint = OPUS_1M_RE.test(id) ? "" : " / `opus_critic` (Opus-4.7 1M ≈ 936K tokens, when the enterprise catalog carries it)";
24014
- return `pre-flight rejected: this ${persona.toolNameHttp} brief is ≈${tokens} tokens, over the ${budget}-token budget for ${persona.model} (its ${maxPromptTokens}-token prompt window minus a ${PEER_PROMPT_TOKEN_RESERVE}-token framing reserve). Do NOT summarize or truncate the artifact to fit. Route the full artifact to a larger-window peer — \`codex_critic\` (gpt-5.5922K tokens)${opusHint} — or split it into focused sub-calls BY CONCERN and call them in parallel, then aggregate.`;
24039
+ return `pre-flight rejected: this ${persona.toolNameHttp} brief is ≈${tokens} tokens, over the ${budget}-token budget for ${persona.model} (its ${maxPromptTokens}-token prompt window minus a ${PEER_PROMPT_TOKEN_RESERVE}-token framing reserve). Do NOT summarize or truncate the artifact to fit. Route the full artifact to a larger-window peer — \`codex_critic\` (gpt-5.6-sol1M tokens)${opusHint} — or split it into focused sub-calls BY CONCERN and call them in parallel, then aggregate.`;
24015
24040
  }
24016
24041
  /**
24017
24042
  * JSON-path pre-flight predictedTooLong gate. Returns a JSON-RPC result
@@ -24070,7 +24095,7 @@ function jsonPathPreflightCap(body, scope) {
24070
24095
  * the `stand_in` orchestrator in `src/lib/stand-in.ts` — can reuse the
24071
24096
  * same per-endpoint request shaping without re-implementing it. The
24072
24097
  * stand_in tool needs to drive its own per-round system prompts across
24073
- * three concrete models (gpt-5.5, claude-opus-4-7, gemini-3.1-pro-preview),
24098
+ * three concrete models (gpt-5.6-sol, claude-opus-4-7, gemini-3.1-pro-preview),
24074
24099
  * each on a different endpoint; doing that with a `PersonaSpec` would
24075
24100
  * require either inventing throwaway personas per round or duplicating
24076
24101
  * the dispatch switch.
@@ -24761,13 +24786,13 @@ const ADVISOR_CLIENT_TOOL_NAME = "advisor";
24761
24786
  * times per session per cc-backup ADVISOR_TOOL_INSTRUCTIONS. */
24762
24787
  const ADVISOR_MAX_TURNS = 16;
24763
24788
  /** Default advisor model + reasoning effort. Per gemini-critic + user
24764
- * direction: hardcode to a cross-lab model (gpt-5.5 — Copilot's
24789
+ * direction: hardcode to a cross-lab model (gpt-5.6-sol — Copilot's
24765
24790
  * /responses-only flagship) at xhigh effort. The cross-lab choice
24766
24791
  * gives a true "second set of eyes" instead of the main model
24767
24792
  * reviewing itself; xhigh effort buys the deep-dive reasoning that
24768
24793
  * matches Anthropic's own ADVISOR (which uses a stronger reviewer
24769
24794
  * model — Opus 4.6/Sonnet 4.6 typically). */
24770
- const ADVISOR_DEFAULT_MODEL = "gpt-5.5";
24795
+ const ADVISOR_DEFAULT_MODEL = "gpt-5.6-sol";
24771
24796
  const ADVISOR_DEFAULT_EFFORT = "xhigh";
24772
24797
  /** ADVISOR_TOOL_INSTRUCTIONS verbatim from cc-backup
24773
24798
  * src/utils/advisor.ts — describes when the model should invoke
@@ -24864,7 +24889,7 @@ const ADVISOR_FALLBACK_MAX_TOKENS = 24e4;
24864
24889
  * budget is `max_prompt_tokens - reserve`. Generous on purpose: a 400
24865
24890
  * `model_max_prompt_tokens_exceeded` degrades to a silent advisor
24866
24891
  * fallback, and the marginal window we give up is irrelevant next to
24867
- * gpt-5.5's 922K. */
24892
+ * gpt-5.6-sol's ~1M. */
24868
24893
  const ADVISOR_PROMPT_TOKEN_RESERVE = 8e3;
24869
24894
  /**
24870
24895
  * Derive the TOKEN budget for the rendered transcript from the advisor
@@ -24883,7 +24908,7 @@ function resolveAdvisorMaxTokens(advisorModel) {
24883
24908
  /**
24884
24909
  * Render an Anthropic-shape conversation (messages array with
24885
24910
  * role/content blocks) as a single human-readable text blob. Used
24886
- * as the input to the advisor model (gpt-5.5 via /v1/responses
24911
+ * as the input to the advisor model (gpt-5.6-sol via /v1/responses
24887
24912
  * doesn't have a 1:1 mapping for Anthropic's tool_use/tool_result
24888
24913
  * blocks; serializing to text preserves the semantics — the advisor
24889
24914
  * just needs to READ the conversation, not produce more of it).
@@ -24965,7 +24990,7 @@ function truncateTailToUnits(text, maxUnits, measure) {
24965
24990
  * Routes by model family:
24966
24991
  * - gpt-5.x / codex / o-series (have `/responses` in supported_endpoints):
24967
24992
  * use createResponses with `reasoning.effort` set. This is the
24968
- * default path — gpt-5.5 at xhigh effort.
24993
+ * default path — gpt-5.6-sol at xhigh effort.
24969
24994
  * - claude-* (no `/responses`): fall back to createMessages.
24970
24995
  *
24971
24996
  * The conversation is serialized to text via renderConversationAsText
@@ -27068,7 +27093,7 @@ function advisorTool(getMessages) {
27068
27093
  return {
27069
27094
  name: "advisor",
27070
27095
  label: "Advisor",
27071
- description: "Consult a stronger reviewer model (cross-lab: gpt-5.5 xhigh by default) on a specific concern. Use BEFORE substantive work, WHEN stuck, or WHEN considering a change of approach. The advisor automatically receives the recent conversation transcript as context — give it a focused `concern`, not background.",
27096
+ description: "Consult a stronger reviewer model (cross-lab: gpt-5.6-sol xhigh by default) on a specific concern. Use BEFORE substantive work, WHEN stuck, or WHEN considering a change of approach. The advisor automatically receives the recent conversation transcript as context — give it a focused `concern`, not background.",
27072
27097
  parameters: ADVISOR_PARAMS,
27073
27098
  async execute(_toolCallId, params, signal) {
27074
27099
  if (networkDisabled()) throw new Error("rejected: network disabled");
@@ -27563,7 +27588,7 @@ const DEFAULT_THINKING = "xhigh";
27563
27588
  * (via `DEFAULT_THINKING`) — a strong, NATIVE (no-shim) tool-caller for repo
27564
27589
  * research. Native Claude models run as workers over `/chat/completions`, the
27565
27590
  * same path proven by `PLAN_DEFAULT_MODEL` (claude-opus-4.8). Like `implement`'s
27566
- * gpt-5.5 this is NOT a `workerToolsEnabled` gate input — if absent (e.g. a
27591
+ * gpt-5.6-sol this is NOT a `workerToolsEnabled` gate input — if absent (e.g. a
27567
27592
  * non-enterprise tier) `explore` errors helpfully at call time rather than
27568
27593
  * vanishing the whole worker surface. The caller (the main model) overrides
27569
27594
  * BOTH the model and the reasoning per call via the `model` / `thinking` args. */
@@ -27571,7 +27596,7 @@ const EXPLORE_DEFAULT_MODEL = "claude-sonnet-5";
27571
27596
  /** Default model + thinking for the READ-ONLY `review` mode.
27572
27597
  * `gemini-3.1-pro-preview` at `xhigh` (clamped to `high` at call time — gemini
27573
27598
  * advertises no xhigh). DELIBERATELY DECORRELATED FROM THE IMPLEMENTER: bounded
27574
- * implementation now defaults to gpt-5.5 (OpenAI) — both the `implement` worker
27599
+ * implementation now defaults to gpt-5.6-sol (OpenAI) — both the `implement` worker
27575
27600
  * and the native `implementer` subagent — and the main orchestrator is Opus
27576
27601
  * (Anthropic), so review runs on a THIRD lab (Google) to maximize blind-spot
27577
27602
  * diversity. A reviewer sharing the implementer's lab catches a correlated slice
@@ -27582,12 +27607,12 @@ const EXPLORE_DEFAULT_MODEL = "claude-sonnet-5";
27582
27607
  * `model` arg (e.g. `claude-opus-4.8` for an Anthropic-lab reviewer). */
27583
27608
  const REVIEW_DEFAULT_MODEL = "gemini-3.1-pro-preview";
27584
27609
  const REVIEW_DEFAULT_THINKING = "xhigh";
27585
- /** Default model + thinking for the READ+WRITE `implement` mode. `gpt-5.5`
27610
+ /** Default model + thinking for the READ+WRITE `implement` mode. `gpt-5.6-sol`
27586
27611
  * at `xhigh` — the strongest reasoning tier in the catalog, 1M+ context,
27587
27612
  * routed through `/responses` by the stream-fn endpoint split. Coding edits
27588
27613
  * benefit from maximum reasoning; the higher per-call cost is justified for
27589
27614
  * autonomous implementation. An explicit `opts.model` still wins. */
27590
- const IMPLEMENT_DEFAULT_MODEL = "gpt-5.5";
27615
+ const IMPLEMENT_DEFAULT_MODEL = "gpt-5.6-sol";
27591
27616
  const IMPLEMENT_DEFAULT_THINKING = "xhigh";
27592
27617
  /** Default model for `browse` mode. `gpt-5.4-mini` — the Gate-B-winning
27593
27618
  * browse model (small + fast enough to drive a tab at human pace, with
@@ -27612,7 +27637,7 @@ const BROWSE_DEFAULT_THINKING = "high";
27612
27637
  * Copilot catalog id (the worker resolver exact-matches `catalog.id`, it does
27613
27638
  * NOT translate the Anthropic dashed slug). Falls back to a helpful
27614
27639
  * unknown-model error at call time if opus-4.8 isn't in the catalog (e.g. a
27615
- * non-enterprise tier), exactly like `implement`'s `gpt-5.5`. Caller's `model`
27640
+ * non-enterprise tier), exactly like `implement`'s `gpt-5.6-sol`. Caller's `model`
27616
27641
  * arg still wins. */
27617
27642
  const PLAN_DEFAULT_MODEL = "claude-opus-4.8";
27618
27643
  const PLAN_DEFAULT_THINKING = "xhigh";
@@ -27967,8 +27992,8 @@ function appendPlanReminder(messages, planState) {
27967
27992
  */
27968
27993
  const STAND_IN_MODELS = Object.freeze([
27969
27994
  {
27970
- key: "gpt-5.5",
27971
- model: "gpt-5.5",
27995
+ key: "gpt-5.6-sol",
27996
+ model: "gpt-5.6-sol",
27972
27997
  endpoint: "/v1/responses",
27973
27998
  effort: "xhigh"
27974
27999
  },
@@ -28093,10 +28118,11 @@ async function runStandIn(input, signal) {
28093
28118
  };
28094
28119
  }
28095
28120
  async function callAndParse(cfg, instructions, userText, signal) {
28121
+ const model = cfg.key === "gpt-5.6-sol" ? resolveOpenAiFrontier() ?? cfg.model : cfg.model;
28096
28122
  let raw;
28097
28123
  try {
28098
28124
  raw = await dispatchModelCall({
28099
- model: cfg.model,
28125
+ model,
28100
28126
  endpoint: cfg.endpoint,
28101
28127
  instructions,
28102
28128
  userText,
@@ -28120,7 +28146,7 @@ async function callAndParse(cfg, instructions, userText, signal) {
28120
28146
  let retryRaw;
28121
28147
  try {
28122
28148
  retryRaw = await dispatchModelCall({
28123
- model: cfg.model,
28149
+ model,
28124
28150
  endpoint: cfg.endpoint,
28125
28151
  instructions,
28126
28152
  userText: userText + RETRY_PROMPT_SUFFIX,
@@ -29659,7 +29685,7 @@ async function decideStopHook(input) {
29659
29685
  * `markReviewed` runs BEFORE the spawn so a crashing spawn still records the
29660
29686
  * debounce (an identical tree won't re-trigger on the next stop). The review is
29661
29687
  * gated on the diff CHANGING since the last review — without it, every stop of
29662
- * an unchanged tree would re-spend a background gpt-5.5 review.
29688
+ * an unchanged tree would re-spend a background gpt-5.6-sol review.
29663
29689
  *
29664
29690
  * The whole body is bounded by a short timeout (the stores are local temp files
29665
29691
  * that complete in well under a millisecond in practice, so the timeout never
@@ -29945,7 +29971,7 @@ const CRITIC_INSTRUCTIONS = "You are a cross-lab code reviewer. Review the diff
29945
29971
  function labPersona(lab) {
29946
29972
  switch (lab.toLowerCase()) {
29947
29973
  case "openai": return {
29948
- model: "gpt-5.5",
29974
+ model: "gpt-5.6-sol",
29949
29975
  endpoint: "/v1/responses",
29950
29976
  effort: "high"
29951
29977
  };
@@ -30172,7 +30198,7 @@ Cold-start contract for the lead orchestrator (Opus):
30172
30198
  (c) any prior decisions I should not relitigate.
30173
30199
  If your brief lacks (a), I will reply with a one-line request for the artifact instead of speculating.
30174
30200
  `.trim();
30175
- const CRITIC_BASE = `You are codex-critic, an adversarial reviewer running on gpt-5.5. Your single job is to overcome the lead orchestrator's blind spots — assumptions it didn't notice it was making, failure modes it didn't enumerate, alternatives it didn't consider.
30201
+ const CRITIC_BASE = `You are codex-critic, an adversarial reviewer running on gpt-5.6-sol. Your single job is to overcome the lead orchestrator's blind spots — assumptions it didn't notice it was making, failure modes it didn't enumerate, alternatives it didn't consider.
30176
30202
 
30177
30203
  You are NOT a helpful assistant. You are NOT a coach. Sycophancy is the failure mode you exist to fight. Manufactured contrarianism is a different failure of the same shape — silence on good work is a valid and welcome answer.
30178
30204
 
@@ -30262,7 +30288,7 @@ Resilience reminder:
30262
30288
  If your session terminates abnormally before "Status: complete", the lead will retry once. On recovery, ask the lead to confirm what's already been done before re-applying changes — duplicate edits are worse than a slow restart.`;
30263
30289
  const OPUS_CRITIC_BASE = `You are opus-critic, a fresh-context same-lab adversarial reviewer running on Opus 4.6. The lead orchestrator that just delegated to you runs newer Opus-family context, but you are NOT the lead. You did not see the lead's reasoning trace. You only see the brief.
30264
30290
 
30265
- Your job is to spot what the lead missed because of cognitive momentum, sunk-cost on a plan, or motivated reasoning toward a particular fix. Your blind-spot diversification is LIMITED compared to codex-critic (gpt-5.5) and gemini-critic (gemini-3.1-pro), same lab, adjacent model family, related priors. Use that honestly: don't pretend to find a different perspective when the obvious read is "the lead got it right." Silence on good work is a valid and welcome answer.
30291
+ Your job is to spot what the lead missed because of cognitive momentum, sunk-cost on a plan, or motivated reasoning toward a particular fix. Your blind-spot diversification is LIMITED compared to codex-critic (gpt-5.6-sol) and gemini-critic (gemini-3.1-pro), same lab, adjacent model family, related priors. Use that honestly: don't pretend to find a different perspective when the obvious read is "the lead got it right." Silence on good work is a valid and welcome answer.
30266
30292
 
30267
30293
  Sycophancy is the failure mode you exist to fight. Manufactured contrarianism is a different failure of the same shape — do neither.
30268
30294
 
@@ -30273,9 +30299,9 @@ const PERSONAS_READ = Object.freeze([
30273
30299
  {
30274
30300
  agentName: "codex-critic",
30275
30301
  toolNameHttp: "codex_critic",
30276
- model: "gpt-5.5",
30302
+ model: "gpt-5.6-sol",
30277
30303
  endpoint: "/v1/responses",
30278
- description: "Adversarial architecture and design critic backed by gpt-5.5 (OpenAI, ≈922K-token input window), the strongest cross-lab reasoning critic in this surface. It reviews plans, designs, tradeoffs, and large code-change proposals for unsound assumptions, missing failure modes, and overlooked alternatives, then returns a calibrated objection or `no material objection`. Use when a decision or design needs a different-lab strategic challenge before implementation or merge. Not for line-level bug finding in a concrete diff or file, use codex_reviewer or gemini_reviewer; pass the artifact and constraints verbatim.",
30304
+ description: "Adversarial architecture and design critic backed by gpt-5.6-sol (OpenAI, ~1M-token input window), the strongest cross-lab reasoning critic in this surface. It reviews plans, designs, tradeoffs, and large code-change proposals for unsound assumptions, missing failure modes, and overlooked alternatives, then returns a calibrated objection or `no material objection`. Use when a decision or design needs a different-lab strategic challenge before implementation or merge. Not for line-level bug finding in a concrete diff or file, use codex_reviewer or gemini_reviewer; pass the artifact and constraints verbatim.",
30279
30305
  baseInstructions: CRITIC_BASE,
30280
30306
  agentPrompt: "",
30281
30307
  writeCapable: false,
@@ -30488,7 +30514,7 @@ function buildPeerAwarenessSnippet(opts) {
30488
30514
  const fleetKey = key("fleet");
30489
30515
  const compoundBrowseAvailable = opts.browseAvailable && opts.compoundBrowseAvailable;
30490
30516
  const powerBrowseAvailable = opts.browseAvailable && opts.powerBrowseAvailable === true;
30491
- const criticList = ["`codex_critic` (gpt-5.5)", "`codex_reviewer` (gpt-5.3-codex)"];
30517
+ const criticList = ["`codex_critic` (gpt-5.6-sol)", "`codex_reviewer` (gpt-5.3-codex)"];
30492
30518
  if (opts.geminiAvailable) {
30493
30519
  criticList.push("`gemini_reviewer` (gemini-3.1-pro, line-level code review)");
30494
30520
  criticList.push("`gemini_critic` (gemini-3.1-pro)");
@@ -30497,7 +30523,7 @@ function buildPeerAwarenessSnippet(opts) {
30497
30523
  const codexCliClause = opts.codexCli ? " `mcp__codex-cli__codex` dispatches to `codex-implementer` (gpt-5.3-codex with workspace-write) for end-to-end coding tasks." : "";
30498
30524
  const para2Parts = [`\`mcp__${searchKey}__code\` is the one-stop code search (no extra model call). Its DEFAULT mode (or \`mode:"semantic"\`) ranks by MEANING via ColBERT over a per-workspace index, the first thing to reach for on intent/concept questions ("where is retry/backoff handled", "how does auth work"); when that index isn't ready it transparently falls back to lexical (the response \`source\` says which engine ran). Forced modes cover the rest: \`lexical\` (BM25F-ranked + tree-sitter, best for exact symbols), \`exact\`, \`regex\`, \`complete\` (exhaustive set), \`ast_pattern\`+\`ast_lang\` for multi-line AST shapes, \`scan\` for a whole-workspace symbol outline, \`multiline\` for cross-line regex. Multiple queries can run in a single turn. The index covers code-shaped files; for unstructured files (logs, \`.csv\`, \`.env*\`, config-only wiring), \`grep\`/\`glob\` still apply.`];
30499
30525
  if (opts.workerToolsAvailable) para2Parts.push(`\`worker-*\` are background Agent subagents (subagent_type) that run the matching worker in its own context and deliver the result as a completion notification, so a long run never blocks the turn: \`worker-explore\` (read-only research), \`worker-review\` (reads the code to verify a change or claim), \`worker-plan\` (ordered implementation plan), \`worker-implement\` (edit/write/bash; \`worktree: true\` isolates in a git worktree and returns the diff), \`worker-test\` (independent test author). The raw \`mcp__${workersKey}__*\` tools they call are guarded (a direct main-thread call is redirected to the matching agent); Workers themselves have \`code_search\`.`);
30500
- if (opts.workerToolsAvailable && opts.implementerAvailable) para2Parts.push(`For a bounded, well-scoped implementation, prefer the \`implementer\` subagent (Task, runs on gpt-5.5) over \`worker-implement\`; reach for \`worker-implement\` only when you specifically need git-worktree isolation, parallel variants, or a throwaway experiment.`);
30526
+ if (opts.workerToolsAvailable && opts.implementerAvailable) para2Parts.push(`For a bounded, well-scoped implementation, prefer the \`implementer\` subagent (Task, runs on gpt-5.6-sol) over \`worker-implement\`; reach for \`worker-implement\` only when you specifically need git-worktree isolation, parallel variants, or a throwaway experiment.`);
30501
30527
  if (opts.workerToolsAvailable) para2Parts.push(`\`mcp__${orchestrateKey}__decompose\` composes an open-ended ask into a typed, VERIFIED workflow IR (a strong driver decorrelated by a cross-lab critic, so the decompose step isn't a single point of failure), and \`mcp__${orchestrateKey}__run_workflow\` executes that IR through a frozen kernel delivering max(orchestrated, baseline) over a sealed executable gate, so it never ships worse than a plain single-model run. \`mcp__${orchestrateKey}__verify_workflow\` checks an IR's floor invariants before you run it, and \`mcp__${orchestrateKey}__attest_step\` audits that a finished run's producers were each checked by a different lab. They suit non-trivial, role-separated asks; a trivial ask does not need them.`);
30502
30528
  else para2Parts.push(`\`mcp__${orchestrateKey}__verify_workflow\` statically checks a workflow IR's floor invariants and \`mcp__${orchestrateKey}__attest_step\` audits a run's cross-lab lineage (the \`decompose\`/\`run_workflow\` composer + kernel need the worker backend, unavailable here).`);
30503
30529
  if (opts.workerToolsAvailable) {
@@ -30808,7 +30834,7 @@ const NON_PERSONA_MCP_TOOLS = Object.freeze([
30808
30834
  toolNameHttp: "implement",
30809
30835
  group: "workers",
30810
30836
  capability: "worker",
30811
- description: "Runs as the background `worker-implement` agent. Dispatch via the Agent tool (subagent_type: worker-implement) so the turn is never blocked; the result arrives as a completion notification. Delegates a scoped coding task to an autonomous worker (Pi runtime; default model `gpt-5.5` at xhigh reasoning, override via `model` with any Copilot-catalog model that advertises `tool_calls`). It has the explore read-only tools plus edit, write, bash, and codex_review, and it returns its final text with any changed files or worktree diff. Use for bounded implementation work that may take a while or benefits from isolated worker context. Not for pure research, planning, review, or independent test authoring; use explore, plan, review, or test for those scopes. With `worktree: false` (default) edits happen in place, so concurrent implement calls and lead edits to the same files can race. With `worktree: true` it runs in an isolated git worktree and returns the diff; this errors if the workspace is not a git repository.",
30837
+ description: "Runs as the background `worker-implement` agent. Dispatch via the Agent tool (subagent_type: worker-implement) so the turn is never blocked; the result arrives as a completion notification. Delegates a scoped coding task to an autonomous worker (Pi runtime; default model `gpt-5.6-sol` at xhigh reasoning, override via `model` with any Copilot-catalog model that advertises `tool_calls`). It has the explore read-only tools plus edit, write, bash, and codex_review, and it returns its final text with any changed files or worktree diff. Use for bounded implementation work that may take a while or benefits from isolated worker context. Not for pure research, planning, review, or independent test authoring; use explore, plan, review, or test for those scopes. With `worktree: false` (default) edits happen in place, so concurrent implement calls and lead edits to the same files can race. With `worktree: true` it runs in an isolated git worktree and returns the diff; this errors if the workspace is not a git repository.",
30812
30838
  inputSchema: {
30813
30839
  type: "object",
30814
30840
  required: ["prompt"],
@@ -30824,7 +30850,7 @@ const NON_PERSONA_MCP_TOOLS = Object.freeze([
30824
30850
  },
30825
30851
  model: {
30826
30852
  type: "string",
30827
- description: "Optional Copilot catalog model id (defaults to gpt-5.5). Must advertise tool_calls support; the engine emits an isError envelope listing the eligible catalog models on mismatch."
30853
+ description: "Optional Copilot catalog model id (defaults to gpt-5.6-sol). Must advertise tool_calls support; the engine emits an isError envelope listing the eligible catalog models on mismatch."
30828
30854
  },
30829
30855
  thinking: {
30830
30856
  type: "string",
@@ -30956,7 +30982,7 @@ const NON_PERSONA_MCP_TOOLS = Object.freeze([
30956
30982
  toolNameHttp: "test",
30957
30983
  group: "workers",
30958
30984
  capability: "worker",
30959
- description: "Runs as the background `worker-test` agent. Dispatch via the Agent tool (subagent_type: worker-test) so the turn is never blocked; the result arrives as a completion notification. Independent adversarial test authoring by an autonomous worker (Pi runtime; default model `gpt-5.5` at xhigh reasoning, override via `model` with any Copilot-catalog model that advertises `tool_calls`). It has the same read/write toolset as implement and writes tests that try to break the implementation through edge cases, error paths, and acceptance criteria, then runs them and reports pass/fail. Use when a separate test author should challenge an implementation without modifying the production code to make tests pass. Not for implementing fixes, broad research, or code review; use implement, explore, or review for those scopes. With `worktree: true` it runs in an isolated git worktree and returns the test diff; this errors if the workspace is not a git repository.",
30985
+ description: "Runs as the background `worker-test` agent. Dispatch via the Agent tool (subagent_type: worker-test) so the turn is never blocked; the result arrives as a completion notification. Independent adversarial test authoring by an autonomous worker (Pi runtime; default model `gpt-5.6-sol` at xhigh reasoning, override via `model` with any Copilot-catalog model that advertises `tool_calls`). It has the same read/write toolset as implement and writes tests that try to break the implementation through edge cases, error paths, and acceptance criteria, then runs them and reports pass/fail. Use when a separate test author should challenge an implementation without modifying the production code to make tests pass. Not for implementing fixes, broad research, or code review; use implement, explore, or review for those scopes. With `worktree: true` it runs in an isolated git worktree and returns the test diff; this errors if the workspace is not a git repository.",
30960
30986
  inputSchema: {
30961
30987
  type: "object",
30962
30988
  required: ["prompt"],
@@ -30972,7 +30998,7 @@ const NON_PERSONA_MCP_TOOLS = Object.freeze([
30972
30998
  },
30973
30999
  model: {
30974
31000
  type: "string",
30975
- description: "Optional Copilot catalog model id (defaults to gpt-5.5). Must advertise tool_calls support; the engine emits an isError envelope listing the eligible catalog models on mismatch."
31001
+ description: "Optional Copilot catalog model id (defaults to gpt-5.6-sol). Must advertise tool_calls support; the engine emits an isError envelope listing the eligible catalog models on mismatch."
30976
31002
  },
30977
31003
  thinking: {
30978
31004
  type: "string",
@@ -31238,7 +31264,7 @@ const NON_PERSONA_MCP_TOOLS = Object.freeze([
31238
31264
  toolNameHttp: "stand_in",
31239
31265
  group: "decide",
31240
31266
  capability: "stand_in",
31241
- description: "Three-lab away-mode decision tiebreak advisor for moments when the user is unavailable and the agent is stuck between two or more concrete options. It polls gpt-5.5, Opus 4.7, and gemini-3.1-pro-preview across blind and informed voting rounds, then returns a ranked-choice verdict such as consensus, majority, no_consensus, or need_more_info. Use when work would otherwise halt on a bounded choice the user would normally make. Not for code review, open-ended exploration, single-model second opinions, or bypassing confirmation on irreversible actions such as push, delete, drop, or deploy; use peer-review-coordinator or the individual critics for review and still ask the user for destructive actions.",
31267
+ description: "Three-lab away-mode decision tiebreak advisor for moments when the user is unavailable and the agent is stuck between two or more concrete options. It polls gpt-5.6-sol, Opus 4.7, and gemini-3.1-pro-preview across blind and informed voting rounds, then returns a ranked-choice verdict such as consensus, majority, no_consensus, or need_more_info. Use when work would otherwise halt on a bounded choice the user would normally make. Not for code review, open-ended exploration, single-model second opinions, or bypassing confirmation on irreversible actions such as push, delete, drop, or deploy; use peer-review-coordinator or the individual critics for review and still ask the user for destructive actions.",
31242
31268
  inputSchema: {
31243
31269
  type: "object",
31244
31270
  required: ["decision", "options"],
@@ -31633,4 +31659,4 @@ async function runStandInToolCall(args, signal) {
31633
31659
 
31634
31660
  //#endregion
31635
31661
  export { isAdvisorRequested as $, cacheModels as $t, liveExec as A, hasSupportedBrowserInstalled as At, withNoOutputRetry as B, DEFAULT_CODEX_MODEL_FALLBACKS as Bt, fileReviewDebounce as C, pickEndpoint as Ct, stopGateEnabledForRepo as D, readResponseBodyCapped as Dt, repoRoot as E, MAX_RESPONSE_BODY_BYTES as Et, IMPLEMENT_DEFAULT_MODEL as F, ArtifactClient as Ft, vscodeRipgrepPath as G, pickClaudeDefault as Gt, buildToolbeltAwareness as H, UPSTREAM_FETCH_TIMEOUT_MS as Ht, PLAN_DEFAULT_MODEL as I, collapsePathKeys as It, searchWeb as J, setupCopilotToken as Jt, TOOLBELT_TOOLS$1 as K, getPackageVersion as Kt, REVIEW_DEFAULT_MODEL as L, toolbeltPathOverride as Lt, BROWSE_DEFAULT_MODEL as M, extractTarGzMember as Mt, DEFAULT_MODEL as N, extractZipMember as Nt, stopReviewStateDir as O, parseJsonOrDiagnose as Ot, EXPLORE_DEFAULT_MODEL as P, shouldUseInsecureTls as Pt, injectAdvisorTool as Q, cacheCopilotVersion as Qt, appendPlanReminder as R, DEFAULT_CLAUDE_MODEL_FALLBACKS as Rt, fileLastPromptStore as S, resolveMcpToolTimeoutMs as St, repoFingerprint as T, createChatCompletions as Tt, toolbeltEnabled as U, UPSTREAM_INACTIVITY_TIMEOUT_MS as Ut, availableToolCommands as V, DEFAULT_PORT as Vt, toolbeltSkipSet as W, generateRandomPort as Wt, ADVISOR_TOOL_INSTRUCTIONS as X, setupGitHubToken as Xt, ADVISOR_INTERNAL_TOOL_NAME as Y, setupGitHubAgentToken as Yt, buildAdvisorStream as Z, tryRefreshAndRetry as Zt, stopGateId as _, workerToolsEnabled as _t, buildPeerAwarenessSnippet as a, sleep as an, relayAnthropicStream as at, fileBaselineStore as b, getTokenCount as bt, buildArtifactOpenHookCommand as c, HTTPError as cn, agentToolsEnabled as ct, captureLaunchBaseline as d, copilotBaseUrl as dn, browserCompoundToolsEnabled as dt, cacheVSCodeVersion as en, buildAnthropicErrorEvent as et, decideStopHook as f, copilotHeaders as fn, browserToolsEnabled as ft, stopGateDisabled as g, standInToolEnabled as gt, launchBaselineKey as h, implementerSubagentModel as ht, buildAgentPrompt as i, resolveModel as in, readIteratorWithTimeout as it, resolveSealedGate as j, provisionAndIndexColbert as jt, trustRepo as k, provisionBrowserAssets as kt, buildSessionBindHookCommand as l, forwardError as ln, artifactToolsEnabled as lt, injectStopHookIntoSettingsFile as m, state as mn, geminiAvailable as mt, MCP_GROUPS as n, isNullish as nn, isControllerClosedError as nt, buildPeerAwarenessSummary as o, getModels as on, handleMcpDelete as ot, fileBlockBudget as p, githubHeaders as pn, fleetToolsEnabled as pt, assetFor as q, withInstallLock as qt, assertMcpToolSurfaceConsistent as r, resolveCodexModel as rn, logStreamError as rt, personasFor as s, fetchWithTransientRetry as sn, handleMcpPost as st, GROUP_META as t, filterBetaHeader as tn, buildOpenAIErrorEvent as tt, buildStopHookCommand as u, GITHUB_API_BASE_URL as un, browseAgentEnabled as ut, stopGatePlanMode as v, countTokens as vt, isSubagentContext as w, createResponses as wt, fileFindingsStore as x, assembleResponsesPayload as xt, stopReviewEnabled as y, createMessages as yt, runWorkerAgent as z, DEFAULT_CODEX_MODEL as zt };
31636
- //# sourceMappingURL=peer-mcp-personas-BCGYWok0.js.map
31662
+ //# sourceMappingURL=peer-mcp-personas-BKkdfOyK.js.map