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.
package/README.md CHANGED
@@ -83,7 +83,7 @@ Each persona is exposed both as a Claude Code subagent (callable via the `Task`
83
83
 
84
84
  | Subagent | Model | Endpoint | Effort tiers (default) |
85
85
  |---|---|---|---|
86
- | `codex-critic` | gpt-5.5 | `/v1/responses` | low \| medium \| high \| xhigh (xhigh) |
86
+ | `codex-critic` | gpt-5.6-sol | `/v1/responses` | low \| medium \| high \| xhigh (xhigh) |
87
87
  | `codex-reviewer` | gpt-5.3-codex | `/v1/responses` | low \| medium \| high \| xhigh (xhigh) |
88
88
  | `gemini-reviewer` | gemini-3.1-pro-preview | `/v1/chat/completions` | low \| medium \| high (high) |
89
89
  | `opus-critic` | claude-opus-4-6 | `/v1/messages` | low \| medium \| high (high) |
@@ -116,7 +116,7 @@ The fastest path is the `codex` subcommand — it boots the proxy on a random po
116
116
  npx github-router@latest codex
117
117
  ```
118
118
 
119
- Defaults to `gpt-5.5`; falls back to `gpt-5.4` → `gpt-5.3-codex` → `gpt-5.2-codex` if your Copilot tier doesn't expose 5.5 yet. Override with `-m`:
119
+ Defaults to `gpt-5.6-sol`; falls back to `gpt-5.5` → `gpt-5.4` → `gpt-5.3-codex` → `gpt-5.2-codex` if your Copilot tier doesn't expose 5.6-sol yet. Override with `-m`:
120
120
 
121
121
  ```sh
122
122
  npx github-router@latest codex -m gpt-5.3-codex
@@ -129,7 +129,7 @@ npx github-router@latest start --codex # interactive launch-command generator
129
129
  # — or set env vars yourself —
130
130
  export OPENAI_BASE_URL="http://localhost:8787/v1"
131
131
  export OPENAI_API_KEY="dummy"
132
- codex --full-auto -m gpt-5.5
132
+ codex --full-auto -m gpt-5.6-sol
133
133
  ```
134
134
 
135
135
  ---
@@ -168,7 +168,7 @@ Anthropic endpoints are only available under `/v1/messages`.
168
168
  | Model | /chat/completions | /responses | /v1/messages |
169
169
  |---|---|---|---|
170
170
  | gpt-4.1, gpt-4o | Yes | Yes | No |
171
- | gpt-5.5, gpt-5.4 | No | Yes | No |
171
+ | gpt-5.6-sol, gpt-5.5, gpt-5.4 | No | Yes | No |
172
172
  | gpt-5.3-codex, gpt-5.2-codex | No | Yes | No |
173
173
  | claude-opus-4.8 (1M context as the single base slug) | Yes | No | Yes |
174
174
  | claude-opus-4.7-1m-internal (enterprise), claude-opus-4.7 | Yes | No | Yes |
@@ -237,7 +237,7 @@ github-router debug Print diagnostic info
237
237
  The `claude` and `codex` subcommands accept all the shared flags below plus `-m`/`--model` to override the default model. Default models live in `src/lib/port.ts`:
238
238
 
239
239
  - `claude` → `claude-opus-4-8` (Anthropic dashed slug for UI compatibility; the proxy translates to Copilot's `claude-opus-4.8` — the single base slug already advertises 1M context via `max_context_window_tokens`, so no `-1m` sibling exists). Major.minor fallback chain: `claude-opus-4-7` → `claude-opus-4-6` → `claude-opus-4-5`.
240
- - `codex` → `gpt-5.5` → `gpt-5.4` → `gpt-5.3-codex` → `gpt-5.2-codex`
240
+ - `codex` → `gpt-5.6-sol` → `gpt-5.5` → `gpt-5.4` → `gpt-5.3-codex` → `gpt-5.2-codex`
241
241
 
242
242
  Fallback chains fire only on the implicit-default path; explicit `-m`/`--model` is always respected as-is.
243
243
 
@@ -2,7 +2,7 @@
2
2
  "manifest_version": 3,
3
3
  "name": "github-router browser bridge",
4
4
  "short_name": "gh-router-browser",
5
- "version": "0.3.175",
5
+ "version": "0.3.176",
6
6
  "description": "Bridge between Claude (via github-router /mcp) and the browser. Implements tab control, navigation, clicks, form fill, downloads, screenshots, devtools eval. Blocks navigation to chrome://settings.",
7
7
  "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqJElxuBlonBS3TVW9FJN0mGTtShB3L1hoaYf6k39SOr1ogGYmF90EjRxy1i21k9wQQjPf26bcBu/9X67KrQjQV0uB38CaNukgiSeoLjfptN811u+PJHx6BP+jx3Qa6/3VenNPxHC8WEU0GXql8QSjIHEyCwKb6fMASXOK94JyB5Ywov2x8mt/+9ncqBBBMVzf6r5Sagy4PL1XnryLsuADD/vOEkPet8wXgH/Oj7v5tTsQQZ7U1JT51PoDs2BFnXc5v3TkVgZwd32k3ONh+nkDw1Hof+4zwUGOyJE6eMrlYzRlKM4Qxdf9JpavQvqfieAbTRWcyKeclnHeoIfE7cDBQIDAQAB",
8
8
  "background": {
@@ -1,4 +1,4 @@
1
- import { B as withNoOutputRetry, F as IMPLEMENT_DEFAULT_MODEL, I as PLAN_DEFAULT_MODEL, L as REVIEW_DEFAULT_MODEL, M as BROWSE_DEFAULT_MODEL, N as DEFAULT_MODEL, P as EXPLORE_DEFAULT_MODEL, R as appendPlanReminder, z as runWorkerAgent } from "./peer-mcp-personas-BCGYWok0.js";
1
+ import { B as withNoOutputRetry, F as IMPLEMENT_DEFAULT_MODEL, I as PLAN_DEFAULT_MODEL, L as REVIEW_DEFAULT_MODEL, M as BROWSE_DEFAULT_MODEL, N as DEFAULT_MODEL, P as EXPLORE_DEFAULT_MODEL, R as appendPlanReminder, z as runWorkerAgent } from "./peer-mcp-personas-BKkdfOyK.js";
2
2
  import "./paths-CTlT1nTo.js";
3
3
  import "./lifecycle-ChPBRt6K.js";
4
4
  import "./lifecycle-BUXxiltc.js";
package/dist/main.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { $ as isAdvisorRequested, $t as cacheModels, A as liveExec, At as hasSupportedBrowserInstalled, Bt as DEFAULT_CODEX_MODEL_FALLBACKS, C as fileReviewDebounce, Ct as pickEndpoint, D as stopGateEnabledForRepo, Dt as readResponseBodyCapped, E as repoRoot, Et as MAX_RESPONSE_BODY_BYTES, Ft as ArtifactClient, G as vscodeRipgrepPath, Gt as pickClaudeDefault, H as buildToolbeltAwareness, Ht as UPSTREAM_FETCH_TIMEOUT_MS, It as collapsePathKeys, J as searchWeb, Jt as setupCopilotToken, K as TOOLBELT_TOOLS, Kt as getPackageVersion, Lt as toolbeltPathOverride, Mt as extractTarGzMember, Nt as extractZipMember, O as stopReviewStateDir, Ot as parseJsonOrDiagnose, Pt as shouldUseInsecureTls, Q as injectAdvisorTool, Qt as cacheCopilotVersion, Rt as DEFAULT_CLAUDE_MODEL_FALLBACKS, S as fileLastPromptStore, St as resolveMcpToolTimeoutMs, T as repoFingerprint, Tt as createChatCompletions, U as toolbeltEnabled, Ut as UPSTREAM_INACTIVITY_TIMEOUT_MS, V as availableToolCommands, Vt as DEFAULT_PORT, W as toolbeltSkipSet, Wt as generateRandomPort, X as ADVISOR_TOOL_INSTRUCTIONS, Xt as setupGitHubToken, Y as ADVISOR_INTERNAL_TOOL_NAME, Yt as setupGitHubAgentToken, Z as buildAdvisorStream, Zt as tryRefreshAndRetry, _ as stopGateId, _t as workerToolsEnabled, a as buildPeerAwarenessSnippet, an as sleep, at as relayAnthropicStream, b as fileBaselineStore, bt as getTokenCount, c as buildArtifactOpenHookCommand, cn as HTTPError, ct as agentToolsEnabled, d as captureLaunchBaseline, dn as copilotBaseUrl, dt as browserCompoundToolsEnabled, en as cacheVSCodeVersion, et as buildAnthropicErrorEvent, f as decideStopHook, fn as copilotHeaders, ft as browserToolsEnabled, g as stopGateDisabled, gt as standInToolEnabled, h as launchBaselineKey, ht as implementerSubagentModel, i as buildAgentPrompt, in as resolveModel, it as readIteratorWithTimeout, j as resolveSealedGate, jt as provisionAndIndexColbert, k as trustRepo, kt as provisionBrowserAssets, l as buildSessionBindHookCommand, ln as forwardError, lt as artifactToolsEnabled, m as injectStopHookIntoSettingsFile, mn as state, mt as geminiAvailable, n as MCP_GROUPS, nn as isNullish, nt as isControllerClosedError, o as buildPeerAwarenessSummary, on as getModels, ot as handleMcpDelete, p as fileBlockBudget, pn as githubHeaders, pt as fleetToolsEnabled, q as assetFor, qt as withInstallLock, r as assertMcpToolSurfaceConsistent, rn as resolveCodexModel, rt as logStreamError, s as personasFor, sn as fetchWithTransientRetry, st as handleMcpPost, t as GROUP_META, tn as filterBetaHeader, tt as buildOpenAIErrorEvent, u as buildStopHookCommand, un as GITHUB_API_BASE_URL, ut as browseAgentEnabled, v as stopGatePlanMode, vt as countTokens, w as isSubagentContext, wt as createResponses, x as fileFindingsStore, xt as assembleResponsesPayload, y as stopReviewEnabled, yt as createMessages, zt as DEFAULT_CODEX_MODEL } from "./peer-mcp-personas-BCGYWok0.js";
2
+ import { $ as isAdvisorRequested, $t as cacheModels, A as liveExec, At as hasSupportedBrowserInstalled, Bt as DEFAULT_CODEX_MODEL_FALLBACKS, C as fileReviewDebounce, Ct as pickEndpoint, D as stopGateEnabledForRepo, Dt as readResponseBodyCapped, E as repoRoot, Et as MAX_RESPONSE_BODY_BYTES, Ft as ArtifactClient, G as vscodeRipgrepPath, Gt as pickClaudeDefault, H as buildToolbeltAwareness, Ht as UPSTREAM_FETCH_TIMEOUT_MS, It as collapsePathKeys, J as searchWeb, Jt as setupCopilotToken, K as TOOLBELT_TOOLS, Kt as getPackageVersion, Lt as toolbeltPathOverride, Mt as extractTarGzMember, Nt as extractZipMember, O as stopReviewStateDir, Ot as parseJsonOrDiagnose, Pt as shouldUseInsecureTls, Q as injectAdvisorTool, Qt as cacheCopilotVersion, Rt as DEFAULT_CLAUDE_MODEL_FALLBACKS, S as fileLastPromptStore, St as resolveMcpToolTimeoutMs, T as repoFingerprint, Tt as createChatCompletions, U as toolbeltEnabled, Ut as UPSTREAM_INACTIVITY_TIMEOUT_MS, V as availableToolCommands, Vt as DEFAULT_PORT, W as toolbeltSkipSet, Wt as generateRandomPort, X as ADVISOR_TOOL_INSTRUCTIONS, Xt as setupGitHubToken, Y as ADVISOR_INTERNAL_TOOL_NAME, Yt as setupGitHubAgentToken, Z as buildAdvisorStream, Zt as tryRefreshAndRetry, _ as stopGateId, _t as workerToolsEnabled, a as buildPeerAwarenessSnippet, an as sleep, at as relayAnthropicStream, b as fileBaselineStore, bt as getTokenCount, c as buildArtifactOpenHookCommand, cn as HTTPError, ct as agentToolsEnabled, d as captureLaunchBaseline, dn as copilotBaseUrl, dt as browserCompoundToolsEnabled, en as cacheVSCodeVersion, et as buildAnthropicErrorEvent, f as decideStopHook, fn as copilotHeaders, ft as browserToolsEnabled, g as stopGateDisabled, gt as standInToolEnabled, h as launchBaselineKey, ht as implementerSubagentModel, i as buildAgentPrompt, in as resolveModel, it as readIteratorWithTimeout, j as resolveSealedGate, jt as provisionAndIndexColbert, k as trustRepo, kt as provisionBrowserAssets, l as buildSessionBindHookCommand, ln as forwardError, lt as artifactToolsEnabled, m as injectStopHookIntoSettingsFile, mn as state, mt as geminiAvailable, n as MCP_GROUPS, nn as isNullish, nt as isControllerClosedError, o as buildPeerAwarenessSummary, on as getModels, ot as handleMcpDelete, p as fileBlockBudget, pn as githubHeaders, pt as fleetToolsEnabled, q as assetFor, qt as withInstallLock, r as assertMcpToolSurfaceConsistent, rn as resolveCodexModel, rt as logStreamError, s as personasFor, sn as fetchWithTransientRetry, st as handleMcpPost, t as GROUP_META, tn as filterBetaHeader, tt as buildOpenAIErrorEvent, u as buildStopHookCommand, un as GITHUB_API_BASE_URL, ut as browseAgentEnabled, v as stopGatePlanMode, vt as countTokens, w as isSubagentContext, wt as createResponses, x as fileFindingsStore, xt as assembleResponsesPayload, y as stopReviewEnabled, yt as createMessages, zt as DEFAULT_CODEX_MODEL } from "./peer-mcp-personas-BKkdfOyK.js";
3
3
  import { a as removeOwnClaudeConfigMirror, i as isUnderClaudeConfigMirror, l as writeArtifactCredsToMirror, n as ensureClaudeConfigMirror, r as ensurePaths, t as PATHS, u as writeRuntimeFileSecure } from "./paths-CTlT1nTo.js";
4
4
  import { c as killManagedTree, d as runCommandCapture, f as runCommandVoid, l as parseBoolEnv, s as killChildProcessTree, u as resolveExecutable } from "./lifecycle-ChPBRt6K.js";
5
5
  import { a as sweepRegistry } from "./lifecycle-BUXxiltc.js";
@@ -1137,16 +1137,16 @@ function buildCoordinatorAgent(opts) {
1137
1137
  "",
1138
1138
  "The lead's brief will include an artifact (plan, design, diff, or code) and a goal (e.g. 'review before exit-plan', 'review the commit I just made', 'cross-check codex-critic's verdict'). Pick the right peers for the artifact type:",
1139
1139
  "",
1140
- "- **Plan / design / architecture choice** → fan out to `codex-critic` (gpt-5.5, strongest reasoning, cross-lab)" + (opts.geminiAvailable ? " AND `gemini-critic` (third-lab triangulation, strong on formal reasoning) in parallel" : "") + ". codex-reviewer is the wrong tool for plans (it's a code-specialist, not an architecture critic).",
1140
+ "- **Plan / design / architecture choice** → fan out to `codex-critic` (gpt-5.6-sol, strongest reasoning, cross-lab)" + (opts.geminiAvailable ? " AND `gemini-critic` (third-lab triangulation, strong on formal reasoning) in parallel" : "") + ". codex-reviewer is the wrong tool for plans (it's a code-specialist, not an architecture critic).",
1141
1141
  "- **Concrete diff or single file** → fan out to `codex-reviewer` (gpt-5.3-codex, line-level code specialist, fastest at ~16s)" + (opts.geminiAvailable ? " AND `gemini-reviewer` (gemini-3.1-pro, second-lab line-level review)" : "") + (opts.geminiAvailable ? " AND `gemini-critic` for cross-lab triangulation" : "") + ". For very small changes (<20 lines), one `codex-reviewer` call is enough.",
1142
- "- **Large artifact** → the only peers that take a large artifact WHOLE are `codex-critic` (gpt-5.5, ≈922K-token input window) and `opus-critic` (Opus-4.7-1M, ≈936K-token input on enterprise catalogs; ≈168K otherwise). Route the full artifact to those for cross-lab coverage. `codex-reviewer` (≈272K) and `gemini-critic` (≈136K) have small windows — see Decomposition below: never summarize or downsize the request to squeeze a large artifact into a small-window peer.",
1142
+ "- **Large artifact** → the only peers that take a large artifact WHOLE are `codex-critic` (gpt-5.6-sol, ≈1M-token input window) and `opus-critic` (Opus-4.7-1M, ≈936K-token input on enterprise catalogs; ≈168K otherwise). Route the full artifact to those for cross-lab coverage. `codex-reviewer` (≈272K) and `gemini-critic` (≈136K) have small windows — see Decomposition below: never summarize or downsize the request to squeeze a large artifact into a small-window peer.",
1143
1143
  "- **Formal reasoning, proofs, or invariants** → prefer `gemini-critic`" + (opts.geminiAvailable ? " (gemini-3.1-pro, strong on math and formally-stated properties)" : " (NOT REGISTERED in this session — gemini-3.x not in catalog)") + ".",
1144
1144
  "- **Tie-breaker after codex-critic has weighed in** → call `gemini-critic`" + (opts.geminiAvailable ? "" : " (NOT REGISTERED in this session)") + " or `opus-critic` with the artifact AND codex-critic's verdict for cross-check.",
1145
1145
  "- **Fast sanity check** → `opus-critic` (~22s, same lab as lead but fresh context — catches confabulation and motivated reasoning).",
1146
1146
  "",
1147
1147
  "## Decomposition for large artifacts",
1148
1148
  "",
1149
- "Route by the peer's real PROMPT WINDOW (input tokens): `codex-critic` gpt-5.5922K · `opus-critic` Opus-4.7-1M ≈936K (enterprise catalogs; ≈168K otherwise) · `codex-reviewer` gpt-5.3-codex ≈272K · `gemini-critic` gemini-3.1-pro ≈136K. The proxy REJECTS (with an actionable message) any single call whose brief exceeds the target peer's window — it will NOT silently truncate, because dropping lines from a review artifact is worse than a clear error. So: send the full artifact only to peers whose window fits it (large artifacts → `codex-critic` and/or `opus-critic`). When a peer's window is too small (commonly `gemini-critic` at ≈136K, or `codex-reviewer` at ≈272K), do NOT summarize or downsize the request to include it — either skip that peer, or split the artifact into 2-4 logical batches BY CONCERN (not by raw size — semantic batches give better per-batch reviews) that each fit, and call in parallel. Use the big-window peers for the whole and reserve a small-window peer like gemini for the concerns it can actually hold. The proxy's MCP cap allows up to 8 in-flight calls. Aggregate findings yourself before reporting back. (Separately, on the JSON transport a per-effort `predictedTooLong` byte cap still guards the ~60s tools/call timeout for non-SSE clients; Claude Code uses SSE, which streams with heartbeats and isn't subject to that cap.)",
1149
+ "Route by the peer's real PROMPT WINDOW (input tokens): `codex-critic` gpt-5.6-sol1M · `opus-critic` Opus-4.7-1M ≈936K (enterprise catalogs; ≈168K otherwise) · `codex-reviewer` gpt-5.3-codex ≈272K · `gemini-critic` gemini-3.1-pro ≈136K. The proxy REJECTS (with an actionable message) any single call whose brief exceeds the target peer's window — it will NOT silently truncate, because dropping lines from a review artifact is worse than a clear error. So: send the full artifact only to peers whose window fits it (large artifacts → `codex-critic` and/or `opus-critic`). When a peer's window is too small (commonly `gemini-critic` at ≈136K, or `codex-reviewer` at ≈272K), do NOT summarize or downsize the request to include it — either skip that peer, or split the artifact into 2-4 logical batches BY CONCERN (not by raw size — semantic batches give better per-batch reviews) that each fit, and call in parallel. Use the big-window peers for the whole and reserve a small-window peer like gemini for the concerns it can actually hold. The proxy's MCP cap allows up to 8 in-flight calls. Aggregate findings yourself before reporting back. (Separately, on the JSON transport a per-effort `predictedTooLong` byte cap still guards the ~60s tools/call timeout for non-SSE clients; Claude Code uses SSE, which streams with heartbeats and isn't subject to that cap.)",
1150
1150
  "",
1151
1151
  "## Aggregation contract",
1152
1152
  "",
@@ -1206,7 +1206,7 @@ function buildPeerAgentDefinitions(opts) {
1206
1206
  geminiAvailable: opts.geminiAvailable
1207
1207
  });
1208
1208
  if (opts.implementerModel && opts.implementerModel.length > 0) out.implementer = {
1209
- description: "Bounded implementation subagent running gpt-5.5 (strong non-Claude coder, high reasoning). Use for well-scoped coding tasks — edits, small features, fixes — you want implemented in an integrated subagent. Model is overridable at spawn.",
1209
+ description: `Bounded implementation subagent running ${opts.implementerModel} (strong non-Claude coder, high reasoning). Use for well-scoped coding tasks — edits, small features, fixes — you want implemented in an integrated subagent. Model is overridable at spawn.`,
1210
1210
  prompt: "You are a bounded implementation subagent for well-scoped coding tasks. Implement the requested change surgically, matching the surrounding code style and minimizing unrelated churn. Use the dedicated Edit/Write/Read tools for file changes and Grep/Glob for search; reserve Bash for running builds, tests, and git — do not shell out (sed/awk/python/here-docs) to read or edit files. Verify with the project's build or tests where applicable. Do the work yourself — do not spawn further subagents. Report exactly what changed and any risks.",
1211
1211
  model: opts.implementerModel
1212
1212
  };
@@ -1787,7 +1787,7 @@ async function callMcpTool(opts) {
1787
1787
  };
1788
1788
  }
1789
1789
  /**
1790
- * One non-streaming gpt-5.5 (or any model id) inference via `/v1/responses`.
1790
+ * One non-streaming gpt-5.6-sol (or any model id) inference via `/v1/responses`.
1791
1791
  * Returns the assistant text (possibly empty). Throws on transport/HTTP/parse
1792
1792
  * failure. `effort` maps to the Responses `reasoning.effort` knob.
1793
1793
  */
@@ -2556,7 +2556,7 @@ async function discoverGateCommands(cwd, opts) {
2556
2556
  if (files.length === 0) return null;
2557
2557
  let result;
2558
2558
  try {
2559
- const { runWorkerAgent } = await import("./engine-cUomEg92.js");
2559
+ const { runWorkerAgent } = await import("./engine-BWoDQ-3C.js");
2560
2560
  result = await runWorkerAgent({
2561
2561
  mode: "explore",
2562
2562
  workspace: root,
@@ -2622,14 +2622,14 @@ function decidePromptSubmit(input) {
2622
2622
  * concluding. Mirrors the v1 advisory tone: additive, never blocking.
2623
2623
  */
2624
2624
  const PROMPT_SEARCH_TIP = "TIP (advisory): when this task needs code context, search lexical + semantic in parallel — one `mcp__search__code` call with mode:\"lexical\" and one with mode:\"semantic\", issued in the same turn — before concluding.";
2625
- /** System prompt for the single gpt-5.5 scope/goal inference. Steers a SHORT,
2625
+ /** System prompt for the single gpt-5.6-sol scope/goal inference. Steers a SHORT,
2626
2626
  * user-derived (not invented) advisory note grounded in the search results. */
2627
2627
  const PROMPT_SCOPE_SYSTEM = "You are a scoping assistant for a coding agent about to act on a user's request. You are given the user's request and the results of a lexical + semantic code search over the relevant repository. Produce a SHORT advisory note (<= 120 words), plain text only:\n1. SCOPE: one line — is this trivial, focused (one area), or large/cross-cutting — grounded in what the search surfaced (reference the most relevant file(s) by name).\n2. GOAL: restate the user's OWN ask as a single measurable objective, in THEIR terms. Do NOT invent new requirements or acceptance criteria beyond what they asked.\n3. Only if the task is large/cross-cutting, add a final line: \"Consider /gh-research first to saturate understanding, then /gh-orchestrate to compose a floor-raising workflow.\" Omit it for a focused or trivial task.\nThis is advisory — the agent decides whether to follow it. Be concrete and concise; no preamble.";
2628
2628
  /** Max chars of each search-result blob fed into the scope inference. */
2629
2629
  const SEARCH_CONTEXT_CAP = 6 * 1024;
2630
2630
  /** Wrap the prior-turn review findings in an explicitly NON-AUTHORITATIVE frame. */
2631
2631
  function framePendingFindings(findings) {
2632
- return "ADVISORY — independent review of your PREVIOUS change (NON-AUTHORITATIVE): an independent gpt-5.5 reviewer flagged the following. Evaluate each on its merits — fix the real ones, and ignore any wrong one with a one-line reason. You are NOT obligated to act on these.\n" + findings.trim();
2632
+ return "ADVISORY — independent review of your PREVIOUS change (NON-AUTHORITATIVE): an independent gpt-5.6-sol reviewer flagged the following. Evaluate each on its merits — fix the real ones, and ignore any wrong one with a one-line reason. You are NOT obligated to act on these.\n" + findings.trim();
2633
2633
  }
2634
2634
  function joinSections(sections) {
2635
2635
  return sections.map((s) => s.trim()).filter((s) => s.length > 0).join("\n\n");
@@ -2643,7 +2643,7 @@ function joinSections(sections) {
2643
2643
  * - subagent/teammate -> empty (top-level only, like v1).
2644
2644
  * - findings -> always surfaced (+ cleared) regardless of triviality.
2645
2645
  * - trivial prompt -> findings only (no search tip, no model call).
2646
- * - substantive prompt -> static search tip + parallel lexical+semantic search -> ONE gpt-5.5 call
2646
+ * - substantive prompt -> static search tip + parallel lexical+semantic search -> ONE gpt-5.6-sol call
2647
2647
  * -> grounded scope/goal note. Fail-open to PROMPT_STEER_GOAL.
2648
2648
  * - steerEnabled=false -> findings only (no goal/tip).
2649
2649
  */
@@ -4716,7 +4716,7 @@ function initProxyFromEnv() {
4716
4716
  //#endregion
4717
4717
  //#region package.json
4718
4718
  var name = "github-router";
4719
- var version$1 = "0.3.175";
4719
+ var version$1 = "0.3.176";
4720
4720
 
4721
4721
  //#endregion
4722
4722
  //#region src/lib/approval.ts
@@ -8062,6 +8062,10 @@ function parseSharedArgs(args) {
8062
8062
  * 1M/400k window, never overflows). See `seedGatewayModelCache`.
8063
8063
  */
8064
8064
  const NATIVE_NON_CLAUDE_MODELS = [
8065
+ {
8066
+ id: "gpt-5.6-sol",
8067
+ displayName: "GPT-5.6 Sol"
8068
+ },
8065
8069
  {
8066
8070
  id: "gpt-5.5",
8067
8071
  displayName: "GPT-5.5"
@@ -8784,13 +8788,10 @@ const codex = defineCommand({
8784
8788
  if (codexModel !== requestedModel) consola.info(`Model "${requestedModel}" resolved to "${codexModel}"`);
8785
8789
  if (usingDefault && state.models) {
8786
8790
  const inCache = (id) => state.models?.data.some((m) => m.id === id) ?? false;
8787
- if (!inCache(codexModel)) for (const fallback of DEFAULT_CODEX_MODEL_FALLBACKS) {
8788
- const resolved = resolveCodexModel(fallback);
8789
- if (inCache(resolved)) {
8790
- consola.info(`Default model "${codexModel}" not in your Copilot model list; falling back to "${resolved}".`);
8791
- codexModel = resolved;
8792
- break;
8793
- }
8791
+ const firstPresent = [DEFAULT_CODEX_MODEL, ...DEFAULT_CODEX_MODEL_FALLBACKS].map((id) => resolveModel(id)).find((id) => inCache(id));
8792
+ if (firstPresent) {
8793
+ if (firstPresent !== codexModel) consola.info(`Default model "${DEFAULT_CODEX_MODEL}" not in your Copilot model list; falling back to "${firstPresent}".`);
8794
+ codexModel = firstPresent;
8794
8795
  }
8795
8796
  }
8796
8797
  const modelEntry = state.models?.data.find((m) => m.id === codexModel);
@@ -8955,7 +8956,7 @@ const internalPromptSubmit = defineCommand({
8955
8956
  },
8956
8957
  infer: (system, user, signal) => callInference({
8957
8958
  serverUrl: runtime.serverUrl,
8958
- model: "gpt-5.5",
8959
+ model: "gpt-5.6-sol",
8959
8960
  instructions: system,
8960
8961
  input: user,
8961
8962
  effort: "low",
@@ -9688,7 +9689,7 @@ THE DIFF:
9688
9689
  const internalStopReview = defineCommand({
9689
9690
  meta: {
9690
9691
  name: "internal-stop-review",
9691
- description: "Internal: the detached, advisory background reviewer. Reads a JSON payload on stdin, runs a read-only gpt-5.5 review of the working tree against the user's ask, and writes advisory findings for the next prompt to surface. Never blocks anything."
9692
+ description: "Internal: the detached, advisory background reviewer. Reads a JSON payload on stdin, runs a read-only gpt-5.6-sol review of the working tree against the user's ask, and writes advisory findings for the next prompt to surface. Never blocks anything."
9692
9693
  },
9693
9694
  async run() {
9694
9695
  try {
@@ -9717,7 +9718,7 @@ const internalStopReview = defineCommand({
9717
9718
  transcriptPath: typeof payload.transcript_path === "string" ? payload.transcript_path : ""
9718
9719
  }),
9719
9720
  workspace: cwd,
9720
- model: "gpt-5.5",
9721
+ model: "gpt-5.6-sol",
9721
9722
  thinking: "high"
9722
9723
  },
9723
9724
  timeoutMs: REVIEW_TIMEOUT_MS