github-router 0.3.261 → 0.3.269

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 (78) hide show
  1. package/dist/{attribution-settings-Bl0HHJQF.js → attribution-settings-B1txv_Lk.js} +4 -4
  2. package/dist/{attribution-settings-Bl0HHJQF.js.map → attribution-settings-B1txv_Lk.js.map} +1 -1
  3. package/dist/{auth-I8k2OOvA.js → auth-r-my7efo.js} +3 -3
  4. package/dist/{auth-I8k2OOvA.js.map → auth-r-my7efo.js.map} +1 -1
  5. package/dist/browser-bridge/index.js +67 -27
  6. package/dist/browser-ext/manifest.json +1 -1
  7. package/dist/{check-usage-SOn7-cWc.js → check-usage-CZr2ZkG0.js} +4 -4
  8. package/dist/{check-usage-SOn7-cWc.js.map → check-usage-CZr2ZkG0.js.map} +1 -1
  9. package/dist/{claude-CEaI47j7.js → claude-BjNY0J6e.js} +15 -15
  10. package/dist/{claude-CEaI47j7.js.map → claude-BjNY0J6e.js.map} +1 -1
  11. package/dist/{codex-C6Eyz3EV.js → codex-CoRWpkHL.js} +5 -6
  12. package/dist/{codex-C6Eyz3EV.js.map → codex-CoRWpkHL.js.map} +1 -1
  13. package/dist/{debug-vshv4nIv.js → debug-CuuxCk_J.js} +2 -2
  14. package/dist/{debug-vshv4nIv.js.map → debug-CuuxCk_J.js.map} +1 -1
  15. package/dist/engine-DpVC7HRL.js +2 -0
  16. package/dist/{exec-DTO2oin0.js → exec-y8C_MU8A.js} +89 -18
  17. package/dist/exec-y8C_MU8A.js.map +1 -0
  18. package/dist/{gate-discovery-BnPhH_AC.js → gate-discovery-D-7oua8b.js} +6 -6
  19. package/dist/{gate-discovery-BnPhH_AC.js.map → gate-discovery-D-7oua8b.js.map} +1 -1
  20. package/dist/{get-copilot-usage-CYpAsYrM.js → get-copilot-usage-CFEpeA7E.js} +2 -2
  21. package/dist/{get-copilot-usage-CYpAsYrM.js.map → get-copilot-usage-CFEpeA7E.js.map} +1 -1
  22. package/dist/{internal-artifact-open-CZGO831M.js → internal-artifact-open-CDqPfegE.js} +2 -2
  23. package/dist/{internal-artifact-open-CZGO831M.js.map → internal-artifact-open-CDqPfegE.js.map} +1 -1
  24. package/dist/{internal-plan-review-6gkcOAjT.js → internal-plan-review-CH9qTHoZ.js} +3 -3
  25. package/dist/{internal-plan-review-6gkcOAjT.js.map → internal-plan-review-CH9qTHoZ.js.map} +1 -1
  26. package/dist/{internal-prompt-submit-CSJR24-y.js → internal-prompt-submit-Bve1s4z_.js} +5 -5
  27. package/dist/{internal-prompt-submit-CSJR24-y.js.map → internal-prompt-submit-Bve1s4z_.js.map} +1 -1
  28. package/dist/{internal-session-bind-DtSBTkQe.js → internal-session-bind-Cc8bMXHK.js} +2 -2
  29. package/dist/{internal-session-bind-DtSBTkQe.js.map → internal-session-bind-Cc8bMXHK.js.map} +1 -1
  30. package/dist/{internal-stop-hook-CiflCJO-.js → internal-stop-hook-Db5o9RcZ.js} +6 -6
  31. package/dist/{internal-stop-hook-CiflCJO-.js.map → internal-stop-hook-Db5o9RcZ.js.map} +1 -1
  32. package/dist/{internal-stop-review-_1Mqz7eT.js → internal-stop-review-CWE7_QVv.js} +2 -2
  33. package/dist/{internal-stop-review-_1Mqz7eT.js.map → internal-stop-review-CWE7_QVv.js.map} +1 -1
  34. package/dist/{lifecycle-DjC9tC1A.js → lifecycle-0XrazT05.js} +2 -2
  35. package/dist/{lifecycle-DjC9tC1A.js.map → lifecycle-0XrazT05.js.map} +1 -1
  36. package/dist/lifecycle-2M0IThRr.js +2 -0
  37. package/dist/{lifecycle-Bd1Fyf4B.js → lifecycle-AgNOtFRv.js} +3 -3
  38. package/dist/{lifecycle-Bd1Fyf4B.js.map → lifecycle-AgNOtFRv.js.map} +1 -1
  39. package/dist/lifecycle-C8kFsAj-.js +2 -0
  40. package/dist/main.js +14 -14
  41. package/dist/{models-uQgsKNNC.js → models-CJLt4XjP.js} +35 -30
  42. package/dist/models-CJLt4XjP.js.map +1 -0
  43. package/dist/{orchestration-BiZviyam.js → orchestration-B_Q3ncXI.js} +3 -3
  44. package/dist/{orchestration-BiZviyam.js.map → orchestration-B_Q3ncXI.js.map} +1 -1
  45. package/dist/paths-BbHtQAOs.js +2 -0
  46. package/dist/{paths-BXrbboAS.js → paths-Bg1_DWhi.js} +3 -3
  47. package/dist/{paths-BXrbboAS.js.map → paths-Bg1_DWhi.js.map} +1 -1
  48. package/dist/{peer-mcp-personas-V4AXhm9B.js → peer-mcp-personas-DSbBlgFt.js} +119 -45
  49. package/dist/peer-mcp-personas-DSbBlgFt.js.map +1 -0
  50. package/dist/{plan-review-hook-Bo4y1r3j.js → plan-review-hook-BKOcW5s4.js} +3 -3
  51. package/dist/{plan-review-hook-Bo4y1r3j.js.map → plan-review-hook-BKOcW5s4.js.map} +1 -1
  52. package/dist/{prompt-submit-hook-BFRFLSk5.js → prompt-submit-hook-F7Zih_au.js} +2 -2
  53. package/dist/{prompt-submit-hook-BFRFLSk5.js.map → prompt-submit-hook-F7Zih_au.js.map} +1 -1
  54. package/dist/{provision-BLwsOFCI.js → provision-CA-xwnFu.js} +5 -5
  55. package/dist/{provision-BLwsOFCI.js.map → provision-CA-xwnFu.js.map} +1 -1
  56. package/dist/{serve-De-kqWXM.js → serve-DHny4ewF.js} +20 -15
  57. package/dist/{serve-De-kqWXM.js.map → serve-DHny4ewF.js.map} +1 -1
  58. package/dist/{server-setup-BeeT8m-w.js → server-setup-Dd293T1O.js} +479 -75
  59. package/dist/server-setup-Dd293T1O.js.map +1 -0
  60. package/dist/{start-DEC0M8UH.js → start-P2rmHBkL.js} +3 -3
  61. package/dist/{start-DEC0M8UH.js.map → start-P2rmHBkL.js.map} +1 -1
  62. package/dist/{stop-gate-hook-DoYD9Wt8.js → stop-gate-hook-BqpumJtl.js} +12 -7
  63. package/dist/{stop-gate-hook-DoYD9Wt8.js.map → stop-gate-hook-BqpumJtl.js.map} +1 -1
  64. package/dist/{stop-gate-policy-CoMKWSsS.js → stop-gate-policy-C0XOBZhB.js} +3 -3
  65. package/dist/{stop-gate-policy-CoMKWSsS.js.map → stop-gate-policy-C0XOBZhB.js.map} +1 -1
  66. package/dist/{token-DWknHe9M.js → token-C_q95GF7.js} +124 -14
  67. package/dist/{token-DWknHe9M.js.map → token-C_q95GF7.js.map} +1 -1
  68. package/package.json +2 -2
  69. package/dist/engine-B4Ohhv5i.js +0 -2
  70. package/dist/exec-DTO2oin0.js.map +0 -1
  71. package/dist/file-log-reporter-vI8qCFNM.js +0 -158
  72. package/dist/file-log-reporter-vI8qCFNM.js.map +0 -1
  73. package/dist/lifecycle-CRTWEbiP.js +0 -2
  74. package/dist/lifecycle-DUPXAOQS.js +0 -2
  75. package/dist/models-uQgsKNNC.js.map +0 -1
  76. package/dist/paths-Dz1WyRJG.js +0 -2
  77. package/dist/peer-mcp-personas-V4AXhm9B.js.map +0 -1
  78. package/dist/server-setup-BeeT8m-w.js.map +0 -1
