github-router 0.3.293 → 0.3.295
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-Dx8TBPE8.js → attribution-settings-pkIop1NU.js} +67 -28
- package/dist/attribution-settings-pkIop1NU.js.map +1 -0
- package/dist/{auth-BwUHopJz.js → auth-CluG5e-l.js} +3 -3
- package/dist/{auth-BwUHopJz.js.map → auth-CluG5e-l.js.map} +1 -1
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/{check-usage-BTda5753.js → check-usage-iOzfnKJe.js} +4 -4
- package/dist/{check-usage-BTda5753.js.map → check-usage-iOzfnKJe.js.map} +1 -1
- package/dist/{claude-BoAd_L2W.js → claude-DNmxk-Rm.js} +142 -30
- package/dist/claude-DNmxk-Rm.js.map +1 -0
- package/dist/{codex-BdJgGT6Q.js → codex-Dl4gpHn-.js} +5 -5
- package/dist/{codex-BdJgGT6Q.js.map → codex-Dl4gpHn-.js.map} +1 -1
- package/dist/{debug-B3UrZTHQ.js → debug-DsEwleGg.js} +2 -2
- package/dist/{debug-B3UrZTHQ.js.map → debug-DsEwleGg.js.map} +1 -1
- package/dist/engine-XnluJUs6.js +2 -0
- package/dist/{gate-discovery-C30rfnyo.js → gate-discovery-WcduofL4.js} +5 -5
- package/dist/{gate-discovery-C30rfnyo.js.map → gate-discovery-WcduofL4.js.map} +1 -1
- package/dist/{get-copilot-usage-CRrf1ZSC.js → get-copilot-usage-B7Z4XVWj.js} +2 -2
- package/dist/{get-copilot-usage-CRrf1ZSC.js.map → get-copilot-usage-B7Z4XVWj.js.map} +1 -1
- package/dist/hooks.mjs +180 -3
- package/dist/hooks.sha256 +1 -1
- package/dist/{internal-artifact-open-BsEQRvDi.js → internal-artifact-open-D6tKMg8v.js} +2 -2
- package/dist/{internal-artifact-open-BsEQRvDi.js.map → internal-artifact-open-D6tKMg8v.js.map} +1 -1
- package/dist/internal-fast-dispatch-guard-CPlCrTlU.js +2 -0
- package/dist/internal-fast-dispatch-guard-Xyu17k9X.js +187 -0
- package/dist/internal-fast-dispatch-guard-Xyu17k9X.js.map +1 -0
- package/dist/{internal-first-mate-guard-CVFFJriA.js → internal-first-mate-guard-C9BV7J4U.js} +3 -3
- package/dist/{internal-first-mate-guard-CVFFJriA.js.map → internal-first-mate-guard-C9BV7J4U.js.map} +1 -1
- package/dist/{internal-first-mate-guard-DJdX6t48.js → internal-first-mate-guard-WJApyc8j.js} +1 -1
- package/dist/{internal-plan-review-8TKDLco6.js → internal-plan-review-t3PuNfuL.js} +3 -3
- package/dist/{internal-plan-review-8TKDLco6.js.map → internal-plan-review-t3PuNfuL.js.map} +1 -1
- package/dist/{internal-prompt-submit-Da7pxqua.js → internal-prompt-submit-C3KovHQG.js} +4 -4
- package/dist/{internal-prompt-submit-Da7pxqua.js.map → internal-prompt-submit-C3KovHQG.js.map} +1 -1
- package/dist/{internal-session-bind-BOFytA1f.js → internal-session-bind-d2uoja8I.js} +2 -2
- package/dist/{internal-session-bind-BOFytA1f.js.map → internal-session-bind-d2uoja8I.js.map} +1 -1
- package/dist/{internal-stop-hook-OnfK3BxE.js → internal-stop-hook-DJFtGCsE.js} +5 -5
- package/dist/{internal-stop-hook-OnfK3BxE.js.map → internal-stop-hook-DJFtGCsE.js.map} +1 -1
- package/dist/{internal-stop-review-CdouacHL.js → internal-stop-review-YtDUGXpX.js} +2 -2
- package/dist/{internal-stop-review-CdouacHL.js.map → internal-stop-review-YtDUGXpX.js.map} +1 -1
- package/dist/{internal-worker-guard-Bx-itoP8.js → internal-worker-guard-CdkeS9PN.js} +2 -2
- package/dist/{internal-worker-guard-Bx-itoP8.js.map → internal-worker-guard-CdkeS9PN.js.map} +1 -1
- package/dist/{internal-workspace-header-8WT0iB5K.js → internal-workspace-header-tuBXJV22.js} +2 -2
- package/dist/{internal-workspace-header-8WT0iB5K.js.map → internal-workspace-header-tuBXJV22.js.map} +1 -1
- package/dist/{lifecycle-nuOHfwgj.js → lifecycle-Bg6doY3-.js} +2 -2
- package/dist/{lifecycle-nuOHfwgj.js.map → lifecycle-Bg6doY3-.js.map} +1 -1
- package/dist/lifecycle-CGLt1cJQ.js +2 -0
- package/dist/{lifecycle-LeSfa7wH.js → lifecycle-CM9eTzvk.js} +2 -2
- package/dist/{lifecycle-LeSfa7wH.js.map → lifecycle-CM9eTzvk.js.map} +1 -1
- package/dist/lifecycle-DoUwpVDB.js +2 -0
- package/dist/main.js +19 -18
- package/dist/main.js.map +1 -1
- package/dist/{mcp-workspace-header-q34H_4wL.js → mcp-workspace-header-dERl2YTT.js} +2 -2
- package/dist/{mcp-workspace-header-q34H_4wL.js.map → mcp-workspace-header-dERl2YTT.js.map} +1 -1
- package/dist/{models-hhJcrZhr.js → models-DZ4hYsR7.js} +3 -3
- package/dist/{models-hhJcrZhr.js.map → models-DZ4hYsR7.js.map} +1 -1
- package/dist/{orchestration-pzbrKkgD.js → orchestration-BiGCEwbH.js} +2 -2
- package/dist/{orchestration-pzbrKkgD.js.map → orchestration-BiGCEwbH.js.map} +1 -1
- package/dist/{paths-BH4J7slC.js → paths-Ci485qSJ.js} +4 -4
- package/dist/{paths-BH4J7slC.js.map → paths-Ci485qSJ.js.map} +1 -1
- package/dist/paths-GD7bgGGy.js +2 -0
- package/dist/{peer-mcp-personas-DhI7ZPSx.js → peer-mcp-personas-BwNtC8jt.js} +385 -75
- package/dist/peer-mcp-personas-BwNtC8jt.js.map +1 -0
- package/dist/{plan-review-hook-CfcanA7_.js → plan-review-hook-DuW0pSoM.js} +3 -3
- package/dist/{plan-review-hook-CfcanA7_.js.map → plan-review-hook-DuW0pSoM.js.map} +1 -1
- package/dist/{prompt-submit-hook-Bqf9ORgb.js → prompt-submit-hook-IMl7ssfr.js} +3 -3
- package/dist/{prompt-submit-hook-Bqf9ORgb.js.map → prompt-submit-hook-IMl7ssfr.js.map} +1 -1
- package/dist/{provision-CZJ4EWls.js → provision-DeNqzvSM.js} +4 -4
- package/dist/{provision-CZJ4EWls.js.map → provision-DeNqzvSM.js.map} +1 -1
- package/dist/{self-invocation-DhO1Z8iD.js → self-invocation-DAB_od0C.js} +2 -2
- package/dist/{self-invocation-DhO1Z8iD.js.map → self-invocation-DAB_od0C.js.map} +1 -1
- package/dist/{serve-RxWYzoOl.js → serve-BS5EmCpM.js} +12 -12
- package/dist/{serve-RxWYzoOl.js.map → serve-BS5EmCpM.js.map} +1 -1
- package/dist/{server-setup-DbvbW5Ve.js → server-setup-DsGJnJ_O.js} +379 -271
- package/dist/server-setup-DsGJnJ_O.js.map +1 -0
- package/dist/{start-BNcGsXsY.js → start-vJdt2MiM.js} +3 -3
- package/dist/{start-BNcGsXsY.js.map → start-vJdt2MiM.js.map} +1 -1
- package/dist/{stop-gate-hook-BiBp5aGm.js → stop-gate-hook-DQnh_KfI.js} +3 -3
- package/dist/{stop-gate-hook-BiBp5aGm.js.map → stop-gate-hook-DQnh_KfI.js.map} +1 -1
- package/dist/{stop-gate-policy-BGd6b5hR.js → stop-gate-policy-DMr3KVmw.js} +2 -2
- package/dist/{stop-gate-policy-BGd6b5hR.js.map → stop-gate-policy-DMr3KVmw.js.map} +1 -1
- package/dist/{token-8drORhXg.js → token-BtJhjXXu.js} +54 -7
- package/dist/token-BtJhjXXu.js.map +1 -0
- package/dist/{worker-dispatch-D5fGroNr.js → worker-dispatch-BEHkTbnH.js} +2 -2
- package/dist/{worker-dispatch-D5fGroNr.js.map → worker-dispatch-BEHkTbnH.js.map} +1 -1
- package/package.json +1 -1
- package/dist/attribution-settings-Dx8TBPE8.js.map +0 -1
- package/dist/claude-BoAd_L2W.js.map +0 -1
- package/dist/engine-CK2b_cTt.js +0 -2
- package/dist/lifecycle-C8fOsQke.js +0 -2
- package/dist/lifecycle-D4Yc1aap.js +0 -2
- package/dist/paths-DJZoXfAS.js +0 -2
- package/dist/peer-mcp-personas-DhI7ZPSx.js.map +0 -1
- package/dist/server-setup-DbvbW5Ve.js.map +0 -1
- package/dist/token-8drORhXg.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { i as ensurePaths, t as PATHS } from "./paths-
|
|
2
|
-
import { A as state, r as setupGitHubToken } from "./token-
|
|
1
|
+
import { i as ensurePaths, t as PATHS } from "./paths-Ci485qSJ.js";
|
|
2
|
+
import { A as state, r as setupGitHubToken } from "./token-BtJhjXXu.js";
|
|
3
3
|
import { defineCommand } from "citty";
|
|
4
4
|
import consola from "consola";
|
|
5
5
|
//#region src/auth.ts
|
|
@@ -41,4 +41,4 @@ const auth = defineCommand({
|
|
|
41
41
|
//#endregion
|
|
42
42
|
export { auth };
|
|
43
43
|
|
|
44
|
-
//# sourceMappingURL=auth-
|
|
44
|
+
//# sourceMappingURL=auth-CluG5e-l.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-
|
|
1
|
+
{"version":3,"file":"auth-CluG5e-l.js","names":[],"sources":["../src/auth.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { defineCommand } from \"citty\"\nimport consola from \"consola\"\n\nimport { PATHS, ensurePaths } from \"./lib/paths\"\nimport { state } from \"./lib/state\"\nimport { setupGitHubToken } from \"./lib/token\"\n\ninterface RunAuthOptions {\n verbose: boolean\n showToken: boolean\n}\n\nexport async function runAuth(options: RunAuthOptions): Promise<void> {\n if (options.verbose) {\n consola.level = 5\n consola.info(\"Verbose logging enabled\")\n }\n\n state.showToken = options.showToken\n\n await ensurePaths()\n await setupGitHubToken({ force: true })\n consola.success(\"GitHub token written to\", PATHS.GITHUB_TOKEN_PATH)\n}\n\nexport const auth = defineCommand({\n meta: {\n name: \"auth\",\n description: \"Run GitHub auth flow without running the server\",\n },\n args: {\n verbose: {\n alias: \"v\",\n type: \"boolean\",\n default: false,\n description: \"Enable verbose logging\",\n },\n \"show-token\": {\n type: \"boolean\",\n default: false,\n description: \"Show GitHub token on auth\",\n },\n },\n run({ args }) {\n return runAuth({\n verbose: args.verbose,\n showToken: args[\"show-token\"],\n })\n },\n})\n"],"mappings":";;;;;AAcA,eAAsB,QAAQ,SAAwC;CACpE,IAAI,QAAQ,SAAS;EACnB,QAAQ,QAAQ;EAChB,QAAQ,KAAK,yBAAyB;CACxC;CAEA,MAAM,YAAY,QAAQ;CAE1B,MAAM,YAAY;CAClB,MAAM,iBAAiB,EAAE,OAAO,KAAK,CAAC;CACtC,QAAQ,QAAQ,2BAA2B,MAAM,iBAAiB;AACpE;AAEA,MAAa,OAAO,cAAc;CAChC,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;EACJ,SAAS;GACP,OAAO;GACP,MAAM;GACN,SAAS;GACT,aAAa;EACf;EACA,cAAc;GACZ,MAAM;GACN,SAAS;GACT,aAAa;EACf;CACF;CACA,IAAI,EAAE,QAAQ;EACZ,OAAO,QAAQ;GACb,SAAS,KAAK;GACd,WAAW,KAAK;EAClB,CAAC;CACH;AACF,CAAC"}
|
|
@@ -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.295",
|
|
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,6 +1,6 @@
|
|
|
1
|
-
import { i as ensurePaths } from "./paths-
|
|
2
|
-
import { r as setupGitHubToken } from "./token-
|
|
3
|
-
import { t as getCopilotUsage } from "./get-copilot-usage-
|
|
1
|
+
import { i as ensurePaths } from "./paths-Ci485qSJ.js";
|
|
2
|
+
import { r as setupGitHubToken } from "./token-BtJhjXXu.js";
|
|
3
|
+
import { t as getCopilotUsage } from "./get-copilot-usage-B7Z4XVWj.js";
|
|
4
4
|
import { defineCommand } from "citty";
|
|
5
5
|
import consola from "consola";
|
|
6
6
|
//#region src/check-usage.ts
|
|
@@ -40,4 +40,4 @@ const checkUsage = defineCommand({
|
|
|
40
40
|
//#endregion
|
|
41
41
|
export { checkUsage };
|
|
42
42
|
|
|
43
|
-
//# sourceMappingURL=check-usage-
|
|
43
|
+
//# sourceMappingURL=check-usage-iOzfnKJe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-usage-
|
|
1
|
+
{"version":3,"file":"check-usage-iOzfnKJe.js","names":[],"sources":["../src/check-usage.ts"],"sourcesContent":["import { defineCommand } from \"citty\"\nimport consola from \"consola\"\n\nimport { ensurePaths } from \"./lib/paths\"\nimport { setupGitHubToken } from \"./lib/token\"\nimport {\n getCopilotUsage,\n type QuotaDetail,\n} from \"./services/github/get-copilot-usage\"\n\nexport const checkUsage = defineCommand({\n meta: {\n name: \"check-usage\",\n description: \"Show current GitHub Copilot usage/quota information\",\n },\n async run() {\n await ensurePaths()\n await setupGitHubToken()\n try {\n const usage = await getCopilotUsage()\n const premium = usage.quota_snapshots.premium_interactions\n const premiumTotal = premium.entitlement\n const premiumUsed = premiumTotal - premium.remaining\n const premiumPercentUsed =\n premiumTotal > 0 ? (premiumUsed / premiumTotal) * 100 : 0\n const premiumPercentRemaining = premium.percent_remaining\n\n // Helper to summarize a quota snapshot\n function summarizeQuota(name: string, snap: QuotaDetail | undefined) {\n if (!snap) return `${name}: N/A`\n const total = snap.entitlement\n const used = total - snap.remaining\n const percentUsed = total > 0 ? (used / total) * 100 : 0\n const percentRemaining = snap.percent_remaining\n return `${name}: ${used}/${total} used (${percentUsed.toFixed(1)}% used, ${percentRemaining.toFixed(1)}% remaining)`\n }\n\n const premiumLine = `Premium: ${premiumUsed}/${premiumTotal} used (${premiumPercentUsed.toFixed(1)}% used, ${premiumPercentRemaining.toFixed(1)}% remaining)`\n const chatLine = summarizeQuota(\"Chat\", usage.quota_snapshots.chat)\n const completionsLine = summarizeQuota(\n \"Completions\",\n usage.quota_snapshots.completions,\n )\n\n consola.box(\n `Copilot Usage (plan: ${usage.copilot_plan})\\n`\n + `Quota resets: ${usage.quota_reset_date}\\n`\n + `\\nQuotas:\\n`\n + ` ${premiumLine}\\n`\n + ` ${chatLine}\\n`\n + ` ${completionsLine}`,\n )\n } catch (err) {\n consola.error(\"Failed to fetch Copilot usage:\", err)\n process.exit(1)\n }\n },\n})\n"],"mappings":";;;;;;AAUA,MAAa,aAAa,cAAc;CACtC,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM,MAAM;EACV,MAAM,YAAY;EAClB,MAAM,iBAAiB;EACvB,IAAI;GACF,MAAM,QAAQ,MAAM,gBAAgB;GACpC,MAAM,UAAU,MAAM,gBAAgB;GACtC,MAAM,eAAe,QAAQ;GAC7B,MAAM,cAAc,eAAe,QAAQ;GAC3C,MAAM,qBACJ,eAAe,IAAK,cAAc,eAAgB,MAAM;GAC1D,MAAM,0BAA0B,QAAQ;GAGxC,SAAS,eAAe,MAAc,MAA+B;IACnE,IAAI,CAAC,MAAM,OAAO,GAAG,KAAK;IAC1B,MAAM,QAAQ,KAAK;IACnB,MAAM,OAAO,QAAQ,KAAK;IAC1B,MAAM,cAAc,QAAQ,IAAK,OAAO,QAAS,MAAM;IACvD,MAAM,mBAAmB,KAAK;IAC9B,OAAO,GAAG,KAAK,IAAI,KAAK,GAAG,MAAM,SAAS,YAAY,QAAQ,CAAC,EAAE,UAAU,iBAAiB,QAAQ,CAAC,EAAE;GACzG;GAEA,MAAM,cAAc,YAAY,YAAY,GAAG,aAAa,SAAS,mBAAmB,QAAQ,CAAC,EAAE,UAAU,wBAAwB,QAAQ,CAAC,EAAE;GAChJ,MAAM,WAAW,eAAe,QAAQ,MAAM,gBAAgB,IAAI;GAClE,MAAM,kBAAkB,eACtB,eACA,MAAM,gBAAgB,WACxB;GAEA,QAAQ,IACN,wBAAwB,MAAM,aAAa,mBACtB,MAAM,iBAAiB,iBAEnC,YAAY,MACZ,SAAS,MACT,iBACX;EACF,SAAS,KAAK;GACZ,QAAQ,MAAM,kCAAkC,GAAG;GACnD,QAAQ,KAAK,CAAC;EAChB;CACF;AACF,CAAC"}
|
|
@@ -1,26 +1,41 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { o as removeOwnClaudeConfigMirror, r as ensureClaudeConfigMirror, t as PATHS, u as writeArtifactCredsToMirror } from "./paths-
|
|
3
|
-
import { A as state, d as resolveModel } from "./token-
|
|
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";
|
|
2
|
+
import { o as removeOwnClaudeConfigMirror, r as ensureClaudeConfigMirror, t as PATHS, u as writeArtifactCredsToMirror } from "./paths-Ci485qSJ.js";
|
|
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 {
|
|
6
|
-
import { n as hookLauncherDegradedWarning, r as resolveSelfInvocation } from "./self-invocation-
|
|
7
|
-
import { i as launchChild, r as getCodexVersion, t as provisionToolbelt } from "./provision-
|
|
8
|
-
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-
|
|
9
|
-
import { t as liveExec } from "./orchestration-
|
|
10
|
-
import { c as repoRoot, d as trustRepo, l as stopGateEnabledForRepo, s as repoFingerprint, t as fileBaselineStore } from "./stop-gate-policy-
|
|
11
|
-
import { l as guardToolMatcher, n as activeDispatchModes, r as buildWorkerGuardHookCommand } from "./worker-dispatch-
|
|
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-
|
|
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";
|
|
6
|
+
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 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
|
+
import { t as liveExec } from "./orchestration-BiGCEwbH.js";
|
|
10
|
+
import { c as repoRoot, d as trustRepo, l as stopGateEnabledForRepo, s as repoFingerprint, t as fileBaselineStore } from "./stop-gate-policy-DMr3KVmw.js";
|
|
11
|
+
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
13
|
import { r as hookMcpRuntimeFromEnv } from "./hook-mcp-client-DBvm9608.js";
|
|
14
|
-
import { i as planReviewEnabled, t as buildPlanReviewHookCommand } from "./plan-review-hook-
|
|
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 { t as buildPromptSubmitHookCommand } from "./prompt-submit-hook-
|
|
17
|
-
import { i as assertShapingInstalled, n as buildFirstMateGuardHookCommand, t as FIRST_MATE_GUARD_MATCHER } from "./internal-first-mate-guard-
|
|
14
|
+
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 { t as buildPromptSubmitHookCommand } from "./prompt-submit-hook-IMl7ssfr.js";
|
|
17
|
+
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";
|
|
18
19
|
import { defineCommand } from "citty";
|
|
19
20
|
import consola from "consola";
|
|
20
21
|
import path from "node:path";
|
|
21
22
|
import { randomBytes } from "node:crypto";
|
|
22
23
|
import { tmpdir } from "node:os";
|
|
23
24
|
import process from "node:process";
|
|
25
|
+
//#region src/lib/orchestration/fast-dispatch-hook.ts
|
|
26
|
+
/** Sentinel preserved through claude.ts's optional codex-MCP catch. */
|
|
27
|
+
var FastDispatchGuardInstallError = class extends Error {
|
|
28
|
+
constructor(message) {
|
|
29
|
+
super(message);
|
|
30
|
+
this.name = "FastDispatchGuardInstallError";
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
/** Assert fast launches never spawn without their native dispatch ACL. */
|
|
34
|
+
function assertFastDispatchGuardInstalled(fastProfile, installationSucceeded) {
|
|
35
|
+
if (fastProfile && !installationSucceeded) throw new FastDispatchGuardInstallError("fast profile requires the native Task/Agent ACL hook, but it could not be installed; refusing to start an unguarded fast session.");
|
|
36
|
+
}
|
|
37
|
+
/** This module is intentionally stateless; callers own launch cleanup. */
|
|
38
|
+
//#endregion
|
|
24
39
|
//#region src/lib/injected-skills/artifact-review-skill.ts
|
|
25
40
|
const ARTIFACT_REVIEW_SKILL = {
|
|
26
41
|
name: "gh-artifact-review",
|
|
@@ -94,6 +109,29 @@ To let the human act on the artifact (not just comment), emit declarative contro
|
|
|
94
109
|
`
|
|
95
110
|
};
|
|
96
111
|
//#endregion
|
|
112
|
+
//#region src/lib/fast-launch-cleanup.ts
|
|
113
|
+
function createFastLaunchCleanup(deps) {
|
|
114
|
+
let cleanupPromise;
|
|
115
|
+
return () => {
|
|
116
|
+
if (cleanupPromise) return cleanupPromise;
|
|
117
|
+
cleanupPromise = (async () => {
|
|
118
|
+
try {
|
|
119
|
+
await deps.server?.close(true);
|
|
120
|
+
} catch {}
|
|
121
|
+
try {
|
|
122
|
+
await deps.stopKeepAwake();
|
|
123
|
+
} catch {}
|
|
124
|
+
if (deps.runtimeCleanup) try {
|
|
125
|
+
await deps.runtimeCleanup();
|
|
126
|
+
} catch {}
|
|
127
|
+
try {
|
|
128
|
+
await deps.removeMirror();
|
|
129
|
+
} catch {}
|
|
130
|
+
})();
|
|
131
|
+
return cleanupPromise;
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
//#endregion
|
|
97
135
|
//#region src/claude.ts
|
|
98
136
|
function isFirstMateSkillName(name) {
|
|
99
137
|
return name === "gh-first-mate" || name === "gh-first-mate-scaffold" || name === "gh-first-mate-operate" || name === "gh-first-mate-conduct";
|
|
@@ -214,6 +252,12 @@ const claude = defineCommand({
|
|
|
214
252
|
process.exit(1);
|
|
215
253
|
}
|
|
216
254
|
const parsed = parseSharedArgs(args);
|
|
255
|
+
const requestedLaunchProfileId = resolveLaunchProfile(args.model);
|
|
256
|
+
const codexMcpEnabled = args["codex-mcp"] !== false;
|
|
257
|
+
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);
|
|
260
|
+
}
|
|
217
261
|
if (args.stealth) {
|
|
218
262
|
parsed.extendedBetas = false;
|
|
219
263
|
consola.info("Stealth mode: VS Code-only beta filtering. Leverage features disabled.");
|
|
@@ -247,24 +291,52 @@ const claude = defineCommand({
|
|
|
247
291
|
process.exit(1);
|
|
248
292
|
}
|
|
249
293
|
runSelfUpdate({ selfUpdate: args["self-update"] !== false });
|
|
294
|
+
const cleanupPreMirrorFailure = createFastLaunchCleanup({
|
|
295
|
+
server,
|
|
296
|
+
stopKeepAwake,
|
|
297
|
+
removeMirror: removeOwnClaudeConfigMirror
|
|
298
|
+
});
|
|
250
299
|
try {
|
|
251
300
|
await ensureClaudeConfigMirror();
|
|
252
301
|
} catch (err) {
|
|
253
302
|
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
|
+
await cleanupPreMirrorFailure();
|
|
254
304
|
process.exit(1);
|
|
255
305
|
}
|
|
256
306
|
enableFileLogging();
|
|
307
|
+
let fastRuntimeCleanup;
|
|
308
|
+
let fastLaunchId;
|
|
309
|
+
let fastCleanupPromise;
|
|
310
|
+
const disposeFastRuntime = async () => {
|
|
311
|
+
if (!fastRuntimeCleanup) return;
|
|
312
|
+
fastCleanupPromise ??= fastRuntimeCleanup();
|
|
313
|
+
await fastCleanupPromise;
|
|
314
|
+
};
|
|
315
|
+
const resetFastRuntimeOwnership = () => {
|
|
316
|
+
fastRuntimeCleanup = void 0;
|
|
317
|
+
fastLaunchId = void 0;
|
|
318
|
+
};
|
|
319
|
+
const cleanupFastLaunch = createFastLaunchCleanup({
|
|
320
|
+
server,
|
|
321
|
+
stopKeepAwake,
|
|
322
|
+
removeMirror: removeOwnClaudeConfigMirror,
|
|
323
|
+
runtimeCleanup: async () => {
|
|
324
|
+
if (fastRuntimeCleanup) await fastRuntimeCleanup();
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
const fastFatal = async (message) => {
|
|
328
|
+
consola.error(message);
|
|
329
|
+
process.stderr.write(`${message}\n`);
|
|
330
|
+
await cleanupFastLaunch();
|
|
331
|
+
process.exit(1);
|
|
332
|
+
throw new Error("process.exit returned unexpectedly");
|
|
333
|
+
};
|
|
257
334
|
const usingDefault = !args.model?.trim();
|
|
258
335
|
const requestedSlug = resolveLeadSlugArg(args.model);
|
|
259
336
|
const launchProfileId = resolveLaunchProfile(args.model);
|
|
260
337
|
if (launchProfileId === "fast") {
|
|
261
338
|
const prereqCheck = validateFastProfilePrerequisites(state.models);
|
|
262
|
-
if (!prereqCheck.ok)
|
|
263
|
-
const message = formatFastPrerequisiteFailure(prereqCheck.missing);
|
|
264
|
-
consola.error(message);
|
|
265
|
-
process.stderr.write(`${message}\n`);
|
|
266
|
-
process.exit(1);
|
|
267
|
-
}
|
|
339
|
+
if (!prereqCheck.ok) await fastFatal(formatFastPrerequisiteFailure(prereqCheck.missing));
|
|
268
340
|
}
|
|
269
341
|
let chosenSlug = launchProfileId === "fast" ? requestedSlug.endsWith("[1m]") ? `${LUNA_DRIVER_ALIAS_ID}[1m]` : LUNA_DRIVER_ALIAS_ID : requestedSlug;
|
|
270
342
|
let resolvedSlug = launchProfileId === "fast" ? resolveModel(requestedSlug) : resolveModel(chosenSlug);
|
|
@@ -312,12 +384,13 @@ const claude = defineCommand({
|
|
|
312
384
|
let onShutdown = baseShutdown;
|
|
313
385
|
let peerAwarenessSnippet;
|
|
314
386
|
let peerAwarenessSummary;
|
|
315
|
-
let
|
|
387
|
+
let fastWiringComplete = launchProfileId !== "fast";
|
|
316
388
|
const nativeAgentModels = launchProfileId === "fast" ? {
|
|
317
389
|
scout: fastScoutModel(),
|
|
318
390
|
implementer: fastImplementerModel(),
|
|
319
391
|
reviewer: fastReviewerModel(),
|
|
320
|
-
planner: fastPlannerModel()
|
|
392
|
+
planner: fastPlannerModel(),
|
|
393
|
+
critic: fastCriticModel()
|
|
321
394
|
} : {
|
|
322
395
|
implementer: nativeSubagentModel(),
|
|
323
396
|
"implementer-fast": implementerFastModel(),
|
|
@@ -336,7 +409,6 @@ const claude = defineCommand({
|
|
|
336
409
|
budgetLead: isBudgetClaudeLead(chosenSlug),
|
|
337
410
|
profile: launchProfileId
|
|
338
411
|
};
|
|
339
|
-
const codexMcpEnabled = args["codex-mcp"] !== false;
|
|
340
412
|
const selfInvocation = await resolveSelfInvocation();
|
|
341
413
|
{
|
|
342
414
|
const warning = hookLauncherDegradedWarning(selfInvocation);
|
|
@@ -365,7 +437,7 @@ const claude = defineCommand({
|
|
|
365
437
|
if (!isFastProfile && fleetToolsEnabled()) enabledGroups.push("fleet");
|
|
366
438
|
if (!isFastProfile && agentToolsEnabled()) enabledGroups.push("first-mate");
|
|
367
439
|
const { keys: groupKeys, skipped: skippedGroups } = await resolveGroupKeysFromMirror(enabledGroups);
|
|
368
|
-
if (isFastProfile && fastOracleModel() == null) throw new Error("fast profile prerequisite drift: exact
|
|
440
|
+
if (isFastProfile && (fastOracleModel() == null || fastCriticModel() == null)) throw new Error("fast profile prerequisite drift: exact Oracle or critic model no longer resolves");
|
|
369
441
|
const runtime = await writePeerMcpRuntimeFiles(serverUrl, {
|
|
370
442
|
codexCli: backend === "cli",
|
|
371
443
|
selfInvocation,
|
|
@@ -388,13 +460,15 @@ const claude = defineCommand({
|
|
|
388
460
|
...isFastProfile ? {
|
|
389
461
|
fastProfile: true,
|
|
390
462
|
plannerModel: nativeAgentModels.planner,
|
|
463
|
+
criticModel: nativeAgentModels.critic,
|
|
391
464
|
scoutEffort: FAST_SCOUT_EFFORT,
|
|
392
465
|
implementerEffort: "max",
|
|
393
466
|
reviewerEffort: FAST_REVIEWER_EFFORT,
|
|
394
|
-
plannerEffort: FAST_PLANNER_EFFORT
|
|
467
|
+
plannerEffort: FAST_PLANNER_EFFORT,
|
|
468
|
+
criticEffort: FAST_CRITIC_EFFORT
|
|
395
469
|
} : {}
|
|
396
470
|
});
|
|
397
|
-
|
|
471
|
+
if (isFastProfile) fastRuntimeCleanup = runtime.cleanup;
|
|
398
472
|
const launchSecret = randomBytes(32).toString("hex");
|
|
399
473
|
const launchEntry = registerLaunch({
|
|
400
474
|
profileId: launchProfileId,
|
|
@@ -403,10 +477,22 @@ const claude = defineCommand({
|
|
|
403
477
|
allowedGroups: fastDescriptor.allowedGroups,
|
|
404
478
|
allowedPersonas: fastDescriptor.personaAllowlist
|
|
405
479
|
});
|
|
480
|
+
if (isFastProfile) fastLaunchId = launchEntry.launchId;
|
|
406
481
|
envVars.ANTHROPIC_CUSTOM_HEADERS = envVars.ANTHROPIC_CUSTOM_HEADERS ? `${envVars.ANTHROPIC_CUSTOM_HEADERS}\n${LAUNCH_SECRET_HEADER}: ${launchSecret}` : `${LAUNCH_SECRET_HEADER}: ${launchSecret}`;
|
|
407
482
|
envVars.GH_ROUTER_HOOK_MCP_URL = serverUrl;
|
|
408
483
|
envVars.GH_ROUTER_HOOK_NONCE = runtime.nonce;
|
|
409
|
-
onShutdown = async () => {
|
|
484
|
+
onShutdown = isFastProfile ? async () => {
|
|
485
|
+
try {
|
|
486
|
+
unregisterLaunch(launchEntry.launchId);
|
|
487
|
+
} finally {
|
|
488
|
+
try {
|
|
489
|
+
await runtime.cleanup();
|
|
490
|
+
} finally {
|
|
491
|
+
resetFastRuntimeOwnership();
|
|
492
|
+
await baseShutdown();
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
} : async () => {
|
|
410
496
|
unregisterLaunch(launchEntry.launchId);
|
|
411
497
|
await runtime.cleanup();
|
|
412
498
|
await baseShutdown();
|
|
@@ -431,6 +517,19 @@ const claude = defineCommand({
|
|
|
431
517
|
} else if (args["codex-mcp-only"] === true) consola.warn("--codex-mcp-only has no effect when peer MCP is wired via the mirrored .claude.json (the user's existing user-scope MCPs in the snapshot are still visible). Pass --no-codex-mcp to skip peer-MCP wiring entirely.");
|
|
432
518
|
subagentVisibility = injected.ok ? `subagent-visible (mirrored mcpServers: [${injected.serversAdded.join(", ")}])` : `subagent-INVISIBLE (collision on user-side mcpServers: [${injected.conflictingServers.join(", ")}]; parent-only via --mcp-config)`;
|
|
433
519
|
}
|
|
520
|
+
if (isFastProfile) {
|
|
521
|
+
let fastGuardInstalled = false;
|
|
522
|
+
try {
|
|
523
|
+
const settingsPath = path.join(PATHS.CLAUDE_CONFIG_DIR, "settings.json");
|
|
524
|
+
const guardCommand = buildFastDispatchGuardHookCommand(selfInvocation);
|
|
525
|
+
await injectStopHookIntoSettingsFile(settingsPath, guardCommand, "PreToolUse", 10, FAST_DISPATCH_TOOL_MATCHER);
|
|
526
|
+
fastGuardInstalled = true;
|
|
527
|
+
} catch (err) {
|
|
528
|
+
consola.error(`Could not register the fast native dispatch ACL hook: ${String(err)}`);
|
|
529
|
+
}
|
|
530
|
+
assertFastDispatchGuardInstalled(true, fastGuardInstalled);
|
|
531
|
+
fastWiringComplete = true;
|
|
532
|
+
}
|
|
434
533
|
const personaNames = runtime.personas.map((p) => p.agentName).join(", ");
|
|
435
534
|
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).` : "";
|
|
436
535
|
process.stderr.write(`Peer MCP wired (backend=${backend}, personas=[${personaNames}], subagent .md files=${runtime.agentMdPaths.length}, ${subagentVisibility}).${skippedNote}\n`);
|
|
@@ -633,6 +732,7 @@ const claude = defineCommand({
|
|
|
633
732
|
fleetAvailable: fleetToolsEnabled(),
|
|
634
733
|
agentToolsAvailable: agentToolsEnabled(),
|
|
635
734
|
...nativeAvailability,
|
|
735
|
+
profile: launchProfileId,
|
|
636
736
|
groupKeys
|
|
637
737
|
});
|
|
638
738
|
peerAwarenessSnippet = peerSnippet;
|
|
@@ -643,6 +743,7 @@ const claude = defineCommand({
|
|
|
643
743
|
fleetAvailable: fleetToolsEnabled(),
|
|
644
744
|
agentToolsAvailable: agentToolsEnabled(),
|
|
645
745
|
...nativeAvailability,
|
|
746
|
+
profile: launchProfileId,
|
|
646
747
|
nativeAgentModels,
|
|
647
748
|
groupKeys
|
|
648
749
|
});
|
|
@@ -657,13 +758,24 @@ const claude = defineCommand({
|
|
|
657
758
|
consola.warn(`Style-directive CLAUDE.md prepend failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
658
759
|
}
|
|
659
760
|
} catch (err) {
|
|
761
|
+
if (launchProfileId === "fast") {
|
|
762
|
+
if (fastLaunchId) unregisterLaunch(fastLaunchId);
|
|
763
|
+
await disposeFastRuntime().catch(() => {});
|
|
764
|
+
await server.close(true).catch(() => {});
|
|
765
|
+
await baseShutdown().catch(() => {});
|
|
766
|
+
resetFastRuntimeOwnership();
|
|
767
|
+
const message = `Fast profile wiring failed; refusing to launch an unguarded session: ${err instanceof Error ? err.message : String(err)}`;
|
|
768
|
+
consola.error(message);
|
|
769
|
+
process.stderr.write(`${message}\n`);
|
|
770
|
+
process.exit(1);
|
|
771
|
+
}
|
|
660
772
|
consola.warn(`Peer MCP wiring failed (claude will launch without it): ${err instanceof Error ? err.message : String(err)}`);
|
|
661
773
|
}
|
|
662
774
|
extraArgs.push("--append-system-prompt", peerAwarenessSnippet && peerAwarenessSummary ? `${OPERATING_DEFAULTS_DIGEST}\n\n${peerAwarenessSummary}` : OPERATING_DEFAULTS_DIGEST);
|
|
663
775
|
try {
|
|
664
776
|
await prependOperatingDefaultsToMirroredClaudeMd(buildOperatingDefaultsDirective({
|
|
665
777
|
...nativeAvailability,
|
|
666
|
-
fastRuntimeAvailable:
|
|
778
|
+
fastRuntimeAvailable: fastWiringComplete
|
|
667
779
|
}));
|
|
668
780
|
} catch (err) {
|
|
669
781
|
consola.warn(`Operating-defaults CLAUDE.md prepend failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -685,4 +797,4 @@ const claude = defineCommand({
|
|
|
685
797
|
//#endregion
|
|
686
798
|
export { claude };
|
|
687
799
|
|
|
688
|
-
//# sourceMappingURL=claude-
|
|
800
|
+
//# sourceMappingURL=claude-DNmxk-Rm.js.map
|