github-router 0.3.295 → 0.3.297

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.
Files changed (37) hide show
  1. package/dist/{attribution-settings-pkIop1NU.js → attribution-settings-B70GmZ68.js} +10 -9
  2. package/dist/attribution-settings-B70GmZ68.js.map +1 -0
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/{claude-DNmxk-Rm.js → claude-DMMfvfns.js} +96 -44
  5. package/dist/claude-DMMfvfns.js.map +1 -0
  6. package/dist/{codex-Dl4gpHn-.js → codex-DVOyVv2B.js} +4 -4
  7. package/dist/{codex-Dl4gpHn-.js.map → codex-DVOyVv2B.js.map} +1 -1
  8. package/dist/engine-BkGRuUNs.js +2 -0
  9. package/dist/fast-profile-contract-K3P58nj3.js +57 -0
  10. package/dist/fast-profile-contract-K3P58nj3.js.map +1 -0
  11. package/dist/{gate-discovery-WcduofL4.js → gate-discovery-G6PAG61j.js} +2 -2
  12. package/dist/{gate-discovery-WcduofL4.js.map → gate-discovery-G6PAG61j.js.map} +1 -1
  13. package/dist/hooks.mjs +64 -16
  14. package/dist/hooks.sha256 +1 -1
  15. package/dist/{internal-fast-dispatch-guard-Xyu17k9X.js → internal-fast-dispatch-guard-Bkr_iGOu.js} +21 -17
  16. package/dist/internal-fast-dispatch-guard-Bkr_iGOu.js.map +1 -0
  17. package/dist/{internal-fast-dispatch-guard-CPlCrTlU.js → internal-fast-dispatch-guard-N-RaLrOn.js} +1 -1
  18. package/dist/{internal-stop-hook-DJFtGCsE.js → internal-stop-hook-BjzrF1zd.js} +2 -2
  19. package/dist/{internal-stop-hook-DJFtGCsE.js.map → internal-stop-hook-BjzrF1zd.js.map} +1 -1
  20. package/dist/main.js +6 -6
  21. package/dist/{peer-mcp-personas-BwNtC8jt.js → peer-mcp-personas-ce6_YMnX.js} +77 -76
  22. package/dist/peer-mcp-personas-ce6_YMnX.js.map +1 -0
  23. package/dist/{provision-DeNqzvSM.js → provision-BhCtm3md.js} +2 -2
  24. package/dist/{provision-DeNqzvSM.js.map → provision-BhCtm3md.js.map} +1 -1
  25. package/dist/{serve-BS5EmCpM.js → serve-Blj_dRSr.js} +5 -5
  26. package/dist/{serve-BS5EmCpM.js.map → serve-Blj_dRSr.js.map} +1 -1
  27. package/dist/{server-setup-DsGJnJ_O.js → server-setup-DhG3YZPj.js} +62 -11
  28. package/dist/server-setup-DhG3YZPj.js.map +1 -0
  29. package/dist/{start-vJdt2MiM.js → start-8QaqICtd.js} +3 -3
  30. package/dist/{start-vJdt2MiM.js.map → start-8QaqICtd.js.map} +1 -1
  31. package/package.json +1 -1
  32. package/dist/attribution-settings-pkIop1NU.js.map +0 -1
  33. package/dist/claude-DNmxk-Rm.js.map +0 -1
  34. package/dist/engine-XnluJUs6.js +0 -2
  35. package/dist/internal-fast-dispatch-guard-Xyu17k9X.js.map +0 -1
  36. package/dist/peer-mcp-personas-BwNtC8jt.js.map +0 -1
  37. package/dist/server-setup-DsGJnJ_O.js.map +0 -1