@@ -1,5 +1,5 @@
1
- import { i as ensurePaths, t as PATHS } from "./paths-BXrbboAS.js";
2
- import { O as state, r as setupGitHubToken } from "./token-DWknHe9M.js";
1
+ import { i as ensurePaths, t as PATHS } from "./paths-Bg1_DWhi.js";
2
+ import { O as state, r as setupGitHubToken } from "./token-C_q95GF7.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-I8k2OOvA.js.map
44
+ //# sourceMappingURL=auth-r-my7efo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-I8k2OOvA.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"}
1
+ {"version":3,"file":"auth-r-my7efo.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"}
@@ -3686,6 +3686,65 @@ function pendingDropClient(client) {
3686
3686
  }
3687
3687
  }
3688
3688
  //#endregion
3689
+ //#region src/browser-bridge/ws-connection.ts
3690
+ /**
3691
+ * Attach heartbeat + teardown handling to one client socket.
3692
+ *
3693
+ * Message dispatch stays in index.ts: it needs the bridge's request plumbing,
3694
+ * whereas this is pure lifecycle. Returns a handle so a caller (or a test) can
3695
+ * observe teardown without reaching into the socket.
3696
+ */
3697
+ function attachWsLifecycle(ws, opts) {
3698
+ const setIntervalFn = opts.setIntervalFn ?? ((fn, ms) => setInterval(fn, ms));
3699
+ const clearIntervalFn = opts.clearIntervalFn ?? ((handle) => clearInterval(handle));
3700
+ let alive = true;
3701
+ let misses = 0;
3702
+ let tornDown = false;
3703
+ const teardown = () => {
3704
+ if (tornDown) return;
3705
+ tornDown = true;
3706
+ clearIntervalFn(heartbeat);
3707
+ opts.onTeardown(ws);
3708
+ };
3709
+ const heartbeat = setIntervalFn(() => {
3710
+ if (!alive) {
3711
+ misses++;
3712
+ if (misses >= opts.heartbeatMissLimit) {
3713
+ teardown();
3714
+ try {
3715
+ ws.terminate();
3716
+ } catch {}
3717
+ return;
3718
+ }
3719
+ }
3720
+ alive = false;
3721
+ try {
3722
+ ws.ping();
3723
+ } catch {}
3724
+ }, opts.heartbeatMs);
3725
+ ws.on("pong", () => {
3726
+ alive = true;
3727
+ misses = 0;
3728
+ });
3729
+ ws.on("error", () => {
3730
+ teardown();
3731
+ try {
3732
+ ws.terminate();
3733
+ } catch {}
3734
+ });
3735
+ ws.on("close", () => {
3736
+ teardown();
3737
+ });
3738
+ return {
3739
+ get tornDown() {
3740
+ return tornDown;
3741
+ },
3742
+ get misses() {
3743
+ return misses;
3744
+ }
3745
+ };
3746
+ }
3747
+ //#endregion
3689
3748
  //#region src/browser-bridge/index.ts
