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.
- package/dist/{attribution-settings-pkIop1NU.js → attribution-settings-B70GmZ68.js} +10 -9
- package/dist/attribution-settings-B70GmZ68.js.map +1 -0
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/{claude-DNmxk-Rm.js → claude-DMMfvfns.js} +96 -44
- package/dist/claude-DMMfvfns.js.map +1 -0
- package/dist/{codex-Dl4gpHn-.js → codex-DVOyVv2B.js} +4 -4
- package/dist/{codex-Dl4gpHn-.js.map → codex-DVOyVv2B.js.map} +1 -1
- package/dist/engine-BkGRuUNs.js +2 -0
- package/dist/fast-profile-contract-K3P58nj3.js +57 -0
- package/dist/fast-profile-contract-K3P58nj3.js.map +1 -0
- package/dist/{gate-discovery-WcduofL4.js → gate-discovery-G6PAG61j.js} +2 -2
- package/dist/{gate-discovery-WcduofL4.js.map → gate-discovery-G6PAG61j.js.map} +1 -1
- package/dist/hooks.mjs +64 -16
- package/dist/hooks.sha256 +1 -1
- package/dist/{internal-fast-dispatch-guard-Xyu17k9X.js → internal-fast-dispatch-guard-Bkr_iGOu.js} +21 -17
- package/dist/internal-fast-dispatch-guard-Bkr_iGOu.js.map +1 -0
- package/dist/{internal-fast-dispatch-guard-CPlCrTlU.js → internal-fast-dispatch-guard-N-RaLrOn.js} +1 -1
- package/dist/{internal-stop-hook-DJFtGCsE.js → internal-stop-hook-BjzrF1zd.js} +2 -2
- package/dist/{internal-stop-hook-DJFtGCsE.js.map → internal-stop-hook-BjzrF1zd.js.map} +1 -1
- package/dist/main.js +6 -6
- package/dist/{peer-mcp-personas-BwNtC8jt.js → peer-mcp-personas-ce6_YMnX.js} +77 -76
- package/dist/peer-mcp-personas-ce6_YMnX.js.map +1 -0
- package/dist/{provision-DeNqzvSM.js → provision-BhCtm3md.js} +2 -2
- package/dist/{provision-DeNqzvSM.js.map → provision-BhCtm3md.js.map} +1 -1
- package/dist/{serve-BS5EmCpM.js → serve-Blj_dRSr.js} +5 -5
- package/dist/{serve-BS5EmCpM.js.map → serve-Blj_dRSr.js.map} +1 -1
- package/dist/{server-setup-DsGJnJ_O.js → server-setup-DhG3YZPj.js} +62 -11
- package/dist/server-setup-DhG3YZPj.js.map +1 -0
- package/dist/{start-vJdt2MiM.js → start-8QaqICtd.js} +3 -3
- package/dist/{start-vJdt2MiM.js.map → start-8QaqICtd.js.map} +1 -1
- package/package.json +1 -1
- package/dist/attribution-settings-pkIop1NU.js.map +0 -1
- package/dist/claude-DNmxk-Rm.js.map +0 -1
- package/dist/engine-XnluJUs6.js +0 -2
- package/dist/internal-fast-dispatch-guard-Xyu17k9X.js.map +0 -1
- package/dist/peer-mcp-personas-BwNtC8jt.js.map +0 -1
- 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.
|
|
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 {
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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-
|
|
852
|
+
//# sourceMappingURL=claude-DMMfvfns.js.map
|