package/dist/main.js CHANGED
@@ -47,14 +47,14 @@ const main = defineCommand({
47
47
  },
48
48
  subCommands: {
49
49
  auth: () => import("./auth-CluG5e-l.js").then((m) => m.auth),
50
- start: () => import("./start-vJdt2MiM.js").then((m) => m.start),
51
- claude: () => import("./claude-DNmxk-Rm.js").then((m) => m.claude),
52
- codex: () => import("./codex-Dl4gpHn-.js").then((m) => m.codex),
53
- serve: () => import("./serve-BS5EmCpM.js").then((m) => m.serve),
50
+ start: () => import("./start-8QaqICtd.js").then((m) => m.start),
51
+ claude: () => import("./claude-DMMfvfns.js").then((m) => m.claude),
52
+ codex: () => import("./codex-DVOyVv2B.js").then((m) => m.codex),
53
+ serve: () => import("./serve-Blj_dRSr.js").then((m) => m.serve),
54
54
  models: () => import("./models-DZ4hYsR7.js").then((m) => m.models),
55
55
  "check-usage": () => import("./check-usage-iOzfnKJe.js").then((m) => m.checkUsage),
56
56
  debug: () => import("./debug-DsEwleGg.js").then((m) => m.debug),
57
- "internal-stop-hook": () => import("./internal-stop-hook-DJFtGCsE.js").then((m) => m.internalStopHook),
57
+ "internal-stop-hook": () => import("./internal-stop-hook-BjzrF1zd.js").then((m) => m.internalStopHook),
58
58
  "internal-prompt-submit": () => import("./internal-prompt-submit-C3KovHQG.js").then((m) => m.internalPromptSubmit),
59
59
  "internal-stop-review": () => import("./internal-stop-review-YtDUGXpX.js").then((m) => m.internalStopReview),
60
60
  "internal-plan-review": () => import("./internal-plan-review-t3PuNfuL.js").then((m) => m.internalPlanReview),
@@ -63,7 +63,7 @@ const main = defineCommand({
63
63
  "internal-artifact-open": () => import("./internal-artifact-open-D6tKMg8v.js").then((m) => m.internalArtifactOpen),
64
64
  "internal-first-mate-guard": () => import("./internal-first-mate-guard-WJApyc8j.js").then((m) => m.internalFirstMateGuard),
65
65
  "internal-worker-guard": () => import("./internal-worker-guard-CdkeS9PN.js").then((m) => m.internalWorkerGuard),
66
- "internal-fast-dispatch-guard": () => import("./internal-fast-dispatch-guard-CPlCrTlU.js").then((m) => m.internalFastDispatchGuard)
66
+ "internal-fast-dispatch-guard": () => import("./internal-fast-dispatch-guard-N-RaLrOn.js").then((m) => m.internalFastDispatchGuard)
67
67
  }
68
68
  });
69
69
  /**
@@ -3,6 +3,7 @@ import { t as getPackageVersion } from "./version-C8x2hQrZ.js";
3
3
  import { t as PATHS } from "./paths-Ci485qSJ.js";
4
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-BtJhjXXu.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 { a as FAST_PROFILE_MODELS, c as FAST_PROFILE_NATIVE_MODELS, l as FAST_PROFILE_ORACLE_EFFORT, n as FAST_PROFILE_ADVISOR_EFFORT, o as FAST_PROFILE_NATIVE_AGENT_NAMES, r as FAST_PROFILE_ADVISOR_MODEL, s as FAST_PROFILE_NATIVE_EFFORTS, u as FAST_PROFILE_ORACLE_MODEL } from "./fast-profile-contract-K3P58nj3.js";
6
7
  import { i as registerExitHandlers$1, n as getInstanceUuid, r as recordWorkerRepo, t as WorktreeRegistry } from "./lifecycle-Bg6doY3-.js";
7
8
  import { t as MCP_WORKSPACE_HEADER } from "./mcp-workspace-header-dERl2YTT.js";
8
9
  import { n as ArtifactError, r as applyInsecureTls, t as ArtifactClient } from "./client-CQMfroGV.js";
@@ -520,7 +521,7 @@ const DEFAULT_OPUS_FAMILY = "5";
520
521
  * keys off the same raw `-m` argument this constant is selected by, so the
521
522
  * two can never disagree about which launches count as "fast".
522
523
  */
523
- const FAST_LEAD_MODEL = "gpt-5.6-luna";
524
+ const FAST_LEAD_MODEL = FAST_PROFILE_MODELS.luna;
524
525
  /** Small/fast tier for a budget lead, in the two forms this codebase needs.
525
526
  *
526
527
  * `SLUG` is the Anthropic-published DASHED form and is what goes into
@@ -27523,7 +27524,7 @@ const STANDARD_PROFILE = Object.freeze({
27523
27524
  hasCoordinator: true
27524
27525
  });
27525
27526
  /**
27526
- * The `-m fast` roster: exactly five native agents (`scout`, `implementer`,
27527
+ * The `-m fast` roster: exactly five native agents (`Explore`, `implementer`,
27527
27528
  * `reviewer`, `planner`, `critic`), the fast-only `oracle` peer tool, no coordinator,
27528
27529
  * and only `peers`/`search` plus the ordinary opt-in `browser` group.
27529
27530
  * `workers`/`orchestrate`/`decide`/`fleet`/`first-mate` are hard denies even
@@ -27531,13 +27532,7 @@ const STANDARD_PROFILE = Object.freeze({
27531
27532
  */
27532
27533
  const FAST_PROFILE = Object.freeze({
27533
27534
  id: "fast",
27534
- nativeRoster: /* @__PURE__ */ new Set([
27535
- "scout",
27536
- "implementer",
27537
- "reviewer",
27538
- "planner",
27539
- "critic"
27540
- ]),
27535
+ nativeRoster: new Set(FAST_PROFILE_NATIVE_AGENT_NAMES),
27541
27536
  personaAllowlist: /* @__PURE__ */ new Set(["oracle"]),
27542
27537
  allowedGroups: /* @__PURE__ */ new Set([
27543
27538
  "peers",
@@ -27572,7 +27567,7 @@ function resolveLaunchProfile(modelArg) {
27572
27567
  const LUNA_DRIVER_ALIAS_ID = "gh-router-luna-driver-max";
27573
27568
  /** Fast native-agent alias ids preserve role-specific effort provenance until
27574
27569
  * the authenticated request boundary. They both canonicalize to Luna, but the
27575
- * scout is fixed high while the implementer is fixed max. */
27570
+ * Explore is fixed high while the implementer is fixed max. */
27576
27571
  const LUNA_SCOUT_ALIAS_ID = "gh-router-luna-scout-high";
27577
27572
  const LUNA_IMPLEMENTER_ALIAS_ID = "gh-router-luna-implementer-max";
27578
27573
  /** Fast-profile critic alias. It preserves Gemini's fixed medium effort until
@@ -27587,7 +27582,7 @@ const LUNA_SONNET_ALIAS_ID = "gh-router-luna-sonnet-xhigh";
27587
27582
  const LUNA_HAIKU_ALIAS_ID = "gh-router-luna-haiku-high";
27588
27583
  /** The real Copilot catalog id every Luna alias (including the driver
27589
27584
  * itself) canonicalizes to. */
27590
- const LUNA_REAL_MODEL_ID = "gpt-5.6-luna";
27585
+ const LUNA_REAL_MODEL_ID = FAST_PROFILE_MODELS.luna;
27591
27586
  /**
27592
27587
  * The full alias table, keyed by `aliasId`. A simpler model-id-only table is
27593
27588
  * rejected by design: the driver, the Sonnet tier, and the Haiku tier all
@@ -27617,7 +27612,7 @@ const MODEL_ALIAS_TABLE = /* @__PURE__ */ new Map([
27617
27612
  }],
27618
27613
  [FAST_CRITIC_ALIAS_ID, {
27619
27614
  aliasId: FAST_CRITIC_ALIAS_ID,
27620
- realModel: "gemini-3.7-flash",
27615
+ realModel: FAST_PROFILE_MODELS.critic,
27621
27616
  absentEffortDefault: "medium"
27622
27617
  }],
27623
27618
  [LUNA_SONNET_ALIAS_ID, {
@@ -27691,7 +27686,7 @@ function hasPromptAtLeast(model, tokens) {
27691
27686
  * than silently substituting or dropping an agent.
27692
27687
  *
27693
27688
  * Checks, per the fast-launch-profile design:
27694
- * - Luna lead/scout/implementer: tool calls, >=1M, high+max, Responses.
27689
+ * - Luna lead/Explore/implementer: tool calls, >=1M, high+max, Responses.
27695
27690
  * - Sol planner: tool calls, >=1M, high, Responses.
27696
27691
  * - Grok reviewer: tool calls, medium, Responses, usable prompt metadata.
27697
27692
  * - Gemini Advisor: >=1M, high, chat-completions.
@@ -27711,39 +27706,39 @@ function validateFastProfilePrerequisites(catalog) {
27711
27706
  if (!supportsEffort(luna, "high") || !supportsEffort(luna, "max")) missing.push(`${LUNA_REAL_MODEL_ID}: does not advertise both "high" and "max" reasoning effort`);
27712
27707
  if (!supportsEndpoint(luna, "responses")) missing.push(`${LUNA_REAL_MODEL_ID}: does not advertise a supported Responses endpoint`);
27713
27708
  }
27714
- const sol = findModel(catalog, "gpt-5.6-sol");
27715
- if (!sol) missing.push("gpt-5.6-sol: absent from the live catalog");
27709
+ const sol = findModel(catalog, FAST_PROFILE_MODELS.planner);
27710
+ if (!sol) missing.push(`${FAST_PROFILE_MODELS.planner}: absent from the live catalog`);
27716
27711
  else {
27717
- if (!hasToolCalls(sol)) missing.push("gpt-5.6-sol: does not advertise tool_calls");
27718
- if (!hasContextAtLeast(sol, FAST_REQUIRED_CONTEXT_TOKENS)) missing.push("gpt-5.6-sol: advertised context window is below 1M");
27719
- if (!supportsEffort(sol, "high")) missing.push("gpt-5.6-sol: does not advertise a \"high\" reasoning effort");
27720
- if (!supportsEndpoint(sol, "responses")) missing.push("gpt-5.6-sol: does not advertise a supported Responses endpoint");
27712
+ if (!hasToolCalls(sol)) missing.push(`${FAST_PROFILE_MODELS.planner}: does not advertise tool_calls`);
27713
+ if (!hasContextAtLeast(sol, FAST_REQUIRED_CONTEXT_TOKENS)) missing.push(`${FAST_PROFILE_MODELS.planner}: advertised context window is below 1M`);
27714
+ if (!supportsEffort(sol, "high")) missing.push(`${FAST_PROFILE_MODELS.planner}: does not advertise a "high" reasoning effort`);
27715
+ if (!supportsEndpoint(sol, "responses")) missing.push(`${FAST_PROFILE_MODELS.planner}: does not advertise a supported Responses endpoint`);
27721
27716
  }
27722
- const grok = findModel(catalog, "grok-4.6");
27723
- if (!grok) missing.push("grok-4.6: absent from the live catalog");
27717
+ const grok = findModel(catalog, FAST_PROFILE_MODELS.reviewer);
27718
+ if (!grok) missing.push(`${FAST_PROFILE_MODELS.reviewer}: absent from the live catalog`);
27724
27719
  else {
27725
- if (!hasToolCalls(grok)) missing.push("grok-4.6: does not advertise tool_calls");
27726
- if (!supportsEffort(grok, "medium")) missing.push("grok-4.6: does not advertise a \"medium\" reasoning effort");
27727
- if (!hasPromptAtLeast(grok, 2e5)) missing.push(`grok-4.6: advertised max_prompt_tokens is below ${FAST_REVIEWER_MIN_PROMPT_TOKENS}`);
27728
- if (!supportsEndpoint(grok, "responses")) missing.push("grok-4.6: does not advertise a supported Responses endpoint");
27720
+ if (!hasToolCalls(grok)) missing.push(`${FAST_PROFILE_MODELS.reviewer}: does not advertise tool_calls`);
27721
+ if (!supportsEffort(grok, "medium")) missing.push(`${FAST_PROFILE_MODELS.reviewer}: does not advertise a "medium" reasoning effort`);
27722
+ if (!hasPromptAtLeast(grok, 2e5)) missing.push(`${FAST_PROFILE_MODELS.reviewer}: advertised max_prompt_tokens is below ${FAST_REVIEWER_MIN_PROMPT_TOKENS}`);
27723
+ if (!supportsEndpoint(grok, "responses")) missing.push(`${FAST_PROFILE_MODELS.reviewer}: does not advertise a supported Responses endpoint`);
27729
27724
  }
27730
- const gemini = findModel(catalog, "gemini-3.7-flash");
27731
- if (!gemini) missing.push("gemini-3.7-flash: absent from the live catalog");
27725
+ const gemini = findModel(catalog, FAST_PROFILE_MODELS.critic);
27726
+ if (!gemini) missing.push(`${FAST_PROFILE_MODELS.critic}: absent from the live catalog`);
27732
27727
  else {
27733
- if (!hasToolCalls(gemini)) missing.push("gemini-3.7-flash: does not advertise tool_calls for the native critic");
27734
- if (!hasContextAtLeast(gemini, FAST_REQUIRED_CONTEXT_TOKENS)) missing.push("gemini-3.7-flash: advertised context window is below 1M");
27735
- if (!supportsEffort(gemini, "high")) missing.push("gemini-3.7-flash: does not advertise a \"high\" reasoning effort for Advisor");
27736
- if (!supportsEffort(gemini, "medium")) missing.push("gemini-3.7-flash: does not advertise a \"medium\" reasoning effort for the native critic");
27737
- if (!supportsEndpoint(gemini, "chat")) missing.push("gemini-3.7-flash: does not advertise a supported chat-completions endpoint");
27738
- }
27739
- const opus = findModel(catalog, "claude-opus-5");
27740
- if (!opus) missing.push("claude-opus-5: absent from the live catalog");
27728
+ if (!hasToolCalls(gemini)) missing.push(`${FAST_PROFILE_MODELS.critic}: does not advertise tool_calls for the native critic`);
27729
+ if (!hasContextAtLeast(gemini, FAST_REQUIRED_CONTEXT_TOKENS)) missing.push(`${FAST_PROFILE_MODELS.critic}: advertised context window is below 1M`);
27730
+ if (!supportsEffort(gemini, "high")) missing.push(`${FAST_PROFILE_MODELS.critic}: does not advertise a "high" reasoning effort for Advisor`);
27731
+ if (!supportsEffort(gemini, "medium")) missing.push(`${FAST_PROFILE_MODELS.critic}: does not advertise a "medium" reasoning effort for the native critic`);
27732
+ if (!supportsEndpoint(gemini, "chat")) missing.push(`${FAST_PROFILE_MODELS.critic}: does not advertise a supported chat-completions endpoint`);
27733
+ }
27734
+ const opus = findModel(catalog, FAST_PROFILE_MODELS.oracle);
27735
+ if (!opus) missing.push(`${FAST_PROFILE_MODELS.oracle}: absent from the live catalog`);
27741
27736
  else {
27742
- if (!hasContextAtLeast(opus, FAST_REQUIRED_CONTEXT_TOKENS)) missing.push("claude-opus-5: advertised context window is below 1M");
27743
- if (!supportsEffort(opus, "high")) missing.push("claude-opus-5: does not advertise a \"high\" reasoning effort");
27744
- if (opus.capabilities?.supports?.adaptive_thinking !== true) missing.push("claude-opus-5: does not advertise adaptive_thinking");
27745
- if (!hasUsablePromptMetadata(opus)) missing.push("claude-opus-5: no usable max_prompt_tokens metadata");
27746
- if (!supportsEndpoint(opus, "messages")) missing.push("claude-opus-5: does not advertise a supported Messages endpoint");
27737
+ if (!hasContextAtLeast(opus, FAST_REQUIRED_CONTEXT_TOKENS)) missing.push(`${FAST_PROFILE_MODELS.oracle}: advertised context window is below 1M`);
27738
+ if (!supportsEffort(opus, "high")) missing.push(`${FAST_PROFILE_MODELS.oracle}: does not advertise a "high" reasoning effort`);
27739
+ if (opus.capabilities?.supports?.adaptive_thinking !== true) missing.push(`${FAST_PROFILE_MODELS.oracle}: does not advertise adaptive_thinking`);
27740
+ if (!hasUsablePromptMetadata(opus)) missing.push(`${FAST_PROFILE_MODELS.oracle}: no usable max_prompt_tokens metadata`);
27741
+ if (!supportsEndpoint(opus, "messages")) missing.push(`${FAST_PROFILE_MODELS.oracle}: does not advertise a supported Messages endpoint`);
27747
27742
  }
27748
27743
  return {
27749
27744
  ok: missing.length === 0,
@@ -28005,19 +28000,22 @@ function generalPurposeFastModel() {
28005
28000
  minContextTokens: ONE_M_TOKENS
28006
28001
  });
28007
28002
  }
28008
- const FAST_SCOUT_MODEL = "gpt-5.6-luna";
28009
- const FAST_IMPLEMENTER_MODEL = "gpt-5.6-luna";
28003
+ /** @deprecated Fast `scout` was renamed to capitalized `Explore`. */
28004
+ const FAST_SCOUT_MODEL = FAST_PROFILE_NATIVE_MODELS.Explore;
28005
+ const FAST_IMPLEMENTER_MODEL = FAST_PROFILE_NATIVE_MODELS.implementer;
28010
28006
  /** Grok 4.6 advertises 500K total context / 372K max prompt, so it remains bare
28011
28007
  * and is gated by max_prompt_tokens rather than the 1M floor. */
28012
- const FAST_REVIEWER_MODEL = "grok-4.6";
28013
- const FAST_PLANNER_MODEL = "gpt-5.6-sol";
28014
- const FAST_CRITIC_MODEL = "gemini-3.7-flash";
28015
- const FAST_ORACLE_MODEL = "claude-opus-5";
28016
- /** Fixed effort pins for the fast profile. */
28017
- const FAST_SCOUT_EFFORT = "high";
28018
- const FAST_REVIEWER_EFFORT = "medium";
28019
- const FAST_PLANNER_EFFORT = "high";
28020
- const FAST_CRITIC_EFFORT = "medium";
28008
+ const FAST_REVIEWER_MODEL = FAST_PROFILE_NATIVE_MODELS.reviewer;
28009
+ const FAST_PLANNER_MODEL = FAST_PROFILE_NATIVE_MODELS.planner;
28010
+ const FAST_CRITIC_MODEL = FAST_PROFILE_NATIVE_MODELS.critic;
28011
+ const FAST_ORACLE_MODEL = FAST_PROFILE_ORACLE_MODEL;
28012
+ /** @deprecated Fast `scout` was renamed to capitalized `Explore`. */
28013
+ const FAST_SCOUT_EFFORT = FAST_PROFILE_NATIVE_EFFORTS.Explore;
28014
+ const FAST_IMPLEMENTER_EFFORT = FAST_PROFILE_NATIVE_EFFORTS.implementer;
28015
+ const FAST_REVIEWER_EFFORT = FAST_PROFILE_NATIVE_EFFORTS.reviewer;
28016
+ const FAST_PLANNER_EFFORT = FAST_PROFILE_NATIVE_EFFORTS.planner;
28017
+ const FAST_CRITIC_EFFORT = FAST_PROFILE_NATIVE_EFFORTS.critic;
28018
+ const FAST_ORACLE_EFFORT = FAST_PROFILE_ORACLE_EFFORT;
28021
28019
  function fastScoutModel() {
28022
28020
  const id = firstPresentInCatalog([FAST_SCOUT_MODEL], {
28023
28021
  requireToolCalls: true,
@@ -28044,7 +28042,7 @@ function fastPlannerModel() {
28044
28042
  if (!id) return void 0;
28045
28043
  const found = state.models?.data.find((m) => m.id === id);
28046
28044
  const efforts = found?.capabilities?.supports?.reasoning_effort;
28047
- if (!Array.isArray(efforts) || !efforts.includes("high")) return void 0;
28045
+ if (!Array.isArray(efforts) || !efforts.includes(FAST_PLANNER_EFFORT)) return void 0;
28048
28046
  if (!found || fastEndpointForModel(found) !== "responses") return void 0;
28049
28047
  return id;
28050
28048
  }
@@ -28056,7 +28054,7 @@ function fastReviewerModel() {
28056
28054
  if (!found) return void 0;
28057
28055
  if (found.capabilities?.supports?.tool_calls !== true) return void 0;
28058
28056
  const efforts = found.capabilities?.supports?.reasoning_effort;
28059
- if (!Array.isArray(efforts) || !efforts.includes("medium")) return void 0;
28057
+ if (!Array.isArray(efforts) || !efforts.includes(FAST_REVIEWER_EFFORT)) return void 0;
28060
28058
  if ((found.capabilities?.limits?.max_prompt_tokens ?? 0) < 2e5) return void 0;
28061
28059
  if (fastEndpointForModel(found) !== "responses") return void 0;
28062
28060
  return FAST_REVIEWER_MODEL;
@@ -28069,7 +28067,7 @@ function fastCriticModel() {
28069
28067
  if (found.capabilities?.supports?.tool_calls !== true) return void 0;
28070
28068
  if ((found.capabilities?.limits?.max_context_window_tokens ?? 0) < 1e6) return void 0;
28071
28069
  const efforts = found.capabilities?.supports?.reasoning_effort;
28072
- if (!Array.isArray(efforts) || !efforts.includes("medium")) return void 0;
28070
+ if (!Array.isArray(efforts) || !efforts.includes(FAST_CRITIC_EFFORT)) return void 0;
28073
28071
  if (fastEndpointForModel(found) !== "chat") return void 0;
28074
28072
  return FAST_CRITIC_MODEL;
28075
28073
  }
@@ -28081,7 +28079,7 @@ function fastOracleModel() {
28081
28079
  if ((found.capabilities?.limits?.max_context_window_tokens ?? 0) < 1e6) return void 0;
28082
28080
  if ((found.capabilities?.limits?.max_prompt_tokens ?? 0) <= 0) return void 0;
28083
28081
  const efforts = found.capabilities?.supports?.reasoning_effort;
28084
- if (!Array.isArray(efforts) || !efforts.includes("high")) return void 0;
28082
+ if (!Array.isArray(efforts) || !efforts.includes(FAST_ORACLE_EFFORT)) return void 0;
28085
28083
  if (found.capabilities?.supports?.adaptive_thinking !== true) return void 0;
28086
28084
  if (fastEndpointForModel(found) !== "messages") return void 0;
28087
28085
  return FAST_ORACLE_MODEL;
@@ -29930,7 +29928,7 @@ const ADVISOR_ESCALATION_MODEL = "claude-opus-5";
29930
29928
  * is cross-lab from the OpenAI-backed Luna/Sol leads and is selected only when
29931
29929
  * its live catalog entry advertises the required Chat endpoint. Kept distinct
29932
29930
  * from `ADVISOR_DEFAULT_MODEL` so standard launches remain unchanged. */
29933
- const ADVISOR_FAST_PROFILE_MODEL = "gemini-3.7-flash";
29931
+ const ADVISOR_FAST_PROFILE_MODEL = FAST_PROFILE_ADVISOR_MODEL;
29934
29932
  /** True only when the live Gemini entry satisfies the fixed fast transport.
29935
29933
  * An ID-only presence check is insufficient: selecting a model whose catalog
29936
29934
  * row lost Chat support would silently degrade every fast Advisor call. */
@@ -30029,14 +30027,13 @@ function shouldEscalateAdvisor(leadModel) {
30029
30027
  * fast selection follows launch identity instead, so changing among the fixed
30030
30028
  * fast lead models never removes Gemini Advisor.
30031
30029
  *
30032
- * Precedence:
30033
- * 1. `GH_ROUTER_ADVISOR_MODEL` (trimmed), on every launch and lead.
30034
- * 2. Authenticated fast primary lead, when Gemini advertises the required
30035
- * Chat endpoint.
30036
- * 3. Standard lighter Claude lead with Opus escalation available.
30037
- * 4. The literal `ADVISOR_DEFAULT_MODEL`.
30030
+ * Fast profile is a separate fixed contract: it requires Gemini's Chat endpoint
30031
+ * and ignores standard operator pins. Standard-profile precedence remains:
30032
+ * 1. `GH_ROUTER_ADVISOR_MODEL` (trimmed).
30033
+ * 2. A lighter Claude lead with Opus escalation available.
30034
+ * 3. The literal `ADVISOR_DEFAULT_MODEL`.
30038
30035
  *
30039
- * Step 4 deliberately does not walk the OpenAI frontier chain. That would
30036
+ * Step 3 deliberately does not walk the OpenAI frontier chain. That would
30040
30037
  * silently change the standard Opus-lead path when Sol is absent.
30041
30038
  */
30042
30039
  /**
@@ -30064,17 +30061,20 @@ function normalizeAdvisorPin(pinned) {
30064
30061
  return bare !== pinned && models.some((m) => m.id === bare) ? bare : pinned;
30065
30062
  }
30066
30063
  function resolveAdvisorModel(leadModel, fastProfile = false) {
30064
+ if (fastProfile) {
30065
+ if (!fastProfileAdvisorAvailable()) throw new Error(`fast Advisor invariant failed: ${ADVISOR_FAST_PROFILE_MODEL} must advertise the Chat endpoint`);
30066
+ return {
30067
+ model: ADVISOR_FAST_PROFILE_MODEL,
30068
+ escalated: false,
30069
+ fastProfile: true
30070
+ };
30071
+ }
30067
30072
  const pinned = process.env.GH_ROUTER_ADVISOR_MODEL?.trim();
30068
30073
  if (pinned) return {
30069
30074
  model: normalizeAdvisorPin(pinned),
30070
30075
  escalated: false,
30071
30076
  fastProfile: false
30072
30077
  };
30073
- if (fastProfile && fastProfileAdvisorAvailable()) return {
30074
- model: ADVISOR_FAST_PROFILE_MODEL,
30075
- escalated: false,
30076
- fastProfile: true
30077
- };
30078
30078
  if (leadModel && shouldEscalateAdvisor(leadModel)) return {
30079
30079
  model: ADVISOR_ESCALATION_MODEL,
30080
30080
  escalated: true,
@@ -30114,7 +30114,7 @@ function resolveAdvisorModel(leadModel, fastProfile = false) {
30114
30114
  * something it accepts.
30115
30115
  */
30116
30116
  function resolveAdvisorEffort(rawRequestBody, advisorModel, fastProfile = false) {
30117
- let requested = fastProfile ? "high" : ADVISOR_DEFAULT_EFFORT;
30117
+ let requested = fastProfile ? FAST_PROFILE_ADVISOR_EFFORT : ADVISOR_DEFAULT_EFFORT;
30118
30118
  if (rawRequestBody) try {
30119
30119
  const body = JSON.parse(rawRequestBody);
30120
30120
  const oc = body.output_config;
@@ -30123,7 +30123,7 @@ function resolveAdvisorEffort(rawRequestBody, advisorModel, fastProfile = false)
30123
30123
  if (typeof explicit === "string" && EFFORT_ORDER.includes(explicit)) requested = explicit;
30124
30124
  else if (thinking && typeof thinking === "object" && thinking.type === "enabled") requested = bucketEffort(thinking.budget_tokens);
30125
30125
  } catch {}
30126
- if (fastProfile) requested = "high";
30126
+ if (fastProfile) requested = FAST_PROFILE_ADVISOR_EFFORT;
30127
30127
  else if (EFFORT_ORDER.indexOf(requested) < EFFORT_ORDER.indexOf(ADVISOR_MIN_EFFORT)) requested = ADVISOR_MIN_EFFORT;
30128
30128
  const supported = state.models?.data?.find((m) => m.id === resolveModel(advisorModel))?.capabilities?.supports?.reasoning_effort;
30129
30129
  if (!Array.isArray(supported) || supported.length === 0) return requested;
@@ -30374,6 +30374,7 @@ async function runAdvisor(conversation, advisorModel, advisorEffort, signal, adv
30374
30374
  }
30375
30375
  const conversationText = renderConversationAsText(conversation, maxUnits, measure);
30376
30376
  const transport = advisorTransport(resolvedAdvisorModel, fastProfile);
30377
+ if (fastProfile) consola.warn(`fast Advisor dispatch: model=${resolvedAdvisorModel} transport=${transport} effort=${advisorEffort}`);
30377
30378
  if (transport === "responses") {
30378
30379
  const payload = applyResponsesCachePolicy({
30379
30380
  model: resolvedAdvisorModel,
@@ -35883,8 +35884,8 @@ function buildPeerAwarenessSnippet(opts) {
35883
35884
  "",
35884
35885
  `This is the fast launch profile. Advisor is an optional, non-binding, lead-only transcript-aware sounding board for consequential unresolved uncertainty or a genuinely stuck path, not routine progress, waiting, verification, approval, or completion. \`mcp__${fastPeersKey}__oracle\` is exact Opus 5 (1M/high), a stateless last-resort consultant available to the lead, reviewer, and planner.`,
35885
35886
  "",
35886
- `\`mcp__${fastSearchKey}__code\` is semantic-first code search and \`mcp__${fastSearchKey}__web\` surfaces citable sources. Native Task roster: \`scout\` (broad discovery), \`implementer\` (mechanical implementation), \`reviewer\` (repo-aware verification/reproduction), \`planner\` (Sol plan consultant/approver after Luna's draft), and \`critic\` (fresh-context cross-lab review). Before implementation obtain planner approval; before declaring done run relevant tests and ask reviewer to verify.${opts.browseAvailable ? ` \`mcp__${key("browser")}__*\` is the opt-in browser surface.` : ""}`,
35887
- "Native delegation is ACL-scoped: the lead may invoke all five; planner may invoke reviewer, scout, and critic; implementer may invoke reviewer and critic; reviewer, scout, and critic cannot invoke native subagents."
35887
+ `\`mcp__${fastSearchKey}__code\` is semantic-first code search and \`mcp__${fastSearchKey}__web\` surfaces citable sources. Native Task roster: \`Explore\` (broad discovery), \`implementer\` (mechanical implementation), \`reviewer\` (repo-aware verification/reproduction), \`planner\` (Sol plan consultant/approver after Luna's draft), and \`critic\` (fresh-context cross-lab review). Before implementation obtain planner approval; before declaring done run relevant tests and ask reviewer to verify.${opts.browseAvailable ? ` \`mcp__${key("browser")}__*\` is the opt-in browser surface.` : ""}`,
35888
+ "Native delegation is ACL-scoped: the lead may invoke all five; planner may invoke reviewer, Explore, and critic; implementer may invoke reviewer and critic; reviewer, Explore, and critic cannot invoke native subagents."
35888
35889
  ].join("\n");
35889
35890
  }
35890
35891
  const peersKey = key("peers");
@@ -35943,8 +35944,8 @@ function buildPeerAwarenessSummary(opts) {
35943
35944
  if (opts.profile === "fast") return [
35944
35945
  "## Injected capabilities (summary)",
35945
35946
  "",
35946
- "Fast launch profile. Task roster: `scout`, `implementer`, `reviewer`, `planner`, `critic`. Luna investigates and drafts; `planner` must approve before implementation. Before declaring done, run relevant tests and ask `reviewer` to verify.",
35947
- "Native delegation is ACL-scoped: the lead may invoke all five; `planner` may invoke `reviewer`, `scout`, and `critic`; `implementer` may invoke `reviewer` and `critic`; `reviewer`, `scout`, and `critic` cannot invoke native subagents.",
35947
+ "Fast launch profile. Task roster: `Explore`, `implementer`, `reviewer`, `planner`, `critic`. Luna investigates and drafts; `planner` must approve before implementation. Before declaring done, run relevant tests and ask `reviewer` to verify.",
35948
+ "Native delegation is ACL-scoped: the lead may invoke all five; `planner` may invoke `reviewer`, `Explore`, and `critic`; `implementer` may invoke `reviewer` and `critic`; `reviewer`, `Explore`, and `critic` cannot invoke native subagents.",
35948
35949
  `Advisor is optional, non-binding, transcript-aware, and lead-only; use it for consequential unresolved uncertainty, not routine progress or workflow gates. \`mcp__${key("peers")}__oracle\` is exact Opus 5 (1M/high), stateless and last resort for the lead, reviewer, and planner. \`mcp__${key("search")}__code\` and \`mcp__${key("search")}__web\` provide search.${opts.browseAvailable ? ` \`mcp__${key("browser")}__*\` provides the opt-in browser.` : ""}`
35949
35950
  ].join("\n");
35950
35951
  const renderNative = (name) => {
@@ -37218,6 +37219,6 @@ function enumerateInjectedMcpToolNames(groupKeys, opts = {}) {
37218
37219
  return [...new Set(names)];
37219
37220
  }
37220
37221
  //#endregion
37221
- export { bucketEffort as $, assembleResponsesPayload as $t, assetFor as A, isBudgetClaudeLead as An, workerToolsEnabled as At, resolveAdvisorModel as B, stripTrailingOneMSuffix as Bn, profileDescriptor as Bt, buildEnv as C, DEFAULT_CLAUDE_MODEL_FALLBACKS as Cn, nativeSubagentModel as Ct, toolbeltSkipSet as D, UPSTREAM_FETCH_TIMEOUT_MS as Dn, scoutModel as Dt, toolbeltEnabled as E, DEFAULT_PORT as En, reviewerModel as Et, FAST_ADVISOR_TOOL_INSTRUCTIONS as F, classifyMessagesRoute as Fn, LUNA_REAL_MODEL_ID as Ft, buildAnthropicErrorEvent as G, countTokens as Gt, rememberThinkingHistoryRepair as H, resolveModelAlias as Ht, buildAdvisorStream as I, catalogAdvertises1M as In, LUNA_SCOUT_ALIAS_ID as It, logStreamError as J, getTokenCount as Jt, buildOpenAIErrorEvent as K, createMessages as Kt, injectAdvisorTool as L, oneMContextDisabled as Ln, LUNA_SONNET_ALIAS_ID as Lt, searchWeb as M, resolveLeadSlugArg as Mn, LUNA_DRIVER_ALIAS_ID as Mt, ADVISOR_INTERNAL_TOOL_NAME as N, upstreamAllowH2 as Nn, LUNA_HAIKU_ALIAS_ID as Nt, vscodeRipgrepPath as O, UPSTREAM_INACTIVITY_TIMEOUT_MS as On, scribeModel as Ot, ADVISOR_TOOL_INSTRUCTIONS as P, upstreamMaxConnections as Pn, LUNA_IMPLEMENTER_ALIAS_ID as Pt, UNKNOWN_EFFORT_ANCHOR as Q, unregisterLaunch as Qt, isAdvisorRequested as R, withOneMSuffix as Rn, canonicalizeAliasModel as Rt, runWorkerAgent as S, BUDGET_SMALL_FAST_SLUG as Sn, implementerFastModel as St, buildToolbeltAwareness as T, DEFAULT_CODEX_MODEL_FALLBACKS as Tn, reviewerFastModel as Tt, repairKnownThinkingHistory as U, validateFastProfilePrerequisites as Ut, formatThinkingRepairDecline as V, withInstallLock as Vn, resolveLaunchProfile as Vt, repairRejectedThinkingHistory as W, shimDefaultsToXhigh as Wt, relayAnthropicStream as X, findLaunchBySecret as Xt, readIteratorWithTimeout as Y, getTokenizerFromModel as Yt, EFFORT_ORDER as Z, registerLaunch as Zt, TEST_DEFAULT_MODEL as _, DEFINITION_OF_GREATNESS as _n, fastReviewerModel as _t, buildAgentPrompt as a, readResponseBodyCapped as an, FAST_REVIEWER_EFFORT as at, resolveModeDefaults as b, toolbeltPathOverride as bn, geminiAvailable as bt, enumerateInjectedMcpToolNames as c, provisionBrowserAssets as cn, artifactToolsEnabled as ct, DEFAULT_MODEL_CHAIN as d, provisionAndIndexColbert as dn, browserCompoundToolsEnabled as dt, warnOnTokenPriceDrift as en, clampEffort as et, EXPLORE_DEFAULT_MODEL as f, extractTarGzMember as fn, browserToolsEnabled as ft, REVIEW_DEFAULT_MODEL as g, CONDENSED_OPERATING_SEQUENCE as gn, fastPlannerModel as gt, PLAN_DEFAULT_MODEL as h, provisionTreeSitterAssets as hn, fastOracleModel as ht, assertMcpToolSurfaceConsistent as i, MAX_RESPONSE_BODY_BYTES as in, FAST_PLANNER_EFFORT as it, satisfiesMinVersion as j, pickClaudeDefault as jn, FAST_CRITIC_ALIAS_ID as jt, TOOLBELT_TOOLS$1 as k, generateRandomPort as kn, standInToolEnabled as kt, personasFor as l, hasSupportedBrowserInstalled as ln, brainstormModel as lt, IMPLEMENT_DEFAULT_MODEL as m, warmTreeSitterPool as mn, fastImplementerModel as mt, MCP_GROUPS as n, createResponses as nn, handleMcpPost as nt, buildPeerAwarenessSnippet as o, parseJsonOrDiagnose as on, FAST_SCOUT_EFFORT as ot, EXPLORE_DEFAULT_THINKING as p, extractZipMember as pn, fastCriticModel as pt, isControllerClosedError as q, getTextTokenCount as qt, agentNamesForToolAllowlist as r, createChatCompletions as rn, FAST_CRITIC_EFFORT as rt, buildPeerAwarenessSummary as s, normalizeOpenAIUsage as sn, agentToolsEnabled as st, GROUP_META as t, resolveMcpToolTimeoutMs as tn, handleMcpDelete as tt, BROWSE_DEFAULT_MODEL as u, colbertDegradedWarning as un, browseAgentEnabled as ut, appendPlanReminder as v, shouldUseInsecureTls as vn, fastScoutModel as vt, availableToolCommands as w, DEFAULT_CODEX_MODEL as wn, resolveGeminiReviewModel as wt, resolveWorkerRunOpts as x, BUDGET_SMALL_FAST_CATALOG_ID as xn, generalPurposeFastModel as xt, resolveDefaultModel as y, collapsePathKeys as yn, fleetToolsEnabled as yt, resolveAdvisorEffort as z, withOneMSuffixForLead as zn, formatFastPrerequisiteFailure as zt };
37222
+ export { bucketEffort as $, unregisterLaunch as $t, assetFor as A, generateRandomPort as An, standInToolEnabled as At, resolveAdvisorModel as B, withOneMSuffixForLead as Bn, formatFastPrerequisiteFailure as Bt, buildEnv as C, BUDGET_SMALL_FAST_SLUG as Cn, implementerFastModel as Ct, toolbeltSkipSet as D, DEFAULT_PORT as Dn, reviewerModel as Dt, toolbeltEnabled as E, DEFAULT_CODEX_MODEL_FALLBACKS as En, reviewerFastModel as Et, FAST_ADVISOR_TOOL_INSTRUCTIONS as F, upstreamMaxConnections as Fn, LUNA_IMPLEMENTER_ALIAS_ID as Ft, buildAnthropicErrorEvent as G, shimDefaultsToXhigh as Gt, rememberThinkingHistoryRepair as H, withInstallLock as Hn, resolveLaunchProfile as Ht, buildAdvisorStream as I, classifyMessagesRoute as In, LUNA_REAL_MODEL_ID as It, logStreamError as J, getTextTokenCount as Jt, buildOpenAIErrorEvent as K, countTokens as Kt, injectAdvisorTool as L, catalogAdvertises1M as Ln, LUNA_SCOUT_ALIAS_ID as Lt, searchWeb as M, pickClaudeDefault as Mn, FAST_CRITIC_ALIAS_ID as Mt, ADVISOR_INTERNAL_TOOL_NAME as N, resolveLeadSlugArg as Nn, LUNA_DRIVER_ALIAS_ID as Nt, vscodeRipgrepPath as O, UPSTREAM_FETCH_TIMEOUT_MS as On, scoutModel as Ot, ADVISOR_TOOL_INSTRUCTIONS as P, upstreamAllowH2 as Pn, LUNA_HAIKU_ALIAS_ID as Pt, UNKNOWN_EFFORT_ANCHOR as Q, registerLaunch as Qt, isAdvisorRequested as R, oneMContextDisabled as Rn, LUNA_SONNET_ALIAS_ID as Rt, runWorkerAgent as S, BUDGET_SMALL_FAST_CATALOG_ID as Sn, generalPurposeFastModel as St, buildToolbeltAwareness as T, DEFAULT_CODEX_MODEL as Tn, resolveGeminiReviewModel as Tt, repairKnownThinkingHistory as U, resolveModelAlias as Ut, formatThinkingRepairDecline as V, stripTrailingOneMSuffix as Vn, profileDescriptor as Vt, repairRejectedThinkingHistory as W, validateFastProfilePrerequisites as Wt, relayAnthropicStream as X, getTokenizerFromModel as Xt, readIteratorWithTimeout as Y, getTokenCount as Yt, EFFORT_ORDER as Z, findLaunchBySecret as Zt, TEST_DEFAULT_MODEL as _, CONDENSED_OPERATING_SEQUENCE as _n, fastPlannerModel as _t, buildAgentPrompt as a, MAX_RESPONSE_BODY_BYTES as an, FAST_PLANNER_EFFORT as at, resolveModeDefaults as b, collapsePathKeys as bn, fleetToolsEnabled as bt, enumerateInjectedMcpToolNames as c, normalizeOpenAIUsage as cn, agentToolsEnabled as ct, DEFAULT_MODEL_CHAIN as d, colbertDegradedWarning as dn, browseAgentEnabled as dt, assembleResponsesPayload as en, clampEffort as et, EXPLORE_DEFAULT_MODEL as f, provisionAndIndexColbert as fn, browserCompoundToolsEnabled as ft, REVIEW_DEFAULT_MODEL as g, provisionTreeSitterAssets as gn, fastOracleModel as gt, PLAN_DEFAULT_MODEL as h, warmTreeSitterPool as hn, fastImplementerModel as ht, assertMcpToolSurfaceConsistent as i, createChatCompletions as in, FAST_IMPLEMENTER_EFFORT as it, satisfiesMinVersion as j, isBudgetClaudeLead as jn, workerToolsEnabled as jt, TOOLBELT_TOOLS$1 as k, UPSTREAM_INACTIVITY_TIMEOUT_MS as kn, scribeModel as kt, personasFor as l, provisionBrowserAssets as ln, artifactToolsEnabled as lt, IMPLEMENT_DEFAULT_MODEL as m, extractZipMember as mn, fastCriticModel as mt, MCP_GROUPS as n, resolveMcpToolTimeoutMs as nn, handleMcpPost as nt, buildPeerAwarenessSnippet as o, readResponseBodyCapped as on, FAST_REVIEWER_EFFORT as ot, EXPLORE_DEFAULT_THINKING as p, extractTarGzMember as pn, browserToolsEnabled as pt, isControllerClosedError as q, createMessages as qt, agentNamesForToolAllowlist as r, createResponses as rn, FAST_CRITIC_EFFORT as rt, buildPeerAwarenessSummary as s, parseJsonOrDiagnose as sn, FAST_SCOUT_EFFORT as st, GROUP_META as t, warnOnTokenPriceDrift as tn, handleMcpDelete as tt, BROWSE_DEFAULT_MODEL as u, hasSupportedBrowserInstalled as un, brainstormModel as ut, appendPlanReminder as v, DEFINITION_OF_GREATNESS as vn, fastReviewerModel as vt, availableToolCommands as w, DEFAULT_CLAUDE_MODEL_FALLBACKS as wn, nativeSubagentModel as wt, resolveWorkerRunOpts as x, toolbeltPathOverride as xn, geminiAvailable as xt, resolveDefaultModel as y, shouldUseInsecureTls as yn, fastScoutModel as yt, resolveAdvisorEffort as z, withOneMSuffix as zn, canonicalizeAliasModel as zt };
37222
37223
 
37223
- //# sourceMappingURL=peer-mcp-personas-BwNtC8jt.js.map
37224
+ //# sourceMappingURL=peer-mcp-personas-ce6_YMnX.js.map