github-router 0.3.285 → 0.3.288
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 +8 -5
- package/dist/{attribution-settings-B8M2fvhz.js → attribution-settings-CofaqSzw.js} +44 -17
- package/dist/attribution-settings-CofaqSzw.js.map +1 -0
- package/dist/{auth-VUL2Zxvw.js → auth-DG4vh8-F.js} +3 -3
- package/dist/{auth-VUL2Zxvw.js.map → auth-DG4vh8-F.js.map} +1 -1
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/{check-usage-CcLdFPGr.js → check-usage-BqN7mBYv.js} +4 -4
- package/dist/{check-usage-CcLdFPGr.js.map → check-usage-BqN7mBYv.js.map} +1 -1
- package/dist/{claude-e-JIQGhR.js → claude-CoZKRNB8.js} +21 -16
- package/dist/claude-CoZKRNB8.js.map +1 -0
- package/dist/{codex-DSnVZ9oK.js → codex-y2OyLIdv.js} +5 -5
- package/dist/{codex-DSnVZ9oK.js.map → codex-y2OyLIdv.js.map} +1 -1
- package/dist/{debug-CtzYWxpJ.js → debug-B5TjPTTH.js} +2 -2
- package/dist/{debug-CtzYWxpJ.js.map → debug-B5TjPTTH.js.map} +1 -1
- package/dist/engine-B5nVGH4b.js +2 -0
- package/dist/{gate-discovery-BCFwLm0q.js → gate-discovery-LQZ-enJa.js} +5 -5
- package/dist/{gate-discovery-BCFwLm0q.js.map → gate-discovery-LQZ-enJa.js.map} +1 -1
- package/dist/{get-copilot-usage-B-EDAqQb.js → get-copilot-usage-BjA0nyGR.js} +2 -2
- package/dist/{get-copilot-usage-B-EDAqQb.js.map → get-copilot-usage-BjA0nyGR.js.map} +1 -1
- package/dist/{internal-artifact-open-Dj5Nlq0L.js → internal-artifact-open-BskmUpnb.js} +2 -2
- package/dist/{internal-artifact-open-Dj5Nlq0L.js.map → internal-artifact-open-BskmUpnb.js.map} +1 -1
- package/dist/{internal-first-mate-guard-DOgFVki5.js → internal-first-mate-guard-5XEHMaqy.js} +3 -3
- package/dist/{internal-first-mate-guard-DOgFVki5.js.map → internal-first-mate-guard-5XEHMaqy.js.map} +1 -1
- package/dist/{internal-first-mate-guard-B7p4NttK.js → internal-first-mate-guard-DHDQ6hFz.js} +1 -1
- package/dist/{internal-plan-review-DRFHET_B.js → internal-plan-review-BUuMx4ku.js} +3 -3
- package/dist/{internal-plan-review-DRFHET_B.js.map → internal-plan-review-BUuMx4ku.js.map} +1 -1
- package/dist/{internal-prompt-submit-f1LR2P2G.js → internal-prompt-submit-CQQ15xdO.js} +4 -4
- package/dist/{internal-prompt-submit-f1LR2P2G.js.map → internal-prompt-submit-CQQ15xdO.js.map} +1 -1
- package/dist/{internal-session-bind-DhZhxJ3T.js → internal-session-bind-D04W2yWI.js} +2 -2
- package/dist/{internal-session-bind-DhZhxJ3T.js.map → internal-session-bind-D04W2yWI.js.map} +1 -1
- package/dist/{internal-stop-hook-Cf-7w3RH.js → internal-stop-hook-DSbaDb_m.js} +5 -5
- package/dist/{internal-stop-hook-Cf-7w3RH.js.map → internal-stop-hook-DSbaDb_m.js.map} +1 -1
- package/dist/{internal-stop-review-BBsLcbPG.js → internal-stop-review-CdByyJLc.js} +2 -2
- package/dist/{internal-stop-review-BBsLcbPG.js.map → internal-stop-review-CdByyJLc.js.map} +1 -1
- package/dist/{internal-worker-guard-CKgYFiFO.js → internal-worker-guard-BIPN6Rv9.js} +2 -2
- package/dist/{internal-worker-guard-CKgYFiFO.js.map → internal-worker-guard-BIPN6Rv9.js.map} +1 -1
- package/dist/{internal-workspace-header-OYgHEnFt.js → internal-workspace-header-BKqejstG.js} +2 -2
- package/dist/{internal-workspace-header-OYgHEnFt.js.map → internal-workspace-header-BKqejstG.js.map} +1 -1
- package/dist/lifecycle-BTodQvn4.js +2 -0
- package/dist/lifecycle-C7JYNz-F.js +2 -0
- package/dist/{lifecycle-B7CHqKlF.js → lifecycle-DbM29FLK.js} +2 -2
- package/dist/{lifecycle-B7CHqKlF.js.map → lifecycle-DbM29FLK.js.map} +1 -1
- package/dist/{lifecycle-D-rL81tT.js → lifecycle-SXaWssN9.js} +2 -2
- package/dist/{lifecycle-D-rL81tT.js.map → lifecycle-SXaWssN9.js.map} +1 -1
- package/dist/main.js +17 -17
- package/dist/{mcp-workspace-header-ucs2SDST.js → mcp-workspace-header-DRCCWlOi.js} +2 -2
- package/dist/{mcp-workspace-header-ucs2SDST.js.map → mcp-workspace-header-DRCCWlOi.js.map} +1 -1
- package/dist/{models-C16mBK2M.js → models-Dz8d_SnI.js} +3 -3
- package/dist/{models-C16mBK2M.js.map → models-Dz8d_SnI.js.map} +1 -1
- package/dist/{orchestration-CtM6FYNx.js → orchestration-BrJwZxMN.js} +2 -2
- package/dist/{orchestration-CtM6FYNx.js.map → orchestration-BrJwZxMN.js.map} +1 -1
- package/dist/paths-CTr59UC6.js +2 -0
- package/dist/{paths-wLC0InjX.js → paths-D7_SAaIQ.js} +4 -4
- package/dist/{paths-wLC0InjX.js.map → paths-D7_SAaIQ.js.map} +1 -1
- package/dist/{peer-mcp-personas-V6stFvpq.js → peer-mcp-personas-B5Wp6wIn.js} +150 -36
- package/dist/peer-mcp-personas-B5Wp6wIn.js.map +1 -0
- package/dist/{plan-review-hook-Lf9ISdF6.js → plan-review-hook-CVZsG9MZ.js} +3 -3
- package/dist/{plan-review-hook-Lf9ISdF6.js.map → plan-review-hook-CVZsG9MZ.js.map} +1 -1
- package/dist/{prompt-submit-hook-BlijaOn7.js → prompt-submit-hook-BW92FX2D.js} +3 -3
- package/dist/{prompt-submit-hook-BlijaOn7.js.map → prompt-submit-hook-BW92FX2D.js.map} +1 -1
- package/dist/{provision-BpL6gZIt.js → provision-CUqPki1z.js} +4 -4
- package/dist/{provision-BpL6gZIt.js.map → provision-CUqPki1z.js.map} +1 -1
- package/dist/{self-invocation-CKMjcA5F.js → self-invocation-CP_SOkrr.js} +2 -2
- package/dist/{self-invocation-CKMjcA5F.js.map → self-invocation-CP_SOkrr.js.map} +1 -1
- package/dist/{serve-CXUf7RtJ.js → serve-BASqoXb3.js} +37 -24
- package/dist/serve-BASqoXb3.js.map +1 -0
- package/dist/{server-setup-Bppjt9xO.js → server-setup-D5hilphf.js} +15 -13
- package/dist/{server-setup-Bppjt9xO.js.map → server-setup-D5hilphf.js.map} +1 -1
- package/dist/{start-C1-jrHfU.js → start-Rfim4TeF.js} +3 -3
- package/dist/{start-C1-jrHfU.js.map → start-Rfim4TeF.js.map} +1 -1
- package/dist/{stop-gate-hook-DgJ6sW8N.js → stop-gate-hook-DriRc9xN.js} +3 -3
- package/dist/{stop-gate-hook-DgJ6sW8N.js.map → stop-gate-hook-DriRc9xN.js.map} +1 -1
- package/dist/{stop-gate-policy-DG5yYWGn.js → stop-gate-policy-DMPanpoR.js} +2 -2
- package/dist/{stop-gate-policy-DG5yYWGn.js.map → stop-gate-policy-DMPanpoR.js.map} +1 -1
- package/dist/{token-CnlB0884.js → token-BGCjZwtj.js} +2 -2
- package/dist/{token-CnlB0884.js.map → token-BGCjZwtj.js.map} +1 -1
- package/dist/{worker-dispatch-zW8Zi69V.js → worker-dispatch-BCTMyNE-.js} +2 -2
- package/dist/{worker-dispatch-zW8Zi69V.js.map → worker-dispatch-BCTMyNE-.js.map} +1 -1
- package/package.json +1 -1
- package/dist/attribution-settings-B8M2fvhz.js.map +0 -1
- package/dist/claude-e-JIQGhR.js.map +0 -1
- package/dist/engine-DMveEa9x.js +0 -2
- package/dist/lifecycle-CbmHMMSD.js +0 -2
- package/dist/lifecycle-DTcZwa7U.js +0 -2
- package/dist/paths-CV9K7Xqm.js +0 -2
- package/dist/peer-mcp-personas-V6stFvpq.js.map +0 -1
- package/dist/serve-CXUf7RtJ.js.map +0 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { n as explicitPackageRoot } from "./package-root-B-osctCk.js";
|
|
2
2
|
import { t as getPackageVersion } from "./version-C8x2hQrZ.js";
|
|
3
|
-
import { t as PATHS } from "./paths-
|
|
4
|
-
import { A as state, C as GITHUB_GRAPHQL_URL, D as githubAgentGraphQLHeaders, E as copilotVersion, O as githubAgentHeaders, S as GITHUB_API_BASE_URL, T as copilotHeaders, b as sanitizeTransportText, d as resolveModel, f as sleep$2, g as HTTPError, h as isAllowedCopilotHost, i as tryRefreshAndRetry, v as classifyTransportError, w as copilotBaseUrl, x as withTransientRetry, y as fetchWithTransientRetry } from "./token-
|
|
3
|
+
import { t as PATHS } from "./paths-D7_SAaIQ.js";
|
|
4
|
+
import { A as state, C as GITHUB_GRAPHQL_URL, D as githubAgentGraphQLHeaders, E as copilotVersion, O as githubAgentHeaders, S as GITHUB_API_BASE_URL, T as copilotHeaders, b as sanitizeTransportText, d as resolveModel, f as sleep$2, g as HTTPError, h as isAllowedCopilotHost, i as tryRefreshAndRetry, v as classifyTransportError, w as copilotBaseUrl, x as withTransientRetry, y as fetchWithTransientRetry } from "./token-BGCjZwtj.js";
|
|
5
5
|
import { a as resolveExecutable, c as runManagedExeCapture, i as parseIntEnv, l as spawnTaskkillBestEffort, r as parseBoolEnv } from "./exec-y8C_MU8A.js";
|
|
6
|
-
import { i as registerExitHandlers$1, n as getInstanceUuid, r as recordWorkerRepo, t as WorktreeRegistry } from "./lifecycle-
|
|
7
|
-
import { t as MCP_WORKSPACE_HEADER } from "./mcp-workspace-header-
|
|
6
|
+
import { i as registerExitHandlers$1, n as getInstanceUuid, r as recordWorkerRepo, t as WorktreeRegistry } from "./lifecycle-DbM29FLK.js";
|
|
7
|
+
import { t as MCP_WORKSPACE_HEADER } from "./mcp-workspace-header-DRCCWlOi.js";
|
|
8
8
|
import { n as ArtifactError, r as applyInsecureTls, t as ArtifactClient } from "./client-CQMfroGV.js";
|
|
9
|
-
import { n as isPidAlive$1, r as registerColbertExitHandlers, s as trackChild, t as getColbertInstanceUuid } from "./lifecycle-
|
|
10
|
-
import { f as resolveSealedGate, m as runGateChecks, p as sealedGateIds } from "./stop-gate-hook-
|
|
11
|
-
import { t as liveExec } from "./orchestration-
|
|
9
|
+
import { n as isPidAlive$1, r as registerColbertExitHandlers, s as trackChild, t as getColbertInstanceUuid } from "./lifecycle-SXaWssN9.js";
|
|
10
|
+
import { f as resolveSealedGate, m as runGateChecks, p as sealedGateIds } from "./stop-gate-hook-DriRc9xN.js";
|
|
11
|
+
import { t as liveExec } from "./orchestration-BrJwZxMN.js";
|
|
12
12
|
import { createRequire } from "node:module";
|
|
13
13
|
import consola from "consola";
|
|
14
14
|
import { chmodSync, closeSync, constants, cpSync, existsSync, mkdirSync, openSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, statSync, unlinkSync, writeFileSync, writeSync } from "node:fs";
|
|
@@ -995,6 +995,9 @@ function enumProp$1(values, description) {
|
|
|
995
995
|
};
|
|
996
996
|
}
|
|
997
997
|
//#endregion
|
|
998
|
+
//#region src/lib/gemini-review-model.ts
|
|
999
|
+
const GEMINI_REVIEW_DEFAULT_MODEL = "gemini-3.1-pro-preview";
|
|
1000
|
+
//#endregion
|
|
998
1001
|
//#region src/lib/fleet/mesh-egress-agent.ts
|
|
999
1002
|
/**
|
|
1000
1003
|
* Runtime-aware "route this fetch through the mesh loopback egress proxy" for a
|
|
@@ -18914,7 +18917,7 @@ function logAudit$1(record) {
|
|
|
18914
18917
|
try {
|
|
18915
18918
|
const fs = await import("node:fs/promises");
|
|
18916
18919
|
const path = await import("node:path");
|
|
18917
|
-
const { PATHS } = await import("./paths-
|
|
18920
|
+
const { PATHS } = await import("./paths-CTr59UC6.js");
|
|
18918
18921
|
const dir = path.join(PATHS.APP_DIR, "browser-mcp");
|
|
18919
18922
|
await fs.mkdir(dir, { recursive: true });
|
|
18920
18923
|
const line = JSON.stringify({
|
|
@@ -23916,6 +23919,10 @@ const FALLBACK_TOKEN_PRICES = Object.freeze({
|
|
|
23916
23919
|
"gemini-3.1-pro-preview": {
|
|
23917
23920
|
in: 200,
|
|
23918
23921
|
out: 1200
|
|
23922
|
+
},
|
|
23923
|
+
"gemini-3.7-flash": {
|
|
23924
|
+
in: 75,
|
|
23925
|
+
out: 375
|
|
23919
23926
|
}
|
|
23920
23927
|
});
|
|
23921
23928
|
/**
|
|
@@ -23976,6 +23983,22 @@ function catalogTokenPrices(modelId) {
|
|
|
23976
23983
|
* takes ~0.9s. That figure is deliberately NOT surfaced to the model, because a
|
|
23977
23984
|
* second speed axis invites optimising a routing choice that policy already
|
|
23978
23985
|
* settles (see the decorrelation note below).
|
|
23986
|
+
*
|
|
23987
|
+
* `gemini-3.7-flash` and the re-measured `gemini-3.1-pro-preview` (2026-08-13,
|
|
23988
|
+
* n=5, one untimed warmup rep) used the script's newer `GH_ROUTER_BENCH_STREAM=1`
|
|
23989
|
+
* mode, which splits wall-clock into TTFT and a decode-phase rate excluding the
|
|
23990
|
+
* first delta's own time+tokens. This row still records the SAME metric family
|
|
23991
|
+
* as every other row here (total tokens / total wall-clock, i.e. the script's
|
|
23992
|
+
* "total tok/s" column) — NOT the new decode-phase figure — so the table stays
|
|
23993
|
+
* internally comparable across rows measured at different times. The decode
|
|
23994
|
+
* figure is materially different and worth knowing for routing decisions that
|
|
23995
|
+
* care about steady-state throughput specifically: at matched effort,
|
|
23996
|
+
* `gemini-3.7-flash` decodes at ~275-315 tok/s (Google's own ~340 tok/s
|
|
23997
|
+
* Artificial Analysis figure, roughly confirmed once TTFT is excluded) against
|
|
23998
|
+
* `gpt-5.6-terra`'s ~135-190 tok/s decode — gemini-3.7-flash is the faster
|
|
23999
|
+
* decoder, but its ~1.1-1.7s TTFT (vs terra's ~0.9-1.0s) drags its TOTAL rate
|
|
24000
|
+
* below terra's on short responses, which is exactly why this row uses total,
|
|
24001
|
+
* not decode, to stay consistent with its neighbors.
|
|
23979
24002
|
*/
|
|
23980
24003
|
const INDICATIVE_TOKENS_PER_SECOND = Object.freeze({
|
|
23981
24004
|
"gpt-5.6-luna": 120,
|
|
@@ -23988,9 +24011,10 @@ const INDICATIVE_TOKENS_PER_SECOND = Object.freeze({
|
|
|
23988
24011
|
"gpt-5.6-sol": 75,
|
|
23989
24012
|
"grok-4.5": 70,
|
|
23990
24013
|
"gpt-5.5": 65,
|
|
24014
|
+
"gemini-3.7-flash": 91,
|
|
23991
24015
|
"gemini-3.6-flash": 45,
|
|
23992
24016
|
"gemini-3.5-flash": 40,
|
|
23993
|
-
"gemini-3.1-pro-preview":
|
|
24017
|
+
"gemini-3.1-pro-preview": 33
|
|
23994
24018
|
});
|
|
23995
24019
|
/** Returns the approximate, indicative output speed when it was measured. */
|
|
23996
24020
|
function indicativeTokensPerSecond(modelId) {
|
|
@@ -27013,6 +27037,7 @@ function shimDefaultsToXhigh(id) {
|
|
|
27013
27037
|
* live tool list would be a silent regression (the snippet would name
|
|
27014
27038
|
* a tool the live catalog doesn't expose).
|
|
27015
27039
|
*/
|
|
27040
|
+
const REVIEW_FAST_DEFAULT_MODEL = "gemini-3.7-flash";
|
|
27016
27041
|
/**
|
|
27017
27042
|
* Gate for the `stand_in` tool.
|
|
27018
27043
|
*
|
|
@@ -27021,9 +27046,8 @@ function shimDefaultsToXhigh(id) {
|
|
|
27021
27046
|
* - an OpenAI frontier model (`gpt-5.6-sol`, else `gpt-5.5` — see
|
|
27022
27047
|
* `resolveOpenAiFrontier`)
|
|
27023
27048
|
* - `claude-opus-5` (stand_in's Anthropic slot)
|
|
27024
|
-
* -
|
|
27025
|
-
*
|
|
27026
|
-
* the GA slug renames `gemini-3.1-pro-preview` → `gemini-3.1-pro`)
|
|
27049
|
+
* - the preferred Gemini reviewer model (`gemini-3.1-pro-preview`, falling
|
|
27050
|
+
* back to `gemini-3.7-flash` after the preview's 2026-09-01 removal)
|
|
27027
27051
|
*
|
|
27028
27052
|
* If any one is missing, `stand_in` is dropped from `tools/list` AND
|
|
27029
27053
|
* fails `tools/call` with -32601 (mirroring the `worker` capability's
|
|
@@ -27032,10 +27056,47 @@ function shimDefaultsToXhigh(id) {
|
|
|
27032
27056
|
* `claude-opus-5` is a single-segment slug (dotted == dashed), so the
|
|
27033
27057
|
* catalog probe matches Copilot's actual id shape directly.
|
|
27034
27058
|
*/
|
|
27035
|
-
|
|
27059
|
+
/**
|
|
27060
|
+
* Any live-catalog model matching Google's `gemini-3.x-pro` family, excluding
|
|
27061
|
+
* the two known literals — catches a GA rename of the preview slug (e.g.
|
|
27062
|
+
* `gemini-3.1-pro-preview` -> `gemini-3.1-pro`) so a vendor rename doesn't
|
|
27063
|
+
* silently downgrade every Gemini-gated resolver to the flash fallback while a
|
|
27064
|
+
* real pro-tier successor is actually present in the catalog. This is the
|
|
27065
|
+
* same regex the removed `geminiAvailable()` used, for the same reason —
|
|
27066
|
+
* losing it here was a real regression caught in review, not a deliberate
|
|
27067
|
+
* simplification.
|
|
27068
|
+
*/
|
|
27069
|
+
function findGeminiProGaRename(models) {
|
|
27070
|
+
return models.find((m) => /^gemini-3\..*pro/i.test(m.id) && m.id !== "gemini-3.1-pro-preview" && m.id !== "gemini-3.7-flash")?.id;
|
|
27071
|
+
}
|
|
27072
|
+
function resolveGeminiReviewModel(source = state) {
|
|
27036
27073
|
const models = source.models?.data;
|
|
27037
|
-
if (!models) return
|
|
27038
|
-
|
|
27074
|
+
if (!models) return void 0;
|
|
27075
|
+
if (models.some((m) => m.id === "gemini-3.1-pro-preview")) return GEMINI_REVIEW_DEFAULT_MODEL;
|
|
27076
|
+
const gaRename = findGeminiProGaRename(models);
|
|
27077
|
+
if (gaRename) return gaRename;
|
|
27078
|
+
if (models.some((m) => m.id === "gemini-3.7-flash")) return REVIEW_FAST_DEFAULT_MODEL;
|
|
27079
|
+
}
|
|
27080
|
+
/**
|
|
27081
|
+
* Gemini review candidates in preference order, for resolvers that ALSO need
|
|
27082
|
+
* `firstPresentInCatalog`'s `requireToolCalls`/`minContextTokens` enforcement
|
|
27083
|
+
* (`resolveGeminiReviewModel()` only checks id presence, not those capability
|
|
27084
|
+
* flags). Mirrors `resolveGeminiReviewModel()`'s own preference order: the
|
|
27085
|
+
* known preview id, then a GA rename of it, then the flash fallback — kept as
|
|
27086
|
+
* a shared helper so `reviewerModel()`/`brainstormModel()` can't drift from
|
|
27087
|
+
* `resolveGeminiReviewModel()`'s GA-rename handling the way the hardcoded
|
|
27088
|
+
* per-resolver chains did before this was extracted.
|
|
27089
|
+
*/
|
|
27090
|
+
function geminiReviewChainCandidates() {
|
|
27091
|
+
const gaRename = findGeminiProGaRename(state.models?.data ?? []);
|
|
27092
|
+
return [
|
|
27093
|
+
GEMINI_REVIEW_DEFAULT_MODEL,
|
|
27094
|
+
...gaRename ? [gaRename] : [],
|
|
27095
|
+
REVIEW_FAST_DEFAULT_MODEL
|
|
27096
|
+
];
|
|
27097
|
+
}
|
|
27098
|
+
function geminiAvailable(source = state) {
|
|
27099
|
+
return resolveGeminiReviewModel(source) != null;
|
|
27039
27100
|
}
|
|
27040
27101
|
/**
|
|
27041
27102
|
* First id in `chain` that is present in the live catalog. With
|
|
@@ -27107,7 +27168,7 @@ function nativeSubagentModel() {
|
|
|
27107
27168
|
* was one model checking its own output. Not merely the same lab: the same
|
|
27108
27169
|
* model. Two independent blind audits flagged it, and the repo already applies
|
|
27109
27170
|
* the opposite rule one layer down, where `worker-review` runs
|
|
27110
|
-
* `
|
|
27171
|
+
* `GEMINI_REVIEW_DEFAULT_MODEL` precisely so the reviewer's lab is decorrelated from the
|
|
27111
27172
|
* producer's.
|
|
27112
27173
|
*
|
|
27113
27174
|
* The Anthropic lead and the OpenAI-frontier `implementer` are the two producers
|
|
@@ -27115,7 +27176,7 @@ function nativeSubagentModel() {
|
|
|
27115
27176
|
* frontier remains the fallback: a same-lab reviewer still beats no reviewer.
|
|
27116
27177
|
*/
|
|
27117
27178
|
function reviewerModel() {
|
|
27118
|
-
return firstPresentInCatalog([
|
|
27179
|
+
return firstPresentInCatalog([...geminiReviewChainCandidates(), ...OPENAI_FRONTIER_MODELS], { requireToolCalls: true });
|
|
27119
27180
|
}
|
|
27120
27181
|
/** Model for `brainstorm`. Absent → inherits the lead's model.
|
|
27121
27182
|
*
|
|
@@ -27124,7 +27185,7 @@ function reviewerModel() {
|
|
|
27124
27185
|
* `implementer`/`reviewer`, so a same-lab brainstormer would mostly restate
|
|
27125
27186
|
* what the lead already thought of. */
|
|
27126
27187
|
function brainstormModel() {
|
|
27127
|
-
return firstPresentInCatalog([
|
|
27188
|
+
return firstPresentInCatalog([...geminiReviewChainCandidates(), ...OPENAI_FRONTIER_MODELS], { requireToolCalls: true });
|
|
27128
27189
|
}
|
|
27129
27190
|
/** Model for `scribe`. Absent → inherits the lead's model.
|
|
27130
27191
|
*
|
|
@@ -27146,18 +27207,24 @@ function scribeModel() {
|
|
|
27146
27207
|
* impostor wearing the cheap agent's name.
|
|
27147
27208
|
*
|
|
27148
27209
|
* `gpt-5.6-luna` leads because it is the cheapest 1M-context model in the
|
|
27149
|
-
* catalog; `gemini-3.
|
|
27210
|
+
* catalog; `gemini-3.7-flash` remains the cross-vendor fallback so an OpenAI-side
|
|
27150
27211
|
* outage does not remove the scout. Both entries must continue advertising at
|
|
27151
27212
|
* least 1M context so Claude Code's `[1m]` accounting remains honest if an
|
|
27152
27213
|
* upstream catalog entry shrinks.
|
|
27153
27214
|
*
|
|
27215
|
+
* The fallback moved off `gemini-3.6-flash` on 2026-08-13: `gemini-3.7-flash`
|
|
27216
|
+
* is strictly better on every axis this chain cares about — half the price
|
|
27217
|
+
* (75/375 vs 150/750 per 1M), materially faster (measured tool-call p50 ~1.2s
|
|
27218
|
+
* against 3.6's ~2.6s), same 1M window, same vendor, so the cross-vendor
|
|
27219
|
+
* property the fallback exists for is preserved.
|
|
27220
|
+
*
|
|
27154
27221
|
* This chain deliberately uses literal ids rather than `EXPLORE_DEFAULT_MODEL`:
|
|
27155
27222
|
* the explore worker default and scout's cross-vendor fallback are independent
|
|
27156
27223
|
* policies, so retuning one must not silently collapse the other. There is no
|
|
27157
27224
|
* 400K last resort. On a catalog carrying neither chain member, `scout` is
|
|
27158
27225
|
* dropped rather than inheriting the lead or presenting a narrower-context agent.
|
|
27159
27226
|
*/
|
|
27160
|
-
const SCOUT_MODEL_CHAIN = Object.freeze(["gpt-5.6-luna", "gemini-3.
|
|
27227
|
+
const SCOUT_MODEL_CHAIN = Object.freeze(["gpt-5.6-luna", "gemini-3.7-flash"]);
|
|
27161
27228
|
function scoutModel() {
|
|
27162
27229
|
return firstPresentInCatalog(SCOUT_MODEL_CHAIN, {
|
|
27163
27230
|
requireToolCalls: true,
|
|
@@ -27172,7 +27239,17 @@ function scoutModel() {
|
|
|
27172
27239
|
* well-specified, mechanical changes at a lower tier. Both entries are 1M+;
|
|
27173
27240
|
* their different speed and effort properties stay out of shared claims. */
|
|
27174
27241
|
function implementerFastModel() {
|
|
27175
|
-
return firstPresentInCatalog(["gpt-5.6-terra",
|
|
27242
|
+
return firstPresentInCatalog(["gpt-5.6-terra", GEMINI_REVIEW_DEFAULT_MODEL], {
|
|
27243
|
+
requireToolCalls: true,
|
|
27244
|
+
minContextTokens: ONE_M_TOKENS
|
|
27245
|
+
});
|
|
27246
|
+
}
|
|
27247
|
+
/** Model for `reviewer-fast` — the cheaper Google review tier. Absent → the
|
|
27248
|
+
* agent is dropped. Single-entry by design: inheriting the lead or falling
|
|
27249
|
+
* across labs would defeat both its cost purpose and its decorrelation from
|
|
27250
|
+
* the OpenAI-backed implementer. */
|
|
27251
|
+
function reviewerFastModel() {
|
|
27252
|
+
return firstPresentInCatalog([REVIEW_FAST_DEFAULT_MODEL], {
|
|
27176
27253
|
requireToolCalls: true,
|
|
27177
27254
|
minContextTokens: ONE_M_TOKENS
|
|
27178
27255
|
});
|
|
@@ -27473,6 +27550,7 @@ function resolveOpusCriticModel() {
|
|
|
27473
27550
|
}
|
|
27474
27551
|
function activePersonas() {
|
|
27475
27552
|
return PERSONAS_READ.filter((p) => !p.requiresGeminiCatalog || geminiAvailable()).map((p) => {
|
|
27553
|
+
if (p.requiresGeminiCatalog) return resolveGeminiPersona(p, resolveGeminiReviewModel());
|
|
27476
27554
|
if (p.toolNameHttp !== "opus_critic") return p;
|
|
27477
27555
|
const model = resolveOpusCriticModel();
|
|
27478
27556
|
const allowedEfforts = model === "claude-opus-5" ? [
|
|
@@ -32927,7 +33005,7 @@ function appendPlanReminder(messages, planState) {
|
|
|
32927
33005
|
* gemini-3.1-pro-preview is pinned to `high` because the model rejects
|
|
32928
33006
|
* `xhigh` at the wire with a Copilot 400. `high` is the realistic ceiling.
|
|
32929
33007
|
*/
|
|
32930
|
-
const
|
|
33008
|
+
const STAND_IN_MODELS_BASE = Object.freeze([
|
|
32931
33009
|
{
|
|
32932
33010
|
key: "gpt-5.6-sol",
|
|
32933
33011
|
model: "gpt-5.6-sol",
|
|
@@ -32947,6 +33025,13 @@ const STAND_IN_MODELS = Object.freeze([
|
|
|
32947
33025
|
effort: "high"
|
|
32948
33026
|
}
|
|
32949
33027
|
]);
|
|
33028
|
+
function standInModels() {
|
|
33029
|
+
const geminiModel = resolveGeminiReviewModel();
|
|
33030
|
+
return STAND_IN_MODELS_BASE.map((config) => config.key === "gemini-3.1-pro-preview" ? {
|
|
33031
|
+
...config,
|
|
33032
|
+
model: geminiModel ?? "gemini-3.7-flash"
|
|
33033
|
+
} : config);
|
|
33034
|
+
}
|
|
32950
33035
|
const SYSTEM_PROMPT_R1 = `You are one of three frontier reasoning models the user has authorized to stand in for them on a bounded decision while they are unavailable. Your task: pick the best option from those provided.
|
|
32951
33036
|
|
|
32952
33037
|
Respond with ONLY a single JSON object — no prose, no markdown fences, no preamble. Schema:
|
|
@@ -32998,7 +33083,7 @@ const RETRY_PROMPT_SUFFIX = `\n\nYour previous response was not valid JSON match
|
|
|
32998
33083
|
async function runStandIn(input, signal) {
|
|
32999
33084
|
const validIds = new Set(input.options.map((o) => o.id));
|
|
33000
33085
|
const r1UserText = buildRound1UserText(input);
|
|
33001
|
-
const r1 = await Promise.all(
|
|
33086
|
+
const r1 = await Promise.all(standInModels().map((cfg) => callAndParse(cfg, SYSTEM_PROMPT_R1, r1UserText, validIds, signal)));
|
|
33002
33087
|
const successfulR1 = r1.filter((r) => isVote(r.vote));
|
|
33003
33088
|
const nmiR1 = gapAbstainVerdict(successfulR1, r1, null);
|
|
33004
33089
|
if (nmiR1) return nmiR1;
|
|
@@ -33018,7 +33103,7 @@ async function runStandIn(input, signal) {
|
|
|
33018
33103
|
notes: `Only ${successfulR1.length} of 3 models returned a parseable round-1 vote; insufficient signal to run round 2.`
|
|
33019
33104
|
}, r1, null);
|
|
33020
33105
|
const r2UserTextBase = buildRound2UserTextBase(input, r1);
|
|
33021
|
-
const r2 = await Promise.all(
|
|
33106
|
+
const r2 = await Promise.all(standInModels().map((cfg) => callAndParse(cfg, SYSTEM_PROMPT_R2, r2UserTextBase + `\n\nYou are ${cfg.key}. Reconsider and vote.`, validIds, signal)));
|
|
33022
33107
|
const successfulR2 = r2.filter((r) => isVote(r.vote));
|
|
33023
33108
|
if (successfulR2.length < 2) return withDerivedNotes({
|
|
33024
33109
|
verdict: "no_consensus",
|
|
@@ -33195,7 +33280,7 @@ function aggregateVotes(results) {
|
|
|
33195
33280
|
topCount = count;
|
|
33196
33281
|
topSumConfidence = sumConfidence;
|
|
33197
33282
|
}
|
|
33198
|
-
const total =
|
|
33283
|
+
const total = standInModels().length;
|
|
33199
33284
|
if (topChoice && topCount === total) return {
|
|
33200
33285
|
verdict: "consensus",
|
|
33201
33286
|
winner: topChoice,
|
|
@@ -33246,7 +33331,7 @@ function gapAbstainVerdict(successful, r1, r2) {
|
|
|
33246
33331
|
const gapVotes = successful.filter((r) => r.vote.choice === null && r.vote.needMoreInfo);
|
|
33247
33332
|
if (gapVotes.length < 2) return null;
|
|
33248
33333
|
const gaps = gapVotes.map((r) => `- ${r.key}: ${r.vote.needMoreInfo}`).join("\n");
|
|
33249
|
-
const header = gapVotes.length ===
|
|
33334
|
+
const header = gapVotes.length === standInModels().length ? "All three models reported they need more context to decide:" : `${gapVotes.length} of 3 models reported they need more context to decide:`;
|
|
33250
33335
|
return withDerivedNotes({
|
|
33251
33336
|
verdict: "need_more_info",
|
|
33252
33337
|
recommendation: null,
|
|
@@ -33262,7 +33347,7 @@ function gapAbstainVerdict(successful, r1, r2) {
|
|
|
33262
33347
|
*/
|
|
33263
33348
|
function freshestVotes(r1, r2) {
|
|
33264
33349
|
const out = [];
|
|
33265
|
-
for (const cfg of
|
|
33350
|
+
for (const cfg of standInModels()) {
|
|
33266
33351
|
const r2Entry = r2?.find((r) => r.key === cfg.key);
|
|
33267
33352
|
const r1Entry = r1.find((r) => r.key === cfg.key);
|
|
33268
33353
|
const vote = r2Entry && isVote(r2Entry.vote) ? r2Entry.vote : r1Entry && isVote(r1Entry.vote) ? r1Entry.vote : null;
|
|
@@ -33300,7 +33385,7 @@ function withDerivedNotes(result, r1, r2) {
|
|
|
33300
33385
|
}
|
|
33301
33386
|
function voteRecord(r1, r2) {
|
|
33302
33387
|
const record = {};
|
|
33303
|
-
for (const cfg of
|
|
33388
|
+
for (const cfg of standInModels()) {
|
|
33304
33389
|
const r1Entry = r1.find((r) => r.key === cfg.key);
|
|
33305
33390
|
const r2Entry = r2?.find((r) => r.key === cfg.key) ?? null;
|
|
33306
33391
|
record[cfg.key] = {
|
|
@@ -34529,7 +34614,7 @@ const PERSONAS_READ = Object.freeze([
|
|
|
34529
34614
|
{
|
|
34530
34615
|
agentName: "gemini-critic",
|
|
34531
34616
|
toolNameHttp: "gemini_critic",
|
|
34532
|
-
model:
|
|
34617
|
+
model: GEMINI_REVIEW_DEFAULT_MODEL,
|
|
34533
34618
|
endpoint: "/v1/chat/completions",
|
|
34534
34619
|
description: "Adversarial third-lab critic backed by gemini-3.1-pro-preview (Google), strong on formal reasoning, invariants, proofs, and cross-checking another critic's conclusion. It reviews plans, designs, mathematical arguments, and large artifacts for assumption gaps or invariant failures, then returns a focused critique or no-material-objection style verdict. Use when codex_critic's result needs an independent lab check or when the artifact hinges on formal correctness. Not for line-level diff review, use gemini_reviewer or codex_reviewer; pass the artifact and constraints verbatim.",
|
|
34535
34620
|
baseInstructions: GEMINI_CRITIC_BASE,
|
|
@@ -34565,7 +34650,7 @@ const PERSONAS_READ = Object.freeze([
|
|
|
34565
34650
|
{
|
|
34566
34651
|
agentName: "gemini-reviewer",
|
|
34567
34652
|
toolNameHttp: "gemini_reviewer",
|
|
34568
|
-
model:
|
|
34653
|
+
model: GEMINI_REVIEW_DEFAULT_MODEL,
|
|
34569
34654
|
endpoint: "/v1/chat/completions",
|
|
34570
34655
|
description: "Line-level code reviewer backed by gemini-3.1-pro-preview (Google), providing second-lab coverage that catches a different slice of concrete-code defects than codex_reviewer. It reviews diffs, files, or function bodies and returns severity-ranked findings with file:line citations and suggested fixes. Use alongside codex_reviewer when a non-trivial diff benefits from cross-lab code-review coverage, especially around invariants or edge cases. Not for architecture or product-design review, use codex_critic or gemini_critic; pass the code artifact verbatim.",
|
|
34571
34656
|
baseInstructions: GEMINI_REVIEWER_BASE,
|
|
@@ -34734,15 +34819,16 @@ function buildPeerAwarenessSnippet(opts) {
|
|
|
34734
34819
|
const powerBrowseAvailable = opts.browseAvailable && opts.powerBrowseAvailable === true;
|
|
34735
34820
|
const criticList = ["`codex_critic` (gpt-5.6-sol)", "`codex_reviewer` (gpt-5.3-codex)"];
|
|
34736
34821
|
if (opts.geminiAvailable) {
|
|
34737
|
-
|
|
34738
|
-
criticList.push(
|
|
34822
|
+
const geminiModel = opts.geminiModel ?? "gemini-3.1-pro-preview";
|
|
34823
|
+
criticList.push(`\`gemini_reviewer\` (${geminiModel}, line-level code review)`);
|
|
34824
|
+
criticList.push(`\`gemini_critic\` (${geminiModel})`);
|
|
34739
34825
|
}
|
|
34740
34826
|
criticList.push("`opus_critic` (Opus 5)");
|
|
34741
34827
|
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." : "";
|
|
34742
34828
|
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.`];
|
|
34743
34829
|
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; ALWAYS runs in an isolated git worktree and returns the diff via a saved patch file; for in-place edits use the \`implementer\` subagent), \`worker-test\` (independent test author; also always worktree-isolated)${opts.browseAvailable ? ", `worker-browse` (autonomous browser agent driving a real browser)" : ""}. 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\`.`);
|
|
34744
34830
|
const catchAllClause = opts.generalPurposeFastAvailable === false ? "" : " Catch-all on a fast, economical non-lead model for work no specialist fits: `general-purpose-fast`.";
|
|
34745
|
-
para2Parts.push(`Native subagents (Task), each in its own context so heavy work never fills yours: \`implementer\` (coding changes needing judgment or with ambiguous scope)${opts.implementerFastAvailable === false ? "" : ", `implementer-fast` (well-specified, mechanical coding changes)"}, \`reviewer\` (something exists and you want it assessed, including reproducing and root-causing a failure), \`brainstorm\` (you do not yet know which approach to take)${opts.scoutAvailable === false ? "" : ", `scout` (find or understand something in the repo, cheap)"}, \`scribe\` (docs and ADRs that trail the code).${catchAllClause}`);
|
|
34831
|
+
para2Parts.push(`Native subagents (Task), each in its own context so heavy work never fills yours: \`implementer\` (coding changes needing judgment or with ambiguous scope)${opts.implementerFastAvailable === false ? "" : ", `implementer-fast` (well-specified, mechanical coding changes)"}, \`reviewer\` (something exists and you want it assessed, including reproducing and root-causing a failure)${opts.reviewerFastAvailable === false ? "" : ", `reviewer-fast` (lower-stakes assessment on a cheaper cross-lab model)"}, \`brainstorm\` (you do not yet know which approach to take)${opts.scoutAvailable === false ? "" : ", `scout` (find or understand something in the repo, cheap)"}, \`scribe\` (docs and ADRs that trail the code).${catchAllClause}`);
|
|
34746
34832
|
if (opts.workerToolsAvailable) para2Parts.push(`For a bounded, well-scoped implementation, prefer the \`implementer\` subagent over \`worker-implement\`; reach for \`worker-implement\` only when you specifically need git-worktree isolation, parallel variants, or a throwaway experiment.`);
|
|
34747
34833
|
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.`);
|
|
34748
34834
|
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).`);
|
|
@@ -34787,6 +34873,7 @@ function buildPeerAwarenessSummary(opts) {
|
|
|
34787
34873
|
renderNative("implementer"),
|
|
34788
34874
|
opts.implementerFastAvailable === false ? void 0 : renderNative("implementer-fast"),
|
|
34789
34875
|
renderNative("reviewer"),
|
|
34876
|
+
opts.reviewerFastAvailable === false ? void 0 : renderNative("reviewer-fast"),
|
|
34790
34877
|
renderNative("brainstorm"),
|
|
34791
34878
|
opts.scoutAvailable === false ? void 0 : renderNative("scout"),
|
|
34792
34879
|
renderNative("scribe"),
|
|
@@ -34807,11 +34894,38 @@ function buildPeerAwarenessSummary(opts) {
|
|
|
34807
34894
|
lines.push(`Each tool's own description carries when to use it and when not. The full per-tool inventory (models, gating, workers, skills) is in the "Peer review and advisor" section of your CLAUDE.md project instructions.`);
|
|
34808
34895
|
return lines.join("\n");
|
|
34809
34896
|
}
|
|
34897
|
+
/**
|
|
34898
|
+
* Applies the resolved Gemini review model to a persona requiring the Gemini
|
|
34899
|
+
* catalog: swaps `.model` and rewrites every literal occurrence of the
|
|
34900
|
+
* default id in `.description` so the two never disagree about which model
|
|
34901
|
+
* actually backs the tool. A mismatch here is user-visible — `tools/list`
|
|
34902
|
+
* would advertise "backed by gemini-3.1-pro-preview" while dispatch actually
|
|
34903
|
+
* ran the flash fallback — so every call site that resolves a
|
|
34904
|
+
* `requiresGeminiCatalog` persona MUST go through this helper rather than
|
|
34905
|
+
* setting `.model` directly (a prior draft of this fix did exactly that in
|
|
34906
|
+
* `routes/mcp/handler.ts`'s `activePersonas()` and left the description
|
|
34907
|
+
* stale). Relies on every `requiresGeminiCatalog` persona's description
|
|
34908
|
+
* literally containing `GEMINI_REVIEW_DEFAULT_MODEL`'s exact string — true
|
|
34909
|
+
* for both current entries (gemini-critic, gemini-reviewer); keep it true for
|
|
34910
|
+
* any future one, or `replaceAll` silently no-ops.
|
|
34911
|
+
*/
|
|
34912
|
+
function resolveGeminiPersona(p, geminiModel) {
|
|
34913
|
+
const model = geminiModel ?? "gemini-3.1-pro-preview";
|
|
34914
|
+
return {
|
|
34915
|
+
...p,
|
|
34916
|
+
model,
|
|
34917
|
+
description: p.description.replaceAll(GEMINI_REVIEW_DEFAULT_MODEL, model)
|
|
34918
|
+
};
|
|
34919
|
+
}
|
|
34810
34920
|
/** Convenience: every persona that should be registered for the given mode. */
|
|
34811
34921
|
function personasFor(opts) {
|
|
34812
34922
|
const result = [];
|
|
34813
34923
|
for (const p of PERSONAS_READ) {
|
|
34814
|
-
if (p.requiresGeminiCatalog
|
|
34924
|
+
if (p.requiresGeminiCatalog) {
|
|
34925
|
+
if (!opts.geminiAvailable) continue;
|
|
34926
|
+
result.push(resolveGeminiPersona(p, opts.geminiModel));
|
|
34927
|
+
continue;
|
|
34928
|
+
}
|
|
34815
34929
|
result.push(p);
|
|
34816
34930
|
}
|
|
34817
34931
|
if (opts.codexCli) for (const p of PERSONAS_WRITE) result.push(p);
|
|
@@ -35997,6 +36111,6 @@ function enumerateInjectedMcpToolNames(groupKeys, opts = {}) {
|
|
|
35997
36111
|
return [...new Set(names)];
|
|
35998
36112
|
}
|
|
35999
36113
|
//#endregion
|
|
36000
|
-
export { handleMcpDelete as $,
|
|
36114
|
+
export { handleMcpDelete as $, generateRandomPort as $t, satisfiesMinVersion as A, readResponseBodyCapped as At, rememberThinkingHistoryRepair as B, CONDENSED_OPERATING_SEQUENCE as Bt, availableToolCommands as C, getTokenCount as Ct, vscodeRipgrepPath as D, createResponses as Dt, toolbeltSkipSet as E, resolveMcpToolTimeoutMs as Et, injectAdvisorTool as F, provisionAndIndexColbert as Ft, isControllerClosedError as G, BUDGET_SMALL_FAST_CATALOG_ID as Gt, repairRejectedThinkingHistory as H, shouldUseInsecureTls as Ht, isAdvisorRequested as I, extractTarGzMember as It, relayAnthropicStream as J, DEFAULT_CODEX_MODEL as Jt, logStreamError as K, BUDGET_SMALL_FAST_SLUG as Kt, resolveAdvisorEffort as L, extractZipMember as Lt, ADVISOR_INTERNAL_TOOL_NAME as M, provisionBrowserAssets as Mt, ADVISOR_TOOL_INSTRUCTIONS as N, hasSupportedBrowserInstalled as Nt, TOOLBELT_TOOLS$1 as O, createChatCompletions as Ot, buildAdvisorStream as P, colbertDegradedWarning as Pt, clampEffort as Q, UPSTREAM_INACTIVITY_TIMEOUT_MS as Qt, resolveAdvisorModel as R, warmTreeSitterPool as Rt, buildEnv as S, createMessages as St, toolbeltEnabled as T, warnOnTokenPriceDrift as Tt, buildAnthropicErrorEvent as U, collapsePathKeys as Ut, repairKnownThinkingHistory as V, DEFINITION_OF_GREATNESS as Vt, buildOpenAIErrorEvent as W, toolbeltPathOverride as Wt, UNKNOWN_EFFORT_ANCHOR as X, DEFAULT_PORT as Xt, EFFORT_ORDER as Y, DEFAULT_CODEX_MODEL_FALLBACKS as Yt, bucketEffort as Z, UPSTREAM_FETCH_TIMEOUT_MS as Zt, appendPlanReminder as _, scribeModel as _t, buildPeerAwarenessSnippet as a, classifyMessagesRoute as an, browseAgentEnabled as at, resolveWorkerRunOpts as b, shimDefaultsToXhigh as bt, personasFor as c, withInstallLock as cn, fleetToolsEnabled as ct, EXPLORE_DEFAULT_MODEL as d, implementerFastModel as dt, isBudgetClaudeLead as en, handleMcpPost as et, EXPLORE_DEFAULT_THINKING as f, nativeSubagentModel as ft, TEST_DEFAULT_MODEL as g, scoutModel as gt, REVIEW_DEFAULT_MODEL as h, reviewerModel as ht, buildAgentPrompt as i, upstreamMaxConnections as in, brainstormModel as it, searchWeb as j, parseJsonOrDiagnose as jt, assetFor as k, MAX_RESPONSE_BODY_BYTES as kt, BROWSE_DEFAULT_MODEL as l, geminiAvailable as lt, PLAN_DEFAULT_MODEL as m, reviewerFastModel as mt, MCP_GROUPS as n, resolveLeadSlugArg as nn, agentToolsEnabled as nt, buildPeerAwarenessSummary as o, withOneMSuffix as on, browserCompoundToolsEnabled as ot, IMPLEMENT_DEFAULT_MODEL as p, resolveGeminiReviewModel as pt, readIteratorWithTimeout as q, DEFAULT_CLAUDE_MODEL_FALLBACKS as qt, assertMcpToolSurfaceConsistent as r, upstreamAllowH2 as rn, artifactToolsEnabled as rt, enumerateInjectedMcpToolNames as s, withOneMSuffixForLead as sn, browserToolsEnabled as st, GROUP_META as t, pickClaudeDefault as tn, REVIEW_FAST_DEFAULT_MODEL as tt, DEFAULT_MODEL_CHAIN as u, generalPurposeFastModel as ut, resolveDefaultModel as v, standInToolEnabled as vt, buildToolbeltAwareness as w, assembleResponsesPayload as wt, runWorkerAgent as x, countTokens as xt, resolveModeDefaults as y, workerToolsEnabled as yt, formatThinkingRepairDecline as z, provisionTreeSitterAssets as zt };
|
|
36001
36115
|
|
|
36002
|
-
//# sourceMappingURL=peer-mcp-personas-
|
|
36116
|
+
//# sourceMappingURL=peer-mcp-personas-B5Wp6wIn.js.map
|