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
@@ -2,7 +2,7 @@
2
2
  "manifest_version": 3,
3
3
  "name": "github-router browser bridge",
4
4
  "short_name": "gh-router-browser",
5
- "version": "0.3.295",
5
+ "version": "0.3.297",
6
6
  "description": "Bridge between Claude (via github-router /mcp) and the browser. Implements tab control, navigation, clicks, form fill, downloads, screenshots, devtools eval. Blocks navigation to chrome://settings.",
7
7
  "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqJElxuBlonBS3TVW9FJN0mGTtShB3L1hoaYf6k39SOr1ogGYmF90EjRxy1i21k9wQQjPf26bcBu/9X67KrQjQV0uB38CaNukgiSeoLjfptN811u+PJHx6BP+jx3Qa6/3VenNPxHC8WEU0GXql8QSjIHEyCwKb6fMASXOK94JyB5Ywov2x8mt/+9ncqBBBMVzf6r5Sagy4PL1XnryLsuADD/vOEkPet8wXgH/Oj7v5tTsQQZ7U1JT51PoDs2BFnXc5v3TkVgZwd32k3ONh+nkDw1Hof+4zwUGOyJE6eMrlYzRlKM4Qxdf9JpavQvqfieAbTRWcyKeclnHeoIfE7cDBQIDAQAB",
