github-router 0.3.316 → 0.3.317
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/dist/{aic-ledger-BS47yb_C.js → aic-ledger-DY03LbBM.js} +2 -2
- package/dist/{aic-ledger-BS47yb_C.js.map → aic-ledger-DY03LbBM.js.map} +1 -1
- package/dist/{attribution-settings-jcsSeVur.js → attribution-settings-D6dAkP4e.js} +8 -8
- package/dist/{attribution-settings-jcsSeVur.js.map → attribution-settings-D6dAkP4e.js.map} +1 -1
- package/dist/{auth-JfxL9q7z.js → auth-Iun7ftd8.js} +3 -3
- package/dist/{auth-JfxL9q7z.js.map → auth-Iun7ftd8.js.map} +1 -1
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/{check-usage-DXUEQzt_.js → check-usage-1c-0z3iy.js} +4 -4
- package/dist/{check-usage-DXUEQzt_.js.map → check-usage-1c-0z3iy.js.map} +1 -1
- package/dist/{claude-CJ4Nd2_3.js → claude-aZ6OaFP5.js} +92 -28
- package/dist/claude-aZ6OaFP5.js.map +1 -0
- package/dist/{codex-CwuLqNZF.js → codex-PTdWu7er.js} +5 -5
- package/dist/{codex-CwuLqNZF.js.map → codex-PTdWu7er.js.map} +1 -1
- package/dist/{copilot-discount-IbXR5A28.js → copilot-discount-C3jx9Q-o.js} +2 -2
- package/dist/{copilot-discount-IbXR5A28.js.map → copilot-discount-C3jx9Q-o.js.map} +1 -1
- package/dist/{debug-CA7pg8V9.js → debug-CDyXUPcC.js} +2 -2
- package/dist/{debug-CA7pg8V9.js.map → debug-CDyXUPcC.js.map} +1 -1
- package/dist/engine-D5GNXylB.js +2 -0
- package/dist/{gate-discovery-z04ywOzB.js → gate-discovery-B17pvgE0.js} +5 -5
- package/dist/{gate-discovery-z04ywOzB.js.map → gate-discovery-B17pvgE0.js.map} +1 -1
- package/dist/{get-copilot-usage-BMD_cJNT.js → get-copilot-usage-BWCAzmSc.js} +2 -2
- package/dist/{get-copilot-usage-BMD_cJNT.js.map → get-copilot-usage-BWCAzmSc.js.map} +1 -1
- package/dist/hooks.mjs +124 -117
- package/dist/hooks.sha256 +1 -1
- package/dist/{internal-aic-status-BN0xRLSF.js → internal-aic-status-BiblmImt.js} +13 -6
- package/dist/{internal-aic-status-BN0xRLSF.js.map → internal-aic-status-BiblmImt.js.map} +1 -1
- package/dist/{internal-artifact-open-B3stUu74.js → internal-artifact-open-CA1trJ15.js} +2 -2
- package/dist/{internal-artifact-open-B3stUu74.js.map → internal-artifact-open-CA1trJ15.js.map} +1 -1
- package/dist/{internal-fast-dispatch-guard-CAwYj_Yz.js → internal-fast-dispatch-guard-CZ4BZuAG.js} +2 -2
- package/dist/{internal-fast-dispatch-guard-CAwYj_Yz.js.map → internal-fast-dispatch-guard-CZ4BZuAG.js.map} +1 -1
- package/dist/{internal-fast-dispatch-guard-2QjUlhqO.js → internal-fast-dispatch-guard-D5kozMpo.js} +1 -1
- package/dist/{internal-first-mate-guard-VgnHBp0s.js → internal-first-mate-guard-B_or0eN3.js} +1 -1
- package/dist/{internal-first-mate-guard-B0rbLb0L.js → internal-first-mate-guard-CiFH6X1H.js} +3 -3
- package/dist/{internal-first-mate-guard-B0rbLb0L.js.map → internal-first-mate-guard-CiFH6X1H.js.map} +1 -1
- package/dist/{internal-max-dispatch-guard-Bz7a2Ntf.js → internal-max-dispatch-guard-BGOHRYRt.js} +1 -1
- package/dist/{internal-max-dispatch-guard-BNqQ2wMc.js → internal-max-dispatch-guard-CnBZxo5l.js} +2 -2
- package/dist/{internal-max-dispatch-guard-BNqQ2wMc.js.map → internal-max-dispatch-guard-CnBZxo5l.js.map} +1 -1
- package/dist/{internal-plan-review-QUvNZmMR.js → internal-plan-review-C73snnD8.js} +3 -3
- package/dist/{internal-plan-review-QUvNZmMR.js.map → internal-plan-review-C73snnD8.js.map} +1 -1
- package/dist/{internal-prompt-submit-fj5ccft_.js → internal-prompt-submit-dov4UvBo.js} +4 -4
- package/dist/{internal-prompt-submit-fj5ccft_.js.map → internal-prompt-submit-dov4UvBo.js.map} +1 -1
- package/dist/{internal-session-bind-0Hmak8PR.js → internal-session-bind-C3hrb9rP.js} +2 -2
- package/dist/{internal-session-bind-0Hmak8PR.js.map → internal-session-bind-C3hrb9rP.js.map} +1 -1
- package/dist/{internal-stop-hook-UN1JHtjj.js → internal-stop-hook-DZ6CCP4C.js} +5 -5
- package/dist/{internal-stop-hook-UN1JHtjj.js.map → internal-stop-hook-DZ6CCP4C.js.map} +1 -1
- package/dist/{internal-stop-review-8v2llYDB.js → internal-stop-review-MBVYtrYS.js} +2 -2
- package/dist/{internal-stop-review-8v2llYDB.js.map → internal-stop-review-MBVYtrYS.js.map} +1 -1
- package/dist/{internal-worker-guard-BI4Pl0Ew.js → internal-worker-guard-dxGawAY3.js} +2 -2
- package/dist/{internal-worker-guard-BI4Pl0Ew.js.map → internal-worker-guard-dxGawAY3.js.map} +1 -1
- package/dist/{internal-workspace-header-kg9FoNXK.js → internal-workspace-header-_aEXOz5q.js} +2 -2
- package/dist/{internal-workspace-header-kg9FoNXK.js.map → internal-workspace-header-_aEXOz5q.js.map} +1 -1
- package/dist/{lifecycle-IwotwedG.js → lifecycle-CJB2BwSJ.js} +2 -2
- package/dist/{lifecycle-IwotwedG.js.map → lifecycle-CJB2BwSJ.js.map} +1 -1
- package/dist/lifecycle-D0KsoSqz.js +2 -0
- package/dist/lifecycle-DimEguJO.js +2 -0
- package/dist/{lifecycle-Cx1wVrLb.js → lifecycle-_BE0SnNs.js} +2 -2
- package/dist/{lifecycle-Cx1wVrLb.js.map → lifecycle-_BE0SnNs.js.map} +1 -1
- package/dist/main.js +20 -20
- package/dist/{mcp-workspace-header-BYgWioLH.js → mcp-workspace-header-mXRLE8kg.js} +2 -2
- package/dist/{mcp-workspace-header-BYgWioLH.js.map → mcp-workspace-header-mXRLE8kg.js.map} +1 -1
- package/dist/{models-CVzyU5mJ.js → models-CSFIVxAH.js} +3 -3
- package/dist/{models-CVzyU5mJ.js.map → models-CSFIVxAH.js.map} +1 -1
- package/dist/{orchestration-Dc3mO0G3.js → orchestration-B8kypXcZ.js} +2 -2
- package/dist/{orchestration-Dc3mO0G3.js.map → orchestration-B8kypXcZ.js.map} +1 -1
- package/dist/{paths-CMxlQEfQ.js → paths-CHBAj_t9.js} +36 -4
- package/dist/{paths-CMxlQEfQ.js.map → paths-CHBAj_t9.js.map} +1 -1
- package/dist/paths-eHoOwFzZ.js +2 -0
- package/dist/{peer-mcp-personas-CQ-0Piyr.js → peer-mcp-personas-CRMVuMVF.js} +37 -18
- package/dist/{peer-mcp-personas-CQ-0Piyr.js.map → peer-mcp-personas-CRMVuMVF.js.map} +1 -1
- package/dist/{plan-review-hook-BIMwWkh6.js → plan-review-hook-BMmw7wxR.js} +3 -3
- package/dist/{plan-review-hook-BIMwWkh6.js.map → plan-review-hook-BMmw7wxR.js.map} +1 -1
- package/dist/{prompt-submit-hook-BcFpjHXg.js → prompt-submit-hook-CGgT5m4Q.js} +3 -3
- package/dist/{prompt-submit-hook-BcFpjHXg.js.map → prompt-submit-hook-CGgT5m4Q.js.map} +1 -1
- package/dist/{provision-_R7ZMygj.js → provision-Bn8-NDp7.js} +4 -4
- package/dist/{provision-_R7ZMygj.js.map → provision-Bn8-NDp7.js.map} +1 -1
- package/dist/{self-invocation-cRl4RqfW.js → self-invocation-DahN1gw9.js} +2 -2
- package/dist/{self-invocation-cRl4RqfW.js.map → self-invocation-DahN1gw9.js.map} +1 -1
- package/dist/{serve-DU66K5kv.js → serve-CX4Ifk5p.js} +12 -12
- package/dist/{serve-DU66K5kv.js.map → serve-CX4Ifk5p.js.map} +1 -1
- package/dist/{server-setup-iLG8LrfL.js → server-setup-0PaS4m2B.js} +98 -48
- package/dist/server-setup-0PaS4m2B.js.map +1 -0
- package/dist/{start-DQTcm0o_.js → start-Bz_559ua.js} +3 -3
- package/dist/{start-DQTcm0o_.js.map → start-Bz_559ua.js.map} +1 -1
- package/dist/{stop-gate-hook-BUCxa5Kc.js → stop-gate-hook-D7N759TG.js} +72 -4
- package/dist/{stop-gate-hook-BUCxa5Kc.js.map → stop-gate-hook-D7N759TG.js.map} +1 -1
- package/dist/{stop-gate-policy--bpyxxXU.js → stop-gate-policy-C0gt04R0.js} +2 -2
- package/dist/{stop-gate-policy--bpyxxXU.js.map → stop-gate-policy-C0gt04R0.js.map} +1 -1
- package/dist/{token-C1gthnbV.js → token-86uk6y4P.js} +2 -2
- package/dist/{token-C1gthnbV.js.map → token-86uk6y4P.js.map} +1 -1
- package/dist/{worker-dispatch-DMIdrlsF.js → worker-dispatch-B-OA7tvU.js} +2 -2
- package/dist/{worker-dispatch-DMIdrlsF.js.map → worker-dispatch-B-OA7tvU.js.map} +1 -1
- package/package.json +1 -1
- package/dist/claude-CJ4Nd2_3.js.map +0 -1
- package/dist/engine-DwrxceOS.js +0 -2
- package/dist/lifecycle-BpqAyaAj.js +0 -2
- package/dist/lifecycle-CL2WiyeQ.js +0 -2
- package/dist/paths-BXXCVFvA.js +0 -2
- package/dist/server-setup-iLG8LrfL.js.map +0 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { $ as EFFORT_ORDER, $t as parseJsonOrDiagnose, An as oneMContextDisabled, B as resolveAdvisorEffort, Bn as CHEAP_PROFILE_MODELS, Bt as getTextTokenCount, Cn as isBudgetClaudeLead, D as toolbeltEnabled, Dn as upstreamMaxConnections, En as upstreamAllowH2, F as ADVISOR_TOOL_INSTRUCTIONS, Fn as CHEAPEST_PROFILE_NATIVE_AGENT_NAMES, G as repairKnownThinkingHistory, Gn as withInstallLock, H as resolveCheapestAdvisorModel, Ht as getTokenizerFromModel, I as FAST_ADVISOR_TOOL_INSTRUCTIONS, J as buildOpenAIErrorEvent, Jt as resolveMcpToolTimeoutMs, K as repairRejectedThinkingHistory, Kt as assembleResponsesPayload, L as buildAdvisorStream, Lt as shimDefaultsToXhigh, Mn as withOneMSuffixForLead, N as searchWeb, Nn as CHEAPEST_PROFILE_ADVISOR_CLIENT_MODEL, On as classifyMessagesRoute, P as ADVISOR_INTERNAL_TOOL_NAME, Pn as CHEAPEST_PROFILE_MODELS, Q as relayAnthropicStream, Qt as readResponseBodyCapped, R as injectAdvisorTool, Rn as CHEAPEST_PROFILE_SUBAGENT_CONTEXT_TOKENS, Rt as countTokens, Sn as generateRandomPort, U as formatThinkingRepairDecline, Ut as findLaunchBySecret, V as resolveAdvisorModel, Vn as CHEAP_PROFILE_NATIVE_AGENT_NAMES, Vt as getTokenCount, W as rememberThinkingHistoryRepair, Wn as CHEAP_PROFILE_SUBAGENT_CONTEXT_TOKENS, X as logStreamError, Xt as createChatCompletions, Y as isControllerClosedError, Yt as createResponses, Z as readIteratorWithTimeout, Zt as MAX_RESPONSE_BODY_BYTES, at as agentToolsEnabled, bn as UPSTREAM_FETCH_TIMEOUT_MS, cn as provisionTreeSitterAssets, en as normalizeOpenAIUsage, et as UNKNOWN_EFFORT_ANCHOR, hn as BUDGET_SMALL_FAST_SLUG, i as assertMcpToolSurfaceConsistent, it as handleMcpPost, jn as withOneMSuffix, kn as catalogAdvertises1M, nt as clampEffort, pn as toolbeltPathOverride, q as buildAnthropicErrorEvent, qt as warnOnTokenPriceDrift, rt as handleMcpDelete, tt as bucketEffort, xn as UPSTREAM_INACTIVITY_TIMEOUT_MS, z as isAdvisorRequested, zn as CHEAP_PROFILE_ADVISOR_CLIENT_MODEL, zt as createMessages } from "./peer-mcp-personas-
|
|
1
|
+
import { $ as EFFORT_ORDER, $t as parseJsonOrDiagnose, An as oneMContextDisabled, B as resolveAdvisorEffort, Bn as CHEAP_PROFILE_MODELS, Bt as getTextTokenCount, Cn as isBudgetClaudeLead, D as toolbeltEnabled, Dn as upstreamMaxConnections, En as upstreamAllowH2, F as ADVISOR_TOOL_INSTRUCTIONS, Fn as CHEAPEST_PROFILE_NATIVE_AGENT_NAMES, G as repairKnownThinkingHistory, Gn as withInstallLock, H as resolveCheapestAdvisorModel, Ht as getTokenizerFromModel, I as FAST_ADVISOR_TOOL_INSTRUCTIONS, J as buildOpenAIErrorEvent, Jt as resolveMcpToolTimeoutMs, K as repairRejectedThinkingHistory, Kt as assembleResponsesPayload, L as buildAdvisorStream, Lt as shimDefaultsToXhigh, Mn as withOneMSuffixForLead, N as searchWeb, Nn as CHEAPEST_PROFILE_ADVISOR_CLIENT_MODEL, On as classifyMessagesRoute, P as ADVISOR_INTERNAL_TOOL_NAME, Pn as CHEAPEST_PROFILE_MODELS, Q as relayAnthropicStream, Qt as readResponseBodyCapped, R as injectAdvisorTool, Rn as CHEAPEST_PROFILE_SUBAGENT_CONTEXT_TOKENS, Rt as countTokens, Sn as generateRandomPort, U as formatThinkingRepairDecline, Ut as findLaunchBySecret, V as resolveAdvisorModel, Vn as CHEAP_PROFILE_NATIVE_AGENT_NAMES, Vt as getTokenCount, W as rememberThinkingHistoryRepair, Wn as CHEAP_PROFILE_SUBAGENT_CONTEXT_TOKENS, X as logStreamError, Xt as createChatCompletions, Y as isControllerClosedError, Yt as createResponses, Z as readIteratorWithTimeout, Zt as MAX_RESPONSE_BODY_BYTES, at as agentToolsEnabled, bn as UPSTREAM_FETCH_TIMEOUT_MS, cn as provisionTreeSitterAssets, en as normalizeOpenAIUsage, et as UNKNOWN_EFFORT_ANCHOR, hn as BUDGET_SMALL_FAST_SLUG, i as assertMcpToolSurfaceConsistent, it as handleMcpPost, jn as withOneMSuffix, kn as catalogAdvertises1M, nt as clampEffort, pn as toolbeltPathOverride, q as buildAnthropicErrorEvent, qt as warnOnTokenPriceDrift, rt as handleMcpDelete, tt as bucketEffort, xn as UPSTREAM_INACTIVITY_TIMEOUT_MS, z as isAdvisorRequested, zn as CHEAP_PROFILE_ADVISOR_CLIENT_MODEL, zt as createMessages } from "./peer-mcp-personas-CRMVuMVF.js";
|
|
2
2
|
import { t as getPackageVersion } from "./version-C8x2hQrZ.js";
|
|
3
|
-
import { i as ensurePaths, t as PATHS } from "./paths-
|
|
3
|
+
import { i as ensurePaths, t as PATHS } from "./paths-CHBAj_t9.js";
|
|
4
4
|
import { t as state } from "./state-BlMpEFAt.js";
|
|
5
|
-
import { T as copilotHeaders, _ as forwardError, a as cacheCopilotVersion, c as filterBetaHeader, d as resolveModel, f as sleep, g as HTTPError, i as tryRefreshAndRetry, l as isNullish, n as setupGitHubAgentToken, o as cacheModels, r as setupGitHubToken, s as cacheVSCodeVersion, t as setupCopilotToken, w as copilotBaseUrl, y as fetchWithTransientRetry } from "./token-
|
|
6
|
-
import { t as getCopilotUsage } from "./get-copilot-usage-
|
|
5
|
+
import { T as copilotHeaders, _ as forwardError, a as cacheCopilotVersion, c as filterBetaHeader, d as resolveModel, f as sleep, g as HTTPError, i as tryRefreshAndRetry, l as isNullish, n as setupGitHubAgentToken, o as cacheModels, r as setupGitHubToken, s as cacheVSCodeVersion, t as setupCopilotToken, w as copilotBaseUrl, y as fetchWithTransientRetry } from "./token-86uk6y4P.js";
|
|
6
|
+
import { t as getCopilotUsage } from "./get-copilot-usage-BWCAzmSc.js";
|
|
7
7
|
import { c as runCommandVoid, i as parseBoolEnv, o as resolveExecutable, r as killManagedTree, s as runCommandCapture } from "./exec-COUT4QsS.js";
|
|
8
8
|
import { c as FAST_PROFILE_MODELS, l as FAST_PROFILE_NATIVE_AGENT_NAMES, r as FAST_PROFILE_ADVISOR_MODEL } from "./fast-profile-contract-_DhIWank.js";
|
|
9
9
|
import { A as normalizeTrailingOneMSuffix, a as MAX_PROFILE_NATIVE_AGENT_NAMES, d as maxAdvisorPinIsValid, h as maxOpusModel, i as MAX_PROFILE_MODELS, j as stripTrailingOneMSuffix, k as fastEndpointForModel, l as maxAdvisorEffortForModel, n as MAX_PROFILE_ALLOWED_LEAD_MODEL_IDS, t as MAX_PROFILE_ADVISOR_INSTRUCTIONS, u as maxAdvisorModelFromPin, y as validateMaxProfilePrerequisites } from "./max-profile-contract-Bl7I_EOC.js";
|
|
10
|
-
import { c as recordAic, d as extractCopilotUsage, f as formatAic, i as extractAndRecordAic, p as nanoAiuToCredits } from "./aic-ledger-
|
|
10
|
+
import { c as recordAic, d as extractCopilotUsage, f as formatAic, i as extractAndRecordAic, p as nanoAiuToCredits } from "./aic-ledger-DY03LbBM.js";
|
|
11
11
|
import consola from "consola";
|
|
12
12
|
import fs, { existsSync } from "node:fs";
|
|
13
13
|
import path from "node:path";
|
|
@@ -1284,6 +1284,17 @@ async function renameSettingsWithRetry(temp, target) {
|
|
|
1284
1284
|
await fs$1.rm(temp, { force: true }).catch(() => {});
|
|
1285
1285
|
throw lastError;
|
|
1286
1286
|
}
|
|
1287
|
+
/**
|
|
1288
|
+
* Profiles whose sessions run router-provided surfaces only. On these
|
|
1289
|
+
* launches a user-curated `modelPicker` in the (per-launch, disposable)
|
|
1290
|
+
* mirror is overwritten with the router rows rather than preserved: the
|
|
1291
|
+
* mirror is a snapshot copy, so the operator's real settings are never
|
|
1292
|
+
* touched, but a stale standard `[1m]` picker must not survive into a
|
|
1293
|
+
* 200K session's `/model` UI.
|
|
1294
|
+
*/
|
|
1295
|
+
function routerWinsPicker(profile) {
|
|
1296
|
+
return profile === "fast" || profile === "cheap" || profile === "cheap1m" || profile === "cheapest";
|
|
1297
|
+
}
|
|
1287
1298
|
function modelIdsFromExistingPicker(value) {
|
|
1288
1299
|
if (!value || typeof value !== "object" || Array.isArray(value)) return [];
|
|
1289
1300
|
const options = value.options;
|
|
@@ -1308,11 +1319,16 @@ async function injectModelPickerSettingsFile(settingsPath, profile) {
|
|
|
1308
1319
|
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) throw new Error(`settings.json at ${settingsPath} is not a JSON object; refusing to overwrite`);
|
|
1309
1320
|
existing = parsed;
|
|
1310
1321
|
}
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1322
|
+
let overwroteUserPicker = false;
|
|
1323
|
+
if ("modelPicker" in existing) {
|
|
1324
|
+
if (!routerWinsPicker(profile)) return {
|
|
1325
|
+
written: false,
|
|
1326
|
+
reason: "user-set",
|
|
1327
|
+
models: modelIdsFromExistingPicker(existing.modelPicker)
|
|
1328
|
+
};
|
|
1329
|
+
overwroteUserPicker = true;
|
|
1330
|
+
delete existing.modelPicker;
|
|
1331
|
+
}
|
|
1316
1332
|
if (options.length === 0) return {
|
|
1317
1333
|
written: false,
|
|
1318
1334
|
reason: "no-models",
|
|
@@ -1337,6 +1353,7 @@ async function injectModelPickerSettingsFile(settingsPath, profile) {
|
|
|
1337
1353
|
}
|
|
1338
1354
|
return {
|
|
1339
1355
|
written: true,
|
|
1356
|
+
...overwroteUserPicker ? { reason: "router-overwrite" } : {},
|
|
1340
1357
|
models: options.map((option) => option.model)
|
|
1341
1358
|
};
|
|
1342
1359
|
}
|
|
@@ -2196,7 +2213,7 @@ function collectToolFieldKeys(body) {
|
|
|
2196
2213
|
//#endregion
|
|
2197
2214
|
//#region package.json
|
|
2198
2215
|
var name = "github-router";
|
|
2199
|
-
var version = "0.3.
|
|
2216
|
+
var version = "0.3.317";
|
|
2200
2217
|
//#endregion
|
|
2201
2218
|
//#region src/lib/approval.ts
|
|
2202
2219
|
const awaitApproval = async () => {
|
|
@@ -5028,7 +5045,9 @@ async function handleNonClaudeResponses(c, opts) {
|
|
|
5028
5045
|
return stream;
|
|
5029
5046
|
}
|
|
5030
5047
|
const payload = parsedToResponsesPayload(parsed);
|
|
5031
|
-
const
|
|
5048
|
+
const result = await createResponses(payload, opts.model?.requestHeaders, void 0, true);
|
|
5049
|
+
extractAndRecordAic(opts.modelId, result);
|
|
5050
|
+
const anthropic = responsesResponseToAnthropicMessage(result, opts.modelId);
|
|
5032
5051
|
const usage = anthropic.usage;
|
|
5033
5052
|
logRequest({
|
|
5034
5053
|
method: "POST",
|
|
@@ -5084,7 +5103,9 @@ async function handleNonClaudeChat(c, opts) {
|
|
|
5084
5103
|
return stream;
|
|
5085
5104
|
}
|
|
5086
5105
|
const payload = parsedToChatPayload(parsed);
|
|
5087
|
-
const
|
|
5106
|
+
const result = await createChatCompletions(payload, opts.model?.requestHeaders, void 0, true);
|
|
5107
|
+
extractAndRecordAic(opts.modelId, result);
|
|
5108
|
+
const anthropic = chatResponseToAnthropicMessage(result, opts.modelId);
|
|
5088
5109
|
const usage = anthropic.usage;
|
|
5089
5110
|
logRequest({
|
|
5090
5111
|
method: "POST",
|
|
@@ -5248,16 +5269,37 @@ Object.freeze([MAX_LUNA_HIGH_ALIAS_ID, MAX_LUNA_MAX_ALIAS_ID]);
|
|
|
5248
5269
|
//#endregion
|
|
5249
5270
|
//#region src/lib/fast-request-preprocess.ts
|
|
5250
5271
|
const cheapFamily = (profileId) => profileId === "cheap" || profileId === "cheap1m" || profileId === "cheapest";
|
|
5272
|
+
const pinnedProfile = (profileId) => profileId === "fast" || cheapFamily(profileId);
|
|
5273
|
+
/**
|
|
5274
|
+
* Profiles whose every selectable `/model` row must stay at Claude Code's
|
|
5275
|
+
* 200K DEFAULT context window (bare id, no `[1m]` accounting bracket).
|
|
5276
|
+
* `fast` keeps 1M on lead and subagents by design; `cheap1m` keeps 1M on
|
|
5277
|
+
* the lead only (its subagents are bare-by-construction).
|
|
5278
|
+
*/
|
|
5279
|
+
const bareEnforcedProfile = (profileId) => profileId === "cheap" || profileId === "cheapest";
|
|
5280
|
+
function explicitEffortOf(value) {
|
|
5281
|
+
return typeof value === "string" && value.trim() !== "" ? value : void 0;
|
|
5282
|
+
}
|
|
5251
5283
|
/**
|
|
5252
5284
|
* Apply authenticated fast/cheap-profile model and effort policy before
|
|
5253
5285
|
* ordinary model resolution. Synthetic aliases are refused outside an
|
|
5254
|
-
* authenticated
|
|
5255
|
-
*
|
|
5256
|
-
*
|
|
5257
|
-
*
|
|
5286
|
+
* authenticated pinned launch, so raw/BYO traffic cannot opt itself into
|
|
5287
|
+
* private profile semantics. The cheap family (including cheapest) shares
|
|
5288
|
+
* fast's effort mapping (same model-to-effort rows, just bare subagent
|
|
5289
|
+
* slugs at the wiring layer), so this preprocess is shared.
|
|
5258
5290
|
* Note the reviewer differs: fast reviews on Sonnet 5/xhigh while cheap
|
|
5259
5291
|
* reviews on Luna/max and cheapest reviews on Gemini/high — all rows exist
|
|
5260
5292
|
* here, so each profile's reviewer resolves to its fixed effort.
|
|
5293
|
+
*
|
|
5294
|
+
* Pinned-profile isolation (fast/cheap/cheap1m/cheapest): only
|
|
5295
|
+
* router-provided models are accepted (anything else is `rejectedModel`).
|
|
5296
|
+
* Context: cheap/cheapest traffic is stripped to the bare 200K id;
|
|
5297
|
+
* cheap1m subagent traffic is stripped while its lead keeps 1M; fast
|
|
5298
|
+
* keeps 1M on both. Effort: picker changes apply to the lead session
|
|
5299
|
+
* only — lead requests keep an explicit `output_config.effort` when
|
|
5300
|
+
* present and fall back to the fixed mapping otherwise, while subagent
|
|
5301
|
+
* traffic (`x-claude-code-agent-id`) always receives its fixed
|
|
5302
|
+
* per-model effort.
|
|
5261
5303
|
*/
|
|
5262
5304
|
function preprocessFastRequest(rawBody, launch, subagentRequest = false) {
|
|
5263
5305
|
if (launch?.profileId === "max") return preprocessMaxRequest(rawBody, launch, subagentRequest);
|
|
@@ -5294,23 +5336,30 @@ function preprocessFastRequest(rawBody, launch, subagentRequest = false) {
|
|
|
5294
5336
|
modified: false
|
|
5295
5337
|
};
|
|
5296
5338
|
const { base: bare } = stripTrailingOneMSuffix(originalModel);
|
|
5297
|
-
|
|
5339
|
+
const profileId = launch?.profileId;
|
|
5340
|
+
const stripBracket = bareEnforcedProfile(profileId) || profileId === "cheap1m" && subagentRequest;
|
|
5341
|
+
const leadCallerControlled = pinnedProfile(profileId) && !subagentRequest;
|
|
5342
|
+
let fixedEffort;
|
|
5298
5343
|
if (alias) {
|
|
5299
|
-
|
|
5344
|
+
fixedEffort = alias.absentEffortDefault;
|
|
5300
5345
|
parsed.model = canonicalizeAliasModel(originalModel);
|
|
5301
|
-
} else if (bare === "gpt-5.6-luna")
|
|
5302
|
-
else if (bare === "gpt-5.6-sol")
|
|
5303
|
-
else if (bare === "grok-4.6")
|
|
5304
|
-
else if (bare === "gemini-3.8-flash")
|
|
5305
|
-
else if (bare === "claude-sonnet-5")
|
|
5306
|
-
else if (bare === "claude-opus-5")
|
|
5307
|
-
if (!
|
|
5346
|
+
} else if (bare === "gpt-5.6-luna") fixedEffort = "max";
|
|
5347
|
+
else if (bare === "gpt-5.6-sol") fixedEffort = "high";
|
|
5348
|
+
else if (bare === "grok-4.6") fixedEffort = "medium";
|
|
5349
|
+
else if (bare === "gemini-3.8-flash") fixedEffort = "high";
|
|
5350
|
+
else if (bare === "claude-sonnet-5") fixedEffort = "xhigh";
|
|
5351
|
+
else if (bare === "claude-opus-5") fixedEffort = "high";
|
|
5352
|
+
if (!fixedEffort && !alias) return {
|
|
5308
5353
|
body: rawBody,
|
|
5309
5354
|
originalModel,
|
|
5310
5355
|
modified: false,
|
|
5311
5356
|
rejectedModel: originalModel
|
|
5312
5357
|
};
|
|
5358
|
+
if (stripBracket && typeof parsed.model === "string") parsed.model = stripTrailingOneMSuffix(parsed.model).base;
|
|
5359
|
+
else if (stripBracket) parsed.model = bare;
|
|
5313
5360
|
const outputConfig = parsed.output_config && typeof parsed.output_config === "object" ? parsed.output_config : {};
|
|
5361
|
+
const explicitEffort = explicitEffortOf(outputConfig.effort);
|
|
5362
|
+
const effort = leadCallerControlled && explicitEffort ? explicitEffort : fixedEffort;
|
|
5314
5363
|
parsed.output_config = {
|
|
5315
5364
|
...outputConfig,
|
|
5316
5365
|
effort
|
|
@@ -7513,22 +7562,23 @@ function getClaudeCodeEnvVars(serverUrl, model, launchProfileId = "standard", pi
|
|
|
7513
7562
|
const isFastProfile = launchProfileId === "fast";
|
|
7514
7563
|
const isMaxProfile = launchProfileId === "max";
|
|
7515
7564
|
const isCheapProfile = launchProfileId === "cheap" || launchProfileId === "cheap1m" || launchProfileId === "cheapest";
|
|
7565
|
+
const routerWinsTiers = isFastProfile || isCheapProfile;
|
|
7516
7566
|
const smallFastModel = isMaxProfile ? MAX_LUNA_HIGH_ALIAS_ID : isFastProfile ? LUNA_HAIKU_ALIAS_ID : isCheapProfile ? LUNA_HAIKU_ALIAS_ID : isBudgetClaudeLead(model) && (state.models?.data?.some((m) => m.id === "claude-haiku-4.5") ?? false) ? BUDGET_SMALL_FAST_SLUG : "claude-sonnet-5";
|
|
7517
|
-
if (process.env.ANTHROPIC_SMALL_FAST_MODEL === void 0) vars.ANTHROPIC_SMALL_FAST_MODEL = (isFastProfile || isMaxProfile) && !isCheapProfile ? oneMSuffixForAlias(smallFastModel) : smallFastModel;
|
|
7567
|
+
if (process.env.ANTHROPIC_SMALL_FAST_MODEL === void 0 || routerWinsTiers) vars.ANTHROPIC_SMALL_FAST_MODEL = (isFastProfile || isMaxProfile) && !isCheapProfile ? oneMSuffixForAlias(smallFastModel) : smallFastModel;
|
|
7518
7568
|
const seedTierRow = (modelKey, nameKey, bareSlug) => {
|
|
7519
7569
|
if (process.env[modelKey] !== void 0) return;
|
|
7520
7570
|
vars[modelKey] = withOneMSuffixForLead(bareSlug);
|
|
7521
7571
|
if (process.env[nameKey] === void 0) vars[nameKey] = bareSlug;
|
|
7522
7572
|
};
|
|
7523
|
-
const seedFastAliasTierRow = (modelKey, nameKey, aliasId, displayName) => {
|
|
7524
|
-
if (process.env[modelKey] !== void 0) return;
|
|
7573
|
+
const seedFastAliasTierRow = (modelKey, nameKey, aliasId, displayName, force = false) => {
|
|
7574
|
+
if (!force && process.env[modelKey] !== void 0) return;
|
|
7525
7575
|
vars[modelKey] = oneMSuffixForAlias(aliasId);
|
|
7526
|
-
if (process.env[nameKey] === void 0) vars[nameKey] = displayName;
|
|
7576
|
+
if (force || process.env[nameKey] === void 0) vars[nameKey] = displayName;
|
|
7527
7577
|
};
|
|
7528
|
-
const seedCheapAliasTierRow = (modelKey, nameKey, aliasId, displayName) => {
|
|
7529
|
-
if (process.env[modelKey] !== void 0) return;
|
|
7578
|
+
const seedCheapAliasTierRow = (modelKey, nameKey, aliasId, displayName, force = false) => {
|
|
7579
|
+
if (!force && process.env[modelKey] !== void 0) return;
|
|
7530
7580
|
vars[modelKey] = aliasId;
|
|
7531
|
-
if (process.env[nameKey] === void 0) vars[nameKey] = displayName;
|
|
7581
|
+
if (force || process.env[nameKey] === void 0) vars[nameKey] = displayName;
|
|
7532
7582
|
};
|
|
7533
7583
|
if (isMaxProfile) {
|
|
7534
7584
|
const seedMaxRow = (modelKey, nameKey, id) => {
|
|
@@ -7544,26 +7594,26 @@ function getClaudeCodeEnvVars(serverUrl, model, launchProfileId = "standard", pi
|
|
|
7544
7594
|
if (process.env.ANTHROPIC_CUSTOM_MODEL_OPTION_NAME === void 0) vars.ANTHROPIC_CUSTOM_MODEL_OPTION_NAME = "GPT-5.6 Sol";
|
|
7545
7595
|
}
|
|
7546
7596
|
} else if (isCheapProfile) {
|
|
7547
|
-
seedCheapAliasTierRow("ANTHROPIC_DEFAULT_SONNET_MODEL", "ANTHROPIC_DEFAULT_SONNET_MODEL_NAME", LUNA_SONNET_ALIAS_ID, "GPT-5.6 Luna (xhigh)");
|
|
7548
|
-
seedCheapAliasTierRow("ANTHROPIC_DEFAULT_HAIKU_MODEL", "ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME", LUNA_HAIKU_ALIAS_ID, "GPT-5.6 Luna (high)");
|
|
7597
|
+
seedCheapAliasTierRow("ANTHROPIC_DEFAULT_SONNET_MODEL", "ANTHROPIC_DEFAULT_SONNET_MODEL_NAME", LUNA_SONNET_ALIAS_ID, "GPT-5.6 Luna (xhigh)", routerWinsTiers);
|
|
7598
|
+
seedCheapAliasTierRow("ANTHROPIC_DEFAULT_HAIKU_MODEL", "ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME", LUNA_HAIKU_ALIAS_ID, "GPT-5.6 Luna (high)", routerWinsTiers);
|
|
7549
7599
|
const cheapAliasCapabilities = "effort,xhigh_effort,max_effort,thinking,adaptive_thinking,interleaved_thinking";
|
|
7550
|
-
if (process.env.ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES === void 0) vars.ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES = cheapAliasCapabilities;
|
|
7551
|
-
if (process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES === void 0) vars.ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES = cheapAliasCapabilities;
|
|
7552
|
-
if (process.env.ANTHROPIC_CUSTOM_MODEL_OPTION === void 0) {
|
|
7600
|
+
if (routerWinsTiers || process.env.ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES === void 0) vars.ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES = cheapAliasCapabilities;
|
|
7601
|
+
if (routerWinsTiers || process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES === void 0) vars.ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES = cheapAliasCapabilities;
|
|
7602
|
+
if (routerWinsTiers || process.env.ANTHROPIC_CUSTOM_MODEL_OPTION === void 0) {
|
|
7553
7603
|
vars.ANTHROPIC_CUSTOM_MODEL_OPTION = LUNA_DRIVER_ALIAS_ID;
|
|
7554
|
-
if (process.env.ANTHROPIC_CUSTOM_MODEL_OPTION_NAME === void 0) vars.ANTHROPIC_CUSTOM_MODEL_OPTION_NAME = "GPT-5.6 Luna (max)";
|
|
7555
|
-
if (process.env.ANTHROPIC_CUSTOM_MODEL_OPTION_SUPPORTED_CAPABILITIES === void 0) vars.ANTHROPIC_CUSTOM_MODEL_OPTION_SUPPORTED_CAPABILITIES = cheapAliasCapabilities;
|
|
7604
|
+
if (routerWinsTiers || process.env.ANTHROPIC_CUSTOM_MODEL_OPTION_NAME === void 0) vars.ANTHROPIC_CUSTOM_MODEL_OPTION_NAME = "GPT-5.6 Luna (max)";
|
|
7605
|
+
if (routerWinsTiers || process.env.ANTHROPIC_CUSTOM_MODEL_OPTION_SUPPORTED_CAPABILITIES === void 0) vars.ANTHROPIC_CUSTOM_MODEL_OPTION_SUPPORTED_CAPABILITIES = cheapAliasCapabilities;
|
|
7556
7606
|
}
|
|
7557
7607
|
} else if (isFastProfile) {
|
|
7558
|
-
seedFastAliasTierRow("ANTHROPIC_DEFAULT_SONNET_MODEL", "ANTHROPIC_DEFAULT_SONNET_MODEL_NAME", LUNA_SONNET_ALIAS_ID, "GPT-5.6 Luna (xhigh)");
|
|
7559
|
-
seedFastAliasTierRow("ANTHROPIC_DEFAULT_HAIKU_MODEL", "ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME", LUNA_HAIKU_ALIAS_ID, "GPT-5.6 Luna (high)");
|
|
7608
|
+
seedFastAliasTierRow("ANTHROPIC_DEFAULT_SONNET_MODEL", "ANTHROPIC_DEFAULT_SONNET_MODEL_NAME", LUNA_SONNET_ALIAS_ID, "GPT-5.6 Luna (xhigh)", routerWinsTiers);
|
|
7609
|
+
seedFastAliasTierRow("ANTHROPIC_DEFAULT_HAIKU_MODEL", "ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME", LUNA_HAIKU_ALIAS_ID, "GPT-5.6 Luna (high)", routerWinsTiers);
|
|
7560
7610
|
const fastAliasCapabilities = "effort,xhigh_effort,max_effort,thinking,adaptive_thinking,interleaved_thinking";
|
|
7561
|
-
if (process.env.ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES === void 0) vars.ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES = fastAliasCapabilities;
|
|
7562
|
-
if (process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES === void 0) vars.ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES = fastAliasCapabilities;
|
|
7563
|
-
if (process.env.ANTHROPIC_CUSTOM_MODEL_OPTION === void 0) {
|
|
7611
|
+
if (routerWinsTiers || process.env.ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES === void 0) vars.ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES = fastAliasCapabilities;
|
|
7612
|
+
if (routerWinsTiers || process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES === void 0) vars.ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES = fastAliasCapabilities;
|
|
7613
|
+
if (routerWinsTiers || process.env.ANTHROPIC_CUSTOM_MODEL_OPTION === void 0) {
|
|
7564
7614
|
vars.ANTHROPIC_CUSTOM_MODEL_OPTION = oneMSuffixForAlias(LUNA_DRIVER_ALIAS_ID);
|
|
7565
|
-
if (process.env.ANTHROPIC_CUSTOM_MODEL_OPTION_NAME === void 0) vars.ANTHROPIC_CUSTOM_MODEL_OPTION_NAME = "GPT-5.6 Luna (max)";
|
|
7566
|
-
if (process.env.ANTHROPIC_CUSTOM_MODEL_OPTION_SUPPORTED_CAPABILITIES === void 0) vars.ANTHROPIC_CUSTOM_MODEL_OPTION_SUPPORTED_CAPABILITIES = fastAliasCapabilities;
|
|
7615
|
+
if (routerWinsTiers || process.env.ANTHROPIC_CUSTOM_MODEL_OPTION_NAME === void 0) vars.ANTHROPIC_CUSTOM_MODEL_OPTION_NAME = "GPT-5.6 Luna (max)";
|
|
7616
|
+
if (routerWinsTiers || process.env.ANTHROPIC_CUSTOM_MODEL_OPTION_SUPPORTED_CAPABILITIES === void 0) vars.ANTHROPIC_CUSTOM_MODEL_OPTION_SUPPORTED_CAPABILITIES = fastAliasCapabilities;
|
|
7567
7617
|
}
|
|
7568
7618
|
} else {
|
|
7569
7619
|
seedTierRow("ANTHROPIC_DEFAULT_SONNET_MODEL", "ANTHROPIC_DEFAULT_SONNET_MODEL_NAME", "claude-sonnet-5");
|
|
@@ -7662,4 +7712,4 @@ function getCodexEnvVars(serverUrl) {
|
|
|
7662
7712
|
//#endregion
|
|
7663
7713
|
export { validateMaxProfileLaunch as C, updateClaude as E, validateFastProfilePrerequisites as S, checkClaudeVersion as T, profileDescriptor as _, sharedServerArgs as a, validateCheapProfilePrerequisites as b, stopKeepAwake as c, enableFileLogging as d, LUNA_SCOUT_ALIAS_ID as f, formatFastPrerequisiteFailure as g, formatCheapestPrerequisiteFailure as h, setupAndServe as i, injectModelPickerSettingsFile as l, formatCheapPrerequisiteFailure as m, getCodexEnvVars as n, LAUNCH_SECRET_HEADER as o, formatCheap1mPrerequisiteFailure as p, parseSharedArgs as r, startKeepAwake as s, getClaudeCodeEnvVars as t, listModelsForEndpoint as u, resolveLaunchProfile as v, runSelfUpdate as w, validateCheapestProfilePrerequisites as x, validateCheap1mProfilePrerequisites as y };
|
|
7664
7714
|
|
|
7665
|
-
//# sourceMappingURL=server-setup-
|
|
7715
|
+
//# sourceMappingURL=server-setup-0PaS4m2B.js.map
|