3690
3749
  try {
3691
3750
  const debugLog = path.join(tmpdir(), "github-router-bridge-boot.log");
@@ -3798,26 +3857,10 @@ httpServer.on("upgrade", (req, socket, head) => {
3798
3857
  });
3799
3858
  });
3800
3859
  function handleWsConnection(ws) {
3801
- let alive = true;
3802
- let misses = 0;
3803
- const heartbeat = setInterval(() => {
3804
- if (!alive) {
3805
- misses++;
3806
- if (misses >= HEARTBEAT_MISS_LIMIT) {
3807
- clearInterval(heartbeat);
3808
- try {
3809
- ws.terminate();
3810
- } catch {}
3811
- }
3812
- }
3813
- alive = false;
3814
- try {
3815
- ws.ping();
3816
- } catch {}
3817
- }, HEARTBEAT_MS);
3818
- ws.on("pong", () => {
3819
- alive = true;
3820
- misses = 0;
3860
+ attachWsLifecycle(ws, {
3861
+ heartbeatMs: HEARTBEAT_MS,
3862
+ heartbeatMissLimit: HEARTBEAT_MISS_LIMIT,
3863
+ onTeardown: (client) => pendingDropClient(client)
3821
3864
  });
3822
3865
  ws.on("message", (data) => {
3823
3866
  let msg;
@@ -3834,13 +3877,10 @@ function handleWsConnection(ws) {
3834
3877
  }));
3835
3878
  return;
3836
3879
  }
3837
- if (typeof msg.id !== "string" || typeof msg.tool !== "string") return;
3838
- pendingAdd(msg.id, ws, PENDING_TTL_MS, (resp) => ws.send(JSON.stringify(resp)));
3839
- sendToBrowser(msg);
3840
- });
3841
- ws.on("close", () => {
3842
- clearInterval(heartbeat);
3843
- pendingDropClient(ws);
3880
+ const req = msg;
3881
+ if (typeof req.id !== "string" || typeof req.tool !== "string") return;
3882
+ pendingAdd(req.id, ws, PENDING_TTL_MS, (resp) => ws.send(JSON.stringify(resp)));
3883
+ sendToBrowser(req);
3844
3884
  });