8
8
  "background": {
@@ -1,27 +1,28 @@
1
- import { An as isBudgetClaudeLead, At as workerToolsEnabled, Bt as profileDescriptor, Cn as DEFAULT_CLAUDE_MODEL_FALLBACKS, Ct as nativeSubagentModel, Dt as scoutModel, E as toolbeltEnabled, Et as reviewerModel, Mn as resolveLeadSlugArg, Mt as LUNA_DRIVER_ALIAS_ID, Ot as scribeModel, Qt as unregisterLaunch, St as implementerFastModel, T as buildToolbeltAwareness, Tt as reviewerFastModel, Ut as validateFastProfilePrerequisites, Vt as resolveLaunchProfile, Zt as registerLaunch, _t as fastReviewerModel, at as FAST_REVIEWER_EFFORT, bt as geminiAvailable, cn as provisionBrowserAssets, ct as artifactToolsEnabled, dn as provisionAndIndexColbert, dt as browserCompoundToolsEnabled, ft as browserToolsEnabled, gt as fastPlannerModel, ht as fastOracleModel, it as FAST_PLANNER_EFFORT, jn as pickClaudeDefault, kt as standInToolEnabled, lt as brainstormModel, mn as warmTreeSitterPool, mt as fastImplementerModel, o as buildPeerAwarenessSnippet, ot as FAST_SCOUT_EFFORT, pt as fastCriticModel, r as agentNamesForToolAllowlist, rt as FAST_CRITIC_EFFORT, s as buildPeerAwarenessSummary, st as agentToolsEnabled, un as colbertDegradedWarning, ut as browseAgentEnabled, vn as shouldUseInsecureTls, vt as fastScoutModel, w as availableToolCommands, wt as resolveGeminiReviewModel, xt as generalPurposeFastModel, yt as fleetToolsEnabled, zt as formatFastPrerequisiteFailure } from "./peer-mcp-personas-BwNtC8jt.js";
1
+ import { $t as unregisterLaunch, At as standInToolEnabled, Bt as formatFastPrerequisiteFailure, Ct as implementerFastModel, Dt as reviewerModel, E as toolbeltEnabled, Et as reviewerFastModel, Ht as resolveLaunchProfile, Mn as pickClaudeDefault, Nn as resolveLeadSlugArg, Nt as LUNA_DRIVER_ALIAS_ID, Ot as scoutModel, Qt as registerLaunch, St as generalPurposeFastModel, T as buildToolbeltAwareness, Tt as resolveGeminiReviewModel, Vt as profileDescriptor, Wt as validateFastProfilePrerequisites, _t as fastPlannerModel, at as FAST_PLANNER_EFFORT, bt as fleetToolsEnabled, ct as agentToolsEnabled, dn as colbertDegradedWarning, dt as browseAgentEnabled, fn as provisionAndIndexColbert, ft as browserCompoundToolsEnabled, gt as fastOracleModel, hn as warmTreeSitterPool, ht as fastImplementerModel, it as FAST_IMPLEMENTER_EFFORT, jn as isBudgetClaudeLead, jt as workerToolsEnabled, kt as scribeModel, ln as provisionBrowserAssets, lt as artifactToolsEnabled, mt as fastCriticModel, o as buildPeerAwarenessSnippet, ot as FAST_REVIEWER_EFFORT, pt as browserToolsEnabled, r as agentNamesForToolAllowlist, rt as FAST_CRITIC_EFFORT, s as buildPeerAwarenessSummary, st as FAST_SCOUT_EFFORT, ut as brainstormModel, vt as fastReviewerModel, w as availableToolCommands, wn as DEFAULT_CLAUDE_MODEL_FALLBACKS, wt as nativeSubagentModel, xt as geminiAvailable, yn as shouldUseInsecureTls, yt as fastScoutModel } from "./peer-mcp-personas-ce6_YMnX.js";
2
2
  import { o as removeOwnClaudeConfigMirror, r as ensureClaudeConfigMirror, t as PATHS, u as writeArtifactCredsToMirror } from "./paths-Ci485qSJ.js";
3
3
  import { A as state, d as resolveModel } from "./token-BtJhjXXu.js";
4
4
  import { r as parseBoolEnv } from "./exec-y8C_MU8A.js";
5
- import { a as sharedServerArgs, c as stopKeepAwake, d as runSelfUpdate, f as checkClaudeVersion, i as setupAndServe, l as listModelsForEndpoint, o as LAUNCH_SECRET_HEADER, p as updateClaude, r as parseSharedArgs, s as startKeepAwake, t as getClaudeCodeEnvVars, u as enableFileLogging } from "./server-setup-DsGJnJ_O.js";
5
+ import { a as sharedServerArgs, c as stopKeepAwake, d as runSelfUpdate, f as checkClaudeVersion, i as setupAndServe, l as listModelsForEndpoint, o as LAUNCH_SECRET_HEADER, p as updateClaude, r as parseSharedArgs, s as startKeepAwake, t as getClaudeCodeEnvVars, u as enableFileLogging } from "./server-setup-DhG3YZPj.js";
6
+ import { t as FAST_PROFILE_ADVISOR_CLIENT_MODEL } from "./fast-profile-contract-K3P58nj3.js";
6
7
  import { n as hookLauncherDegradedWarning, r as resolveSelfInvocation } from "./self-invocation-DAB_od0C.js";
7
- import { i as launchChild, r as getCodexVersion, t as provisionToolbelt } from "./provision-DeNqzvSM.js";
8
+ import { i as launchChild, r as getCodexVersion, t as provisionToolbelt } from "./provision-BhCtm3md.js";
8
9
  import { i as captureLaunchBaseline, l as stopGateDisabled, n as buildSessionBindHookCommand, r as buildStopHookCommand, s as injectStopHookIntoSettingsFile, t as buildArtifactOpenHookCommand, u as stopGateId } from "./stop-gate-hook-DQnh_KfI.js";
9
10
  import { t as liveExec } from "./orchestration-BiGCEwbH.js";
10
11
  import { c as repoRoot, d as trustRepo, l as stopGateEnabledForRepo, s as repoFingerprint, t as fileBaselineStore } from "./stop-gate-policy-DMr3KVmw.js";
11
12
  import { l as guardToolMatcher, n as activeDispatchModes, r as buildWorkerGuardHookCommand } from "./worker-dispatch-BEHkTbnH.js";
12
- import { _ as injectPeerMcpIntoMirror, a as appendPeerAwarenessToMirroredClaudeMd, b as workersKeyOf, c as prependArtifactPanelDirectiveToMirroredClaudeMd, i as OPERATING_DEFAULTS_DIGEST, l as prependOperatingDefaultsToMirroredClaudeMd, m as planModeAllowRules, n as INJECTED_SKILLS, o as appendToolbeltAwarenessToMirroredClaudeMd, p as injectAllowRules, r as writeInjectedSkill, s as buildOperatingDefaultsDirective, t as injectAttributionSuppressionIntoSettingsFile, u as prependStyleDirectiveToMirroredClaudeMd, v as resolveCodexCliBackend, x as writePeerMcpRuntimeFiles, y as resolveGroupKeysFromMirror } from "./attribution-settings-pkIop1NU.js";
13
+ import { _ as injectPeerMcpIntoMirror, a as appendPeerAwarenessToMirroredClaudeMd, b as workersKeyOf, c as prependArtifactPanelDirectiveToMirroredClaudeMd, i as OPERATING_DEFAULTS_DIGEST, l as prependOperatingDefaultsToMirroredClaudeMd, m as planModeAllowRules, n as INJECTED_SKILLS, o as appendToolbeltAwarenessToMirroredClaudeMd, p as injectAllowRules, r as writeInjectedSkill, s as buildOperatingDefaultsDirective, t as injectAttributionSuppressionIntoSettingsFile, u as prependStyleDirectiveToMirroredClaudeMd, v as resolveCodexCliBackend, x as writePeerMcpRuntimeFiles, y as resolveGroupKeysFromMirror } from "./attribution-settings-B70GmZ68.js";
13
14
  import { r as hookMcpRuntimeFromEnv } from "./hook-mcp-client-DBvm9608.js";
14
15
  import { i as planReviewEnabled, t as buildPlanReviewHookCommand } from "./plan-review-hook-DuW0pSoM.js";
15
- import { a as checksForDescriptor, i as writeDiscoveredGate, n as readDiscoveredGate, o as descriptorHash, r as sourcesHash, s as parseGateDescriptor, t as discoverGateCommands } from "./gate-discovery-WcduofL4.js";
16
+ import { a as checksForDescriptor, i as writeDiscoveredGate, n as readDiscoveredGate, o as descriptorHash, r as sourcesHash, s as parseGateDescriptor, t as discoverGateCommands } from "./gate-discovery-G6PAG61j.js";
16
17
  import { t as buildPromptSubmitHookCommand } from "./prompt-submit-hook-IMl7ssfr.js";
17
18
  import { i as assertShapingInstalled, n as buildFirstMateGuardHookCommand, t as FIRST_MATE_GUARD_MATCHER } from "./internal-first-mate-guard-C9BV7J4U.js";
18
- import { r as FAST_DISPATCH_TOOL_MATCHER, t as buildFastDispatchGuardHookCommand } from "./internal-fast-dispatch-guard-Xyu17k9X.js";
19
+ import { r as FAST_DISPATCH_TOOL_MATCHER, t as buildFastDispatchGuardHookCommand } from "./internal-fast-dispatch-guard-Bkr_iGOu.js";
19
20
  import { defineCommand } from "citty";
20
21
  import consola from "consola";
21
22
  import path from "node:path";
22
23
  import { randomBytes } from "node:crypto";
23
24
  import { tmpdir } from "node:os";
24
- import process from "node:process";
25
+ import process$1 from "node:process";
25
26
  //#region src/lib/orchestration/fast-dispatch-hook.ts
26
27
  /** Sentinel preserved through claude.ts's optional codex-MCP catch. */
27
28
  var FastDispatchGuardInstallError = class extends Error {
@@ -132,6 +133,56 @@ function createFastLaunchCleanup(deps) {
132
133
  };
133
134
  }
134
135
  //#endregion
136
+ //#region src/lib/fast-advisor-client.ts
137
+ const ADVISOR_FLAG = "--advisor";
138
+ function featureEnvEnabled(value) {
139
+ if (value === void 0) return true;
140
+ return ![
141
+ "",
142
+ "0",
143
+ "false",
144
+ "no",
145
+ "off"
146
+ ].includes(value.trim().toLowerCase());
147
+ }
148
+ /** Match Claude Code's hard-disable and experimental-enable opt-out semantics. */
149
+ function fastAdvisorClientEnabled(env = process.env) {
150
+ if (env.CLAUDE_CODE_DISABLE_ADVISOR_TOOL) return false;
151
+ return featureEnvEnabled(env.CLAUDE_CODE_ENABLE_EXPERIMENTAL_ADVISOR_TOOL);
152
+ }
153
+ /**
154
+ * Remove every caller-supplied Advisor option and insert the fixed fast value.
155
+ *
156
+ * This parser intentionally keeps scanning after `--`: that separator marks
157
+ * github-router-to-Claude passthrough, not an exemption from the fixed profile.
158
+ * The fixed option is inserted before the first separator so Claude Code parses
159
+ * it as an option rather than positional input. A separate `--advisor` consumes
160
+ * its next token only when it is a value rather than another option; malformed
161
+ * missing-value forms are simply removed.
162
+ */
163
+ function withFixedFastAdvisorArg(args, enabled = fastAdvisorClientEnabled()) {
164
+ const sanitized = [];
165
+ for (let index = 0; index < args.length; index++) {
166
+ const token = args[index];
167
+ if (token === ADVISOR_FLAG) {
168
+ const next = args[index + 1];
169
+ if (next !== void 0 && next !== "--" && !next.startsWith("-")) index++;
170
+ continue;
171
+ }
172
+ if (token.startsWith(`${ADVISOR_FLAG}=`)) continue;
173
+ sanitized.push(token);
174
+ }
175
+ if (!enabled) return sanitized;
176
+ const separator = sanitized.indexOf("--");
177
+ const fixed = [ADVISOR_FLAG, FAST_PROFILE_ADVISOR_CLIENT_MODEL];
178
+ if (separator < 0) return [...sanitized, ...fixed];
179
+ return [
180
+ ...sanitized.slice(0, separator),
181
+ ...fixed,
182
+ ...sanitized.slice(separator)
183
+ ];
184
+ }
185
+ //#endregion
135
186
  //#region src/claude.ts
136
187
  function isFirstMateSkillName(name) {
137
188
  return name === "gh-first-mate" || name === "gh-first-mate-scaffold" || name === "gh-first-mate-operate" || name === "gh-first-mate-conduct";
@@ -246,17 +297,17 @@ const claude = defineCommand({
246
297
  },
247
298
  args: claudeArgs,
248
299
  async run({ args, rawArgs }) {
249
- const headlessProbeRequested = process.env.GH_ROUTER_ALLOW_HEADLESS_CLAUDE === "1" && rawArgs.includes("--print") && rawArgs.includes("--input-format") && rawArgs.includes("--output-format") && rawArgs.filter((arg) => arg === "stream-json").length >= 2;
250
- if (!process.stdout.isTTY && !headlessProbeRequested) {
300
+ const headlessProbeRequested = process$1.env.GH_ROUTER_ALLOW_HEADLESS_CLAUDE === "1" && rawArgs.includes("--print") && rawArgs.includes("--input-format") && rawArgs.includes("--output-format") && rawArgs.filter((arg) => arg === "stream-json").length >= 2;
301
+ if (!process$1.stdout.isTTY && !headlessProbeRequested) {
251
302
  consola.error("The claude subcommand requires a TTY (interactive terminal).");
252
- process.exit(1);
303
+ process$1.exit(1);
253
304
  }
254
305
  const parsed = parseSharedArgs(args);
255
306
  const requestedLaunchProfileId = resolveLaunchProfile(args.model);
256
307
  const codexMcpEnabled = args["codex-mcp"] !== false;
257
308
  if (requestedLaunchProfileId === "fast" && !codexMcpEnabled) {
258
- process.stderr.write(`github-router claude -m fast requires codex MCP wiring for its native roster and dispatch ACL; remove --no-codex-mcp or choose a standard model.\n`);
259
- process.exit(1);
309
+ process$1.stderr.write(`github-router claude -m fast requires codex MCP wiring for its native roster and dispatch ACL; remove --no-codex-mcp or choose a standard model.\n`);
310
+ process$1.exit(1);
260
311
  }
261
312
  if (args.stealth) {
262
313
  parsed.extendedBetas = false;
@@ -288,7 +339,7 @@ const claude = defineCommand({
288
339
  serverUrl = result.serverUrl;
289
340
  } catch (error) {
290
341
  consola.error("Failed to start server:", error instanceof Error ? error.message : error);
291
- process.exit(1);
342
+ process$1.exit(1);
292
343
  }
293
344
  runSelfUpdate({ selfUpdate: args["self-update"] !== false });
294
345
  const cleanupPreMirrorFailure = createFastLaunchCleanup({
@@ -301,7 +352,7 @@ const claude = defineCommand({
301
352
  } catch (err) {
302
353
  consola.error(`Failed to provision CLAUDE_CONFIG_DIR mirror: ${err instanceof Error ? err.message : String(err)}. Spawned Claude Code would not be able to authenticate.`);
303
354
  await cleanupPreMirrorFailure();
304
- process.exit(1);
355
+ process$1.exit(1);
305
356
  }
306
357
  enableFileLogging();
307
358
  let fastRuntimeCleanup;
@@ -326,9 +377,9 @@ const claude = defineCommand({
326
377
  });
327
378
  const fastFatal = async (message) => {
328
379
  consola.error(message);
329
- process.stderr.write(`${message}\n`);
380
+ process$1.stderr.write(`${message}\n`);
330
381
  await cleanupFastLaunch();
331
- process.exit(1);
382
+ process$1.exit(1);
332
383
  throw new Error("process.exit returned unexpectedly");
333
384
  };
334
385
  const usingDefault = !args.model?.trim();
@@ -358,9 +409,10 @@ const claude = defineCommand({
358
409
  consola.warn(`Model "${resolvedSlug}" not found. Available claude models: ${available.join(", ")}`);
359
410
  }
360
411
  const banner = chosenSlug === resolvedSlug ? chosenSlug : `${chosenSlug} → ${resolvedSlug}`;
361
- process.stderr.write(`Server ready on ${serverUrl}, launching Claude Code (${banner})...\n`);
412
+ process$1.stderr.write(`Server ready on ${serverUrl}, launching Claude Code (${banner})...\n`);
362
413
  const envVars = getClaudeCodeEnvVars(serverUrl, chosenSlug, launchProfileId);
363
- const extraArgs = collectChildPassthroughArgs(rawArgs, claudeArgs);
414
+ let extraArgs = collectChildPassthroughArgs(rawArgs, claudeArgs);
415
+ if (launchProfileId === "fast") extraArgs = withFixedFastAdvisorArg(extraArgs, fastAdvisorClientEnabled(process$1.env));
364
416
  if (toolbeltEnabled()) {
365
417
  provisionToolbelt().catch((err) => consola.debug("Toolbelt provisioning failed:", err));
366
418
  const toolbeltLine = buildToolbeltAwareness(availableToolCommands());
@@ -372,7 +424,7 @@ const claude = defineCommand({
372
424
  }
373
425
  provisionAndIndexColbert();
374
426
  colbertDegradedWarning(void 0, { logsToFile: true }).then((warning) => {
375
- if (warning) process.stderr.write(`${warning}\n`);
427
+ if (warning) process$1.stderr.write(`${warning}\n`);
376
428
  }).catch(() => {});
377
429
  warmTreeSitterPool();
378
430
  startKeepAwake();
@@ -386,7 +438,7 @@ const claude = defineCommand({
386
438
  let peerAwarenessSummary;
387
439
  let fastWiringComplete = launchProfileId !== "fast";
388
440
  const nativeAgentModels = launchProfileId === "fast" ? {
389
- scout: fastScoutModel(),
441
+ Explore: fastScoutModel(),
390
442
  implementer: fastImplementerModel(),
391
443
  reviewer: fastReviewerModel(),
392
444
  planner: fastPlannerModel(),
@@ -402,7 +454,7 @@ const claude = defineCommand({
402
454
  "general-purpose-fast": generalPurposeFastModel()
403
455
  };
404
456
  const nativeAvailability = {
405
- scoutAvailable: nativeAgentModels.scout != null,
457
+ scoutAvailable: (launchProfileId === "fast" ? nativeAgentModels.Explore : nativeAgentModels.scout) != null,
406
458
  implementerFastAvailable: nativeAgentModels["implementer-fast"] != null,
407
459
  reviewerFastAvailable: nativeAgentModels["reviewer-fast"] != null,
408
460
  generalPurposeFastAvailable: nativeAgentModels["general-purpose-fast"] != null,
@@ -412,12 +464,12 @@ const claude = defineCommand({
412
464
  const selfInvocation = await resolveSelfInvocation();
413
465
  {
414
466
  const warning = hookLauncherDegradedWarning(selfInvocation);
415
- if (warning) process.stderr.write(`${warning}\n`);
467
+ if (warning) process$1.stderr.write(`${warning}\n`);
416
468
  }
417
469
  if (codexMcpEnabled) try {
418
470
  const requestedCli = args["codex-cli"] ?? false;
419
471
  const isFastProfile = launchProfileId === "fast";
420
- if (isFastProfile && requestedCli) process.stderr.write("Fast profile uses its fixed HTTP MCP surface; ignoring --codex-cli.\n");
472
+ if (isFastProfile && requestedCli) process$1.stderr.write("Fast profile uses its fixed HTTP MCP surface; ignoring --codex-cli.\n");
421
473
  const backend = isFastProfile ? "http" : resolveCodexCliBackend({
422
474
  requested: requestedCli,
423
475
  codexInfo: requestedCli ? getCodexVersion() : null
@@ -450,7 +502,7 @@ const claude = defineCommand({
450
502
  reviewerModel: nativeAgentModels.reviewer,
451
503
  reviewerFastModel: nativeAgentModels["reviewer-fast"],
452
504
  brainstormModel: nativeAgentModels.brainstorm,
453
- scoutModel: nativeAgentModels.scout,
505
+ scoutModel: isFastProfile ? nativeAgentModels.Explore : nativeAgentModels.scout,
454
506
  scribeModel: nativeAgentModels.scribe,
455
507
  implementerFastModel: nativeAgentModels["implementer-fast"],
456
508
  generalPurposeFastModel: nativeAgentModels["general-purpose-fast"],
@@ -462,7 +514,7 @@ const claude = defineCommand({
462
514
  plannerModel: nativeAgentModels.planner,
463
515
  criticModel: nativeAgentModels.critic,
464
516
  scoutEffort: FAST_SCOUT_EFFORT,
465
- implementerEffort: "max",
517
+ implementerEffort: FAST_IMPLEMENTER_EFFORT,
466
518
  reviewerEffort: FAST_REVIEWER_EFFORT,
467
519
  plannerEffort: FAST_PLANNER_EFFORT,
468
520
  criticEffort: FAST_CRITIC_EFFORT
@@ -532,8 +584,8 @@ const claude = defineCommand({
532
584
  }
533
585
  const personaNames = runtime.personas.map((p) => p.agentName).join(", ");
534
586
  const skippedNote = skippedGroups.length > 0 ? ` WARNING: groups [${skippedGroups.join(", ")}] skipped — both the bare and \`gh-router-<group>\` keys collide with your own mcpServers; those tools are unavailable this session (rename the user-side server to re-enable).` : "";
535
- process.stderr.write(`Peer MCP wired (backend=${backend}, personas=[${personaNames}], subagent .md files=${runtime.agentMdPaths.length}, ${subagentVisibility}).${skippedNote}\n`);
536
- const sessionCwd = process.cwd();
587
+ process$1.stderr.write(`Peer MCP wired (backend=${backend}, personas=[${personaNames}], subagent .md files=${runtime.agentMdPaths.length}, ${subagentVisibility}).${skippedNote}\n`);
588
+ const sessionCwd = process$1.cwd();
537
589
  const workerSkillsActive = workerToolsEnabled() && !isFastProfile;
538
590
  let skillsWritten = 0;
539
591
  let skillsToWrite = [];
@@ -558,7 +610,7 @@ const claude = defineCommand({
558
610
  }
559
611
  if (workerSkillsActive) {
560
612
  if (!injected?.ok) consola.warn("Workers non-blocking guard NOT registered: subagent MCP injection fell back to parent-only (--mcp-config), so worker-* dispatchers cannot reach the workers server. Raw (blocking) worker tools remain usable on the main thread this session.");
561
- else if (process.env.GH_ROUTER_DISABLE_WORKER_GUARD === "1") consola.info("Workers non-blocking guard disabled via GH_ROUTER_DISABLE_WORKER_GUARD=1 — raw mcp__workers__* is callable on the main thread (blocking); the worker-* background agents remain the steered, non-blocking default.");
613
+ else if (process$1.env.GH_ROUTER_DISABLE_WORKER_GUARD === "1") consola.info("Workers non-blocking guard disabled via GH_ROUTER_DISABLE_WORKER_GUARD=1 — raw mcp__workers__* is callable on the main thread (blocking); the worker-* background agents remain the steered, non-blocking default.");
562
614
  else try {
563
615
  const settingsPath = path.join(PATHS.CLAUDE_CONFIG_DIR, "settings.json");
564
616
  const workersKey = workersKeyOf(groupKeys);
@@ -571,7 +623,7 @@ const claude = defineCommand({
571
623
  }
572
624
  if (skillsWritten > 0) {
573
625
  const skillNames = skillsToWrite.map((s) => `/${s.name}`).join(", ");
574
- process.stderr.write(`Injected skills (${skillsWritten}/${skillsToWrite.length}): ${skillNames}.\n`);
626
+ process$1.stderr.write(`Injected skills (${skillsWritten}/${skillsToWrite.length}): ${skillNames}.\n`);
575
627
  }
576
628
  }
577
629
  if (agentToolsEnabled()) {
@@ -585,9 +637,9 @@ const claude = defineCommand({
585
637
  consola.error(`Could not register the operator worker/orchestrate guard hook: ${String(err)}`);
586
638
  }
587
639
  assertShapingInstalled(true, shapingInstalled);
588
- if (!process.env.GH_ROUTER_FM_SCAFFOLD_REPOS?.trim()) consola.info("first-mate: scaffold_repo is disabled (it writes to real repositories). Set GH_ROUTER_FM_SCAFFOLD_REPOS to a comma-separated list of owner/name entries, or owner/* for a whole org, to enable it.");
640
+ if (!process$1.env.GH_ROUTER_FM_SCAFFOLD_REPOS?.trim()) consola.info("first-mate: scaffold_repo is disabled (it writes to real repositories). Set GH_ROUTER_FM_SCAFFOLD_REPOS to a comma-separated list of owner/name entries, or owner/* for a whole org, to enable it.");
589
641
  }
590
- const aiordieSidecar = (process.env.AIORDIE_CLAUDE_BIND ?? "").trim();
642
+ const aiordieSidecar = (process$1.env.AIORDIE_CLAUDE_BIND ?? "").trim();
591
643
  if (aiordieSidecar.length > 0 && !aiordieSidecar.includes("\"")) try {
592
644
  const settingsPath = path.join(PATHS.CLAUDE_CONFIG_DIR, "settings.json");
593
645
  const command = buildSessionBindHookCommand(selfInvocation, aiordieSidecar);
@@ -604,7 +656,7 @@ const claude = defineCommand({
604
656
  consola.warn(`Artifact-panel directive prepend failed: ${String(err)}`);
605
657
  }
606
658
  if (!isFastProfile) try {
607
- await writeArtifactCredsToMirror(shouldUseInsecureTls(process.env.AIORDIE_BASE_URL ?? ""));
659
+ await writeArtifactCredsToMirror(shouldUseInsecureTls(process$1.env.AIORDIE_BASE_URL ?? ""));
608
660
  const settingsPath = path.join(PATHS.CLAUDE_CONFIG_DIR, "settings.json");
609
661
  const cmd = buildArtifactOpenHookCommand(selfInvocation);
610
662
  await injectStopHookIntoSettingsFile(settingsPath, cmd, "PostToolUse", void 0, "ExitPlanMode");
@@ -621,13 +673,13 @@ const claude = defineCommand({
621
673
  }
622
674
  if (!isFastProfile && args["trust-gate"] === true) try {
623
675
  const root = await trustRepo(sessionCwd);
624
- process.stderr.write(`Structural gate trusted for this repo (${root}); it will run on launch here from now on.\n`);
676
+ process$1.stderr.write(`Structural gate trusted for this repo (${root}); it will run on launch here from now on.\n`);
625
677
  } catch (err) {
626
678
  consola.warn(`Could not record gate trust: ${String(err)}`);
627
679
  }
628
680
  const gateDisabled = isFastProfile || stopGateDisabled(args);
629
- const forceEnabled = parseBoolEnv(process.env.GH_ROUTER_ENABLE_STOP_GATE) === true;
630
- const includeTests = parseBoolEnv(process.env.GH_ROUTER_STOP_GATE_RUN_TESTS) === true;
681
+ const forceEnabled = parseBoolEnv(process$1.env.GH_ROUTER_ENABLE_STOP_GATE) === true;
682
+ const includeTests = parseBoolEnv(process$1.env.GH_ROUTER_STOP_GATE_RUN_TESTS) === true;
631
683
  const gateRoot = await repoRoot(sessionCwd).catch(() => sessionCwd);
632
684
  let descriptor = null;
633
685
  let discovering = false;
@@ -642,7 +694,7 @@ const claude = defineCommand({
642
694
  workdir: gateRoot,
643
695
  evidence: cached.evidence
644
696
  };
645
- else if (!forceEnabled && workerToolsEnabled() && parseBoolEnv(process.env.GH_ROUTER_ENABLE_GATE_DISCOVERY) === true) discovering = true;
697
+ else if (!forceEnabled && workerToolsEnabled() && parseBoolEnv(process$1.env.GH_ROUTER_ENABLE_GATE_DISCOVERY) === true) discovering = true;
646
698
  }
647
699
  }
648
700
  let gateEnabled = gateDisabled ? false : await stopGateEnabledForRepo(sessionCwd).catch(() => false);
@@ -686,17 +738,17 @@ const claude = defineCommand({
686
738
  })().catch(() => {});
687
739
  }
688
740
  const tail = "A regression or a gate-weakening diff blocks stopping until fixed (per-prompt, max 2). Opt out with GH_ROUTER_DISABLE_STOP_GATE=1.\n";
689
- if (armed.kind === "sealed") process.stderr.write((autoTrusted ? `Structural-gate Stop hook enabled by default for this repo (gate=${armed.gateId}; runs typecheck/test/lint at stop). ` : `Structural-gate Stop hook enabled (gate=${armed.gateId}). `) + tail);
741
+ if (armed.kind === "sealed") process$1.stderr.write((autoTrusted ? `Structural-gate Stop hook enabled by default for this repo (gate=${armed.gateId}; runs typecheck/test/lint at stop). ` : `Structural-gate Stop hook enabled (gate=${armed.gateId}). `) + tail);
690
742
  else {
691
743
  const ids = checksForDescriptor(armed).map((c) => c.id).join(", ");
692
744
  const testNote = includeTests ? "Full test suite ON. " : "Full test suite off by default (enable with GH_ROUTER_STOP_GATE_RUN_TESTS=1). ";
693
- process.stderr.write(`Structural-gate Stop hook armed for this ${armed.ecosystem} repo (checks: ${ids}; from ${armed.evidence.join(", ")}). ${testNote}${tail}`);
745
+ process$1.stderr.write(`Structural-gate Stop hook armed for this ${armed.ecosystem} repo (checks: ${ids}; from ${armed.evidence.join(", ")}). ${testNote}${tail}`);
694
746
  }
695
747
  } catch (err) {
696
748
  consola.warn(`Could not register the structural-gate Stop hook: ${String(err)}`);
697
749
  }
698
750
  } else if (gateEnabled && discovering) {
699
- process.stderr.write("Structural Stop-gate: no checks parsed for this repo — discovering check commands in the background (arms on the next launch). Disable with GH_ROUTER_ENABLE_GATE_DISCOVERY=0.\n");
751
+ process$1.stderr.write("Structural Stop-gate: no checks parsed for this repo — discovering check commands in the background (arms on the next launch). Disable with GH_ROUTER_ENABLE_GATE_DISCOVERY=0.\n");
700
752
  (async () => {
701
753
  try {
702
754
  const disc = await discoverGateCommands(gateRoot, {
@@ -719,7 +771,7 @@ const claude = defineCommand({
719
771
  }
720
772
  } catch {}
721
773
  })().catch(() => {});
722
- } else if (!gateDisabled && !descriptor && !discovering) process.stderr.write("Structural Stop-gate not enabled: no checks found in this repo (looked at package.json scripts / CI workflows / Makefile / Cargo.toml / go.mod / pyproject). Force a sealed gate with GH_ROUTER_ENABLE_STOP_GATE=1" + (workerToolsEnabled() ? ", or let a model discover them with GH_ROUTER_ENABLE_GATE_DISCOVERY=1" : "") + ".\n");
774
+ } else if (!gateDisabled && !descriptor && !discovering) process$1.stderr.write("Structural Stop-gate not enabled: no checks found in this repo (looked at package.json scripts / CI workflows / Makefile / Cargo.toml / go.mod / pyproject). Force a sealed gate with GH_ROUTER_ENABLE_STOP_GATE=1" + (workerToolsEnabled() ? ", or let a model discover them with GH_ROUTER_ENABLE_GATE_DISCOVERY=1" : "") + ".\n");
723
775
  const peerSnippet = buildPeerAwarenessSnippet({
724
776
  codexCli: backend === "cli",
725
777
  geminiAvailable: geminiModelsAvailable,
@@ -766,8 +818,8 @@ const claude = defineCommand({
766
818
  resetFastRuntimeOwnership();
767
819
  const message = `Fast profile wiring failed; refusing to launch an unguarded session: ${err instanceof Error ? err.message : String(err)}`;
768
820
  consola.error(message);
769
- process.stderr.write(`${message}\n`);
770
- process.exit(1);
821
+ process$1.stderr.write(`${message}\n`);
822
+ process$1.exit(1);
771
823
  }
772
824
  consola.warn(`Peer MCP wiring failed (claude will launch without it): ${err instanceof Error ? err.message : String(err)}`);
773
825
  }
@@ -780,7 +832,7 @@ const claude = defineCommand({
780
832
  } catch (err) {
781
833
  consola.warn(`Operating-defaults CLAUDE.md prepend failed: ${err instanceof Error ? err.message : String(err)}`);
782
834
  }
783
- if (process.env.GH_ROUTER_DISABLE_NO_ATTRIBUTION !== "1") try {
835
+ if (process$1.env.GH_ROUTER_DISABLE_NO_ATTRIBUTION !== "1") try {
784
836
  const settingsPath = path.join(PATHS.CLAUDE_CONFIG_DIR, "settings.json");
785
837
  await injectAttributionSuppressionIntoSettingsFile(settingsPath);
786
838
  } catch (err) {
@@ -797,4 +849,4 @@ const claude = defineCommand({
797
849
  //#endregion
798
850
  export { claude };
799
851
 
800
- //# sourceMappingURL=claude-DNmxk-Rm.js.map
852
+ //# sourceMappingURL=claude-DMMfvfns.js.map