github-router 0.3.175 → 0.3.177
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 +5 -5
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/{engine-cUomEg92.js → engine-DOOYh35O.js} +4 -4
- package/dist/{lifecycle-L7Y7RJl4.js → lifecycle-ClliSC-c.js} +2 -2
- package/dist/{lifecycle-BAug_A5A.js → lifecycle-D0n3hXUT.js} +2 -2
- package/dist/{lifecycle-ChPBRt6K.js → lifecycle-DrDEjx_c.js} +2 -2
- package/dist/{lifecycle-ChPBRt6K.js.map → lifecycle-DrDEjx_c.js.map} +1 -1
- package/dist/{lifecycle-BUXxiltc.js → lifecycle-Dvr3pGGG.js} +2 -2
- package/dist/{lifecycle-BUXxiltc.js.map → lifecycle-Dvr3pGGG.js.map} +1 -1
- package/dist/main.js +54 -34
- package/dist/main.js.map +1 -1
- package/dist/{paths-CTlT1nTo.js → paths-BZPgxKUl.js} +10 -10
- package/dist/{paths-CTlT1nTo.js.map → paths-BZPgxKUl.js.map} +1 -1
- package/dist/paths-CDYvyApX.js +3 -0
- package/dist/{peer-mcp-personas-BCGYWok0.js → peer-mcp-personas-BtQi-dF-.js} +112 -61
- package/dist/peer-mcp-personas-BtQi-dF-.js.map +1 -0
- package/package.json +1 -1
- package/dist/paths-DN3O54iE.js +0 -3
- package/dist/peer-mcp-personas-BCGYWok0.js.map +0 -1
package/dist/main.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { $ as isAdvisorRequested, $t as
|
|
3
|
-
import { a as
|
|
4
|
-
import { c as killManagedTree, d as runCommandCapture, f as runCommandVoid, l as parseBoolEnv, s as killChildProcessTree, u as resolveExecutable } from "./lifecycle-
|
|
5
|
-
import { a as sweepRegistry } from "./lifecycle-
|
|
2
|
+
import { $ as isAdvisorRequested, $t as cacheCopilotVersion, A as liveExec, At as provisionBrowserAssets, Bt as DEFAULT_CODEX_MODEL, C as fileReviewDebounce, Ct as resolveMcpToolTimeoutMs, D as stopGateEnabledForRepo, Dt as MAX_RESPONSE_BODY_BYTES, E as repoRoot, Et as createChatCompletions, Ft as shouldUseInsecureTls, G as vscodeRipgrepPath, Gt as generateRandomPort, H as buildToolbeltAwareness, Ht as DEFAULT_PORT, It as ArtifactClient, J as searchWeb, Jt as withInstallLock, K as TOOLBELT_TOOLS, Kt as pickClaudeDefault, Lt as collapsePathKeys, Mt as provisionAndIndexColbert, Nt as extractTarGzMember, O as stopReviewStateDir, Ot as readResponseBodyCapped, Pt as extractZipMember, Q as injectAdvisorTool, Qt as tryRefreshAndRetry, Rt as toolbeltPathOverride, S as fileLastPromptStore, St as assembleResponsesPayload, T as repoFingerprint, Tt as createResponses, U as toolbeltEnabled, Ut as UPSTREAM_FETCH_TIMEOUT_MS, V as availableToolCommands, Vt as DEFAULT_CODEX_MODEL_FALLBACKS, W as toolbeltSkipSet, Wt as UPSTREAM_INACTIVITY_TIMEOUT_MS, X as ADVISOR_TOOL_INSTRUCTIONS, Xt as setupGitHubAgentToken, Y as ADVISOR_INTERNAL_TOOL_NAME, Yt as setupCopilotToken, Z as buildAdvisorStream, Zt as setupGitHubToken, _ as stopGateId, _t as workerToolsEnabled, a as buildPeerAwarenessSnippet, an as resolveModel, at as relayAnthropicStream, b as fileBaselineStore, bt as createMessages, c as buildArtifactOpenHookCommand, cn as fetchWithTransientRetry, ct as agentToolsEnabled, d as captureLaunchBaseline, dn as GITHUB_API_BASE_URL, dt as browserCompoundToolsEnabled, en as cacheModels, et as buildAnthropicErrorEvent, f as decideStopHook, fn as copilotBaseUrl, ft as browserToolsEnabled, g as stopGateDisabled, gt as standInToolEnabled, h as launchBaselineKey, hn as state, ht as nativeSubagentModel, i as buildAgentPrompt, in as resolveCodexModel, it as readIteratorWithTimeout, j as resolveSealedGate, jt as hasSupportedBrowserInstalled, k as trustRepo, kt as parseJsonOrDiagnose, l as buildSessionBindHookCommand, ln as HTTPError, lt as artifactToolsEnabled, m as injectStopHookIntoSettingsFile, mn as githubHeaders, mt as geminiAvailable, n as MCP_GROUPS, nn as filterBetaHeader, nt as isControllerClosedError, o as buildPeerAwarenessSummary, on as sleep, ot as handleMcpDelete, p as fileBlockBudget, pn as copilotHeaders, pt as fleetToolsEnabled, q as assetFor, qt as getPackageVersion, r as assertMcpToolSurfaceConsistent, rn as isNullish, rt as logStreamError, s as personasFor, sn as getModels, st as handleMcpPost, t as GROUP_META, tn as cacheVSCodeVersion, tt as buildOpenAIErrorEvent, u as buildStopHookCommand, un as forwardError, ut as browseAgentEnabled, v as stopGatePlanMode, vt as shimDefaultsToXhigh, w as isSubagentContext, wt as pickEndpoint, x as fileFindingsStore, xt as getTokenCount, y as stopReviewEnabled, yt as countTokens, zt as DEFAULT_CLAUDE_MODEL_FALLBACKS } from "./peer-mcp-personas-BtQi-dF-.js";
|
|
3
|
+
import { a as isUnderClaudeConfigMirror, d as writeRuntimeFileSecure, i as ensurePaths, o as removeOwnClaudeConfigMirror, r as ensureClaudeConfigMirror, t as PATHS, u as writeArtifactCredsToMirror } from "./paths-BZPgxKUl.js";
|
|
4
|
+
import { c as killManagedTree, d as runCommandCapture, f as runCommandVoid, l as parseBoolEnv, s as killChildProcessTree, u as resolveExecutable } from "./lifecycle-DrDEjx_c.js";
|
|
5
|
+
import { a as sweepRegistry } from "./lifecycle-Dvr3pGGG.js";
|
|
6
6
|
import { defineCommand, runMain } from "citty";
|
|
7
7
|
import consola from "consola";
|
|
8
8
|
import { createHash, randomBytes, randomUUID } from "node:crypto";
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
1149
|
+
"Route by the peer's real PROMPT WINDOW (input tokens): `codex-critic` gpt-5.6-sol ≈1M · `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
|
"",
|
|
@@ -1205,10 +1205,22 @@ function buildPeerAgentDefinitions(opts) {
|
|
|
1205
1205
|
codexCli: opts.codexCli,
|
|
1206
1206
|
geminiAvailable: opts.geminiAvailable
|
|
1207
1207
|
});
|
|
1208
|
-
|
|
1209
|
-
|
|
1208
|
+
const nativeModel = opts.nativeSubagentModel && opts.nativeSubagentModel.length > 0 ? opts.nativeSubagentModel : void 0;
|
|
1209
|
+
const modelField = nativeModel ? { model: nativeModel } : {};
|
|
1210
|
+
out.implementer = {
|
|
1211
|
+
description: nativeModel ? `Bounded implementation subagent running ${nativeModel} (strong non-Claude coder, maximum reasoning). Use proactively for well-scoped coding tasks — edits, small features, fixes — to keep the lead's context focused; runs in its own context. Model is overridable at spawn.` : `Bounded implementation subagent (native tools, runs on the lead's model in its own context). Use proactively for well-scoped coding tasks — edits, small features, fixes — to keep the lead's context focused. Model is overridable at spawn.`,
|
|
1210
1212
|
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
|
-
|
|
1213
|
+
...modelField
|
|
1214
|
+
};
|
|
1215
|
+
out.debugger = {
|
|
1216
|
+
description: nativeModel ? `Root-cause & debugging subagent running ${nativeModel} at maximum reasoning. Use proactively for reproducing a bug end to end, isolating the true root cause, and proposing a minimal fix — investigation-heavy work best kept off the lead's context; runs in its own context. Model is overridable at spawn.` : `Root-cause & debugging subagent (native tools, runs on the lead's model in its own context). Use proactively for reproducing a bug end to end, isolating the true root cause, and proposing a minimal fix — kept off the lead's context. Model is overridable at spawn.`,
|
|
1217
|
+
prompt: "You are a root-cause debugging subagent. Reproduce the failure end to end first — as close to how a real user hits it as you can — before theorizing. Form hypotheses and test them against the actual code and runtime: read the code, run the repro with Bash, and add temporary instrumentation only if needed (remove it after). Identify the true root cause, not a symptom; if a fix is in scope, make it minimal and verify the repro now passes. Use the dedicated Edit/Write/Read tools for file changes and Grep/Glob for search; reserve Bash for running repros, tests, and git — do not shell out (sed/awk/python/here-docs) to read or edit files. Do the work yourself — do not spawn further subagents. Report the root cause with evidence, the fix (if any), and any residual risks.",
|
|
1218
|
+
...modelField
|
|
1219
|
+
};
|
|
1220
|
+
out["qa-engineer"] = {
|
|
1221
|
+
description: nativeModel ? `Review, testing & QA subagent running ${nativeModel} at maximum reasoning. Use proactively to review a change for correctness, author and run tests that try to break it, and give a severity-ranked go/no-go while keeping the lead's context focused; runs in its own context. Model is overridable at spawn.` : `Review, testing & QA subagent (native tools, runs on the lead's model in its own context). Use proactively to review a change for correctness, author and run tests that try to break it, and give a severity-ranked go/no-go. Model is overridable at spawn.`,
|
|
1222
|
+
prompt: "You are a review, testing, and QA subagent. Verify correctness against the ACTUAL code by reading it — never assume. Where the change warrants it, author tests that try to BREAK the implementation (edge cases, error paths, and the acceptance criteria as executable checks), then run them and report which pass and which fail; do NOT modify production code just to make tests pass. 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. Do the work yourself — do not spawn further subagents. Report severity-ranked findings with `file:line` citations and end with a clear go/no-go.",
|
|
1223
|
+
...modelField
|
|
1212
1224
|
};
|
|
1213
1225
|
if (opts.workerToolsAvailable) {
|
|
1214
1226
|
const workersKey = workersKeyOf(opts.groupKeys);
|
|
@@ -1506,7 +1518,7 @@ async function writePeerMcpRuntimeFiles(serverUrl, opts) {
|
|
|
1506
1518
|
groupKeys: opts.groupKeys,
|
|
1507
1519
|
workerToolsAvailable: opts.workerToolsAvailable,
|
|
1508
1520
|
browseAvailable: opts.browseAvailable,
|
|
1509
|
-
|
|
1521
|
+
nativeSubagentModel: opts.nativeSubagentModel,
|
|
1510
1522
|
nonce,
|
|
1511
1523
|
codexHome
|
|
1512
1524
|
});
|
|
@@ -1787,7 +1799,7 @@ async function callMcpTool(opts) {
|
|
|
1787
1799
|
};
|
|
1788
1800
|
}
|
|
1789
1801
|
/**
|
|
1790
|
-
* One non-streaming gpt-5.
|
|
1802
|
+
* One non-streaming gpt-5.6-sol (or any model id) inference via `/v1/responses`.
|
|
1791
1803
|
* Returns the assistant text (possibly empty). Throws on transport/HTTP/parse
|
|
1792
1804
|
* failure. `effort` maps to the Responses `reasoning.effort` knob.
|
|
1793
1805
|
*/
|
|
@@ -2556,7 +2568,7 @@ async function discoverGateCommands(cwd, opts) {
|
|
|
2556
2568
|
if (files.length === 0) return null;
|
|
2557
2569
|
let result;
|
|
2558
2570
|
try {
|
|
2559
|
-
const { runWorkerAgent } = await import("./engine-
|
|
2571
|
+
const { runWorkerAgent } = await import("./engine-DOOYh35O.js");
|
|
2560
2572
|
result = await runWorkerAgent({
|
|
2561
2573
|
mode: "explore",
|
|
2562
2574
|
workspace: root,
|
|
@@ -2622,14 +2634,14 @@ function decidePromptSubmit(input) {
|
|
|
2622
2634
|
* concluding. Mirrors the v1 advisory tone: additive, never blocking.
|
|
2623
2635
|
*/
|
|
2624
2636
|
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.
|
|
2637
|
+
/** System prompt for the single gpt-5.6-sol scope/goal inference. Steers a SHORT,
|
|
2626
2638
|
* user-derived (not invented) advisory note grounded in the search results. */
|
|
2627
2639
|
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
2640
|
/** Max chars of each search-result blob fed into the scope inference. */
|
|
2629
2641
|
const SEARCH_CONTEXT_CAP = 6 * 1024;
|
|
2630
2642
|
/** Wrap the prior-turn review findings in an explicitly NON-AUTHORITATIVE frame. */
|
|
2631
2643
|
function framePendingFindings(findings) {
|
|
2632
|
-
return "ADVISORY — independent review of your PREVIOUS change (NON-AUTHORITATIVE): an independent gpt-5.
|
|
2644
|
+
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
2645
|
}
|
|
2634
2646
|
function joinSections(sections) {
|
|
2635
2647
|
return sections.map((s) => s.trim()).filter((s) => s.length > 0).join("\n\n");
|
|
@@ -2643,7 +2655,7 @@ function joinSections(sections) {
|
|
|
2643
2655
|
* - subagent/teammate -> empty (top-level only, like v1).
|
|
2644
2656
|
* - findings -> always surfaced (+ cleared) regardless of triviality.
|
|
2645
2657
|
* - trivial prompt -> findings only (no search tip, no model call).
|
|
2646
|
-
* - substantive prompt -> static search tip + parallel lexical+semantic search -> ONE gpt-5.
|
|
2658
|
+
* - substantive prompt -> static search tip + parallel lexical+semantic search -> ONE gpt-5.6-sol call
|
|
2647
2659
|
* -> grounded scope/goal note. Fail-open to PROMPT_STEER_GOAL.
|
|
2648
2660
|
* - steerEnabled=false -> findings only (no goal/tip).
|
|
2649
2661
|
*/
|
|
@@ -4716,7 +4728,7 @@ function initProxyFromEnv() {
|
|
|
4716
4728
|
//#endregion
|
|
4717
4729
|
//#region package.json
|
|
4718
4730
|
var name = "github-router";
|
|
4719
|
-
var version$1 = "0.3.
|
|
4731
|
+
var version$1 = "0.3.177";
|
|
4720
4732
|
|
|
4721
4733
|
//#endregion
|
|
4722
4734
|
//#region src/lib/approval.ts
|
|
@@ -5799,13 +5811,21 @@ function parseDisableParallelToolUse(toolChoice) {
|
|
|
5799
5811
|
if (!toolChoice || typeof toolChoice !== "object") return void 0;
|
|
5800
5812
|
return toolChoice.disable_parallel_tool_use === true ? false : void 0;
|
|
5801
5813
|
}
|
|
5802
|
-
/** Default absent Anthropic `thinking` to
|
|
5803
|
-
*
|
|
5804
|
-
*
|
|
5805
|
-
*
|
|
5814
|
+
/** Default absent Anthropic `thinking` to an effort, clamped by the model.
|
|
5815
|
+
* OpenAI-frontier shim models (gpt-5.6-sol/gpt-5.5) default to xhigh so the
|
|
5816
|
+
* native gpt-5.6-sol subagents (implementer/debugger/qa-engineer) and any
|
|
5817
|
+
* `-m gpt-5.6-sol` main-loop session reason at max when the client sends no
|
|
5818
|
+
* `thinking` block; every other shim model stays high. The
|
|
5819
|
+
* `supported.includes("xhigh")` guard makes the intent explicit rather than
|
|
5820
|
+
* trusting clampEffort to silently degrade. Opt out with
|
|
5821
|
+
* `GH_ROUTER_DISABLE_FRONTIER_XHIGH_DEFAULT=1`. Returns undefined for a model
|
|
5822
|
+
* that advertises NO `reasoning_effort` allowlist (may not support reasoning;
|
|
5823
|
+
* forcing an effort could 400). Note: an explicit client `thinking` budget is
|
|
5824
|
+
* handled by parseReasoningEffort and is NOT affected by this default. */
|
|
5806
5825
|
function defaultReasoningEffort(model) {
|
|
5807
5826
|
const supported = model?.capabilities?.supports?.reasoning_effort;
|
|
5808
|
-
|
|
5827
|
+
if (!(Array.isArray(supported) && supported.length > 0)) return void 0;
|
|
5828
|
+
return clampEffort(parseBoolEnv(process.env.GH_ROUTER_DISABLE_FRONTIER_XHIGH_DEFAULT) !== true && model?.id != null && shimDefaultsToXhigh(model.id) && supported.includes("xhigh") ? "xhigh" : "high", supported);
|
|
5809
5829
|
}
|
|
5810
5830
|
/**
|
|
5811
5831
|
* Map Anthropic `thinking` to a Responses reasoning effort, clamped to the
|
|
@@ -8062,6 +8082,10 @@ function parseSharedArgs(args) {
|
|
|
8062
8082
|
* 1M/400k window, never overflows). See `seedGatewayModelCache`.
|
|
8063
8083
|
*/
|
|
8064
8084
|
const NATIVE_NON_CLAUDE_MODELS = [
|
|
8085
|
+
{
|
|
8086
|
+
id: "gpt-5.6-sol",
|
|
8087
|
+
displayName: "GPT-5.6 Sol"
|
|
8088
|
+
},
|
|
8065
8089
|
{
|
|
8066
8090
|
id: "gpt-5.5",
|
|
8067
8091
|
displayName: "GPT-5.5"
|
|
@@ -8495,7 +8519,7 @@ const claude = defineCommand({
|
|
|
8495
8519
|
groupKeys,
|
|
8496
8520
|
workerToolsAvailable: workerToolsEnabled(),
|
|
8497
8521
|
browseAvailable: browseAgentEnabled(),
|
|
8498
|
-
|
|
8522
|
+
nativeSubagentModel: nativeSubagentModel()
|
|
8499
8523
|
});
|
|
8500
8524
|
state.peerMcpNonce = runtime.nonce;
|
|
8501
8525
|
envVars.GH_ROUTER_HOOK_MCP_URL = serverUrl;
|
|
@@ -8692,7 +8716,6 @@ const claude = defineCommand({
|
|
|
8692
8716
|
powerBrowseAvailable: state.powerBrowseEnabled,
|
|
8693
8717
|
fleetAvailable: fleetToolsEnabled(),
|
|
8694
8718
|
agentToolsAvailable: agentToolsEnabled(),
|
|
8695
|
-
implementerAvailable: implementerSubagentModel() != null,
|
|
8696
8719
|
groupKeys
|
|
8697
8720
|
});
|
|
8698
8721
|
peerAwarenessSnippet = peerSnippet;
|
|
@@ -8784,13 +8807,10 @@ const codex = defineCommand({
|
|
|
8784
8807
|
if (codexModel !== requestedModel) consola.info(`Model "${requestedModel}" resolved to "${codexModel}"`);
|
|
8785
8808
|
if (usingDefault && state.models) {
|
|
8786
8809
|
const inCache = (id) => state.models?.data.some((m) => m.id === id) ?? false;
|
|
8787
|
-
|
|
8788
|
-
|
|
8789
|
-
if (
|
|
8790
|
-
|
|
8791
|
-
codexModel = resolved;
|
|
8792
|
-
break;
|
|
8793
|
-
}
|
|
8810
|
+
const firstPresent = [DEFAULT_CODEX_MODEL, ...DEFAULT_CODEX_MODEL_FALLBACKS].map((id) => resolveModel(id)).find((id) => inCache(id));
|
|
8811
|
+
if (firstPresent) {
|
|
8812
|
+
if (firstPresent !== codexModel) consola.info(`Default model "${DEFAULT_CODEX_MODEL}" not in your Copilot model list; falling back to "${firstPresent}".`);
|
|
8813
|
+
codexModel = firstPresent;
|
|
8794
8814
|
}
|
|
8795
8815
|
}
|
|
8796
8816
|
const modelEntry = state.models?.data.find((m) => m.id === codexModel);
|
|
@@ -8955,7 +8975,7 @@ const internalPromptSubmit = defineCommand({
|
|
|
8955
8975
|
},
|
|
8956
8976
|
infer: (system, user, signal) => callInference({
|
|
8957
8977
|
serverUrl: runtime.serverUrl,
|
|
8958
|
-
model: "gpt-5.
|
|
8978
|
+
model: "gpt-5.6-sol",
|
|
8959
8979
|
instructions: system,
|
|
8960
8980
|
input: user,
|
|
8961
8981
|
effort: "low",
|
|
@@ -9688,7 +9708,7 @@ THE DIFF:
|
|
|
9688
9708
|
const internalStopReview = defineCommand({
|
|
9689
9709
|
meta: {
|
|
9690
9710
|
name: "internal-stop-review",
|
|
9691
|
-
description: "Internal: the detached, advisory background reviewer. Reads a JSON payload on stdin, runs a read-only gpt-5.
|
|
9711
|
+
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
9712
|
},
|
|
9693
9713
|
async run() {
|
|
9694
9714
|
try {
|
|
@@ -9717,7 +9737,7 @@ const internalStopReview = defineCommand({
|
|
|
9717
9737
|
transcriptPath: typeof payload.transcript_path === "string" ? payload.transcript_path : ""
|
|
9718
9738
|
}),
|
|
9719
9739
|
workspace: cwd,
|
|
9720
|
-
model: "gpt-5.
|
|
9740
|
+
model: "gpt-5.6-sol",
|
|
9721
9741
|
thinking: "high"
|
|
9722
9742
|
},
|
|
9723
9743
|
timeoutMs: REVIEW_TIMEOUT_MS
|