3845
3885
  }
3846
3886
  let lastBrowserContactMs = 0;
@@ -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.261",
5
+ "version": "0.3.269",
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-BXrbboAS.js";
2
- import { r as setupGitHubToken } from "./token-DWknHe9M.js";
3
- import { t as getCopilotUsage } from "./get-copilot-usage-CYpAsYrM.js";
1
+ import { i as ensurePaths } from "./paths-Bg1_DWhi.js";
2
+ import { r as setupGitHubToken } from "./token-C_q95GF7.js";
3
+ import { t as getCopilotUsage } from "./get-copilot-usage-CFEpeA7E.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-SOn7-cWc.js.map
43
+ //# sourceMappingURL=check-usage-CZr2ZkG0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"check-usage-SOn7-cWc.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
+ {"version":3,"file":"check-usage-CZr2ZkG0.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,19 +1,18 @@
1
- import { $ as reviewerModel, C as buildToolbeltAwareness, Ft as pickClaudeDefault, G as artifactToolsEnabled, J as browserCompoundToolsEnabled, K as brainstormModel, Ot as DEFAULT_CLAUDE_MODEL_FALLBACKS, Q as nativeSubagentModel, S as availableToolCommands, St as warmTreeSitterPool, Tt as shouldUseInsecureTls, W as agentToolsEnabled, X as fleetToolsEnabled, Y as browserToolsEnabled, Z as geminiAvailable, a as buildPeerAwarenessSnippet, et as scoutModel, gt as provisionBrowserAssets, nt as standInToolEnabled, o as buildPeerAwarenessSummary, q as browseAgentEnabled, rt as workerToolsEnabled, tt as scribeModel, vt as colbertDegradedWarning, w as toolbeltEnabled, yt as provisionAndIndexColbert } from "./peer-mcp-personas-V4AXhm9B.js";
2
- import { o as removeOwnClaudeConfigMirror, r as ensureClaudeConfigMirror, t as PATHS, u as writeArtifactCredsToMirror } from "./paths-BXrbboAS.js";
3
- import { O as state, d as resolveModel } from "./token-DWknHe9M.js";
4
- import { r as parseBoolEnv } from "./exec-DTO2oin0.js";
5
- import { a as sharedServerArgs, c as listModelsForEndpoint, d as updateClaude, i as setupAndServe, l as runSelfUpdate, o as startKeepAwake, r as parseSharedArgs, s as stopKeepAwake, t as getClaudeCodeEnvVars, u as checkClaudeVersion } from "./server-setup-BeeT8m-w.js";
6
- import { i as launchChild, r as getCodexVersion, t as provisionToolbelt } from "./provision-BLwsOFCI.js";
7
- 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-DoYD9Wt8.js";
8
- import { t as liveExec } from "./orchestration-BiZviyam.js";
9
- import { c as repoRoot, d as trustRepo, l as stopGateEnabledForRepo, s as repoFingerprint, t as fileBaselineStore } from "./stop-gate-policy-CoMKWSsS.js";
1
+ import { $ as reviewerModel, C as buildToolbeltAwareness, Ft as pickClaudeDefault, G as artifactToolsEnabled, J as browserCompoundToolsEnabled, K as brainstormModel, Ot as DEFAULT_CLAUDE_MODEL_FALLBACKS, Q as nativeSubagentModel, S as availableToolCommands, St as warmTreeSitterPool, Tt as shouldUseInsecureTls, W as agentToolsEnabled, X as fleetToolsEnabled, Y as browserToolsEnabled, Z as geminiAvailable, a as buildPeerAwarenessSnippet, et as scoutModel, gt as provisionBrowserAssets, nt as standInToolEnabled, o as buildPeerAwarenessSummary, q as browseAgentEnabled, rt as workerToolsEnabled, tt as scribeModel, vt as colbertDegradedWarning, w as toolbeltEnabled, yt as provisionAndIndexColbert } from "./peer-mcp-personas-DSbBlgFt.js";
2
+ import { o as removeOwnClaudeConfigMirror, r as ensureClaudeConfigMirror, t as PATHS, u as writeArtifactCredsToMirror } from "./paths-Bg1_DWhi.js";
3
+ import { O as state, d as resolveModel } from "./token-C_q95GF7.js";
4
+ import { r as parseBoolEnv } from "./exec-y8C_MU8A.js";
5
+ import { a as sharedServerArgs, c as listModelsForEndpoint, d as checkClaudeVersion, f as updateClaude, i as setupAndServe, l as enableFileLogging, o as startKeepAwake, r as parseSharedArgs, s as stopKeepAwake, t as getClaudeCodeEnvVars, u as runSelfUpdate } from "./server-setup-Dd293T1O.js";
6
+ import { i as launchChild, r as getCodexVersion, t as provisionToolbelt } from "./provision-CA-xwnFu.js";
7
+ 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-BqpumJtl.js";
8
+ import { t as liveExec } from "./orchestration-B_Q3ncXI.js";
9
+ import { c as repoRoot, d as trustRepo, l as stopGateEnabledForRepo, s as repoFingerprint, t as fileBaselineStore } from "./stop-gate-policy-C0XOBZhB.js";
10
10
  import { l as guardToolMatcher, n as activeDispatchModes, r as buildWorkerGuardHookCommand } from "./worker-dispatch-Bj1uYyG9.js";
11
- import { _ as injectPeerMcpIntoMirror, b as workersKeyOf, c as prependArtifactPanelDirectiveToMirroredClaudeMd, i as OPERATING_DEFAULTS_DIGEST, l as prependOperatingDefaultsToMirroredClaudeMd, m as planModeAllowRules, n as INJECTED_SKILLS, o as appendPeerAwarenessToMirroredClaudeMd, p as injectAllowRules, r as writeInjectedSkill, s as appendToolbeltAwarenessToMirroredClaudeMd, t as injectAttributionSuppressionIntoSettingsFile, u as prependStyleDirectiveToMirroredClaudeMd, v as resolveCodexCliBackend, x as writePeerMcpRuntimeFiles, y as resolveGroupKeysFromMirror } from "./attribution-settings-Bl0HHJQF.js";
12
- import { t as enableFileLogging } from "./file-log-reporter-vI8qCFNM.js";
11
+ import { _ as injectPeerMcpIntoMirror, b as workersKeyOf, c as prependArtifactPanelDirectiveToMirroredClaudeMd, i as OPERATING_DEFAULTS_DIGEST, l as prependOperatingDefaultsToMirroredClaudeMd, m as planModeAllowRules, n as INJECTED_SKILLS, o as appendPeerAwarenessToMirroredClaudeMd, p as injectAllowRules, r as writeInjectedSkill, s as appendToolbeltAwarenessToMirroredClaudeMd, t as injectAttributionSuppressionIntoSettingsFile, u as prependStyleDirectiveToMirroredClaudeMd, v as resolveCodexCliBackend, x as writePeerMcpRuntimeFiles, y as resolveGroupKeysFromMirror } from "./attribution-settings-B1txv_Lk.js";
13
12
  import { r as hookMcpRuntimeFromEnv } from "./hook-mcp-client-DBvm9608.js";
14
- import { i as planReviewEnabled, t as buildPlanReviewHookCommand } from "./plan-review-hook-Bo4y1r3j.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-BnPhH_AC.js";
16
- import { t as buildPromptSubmitHookCommand } from "./prompt-submit-hook-BFRFLSk5.js";
13
+ import { i as planReviewEnabled, t as buildPlanReviewHookCommand } from "./plan-review-hook-BKOcW5s4.js";
14
+ 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-D-7oua8b.js";
15
+ import { t as buildPromptSubmitHookCommand } from "./prompt-submit-hook-F7Zih_au.js";
17
16
  import { i as assertShapingInstalled, n as buildFirstMateGuardHookCommand, t as FIRST_MATE_GUARD_MATCHER } from "./internal-first-mate-guard-La0tIjTU.js";
18
17
  import { defineCommand } from "citty";
19
18
  import consola from "consola";
@@ -401,6 +400,7 @@ const claude = defineCommand({
401
400
  consola.error(`Could not register the operator worker/orchestrate guard hook: ${String(err)}`);
402
401
  }
403
402
  assertShapingInstalled(true, shapingInstalled);
403
+ 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.");
404
404
  }
405
405
  const aiordieSidecar = (process.env.AIORDIE_CLAUDE_BIND ?? "").trim();
406
406
  if (aiordieSidecar.length > 0 && !aiordieSidecar.includes("\"")) try {
@@ -593,4 +593,4 @@ const claude = defineCommand({
593
593
  //#endregion
594
594
  export { claude };
595
595
 
596
- //# sourceMappingURL=claude-CEaI47j7.js.map
596
+ //# sourceMappingURL=claude-BjNY0J6e.js.map